sabato 6 febbraio 2010

OOp in go-lang

Prima di cominciare a parlare dell'argomento di questo post consentitemi di fare un piccolo festeggiamento per il 200esimo post su questo blog. Ultimamente ho rallentato la frequenza di aggiornamenti ma spero di averne incrementato la qualità.

Penso che una caratteristica che ha fatto storcere il naso a molti sia l'assenza della keyword class nel linguaggio Go.
In un primo momento questa illustre assenza potrebbe far pensare all'assenza del concetto di oggetto che invece è molto presente e molto utile.

Ma andiamo in ordine:

1) Definizione di nuovi tipi
Go permette di definire nuovi tipi con la keyword type.
type File struct  {
fileName [] byte; //Name of the file
sizeInByte int; //Size of the file
path [] byte; //Location of the file on hd
}

In questo modo abbiamo associato alla struttura File un nuovo tipo che da ora in avanti avrà gli attributi descritti all'interno.

2) Definizione di nuovi metodi
Creare nuovi metodi che eseguano del codice è molto semplice.
func PrintAll()
{
fmt.Printf("All");
}

3) Associare i metodi ai tipi
A questo punto perchè non provare ad associare il metodo PrintAll al tipo File in modo che stampi tutti gli attributi di File quando viene invocato?
Si deve quindi dire al metodo PrintAll che eseguerà operazioni solo sul tipo File.
func (f * File) PrintAll()
{
fmt.Printf("Filename: %s\n",f.fileName);
fmt.Printf("Size: %d\n",f.sizeInByte);
fmt.Printf("Path: %s\n",f.path);
}

4) Istanziare un nuovo File
In questo modo si potrà dunque istanziare un nuovo oggetto di tipo file e invocarne il suo metodo.
filePtr := new(File); //File *
filePtr.fileName = "Useless.txt";
filePtr.sizeInByte = "1024";
filePtr.path = "$HOME";

//Call File method
filePtr.PrintAll();

------------------------------------------------------

L'argomento è ovviamente molto più esteso ma in questo post volevo dare soltanto un'introduzione all'utilizzo degli oggetti all'interno di Go per i più scettici.
Prossimamente potremo anche parlare di Interfacce lasciando però prima di addentrarci tutti i preconcetti che arrivano da altri tipi di linguaggi poichè Go affronta tali argomenti da un altro punto di vista.

martedì 26 gennaio 2010

Ma in Italia c'è internet?


Sapevate che esiste un Google Lab? ... Si? ... Bene!
Sapevate che il Google Lab ha organizzato un tour in giro per il mondo? È proprio una gran figata!!!
Sapevate che Google ha pensato bene di non includere l'Italia nel tour?

Ebbene si, Google, come è accaduto per l'Android Developer Challenge, ha ritenuto che l'Italia non è degna di certi riguardi. Prima però di scagliarsi contro la multinazionale di turno io mi fermerei un attimo a riflettere e guardare in faccia la realtà di ciò che il nostro paese fa nell'era del Web 2.0.

Le infrastrutture sono quelle che sono. Internet sui cellulari lo usa il 2% (stima mia personale fatta ad occhio con una certa ironia) della popolazione e quasi nessuno sa cosa vuol dire cloud.
Vi sembra normale? A me personalmente no! Direi che è giunto il momento di darsi una bella svegliata se non vogliamo rimanere indietro per sempre.

Detto questo Google non ci fa sicuramente una bella figura visto che per quanto riguarda la telefonia l'Italia ha sicuramente un mercato redditizio pari a quello degli altri paesi. Purtroppo è sul piano dei servizi che deficitiamo.

domenica 24 gennaio 2010

Parametri da linea di comando secondo Go

Go-lang è stato pensato per essere il linguaggio definitivo per le applicazioni di sistema.
Una delle cose che più impreziosiscono gli strumenti che (non) tutti i giorni utilizziamo per l'amministrazione del nostro sistema è sicuramente il parco di opzioni e flag che possiamo indicare da linea di comando.

Go-lang permette molto comodamente di dichiarare quali saranno i parametri che ci aspettiamo di ricevere da linea di comando, di che tipo saranno e che cosa comunicare all'operatore per aiutarlo nell'utilizzo del tool.

Vediamo, con un semplice esempio, ciò che Go ci mette a disposizione per rendere la nostra applicazione il più flessibile possibile.

Cominciamo con dichiarare quali flag ci aspetteremo:
//Flags
var file_to_download * string;
var fileType * string;
var configShow * string;
var configEdit * bool;


Successivamente definiamo le keywords con le quali potranno essere attivati i parametri:
/**
*Function used to initialize flags from command line.
*/
func initFlags() int
{
file_to_download = flag.String("d","","Type the name of the file");
fileType = flag.String("t","*","Kind of file you want to download:\n\t*: all\n\tmov: movie\n\tmsc: music");
configShow = flag.String("c","editor","Open the config file into chosen [editor]");
configEdit = flag.Bool("C",false,"Edit parameters of config from inside the program.");
}

Il package flag contiene una funzione di definizione parametro per ogni tipo di comando che desideriamo ricevere. Tutte queste funzioni però hanno tutte la stessa forma. Ricevono infatti tre parametri:

  1. La lettera/Le lettere che identificano il comando;

  2. Il comportamento di default;

  3. Un messaggio da dare all'operatore su come va utilizzato il flag.


