Feeds:
Posts
Comments

Archive for the ‘Virtual world’ Category

Ho appena letto due articoli molto interessanti da IBM DeveloperWorks: dato che si sta ormai festeggiando il ventennale di Java, è d’uopo un’analisi dello stato del linguaggio di programmazione (ormai vicino alla sua settima major release) e del mondo che lo circonda, specie a seguito del passaggio di proprietà da Sun ad Oracle (e prima ancora, del suo rilascio sotto licenza libera), per vedere se e quale futuro ci può essere. Penso che tutti i miei 10 lettori sappiano che Java è il mio linguaggio di programmazione preferito in assoluto, e quindi non posso esimermi dal riportare alcuni dettagli interessanti (per quanto vi consigli comunque la lettura perlomeno del primo dei due articoli stessi).

Riflessioni dagli utilizzatori

Nel primo articolo, l’autore convoca una sorta di tavola rotonda digitale, in cui chiede ad alcuni sviluppatori vicini al mondo DeveloperWorks il loro parere sulle questioni sul piatto di Java in questo 2010; in linea generale, l’aspetto positivo che emerge è la varietà di approcci, framework e librerie che si sono sviluppate non tanto e non solo intorno a Java, ma intorno alla sua Virtual Machine, in modo tale che alcuni dei difetti che emergono per Java stesso sono magari già superati da altri approcci compatibili (da un punto di vista di API) ma allo stesso tempo molto diversi (come produttività); alcune risposte emerse degne di osservazione:

  • il primo difetto di Java è l’ammontare di codice necessario per fare qualunque cosa (assolutamente sperimentato anche da me, nel mio piccolo, specie nelle tecnologie usate quest’anno a Sistemi Distribuiti (vero, Sante?)): il futuro inevitabilmente si sposta verso quei framework che sono in grado di sviluppare rapidamente (Agile alla fin fine, Rails in altre parole) e che permettano all’informatico di concentrarsi sulle (famigerate) parti funzionali del prodotto, ed ignorare il più possibile le non funzionali (vedi i behaviour di Erlang); da questo punto di vista, alcuni passi avanti sono già presenti in Java 7 (vedi secondo paragrafo), altri erano già nati in librerie collaterali, altri già sono usabili sulla JVM.
  • Le preoccupazioni verso Oracle sembrano essere venute meno, anche se si teme un po’ per il mondo Open Source (e già c’è stato l’esempio di OpenSolaris, su cui non approfondisco ulteriormente per non uscire dal tema) e sul fatto che alcune delle cose, che sono sempre state libere, di punto in bianco possano non esserlo più (ma nessun esempio viene fatto in merito); fortunatamente, aggiungo io, Java è ora sotto GPL, il che non è male, senza contare il fatto che gli autori sembrano a tratti sottovalutare il potere del Free Software, che invece io ritengo discretamente rilevante.
  • La modularizzazione che verrà introdotta con Java 7 (hopefully, aggiungo io) non sembra riscontrare i favori della tavola rotonda, in particolare si criticano gli approcci, forse troppo teorici o comunque troppo lontani dalla realtà.
  • Non mi soffermo sul problema di “Java è morto”: premesso che lo si dice da anni (e non succede, per ora), il fatto che la Virtual Machine supporti molti altri approcci diversi (funzionali piuttosto che “a la Rails“) fa supporre che il “mondo Java” non sia così facilmente abbattibile.
  • Il cloud computing (parafrasando gli Iron Maiden: “Cloud, cloud everywhere / Cloud, cloud everywhere“): per quanto tutti ritengano il cloud soprattutto una buzzword del momento, l’idea è che le tecnologie sottostanti restino interessanti, ed in particolare l’acquisizione di SpringSource da parte di VMWare fa pensare ad uno sviluppo in quella direzione del famoso framework Spring.
  • Java nelle nuove industrie: tolto il discorso cloud, il discorso mobile (Android in particolare) è assolutamente interessante, sottostando tuttavia alla risoluzione positiva della modularizzazione, ed al contempo all’affrontare e risolvere in maniera decente Java ed il multimedia (da sempre tallone d’Achille, per usare un eufemismo).

Da notare, a margine, come il campo dell’informatizzazione nel no-profit sia ritenuto assolutamente redditizio e colonizzabile, ed è interessante dato che è un discorso emerso anche tra di noi in altre sedi e con altre persone.

