O projeto Mono

46
1 O Projeto Mono: Aplicações .NET para sistemas não Windows

description

Slides sobre o projeto mono , história , características, funcionalidades,

Transcript of O projeto Mono

Page 1: O projeto Mono

1

O Projeto Mono: Aplicações .NET para sistemas não Windows

Page 2: O projeto Mono

2 2

Agenda

O Projeto Mono Histórico, Motivações, Rodmap, Features, Compatibilidade, Estrutura, Ferramentas,

Interoperabilidade de Aplicativos .Net Orientações para porte de aplicativos: Linux, Mac, Iphone, Android , Cases de Sucesso.

Demonstração e Cases WindowsForms, GtkSharp, C# Shell, Empresas usuárias, Etc…

Page 3: O projeto Mono

3 3

Page 4: O projeto Mono

4 4

Page 5: O projeto Mono

5 5

Nascimento Projeto MONO

Criado por Miguel de Icaza em 2001

Criou o Gnome e a empresa Ximian para dar suporte ao Gnome. − Evolution: cliente de email

− Necessidade da criação de uma comunidade

− A Ximian foi adquirida pela Novell

Licenciamento MPL, LGPL, MIT, BSD

Miguel recebeu em 2009 o título da Microsoft de MVP C#

Page 6: O projeto Mono

6 6

O que é ? Projeto MONO

Mono é uma implementação OpenSource do .NET Permite a execução e desenvolvimento de software .Net em ambiente Não Windows.

Mono 3.2 (atual) WCF client e servidor,

LLVM support, LINQ para SQL usando o DbLinq.

Novo debuger. Novo Gereciamento de memória

CSharp shell agora suporta auto-completion

4.5 API (WinRT, Async methods)

ASP.NET MVC 1, 2 ,3, 4

xbuild agora realiza o build de projetos msbuild

Page 7: O projeto Mono

7 7

Mono 3.2

Suporte a C# 5.0 como padrão programação assincrona

Parallel Framework

Performance Large performance improvements

LLVM support has graduated to stable

Novo Generational Garbage Collector SGEN

Version 2.0 of the embedding API

WCF Routing

OpenBSD support integrated

F# 3.0

Microsoft Open Stacks (Razor, MVC, WebPages,Http,Json)

http://mono-project.com/Roadmap

http://www.mono-project.com/Release_Notes_Mono_3.0

Page 8: O projeto Mono

8 8

O que é ? Projeto MONO

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

Page 9: O projeto Mono

9 9

Contribuições Microsoft MS-PL or Apache Licensed Libraries

Ajax.NET, ASP.NET MVC1, MVC2,

Silverligth ToolKit, Silverligth Tests

Managed Extensibility Framework (MEF)

System.Data.Services.Client (OData)

Dynamic Language Runtime

Page 10: O projeto Mono

10 10

Suporte C# 4.0 e 5.0

mcs: compilador para qualquer profile

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

Mono.Csharp : compiler as a service

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 11: O projeto Mono

11 11

Suporte JAVA Interoperabilidade

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 12: O projeto Mono

12 12

Suporte Python e Ruby Interoperabilidade

Atualmente o IronPython e IronRuby são financiado pela Microsoft e licenciados sob Licença Apache 2.0

Page 13: O projeto Mono

13 13

Runtime Mono Máquina Virtual

É a máquina virtual do Mono

O runtime do Mono está pronto e tem possibilidade de executar programas .NET formato Binário.

Compilador JIT (mono), com e sem otimizações.

Novo GC já disponível, melhorando a performance e reduzindo o uso de memória em cerca de 50%.

Page 14: O projeto Mono

14 14

Plataformas Suportadas

Supported Architectures Runtime Operating system

s390, s390x (32 and 64 bits)

JIT Linux

SPARC (32) JIT Solaris, Linux

PowerPC JIT Linux, Mac OSX, Wii, PS3, PS4, PSVita

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

x86-64: AMD64 and EM64T (64 bit)

JIT Linux, Solaris

IA64 Itanium2 (64 bit) JIT Linux

ARM: little and big endian

JIT Linux ,iPhone, android

Alpha JIT Linux

MIPS JIT Linux

HPPA JIT Linux

Page 15: O projeto Mono

15 15

Início do Mono Interoperabilidade

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 16: O projeto Mono

16 16

Compilador C# - MCS

EXECUTA EXECUTA

USA USA

USA

COMPILA /USA COMPILA

Page 17: O projeto Mono

17 17

Desenvolvedores Comunidade

Rafael Teixeira, Alexandre Marcondes, Everaldo Canuto, Rodrigo Bambo, Francisco Figueredo, mais de 500 pessoas na comunidade.

Page 18: O projeto Mono

18 18

Build Farm Desenvolvimento

Consulta da implementação do framework em comparação ao MS.NET

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

Page 19: O projeto Mono

19 19

Mono Test Suite Desenvolvimento

http://mono-project.com/Test_Suite

Page 20: O projeto Mono

20 20

Documentação Desenvolvimento

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 http://www.monobrasil.org

Page 21: O projeto Mono

21 21

Suporte Desenvolvimento

Listas de Discussão http://mono-project.com/Mailing_Lists

http://www.go-mono.org/forums/

IRC: Irc.gnome.org Média 100 pessoas online , 24 horas por dia

Mais de 50 canais

Page 22: O projeto Mono

22 22

Crie no VS e rode no Linux Portando aplicativos

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 23: O projeto Mono

