Python e le classi astratte

Avevo bisogno di una classe virtuale pura che fornisse ai sottotipi un’implementazione standard di alcuni metodi ma che, al contempo, li obbligasse a fornire delle nuove implementazioni degli stessi. Con questa soluzione sono riuscito a raggiungere il risultato voluto, inoltre i metodi sovraccarichi richiamano la versione fornita dalla classe base virtuale.


class Virtual:

    __metaclass__ = ABCMeta

    @abstractmethod
    def _update(self, *args, **kwargs):

        print "metodo virtuale"

    def _method_template(self, _method, *args, **kwargs):

        getattr(self, _method)(*args, **kwargs)
        getattr(Virtual, _method)(self, *args, **kwargs)

    def __getattr__(self, name):

        _method = "_%s" % name
        if _method in Virtual.__abstractmethods__:
            impl_method = lambda *y, **z: Virtual._method_template (self, _method, *y, **z)
            setattr(self, name, impl_method)
            return impl_method
        else:
            raise AttributeError("'%(class)s' object has no attribute '%(attr)s'" % {'class' : self.__class__.__name__,
                                                                                     'attr' : name})


class Class(Virtual):
    def _update(self):
        print "metodo \"reale\""

if __name__ == "__main__":
    c = Class()
    print c
    c.update()

Gestire i caratteri con Font Manager

Già disponibile in Debian sid da qualche giorno, é entrato da poche ore in Maverick e fornisce delle funzionalità davvero interessanti per quanto riguarda la gestione dei font.

Sto parlando di Font Manager, sviluppato in C e Python da Jerry Casiano, vera e propria chicca per chi vuole installare, rimuovere e confrontare i caratteri installati sul proprio sistema.

Seguono un paio di schermate:

Per installarlo basta un

sudo apt-get install font-manager

Fatemi sapere cosa ne pensate 😉

Link

StreamerOne presenta BeConn

350 canali fra radio e TV, comoda interfaccia web, accesso via HTTP, MMS over HTTP e RTSP, codifiche video Flash e H.264. In una sola parola: BeConn.

BeConn fornisce un apparato televisivo digitale terrestre e un apparato videoregistratore per poter accedere in forma integrale, in diretta e registrata, a tutti i canali radio-televisivi in chiaro del digitale terrestre.

Voi direte: ottimo! Ma che c’entra con Ubuntu? Fatemi rispondere con uno screenshot di questa pagina:

Nautilus Pastebin Extension, come “incollare” file in giro per la rete con un clic di mouse

Sono un utente affezionato di numerosi servizi pastebin e un paio di giorni fa, ormai stufo di seguire l’iter “apri file -> seleziona tutto il testo -> copia -> apri/demassimizza il browser -> clicca sulla voce dei preferiti relativa al nopaste -> incolla testo -> clicca su Send/Paste/altro -> attendi il caricamento -> copia il link”, decisi di cercare la giusta soluzione per il mio problema.

L’ho sviluppata in pochissimo tempo, si chiama Nautilus Pastebin: come avrete intuito dal nome, si tratta di un’estensione per il gestore file di GNOME.

Come funziona?

Semplice: basta selezionare un file con il tasto destro del mouse, fare clic su «Pastebin» e, se la connessione a Internet è attiva, dopo pochi secondi vedrete comparire una notifica simile a quella in figura:

Mi pare già di sentire le prime proteste:

Ahò! Ma ‘sta bolla nun se pò cliccà!

Vero! Ma la bolla è lì solo per notificare all’utente l’avvenuta operazione (insomma, per fare bella figura…), per toccare con mano i risultati ottenuti basta aprire un browser e incollare il contenuto degli appunti nella barra degli indirizzi (grazie per l’idea, Muflone!).

L’applicazione adatta automagicamente il MIME type dell’oggetto selezionato alla configurazione dei parametri specificata nella sezione del file di configurazione relativa al servizio pastebin scelto; è doveroso spendere qualche parola per il file .conf fornito con il pacchetto: per impostare un pastebin diverso da quello di default basta creare un nuovo file di configurazione nautilus-pastebin.conf in ~/.config/nautilus-pastebin/, contenente le configurazioni dell’utente, e incollare al suo interno ciò che segue:

