Home Page Home Page Articoli .Net e il Pinguino? Mono !

.Net e il Pinguino? Mono !

Questo articolo vi introduce allo sviluppo orientato alla piattaforma (Mono) che permette l'integrazione tra Microsoft e Linux ... l'open source è tra noi!
Autore: Giovanni Ferron Livello:
Chi avrebbe mai detto che sarebbe stato possibile programmare sia per windows e linux, utilizzando .NET? Un assaggio di questa possibilità lo avevamo già avuto con Java, e ora arriva Mono che promette integrazione, ma purtroppo non uifficialmente benedetta da mamma Microsoft.
Le prove di questo articolo sono state eseguite con una Red Hat 9.0.


Passato, presente .... futuro?
Tutto nasce da un sogno di tutta la comunità di Linux, limitare il potere di Microsoft sul mercato, intruducendo un ambiente che permetta l'utilizzo di applicazioni .NET non esclusivamente su Windows. A capo di questo progetto vediamo Ximian, società che collabora al progetto Gnome, e recentemente acquisita da Novell. Molti si chiederanno come è possibile che Microsoft abbia dato il permesso, questo è potuto accadere perchè mesi addietro l'International Organization for Standardization (ISO), certificando il linguaggio C# e la Common Language Infrastructure (CLI), ha permesso il rilascio del codice di quest'ultime sotto licenza Shared Source, questo vuol dire che il codice sarà visibile, ma non potrà essere usato per costruire applicazioni commerciali, questo ha sorpreso la comunità mondiale di Linux, che si è messa subito al lavoro per il porting su Linux dell'intera piattaforma.
Attualmente (marzo 2004) la piattaforma è ancora in fase di sviluppo, la maggiorparte delle classi sono state implementate, ma manca ancora tutta la parte dell'integrazione con le cassi Windows.Forms, e il supporto ad ASP.NET non è ancora completo. Tralasciando questo il progetto promette bene e si pensa che a breve sarà possibile rilasciare la versione 1 (attualmente alla version 0.3).
Il futuro? Gli sviluppatori Mono sono fiduciosi, anche perchè oramai Microsoft ha certificato il tutto, ma comunque resta il fatto che non è ancora stata data una ufficiale benedizione al progetto e quindi il lavoro rischia di diventare un frenetico inseguimento dei rilasci ufficiali.

Download e installazione
Si parte! Ora dobbiamo solo scaricare la piattaforma, e subito dobbiamo fare una scelta: Scaricare il sorgente o i pacchetti? Di sicuro il metodo più veloce per installare Mono è il download dei pacchetti rpm, ma quale dei tanti rilasci? Questa è una scelta ardua perchè, il rilascio più consigliato attualemente è la versione 0.28, che supporta anche l'utilizzo di mono-wine che emula le windows.forms, mentre l'ultima versione è stata ottimizzata molto, meno utilizzo di memoria e risorse. Per il seguente articolo è stata scaricata la versione 0.28.
I pacchetti scaricati sono i seguenti:

? mono-0.28-1.ximian.6.1.i386.rpm: Pacchetto base piattaforma
? mono-debuginfo-0.28-1.i386.rpm: Pacchetto risoluzione bug
? mono-wine-20030318-1.ximian.6.4.i386.rpm: Pacchetto suporto grafica
? mono-wine-debuginfo-20030318-1.ximian.6.4.i386.rpm: Pacchetto risoluzione bug

Ora l'installazione è monlto semplice, se utilizzate un ambiente grafico, basta fare un doppio click per ogni pacchetto (verrà richiesta la password di root) e automaticamente verrà installato Mono.
Per chi invece vuole utilizzare la shell dovrà scrivere questo semplice comando per ogni pacchetto:

rpm -ihv mono-[nome_pacchetto]

Naturalmente per eseguire il comando dovremo avere i permessi di root, utilizzando il comando "su".

Per chi invece preferisce la compilazione del codice, deve scaricare i tar e scompattarli

tar -xzvf mono-[nome_pacchetto].tar.gz

Dopo di che eseguire la classica configurazione e installazione eseguendo questi comandi:

./configure
make
make install


Ora sia che voi abbiate seguito la strada semplice, o quella meno immediata sarete pronti per creare la vostra prima applicazione Mono.


La mia prima applicazione
Creare una applicazione è molto semplice, dobbiamo aprire il notro editor di testo preferito, in questo caso è stato usato Kwrite, al quale l'installazione precedente ha aggiunto la possibilità di riconoscere testo C#.
Faremo un semplice programma che ci chiederà il nome e ci saluterà, ecco il codice:


using System;

class esempio
{

static void Main()
{
//chiedo il nome
Console.WriteLine("Come ti chiami ?");
//stampo il nome
Console.WriteLine("Ciao {0}",Console.ReadLine());

}

}


Ora dobbiamo compilare, per far questo dobbiamo aprire la shell e nella stessa directory del nostro file cs, scrivere il seguente comando:

mcs esempio.cs

Se la compilazione è andata a buon fine dovremmo avere il seguente messaggio "Compilation succeeded". Ora eseguiamo la nostra mini applicazione, sempre da shell scriviamo:

mono esempio.exe

e il risultato è il seguente:



Ora non ci resta che verificare che anche su Windows funzioni, ed infatti copiando il file in Windows ed eseguendo il file dal prompt dei comandi otteremo lo stesso risultato:



