semana de interop: projeto mono

58
Projeto Mono: Aplicações .NET para Sistemas não windows Alessandro de Oliveira Binhara Msc em Projetos Complexos Projeto Mono Brasil 18/01/2010

Upload: alessandro-binhara

Post on 14-Dec-2014

70 views

Category:

Technology


2 download

DESCRIPTION

Semana de Interop - O projeto Mono : Aplicações .NET para sistemas Não Windows

TRANSCRIPT

Page 1: Semana de Interop: Projeto Mono

Projeto Mono: Aplicações .NET para Sistemas não windowsAlessandro de Oliveira BinharaMsc em Projetos ComplexosProjeto Mono Brasil

18/01/2010

Page 2: Semana de Interop: Projeto Mono

Agenda

Projeto MonoHistórico, Motivações, Rodmap, Features, CompatibilidadeEstrutura, Ferramentas, Modelo de Desenvolvimento mono

Builds, Testes, Contribuições

Portando AplicativosOrientações para porte de aplicativosAplicações no Linux , no Mac , no IPhoneAplicativos , Cases de Sucesso

Demonstração e CasesWindowsForms, GtkSharp, C# Shell, Empresas usuárias

Page 3: Semana de Interop: Projeto Mono

3

Nascimento do Mono

− Criado por Miguel de Icaza em 2001− Mono é uma implementação OpenSource do .NET

Permite a execução e desenvolvimento de software .Net em ambiente Não Windows.

− Criou o Gnome e a empresa Ximian para dar suporte ao gnome.

Miguel recebeu este ano o título da Microsoft de MVP C#

− Evolution- cliente de email− 17 desenvolvedores, 2 anos e meio, muito caro− Um problema do linux era ter boas ferramentas− Necessidade da criação de uma comunidade

Page 4: Semana de Interop: Projeto Mono

4

Motivações

Page 5: Semana de Interop: Projeto Mono

5

Microsoft lança o .NET

● Microsoft Lança a plataroma .Net

– Coloca o C# como um padrão

– O Core do .Net é colocado como padrão

– Padrões ECMA 334 , ECMA 335

● Plataforma Microsoft .Net

– Mult-linguagem

– Coletor de Lixo

Page 6: Semana de Interop: Projeto Mono

6

Multi-Linguagem .NET

Page 7: Semana de Interop: Projeto Mono

7

Estado AtualMono 2.6Lançado dia 15/12/2009 − MonoDevelop 2.2

− Mudou a licença para LGPL e MIT. Melhorias na interface, suporte Asp.NET MVC, Moonligth Suporte, suporte Windows e MACOSX, novos refactoring , suporte Iphone,

− WCF client e servidor, um subset exposto pelo by Silverlight 2.0.

− LLVM support, to improve performance on server/computational loads.

− LINQ para SQL usando o DbLinq.− Novo debuger integrado com o MonoDevelop e com o OSX.− csharp shell agora suporta auto-completion− 3.5 API agora está mais completa− MoonLigth 2.0 -> WEBCAST AMANHÃ !!!!− Esta versão esta integrando Microsoft's open sourced

− ASP.NET MVC, ASP.NET AJAX and Microsoft's Dynamic Language Runtime.

Page 8: Semana de Interop: Projeto Mono

8

Suporte C# 3.0

−mcs: compilador para rutime 1.1.

−gmcs: compilador para runtime the 2.0 runtime.

−smcs: compiledor para rutime 2.1para compilar aplicações Moonlight.

−dmcs: iniciado com Mono 2.6 para C# 4.0

Características já suportadas:

anonymous methods , iterators,partial classes , Generics , Nullable Types, friend assemblies , static

classes, property accessor accessibility, fixed buffers, external assembly alias,

namespace alias qualifier , inline warning control ,

Extension Methods, LINQ syntax, Expression trees,

Automatic properties, Lambda expressions,

Anonymous types.

Page 9: Semana de Interop: Projeto Mono

9

APIs

Page 10: Semana de Interop: Projeto Mono

10

Suporte ao Java

O IKVM é uma VM JAVA escrita em C# que possibilita executar byte code Java no Mono além de um conjunto de ferramentas para:

conversão bytecode (java) -> IL (mono)

e IL (mono)-> bytecode (java)

✔http://www.ikvm.net

