From 3416fee99b5b134f9c0341b506dc60c57aea74e4 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 23 May 2009 16:38:25 +0200 Subject: presentazione --- presentazione.rest.txt | 271 +++++++++++++++++++++++++++++++++++++++++++++++++ riferimenti.rest.txt | 97 ++++++++++++++++++ 2 files changed, 368 insertions(+) create mode 100644 presentazione.rest.txt create mode 100644 riferimenti.rest.txt diff --git a/presentazione.rest.txt b/presentazione.rest.txt new file mode 100644 index 0000000..97e34f8 --- /dev/null +++ b/presentazione.rest.txt @@ -0,0 +1,271 @@ +.. -*- mode: rst; coding: utf-8 -*- + +============================ + Presentazione per LD2005GR +============================ +:Author: dakkar +:CreationDate: 2005-11-21 + +Note generali a uso dakkar +========================== + +Tempo: + 1h – 1h20 + +Audience: + non sanno nulla di Perl, ma sono venuti qui per mettere su il loro + sistema Linux figo. Hanno qualche idea di come mettere su uno + pseudo-server, forse. + +Parte prima: di cosa si parla +============================= + +Cos'è Perl +---------- + +Perl è un linguaggio di programmazione creato per «rendere facili le +cose facili, e possibili quelle difficili». + +Ha un sacco di idiosincrasie, ma è progettato per essere comodo da +usare e da imparare: non dovete per forza impararlo tutto in uan +volta, potete impararlo poco a poco, e ottenere comunque dei +risultati. + +Cosa sono le GUI +---------------- + +Interfacce utente grafiche: per quando preferite i disegnini alla +linea di comando. O quando è più comodo scegliere un'opzione da un +elenco piuttosto che ricordarsi il comando. + +Non sono la soluzione definitiva a tutti i problemi, ma in alcuni casi +aiutano. + +Spesso sono ritenute difficili da implementare, e molti ne producono +di brutte e scomode. Specie sotto Linux, tutti si lamentano che non +c'è VisualBasic o Delphi (Kylyx notwithstanding). + +Dove vogliamo arrivare +---------------------- + +Tra un'ora avremo scritto un file manager a due pannelli, stile Norton +Commander. In Perl, con Gtk+2, in 23KiB totali, di cui scritti a mano +7KiB. + +Parte seconda: gli strumenti +============================ + +Usiamo Gtk+2, il toolkit grafico su cui si basa Gnome, e Glade, uno +strumento per disegnare le interfacce grafiche, simile a VB o Delphi, +ma più che altro all'Interfcae Builder di NeXT o MacOSX. + +Gtk+2 offre molti controlli (“widget”) comuni e perfettamente +funzionanti. Glade ci permette di separare il disegno dell'interfaccia +dal codice che implementa la logica: in questo modo il nostro codice è +pulito e concentrato sulle cose importanti («cosa deve fare»), e per +cambiare la posizione di un pulsante non dobbiamo toccare il sorgente. + +Usiamo Perl perché è comodo e permette di concentrarsi sul codice +“utile”, lasciando al compilatore/interprete il compito di spiegarlo +alla macchina. + +Parte terza: andiamo +==================== + +Stage 1: lo scheletro +--------------------- + +Mostrare: + * Build.PL + * LDFM::MainController + * ldfm + +Il primo è una specie di Makefile: indica cosa serve e cosa bisogna +produrre. + +Il secondo è la classe controller del file manager: per ora è vuota. + +Il terzo è lo script che useremo per lanciare il tutto: per ora scrive +``buh!``. + +Stage 2: Glade +-------------- + +Mostrare: + * Build.PL + * ldfm + * LDFM::MainController + * ldfm-main.glade (in Glade) + +``Path::Class`` ci semplifica la gestione delle directory e dei file. + +Lo script di avvio è modificato in modo da scoprire dove stiano i file +generati con Glade, e passare questa directory al costruttore del +controller. + +Il controller ricava il suo file di interfaccia, e lo carica chiamando +il costruttore della super-classe. + +Dentro Glade: + giro di prova, mettendo un po' di controlli a caso. + + Caricare ``ldfm-main.glade``, mostrare i controlli usati, far notare + come molti hanno delle call-back associate. + +Eseguire il codice: mostrare gli warning, e che la chiusura non va. + +Stage 3: le liste dei file +-------------------------- + +Mostrare: + * Build.PL + * LDFM::MainController + +``Gtk2::Ex::Simple::List`` rende più semplice e comoda la gestione +dei list-box in Gtk+2, che sono dei controlli molto potenti e +flessibili, ma non proprio immediati da usare. Aggiriamo il problema +usando codice già scritto. + +``simplify_list`` sostituisce i controlli list-bax normali con quelli +"semplificati". + +``update_list_with_path`` carica la lista di file nel list-box, usando +i metodi di ``Path::Class``. + +``quit`` è la prima call-back che vediamo: si limita a terminare +l'applicazione. + +Eseguire il codice: mostrare le liste, far notare che ancora non +funziona altro, ma la chiusura sì. + +Stage 4: il doppio click +------------------------ + +Mostrare: + * LDFM::MainController + +``update_list_with_path`` è stata modificata per gestire in maniera +corretta ``..`` e i path relativi. + +``set_*_path`` viene chiamata quando si preme “Invio” in uno degli +input-box in alto: prende il testo che abbiamo scritto e lo passa a +``update_list_with_path``. + +``use_*_row`` viene chiamata quando facciamo doppio click su una riga +di una lista: chiama ``use_a_row``, che prende il nome in quella riga +e lo passa a ``update_list_with_path``. + +Eseguire il codice: mostrare come si possa cambiare dir sia scrivendo +un path sia facendo doppio click. + +Stage 5: i pulsanti in basso +---------------------------- + +Mostrare: + * LDFM::MainController + +Impostiamo le liste perché permettano la selezione multipla. + +``get_selected_side`` ci dice se il focus sta a sinistra o a destra (i +pulsanti sono configurati da Glade in modo da non prendere mai il +focus). + +``get_files_from_list`` ci restituisce l'elenco dei file selezionati +di una lista, agganciandoli alla directory giusta. + +``get_selected_files`` ci dà l'elenco dei file selezionati nella lista +col focus. + +``mkdir`` fa finta di creare una directory: sa dove, ma non sa con che +nome. Ci servirebbe un dialog box, poi lo creeremo. + +``delete`` fa finta di cancellare i file selezionati: non lo fa +davvero perché non voglio fare danni sul mio computer ;-) + +``rename`` accetta un solo file da rinominare, ma anche qui servirebbe +il dialog per il nuovo nome. + +Eseguire il codice: mostrare gli warning. + +Stage 6: pulsanti al centro +--------------------------- + +Mostrare: + * LDFM::MainController + +``copy_lr``, ``copy_rl``, ``move_lr`` e ``move_rl`` vengono chiamate +dai pulsanti ovvi. Chiamano le funzioni ``copy_files`` e +``move_files`` per evitare di scrivere due volte lo stesso codice. + +Le funzioni scrivono soltanto quello che farebbero, per non fare +danni. + +Eseguire il codice: mostrare gli warning. + +Stage 7: il dialog box +---------------------- + +Un dialog box è un'altra finestra, per cui facciamo un nuovo file +Glade e un nuovo controller. + +Mostrare: + * ldfm-dialog.glade (in Glade) + * LDFM::DialogController + * LDFM::MainController + +Il dialog è creato di tipo “dialog” in modo che si comporti come +tale. Domanda e risposta verranno impostate e lette dal controller. + +``LDFM::DialogController`` si limita a impostare l'etichetta e il +campo, e quando gli si chiede di ``run`` esegue il dialog e prende la +risposta. + +Nel main: ci segnamo dove stanno i file Glade in modo da poterlo dire +al DialogController; quando serve una risposta dall'utente (``mkdir``, +``rename``) si istanzia il dialog e si usa la risposta (sempre per +finta). + +In ``delete`` ci basta un sì o un no, per cui usiamo il MessageBox +predefinito di Gtk+2. + +Eseguire il codice: mostrare i tre dialog e gli warning con il +risultato. + +Stage 8: riconoscimento dei tipi +-------------------------------- + +Mostrare: + * Build.PL + * LDFM::MainController + +Per riconoscere i tipi dei file usiamo un modulo che funziona come il +comando ``file``: guarda sia il nome sia il contenuto dei file e dice +di che tipo sono. + +Tutto quello che dobbiamo fare è chiamare il metodo giusto quando +carichiamo i dati nelle liste. + +Eseguire il codice: mostrare i tipi. + +Stage 9: doppio click sui file +------------------------------ + +Mostrare: + * LDFM::MainController + +Per ora fare doppio click su un file non ha alcun effetto. Con 6 righe +di codice distinguiamo un file da una directory e facciamo finta di +aprirlo. + +Eseguire il codice: mostrare gli warning. + +Parte quarta: conclusioni +========================= + +Le GUI non sono difficili: basta usare gli strumenti giusti. + +Non mescolate vista e controller: vi fareste solo del male. + +Se avete un problema, molto probabilmente qualcun'altro l'ha avuto +prima di voi: le librerie sono la vostra salvezza. + diff --git a/riferimenti.rest.txt b/riferimenti.rest.txt new file mode 100644 index 0000000..d296c0a --- /dev/null +++ b/riferimenti.rest.txt @@ -0,0 +1,97 @@ +============================ + Alcuni riferimenti su Perl +============================ +:Author: Gianni "Dakkar" Ceccarelli +:Date: 2005-11-25 + +Siti "istituzionali" +-------------------- + +http://www.perl.com/ + Sito O'Reilly, un po' *business-oriented* + +http://www.perl.org/ + "Portalino" della comunità. Sotto-sito importante: http://use.perl.org/ + +http://www.perl.it/ + Il portale Perl in Italia: notizie, corsi, documentazione tradotta, + weblog + +La comunità +----------- + +http://use.perl.org/ + Notizie, annunci, weblog + +http://www.perlmonks.org/ + Il Monastero, dove i novizi cercano l'illuminazione aiutati dai + Grandi Maestri + +http://www.pm.org/ + Sito principale dei Perl Mongers mondiali + +http://www.yapceurope.org/ + La fondazione che aiuta a organizzare le conferenze e gli workshop + in Europa + +news:comp.lang.perl.* + I newsgroup internazionali + +news:it.comp.lang.perl + Il newsgroup italiano + +irc://slashnet.it/#nordest.pm + Il canale in cui potete trovare molti Perlisti italiani + +I moduli +-------- + +http://www.cpan.org/ + Comprehensive Perl Archive Network, dove scaricare tutti i moduli + che vi servono + +http://search.cpan.org/ + Un motore di ricerca, per trovare qual è il modulo che vi serve + +http://kobesearch.cpan.org/ + altro motore di ricerca per i moduli + +http://wait.cpan.org/ + ricerca full-text nella documentazione di tutti i moduli + +Riferimenti per le librerie usate nel workshop +---------------------------------------------- + +http://www.gtk.org/ + La pagina principale di Gtk+ + +http://developer.gnome.org/ + La documentazione delle librerie Gtk+ e Gnome + +http://glade.gnome.org/ + Glade, il programma per disegnare le GUI + +http://gtk2-perl.sf.net/ + I moduli Perl per usare Gtk+ + +Altri moduli per le GUI +----------------------- + +http://camelbones.sourceforge.net/index.php + Per usare Cocoa (librerie GUI di MacOS X) da Perl + +http://wxperl.sf.net/ + Per usare wxWidgets (toolkit GUI multi-piattaforma) da Perl + +http://perlqt.sourceforge.net/ + Per usare QT (il toolkit di KDE) da Perl + +Documentazione +-------------- + +http://www.perldoc.com/ + La documentazione di Perl e dei moduli inclusi nella distribuzione + standard, per tutte le versioni + +http://pod2it.sf.net/ + Traduzione in Italiano di molta documentazione -- cgit v1.2.3