Java 7

Il secondo articolo si concentra invece sulle innovazioni che Java 7 (previsto entro l’anno) dovrebbe portare con sè; integro i punti seguenti anche con un paio di riflessioni del primo articolo (per evitare di ripetere le cose due volte), sottolineando come ho ignorato la seconda parte di questo articolo, dato che si parla della VM di IBM, che io non uso (e che peraltro credo sia a pagamento):

  • semplificazione della scrittura di linguaggi “di scripting” sulla JVM: ne avevo già sentito parlare l’anno scorso, dato che avevo fatto una ricerca in merito per l’articolo del corso di “Argomenti avanzati di Ingegneria del Software” (e, se vi interessa, leggetevi l’articolo tra le mie pubblicazioni), e di fatto sono introdotte cose (che io non voglio sapere…) per rendere semplice la resa di linguaggi dinamici in bytecode, velocizzandone anche le prestazioni.
  • Le stringhe nei costrutti switch: sono quasi commosso, dato che è una cosa di una utilità tremenda, che ho sempre invidiato a PHP.
  • Le chiusure: alcuni autori nella tavola rotonda sottolineavano come la popolarità di linguaggi su JVM come Groovy indichi che il popolo richiede a gran voce le chiusure, e queste atterreranno nei nostri computer molto presto; la sintassi definitiva è ancora in fase di sistemazione, ma restano sicuramente interessanti soprattutto per la dinamicità del codice che risulta.
  • La concorrenza tra processi e thread: mi viene di nuovo in mente Erlang, quando viene citato il framework Kilim (con cui devo assolutamente curiosare) ed il paradigma fork-join che verrà portato con Java 7, che di fatto è l’idea che sta dietro anche all’algoritmo di map-reduce; l’applicazione forzata del buon vecchio Divide et impera non può che essere importante all’alba dei multicore.

In conclusione (mia, non degli articoli)

Insomma, tirate le fila di queste riflessioni, direi che di carne al fuoco ce n’è parecchia ancora: sono sinceramente curioso di provare qualcuno dei linguaggi costruiti sulla JVM (ad esempio Scala, cui avevo assistito ad una presentazione lo scorso JavaDay), e di vedere come sarà la versione finale delle closure (dato che, ormai, con il mio lavoro di tesi su Erlang ne uso a palate); non credo che Java sia morto, o quantomeno non credo che morirà senza combattere.

Read Full Post »

Polinux 10.04 RC

Ecco il primo screenshot di Polinxu 10.04 RC, installata su Ubuntu 10.04 RC; inutile dire che questa release candidate esiste solamente se installate Polinux tramite il suo repository Launchpad, le iso seguiranno il rilascio ufficiale la settimana prossima.

Read Full Post »

Mi sembra giusto pubblicare uno pseudo-mini howto su come configurare VirtualBox affinchè si crei una rete interna tra le macchine virtuali, e contemporaneamente tale rete sia raggiungibile dal sistema host esterno (e solo da lui); tutti i test sono stati effettuati con la versione 3.1.6 su Ubuntu 9.10 (sia guest che host).

Dopo una discussione avuta qualche giorno fa con Sante e Massimo riguardo l’esistenza di questa possibilità, che io personalmente non avevo trovato, ho deciso di esplorare a fondo la questione. La mia necessità, per un lavoro che sto facendo per la tesi, è quella di avere un tot di macchine virtuali connesse tra loro, e che a loro volta siano in rete locale con la macchina host; l’unica possibilità che conoscevo io per fare questo era di utilizzare la cosiddetta “scheda con bridge”, la quale tuttavia richiede che l’interfaccia di rete host sia attiva (ovviamente, qualcuno potrebbe dire): soluzione impraticabile se sto creando questa rete locale solo col mio computer, senza un router esterno.

L’opzione giusta da scegliere è “scheda solo host”, su tutte le macchine virtuali: a quel punto, appena avvierete la prima macchina, l’interfaccia vboxnet0, presente nel sistema host, verrà attivata con un IP del tipo 192.168.56.1, di fatto facendo capire che la rete locale che stiamo per creare è sulla sottorete 56.