Page 11: Semana de Interop: Projeto Mono

11

IronPython e IronRuby

− .NET é uma excelente plataforma para linguagens dinâmicas.

− Atualmente o IronPython IronRuby são financiado pela Microsoft e licenciados sob uma Lincensa de Software Livre.

− Serão integrados a próxima versão do Visual Studios.

− Já é possível Baixar e instala-los

− WEBCAST SEXTA!!!

Page 12: Semana de Interop: Projeto Mono

12

RoadMap

Mono 2.8− Remove support for .NET 1.1 Framework− Moonlight 3 Preview− MonoDevelop 2.4− Compacting GC− C# Compiler, Full C# 4.0 support − LINQ to SQL Beta

Mono 3.0 − C# Compiler− .NET 3.5+ compatibility

http://mono-project.com/Roadmap

Page 13: Semana de Interop: Projeto Mono

13

Runtime Mono

− É a máquina virtual do Mono

− O runtime do Mono está pronto e tem possibilidade de executar programas através de:

− um compilador JIT (mono), com e sem otimizações

− um interpretador (mint)− Atualmente estão trabalhando na implementação de um gerenciador de memória mais eficiente

− Os programas podem ainda ser precompilados com um Ahead-of-Time Compiler (aot)

Page 14: Semana de Interop: Projeto Mono

14

Plataformas Supported Architectures Runtime Operating system

s390, s390x (32 and 64 bits)

JIT Linux

SPARC (32) JIT Solaris, Linux

PowerPC JIT Linux, Mac OSX, Wii, PlayStation 3

x86 JIT Linux, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Solaris, OS X

x86-64: AMD64 and EM64T (64 bit)

JIT Linux, Solaris

IA64 Itanium2 (64 bit) JIT Linux

ARM: little and big endian JIT Linux (both old and new ABI), iPhone

Alpha JIT Linux

MIPS JIT Linux

HPPA JIT Linux

Page 15: Semana de Interop: Projeto Mono

Desenvolvimento do Mono

15

Page 16: Semana de Interop: Projeto Mono

Início do Mono

− Uso das ferramentas da microsoft− Como criar um compilador Csharp sem um

compilador.− Primeira versão do mcs foi escrita no Visual

Studio. − Inicialmente

− 5 engenheiros, Foco em aplicações desktop

− Toda a infra-estrutura do mono é escrita em C#

Page 17: Semana de Interop: Projeto Mono

17

Desenvolvedores

Rafael Teixeira, Alexandre Marcondes, Everaldo Canuto, Rodrigo Bambo, Francisco Figueredo,

MONO BRASIL

Page 18: Semana de Interop: Projeto Mono

Compilador C# escrito em C#Primeiro bootstrap em 2001, 10.000 linhas em 17sHoje tem 82.000 linhas, compila em 2.2s1.6x mais lento que o csc

Compilador C# - mcs

MCSMono C#CompilerEscrito em

C#

RunTimeMONO

Escrito em C++

Bibliotecas de

Classe C#Escrito em

C#

EXECUTAEXECUTA

USAUSA

USA

COMPILA /USACOMPILA

Page 19: Semana de Interop: Projeto Mono

19

BuildFarm

http://wrench.mono-project.com/builds

Page 20: Semana de Interop: Projeto Mono

20

BuildFarmConsulta da implementação do framework em

comparação ao MS.NET

http://wrench.mono-project.com/builds

Page 21: Semana de Interop: Projeto Mono

21

Mono TestSuite

http://mono-project.com/Test_Suite

Page 22: Semana de Interop: Projeto Mono

22

Licenciamento do Mono

− MPL, GPL, LGPL, MIT, BSD

http://www.ohloh.net/p/mono/

Page 23: Semana de Interop: Projeto Mono

23

Linhas de Código− Mais de 6 milhões de linhas

Curiosidade : • Miguel de Icaza alterou 1.6Milhões de linhas de

código • Mais de 900mil linhas de código C#• Representa uma atuação em quase 20% do código

Page 24: Semana de Interop: Projeto Mono

24

Linhas de Código

Page 25: Semana de Interop: Projeto Mono

25

Documentação

− Site intenacional :− www.mono-project.com

− MonkeyGuide :− http://mono-project.com/Monkeyguide

