semana de interop: projeto mono

Post on 14-Dec-2014

70 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

18/01/2010

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

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

4

Motivações

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

6

Multi-Linguagem .NET

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.

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.

9

APIs

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

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!!!

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

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)

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

Desenvolvimento do Mono

15

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#

17

Desenvolvedores

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

MONO BRASIL

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

19

BuildFarm

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

20

BuildFarmConsulta da implementação do framework em

comparação ao MS.NET

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

21

Mono TestSuite

http://mono-project.com/Test_Suite

22

Licenciamento do Mono

− MPL, GPL, LGPL, MIT, BSD

http://www.ohloh.net/p/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

24

Linhas de Código

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

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

27

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

28

MonoBrasil

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

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

30

BUGS

http://mono-project.com/Bugs

Portando aplicativos

31

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

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);

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);

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

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.

37

MOMA

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.

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

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

− ‘

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/

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.

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

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

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/

46

Mono Touch

Demonstrações e Cases

47

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/

49

DEMOS

−F-spot−Tomboy−MonoDevelop

C# Shell

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

51

C# Shell− Exemplo com Linq

52

Games

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

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.

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)).

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."

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

Obrigado!! Dúvidas ?Alessandro de O. Binharabinhara@monobrasil.org

18/01/2010

57

© 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.

top related