Dopo aver effettivamente verificato della possibilità di assegnare un altro IP (ad esempio 56.2) ad una macchina virtuale, e che il ping rispondeva correttamente, ho aggiunto un altro tassello: è possibile infatti installare il pacchetto dhcp3-server, che altri non è che il famigerato server DHCP, nel sistema host; una configurazione banale come la seguente (/etc/dhcp3/dhcpd.conf):

default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.56.0 netmask 255.255.255.0 {
range 192.168.56.2 192.168.56.254;
}

fa sì che tale server assegni indirizzi da 2 a 254 sulla sottorete di cui sopra; un’altra semplice modifica a /etc/default/dhcp3-server per aggiungere la riga

INTERFACES="vboxnet0"

che indica su quale interfaccia restare in ascolto, quindi via anche al server tramite /etc/init.d/dhcp3-server start ed il gioco è fatto!

P.S.: verificate, prima di avviare il demone, che vboxnet0 sia attiva; in caso contrario, avviate la macchina virtuale con cui volete creare la rete, e l’interfaccia si attiverà automaticamente.

Read Full Post »

Finalmente, dopo alcuni mesi in cui sono entrato nel magico mondo dei linguaggi funzionali, prima con il corso di sistemi distribuiti e poi con la tesi, inizio ad entrare nella mentalità come si deve, e devo ammettere che le soddisfazioni non si fanno attendere!

Dopo aver infatti passato i primi tempi a riscrivere le funzioni di base (per la gestione di liste e dizionari), ora uso le librerie più adatte, e la produttività ne risente: lunedì mattina ho rifatto un modulo come server, utilizzando i behaviour di Erlang (una sorta di design pattern), così da sfruttare i sistemi di gestione dei crash (e degli aggiornamenti automatici, ma su quelli non sono ancora entrato nel merito), e le soddisfazioni sono state decisamente alte.

Insomma, consiglio a tutti quelli che non hanno mai provato, di studiarsi un po’ (magari a tempo perso) questo paradigma, parecchio diverso dal solito ma altrettanto interessante e curioso (to say the least); d’altronde, perfino Stroustrup consiglia di provare cose diverse!

Peraltro, il mese prossimo parte un corso breve sui linguaggi funzionali: prima la pratica e poi le basi teoriche…

Read Full Post »

Corsi Linux 2010

Corsi Linux 2010

Domani si terrà la seconda lezione dei corsi Linux 2010, tenuti anche quest’anno dall’associazione POuL; domani in particolare la giornata sarà dedicata al mondo dell’Open Source: un’introduzione teorica sulla sua storia, le licenze, i punti di forza; seguirà una panoramica delle distribuzioni più (o meno) conosciute, ed infine una presentazione tenuta da me e Sante su Polinux.

Partecipate numerosi!

Read Full Post »

Permettetemi un piccolo rant: ma è mai possibile che la gente faccia push di codice che non compila?

Posso capire su VCS non distribuiti (come SVN), dove se volevi avere un backup dovevi necessariamente buttare tutto sul server, ma su DVCS come GIT, dove puoi tranquillamente eseguire commit, e quindi salvare le modifiche, in locale, prima di fare push per favore accertarsi che quantomeno compili: non dico che addirittura funzioni, ma che almeno make non restituisca allarmi sparsi…

Read Full Post »

Tanto per cambiare, si discute su Ubuntu, e naturalmente i commenti sono perlopiù contrari alla politica che Canonical sta perseguendo (e mi riferisco, ad esempio, al rinnovamento del brand), ma ormai a questo ci siamo abituati, ed è un fatto dovuto principalmente al fatto che i geek che stanno intorno a Linux troppo spesso lasciano avvicinarsi solo coloro che sanno come minimo ricompilare un kernel, altrimenti (a loro parere) dovresti restare col tuo bel Windows/Mac.

Dopo aver letto un paio di post interessanti, vorrei semplicemente aggiungere che, di fatto, Canonical sta cercando di mantenere sia l’aspetto commerciale che l’aspetto comunitario del proprio prodotto (che, ricordiamolo, resta un prodotto rivolto ad un mercato, non è fatto da hobbisti); in particolare, regge il secondo tramite il nome, l’idea che sta dietro al nome, ed alcuni servizi interessanti (riflettevo, mentre facevo login per scrivere quest’articolo, che uso proprio l’OpenID di Launchpad…), mentre per il primo decide di dare una fresh look al brand, e si rivolge a grafici privati e non alla community.

