di  -  martedì 18 maggio 2010

Alcune settimane fa ho scritto un post sull’eterna lotta tra gli ambienti di sviluppo integrati ed i semplici editor di testo. Oltre che per raccontare la mia personale esperienza il post è stato scritto per estorcere dai lettori dritte e consigli.

A quanto pare l’iniziativa è stata utile almeno per me. Grazie ad un commento del nostro Cesare Di Mauro sono venuto a conoscenza di DreamPie, quella che gli stessi sviluppatori definiscono come da titolo dell’articolo:

“The Python shell you’ve always dreamed about”.

Solitamente sono una persona che tende a diffidare dei proclami degli sviluppatori avendo vissuto sulla mia pelle come spesso tendano a ingigantire le qualità di qualcosa su cui hanno investito tempo e passione. Troppe volte sono andato a scaricare “l’editor definitivo” o “il messia dei player video” per ritrovarmi tra le mani software assolutamente inadatti alle mie esigenze.

Anche a me in passato è capitato di scrivere qualcosa che credevo fosse assolutamente il massimo per poi scontrarmi con la dura realtà: era il massimo solo per l’uso che ne facevo io (e dopo un paio di giorni di nemmeno per quello).

Con una buona dose di speranza, ma quel filo di scetticismo che serve sempre a non rimanere troppo delusi, mi sono lanciato sul sito del progetto e ho scaricato il pacchetto deb. Dopo pochi secondi necessari all’installazione mi sono trovato di fronte all’interfaccia del programma.


Ecco come si presenta DreamPie al primo avvio

Al primo avvio si è presentata anche l’unica cosa che mi ha fatto storcere il naso: la scelta di fornire una shell a sfondo nero (per programmare ho sempre preferito “mettere le classi nero su bianco”).

Il disappunto è rientrato praticamente subito visto che tra le opzioni ho subito trovato una tab dedicata allo schema dei colori. Il programma offre la possibilità di cambiarlo a piacimento ed offre un preset “chiaro” e uno “scuro”.

I colori di sfondo e dell’evidenziazione della sintassi possono essere addirittura assegnati singolarmente ed è possibile salvare lo schema ottenuto. Questa feature farà sicuramente felici quelli che mi piace chiamare “personalizzatori compulsivi”.


Finestra di configurazione dei colori

Compiuto questo primo passo ho iniziato ad esplorare la finestra principale. Il programma è estremamente semplice e si compone di una finestra divisa in due verticalmente. Nella parte superiore viene presentata la cronologia dei comandi interpretati dalla shell python e il rispettivo output. La parte inferiore è dedicata all’editing del codice.

Come in ogni shell interattiva che si rispetti scrivendo una semplice istruzione e premendo invio questa sarà interpretata al volo. Il comando e il corrispondente output verrà quindi mostrato nell’area superiore. Se poi vogliamo scrivere un blocco di istruzioni senza passare per l’interprete, basterà mettere uno spazio al termine della prima riga in modo da rimanere nella fase di editing.

In generale per eseguire un pezzo di codice in qualsiasi momento basta utilizzare la combinazione di tasti Ctrl+Invio.

La caratteristica centrale dell’editor è il potente meccanismo di auto-completamento.

DreamPie esalta i vantaggi del linguaggio dinamico interpretato presentando un auto-completamento che suggerisce direttamente metodi e attributi dell’oggetto ispezionato a runtime.

Il programma inoltre è in grado di mostrare la documentazione dei vari moduli, funzioni, classi e metodi se opportunamente commentati seguendo le semplici regole per la generazione automatica delle docstring.


Auto-completamento in azione

Rimanendo alla fase di stesura del codice DreamPie fornisce una modalità di composizione dei path con completamento automatico. Quando si lavora sui file capita spesso di far riferimento a percorsi assoluti o relativi e la possibilità di scriverli in maniera rapida ed interattiva è senza dubbio una feature gradita.

La cronologia delle istruzioni impartite oltre ad essere presentata nella zona superiore viene anche conservata in memoria. Con le combinazioni Ctrl+freccia_su e Ctrl+freccia_giu è possibile scorrere la cronologia all’interno della zona dedicata all’editing per riprendere con rapidità pezzi di codice scritti in precedenza.

La history completa dei tentativi fatti può essere esportata in html e reimportata successivamente in DreamPie. Chi programma sa quanto è utile tenere traccia dei vari tentativi fatti per la risoluzione di un particolare problema.


La comoda funzione “Copy code only”

Una caratteristica che non avevo mai visto in nessun altra shell interattiva è la modalita “Copy code only”. In pratica è possibile copiare blocco di codice dalla zona superiore senza preoccuparsi di non includere l’output o gli errori dell’interprete che verranno automaticamente rimossi.


Raggruppamento automatico per output molto lunghi

Altra piccola ma utile caratteristica è il raggruppamento automatico degli output molto lunghi. Per evitare di intasare lo schermo, se l’output di una certa funzione andrà ad occupare molte righe, questo verrà automaticamente raggruppato lasciando la possibilità di espanderlo in caso di necessità.