Una volta definiti i flag possiamo utilizzare i comandi che arrivano dalla shell all'interno del nostro programma:
/**
*Main function. From here the program starts.
*/
func main()
{

//Initialize flags
initFlags();

flag.Parse(); //Scans the arg list and sets up flags

var fileStr string = "";
var typeStr string = "";
var confStr string = "";
var confMode bool = false;

confStr += *configShow;
confMode = *configEdit;

if(confMode)
{
os.Stdout.WriteString("Config mode\n");
}
else
{
os.Stdout.WriteString("Normal mode\n");
}

if( *file_to_download == "") //Want to download a file
{
fileStr += "errore";
fileStr += Newline;
os.Stdout.WriteString(fileStr);
}
else
{
fileStr += *file_to_download;
fileStr += Newline;
os.Stdout.WriteString(fileStr);
}

typeStr += *fileType;
typeStr += Newline;
os.Stdout.WriteString(typeStr);

//Useless calls
giogolib.LogMessage(def.Debug,"Applicazione partita");
}


Spero di aver mostrato in modo chiaro come Go lang permetta di fornire all'utente che andrà ad utilizzare la nostra applicazione tutti gli strumenti per adattare l'esecuzione del software alle sue esigenze.

giovedì 7 gennaio 2010

Gennaio bollente!

Dopo una breve e meritatissima vacanza passata sul suolo parigino si ricomincia con la nostra battaglia per la libertà nel software (e non solo).


Lo stato italiano finalmente ci da uno strumento importante che è la class action. Sicuramente questo strumento si andrà ad affinare ma già al giorno d'oggi ci consente di battagliare per avere dei computer senza Windows pre installato. In questo modo l'utente sarà libero di scegliere quale sistema operativo e suite da lavoro installare.

Per approfondire questo interessante argomento vi consiglio di dare una sbirciatina a ossblog.it che ha un articolo veramente ben fatto ;)

domenica 20 dicembre 2009

Go Language - go statement

Il linguaggio Go, sviluppato da Google, mi ha subito affascinato. I programmatori di Google hanno da subito sostenuto che questo linguaggio di sistema sarebbe stato "divertente" da usare.
Non posso far altro che confermare quando dichiarato da big G e in questo video-tutoria cerco di far vedere con un semplice esempio quanto sia facile scrivere codice multithread con Go.



Perdonatemi l'audio che è leggermente "a scatti" ma recordmydesktop ha deciso che oggi lo vuole fare così. Una volta risolti i problemi pubblicherò una versione con l'audio migliore.

Per quanto riguarda un po' di documentazione ecco la specifica del comando "go": Go docs.

Ecco invece il codice dell'esempio per poterlo provare con mano:
package main

import "fmt";

func main()
{
var a int;

a = 10;

go thread1(&a);
}

func thread1(v * int)
{
//do nothing
fmt.Printf("Value %d",*v);
}

martedì 8 dicembre 2009

Vipera IDE now on svn

Con un po' di ritardo rispetto all'inizio dei lavori ho messo sotto SVN il mio nuovo progetto sviluppato in Qt.

Spero possa essere d'aiuto a molti che non solo vogliono avvicinarsi a python (per il momento può essere un editor di qualsiasi cosa) ma anche a coloro che vogliono giocare un po' con le librerie Qt.

Il link dove poter consultare/scaricare il codice sorgente è all'indirizzo https://code.google.com/p/viperaide/.

Sono molto graditi tutti i suggerimenti e tutte le critiche.

domenica 6 dicembre 2009

How To Pythonize - Letture impegnate

Per la serie imparare Python voglio ora comunicare l'uscita, in ottobre, di un libro completo e molto utile.

Learning Python è giunto alla quarta edizione. La terza edizione copriva praticamente tutti gli aspetti core di Python 2.5 ma dopo l'uscita di Python 3.x è stato necessario anche aggiornare tutta la letteratura di riferimento. Ecco come si pone questa nuova edizione.

Ho ottenuto ieri il libro e mi è sembrato subito molto completo e chiaro in pieno stile O'Reilly. Tratta veramente un'infinità di aspetti su Python 2.6 e 3.x (Siamo arrivati alla versione 3.1). È un libro molto grande, sia dal punto di vista del volume visto che si tratta di più di 1200 pagine, sia dal punto di vista degli argomenti trattati.
Mi sembra un deciso passo avanti rispetto all'edizione 3 e non solo una semplice revisione che molto spesso vediamo arrivare sugli scaffali.

Insomma un must di ogni programmer-bilioteca.

mercoledì 11 novembre 2009

Let's GO

Il mio aggregatore di notizie mi vomita tonnellate di news ogni giorno in una pagina dal design minimale (GOOGLE RULEZ).
Oggi però, proprio parlando di Google, mi è saltato all'occhio un trafiletto veramente interessante:

Have you heard about Go? We released a new, experimental systems programming language today. It is open source and we're excited about sharing it with the development community. For more information, check out the Google Open Source blog.

By Robert Griesemer, Rob Pike, Ken Thompson, Ian Taylor, Russ Cox, Jini Kim and Adam Langley - The Go Team


Allora mi sono precipitato sul sito ufficiale: http://golang.org e ho scoperto che è un linguaggio di sistema dinamico come python ma che si compila e ha una velocità di esecuzione come C/C++.
In pratica ora non resta che prendersi i tutorial e cercare di capire che cosa ci ha nascosto mamma Google per tutto questo tempo...

È ora di tuffarsi in un nuovo linguaggio tutto da imparare...