Il secondo post afferma che il generare una specie di “gara” tra gli utenti avrebbe portato ad un lavoro magari di qualità inferiore ma che avrebbe ulteriormente cementato la comunità: ebbene, è un discorso che non ha alcun senso: Canonical deve vendere il suo brand, non crea un logo per la gloria(TM), ma per motivi di marketing, e non può farlo fare a cani porcique.

Può essere che, ad un certo momento, facciano come Red Hat e creino una distro collaterale (Fedora), può darsi che invece decidano di continuare a mantenere tutto insieme come ora, ma di certo (come, del resto, anche Pollycoke scrive) non si può pretendere che abbiano comportamenti completamente dettati dalla community stessa.

Read Full Post »

A chi utilizza Wine con programmi che riproducono audio: finalmente Pulseaudio gestisce anche questo!

Seguendo le istruzioni contenute in questo post, è possibile ricompilare Wine e poter scegliere il noto layer audio come uscita predefinita: in questo modo, si evitano gracchiamenti vari che a volte si sentono ad esempio in videogiochi o altri applicativi. Da notare che esistono un paio di problemi in fase di compilazione, in particolare

  1. nel file dlls/winepulse.drv/Makefile.in, dopo il patching, va rimossa la riga @dependencies@, che non viene risolta dalla fase di configurazione
  2. se su un sistema a 64bit, e se state compilando con il supporto agli mp3, ad un certo punto vi verrà restituito un errore in una chiamata alla libmpg123: tale chiamata va modificata aggiungendo _64.

Insomma, pur restando del parere che è Flash che incasina le cose di solito quando altri programmi cercano di accedere ad Alsa, posso comunque confermare il mio apprezzamento a Pulseaudio, che si sta sempre di più dimostrando in questi ultimi mesi un prodotto maturo e funzionante.

Read Full Post »

Mi sto rendendo sempre più conto che i sistemi ibridi saranno decisamente il futuro dei sistemi informatici.

Prima nello studio di processi e thread, all’interno dei sistemi operativi, ci si è resi conto che la realizzazione ibrida a livello kernel ed a livello software è la soluzione maggiormente utile, e non posso non pensare ad Erlang ed alla sua gestione interna dei processi, a sua volta poi ripartita su thread distribuiti sulle CPU esistenti.

Spesso e volentieri inoltre si parla della pesantezza del kernel Linux, che è costruito in modo monolitico, rispetto a come potrebbe essere invece un microkernel; forse, tuttavia, anche qui la soluzione alla fine si rivelerà essere in un qualche modo ibrida (e non sono un profondo conoscitore dell’ambiente, quindi non so se esistano veramente dei progetti in tal senso o sia solo una mia idea): d’altronde, i microkernel non sono usati (almeno, così come stanno) in nessun sistema operativo “di produzione”…

Ed infine, anche i progetti software di questi anni sono sempre più orientati verso l’uso di sistemi misti di programmazione/esecuzione, e lampante è una presentazione recente sul sistema di chat di Facebook, che usa C/C++ per la parte di logging, Erlang per gestire i canali di comunicazione, PHP/JS per la parte di presentazione (AJAX, naturalmente). Di fatto, ogni linguaggio e runtime ha le sue peculiarità, e sempre più spesso si utilizza un determinato linguaggio solo per la parte in cui risulta maggiormente performante o più semplice da usare.

Insomma: sistemi ibridi a tutti i livelli, penso saranno inevitabili.

Read Full Post »

The exam session is almost over, so I’m getting back to development, after more than a month without any activity…

I already have a TODO list for Sembrowser, so expect some new features soon; in the meantime I have added a small utility, which you can find in the misc/ subdirectory on Git, useful for testing the application itself: if you are like me, and you create detailed directory trees for your files, then with the Python script that I have added (which, by the way, has been also an interesting experiment with KDE bindings under Python) you can specify a directory (say: /home/user/Documents/University/Some course name) and all the files found under that directory will be tagged with each fragment of their path (or part of it, for example Documents, University and Some course name will be tags applied to all files under that path). Check the script options for a more precise usage example.

This can be useful for having a bunch of tags automatically associated to some files, so you can then try Sembrowser itself having something to browse, if you don’t usually use tags.

See you soon!

Read Full Post »

« Newer Posts - Older Posts »