Degna di menzione è anche la natura multipiattaforma e multi-interprete del programma. DreamPie rilasciato sotto licenza GPLv3 è disponibile per GNU/Linux, Windows e MacOSX e può essere utilizzato con CPython, Iron Python e Jython.

L’unico miglioramento che mi è venuto in mente per il programma dopo due settimane di utilizzo riguarda il layout della finestra principale.
Lavorando con un portatile widescreen avrei gradito la possibilità di affiancare orizzontalmente editor e visualizzatore della cronologia.

Data la natura aperta del programma, in un periodo di tregua universitaria, mi piacerebbe cimentarmi nell’implementazione della cosa. Sarebbe anche un’occasione per conoscere meglio le librerie grafiche gtk utilizzate per il progetto.

Chiudendo mi sento di consigliare assolutamente a tutti questo utilissimo strumento e di ringraziare ancora una volta Cesare per avermelo fatto scoprire.

10 Commenti »

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.

  • # 1
    Cesare Di Mauro
     scrive: 

    Grazie a te per lo splendido articolo, che rende giustizia a quest’utilissimo strumento. :)

    Una cosa che mi piacerebbe vedere è un “porting” di DreamPie su shell testuale, usando una CUI (tipo i vecchi Turbo Pascal 4.0..7.0), perché mi farebbe estremamente comodo utilizzarla in remoto sulle macchine di produzione. :-P

  • # 2
    Emanuele Rampichini (Autore del post)
     scrive: 

    @Cesare
    Alla fine ho approfittato della pausa pranzo per curiosare nei sorgenti e con 3 secondi sono riuscito ad impostare il layout verticale.

    http://img138.imageshack.us/img138/6528/schermatahc.png

    Credo che farne un interfaccia testuale utilizzando per esempio le librerie curses ( http://www.python.it/doc/howto/Curses/curses-it/curses-it.html ) non sia troppo difficile considerando che da quello che ho visto di sfuggita il core è ben separato dalla gui. Potrebbe essere un’idea carina per un progetto estivo. :D

  • # 3
    Cesare Di Mauro
     scrive: 

    Io al momento ho altro da fare, ma puoi proporlo allo sviluppatore: http://wiki.python.org/moin/DreamPieFeatureRequests

    Tra l’altro è un tipo abbastanza sensibile ai commenti (e ai bug report), per cui se può ti accontenta.

  • # 4
    Franci
     scrive: 

    Tra questi qual’e’ il python piu’ prestante:
    Python 2.5, Python 2.6, Jython 2.5, IronPython 2.6, Python 3.1?

    La versione per Win usa le lib. Qt oppure e’ un’applicazione nativa win32?

    Grassie

  • # 5
    Emanuele Rampichini (Autore del post)
     scrive: 

    @Franci
    Per quanto riguarda il “python più prestante” sinceramente non ho dati alla mano. Il vantaggio di jithon ed Iron python è quello di poter utilizzare le varie librerie java o del framework .net altrimenti inutilizzabili con il linguaggio python.
    Altro vantaggio che conosco di jython è la gestione dei thread nettamente migliore rispetto a quella dell’implementazione cpython.

    Il programma utilizza le pygtk su tutte le piattaforme. Non ti fare ingannare dal codice che trovi all’interno degli screenshot che ho postato. Ho semplicemente importato un paio di moduli delle pyQt4 che ricordavo al volo per mostrare in maniera veloce le caratteristiche della shell.

    @Cesare
    Appena ho un po di tempo vedrò di contattarlo.

  • # 6
    Cesare Di Mauro
     scrive: 

    @Franci: difficile a dirsi. Sicuramente “se la battono” Python 2.6 e Jython 2.5, che sono le soluzioni più prestanti.

    Quest’ultima avvantaggiata coi thread, e grazie all’uso del JIT della VM Java. Però bisogna vedere sempre il tipo di codice.

  • # 7
    Andrea
     scrive: 

    ma ipython proprio no vi piace? :)

  • # 8
    Giornale di Sistema
     scrive: 

    Siete riusciti a farlo funzionare con Python 3.1 su Ubuntu 10.4? Se si, mi potete indicare come?
    A me da problemi già in fase d’installazione se come default uso Python 3.1, se invece lascio il 2.6 tutto funziona.

  • # 9
    Emanuele Rampichini (Autore del post)
     scrive: 

    @Giornale di Sistema
    Sinceramente non ho provato con python3. Non ce l’ho nemmeno installato tra l’altro. Prova a chiedere direttamente allo sviluppatore sulla mailing list o compilando un bug.

  • # 10
    Giornale di Sistema
     scrive: 

    Grazie per il suggerimento, in effetti potrebbe trattarsi di un bug visto che nella homepage del programma è indicato il supporto anche a Python 3.1.

    Ciao ciao.
    @:\>

Scrivi un commento!

Aggiungi il commento, oppure trackback dal tuo sito.

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.