.NET em linux, MAC e iPhone é possivel? Descubra como!

.NET em linux, MAC e iPhone é possível? Descubra como!

Estamos inciando uma nova sessão do blog que irá falar sobre o Projeto Mono, que é a infra estrutura tecnológica Xamarin. Muitas pessoas hoje conhecem o Xamarin, que é a vertente comercial do mono, mas muitas pessoas não conhecem o mono como projeto de Software Livre. Não conhecem como ele foi desenvolvido, nem mesmo as pessoas que ajudaram na construção dessa plataforma. Nesta sessão do blog iremos contar um pouco da história do mono, falando com os próprios desenvolvedores do mono.

Estamos iniciando com a publicação do primeiro artigo sobre o mono, que foi publicado em uma revista de circulação nacional. Com esse artigo – publicado na .NET Magazine em maio de 2010 -contamos mais de 8 anos desde que a Xamarin foi fundada. Esperamos que vocês gostem, e logo teremos artigos inéditos contando um pouco mais dessa história.

Autor: Alessandro Binhara 

Por: Alessandro Binhara

Projeto Mono⠀

Introdução

Hoje é um fato que o mundo mobile veio para ficar com uma avalanche tablets e smartphones, dezenas de fabricantes com hardwares e sistemas operacionais diferentes. Isso implica em ambientes e linguagens de desenvolvimento diferentes. Para as empresas e desenvolvedores isso torna-se um desafio: a escolha da tecnologia a ser usada. Para empresas e profissionais, adotarem uma tecnologia significa investimentos em treinamento, suporte e em algumas situações licenciamento de ferramentas de desenvolvimento.

Nesse ambiente onde a diversidade impera a interoperabilidade entre sistemas operacionais e linguagens torna-se um elemento fundamental e estratégico. Usar uma base de software livre é fundamental para a garantir que as tecnologias serão adaptáveis e terão uma longevidade.

Neste cenário é que o Projeto Mono se apresenta como a melhor opção neste novo mundo de tecnologia que está surgindo. Justo o Projeto Mono que foi por muito tempo ignorado pela comunidade de software livre e um ilustre desconhecido pela comunidade .NET. Hoje não pode mais passar desapercebido por nenhuma das duas comunidades.

Lembro muito bem das diversas edições do FISLI que participei em Porto Alegre em meados de 2003 onde mesmo o JAVA sendo na época uma tecnologia proprietária da SUN tinha seu uso incentivado pela comunidade de Software Livre. E mesmo o Mono tendo nascido como um software livre sendo um clone do .NET recebia críticas somente por se basear em uma tecnologia Microsoft. Muitas foram as críticas do Dr. Richard Stalman criando uma fama de que o Mono não era bom, pois representava uma prisão para que os que se utiliza como tecnologia e o tal “perigo de patente” onde a qualquer momento a Microsoft poderia se utilizar de patentes para acabar com o projeto Mono.

O perigo de patente alardeado pelo bom Doutor não aconteceu, e o primeiro problema de patente aconteceu com o JAVA no caso da Oracle x Google. O inesperado aconteceu: a Microsoft passou a liberar partes vitais do .NET em licença Apache 2.0 os quais tem sido integrado ao Mono e agora criou a DotNET Foundation sendo está uma fundação responsável para cuidar do código aberto liberado pela Microsoft. Os únicos aprisionados a uma linguagem são os usuários do Java que estão impossibilitados de programar para iOS e Windows Phones. Para onde foi a tão falada liberdade do Java? Provavelmente perdida ou escondida nos obscuros planos da Oracle.

Com esse contexto que iniciamos uma série de artigos Cross Mobile e Cross Plataforma usando a plataforma aberta Mono com linguagem C#. O Projeto Mono nasceu para ser uma plataforma 100% portável e com interoperabilidade entre linguagens. Com Mono é possível executar qualquer linguagem não só C#, mas qualquer linguagem. E indo muito além onde uma mesma aplicação pode usar várias linguagens diferente, é nesse momento que se torna interessante usar Mono no Androide ou iOS.

Muitos dos desenvolvedores da plataforma .NET ainda não sabe que é possível rodar aplicativos desenvolvidos com Visual Studio em plataformas não Windows. Por simples desconhecimento, alguns desenvolvedores quando precisam desenvolver para outras plataformas buscam outras tecnologias e acabam tendo custos e retrabalhos desnecessários. Atualmente é possível executar aplicativos .NET com pouco ou nenhum esforço usando um projeto de software livre chamado Mono. Com ele é possível rodar aplicativos escritos em C# em Linux, MacOS, BSD, Android, iPhone e muitas outras plataformas.