− Mono APIs : − http://www.go-mono.com/docs/

− Esforço de tradução do Mono Brasil

Page 26: Semana de Interop: Projeto Mono

26

Suporte - ListasMono-announce-list, mono-aspnet-list, mono-list, mono-devel-list, mono-gc-list, mono-patches, mono-docs-list, mono-bugs, mono-winforms-list, gtk-sharp-list, mono-vb, mono-addins , monodevelop-list, monodevelop-devel-list, mono-osx, monotouch, cocoa-sharp, mono-cecil , gendarme, mono-olive, moonlight-list,

monoxna, tao-list, tf4mono group, mono-packagers-list

http://mono-project.com/Mailing_Listshttp://www.go-mono.org/forums/

Padrões ECMA 334 , ECMA 335

Page 27: Semana de Interop: Projeto Mono

27

Suporte - Escritório do Mono− Média 100 pessoas online , 24 horas por dia− Irc.gnome.org − Mais de 50 canais

Page 28: Semana de Interop: Projeto Mono

28

MonoBrasil

− Comunidade Brasileira de Desenvolvedores Mono− Site : www.monobrasil.org− Projeto Finep MonoBasic

Page 29: Semana de Interop: Projeto Mono

29

Contribuindo

Bibliotecas de classe− Fazer alterações , escrever Teste− Criação Patch, ou commit no repósitorio− Documentação− Teste em várias plataformas]

Como começar− Baixe o fonte, compile , instale e use − Linux ou Windows + VisualStudio− Cadastrar-se nas listas− Participar do IRC− Reporte bugs − Mande seus patchs

Page 30: Semana de Interop: Projeto Mono

30

BUGS

http://mono-project.com/Bugs

Page 31: Semana de Interop: Projeto Mono

Portando aplicativos

31

Page 32: Semana de Interop: Projeto Mono

Crie no VS e rode no Linux

− Compatibilidade Binária− Monte o disco do linux e copie seus

binários no linux− Compartilhe no windows e acesso no

linux− Testando

− Uso de máquinas virtuas: Ex: Virtual PC− Donwload das VM e LiveCD no site do

mono

Page 33: Semana de Interop: Projeto Mono

33

Sistema de arquivos− Cuidado com os caminhos− Cuidado com letras Maiúsculas e minúsculas

Busca manual de Separadoresint index = exePath.LastIndexOf("\\"); exeDir = exePath.Substring(0, index); exeFile = exePath.Substring(index+1);

Código mais portávelexeDir = Path.GetDirectoryName (exePath); exeFile = Path.GetFileName (exePath);

Page 34: Semana de Interop: Projeto Mono

34

Variáveis de Ambiente

− Variáveis de ambiente o o PATH no Windows usa “;” o linux e outros sistemas unix usam “:”

− Você pode usar System.IO.Path.PathSeparator para separa o path nas variáveis de ambiente

Console.WriteLine ( "Subdiretorios encontrados no PATH :“ ); string path_env = Environment.GetEnvironmentVariable ( "PATH“ ); string[] path_dirs = path_env.Split (Path.PathSeparator); foreach (string pathdir in path_dirs)

Console.WriteLine(pathdir);

Page 35: Semana de Interop: Projeto Mono

35

Caminhos absolutos

− Não use caminhos absolutos, eles não vão funcionar em outros sistemas.

− Use algum mecanismo como um arquivo de configurção para localizar seus arquivos e caminhos

Page 36: Semana de Interop: Projeto Mono

36

P/Invoque

− Chamadas a DLLs nativas a API Windows não irão funcionar em outros sistemas, pois a API não está la.

− Caso você dependa de bibliotecas em C, você deverá substituir por equivalentes no ambiente Linux.

− Sua aplicação deverá identificar o sistema que está rodando e chavear entre as bibliotecas.

Page 37: Semana de Interop: Projeto Mono

37

MOMA

Page 38: Semana de Interop: Projeto Mono

38

Banco de Dados

- Mono faz acesso ao SQLServer , não existe necessidade de mudar de banco para rodar sua aplicação no linux.

- Mono Disponibiliza os dataproviders para os bancos : MySQL, Postgresql, Oracle, DB2, SyBase

- É possivel usar os dataproviders do mono no .NET com VS para acessar os bancos livres.

Page 39: Semana de Interop: Projeto Mono