[generals]
pastebin = $SEZIONE_DEL_FILE_DI_CONFIGURAZIONE_GLOBALE

In caso di problemi di configurazione o connettività mancante, apparirà un messaggio simile al seguente:

Dove la trovo? Come la installo?

Questa è la pagina del progetto dove troverete tutti i link necessari.

Per installare l’estensione si può procedere con uno dei seguenti metodi:

  1. Utilizzare lo script setup.py presente nel tarball.
  2. Copiare a mano i seguenti file:
    1. scripts/nautilus-pastebin.py in /usr/lib/nautilus/extensions-2.0/python/
    2. data/nautilus-pastebin.conf in /etc/ oppure in ~/.config/nautilus-pastebin/
    3. data/nautilus-pastebin.png in /usr/share/pixmaps/

Per vedere la nuova estensione sarà necessario riavviare nautilus:

killall nautilus

Alcuni dei pastebin preconfigurati non funzionano a dovere e servirà del tempo per perfezionare e ampliare il supporto (non tutti i MIME type vengono riconosciuti e la sintassi spesso non risulta correttamente evidenziata, analizzare le form di tutte delle configurazioni è un lavoro lungo e noioso).

Chiunque voglia partecipare allo sviluppo dell’estensione con patch, configurazioni, traduzioni o idee è il benvenuto!

Link

MVC e Python + GTK, seconda parte

Ri-eccomi sull’argomento, prima di cominciare voglio ringraziare l’autore del framework in questione, Roberto Cavada, per aver commentato l’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’applicazione gestisce delle liste ToDo e consente all’utente di inserire, modificare e eliminare i task a proprio piacimento.

Continua a leggere

L’annuncio: Installation Report Generator

Ecco una schermata:

A partire dalla configurazione hardware dell’utente, il programma genera il resoconto dell’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’applicazione (per ora disponibile solo per Ubuntu 8.04 «Hardy Heron»), è sufficiente aggiungere le seguenti righe in fondo al proprio /etc/apt/sources.list:

deb http://ppa.launchpad.net/irgenerator-developers/ubuntu hardy main
deb-src http://ppa.launchpad.net/irgenerator-developers/ubuntu hardy main

Per autenticare i pacchetti è sufficiente digitare il seguente comando in una finestra di terminale:

wget -q http://wiki.ubuntu-it.org/AlessioTreglia?action=AttachFile&do=get&target=alessio_treglia.asc -O- | sudo apt-key add -

Link all’annuncio sul forum

Python e MVC, una storia tutta da scrivere (Prima parte)

Qualche giorno fa, girovagando per l’Universo, ho scoperto un pacchetto fantastico di cui ignoravo completamente l’esistenza: si tratta di python-gtkmvc, contenente un’interessantissima implementazione di MVC per lo sviluppo in Python di applicazioni GTK+.

Prima di illustrarvi le innumerevoli possibilità offerte dai moduli contenuti nel pacchetto in questione, mi sento in dovere di fornirvi perlomeno un’introduzione a MVC: l’acronimo sta per Model-View-Controller (capita sovente di incontrarlo orribilmente tradotto nella lingua di Dante come Modello-Vista-Controllore) e indica uno dei design pattern maggiormente noti e diffusi nello sviluppo di interfacce grafiche, soprattutto negli ambiti della programmazione web (per la quale è nato), basato sul principio di divisione delle responsabilità fra i componenti che interpretano i tre ruoli fondamentali di un sistema software:

Continua a leggere

Una nuova macro per il wiki di Ubuntu-it

Prendendo spunto da un articolo di Stephan Hermann, nel quale veniva mostrato il codice di una simpatica quanto utile macro per MoinMoin, ho pensato bene di sviluppare anche io una nuova macro per il wiki de’ noantri.

Invece di partire dal codice della macro originale (che è disponibile all’indirizzo dell’articolo sopra citato), vi mostro subito subito la mia piccola invenzione:

Continua a leggere