23 23

Sistema de Arquivos Portando aplicativos

Cuidado com os caminhos

Cuidado com letras Maiúsculas e minúsculas

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

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

Busca manual de Separadores

int index = exePath.LastIndexOf("\\");

exeDir = exePath.Substring(0, index);

exeFile = exePath.Substring(index+1);

Código mais portável

exeDir = Path.GetDirectoryName (exePath);

exeFile = Path.GetFileName (exePath);

Page 24: O projeto Mono

24 24

Variáveis de Ambiente Portando aplicativos

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 25: O projeto Mono

25 25

P/Invoke Portando aplicativos

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 26: O projeto Mono

26 26

MOMA Portando aplicativos

Page 27: O projeto Mono

27 27

Banco de Dados Portando aplicativos

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 28: O projeto Mono

28 28

Interface Gráfica Portando aplicativos

Windows.Forms

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 a partir 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 a partir da versão 1.9

Page 29: O projeto Mono

29 29

Interface Gráfica Portando aplicativos

Pode ser usados outros tool kits gráficos 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

wxNet http://wxnet.sourceforge.net/

Page 30: O projeto Mono

30 30

Ferramentas Portando aplicativos

Mono Develop Importa soluções 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 31: O projeto Mono

31 31

Mono Plug IN Portando aplicativos

Verifique a compatibilidade do seu aplicativo com usando o MOMA diretamente do Visual Studio

Teste no Windows, Teste no Linux

Debug remoto no Linux

Empacote para linux

Crie uma Distribuição linux customizada para seu aplicativo com o Suse Studio

Page 32: O projeto Mono

32 32

ASP.NET Portando aplicativos

Mono Suporte Asp.NET 1 e 2

Suporta Asp.NET MVC 1 e 2

Rodando no Apache, Ngnix: XSP, Mod_Mod , FastCGI

Suporta WebServices

Suporta Ajax.NET (Microsoft)

Exemplo www.monobrasil.org

Page 33: O projeto Mono

33 33

Moonlight Portando aplicativos

Implementação do open source do SilverLight da Microsoft

Baseado em XAML

Em setembro de 2007 , a Microsoft e a Novel anunciaram a colaboração técnica isso inclui o acesso aos sistemas de teste do Silverligth e a distribuição do pacote de media para usuários Linux contendo as licenças de codec para áudio e vídeo.

Recentemente a Microsoft disponibilizou também o Silverligth Tool Kit e este foi integrado ao Moonlight

Page 34: O projeto Mono

34 34

Moonligth Portando aplicativos

Moonlight 3 Mooonlight 3 Pre-Alpha compatível com Silverlight 3

3D graphics

Pixel shaders

Application library caching

Out-of-browser capabilities and offline support

Pluggable media pipeline to support 3rd party codecs

HD Smooth Streaming

Native support for MPEG-4-based H.264/AAC Audio

Release Date Alpha Q1 2010 Beta Q2 2010 Final Q3 2010

Page 35: O projeto Mono

35 35

C# no IPHONE Portando aplicativos

Versã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

Page 36: O projeto Mono

36 36

C# no Android Portando aplicativos

Versão comercial do mono para Android

Pluing para Visual Studio

Usa o mesmo profile do MonoTouch

Suporte OpenGL , GC, Multi-threading, .NET 3.5, C# 3.0 e LINQ

.NET Bindings to Native APIs

http://monodroid.net/

http://monodroid.net/Tutorials

Page 37: O projeto Mono

37 37

HELLO WORLD!!! $ 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 Sub End Module print "Alô mundo!!! em Boo"

$ mcs /codepage:utf8 alomundo-cs.cs

$ mbas alomundo-vb.vb

$ booc alomundo-boo.boo

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

$ mono alomundo-vb.exe Alô mundo!!! em MonoBASIC

$ mono alomundo-boo.exe Alô 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.

Page 38: O projeto Mono

38 38

F-spot

Tomboy

MonoDevelop

Page 39: O projeto Mono

39 39

Shell Interativo

Suporte a code completion

Suporte a GTK#

Page 40: O projeto Mono

40 40

MONO.SIMD Cases SencondLive mudou do LSL para Mono 50x a 300x mais rápido

Unit3d Usa C#, Boo, unityScritp

Page 41: O projeto Mono

41 41

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 42: O projeto Mono

42 42

Electronic Arts' Sims3 http://thesims3.ea.com/

Unity3D Unity 3D é um editor de jogos cross-platform , Wii, XBOX, IPHONE, PC, etc (http://unity3d.com).

Chrome Compiler Um compilador Pascal, Delphi (http://chromesville.com/)

DekiWiki Is an advanced WYSIWYG Wiki system powered by Mono. (http://wiki.mindtouch.com)

SplendidCRM Cross platform, CRM system. (http://www.splendidcrm.com)

Plasma Source Code Management system from Codice Software. (http://pnunit.codicesoftware.com/opproducts.aspx)

Medsphere OpenVista A cross-platform, real-time, point-of-care, patient-centric information resource for clinicians. (http://www.medsphere.com)

Page 43: O projeto Mono

43 43

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

Uso de C# aplicação com mais de 2milhões de linhas

350 Servidores, 40mil estações, 150mil usuários

Page 44: O projeto Mono

44

Título do Vídeo

Page 45: O projeto Mono

45 45

Bing Maps

PhotoSynth

ShowCase

DesktLets

Smooth Stream

Page 46: O projeto Mono

46