39

Não é Suportado no Mono

− Sem suporte a Enterprise Services− Sem suporte a cross-process trasaction

− Mono so suporta trasações locais

− Não tem suporte a COM− Com não existe em Sistema UNIX− Existe um projeto para suportar isso http://www.mono-

project.com/COM_Interop

Page 40: Semana de Interop: Projeto Mono

40

Interface Gráfica− Windows.Forms

− Inicialmente foi usando o Projeto WINE − Atualmente o Mono esta suportando

windows.Forms 1 e 2− http://www.mono-project.com/WinForms− Status do Windows.Forms: − Sem suporte a windows.forms rodando em múltiplos

threads. Todos os formulários devem ser criados no mesmo thread.

− Temas windows suportados apartir do mono 2.2− Suporte de transparência no linux através do composite− Todo código Windows.Forms é em C# gerenciado− Windows.Forms é suportado no Mac apartir da versão 1.9

− ‘

Page 41: Semana de Interop: Projeto Mono

41

Interfaces Gráficas

− Pode ser usados outros tool kits graficos para outras plataformas − http://www.mono-project.com/Gui_Toolkits− GTK# -> Ambientes Linux , BSD e Windows

− COCA# -> MacOSX

− QT# -> Linux

− Qyoto − http://techbase.kde.org/Development/Languages/Qyoto− Bind do QT

− wxNet − http://wxnet.sourceforge.net/

Page 42: Semana de Interop: Projeto Mono

42

Ferramentas

− Mono Develop− Importa solutions do Visual Studio− Versões Windows, Linux e MAC− Suporte para GTK# , Iphone, MacOX− Debug integrado, controle de versão− Bando de Dados, Sistema de Testes, − www.monodevelop.com

− Prj2make− Converte uma solução do Visual Studio em script para o

make, gerando os make files.

Page 43: Semana de Interop: Projeto Mono

43

Mono Tools− Verifique a compatibilidade do

seu aplicativo com o Mono Migration Analaizer diretamente do Visual Studio

− Teste no Windos, Teste no Linux− Debug remoto no Linux− Empacote para linux− Crie uma Distro customizada para

seu aplicativo com o Suse Studio

Page 44: Semana de Interop: Projeto Mono

44

Asp.NET

− Mono Suporte Asp.NET 1 e 2− Suporta Asp.NET MVC− Pode-se rodar aplicativos Web com :

− XSP, Mod_Mod , FastCGI− Suporta WebServices− Suporta Ajax.NET − WEBCAST QUINTA!!!!

Exemplowww.monobrasil.org

Page 45: Semana de Interop: Projeto Mono

45

IPhoneVersão comercial do mono para IPHONE C# and .NET on the iPhone .NET Bindings to Native APIs Distribute on the Apple App Store Enterprise deployable MonoDevelop Integration XCode Integration− http://monotouch.net/− http://monotouch.net/Tutorials

http://www.youtube.com/watch?v=M0VoyhKFmWghttp://monotouch.info/MonoTouch/Videoshttp://monotouch.net/http://www.codesnack.com/storage/screencasts/

Page 46: Semana de Interop: Projeto Mono

46

Mono Touch

Page 47: Semana de Interop: Projeto Mono

Demonstrações e Cases

47

Page 48: Semana de Interop: Projeto Mono

HELLO WORD!!!$ cat alomundo-cs.cs alomundo-vb.vb alomundo-boo.boo

class AloMundo { public static void Main(string[] args){ System.Console.WriteLine("Alô mundo!!! em C#"); }}Module AloMundo Public Sub Main(args as string()) System.Console.WriteLine("Alô mundo!!! em MonoBASIC") End SubEnd Module

print "Alô mundo!!! em Boo"

$ mcs /codepage:utf8 alomundo-cs.cs

$ mbas alomundo-vb.vb

$ booc alomundo-boo.boo

$ mono alomundo-cs.exeAlô mundo!!! em C#

$ mono alomundo-vb.exeAlô mundo!!! em MonoBASIC

$ mono alomundo-boo.exeAlô mundo!!! em Boo

A linguagem Boo foi desenvolvida pelo Rodrigo 'Bamboo' Oliveira, para o ambiente CLI (Mono/.NET).