Windows Forms
Ora proviamo a costruire un'applicazione che utilizzi le classi Windows.Forms, e qua si inizia a fare sul serio. Ora bisogna sapere che Mono non offre pieno supporto per le applicazioni grafiche, principalmente perchè le classi di gestione della grafica sono integrate con windows quindi abbiamo due possibilità: O l'utilizzo delle librerie http://gtk-sharp.sourceforge.net/ ">#Gtk, oppure Wine con una modifica per l'integrazione con http://www.go-mono.com/winforms.html ">Mono.
La strada scelta per questo articolo è stata la seconda (mono-wine), questo perchè offre una maggiore compatibilità tra ambienti, e lo possiamo fare perchè all'inizio abbiamo installato i pacchetti necessari. Questo però non basta, perchè per essere sicuri che tutto funzioni è necessario scaricarsi e installare anche http://www.winehq.com/site/download ">WineL'installazione è molto semplice, basta scaricare il pacchetto e installarlo, facendo doppio click su file, per chi usa un ambiente grafico, oppure utilizzare il comando rpm per chi è affezionato alla shell.
Ora siamo pronti per creare la nostra applicazione, e possiamo seguire due strade, la prima è creare l'applicativo con il Visual Studio .NET e poi importarlo su Linux, oppure scrivere direttamente il codice con Linux. La seguente applicazione utilizza un ComboBox, un bottone, un TextBox e una Label, selezionando una voce dal ComboBox comparirà la scelta nel TextBox. Dopo aver scritto il nostro codice dobbiamo compilare, ricordandoci di aggiungere il riferimento agli assembly System.Windows.Forms e System.Drawing.dll, con il seguente comando:

mcs Form1.cs /r:System.Windows.Forms.dll /r:System.Drawing.dll

Una volta compilato, eseguiamo: SWF=1 Form1.exe

Ecco il risultato in Linux:



ed in Windows:




Come si nota c'è qualche differenza, ma principalmente il risulato è molto simile, comunque il supporto a tutti i controlli delle WinForms non è completo, per approfondire l'utilizzo di Mono-Wine potete trovare esempi e informazioni qui : http://www.nullenvoid.com/mono/wiki/index.php ">Esempi Mono-Wine


ASP.NET
Ora parliamo dell'integrazione con ASP.NET. Il progetto mono ci offre due possibilità: XSP web Server o Apache Mono Module. Il primo è un web server a se stante, il secondo è un modulo che si affianca ad Apache.
In questo esempio è stato usato XSP.
Per installare il web server bisogna scaricare il codice, dopo di che scompattarlo

tar -xzvf xsp-[nome_pacchetto].tar.gz

Una volta scompattato usiamo la classica procedura per l'installazione da codice

% ./configure
% make
% make install


Ora siamo pronti, troveremo una cartella server, e quella sarà la nostra root, e con pochi comandi facciamo partire il nostro server

% cd server
% mono xsp.exe


e questa è la schermata che vedremo comparire:



Da come si vede il nostro server è attivo sulla porta 8080, ora non dobbiamo far altro che creare una pagina ASP.NET di test molto semplice, un semplice form che chi chiede il nostro nome ( vario molto vero? :-) )
Ecco il codice della nostra semplice pagina .aspx


<%@ Page Language="C#" %>
<html>
<head>
<script runat="server">
void Button1_OnClick(object Source, EventArgs e)
{
Span1.InnerHtml = "<h3>Ciao " + Name.Text.ToString() + "<h3>";
}

</script>
</head>
<body>
<h3>Come ti chiami?</h3>
<form id="ServerForm" runat="server">
<asp:textbox id="Name" runat="server"/>
<button id=Button1 runat="server" OnServerClick="Button1_OnClick">
Button1
</button>
<br>
<span id=Span1 runat="server" />
</form>
</body>
</html>


Ora non dobbiamo far altro che aprire il nostro browser preferito e andare all'indirizzo: http://localhost:8080/PaginaTest.aspx, ed ecco il risultato:



Conclusioni
Spero di aver stimolato la curiosità di molti su Linux e sul mondo Open Source. Il progetto mono ha un futuro? Bè è presto per dirlo, anche perchè è ancora un progetto nello stadio embrionale, di sicuro ci sarà molto da lavorare sulla compatibilità tra sistemi. Intanto aspettiamo trepidanti la versione 1.0.
Voto medio articolo: 3.8 Numero Voti: 11
Giovanni Ferron

Giovanni Ferron

Sviluppatore dal 2000. Collabora a grandi progetti nella creazione di portali e intranet aziendali. Attualmente ha lasciato la terra natia per una nuova avventura in Australia, dove lavora come programmatore web per una emittente radio Australiana. Profilo completo

Articoli collegati

Le licenze Open Source
Sempre più progetti sposano la filosofia Open Source, ricorrendo alle più disparate licenze software, creando un poco confusione agli sviluppatori che vorrebbero utilizzare il codice di tali progetti. Cerchiamo di rendere il tutto meno complicato.
Autore: Giovanni Ferron | Difficoltà:
Un browser alternativo : Mozilla Firefox
Un articolo controcorrente rispetto alla linea editoriale di questo sito, ma è quasi un dovere parlare della tecnologia e delle avanzate features messe a disposizione da questo ottimo Browser di ultima generazione perchè solo così si può definire questo gioiello. Provare per credere.
Autore: David De Giacomi | Difficoltà: | Commenti: 3
Utilizzare il Database MySQL con .NET
Questo articolo è rivolto a tutti quelli che vogliono sviluppare una soluzione efficiente senza sborsare cifre elevate per l'acquisto di licenze di SQL Server o Oracle e che non vogliono rinunciare alle prestazioni minori offerte da un "quasi database" come potrebbe essere Access.
Autore: David De Giacomi | Difficoltà: | Commenti: 11 | Voto:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5