<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Alessio Treglia</title>
	<atom:link href="http://www.alessiotreglia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alessiotreglia.com</link>
	<description>everybody lies</description>
	<pubDate>Thu, 13 Nov 2008 20:48:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/it/</creativeCommons:license>		<item>
		<title>Brematuro, ma antani per due</title>
		<link>http://www.alessiotreglia.com/articoli/brematuro-ma-antani-per-due/</link>
		<comments>http://www.alessiotreglia.com/articoli/brematuro-ma-antani-per-due/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 20:45:35 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Cazzate varie]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=327</guid>
		<description><![CDATA[Eccovi serviti:
Il primo sintetizzatore portatile fu un dispositivo inventato negli anni Venti da Leon Theremin. Il theremin è costituito da due antenne che creano un circuito audio che può essere modulato muovendo una mano tra di esse, una per controllare il volume e l&#8217;altra per l&#8217;altezza. Brian Wilson ha utilizzato un theremin per creare quei [...]]]></description>
			<content:encoded><![CDATA[<p>Eccovi serviti:</p>
<blockquote><p>Il primo sintetizzatore portatile fu un dispositivo inventato negli anni Venti da Leon Theremin. Il theremin è costituito da due antenne che creano un circuito audio che può essere modulato muovendo una mano tra di esse, una per controllare il volume e l&#8217;altra per l&#8217;altezza. Brian Wilson ha utilizzato un theremin per creare quei suoni ultraterreni nella canzone «Good Vibrations»</p>
<p><strong>(Ben Milstead, </strong><span style="text-decoration: underline;">Home Recording - Guida completa</span><strong>)</strong></p></blockquote>
<p>Su, bambini fatelo anche voi, ecco le istruzioni:</p>
<ul>
<li>Prendete il libro a voi più vicino e apritelo a pagina 56.</li>
<li>Trovate la quinta frase (o periodo).</li>
<li>Scrivetela nel vostro blog assieme a queste istruzioni.</li>
<li>Prendete il libro più vicino! Non quello più bello o quello intellettuale!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/brematuro-ma-antani-per-due/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Si riparte!</title>
		<link>http://www.alessiotreglia.com/articoli/si-riparte/</link>
		<comments>http://www.alessiotreglia.com/articoli/si-riparte/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 23:03:45 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Cazzate varie]]></category>

		<category><![CDATA[Jaunty]]></category>

		<category><![CDATA[Notizie]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=323</guid>
		<description><![CDATA[#1

#2
Sono stati aperti i repository di Ubuntu 9.04 «Jaunty Jackalope»!

]]></description>
			<content:encoded><![CDATA[<h2 style="text-align: center;">#1</h2>
<p style="text-align: center;"><a href="http://i.media.goal.com/g/38320.jpg" rel="lightbox[323]"><img class="aligncenter" title="Roma 3 - 1 Chelsea " src="http://i.media.goal.com/g/38320.jpg" alt="" width="480" height="628" /></a></p>
<h2 style="text-align: center;">#2</h2>
<p style="text-align: center;">Sono stati aperti i repository di <strong>Ubuntu 9.04</strong> «<strong>Jaunty Jackalope</strong>»!</p>
<p style="text-align: center;"><a href="http://images.alessiotreglia.com/pool/news-041108.png" rel="lightbox[323]"><img class="aligncenter" title="Aperti i repository di Jaunty!" src="http://images.alessiotreglia.com/pool/news-041108.png" alt="" width="475" height="195" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/si-riparte/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bucato il sito del ministro Tremonti</title>
		<link>http://www.alessiotreglia.com/articoli/bucato-il-sito-del-ministro-tremonti/</link>
		<comments>http://www.alessiotreglia.com/articoli/bucato-il-sito-del-ministro-tremonti/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 14:26:03 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Notizie]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<category><![CDATA[Società e media]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=320</guid>
		<description><![CDATA[Alle ore 15.21 del 2 novembre 2008, il sito del ministro dell&#8217;Economia Giulio Tremonti appare così:

]]></description>
			<content:encoded><![CDATA[<p>Alle ore 15.21 del 2 novembre 2008, il sito del <a href="http://tinyurl.com/6bq2e2">ministro dell&#8217;Economia Giulio Tremonti</a> appare così:</p>
<p style="text-align: center;"><a href="http://images.alessiotreglia.com/pool/sito-tremonti-bucato.png" rel="lightbox[320]"><img class="aligncenter" title="Bucato il sito del ministro dellEconomia" src="http://images.alessiotreglia.com/pool/sito-tremonti-bucato.png" alt="" width="489" height="350" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/bucato-il-sito-del-ministro-tremonti/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Intrepid è tra noi</title>
		<link>http://www.alessiotreglia.com/articoli/intrepid-e-tra-noi/</link>
		<comments>http://www.alessiotreglia.com/articoli/intrepid-e-tra-noi/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 11:33:45 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Aggiornamento]]></category>

		<category><![CDATA[Intrepid]]></category>

		<category><![CDATA[Notizie]]></category>

		<category><![CDATA[Open source &amp; free software]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=315</guid>
		<description><![CDATA[Come da release schedule, ieri, 30 ottobre, è stata rilasciata Ubuntu 8.10 «Intrepid Ibex».
Ma sapete già tutto, non mi dilungo, vi lascio giusto una lista di collegamenti sull&#8217;argomento:

Annuncio ufficiale
Intrepid Ibex, qualche numero
Note di rilascio (in italiano)
Guida all&#8217;aggiornamento
Riassunto di una giornata frenetica&#8230;

]]></description>
			<content:encoded><![CDATA[<p>Come da <em>release schedule</em>, ieri, 30 ottobre, è stata rilasciata <strong>Ubuntu 8.10</strong> «<strong>Intrepid Ibex</strong>».</p>
<p>Ma sapete già tutto, non mi dilungo, vi lascio giusto una lista di collegamenti sull&#8217;argomento:</p>
<ul>
<li><a href="https://lists.ubuntu.com/archives/ubuntu-announce/2008-October/000116.html">Annuncio ufficiale</a></li>
<li><a href="http://www.linuxdc.it/?p=176">Intrepid Ibex, qualche numero</a></li>
<li><a href="http://wiki.ubuntu-it.org/IntrepidNoteDiRilascio">Note di rilascio (in italiano)</a></li>
<li><a href="http://wiki.ubuntu-it.org/Installazione/AggiornamentoIntrepid">Guida all&#8217;aggiornamento</a></li>
<li><a href="http://l3on.netsons.org/blog/2008/10/30/riassunto-di-una-giornata-frenetica/">Riassunto di una giornata frenetica&#8230;</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/intrepid-e-tra-noi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wordpress e il planet di Ubuntu Italia</title>
		<link>http://www.alessiotreglia.com/articoli/wordpress-e-il-planet-di-ubuntu-italia/</link>
		<comments>http://www.alessiotreglia.com/articoli/wordpress-e-il-planet-di-ubuntu-italia/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 15:55:27 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Planet Ubuntu-it]]></category>

		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=312</guid>
		<description><![CDATA[Con il mio penultimo articolo ho nuovamente sputtanato (lo so, è volgare, spero che mi perdoniate) il planet di Ubuntu-it.
Qualcuno riesce a spiegarmi perchè il tag more sembri non funzionare a dovere?
]]></description>
			<content:encoded><![CDATA[<p>Con il mio <a href="http://www.alessiotreglia.com/articoli/mvc-e-python-gtk-seconda-parte/">penultimo articolo</a> ho nuovamente sputtanato (lo so, è volgare, spero che mi perdoniate) il <a title="Planet di Ubuntu Italia" href="http://planet.ubuntu-it.org">planet di Ubuntu-it</a>.</p>
<p>Qualcuno riesce a spiegarmi perchè il tag <em>more</em> sembri non funzionare a dovere?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/wordpress-e-il-planet-di-ubuntu-italia/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Che offerta!</title>
		<link>http://www.alessiotreglia.com/articoli/che-offerta/</link>
		<comments>http://www.alessiotreglia.com/articoli/che-offerta/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 13:08:35 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Notizie]]></category>

		<category><![CDATA[Siti,servizi &amp; blog]]></category>

		<category><![CDATA[Università e scienza]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=310</guid>
		<description><![CDATA[Unica, imperdibile.
Clicca.
]]></description>
			<content:encoded><![CDATA[<p>Unica, imperdibile.</p>
<p><a title="Che offerta!" href="http://cgi.ebay.it/VENDESI-Universita-di-Roma_W0QQitemZ280279993663QQcmdZViewItem?hash=item280279993663&amp;_trkparms=72%3A1025%7C39%3A1%7C66%3A2%7C65%3A12%7C240%3A1318&amp;_trksid=p3911.c0.m14">Clicca</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/che-offerta/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MVC e Python + GTK, seconda parte</title>
		<link>http://www.alessiotreglia.com/articoli/mvc-e-python-gtk-seconda-parte/</link>
		<comments>http://www.alessiotreglia.com/articoli/mvc-e-python-gtk-seconda-parte/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 08:45:51 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[GTK+]]></category>

		<category><![CDATA[Guide e howto]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=295</guid>
		<description><![CDATA[Ri-eccomi sull&#8217;argomento, prima di cominciare voglio ringraziare l&#8217;autore del framework in questione, Roberto Cavada, per aver commentato l&#8217;articolo precedente.
Nella prima puntata di questo tutorial avevo promesso di mostrarvi una piccola applicazione di esempio, Todoman, utile per comprendere in modo più approfondito il funzionamento di Pygtkmvc.
L&#8217;applicazione gestisce delle liste ToDo e consente all&#8217;utente di inserire, modificare [...]]]></description>
			<content:encoded><![CDATA[<p>Ri-eccomi sull&#8217;argomento, prima di cominciare voglio ringraziare l&#8217;autore del framework in questione, Roberto Cavada, per aver <a href="http://www.alessiotreglia.com/articoli/python-e-mvc-una-storia-tutta-da-scrivere-prima-parte/#comments">commentato</a> l&#8217;articolo precedente.</p>
<p>Nella <a title="Python e MVC, una storia tutta da scrivere (Prima parte)" href="http://www.alessiotreglia.com/articoli/python-e-mvc-una-storia-tutta-da-scrivere-prima-parte/">prima puntata</a> di questo <em>tutorial</em> avevo promesso di mostrarvi una piccola applicazione di esempio, <strong>Todoman</strong>, utile per comprendere in modo più approfondito il funzionamento di <a title="Pagina del progetto" href="http://sourceforge.net/projects/pygtkmvc/">Pygtkmvc</a>.</p>
<p>L&#8217;applicazione gestisce delle liste <em>ToDo</em> e consente all&#8217;utente di inserire, modificare e eliminare i task a proprio piacimento.</p>
<p><span id="more-295"></span></p>
<p>Ma basta <em>chiacchiere</em> e partiamo subito alla scoperta delle numerose funzionalità offerte dal <em>framework</em>. Innanzitutto analizziamo il modello di dominio e partiamo con una delle classi principali (come al solito, i commenti sono <em>embedded</em>):</p>
<pre name="code" class="python">

import gtkmvc, gtkmvc.model

class ToDoListModel(gtkmvc.model.TreeStoreModel):
    &quot;&quot;&quot;
    Rappresenta la lista dei task.

    La classe estende un modello di vista ad albero,
    in modo da velocizzare la sua rappresentazione.
    &quot;&quot;&quot;
    # Questo dizionario contiene gli attributi
    # &quot;observable&quot;, ogni modifica apportata
    # alle proprietà verrà notificata in modo
    # automatico. Nel corpo dei metodi della
    # classe si potrà accedere a tali proprietà
    # come a qualsiasi altra variabile di istanza.
    __properties__ = { &#039;name&#039; : &#039;&#039;, &#039;author&#039; : &#039;&#039; }
    def __init__(self):
        &quot;&quot;&quot;
        Costruttore della classe.

        Richiama il costruttore della classe base, passandogli
        come parametri il tipo di ognuna delle quattro colonne
        del widget TreeStore.
        &quot;&quot;&quot;
        gtkmvc.model.TreeStoreModel.__init__(self, int, str, str, &#039;gboolean&#039;)
        self.__setup_properties() # inizializza i widget
    def __setup_properties(self):
        &quot;&quot;&quot;
        Inizializza i widget grafici.
        &quot;&quot;&quot;
        self.name = _(&quot;Unnamed todo list&quot;)
        self.author = _(&quot;Unknown author&quot;)
    def get_todo_by_path(self, path):
        &quot;&quot;&quot;
        T.get_todo_by_path(path) -&gt; todo -- inizializza un nuovo task con le informazioni presenti nella vista ad albero
        &quot;&quot;&quot;
        ta = ToDoItemModel()
        ta.name = self[path][columns[&#039;NAME&#039;]]
        ta.priority = self[path][columns[&#039;PRIORITY&#039;]]
        ta.description = self[path][columns[&#039;DESCRIPTION&#039;]]
        ta.done = self[path][columns[&#039;DONE&#039;]]
        return ta
    def has_item(self, item_name):
        &quot;&quot;&quot;
        T.has_item(item_name) -&gt; bool -- restituisce True se nella vista ad albero è presente una riga con la stesso valore nella colonna &#039;NAME&#039;, False altrimenti
        &quot;&quot;&quot;
        found = False
        for i in self:
            if i[columns[&#039;NAME&#039;]] == item_name:
                found = True
            break
        return found
    def append_todo(self, todo):
        &quot;&quot;&quot;
        T.append(todo) -- inserisce un oggetto nella lista
        &quot;&quot;&quot;
        self.append(None, [
            todo.priority,
            todo.name,
            todo.description,
            todo.done])
    def clear(self):
        &quot;&quot;&quot;
        T.clear() -- cancella il contenuto della lista
        &quot;&quot;&quot;
        gtkmvc.TreeStoreModel.clear(self)
        self.__setup_properties()
</pre>
<p>Quelli che seguono sono gli indici delle colonne che desideriamo mostrare nel widget <a href="http://library.gnome.org/devel/gtk/2.14/GtkTreeView.html">GtkTreeView</a>:</p>
<pre name="code" class="python">

# Contiene gli indici delle colonne della vista ad albero.
columns = { &#039;PRIORITY&#039; : 0,
            &#039;NAME&#039; : 1,
            &#039;DESCRIPTION&#039; : 2,
            &#039;DONE&#039; : 3 }
</pre>
<p>Una volta definita la lista, possiamo occuparci degli elementi che dovrà contenere:</p>
<pre name="code" class="python">

class ToDoItemModel(gtkmvc.model.Model):
    &quot;&quot;&quot;
    Rappresenta i task.

    La classe contiene delle proprietà testuali, numeriche e booleane,
    perciò estende un semplice modello generico.
    &quot;&quot;&quot;
    __properties__ = {&#039;name&#039; : &#039;&#039;, &#039;priority&#039; : 0, &#039;description&#039; : &#039;&#039;, &#039;done&#039; : False}
    def __init__(self):
        &quot;&quot;&quot;
        Costruttore della classe.
        &quot;&quot;&quot;
        gtkmvc.model.Model.__init__(self)
        self.__setup_properties()
        self.treestore = None               # relazione 1-a-1 con la lista che lo contiene
    def __setup_properties(self):
        &quot;&quot;&quot;
        Inizializza i widget grafici.
        &quot;&quot;&quot;
        self.name = &quot;Unnamed todo item&quot;     # nome di default
        self.description = &quot;&quot;
        self.done = False
        self.priority = 5
    def set_treestore(self, treestore):
        &quot;&quot;&quot;
        T.set_treestore(treestore) -- imposta la vista ad albero nella quale è elencato.
        &quot;&quot;&quot;
        self.treestore = treestore
</pre>
<p>Infine, poichè desideriamo salvare su file le nostre <em>liste todo</em>, definiamo una versione serializzabile del tipo lista: </p>
<pre name="code" class="python">

class ToDoListModelSerializable(ToDoListModel):
    &quot;&quot;&quot;
    Questa è la versione serializzabile della classe
    ToDoListModel, fornisce i metodi necessari per la
    scrittura e la lettura della configurazione su file.
    &quot;&quot;&quot;
    SECTION_TODOLIST_DETAILS = &#039;Todolist details&#039;
    OPTION_TODOLIST_NAME = &#039;Name&#039;
    OPTION_TODOLIST_AUTHOR = &#039;Author&#039;
    OPTION_TODOACTION_DESCRIPTION = &#039;Description&#039;
    OPTION_TODOACTION_PRIORITY = &#039;Priority&#039;
    OPTION_TODOACTION_DONE = &#039;Done&#039;
    def __init__(self):
        &quot;&quot;&quot;
        Costruttore della classe.
        &quot;&quot;&quot;
        ToDoListModel.__init__(self)
        self.filename = &#039;&#039;
        self.changed = False
        # oggetto ConfigParser necessario per le operazioni su file
        self.config_parser = ConfigParser()
    def clear(self):
        &quot;&quot;&quot;
        T.clear() -- cancella il contenuto della lista

        Richiama il metodo della classe base per cancellare
        il contenuto della lista, quindi reimposta il nome del file
        e il flag sui cambiamenti.
        &quot;&quot;&quot;
        ToDoListModel.clear(self)
        self.filename = &#039;&#039;
        self.changed = False
    def save_to_file(self):
        &quot;&quot;&quot;
        T.save_to_file() -&gt; bool -- salva la lista su disco

        Memorizza il contenuto su file.
        &quot;&quot;&quot;
        try:
            config_file = open(self.filename, &#039;w&#039;) # apre in scrittura
        except IOError, e:
            raise errors.FileUnknownException
        if self.config_parser.has_section(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS) == False:
            self.config_parser.add_section(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS)
        self.config_parser.set(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS, ToDoListModelSerializable.OPTION_TODOLIST_NAME, self.name)
        self.config_parser.set(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS, ToDoListModelSerializable.OPTION_TODOLIST_AUTHOR, self.author)

        for row in self: # memorizza tutti i task
            todo_name = row[columns[&#039;NAME&#039;]]
            if self.config_parser.has_section(todo_name) == False:
                self.config_parser.add_section(todo_name)
            self.config_parser.set(todo_name, ToDoListModelSerializable.OPTION_TODOACTION_DESCRIPTION, row[columns[&#039;DESCRIPTION&#039;]])
            self.config_parser.set(todo_name, ToDoListModelSerializable.OPTION_TODOACTION_PRIORITY, str(row[columns[&#039;PRIORITY&#039;]]))
            self.config_parser.set(todo_name, ToDoListModelSerializable.OPTION_TODOACTION_DONE, str(row[columns[&#039;DONE&#039;]]))
        self.config_parser.write(config_file) # save to file
        config_file.close()
        return True
    def read_from_file(self):
        &quot;&quot;&quot;
        T.read_from_file() -&gt; bool -- legge la lista da file

        Recupera le informazioni sulla lista da file.
        &quot;&quot;&quot;
        config_file = self.filename
        self.config_parser.read([config_file])
        sections = self.config_parser.sections()
        if sections == []:
            raise errors.FileNotFoundException
        self.clear() # clears the treestore
        self.name = self.config_parser.get(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS, ToDoListModelSerializable.OPTION_TODOLIST_NAME)
        self.author = self.config_parser.get(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS, ToDoListModelSerializable.OPTION_TODOLIST_AUTHOR)
        self.changed = False
        sections.remove(ToDoListModelSerializable.SECTION_TODOLIST_DETAILS)
        for s in sections: # crea gli oggetti dei task
            # Si, lo so, si tratta di eager loading, ma questa è solo un&#039;applicazione di esempio!
            todo = ToDoItemModel()
            todo.name = s
            todo.description = self.config_parser.get(s, ToDoListModelSerializable.OPTION_TODOACTION_DESCRIPTION)
            todo.priority = self.config_parser.getint(s, ToDoListModelSerializable.OPTION_TODOACTION_PRIORITY)
            todo.done = self.config_parser.getboolean(s, ToDoListModelSerializable.OPTION_TODOACTION_DONE)
            self.append_todo(todo)
        self.filename = config_file
        return True
</pre>
<p>Non credo siano necessari ulteriori spiegazioni, il codice illustrato è molto semplice e ben commentato.</p>
<p>Una volta sistemato il modello possiamo creare la vista, ma prima di scrivere altro codice apriamo <strong>Glade</strong> e progettiamo una semplice interfaccia grafica. Il mio consiglio è di creare un file di progetto per ogni finestra.</p>
<p>Ecco degli <em>screenshot</em>, per prima vi mostro la finestra principale del programma:</p>
<p style="text-align: center;"><a href="http://images.alessiotreglia.com/pool/todoman_main_window.glade.png" rel="lightbox[295]"><img class="aligncenter" title="La finestra principale del programma" src="http://images.alessiotreglia.com/pool/todoman_main_window.glade.png" alt="" width="514" height="458" /></a></p>
<p>Questo è il dialogo delle proprietà della lista <em>todo</em>:</p>
<p style="text-align: center;"><a href="http://images.alessiotreglia.com/pool/todoman_dialog_properties.glade.png" rel="lightbox[295]"><img class="alignnone" title="Le proprietà della lista" src="http://images.alessiotreglia.com/pool/todoman_dialog_properties.glade.png" alt="" width="514" height="458" /></a></p>
<p>All&#8217;interno della seguente finestra di dialogo sono presenti le proprietà dei singoli <em>task</em>:</p>
<p style="text-align: center;"><a href="http://images.alessiotreglia.com/pool/todoman_dialog_edit.glade.png" rel="lightbox[295]"><img class="alignnone" title="Proprietà dei singoli task" src="http://images.alessiotreglia.com/pool/todoman_dialog_edit.glade.png" alt="" width="514" height="458" /></a></p>
<p>Carino, no?</p>
<p>Per quanto riguarda il codice, la questione è molto semplice; apriamo un nuovo file <em>view.py</em> e definiamo al suo interno le classi destinate a contenere le proprietà delle tre finestre mostrate sopra:</p>
<pre name="code" class="python">

import gtkmvc, gtkmvc.view

class ToDoListView(gtkmvc.view.View):
    def __init__(self, ctrl):
        gtkmvc.view.View.__init__(self, ctrl, GLADE_MAIN_WINDOW)

class ToDoListPropertiesView(gtkmvc.view.View):
    def __init__(self, ctrl):
        gtkmvc.view.View.__init__(self, ctrl, GLADE_DIALOG_PROPERTIES)

class ToDoItemView(gtkmvc.view.View):
    def __init__(self, ctrl):
        gtkmvc.view.View.__init__(self, ctrl, GLADE_DIALOG_EDIT)
</pre>
<p>I commenti qui sono inutili, basta solo assegnare alle tre costanti globali (quelle in <span style="text-decoration: underline;">MAIUSCOLO</span>) i percorsi dei tre file <strong>Glade</strong>.</p>
<p>Ora il modello è pronto, la vista anche, manca solo il controller, che implementeremo nella prossima puntata.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/mvc-e-python-gtk-seconda-parte/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roma3, anche Ingegneria esprime il suo dissenso</title>
		<link>http://www.alessiotreglia.com/articoli/roma3-anche-ingegneria-esprime-il-suo-dissenso/</link>
		<comments>http://www.alessiotreglia.com/articoli/roma3-anche-ingegneria-esprime-il-suo-dissenso/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 16:47:57 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Notizie]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<category><![CDATA[Università e scienza]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=290</guid>
		<description><![CDATA[Questo NON è un articolo politico, l&#8217;autore desidera solamente riportare un fatto di cronaca.
Oggi pomeriggio, alle ore 18.00 circa, sulle scale di emergenza è apparso questo striscione:

Mi ero concesso 10 minuti di pausa, giusto il tempo per revisionare un paio di pagine sul wiki di Ubuntu-it e, beh, sono rimasto a dir poco incredulo: conoscendo [...]]]></description>
			<content:encoded><![CDATA[<p class="important" style="text-align: center;"><strong>Questo NON è un <em>articolo politico</em>, l&#8217;autore desidera </strong><strong>solamente </strong><strong>riportare un fatto di cronaca</strong>.</p>
<p>Oggi pomeriggio, alle ore 18.00 circa, sulle scale di emergenza è apparso questo striscione:</p>
<p style="text-align: center;"><img class="aligncenter" title="La Facoltà di Ingegneria di Roma3 manifesta il suo dissenso" src="http://images.alessiotreglia.com/pool/ingegneria-non-dorme.jpg" alt="Lo striscione &quot;incriminato&quot;" width="400" height="320" /></p>
<p style="text-align: left;">Mi ero concesso 10 minuti di pausa, giusto il tempo per revisionare un paio di pagine sul <a title="Molto lavoro da fare!" href="http://wiki.ubuntu-it.org/CategoryDaRevisionare">wiki di Ubuntu-it</a> e, beh, sono rimasto a dir poco incredulo: conoscendo la mia facoltà e le persone che la frequentano, non avrei mai creduto di assistere a un gesto di aperto dissenso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/roma3-anche-ingegneria-esprime-il-suo-dissenso/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Risolto un bug in Installation Report Generator</title>
		<link>http://www.alessiotreglia.com/articoli/risolto-un-bug-in-installation-report-generator/</link>
		<comments>http://www.alessiotreglia.com/articoli/risolto-un-bug-in-installation-report-generator/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 02:22:00 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Bug e problemi vari]]></category>

		<category><![CDATA[Installation Report Generator]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=279</guid>
		<description><![CDATA[Trovato e risolto.
La prima versione rilasciata, a causa di una mia disattenzione, inseriva una stringa sbagliata nel box che avrebbe dovuto contenere il risultato del seguente comando:
cat /proc/cpuinfo
Con la versione 0.1.1, scaricabile dai repository dedicati, tutto funziona a dovere.
Per maggiori informazioni, consultate la pagina dedicata al progetto.
]]></description>
			<content:encoded><![CDATA[<p><a title="Uncorrect 'cat /proc/info' result" href="https://bugs.launchpad.net/bugs/281220">Trovato</a> e risolto.</p>
<p>La prima versione rilasciata, a causa di una mia disattenzione, inseriva una stringa sbagliata nel box che avrebbe dovuto contenere il risultato del seguente comando:</p>
<p><code>cat /proc/cpuinfo</code></p>
<p>Con la versione <strong>0.1.1</strong>, scaricabile dai repository dedicati, tutto funziona a dovere.</p>
<p>Per maggiori informazioni, consultate la <a title="Pagina dedicata a Installation Report Generator" href="http://www.alessiotreglia.com/installation-report-generator/">pagina dedicata al progetto</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/risolto-un-bug-in-installation-report-generator/feed/</wfw:commentRss>
		</item>
		<item>
		<title>L&#8217;annuncio: Installation Report Generator</title>
		<link>http://www.alessiotreglia.com/articoli/lannuncio-installation-report-generator/</link>
		<comments>http://www.alessiotreglia.com/articoli/lannuncio-installation-report-generator/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 16:35:44 +0000</pubDate>
		<dc:creator>quadrispro</dc:creator>
		
		<category><![CDATA[Documentazione e wiki]]></category>

		<category><![CDATA[GTK+]]></category>

		<category><![CDATA[Hardy]]></category>

		<category><![CDATA[Installation Report Generator]]></category>

		<category><![CDATA[Planet Ubuntu-it]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.alessiotreglia.com/?p=268</guid>
		<description><![CDATA[Ecco una schermata:


A partire dalla configurazione hardware dell&#8217;utente, il programma genera il resoconto dell&#8217;installazione di Ubuntu, pronto per essere inserito nella sezione Hardware/Notebook del nostro wiki. Lo correttezza stilistica della pagina viene garantita dal template standard.
Per installare l&#8217;applicazione (per ora disponibile solo per Ubuntu 8.04 «Hardy Heron»), è sufficiente aggiungere le seguenti righe in fondo [...]]]></description>
			<content:encoded><![CDATA[<p>Ecco una schermata:</p>
<p style="text-align: center;"><a href="http://images.alessiotreglia.com/pool/irg-screenshot-01.png" rel="lightbox[268]"><img class="alignnone" title="La schermata iniziale del programma" src="http://images.alessiotreglia.com/pool/irg-screenshot-01.png" alt="" width="474" height="493" /></a></p>
<p style="text-align: center;">
<p>A partire dalla configurazione hardware dell&#8217;utente, il programma genera il resoconto dell&#8217;installazione di Ubuntu, pronto per essere inserito nella sezione <a title="Sezione dedicata ai notebook" href="http://wiki.ubuntu-it.org/Hardware/Notebook">Hardware/Notebook</a> del nostro wiki. Lo correttezza stilistica della pagina viene garantita dal <a title="NotebookModello sul wiki di Ubuntu-it" href="http://wiki.ubuntu-it.org/NotebookModello">template standard</a>.</p>
<p>Per installare l&#8217;applicazione (per ora disponibile solo per <strong>Ubuntu 8.04</strong> «<strong>Hardy Heron</strong>»), è sufficiente aggiungere le seguenti righe in fondo al proprio <em>/etc/apt/sources.list</em>:</p>
<p><code>deb http://ppa.launchpad.net/irgenerator-developers/ubuntu hardy main<br />
deb-src http://ppa.launchpad.net/irgenerator-developers/ubuntu hardy main</code></p>
<p>Per autenticare i pacchetti è sufficiente digitare il seguente comando in una finestra di terminale:</p>
<p><code>wget -q http://wiki.ubuntu-it.org/AlessioTreglia?action=AttachFile&amp;do=get&amp;target=alessio_treglia.asc -O- | sudo apt-key add -</code></p>
<p><a title="[Progetto] Installation Report Generator" href="http://forum.ubuntu-it.org/index.php/topic,223378.0.html">Link all&#8217;annuncio sul forum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessiotreglia.com/articoli/lannuncio-installation-report-generator/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