É similar ao Python mas com tipagem estática, o que lhe permite interagir mais facilmente com as outras linguagens CLI.

Ver http://boo.codehaus.org/

Page 49: Semana de Interop: Projeto Mono

49

DEMOS

−F-spot−Tomboy−MonoDevelop

Page 50: Semana de Interop: Projeto Mono

C# Shell

− Shell Interativo como python e ruby− Suporte a code completion− Suporte a GTK#

Page 51: Semana de Interop: Projeto Mono

51

C# Shell− Exemplo com Linq

Page 52: Semana de Interop: Projeto Mono

52

Games

MONO.SIMD CasesSencondLive mudou do LSL para Mono- 50x a 300x mais rápidoUnit3d-Usa C#, Boo, unityScritp-WEBCAST QUARTA!!!!

Page 53: Semana de Interop: Projeto Mono

53

Case Brasileiro - DARUMA−Apartir de Março de 2006 a Daruma passou a surportar o uso de suas impressoras em ambiente Mono com Linux.−Foram realizados treinamentos da equipe desenvolvedora no Brasil, e foram feitas melhorias internas na estrutura dos device drives linux das impressoras para ficarem 100% compatível com Mono.

Page 54: Semana de Interop: Projeto Mono

54

CASES DekiWiki (http://wiki.mindtouch.com) is an advanced WYSIWYG Wiki system

powered by Mono. SplendidCRM (http://www.splendidcrm.com) Cross platform, CRM system. Plasma (http://pnunit.codicesoftware.com/opproducts.aspx) Source Code Management

system from Codice Software. Chrome Compiler (http://chromesville.com/language/): a commercial Pascal compiler with

many features to take advantage of .NET 2.0 (including generics and many new language features inspired by C# 2.0).

Electronic Arts' Sims3 (http://thesims3.ea.com/). Unity3D (http://unity3d.com). Unity is is a 3D game editor with powerful cross-

platform capabilities. Medsphere OpenVista (http://www.medsphere.com) a cross-platform, real-time, point-of-

care, patient-centric information resource for clinicians. Vault (http://www.sourcegear.com/vault/index.html), from SourceGear

(http://www.sourcegear.com/), relies on Mono to run on Unix systems. Virtuoso Universal Server (http://virtuoso.openlinksw.com/), from OpenLink Software

(http://www.openlinksw.com/), is a cross-platform hosting environment for Mono/.NET/C#.

Völcker used Mono (http://www.novell.com/success/volcker.html), .NET and C# to re-code its Active Entry (http://www.activeentry.com/) software to run on Linux.

Winfessor SoapBox Framework Mono Edition (http://www.winfessor.com/portal/DesktopDefault.aspx?tabid=57) enables developers to build .NET-based IM solutions that run on any Mono-supported platform

* GMOVIL (http://www.aspl.es/gmovil/us/index.html) is a complete tool to manage common processes for Vodaphone sales points. It includes a Gtk# (shown here) and SWF GUI (Technical details (http://www.aspl.es/fact/index.php?id=39)).

Page 55: Semana de Interop: Projeto Mono

CASE INTERNACIONAL

− Maior migração já feita para Linux− Software ActiveEntry - Software para

provisão e gerenciamento usando pelo governo Alemão. (Munich)− Foram migrados todos os servidores da cidade de − Munich para linux e portado as aplicações para Mono− http://www.novell.com/success/volcker.html

− "Mono is now a critical part of our cross-platform development," said Matthias Bauer, head of development for Völcker Informatik AG. "Using Mono was the only way for us to leverage our existing software and give our customers what they need on Linux."

Page 56: Semana de Interop: Projeto Mono

56

CASE INTERNACIONAL

− Tempo de desenvolvimento 9 meses− Mono com C#− A aplicação passou de 7 milhões de linhas para 2

milhões de linhas de código.− Foram instalados 350 novos servidores linux− Com a novas versao do ActiveEntry com Mono− Os servidores linux provêm provêm toda a

administração da cidade Munich, gerenciando mais de 40.000PCs

− São 150.000 usuários do sistema

Page 57: Semana de Interop: Projeto Mono

Obrigado!! Dúvidas ?Alessandro de O. [email protected]

18/01/2010

57

Page 58: Semana de Interop: Projeto Mono

© 2009 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.  The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond

to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. 

MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.