You are on page 1of 103

Tworzenie przenonych aplikacji z wykorzystaniem

Microsoft .NET Framework


oraz

Xamarin Mono

Prowadzcy: Adrian Olszewski

Program prezentacji

Przenono programu na inne systemy operacyjne


Jak j rozumie? Jak j osign? Kiedy moe by uyteczna?

Krtka historia Mono Roadmapa Instalacja (na przykadzie GNU Debian) Przenone biblioteki graficznego interfejsu uytkownika Bazy danych Rne przydatne komponenty, ktre dziaaj w Mono Narzdzia produkcyjne Licencje czyli czy mog zamkn kod mojego programu? Problemy Wnioski kocowe

Przenono jak j rozumie?


Napisany w przenony sposb program skompiluje si, uruchomi i bdzie poprawnie dziaa pod rnymi systemami operacyjnymi. Akceptowalne niedogodnoci:

Drobne rnice w wygldzie aplikacji Wolniejsze dziaanie Niedokadne odwieanie widoku Zablokowana specyficzna funkcjonalno

Przenono jak j osign?

Unika wywoa funkcji konkretnego systemu operacyjnego (np. WinAPI, WMI) lub zapewni wskazanie zamiennikw (System.Media.SoundPlayer,
#IF UNIX ..... #ENDIF)

Unika stosowania mechanizmw, ktre nie istniej w innych systemach (np. Rejestr Windows) Umoliwia konfiguracj uycia mechanizmw systemowych
(np. Harmonogram zada CRON, wybr przegldarki internetowej) Warto rozway mechanizm pluginw do realizacji okrelonych dziaa na rnych systemach, listowanych i konfigurowanych w funkcji systemu operacyjnego, np. plugin Scheduler, WebBrowser, FileManager.

Testowa zachowanie na docelowym systemie (np. VM Ware, Virtual PC)

Przenono jak j osign?

Przenono jak j osign?


Unika nieprzenonych bibliotek i komponentw
(np. WPF, WWF, Krypton Toolkit, MSVCRT, RDLC Report Viewer). Mog zadziaa, ale nie musz / mog wyrzuca wyjtki.

Stosowa PathSeparator, DirectorySeparatorChar, Combine, Env.NewLine By wiadomym dziaania kompilatora


Lin32: IntPtr=long=32b | Win32: IntPtr=long=32b Lin64: IntPtr=long=64b | Win64: IntPtr=64b <> long=32b

Stosowa predefiniowane cieki i tam zakada podkatalogi z uwagi na rn ich struktur FS w Windows i Linux
(Desktop, Programs, Personal, DesktopDirectory, ApplicationData, CommonApplicationData, MyPictures, etc.)

Przenono kiedy uyteczna?


Gdy system bdzie uruchamiany przez klienta na komputerach z rnymi systemami operacyjnymi Gdy istnieje ryzyko zmiany systemu operacyjnego na czci/wszystkich maszynach klienta (np. Windows Linux) Gdy zachodzi potrzeba uczynienia programu dostpnym dla jak najwikszej grupy odbiorcw
Jedno rodowisko produkcyjne, jedna platforma programistyczna / uruchomieniowa:

Uproszczenie procesu produkcji jeden kod Redukcja czasu potrzebnego na integracj rnych platform Redukcja kosztw zakupu narzdzi Ograniczenie iloci potrzebnej do zdobycia wiedzy specjalistycznej (dokumentacje)

Przenono kiedy uyteczna?

Krtka historia Mono


Mono (hiszp. mapa) zgodna z ECMA, przenona na inne systemy operacyjne implementacja .NET: kompilator + CLR + biblioteki Ximian Novell Xamarin
Windows, UNIX, Linux, Mac, *BSD, Solaris, Wii, PS3, iOS, Android

.NET 4.0, WinForms (2.0), ASP.NET (WebForms, MVC2, 3) C#, Java, Boo, Nemerle, VB.NET, Python, PHP, Oberon, JS Firmy / projekty:
Novell, MedTronic, FuturePrice, LindenLab (2nd Life), Skybound, WatzdPrice, ST Microeletronics, Slingshot Software, Metrosharp Corporation, Codice Software, MicroInvest, Artisteer, MindTouch, Medshpere, Volcker Informatik, Quantifi Solutions, Unity Technologies, Versora, Fiducial, Neoware, Fanfare, SplendidCRM, Information Technologi Partners, Devart, VistaDB, Mainsoft, etc.

Success stories / Mono usage in the Enterprise:


http://tirania.org/blog/archive/2007/Dec-06.html

Krtka historia Mono


Miguel de Icaza

http://tirania.org/blog/

RAID1, RAID5 dla Linuksa Midnight Commander GNOME GNumeric WINE (wsptwrca) Ximian
(wykupione przez Novell; wiceprezes dziau programistycznego Novell)

Xamarin (MonoTouch, Mono Android) 2010: MS MVP 1 z 5. najwaniejszych gosw spoecznoci OS

Mono roadmapa

Mono roadmapa

The easiest way to describe what Mono currently supports is: Everything in .NET 4.0 except WPF, WWF, and with limited WCF

Mono roadmapa
Mono 3.0 C# Async compiler

Unified C# compiler for all profiles 4.5 Async API Profile Integrated new Microsoft's Open Sourced stacks:

ASP.NET MVC 4 ASP.NET WebPages Entity Framework Razor System.Json (replaces our own)

New High performance Garbage Collector (SGen - with many performance and scalability improvements)

Mono instalacja
Instalacja z repozytoriw

Prosta instalacja:

apt-get install mono monodevelop monodoc

Stare wydania (Debian Squeeze 2.6, gdy jest 3.0) Nowsze wydania s w repo unstable - ryzyko utraty stabilnoci i bezpieczestwa systemu Pena kontrola nad tym co, gdzie i jak si instaluje Dugotrway proces (3-6 godzin) Skomplikowany proces

Instalacja ze rde

Mono instalacja
apt-get update/upgrade apt-get install gcc make bison gettext fontconfig libpng12-0 libpng12-dev libX11-6 libX11-dev libexif12 sun-java6-jre unzip bzip2 wget build-essential pkg-config libglib2.0-dev libglib2.0-dev libjpeg62-dev libgif-dev libX11-dev libfontconfig1-dev libfreetype6-dev gettext libtool libtiff4 libtiff4-dev apt-get install libgtk2.0 (instaluje stare mono) wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2 tar xjvf libgdiplus-2.10.tar.bz2 > /dev/null ./configure prefix=/opt/mono-2.10.8 make make install wget http://download.mono-project.com/sources/mono/mono-2.10.8.tar.gz tar zxvf mono-2.10.8.tar.gz > /dev/null cd mono-2.10.8 ./configure --prefix=/opt/mono-2.10.8 ./configure --with-large-heap=yes --prefix=/opt/mono-2.10.8 --with-libgdiplus=/opt/mono-2.10.8 with-moonlight=no ake make install echo /opt/mono-2.10.8/lib >> /etc/ld.so.conf ldconfig ln -s /opt/mono-2.10.8/bin/mono /usr/bin/mono ln -s /opt/mono-2.10.8/bin/gmcs /usr/bin/gmcs wget http://download.mono-project.com/sources/mono-basic/mono-basic-2.10.tar.bz2 tar xjvf mono-basic-2.10.tar.bz2 > /dev/null cd mono-basic-2.10 PATH=$PATH:/opt/mono-2.10.8/bin PKG_CONFIG_PATH=/opt/mono-2.10.8/lib/pkgconfig ./configure prefix=/opt/mono-2.10.8 make make install wget http://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2 tar xjvf xsp-2.10.2.tar.bz2 > /dev/null cd xsp-2.10.2 ./configure prefix=/opt/mono-2.10.8 make make install ln -s /opt/mono-2.10.8/bin/xsp2 /usr/bin/xsp2 apt-get install libglade2.0 libglade2-dev libgnome2-dev libgnomecanvas2-dev libgnomeui-dev libgnomeprint2.2-dev libgnomeprintui2.2-dev libpanel-applet2-dev wget http://download.mono-project.com/sources/gtk-sharp212/gtk-sharp-2.12.11.tar.bz2 tar xjvf gtk-sharp-2.12.11.tar.bz2 > /dev/null ./configure prefix=/opt/mono-2.10.8 make make install wget http://download.mono-project.com/sources/mono-addins/mono-addins-0.6.2.tar.bz2 tar xjvf mono-addins-0.6.2.tar.bz2 > /dev/null ./configure prefix=/opt/mono-2.10.8 make make install apt-get install gnome-sharp2 wget http://download.mono-project.com/sources/mono-debugger/mono-debugger-2.10.tar.bz2 tar xjvf mono-debugger-2.10.tar.bz2 > /dev/null ./configure prefix=/opt/mono-2.10.8 make ake install wget http://download.mono-project.com/sources/mono-tools/mono-tools-2.11.tar.bz2 tar xjvf mono-tools-2.11.tar.bz2 > /dev/null ./configure prefix=/opt/mono-2.10.8 make make install touch /etc/ld.so.conf.d/glib.conf gedit /etc/ld.so.conf.d/glib.conf wpis: /usr/lib/cli/glib-sharp-2. /sbin/ldconfig wget http://download.mono-project.com/sources/monodevelop/monodevelop-3.0.3.5.tar.bz2 tar xjvf monodevelop-3.0.3.5.tar.bz2 > /dev/null ./configure prefix=/opt/mono-2.10.8 make make install ln -s /opt/mono-2.10.8/bin/monodevelop /usr/bin/monodevelop Dla Cairo potrzebny jest apt-get install libxt-dev

Mono instalacja
Instalowa zawsze do /opt/mono-ver i dowiza symoblicznie w /usr/bin. Korzyci:

Komponenty (kompilatory, biblioteki) nie bd widoczne w systemie, pki si tego jawnie nie zadeklaruje W razie potrzeby usunicia caoci, wystarczy usun podkatalog /opt/mono... W razie potrzeby wykonania kopii zapasowej rodowiska - wystarczy skopiowa katalog /opt/mono... Skopiowanie rodowiska na inn maszyn sprowadza si do skopiowania na ni katalogu /opt/mono... Mona w ten sposb zainstalowa kilka wersji Mono obok siebie

Mono instalacja

Mono instalacja
instalacja libgdiplus i Mono

Mono instalacja
instalacja libgdiplus i Mono

Mono instalacja
instalacja libgdiplus i Mono

Przenone biblioteki interfejsu uytkownika

Windows Forms:

Wyglda nieestetycznie Dziaa (odrysowuje si) wyranie wolniej Brak dostosowania do natywnych motyww Problemy z niektrymi kontrolkami Kontrolki innych firm mog nie dziaa (P/Invoke) Brak designera (bardzo uproszczona wersja alfa) Prosty proces produkcji jeden kod Wiele przydatnych kontrolek (CodeProject) dziaa Mona korzysta z designera VS pod Windows Wspierany prosty binding dla danych (DataTable, List) W prostszych przypadkach w peni wystarczajce

Przenone biblioteki interfejsu uytkownika


Windows Forms standardowe kontrolki

Przenone biblioteki interfejsu uytkownika


Windows Forms DataGridView

Przenone biblioteki interfejsu uytkownika


Windows Forms Outlook panel (CodeProject)

Przenone biblioteki interfejsu uytkownika


Windows Forms Barcode generator

Przenone biblioteki interfejsu uytkownika


Windows Forms SourceGrid problem z odwieaniem

Przenone biblioteki interfejsu uytkownika


Windows Forms MWF Designer

Przenone biblioteki interfejsu uytkownika

GTK+ (binding GTK#):


Diametralnie rna skadnia, inne klasy, inne podejcia Prba obiektowego opakowania kodu w C Mao kontrolek firm trzecich Mao wygodny designer Brak data bindingu (rczne rzebienie MVC dla grida) Help dla jzyka C (proceduralny) albo Pythona. Kiepski dla C# Sprawdzony od lat (GNOME, GIMP, Firefox, Inkscape, Dia, Abiword, Gnumeric) Pena przenono, w miar spjny wygld pod rnymi OS Graficzne designery (cho mniej wygodne ni VS) Sizery (dostpny free layout) Budowanie interfejsw w XML Rewelacyjny komponent Tree

Przenone biblioteki interfejsu uytkownika


GTK# - przegld kontrolek

Przenone biblioteki interfejsu uytkownika


GTK# - inne, darmowe kontrolki (MedSphere)

Przenone biblioteki interfejsu uytkownika


GTK# - inne, darmowe kontrolki (Holly Widgets)

Przenone biblioteki interfejsu uytkownika


GTK# - projektowanie w MonoDevelop

Przenone biblioteki interfejsu uytkownika


GTK# - projektowanie w GLADE

Przenone biblioteki interfejsu uytkownika


GTK# - interfejs wczytany z XMLa

Przenone biblioteki interfejsu uytkownika


GTK# - wygld w Mono (Linux), Mono (Win) i .NET

Przenone biblioteki interfejsu uytkownika

wxWidgets.NET

Komunikaty obsugiwane jak w MFC (brak event'w) Mao kontrolek firm trzecich Brak darmowych designerw dla C# Sizery - tylko i wycznie. Brak free layout Brak data bindingu Help dla jzyka C++ (proceduralny). Kilka prostych tutoriali dla C# Binding tylko dla podstawowych kontrolek. Setki kontrolek niedostpne w C# Nie rozwijany od 2011, ale pojawiaj si patche, wic nie umar Sprawdzony od lat (Google, DropBox, Xerox, AMD, Center for Naval Analyses, National Center for
Biotechnology Information, MapTek, DynamicGraphics)

Pena przenono, wykorzystuje natywne biblioteki (WinCtrl, GTK, Quartz) Budowanie interfejsw w XML (XRC) Niezy designer dla XRC Kilka niezych komponentw: grid, HTMLView (HTML 3.2), pola z mask

Przenone biblioteki interfejsu uytkownika

Przenone biblioteki interfejsu uytkownika

Przenone biblioteki interfejsu uytkownika

Przenone biblioteki interfejsu uytkownika

Przenone biblioteki interfejsu uytkownika

Bazy danych
Dostpno baz danych i sterownikw

Baza danych SQL Server Oracle PostgreSQL MySQL SQLite Sybase Firebird Db4o

Silnik

Driver

Bazy danych
Technologie dostpu do danych

ADO.NET NHibernate (Fluent + LINQ), Entity Framework

(wersja 6 w Mono 2.13)

CodeFirst ModelFirst DB First

________________________ * MS wypuci kod EF jako OpenSource na licencji Apache 2.0: http://entityframework.codeplex.com/

Rne przydatne komponenty


http://www.mono-project.com/Libraries

SourceGrid BarcodeLib (Code 128, Code11, Code 39 (Extended/Full ASCII), Code 93, EAN-8, EAN-13, UPC-A, UPC-E, JAN-13,
MSI, ISBN, Standard 2 of 5, Interl. 2 of 5, PostNet, UPC, Supplemental 2, UPC, Supplemental 5, Codabar, ITF-14, Telepen, FIM)

DockPanelSuite GTK SourceView Lucene.NET i SimMetrics OpenDICOM, ECG Toolkit, NHapi (HL7 2.x) fyiReporting, Report Manager, mona prbowa Jasper Reports Meta nummerics, Math.NET, R.NET/RServereCLI MVC# Nplot (MdeI napisa interfejs dla GTK#), ZedGraph

Rne przydatne komponenty

Rne przydatne komponenty

Rne przydatne komponenty

Rne przydatne komponenty

Rne przydatne komponenty

Rne przydatne komponenty

Rne przydatne komponenty

Rne przydatne komponenty

Narzdzia produkcyjne

Visual Studio (Express) + ew. patny plugin Mono Tools for VS #Develop Monodevelop (czyta i zapisuje projekty VS) Glade wxFormBuilder

MoMA

(2.6)

Nunit,NAnt Profiler (cz mono) Gendarme

Narzdzia produkcyjne
Porwnanie

Mono al gacutil -aot wsdl disco xsd sn monodis ilasm xsp2

.NET al.exe gacutil.exe ngen.exe wsdl.exe disco.exe xsd.exe sn.exe ildasm.exe ilasm.exe webdev.webserver.exe

Narzdzia produkcyjne
Visual Studio Tools

Mono aplikacje sieciowe

ASP.NET Web Forms ASP.NET MVC (2, 3, 4) Remoting ASP.NET WebServices (.asmx) WCF (CORBA)

Mono aplikacje sieciowe

Mono aplikacje sieciowe


WebService

Mono aplikacje sieciowe


WCF czego brakuje?

MEX (endpointy) ale jest opracowywane COM WF WSHttpBinding + TransactionFlow + ReliableSession Federation WSDualHttpBinding i oglnie duplex MSMQ (mechanizm Windows) DataServices P2P

Mono aplikacje sieciowe


WCF ServiceStack

Mono aplikacje sieciowe


WCF ServiceStack

WCF ServiceStack

Mono aplikacje sieciowe


WCF ServiceStack

Mono aplikacje sieciowe


WCF ServiceStack

Mono aplikacje sieciowe


WCF ServiceStack

Mono aplikacje sieciowe


ServiceStack w supkach

Mono aplikacje sieciowe


ServiceStack w supkach

Mono aplikacje sieciowe


ServiceStack w supkach

Mono aplikacje sieciowe


ServiceStack how 2 start

Mono aplikacje sieciowe


ServiceStack how 2 start

.NET feat. JAVA IKVM.NET


IKVM.NET pozwala uruchomi skompilowany kod Javy w .NET (Mono). JARy tumaczone s statycznie lub w locie na CIL*
__________________ * to nie to samo, co J#

IVKM.NET zawiera m.in.:

.netow implementacj JVM .netow implementacj klas Javy (OpenJDK, Claspath) narzdzia do konwersji JAR CIL (exe, dll)

Ikvmc translacja statyczna Ikvm translacja dynamiczna

Problemy...
Problem z adowaniem dynamicznych bibliotek pod Linuksem

Problemy...
Problem z adowaniem dynamicznych bibliotek pod Linuksem
#include <stdlib.h> #include <stdio.h> #include <dlfcn.h> void* dlopen(const char* file, int flag) { void* ret; ret = dlopen(file,flag); return ret; } char* dlerror() { char* err; err = dlerror(); return err; } void* dlsym(void* handle, const char* symbol) { void* ret; ret = dlsym(handle,symbol); return ret; } int dlclose(void* handle) { return dlclose(handle); }

Problemy...
Problem z adowaniem dynamicznych bibliotek pod Linuksem

Mono dla iOS oraz Androida

Mono dla iOS oraz Androida

Mono dla iOS oraz Androida

Mono dla iOS oraz Androida

Mono dla iOS oraz Androida

Wnioski

Nadaje si do tworzenia

usug serwerowych przenonych aplikacji klienckich o prostym interfejsie aplikacji internetowych narzdzi prostych aplikacji pomocnicznych aplikacji na urzdzenia mobilna ale za $ tworzenia bogatych interfejsw uytkownika*

Nie nadaje si do tworzenia

b. duych projektw bez wydania $ na mono-tools aplikacji opartych o data binding

*) bez wzoenia w to duej iloci dodatkowej pracy

Licencje

LGPL - Lesser General Public License GPL (tylko dla programw i o ile kto wie, jak skorzysta; jest to moliwe, cho zoone) X11 (MIT) - Massachusetts Institute of Technology License Ms-PL - Microsoft Public Licence MPL - Mozilla Public Licence BSD - Berkeley Software Distribution License Apache 2 Public domain CPOL - The Code Project Open License
Distribution Restrictions. You may not: [] distribute Distributable Code to run on a platform other than the Windows platform;

Licencje

LGPL X11 (MIT) Ms-PL MPL BSD Apache 2 Public domain CPOL GPL (tylko dla programw i o ile kto wie, jak skorzysta; jest to moliwe, cho zoone)
Distribution Restrictions. You may not: [] distribute Distributable Code to run on a platform other than the Windows platform;

Gar przydatnych linkw

http://mono-project.com/Start

http://download.mono-project.com/sources/ http://monodevelop.com http://www.mono-project.com/MoMA http://www.mono-project.com/Plans http://docs.go-mono.com/index.aspx http://www.mono-project.com/Compatibility http://go-mono.com/status/ http://mono-project.com/Guidelines:Application_Portability http://mono-project.com/Mod_mono http://mono-project.com/Mono.Cairo_Cookbook http://www.mono-project.com/Monkeyguide http://www.mono-project.com/WCF_Development http://mono-project.com/Database_Access

Gar przydatnych linkw

GTK#

http://mono-project.com/Gui_Toolkits http://monodevelop.com/Stetic_GUI_Designer http://www.mono-project.com/GtkSharp http://www.mono-project.com/GtkSharpBeginnersGuide http://www.mono-project.com/GtkSharp_TreeView_Tutorial http://www.mono-project.com/GtkSharpTutorials http://www.tuxradar.com/hca http://zetcode.com/gui/gtksharp https://medsphere.org/community/project/medsphere-widgets

http://wxnet.sourceforge.net http://www.servicestack.net http://github.com/mrward/monodevelop-nuget-addin#readme

:-)

Dzikuj za uwag

You might also like