Neste artigo pretende-se apresentar o projeto Mono com seu histórico como solução profissional para executar aplicativos .NET em outras plataformas

Múltiplas tecnologias em uma Empresa

Atualmente é muito comum as empresas trabalharem com diversos tipos de plataformas de hardware e software, com isso é importante conseguir que todos esse conjunto de tecnologias sejam capazes de conversar entre si trocando dados e informações. Quando que se encontram problemas técnicos para fazer dois equipamentos conversarem é um custo a mais que as empresas não estão dispostas a pagar.

Por isso a Microsoft tem desenvolvido diversas frentes de trabalho para reforçar a questão da interoperabilidade de seus produtos. Uma das primeiras iniciativas nesse sentido foi a padronização do núcleo da tecnologia .NET (CLR e Linguagem C#) que resultaram em algumas especificações como o ECMA 334 e o ECMA 335. Estes dois documentos descrevem todo o funcionamento dessas tecnologias o que possibilita a qualquer empresa a criar sua própria versão do .NET, para qualquer sistema operacional ou plataforma de hardware. Está iniciativa da Microsoft possibilitou que a comunidade de software livre pudesse criar um clone do .NET em software livre chamado de Projeto Mono (www.Mono-project.com).

 

 ⠀

O Projeto Mono

Em 2001, quando a Microsoft liberou as especificações do .NET, Miguel de Icaza era o criador e líder do projeto GNOME, uma das grandes interfaces gráficas para desktop Linux. Ele estava à procura de uma plataforma capaz de atender a necessidades de sua empresa. Encontrou na plataforma .NET todas as qualidades que procurava. Segundo Miguel de Icaza, “Durante muito tempo, programei em C, mas sempre estava procurando uma linguagem melhor. Nenhuma delas era a minha favorita, eu tinha um sentimento de algo incompleto. O Java estava muito próximo. O problema é que era a linguagem de programação com melhores recursos, mas a Sun parou de ouvir os usuários. A receita da Microsoft foi simples: pegar o Java e fazer todas as alterações que a Sun tinha ignorado. O Java era bom, mas não tanto quanto poderia ter sido. O C# é simplesmente meu sistema ideal de programação

FIGURA 1: Miguel de Icaza, criador do Mono

Com essa visão ele decidiu criar o projeto Mono que seria uma implementação Opensource do .NET, segundo o Miguel o “o Mono é livre: uma fundação sólida voltada a inovação. Eu tenho os mesmos direitos que qualquer pessoa. Posso desenvolver algo em cima do que os outros desenvolveram. Quando se fala no Mono, é exatamente a mesma coisa. Estamos tentando trazer todas as coisas boas que a Microsoft fez com o .NET”. Em 2009 a Microsoft concedeu ao Miguel de Icaza o título de MVP C#.

Iniciou o projeto com alguns desenvolvedores contratados pela sua empresa a Ximian, ela foi comprada pela Novell e atualmente o projeto tem produtos comerciais suportados e vendidos pela empresa. O projeto Mono iniciou pelo desenvolvimento da runtime mono que é a máquina virtual responsável por converter o código IL (Linguagem intermediária) em código de máquina nativo. Simultaneamente foi desenvolvido um compilador C# Opensource o mcs (Mono CSHARP Compiler) e a escrita das bibliotecas do .NET framework como open source.

Grande parte do projeto Mono é escrito em C#. O compilador mcs é escrito totalmente em C#. Em 2001, o mcs conseguia se auto compilar, possuía 10.000 linhas de código, e o tempo de compilação era de 17 segundos. Hoje tem 82.000 linhas, se compila em 2.2s sendo 1.6x mais lento que o csc (CSharp Compiler) que é o compilador da Microsoft. Inicialmente foi utilizado o Visual Studio para as primeiras versões do MCS e do framework Mono. Mas logo que o primeiro bootstrap foi alcançado o desenvolvimento foi migrado para o Linux. Com isso as três partes eram testas e exercitadas simultaneamente. O compilador se auto compilava e ao conjunto de classe do Mono. A runtime fazia uso das bibliotecas do framework Mono exercitando o compilador e as classes. Esta estratégia de trabalho pode ser vista na figura 2.

Figura 2: Modelo de desenvolvimento e evolução do Mono

Está estratégia garantiu uma evolução rápida e muito estável do Mono. O ostensivo uso de testes automatizado é o que tem garantido a grande qualidade do código e evolução rápida do código, mantendo uma qualidade mesmo tendo centenas de pessoas mexendo em todas as partes do código. Nenhum novo código entra no repositório sem estar sendo executado por um teste. Isso é uma garantia para os usuários do Mono mantendo a compatibilidade e fazendo com que as aplicações não quebrem.

Existem várias implementações do compilador C# disponíveis: o mcs, compilador para runtime 1.1; o gmcs o compilador para runtime 2.0; o smcs compilador para rutime 2.1 e para aplicações Moonlight e o lançamento mais recente o dmcs que foi iniciado com Mono 3.6 para C# 4.0. O suporte ao C# 4.0 está disponível na versão de desenvolvimento do Mono, pode ser obtida do site oficial ou diretamente dos repositórios de código do projeto.

Atualmente o Projeto Mono atingiu a marca de seis milhões de linhas de código sendo que deste total 50% são escritas em C# e o restante em outras linguagens como XML, C, Javascript, Visual Basic, C++, SQL, HTML, shellscript, XML, entre outras. Para testar essa grande quantidade de código existem muitos servidores com diversos sistemas operacionais que ficam 24 horas por dia fazendo compilação (figura 3) e rodando os testes. Diariamente são gerados relatórios de problemas encontrados (Figura 4), e estes são automaticamente enviados aos desenvolvedores ou podem ser consultados pela internet. Quando se está portando uma aplicação .NET para outros sistemas em são encontrados problemas pode-se facilmente consultar esses relatórios, ou mesmo os sistemas de relatórios de problemas para verificar que existe algum problema na funcionalidade que a aplicação está usando.

Figura 3: Sistema de relatórios de builds

Figura 4: Relatórios de testes on-line

Funcionalidades Suportadas

O Mono possui compatibilidade binária com o .NET, isso significa que não é necessário recompilar o código para executar em outras plataformas não Windows como Linux, Androide, iOS, etc. Basta copiar seus executáveis ou bibliotecas (DLL) para o sistema desejado e usar o Mono para executá-los. Por exemplo, digamos que seu aplicativo seja chamado de Teste.exe basta invocar o programa Mono e passar como parâmetro o nome do seu aplicativo exemplo: “Mono Texte.exe”. Em algumas versões de Linux, por exemplo, como no caso do Suse Linux o Mono já vem previamente instalado e no momento que você realiza um duplo clique em arquivo executável .NET o sistema operacional automaticamente já invoca o Mono e executa seu aplicativo de maneira fácil e descomplicada.

Com o Mono é possível rodar aplicações .NET em diversos sistemas operacionais e plataformas de hardware não suportadas oficialmente pela Microsoft, na figura 6 é possível visualizar todas as arquiteturas suportadas pelo Mono.

 

Supported Architectures Runtime Operating system
s390, s390x (32 e 64 bits) JIT Linux
SPARC (32) JIT Solaris, Linux
PowerPC JIT Linux, Mac OSX, Wii, PS 3, PS4, PSVita
x86 JIT Linux, FreeBSD, OpenBSD, NetBSD,
Microsoft Windows, Solaris, OS X, Androide
x86-64: AMD64 and EM64T (64 bits) JIT Linux, FreeBSD, OpenBSD,
Solaris, OS X
IA64 Itanium2 (64 bits) JIT Linux
ARM: little and big endian JIT Linux (both old and new ABI), iPhone, Android, Rasperbery
Alpha JIT not maintained. Linux
MIPS JIT Linux
HPPA JIT not maintained Linux

Atualmente o Mono está suportando oficialmente a plataforma .NET 4.5 com suporte praticamente tudo do .NET 4.5 entre as novidades da versão da Serie Mono 3 em diante pode-se citar:

  • Suporte ao C# 5.0, suporte ao F# 3.0
  • Suporte mais completo ao WCF
  • Incorporação dos códigos opensource liberados pela Microsoft como Asp.Net vNext, Entity framework, Razor, Json, suporte aos PCL, suporte a WinRT
  • Novo sistema de Garbage colector o SGEN
  • Compatibilidade com MAC OS10.9

Mas todo projeto de software tem que dar lucro, mesmo os de software livre. E a novel que detinha a maior equipe de Mono não soube tirar proveito dessa tecnologia. Em 2010 todos acompanharam a venda da Novel, e toda a equipe do Mono incluindo o Miguel de Icaza foram despedidos pela Attachmate a empresa que comprou a Novel.

Renascimento do Mono

O desmembramento do time do Mono colocou em risco a continuidade do projeto e muitos da comunidade de software livre novamente lardearam que era o fim do projeto. Mas o software livre é muito mais forte que os egos enciumados de poucos. Pois o projeto Mono conta com mais de 3000 colaboradores em todo mundo. O fato que ocorreu que Miguel de Icaza conseguiu junto a Attachmate os direitos sobre todas as tecnologias Mono desenvolvidas pela Novel, manteve um núcleo dos principais desenvolvedores da Novel e fundou uma nova empresa chamada Xamarin.

A Xamarin retomou do ponto onde tinha parado o desenvolvimento agora com foco total no desenvolvimento de ferramentas Mono para Androide e iOS. O MonoDroid e Monotouch como eram chamados, atualmente são chamados de Xamarin.Android e Xamarin.iOS. Os excelentes resultados trouxeram investidores e hoje a empresa promove um ritmo acelerado de inovação. A empresa passa dos 250 funcionários e tem mais de 60 novas posições em aberto.

O antes MonoDevelop que é a IDE multiplataforma para desenvolvimento C# em diversos ambientes foi rebatizada de Xamarin Studio. A Plataforma Xamarin permite que possamos desenvolver aplicações 100% Nativas Cross Mobile para Androide, iOS, Windows Phone, Linux, Mac reaproveitando até 99% do código produzido, isto tem atraído uma base enorme de usuários. Hoje a Xamarin conta com mais de 670mil usuários da ferramenta registrado e esse número não para de crescer. A lista de clientes corporativos não para de crescer, empresa como BOSH, DOW JONW, Kelloggs, 3M, AT&T, HP, CISCO, AOL, VMWARE, Microsoft.

No brasil dezenas de empresa já estão usando e adotando Xamarin para desenvolver suas soluções mobile podemos citar algumas conhecidas como o CREA-PR (Conselho Regional de Engenharia do PR), DARUMA fabricante de impressoras fiscais, TOLEDO do Brasil fabricante de balanças e hardware especializados.

A Comunidade Mono

Mas a comunidade entorno do Mono e da Xamarin não está parada. Atualmente a comunidade Mono mundo é uma das mais ativas comunidade de software livre. E no brasil também as atividades começaram e esquentar. Um novo portal do projeto Mono internacional será lançado e simultaneamente a comunidade do Projeto Mono Brasil fará o lançamento da versão nacionalizado para o Brasil revigorando o atual site do MonoBrasil (www.monobrasil.com.br).

O pessoal do MonoBrasil anda um tanto ocupado com as atividades do Grupo de Usuários Cross Mobile o GUX (www.gucrossmobile.com.br). O grupo tem promovido um encontro por mês presencial e online em várias cidades do Brasil em: Curitiba no Sebrae-PR, São Paulo na Faculdade BandTec, Maringá no Centro de Computação Sergio Yamada e no Rio de Janeiro na UniRIO. São mais de 700 pessoas espalhadas pelo pais todo que tem assistido palestras sobre o tema Cross Mobile. No site do GUX você poderá ter acesso a todos as palestras já gravadas sobre Xamarin.Android, Xamarin.iOS, mono no Rasperbery e muito mais.

O Projeto Mono deixou de ser uma tecnologia marginal para se tornar uma das melhores opções tecnológicas do momento quando o assunto é portabilidade e dispositivos móveis.

Caso você esteja interessado em conhecer mais sobre o Mono em Mobile como Androide, iOS acesse os sites, cadastre-se nas listas de discussões e no newsletter ou aguarde os próximos artigos que estão por vir.

Newsletter http://monobrasil.com.br/gux.html

 

 ⠀

Portando Aplicações .NET

Uma das questões sempre levantadas por desenvolvedores que desejam portar suas aplicações para o Mono é se vão funcionar realmente. Neste caso existe um aplicativo chamado MoMA (Mono Migration Analizer). Este aplicativo é capaz de analisar os executáveis e dlls .NET e gerar um relatório mostrando diversos aspectos em relação ao aplicativo. O MoMa gera um relatório de métodos da aplicação que podem causar problemas na hora de serem executados pelo Mono. Por exemplo: mostra quais métodos ainda não foram implementados, métodos que estão gerando exceptions e os métodos que usam o P/Invoke.

Figura 7: Tela e Relatório do MoMA

Um grande problema para rodar aplicações .NET em outras plataformas é quando o aplicativo faz uso de chamadas da API do Windows com P/Invoke. Muitas vezes o desenvolver não faz chamadas diretas, mas usa uma biblioteca de terceiro que faz. Neste caso é necessário isolar essas chamadas, pois em outras plataformas a API do Windows não está disponível. Será necessário substituir a chamada ou a biblioteca por uma forma nativa do sistema operacional hospedeiro.

Outro problema muito comum no porte de aplicações é referente ao uso do sistema de arquivos. É preciso verificar caminhos e nomes de arquivos usados pela aplicação. Por exemplo em sistema como o Linux, os nomes de diretórios e arquivos são sensíveis a maiúsculas e minúsculas, trocar a capitalização dos nomes leva a erros de execução no aplicativo. A barra utilizada para navegar em diretórios também é diferente e é importante trabalhar de uma forma a não depender do sistema de arquivos. Por exemplo, na Listagem 1 mostra um exemplo de uma forma de criar um código mais portável para trabalhar como o sistema de arquivos

 

Listagem 1

Caminhos absolutos como “C:\Arquivos de programas” não são recomendáveis, pois em sistemas Unix não existem letras designando discos. Os discos têm um processo de montagem do sistema de arquivos diferentes e não usam letras, usam nomes por extenso.

Interoperabilidade com Linux

Desenvolver aplicativos desktop para Linux sempre foi uma tarefa difícil além da grande opção de linguagens existe uma grande variedade de bibliotecas de interface gráfica. Cada uma com suas bibliotecas diferentes e sem integração entre si sendo os dois maiores ambientes desktop usam o GNOME ou KDE, a diferença básica entre eles é que um utiliza como base uma biblioteca opensource chamada GTK e outra usa uma biblioteca comercial chamada QT. A maioria dos aplicativos desktops para Linux usa as linguagens C ou C++ o que dificulta ainda mais o desenvolvimento por ser linguagem que não são tão simples de usar. Apesar de existirem algumas ferramentas IDE elas não são tão integradas e fáceis de usar como o Visual Studio por exemplo.

Outro grande problema para desenvolver em ambiente Linux é a dependência de bibliotecas, algo similar ao inferno astral do mundo das DLLs no Windows A diferença entre as versões de bibliotecas de uma distribuição Linux para outra, pode fazer com que seu programa não funcione, exigindo uma atualização de biblioteca o que nem sempre é possível.

Com o Mono isso melhorou, primeiramente padroniza o desenvolvimento e não é preciso se preocupar com as bibliotecas, fica muito mais simples desenvolver e distribuir o software bastando copiar os executáveis para a máquina e executá-los. Em segundo lugar, o Mono disponibiliza os recursos do framework .NET e possibilita uma integração prefeita com as bibliotecas nativas do Linux. Isto facilita muito quando se precisam realizar funções específicas no sistema operacional. Sendo assim, podem-se desenvolver aplicativos gráficos para desktop usando as bibliotecas GTK, QT ou mesmo o Windows.Forms. Tanto a biblioteca GTK como a QT tem versões para Windows, sendo assim podem-se criar aplicações com essas bibliotecas e rodar em qualquer sistema operacional.

Caso não tenha interesse em usar bibliotecas alternativas, devido dificuldade em encontrar documentação ou profissionais conhecedores dessas bibliotecas, pode-se usar o Visual Studio com o Windows.Forms para criar suas aplicações. Seus aplicativos funcionarão nesses ambientes da mesma forma que no Windows.

Figuras 7: Bibliotecas suportas

Como se pode ver na Listagem 7 o projeto Mono suporta boa parte do framework .NET, mas ele vai além disso assim como é o caso das bibliotecas gráficas ele disponibiliza uma série de outros recursos que não estão inclusos no .NET. Vamos falar de alguns exemplos, como o IKVM.

 

Interoperabilidade com JAVA

O IKVM é uma máquina virtual escrita em C# para escutar byte codes Java. Com ela é possível utilizar um byte code Java ou até mesmo pegar um código binário jar e converte-lo para um binário IL, ou seja, transformar um jar para uma DLL. Essa biblioteca pode ser utilizada diretamente dentro do visual Studio. Também é possível pegar uma biblioteca .NET e gerar um jar para ser utilizado dentro do Java. É muito interessante do ponto de vista o reaproveitamento de bibliotecas de ambas as plataformas. É possível, por exemplo, criar um aplicativo Java, mas com uma interface Windows.Forms, basta converter as bibliotecas do Windows.Forms para jar e utilizar diretamente dentro do código Java.

Figura 8: Exemplo de uso do IKVM

Na figura 8 pode-se ver como é usado o IKVM no Mono. Muitas coisas podem ser feitas com o IKVM para reuso de código e aplicações:

  • Pode-se rodar uma Classe Java dinamicamente na IKVM
  • A partir de um código Java compilá-lo para Byte Code e depois converter para CLI (jar para DLL)
  • A partir de um código C# compilá-lo para um executável CLI e converte-lo para Byte Code (DLL para jar)
  • Usar uma classe Java e entendê-la em uma classe C# através de herança
  • Usar uma classe C# e expendê-la no Java através de herança

 

Figura 9

No código apresentado na Figura 9 podemos ver um exemplo de um código Java que depois de compilado com compilador de Java (javac) se transforma num byte code Java. Podemos executar este código diretamente na máquina virtual do Mono. Basta converte-lo para jar e então usar o IKVM para transformá-lo em um executável (EXE) do .NET.

 

Listagem 2

A Listagem 2 demonstra exatamente esse processo de conversação de um executável Java para um executável .NET. O programa Hello.java ao final da operação virou um executável Hello.exe, que pode ser executado simplesmente chamando o Mono como mostrado no comando 4, ou até mesmo executar no windows com a máquina virtual da Microsoft. O IKVM é uma ferramenta fantástica de uma qualidade que impressiona até programadores Java experientes como fala o Sandro Bihaiko desenvolvedor Java “o IKVM é realmente uma das melhores ferramentas que já utilizei, muito fácil de usar. Converteu todo o JSenna e todas as bibliotecas Java de utilizadas não apresentou nenhum problema, e nunca tivemos nenhum bug em produção. É algo realmente que impressiona.”, ele é desenvolvedor do projeto Jsenna (http://jsenna.sourceforge.NET/JSennaPortal/) que é um framework MVC para desenvolvimento de aplicativa web. Este projeto completamente escrito em Java foi completamente portado para .NET usando o IKVM. Atualmente pode ser roda uma aplicação em ambiente .NET com IIS escrita em C#, mas usando o JSenna que é escrito em JAVA. Isso demonstra que mesmo que a empresa tenha toda sua base de classes escritas em Java, estas classes podem ser convertidas para .NET sem um grande esforço, economizando custo de migração.

As bibliotecas adicionais que o Mono implementa podem ser utilizadas diretamente no Visual Studio. Digamos que seja necessário acessa integrar um sistema que usa Active Director e outro sistema Linux com LDAP para autenticação de usuários. O Mono disponibiliza uma biblioteca de acesso a LDAP, é possível usar a biblioteca Mono.LDAP dentro do Visual Studio para fazer acesso a esse LDAP e conseguir fazer que a sua aplicação .NET faça a autenticação diretamente no Linux com LDAP. A mesma situação acontece com para acesso sistemas de banco de dados.

O Mono suporta o banco de dados comerciais como SQL Server, Oracle, entre outros. Então é possível portar uma aplicação desktop Windows.Forms que acessa um servidor SQL Server. Outra questão importante para a interoperabilidade de sistemas heterogêneos é que o Mono disponibiliza Data Provider para banco de dados livres como MySQL, PostreSQL e muitos outros. O .NET oficialmente não suporta os bancos livres, mas é possível pegar os Data Provider do Mono e usá-los dentro do Visual Studio e acessar por exemplo uma base de dados Mysql que já está em funcionamento.

Listagem 3

Logo na listagem 3 pode-se explorar um exemplo de código de acesso ao banco de dados PostgreSQL, usando o data Provider oficial do Mono que é o NPGSQL(http://npgsql.projects.postgresql.org/) que é um Data Provider criado e mantido pelo um brasileiro o Francisco Figeredo. O NPGSQL não só é o data Provider oficial do Mono mas também é adotado e distribuído juntamente com o próprio PostgreSQL. É um importante observar como a atuação de brasileiros tem sido marcante e um diferencial dentro do projeto Mono. Na listagem pode-se ver um código que conecta a um banco de dados local e lista o registro da tabela pessoa.

Para compilar esse código basta usar o compilador mcs e logo em seguida executar o programa chamando o Mono. Podemos ver os comandos na listagem (numerar a listagem).

Listagem 4

Como visto as bibliotecas disponibilizadas podem ser facilmente utilizadas dentro do Visual Studio e permitir a acesso a outros ambientes com uma facilidade nunca vista antes. Integrar sistemas windows com outros sistemas operacionais, banco de dados, ambientes heterogêneos nunca foi tão simples.

Desenvolvendo C# no .NET com um Mac

Que tal fazer programas para MacOS X e i-Phone? Ou então comprar aquele Mac que você gostaria, mas até hoje não comprou por que não roda o Visual Studio, e você precisa programar em C# e desenvolver suas aplicações web. Quem sabe agora você já possa começar e repensar a compra de um Mac?

Com o Mono instalado já pode iniciar já o desenvolvimento com C# e criar suas aplicações para Mac, Web. Basta instalar o Mono no Mac e instalar o MonoDevelop que é a IDE oficial para o Mono. O MonoDevelop pode ser conseguido no site www.Monodevelop.com ele é capaz de importar as soluções do Visual Studio, possui versões para Windows, Linux e Mac. O Monodevelop suporta o desenvolvimento para GTK#, iPhone e também MacOS X. Tem Debug integrado, sistema de controle de versão, integração com banco de dados livre Bando de Dados e também uma excelente integração com sistema de teste automatizados baseado no NUnit (www.nunit.org)

Figura 8: Tela do MonoDevelop no MacOS X com Desenvolvimento para iPhone

Na figura 8, pode-se visualizar o MonoDevelop rodando sobre o MacOS X com um projeto aberto de um aplicativo para i-Phone. É interessante observar que ele tem todo o suporte de arrastar e soltar componentes para criar as interfaces visuais do aplicativo para iPhone. Esta integração facilita muito para o desenvolvedor no momento de codificar, o MonoDevelop se apresenta com os mesmos recursos das Ides modernas que a maioria dos desenvolvedores está acostumado.

Desenvolvendo para iPhone

Muitos desenvolvedores podem até se surpreender com a simplicidade do uso do Mono e a versatilidade para desenvolver aplicativos para o Mac ou mesmo iPhone. Afinal de contas hoje em dia todos gostariam de ter um Mac ou um iPhone, o mercado potencial para aplicativos principalmente para iPhone está aberto e pode se tornar algo muito rentável. A pergunta é como podemos programa para uma aplicação iPhone?

A equipe do Mono tem trabalhado pesado para que isso estivesse pronto. A Novell está oferecendo suporte comercial ao iPhone, inclusive em menos de 48 horas depois do lançamento do iPad o Mono já estava suportando o iPad. Para desenvolver para iPhone a Novell disponibilizou um pacote comercial chamado MonoTouch. Esse pacote pode ser encontrado em http://Monotouch.NET/ , no momento da redação desse artigo a versão disponível era a versão 1.4 sendo que a versão 2.0 já estava disponível em alpha.

O MonoTouch é um kit de desenvolvimento para MacOS X que permite que sejam usadas as linguagens de programa .NET para criação de aplicações nativas para iPhone, iPod Touch e iPad. Os desenvolvedores podem fazer uso de um simulador de iPhone que funciona como se fosse um periférico Apple´s. O MonoTouch disponibiliza um compilador estático que transforma os executáveis e bibliotecas em aplicações nativas. Não existe neste caso JIT (Just time Compiler) ou mesmo um interpretador com a aplicação, apenas código nativo. Pode se usar binds nativos a várias bibliotecas do iPhone comuns para desenvolvedores iPhone.

O MonoTouch é um híbrido do .NET 2.0 com a API Silverligth 2.0, tem suporte a gc (garbage collection) gerenciamento automático de memória, multi-threading, e muitas funcionalidades do .NET 3.5, incluindo o C# 3.0 com LINQ.

Devido ao fato das aplicações terem uma compilação estática e a próprias limitações do sistema operacional do iPhone. Existem algumas limitações que devem ser observadas. Métodos genéricos virtuais não são suportados, pois não é possível determinar qual método será chamado em todas as circunstâncias. P/Invokes em métodos genéricos também não é suportado por exemplo:

Listagem 5

Não é possível realizar geração de código dinamicamente devido ao fato que o kernel do iPhone não permite esse tipo de funcionalidade. Não estão incluídos System.Reflection. Emit, System.Runtime. Remoting, não é possível a criação de tipos dinâmicos como Type.GetType (“MyType”). CallBacks reversos devem ser registrados pelo runtime em tempo de compilação. Apesar de existirem uma série de limitações o MonoTouch é uma grande excelente ferramenta a disposição de desenvolvedores .NET para criação de aplicativos para iPhone. Muitos exemplos estão disponíveis na página do MonoTouch.

Mas o Hello World é sempre lembrado. Criando um Hello.cs para MonoTouch com o MonoDevelop ou qualquer outro editor de sua preferência ficaria como na Listagem 6.

Listagem 6

⠀⠀

Para compilar nosso programa Hello.cs basta ir até a linha de comando e executar o seguinte comando de chamada do compilador:

 

Neste momento são possíveis duas situações: executar no simulador de iPhone ou realizar o deploy do executável no seu iPhone. Para rodar no simulador do iPhone será necessário ter instalado o SDK de desenvolvimento da Apple para i-Phone. Para fazer o deploy no iPhone será necessário que você seja um desenvolvedor autorizado da Apple ter a sua disposição as ferramentas para fazer o deploy no iPhone. Para transformar seu executável em um pacote você deve usar a ferramenta mtouch e utilizar o seguinte comando:

 

Isso irá prepara sua aplicação para rodar no simulador do iPhone. Você poderá executar sua aplicação com o comando:

 

O comando acima irá executar o aplicativo em seu simulador do iPhone e a saída padrão do programa será enviado para a arquivo output. Neste arquivo você verá a mensagem “Olá” que foi produzido pelo método principal. Este é um exemplo muito simples para demonstra o funcionamento. É claro que é possível criar aplicativos gráficos com interface gráfica. Neste caso é utilizado um framework especifico de criação de janelas chamado UIKIT. O MonoDevelop está integrado com o SDK da Apple onde é possível desenhar as interfaces visualmente e também executar os aplicativos diretamente no simulador de iPhone sem precisar estar recorrendo até a linha de comando.

 

Aplicações para Web como Mono

A última questão a ser abordada são as aplicações web, atualmente existe um grande uso de aplicações para web pelas empresas. O uso desse tipo de aplicação traz grandes benefícios para as empresas, e ao contrário do ambiente desktop, nos servidores os ambientes Unix tem um espaço grande ocupado nas empresas. Quando as empresas já têm um ambiente de servidores Unix/Linux consolidado é trabalhoso implantar um servidor windows rodando uma aplicação .NET. Neste caso uma opção que existe é colocar aplicações web em .NET para executar em ambiente Unix.

Essa foi uma das primeiras preocupações do projeto Mono para a implementação do .NET, o ASP.NET foi uma das primeiras funcionalidades a serem estabilizadas e está disponível desde a versão 1.0 do Mono. Atualmente é suportado o ASP.NET 1.0 e 2.0. Recentemente a Microsoft disponibilizou como software livre o ASP.NET AJAX e ASP.NET MVC, ambos foram integrados ao Mono o que permite manter a mesma qualidade de execução pois é a mesma implementação.

Atualmente é possível executar as aplicações .NET com um servidor escrito em C# chamado XSP, ele é mais utilizado em ambientes de teste e para desenvolvimento. Não é aconselhado usar o XSP para aplicações de produção. Neste caso existe um módulo para o Apache chamado mod_mono, ou pode ser usado o FastCGI. Ambos podem ser instalados facilmente em qualquer sistema Linux, para publicar as aplicações no apache é simples basta copiar para os diretórios públicos do apache o modulo se encarrega de configurar a aplicação.

Mas para testar é bem simples usa o XSP, basta entrar no diretório da aplicação e executar na linha de comando e digitar xsp, como pode ser visto na listagem abaixo.

 

Para os interessados que precisam de suporte comercial a Novell disponibiliza para o Suse Linux um pacote comercial chamado SUSE Linux Enterprise Mono Extension, com configura e disponibilizar todos os recursos necessários para rodar aplicações baseadas em .NET em um servidor Suse Linux.

Um exemplo interessante, visto na figura 10, de uso de uma aplicação Web .NET rodando no Linux é a porta do projeto MonoBrasil (www.Monobrasil.org), ele está usando a ferramenta MindTouch opensource e escrita em C#. É um case de sucesso ganhando diversos prêmios e tendo usuários como Nasa, Intel, Cisco, Harvard, entre muitas outras.

FIGURA X: Imagem do Site em .NET rodando num Ubuntu Server

 

 

Autor: Alessandro Binhara 

Por: Alessandro Binhara

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *