26 dicembre 2010

[wxPython] La nostra prima finestra (video)

A volte le immagini valgono più di mille parole e quindi ecco un video per vedere in azione la prima lezione di wxPython.

24 dicembre 2010

L'anno che verrà..

Dio, Allah, Geova, Manitù, Buddah, Ganesha, Tux, Uomini del minuto o chiunque sia in ascolto, dopo aver risolto i problemi cruciali del Mondo come guerre, fame, malattie e governi ladri, perché non date un'occhiata anche alla mia lista dei desideri e con un piccolo gesto della mano, esaudirli senza troppa fatica?

In ordine sparso vi chiedo quindi di far...

...capire che non è coi tagli alla cultura, ricerca, sanità e servizi ai cittadini che si esce dalla crisi;

...terminare l'ottusa ignoranza verso il software libero e smetterla una volta per tutte di prendere posizioni a priori. Il nuovo modo di agire deve essere prima provare e poi giudicare;

...capire a Valve e Blizzard che Half Life 3 e Diablo 3 devono vedere la luce;

...capire che non si possono spremere i normali cittadini chiedendo a loro di coprire gli errori economici e strategici di chi è nella stanza dei bottoni;

...capire che calcio, grandi fratelli, isole, tette e culi non solo altro che oppio per i popoli e sono usati per ottenebrare le loro menti. Un uomo che si pone domande e pensa con la sua testa è molto pericoloso per i (pseudo)potenti;

...terminare l'egemonia di banche ed assicurazioni, perché sono troppo dannose;

...capire che aumentare le tasse in periodi di crisi conclamata, è un delitto. Non bisogna sostenere le grosse corporazioni che se ne infischiano di tutto e tutti ed invece bisogna sostenere lo sviluppo del mondo del lavoro, che è l'unica condizione necessaria per non soccombere di inedia;

...capire ai signori del marketing di smetterla di far vedere un mondo che non c'è, non ci credono neanche loro;

...capire che i beni primari devono essere di tutti e per tutti e non delle società con fini di lucro. Tra questi beni c'è anche la connettività, che deve essere un diritto;

...smetterla di riempirsi la bocca con termini inglesi, francesi, indiani, ecc... dei quali più di una volta ho il sospetto che non si conosca bene il significato;

...allineare i pianeti (questa la capiamo in pochi, ma buoni);

...trionfare il rock n' roll su tutto il resto;

Basta ho finito, poi magari mancando ancora sei giorni all'inizio del nuovo anno mi verranno in mente altri punti che non farò altro che aggiungere.

Buon Natale e buon Anno a tutti.

17 dicembre 2010

Niente religioni, è solo software.

Ho ricevuto un paio di email piuttosto piccate che mi accusano di essere un integralista di GNU/Linux e di non scrivere una sola parola sul mondo Microsoft perché lo considero il male.

Ho ignorato queste email, anche perché poche e sporadiche, ma poi l'ultima conteneva anche offese gratuite che mi hanno fatto un po' perdere la pazienza. Non capisco davvero perché si debba preferire la difesa ad oltranza di una posizione ciecamente, anziché guardarsi intorno e cercare di capire il mondo.

Se la scelta di seguire e sposare una causa a prescindere da tutto avviene in ambito sportivo, religioso e/o politico posso anche capirlo. Ma difendere a priori una società che deve fare del profitto a discapito di tutto, beh signori miei avete preso un abbaglio. Ripeto il concetto: il profitto come primario obiettivo.

Lo ribadisco per l'ennesima volta, non ho nulla contro Microsoft. L'azienda ha fatto nel corso della sua storia, tante cose positive per lo sviluppo dell'informatica come la conosciamo oggi ed altre molto negative. Il fatto che non usi una versione di Windows, non vuol dire che sia contro la società fondata da Gates ed Allen.

Come molti prima di me, mi sono semplicemente posto delle domande e sperimentato sulla mia pelle questa o quella soluzione, trovando da solo la mia strada. Non dirò mai che io ho la verità e che tutti gli altri sbagliano, non mi interessa questo. Dico solo che se nella mia vita posso scegliere, prima di dire che una direzione non è quella giusta la voglio provare e se non lo faccio almeno mi astengo dal giudicarla errata.

Un ultima considerazione (che richiama anche il titolo), ricordatevi che stiamo parlando di software, non della pace nel mondo. Non ci scanneremo mica per un insieme di righe di codice?

Tutto qui, spero di aver chiarito il concetto una volta per tutte.

[wxPython] Aggiungiamo un bottone ed un evento.

Dopo aver creato la nostra prima finestra, adesso è il momento di popolarla ed iniziamo col metterci un bel bottone.

Lasciamo lo stesso codice creato in precedenza, ma aggiungiamo (ovviamente) qualcosa.
  1. import wx
  2. class Main(wx.Frame):
  3.    def __init__(self,main,id):
  4.       wx.Frame.__init__(self,main,id,'Main',size=(600,400))
  5.       panel=wx.Panel(self)
  6.       button=wx.Button(panel,-1,label="Messaggio",pos=(10,10),size=(100,30))
  7. if __name__== "__main__":
  8.    app=wx.PySimpleApp()
  9.    frame=Main(None,-1)
  10.    frame.Show()
  11.    app.MainLoop()
Ma che abbiamo fatto in più di prima? Vedete la riga in blu, la 6? Essa aggiunge all'applicazione un bottone (wx.Button). Tra parentesi troviamo l'oggetto da cui dipende (panel), l'id (-1, quindi non esplicitato), la descrizione che comparirà sul pulsante (Messaggio) la sua posizione (10 px da destra e 10 px dall'alto) e la grandezza del pulsante stesso.

Eseguiamo il tutto e questo è il risultato.


Ma adesso che abbiamo creato un bottone non vogliamo fargli fare qualcosa? Ovvio che sì e quindi aggiungiamo un evento.

  1. import wx
  2. class Main(wx.Frame):
  3.    def __init__(self,main,id):
  4.       wx.Frame.__init__(self,main,id,'Main',size=(600,400))
  5.       panel=wx.Panel(self)
  6.       button=wx.Button(panel,-1,label="Messaggio",pos=(10,10),size=(100,30))
  7.        self.Bind(wx.EVT_BUTTON,self.closewindow, button)
  8.    def closewindow(self,event):
  9.       self.Destroy()
  10. if __name__== "__main__":
  11.    app=wx.PySimpleApp()
  12.    frame=Main(None,-1)
  13.    frame.Show()
  14.    app.MainLoop()
Le nuove righe introducono alcuni concetti nuovi. La riga 7 introduce un evento bottone (wx.EVT_BUTTON), che viene scatenato alla pressione del tasto quindi. Si seguito la funzione (closewindow) viene associata al nome del bottone (button).

Eseguendo l'applicativo e cliccando sul tasto si chiuderà la finestra.

Raccomandandomi fino all'esasperazione dell'importanza dell'indentazione del codice, ci si risente alla prossima.

11 dicembre 2010

[wxPython] La nostra prima finestra

Amo Python e lo considero il miglior linguaggio di programmazione orientato agli oggetti mai inventato da essere umano (grazie Guido). Ci faccio davvero di tutto, se solo lo bevessi anche il caffè, ed anche se le mie applicazioni sono in maggioranza in ambito web e dintorni, spesso devo mettere delle interfacce utente ai vari programmini scritti e per questo ormai da un po' mi affido a wxPython, una libreria grafica multipiattaforma per dare un volto al codice Python.

In ambiente GNU/Linux installare Python e wxPython è davvero semplice, troviamo tutto dentro il Synaptic di turno e quindi non mi soffermo più di tanto su questo aspetto.

Non perdiamo tempo e partiamo subito creando il codice per visualizzare la nostra prima applicazione, una finestra che 600x400 px. che contiene... nulla.


01 import wx
02
03 class Main(wx.Frame):
04   def __init__(self,main,id):
05      wx.Frame.__init__(self,main,id,'Main',size=(600,400))
06      panel=wx.Panel(self)
07
08 if __name__== "__main__":
09   app=wx.PySimpleApp()
10   frame=Main(None,-1)
11   frame.Show()
13   app.MainLoop()


Andiamo a spiegare quanto scritto. Nella riga 01 importo la libreria grafica e nella riga 03 creo la classe Main che conterrà un wx.Frame che altro non è che la base della mia finestra.

Entriamo nella classe e creiamo alla riga 04 la prima funzione, chiamata __init__, che è il vero e proprio costruttore della nostra finestra. I parametri passati sono quelli per identificare a chi ci stiamo riferendo, in questo caso a se stesso (self), il nome e l'id del nostro contenitore. Fatto questo diamo i parametri al nostro wx.Frame ed alla riga 05 avviene proprio questo ed in aggiunta a quanto proposto prima aggiungo il titolo, 'Main', che comparirà nella barra del titolo e le dimensioni in pixel (size).

Non resta poi che creare il wx.Panel che conterrà tutti i nostri oggetti, siano pulsanti, immagini o quant'altro. Ora naturalmente contiene... il nulla. (riga 06).

Da 08 a 13 ci sono le righe che mettono in secuzione quanto creato e potete anche copiarle ed incollarle per tutte le applicazioni. Sappiate che app è il cuore della nostra applicazione e frame quello che si vede.

Ecco il risultato del codice proposto, che potete lanciare dal vostro editor (se lo permette) oppure con l'interprete Python con $ python nome_file.py.



Ci siamo, la nostra prima finestra in wxPython. Unica raccomandazione OCCHIO ALL'INDENTAZIONE DEL CODICE, potreste ammattirvi per trovare un errore che in realtà errore non è.

A presto.

Convertire vmdk in vdi

Avete un'immagine per Wmware e vi serve un'immagine per Virtualbox? Nessun problema, qemu ci può aiutare.

Immaginiamo di avere un file chiamato chromeos.vmdk e di volerlo trasformare in chromeos.vdi. Utilizzeremo qemu per la nostra operazione.
sudo apt-get install qemu

Spostamioci nella cartella che contiene il file da convertire e digitiamo:
qemu-img convert chromeos.vmdk /tmp/chromeos.bin

Ci siamo quasi, manca poco, manca solo questo:
VBoxManage convertdd /tmp/chromeos.bin chromeos.vdi


Ecco fatto.

Tondo è bello...

Tondo è bello...