Introduzione
Fino a questo momento abbiamo analizzato attraverso esempi varie tecniche presenti in videogame in 2D e di conseguenza come utilizzare la libreria pygame per realizzare il nostro videogioco. Non mi sono mai soffermato su un aspetto molto importante ed il più delle volte sottovalutato, ovvero quali tools si possono utilizzare per scrivere i propri progetti.
“Sottovalutato” nel senso che si può risparmiare tempo prezioso semplicemente utilizzando uno di questi programmi (che vedremo di seguito) insieme alla documentazione ufficiale della libreria che stiamo utilizzando (qualsiasi essa sia).
Naturalmente mi concentrerò su quelli che utilizzo (rigorosamente multipiattaforma e liberamente utilizzabili, per permettermi facili spostamenti tra i vari OS), ma nessuno vieta di utilizzarne degli altri, visto che la scelta è molto ampia.
Sicuramente queste cose non sono nuove a nessuno di voi che abbia già letto gli altri pezzi o che programmi già da tempo, ma vorrei che questo articolo serva anche per confrontarsi e per dare ulteriori spunti che riguardano questo argomento, come esperienze personali o preferenze.
Editor
Gli editor disponibili per il linguaggio python sono un’infinità : http://wiki.python.org/moin/PythonEditors
Si può optare per soluzioni semplici e veloci, come Vim o Scite oppure per soluzioni non altrettanto leggere ma con molte funzionalità. Tra quelli di quest’ultima tipologia io utilizzo in particolare Komodo-Edit. Komodo oltre a supportare in modo eccellente gli ultimi linguaggi disponibili, ha la possibilità di gestire progetti anche se non in modo dettagliatissimo. Essendo sempre multipiattaforma e free (non è open-source però) non riscontra particolari problemi nel suo utilizzo e per chi ha più OS nella propria macchina potrà apprezzare molto questo tool.
Gli editor sono strettamente necessari se non si vuole perdere troppo tempo nelle modifiche del proprio codice. Permettono un’immediata comprensione dei costrutti presenti ed offrono (per lo meno la maggior parte di essi) suggerimenti e/o informazioni riguardo quello che si sta scrivendo. Come ho già accennato, insieme ad una documentazione ufficiale della libreria che si sta utilizzando, gli editors costituiscono uno strumento essenziale per ogni programmatore.
IDE
Subito dopo abbiamo gli Integrated Development Environments, che di base si distinguono per una migliore gestione le progetto e del file che si sta attualmente editando e per aver integrato un debugger o la possibilità di eseguire l’interprete (anche se questa feature è presente anche in qualche editor).
Anche se la lista non è lunga come quella degli editor, credo che ognuno possa trovare quello che più lo aggrada : http://wiki.python.org/moin/IntegratedDevelopmentEnvironments
Per progetti open-sourse WingWare rappresenta un’ottima soluzione. Anche il plugin per Netbeans è un’ottima alternativa, peccato che dalla versione 7 non è più disponibili e si spera che il supporto ritorni nei futuri aggiornamenti (del plugin si intende). Tra le soluzioni disponibili personalmente ho scelto di utilizzare il plugin PyDev per Eclipse. Più precisamente ho installato Aptana che contiene al suo interno PyDev. Aptana supporta anche linguaggi come Ruby e Html 5 ed è molto utile per chi sviluppa applicazioni web.
Eclipse e PyDev sono una coppia perfetta per gestire i propri progetti e sono molto personalizzabili. Richiedono qualche configurazione iniziale (come tutti gli IDE del resto), ma hanno risolto anche molti dei miei problemi, come per esempio la coesistenza di due interpreti python (2.7 e 3.1) e quindi la possibilità di utilizzarli indipendentemente (sia in modalità debugger che in esecuzione) per ogni progetto in corso.
Condivisione delle risorse
Anche se può sembrare fuori luogo, vorrei sottolineare come le modalità di condivisione del codice siano fondamentali quando si lavora insieme. Per la mia personale esperienza posso dire di essere stato molto soddisfatto nell’utilizzo dei due seguenti programmi:
Il primo, se utilizzato su server che lo supportano, è molto utile per tenere traccia delle modifiche effettuate dai vari collaboratori (si sposa perfettamente con Google Code). Ringrazio Emanuele Rampichini per avermi fatto conoscere questo “distributed source control management tool”.
Il secondo rappresenta un programma fondamentale per condividere tra più fonti lo stesso progetto, senza curarsi troppo dei dettagli. Basta infatti creare una cartella e condividerla con i propri colleghi ed il tutto all’interno del sistema operativo, senza nessuna necessità di affittare costosi server.
Per i progetti open-source la cosa è più semplice è affidarsi a servizi come SourceForge e Google Code, che affiancano la realizzazione del programma. Ma se si ha la necessità di creare un proprio software (magari anche con il fine di venderlo) con pochi mezzi a disposizione, Dropbox può essere una buona rampa di lancio.
Conclusioni
Come avete potuto constatare, le alternative per scrivere codice e gestire progetti sono moltissime e ce ne sono per utti i gusti. Mi piacerebbe conoscere le vostre opinioni a riguardo, per capire cosa utilizzate ed il perché. Condividere questi punti di vista può aiutare molto, sopratutto quando si cerca di collaborare in gruppo o in un team.
Non pensate minimamente che sia tempo perso, perché l’utilizzo di questi applicativi vi può far risparmiare molte ore di coding, lasciandovi più rilassati e preparati per il prossimo task.
Nel prossimo articolo inizieremo un nuovo percorso che ci porterà ad esplorare una nuova dimensione…
Per la condivisione del codice non converrebbe usare un GIT repository?
Oppure Subversion (svn)
@Giuseppe
Git, mercurial, bazaar, bitkeeper sono tutti dcvs che fanno più o meno lo stesso lavoro (chi meglio chi peggio). Capiti i concetti fondamentali puoi passare da uno all’altro senza problemi. Oggi mi sentirei di consigliare git per un solo e semplice motivo: github.
@sidew
Svn va benissimo se si è “lone coder” (anche per un progetto su cui lavora un gruppo ristretto e fisicamente vicino) anche se preferirei comunque un dcvs per l’estrema facilità di creare branch e per le migliori funzioni di merge. Il punto è che puoi usare un dcvs come se non fosse distribuito… ma non puoi fare il contrario. :P
P.S.
@Mirco
Grazie per la citazione :D
Scusate l’ignoranza, ma Dropbox supporta lo storico e il diff dei files? Se non li supporta (come penso), non è un pochino inutile come sistema di versioning?
@Antonio:
Dropbox certamente supporta lo storico, puoi andare a ripescare tutti i vecchi salvataggi di un file senza problemi.
Per il diff, però, non saprei.
Dario
@Emanuele
svn lo usiamo in ufficio anche per progetti consistenti.
Fino a qualche anno fa, esisteva solo VSS ( io ho dovuto fare un lavoro di “indottrinamento, specialmente ai vari capiprogetto per poter adottare un server aziendale, specialmente dopo diversi “incidenti” al file di indexing globale di vss)
Solo recentemento ho potuto anche dare una occhiata ai git e concordo te per la presenza di github, sarebbe stato comodo anche per me con la possibilita di lavorare anche fuori ufficio e sincronizzare alla fine con quello centrale.
@ Antonio
Scusa se non ho approfondito l’argomento, credo che questo risolva ogni tuo dubbio:
https://www.dropbox.com/help/8
Come vedrai, Dropbox usa la differenza binaria tra i file per trasferire meno dati possibili e quindi velocizzare i processi. Certo è una cosa molto più blanda e meno dettagliata dei concorrenti, ma di ottimo impatto. :D
@ Emanuele
Di nulla ed ancora una volta hai sollevato il mio interesse, questa volta verso github… :P
Personalmente preferisco l’accoppiata NetBeans (6.9.1) con relativo plug-in. Ho preferito, infatti, non passare a NetBeans 7.
Ho usato per parecchio tempo anche Eclipse col plug-in PyDev, che è sicuramente più maturo e completo (la versione a pagamento) di quello per NetBeans, ma purtroppo Eclipse è un IDE molto confusionario (da patchwork) e ho preferito abbandonarlo per quello che ritengo essere un IDE progettato a misura di programmatore. Ho sentito parlare molto bene di WingIDE, ma è a pagamento e pertanto non ho avuto la possibilità di provarlo (no, non mi scarico la trial per rimanere poi a sbavarci dietro perché mi sono assuefatto |-Q______).
Altra cosa molto importante, utilizzo DreamPie come shell interattiva avanzata. Uno dei vantaggi di Python è che permette di lavorare interattivamente aumentando enormemente la produttività. Ebbene, con DreamPie lo si molto meglio.
Ho usato anche Subversion e Mercurial. Il primo è più semplice da utilizzare, mentre il secondo più complesso (ma ovviamente offre MOLTO di più; è anche questo il motivo). Per semplificarmi la vita li ho usati in versione GUI (TortoiseSVN e TortoiseHg rispettivamente).
DropBox lo uso molto spesso, ma non lo consiglierei per gestire progetti condivisi. Meglio affidarsi a Mercurial. Per scambiare file senza versionamenti è decisamente comodo (anzi, è comodissimo).
@Mirco: non ci siamo capiti… Dropbox ti consente di fare questo? http://winmerge.org/about/screenshots/filecmp.png
Inoltre, ti traccia l’autore di ogni commit come fanno i software di versioning? oppure è semplicemente una banale cartella condivisa?
@ Antonio
Scusa non mi sono spiegato bene, utilizza la differenza binaria solo ed esclusivamente per il trasferimento dei file. Non tiene conto delle varie differenze fatte da vari utenti. Effettivamente è una banale cartella condivisa. Come ha detto Cesare è comodo per scambiare file senza versionamenti. :D
@ Cesare
Mi hai ricordato Tortoise e DreamPie… Grazie mille!!!
@Mirco: ah ok. Il fatto è che non lo uso, quindi magari ho fatto qualche domanda un po’ banale :-D
Tortoise tutta la vita, il miglior client di sempre ^^,
@ Antonio
La domanda non è affatto banale, anzi sottolinea il fatto che dropbox può essere utilizzato solo per lo scambio di semplici file (immagini, audio, testo ecc…). L’utilità è tutta lì, niente di più! :D