Ticket #18699: FAQ.it.txt

File FAQ.it.txt, 56.6 KB (added by dberti, 6 years ago)

Italian translation of FAQ (version 6.4.1) in TXT format

Line 
1Sage FAQ (Release 6.4.1)
2
3Capitolo 1: generalita'
4
51.1 Perche' esiste questo progetto ?
6
7La missione fissata per Sage e' di essere un'alternativa open-source utilizzabile invece di Magma, Maple, Mathematica a Matlab. I predecessori di Sage, noti come HECKE e Manin, furono creati perche' William Stein ebbe bisogno di scriverli come parte della sua ricerca sulla Teoria dei Numeri. Iniziato da William nel 2005 quando era all'universita' di Harvard, Sage combina alcuni fra i miglori software open-source per la matematica, inglobandoli in un'unita' accessibile da un'intefaccia comune. Molti ricercatori in Teoria dei Numeri, incluso lo stesso William, si avvalgono di quest'interfaccia comune per usare ed estendere le funzionalita' dei pacchetti inglobati relativi alla Teoria dei Numeri. Tali pacchetti software includono Givaro, MPIR, NTL, Pari/GP e molti altri troppo numerosi per essere elencati qui. Studenti, insegnanti, professori universitari, ricercatori di tutto il mondo usano Sage perche' vogliono un pacchetto open-source per la matematica che offra calcolo sia simbolico che numerico. Perlopiu' le persone sono contente di quanto offre Sage. Com'e' comune nell'ambito del  software open-source (FOSS), spesso ci sono persone che individuano casi in cui Sage non dispone della funzione richiesta da loro, e si immergono nel codice sorgente di Sage per estenderlo per il loro scopo, o ancora per esporre funzionalita' dei pacchetti inglobati in Sage in modo da poter usarne le funzioni che loro preferiscono dall'interfaccia di Sage. La squadra Sage-Combinat e' costituita da ricercatori in Algebra Combinatoria. La missione che si e' data tale squadra e' quella di migliorare Sage come uno strumento estendibile per la sperimentazione al computer nell'ambito dell'Algebra Combinatoria, e favorire lo scambio di codice sorgente fra ricercatori di questa materia. Per informazione dettagliate sul perche' esiste Sage, vedere il seguente link: biografia matematica personale di William, settore software (http://sagemath.blogspot.com/2009/12/mathematical-software-and-me-very.html).
8
91.2 Cosa vuol dire Sage e come si deve pronunciarlo ?
10
11Nei primi anni di esistenza di Sage, il progetto era chiamato "SAGE", acronimo inglese di "software per la sperimentazione in Algebra e Geometria". A cominciare dal 2007 ed inizio 2008, fu largamente adottato il nome "Sage". Considera "Sage" come il nome di un progetto software FOSS per la matematica, esattamente come "Python" e' il nome di un linguaggio FOSS di programmazione di uso generale. Ovunque possibile, per cortesia usa "Sage" non "SAGE", che invece e' un progetto per un computer, cosi' da evitare confusioni. Si pronuncia "Sage" nello stesso modo della parola inglesi "sage" che significa uomo saggio, o anche indica la pianta della salvia. Alcune persone lo pronunciano in modo simile a "sarge", un po' come si pronuncia "Debian Sarge". Ma comunque lo pronunci, per cortesia non confonderlo con il software di contabilita' americano che ha lo stesso nome.
12
131.3 Chi c'e' dietro al progetto ?
14
15Sage e' un progetto basato sull'opera di volontari. Il suo successo e' dovuto all'opera gratuita di di una grande squadra internazionale di studenti, insegnanti, professori universitari, ricercatori, ingegneri del software, e persone che lavorano in vari ambiti della matematica, delle scienze, dell'ingegneria, dello sviluppo software, e a tutti i livelli della scuola. Lo sviluppo di Sage ha potuto usufruire di fondi asegnati da numerose istituzioni, ed ha potuto includere sia componenti preesistenti che in corso di sviluppo da parte di numerosi autori. Una lista di coloro che hanno dato un contributo diretto e' reperibile al link "mappa di sviluppo di Sage" (http://www.sagemath.org/development-map.html) e la storia delle modifiche puo' essere reperita al link "changelog di alto livello" (http://www.sagemath.org/mirror/src/changelog.txt). Fai riferimento al link "Pagina dei riconoscimenti" del sito web di Sage (http://www.sagemath.org/mirror/src/development-ack.html) per una lista aggiornata di coloro che ci sostengono finanziariamente o a livello di infrastruttura, a livello di siti mirror, ed altri contributi indiretti.
16
171.4 Perche' Sage e' un software libero ed open-source ?
18
19Una regola universale nella comunita' matematica e' che tutto dev'essere chiaro ed pubblico. Il progetto Sage ritiene che non seguire lo stesso principio nel software per la matematica e' quantomeno scortesia e maleducazione, o peggio una violazione delle pratiche comuni nella scienza. Un principio filosofico sottostante Sage e' di applicare la regola di scambio libero e confronto fra pari, che caratterizza la comunicazione scientifica, anche allo sviluppo di software per la matematica. Ne' il progetto Sage ne' la sua squadra di sviluppo hanno la pretesa di essere gli originali proponenti di questo principio. Il modello di sviluppo di Sage e' largamente ispirato del movimento del software libero di cui e' stata pioniere la Free Software Foundation ed il movimento open-source. Una fonte di ispirazione all'interno della comunita' matematica e' Joachim Neubüser, come espresso nell'articolo:
20• J. Neubüser. An invitation to computational group theory. In C. M. Campbell, T. C. Hurley, E. F. Robertson, S. J.Tobin, and J. J. Ward, editors, Groups ‘93 Galway/St. Andrews, Volume 2, volume 212 of London Mathematical Society Lecture Note Series, pages 457–475. Cambridge University Press, 1995.
21ed in particolare nella seguente citazione dal suo articolo:
22"Puoi leggere il teorema di Sylow e la sua dimostrazione nel libro di Huppert in biblioteca senza nemmeno comprare il libro e poi usare questo teorema per il resto della tua vita senza dover pagare una tariffa, invece ... devi pagare regolarmente delle licenze per l'uso di software per la matematica per tutto il tempo in cui li utilizzi. Per proteggere cio' per cui devi pagare, non ti viene dato il codice sorgente ma soltanto l'eseguibile del programma, cioe' un oggetto sigillato sul quale premi bottoni ed ottieni risposte cosi' come ottieni belle immagini dal tuo televisore: in entrambe le situazioni non puoi controllare il modo in cui ti e' fornito il servizio."
23"In questa situazione sono violate le piu' basilari regole di condotta in matematica: in essa l'informazione e' passata gratuitamente e tutto puo' essere consultato e verificato. Non applicare queste regole ai sistemi software per la matematica usati per la ricerca in matematica ... significa andare in una direzione assolutamente non desiderabile. Ancora piu' importante: possiamo aspettarci che qualcuno creda al risultato di un programma che non puo' vedere come funziona ? Inoltre: vogliamo veramente far pagare a colleghi in Moldavia anni di stipendio per un software per la matematica ?"
24Simili idee sono state anche espresse da Andrei Okounkov, come si puo' leggere in:
25• V. Muñoz and U. Persson. Interviews with three Fields medalists. Notices of the American Mathematical Society, 54(3):405–410, 2007.
26ed in particolare nella seguente citazione:
27"I computer non sono una minaccia per i matematici piu' di quanto i robot da cucina lo siano per i cuochi. Poiche' la matematica diviene sempre piu' complessa mentre il ritmo delle nostre vite accellera, dobbiamo delegare piu' che possiamo alle macchine. Ed intendo sia il lavoro in campo numerico che in quello simbolico. Alcune persone possono andare avanti senza lavapiatti, ma penso che le dimostrazioni vengano fuori molto piu' pulite quando il lavoro di routine e' automatizzato."
28"Questo porta con se' parecchie questioni. Non sono un esperto ma penso che abbiamo bisogno di un standard a livello di calcolo simbolico per rendere le manipolazioni al computer piu' facili da documentare e verificare. Con tutto il rispetto per il libero mercato, forse in questo non dobbiamo esser dipendenti da un software commerciale. Un progetto open-source potrebbe, forse, trovare risposte migliori a problemi ovvi come la disponibilita', i bachi, la compatibilita' all'indietro, l'indipendenza dalla piattaforma, le librerie standard, ecc. Si puo' imparare dal successo di TeX e da software piu' specializzato come Macaulay2. Spero veramente che le agenzie per finanziamenti governativi stiano considerando questo."
29
301.5 Perche' avete scritto Sage da zero, invece di usare software e librerie preesistenti ?
31
32Sage non e' stato scritto da zero. La maggior parte delle sue funzionalita' sono realizzate attraverso progetti FOSS come:
33• ATLAS — libreria software per Algebra Lineare ottimizzata automaticamente.
34• BLAS — sottoprogrammi per Algebra Lineare di base.
35• FLINT — libreria C per Teoria dei Numeri.
36• GAP — sistema di calcolo per algebra discreta, con particolare enfasi sulla teoria dei gruppi computazionale.
37• Maxima — sistema di calcolo simbolico e numerico.
38• mpmath — libreria in puro Python per aritmetica floating-point di precisione.
39• NumPy — algebra lineare numerica ed altre funzioni di calcolo numerico per Python.
40• Pari/GP — software matematico per calcolo veloce in Teoria dei Numeri.
41• Pynac — versione modificata di GiNaC che rimpiazza la dipendenza da CLN con Python.
42• R — linguaggio ed ambiente operativo per calcolo statistico e grafici relativi.
43• E molti altri troppo numerosi per essere elencati qui.
44Una lista aggiornata puo' essere reperita alla seguente link: repository dei pacchetti standard. I principali linguaggi di programmazione di Sage sono Python e Cython. Python e' il principale linguaggio di programmazione e di interfacciamento, mentre Cython e' il principale linguaggio per ottimizzare funzionalita' critiche e per interfacciarsi con le librerie C e le estensioni C per Python. Sage integra oltre 90 pacchetti FOSS in un'interfaccia comune. Sopra questi pacchetti sta la libreria Sage, che consiste in oltre 700.000 righe di codice Python e Cython scritto ex-novo. Vedi il link "ohloh.net" (https://www.ohloh.net/p/sage/analyses/latest) per l'analisi del codice sorgente dell'ultima release stabile di Sage.
45
461.6 Chi usa Sage ?
47
48Di seguito v'e' una lista incompleta di istituzioni e progetti che usano Sage. Se qualche istituzione o progetto manca, per cortesia fatecelo sapere riportandolo sulla mailing list "sage-devel".
491. California Institute of Technology, Pasadena, California, USA
502. California Polytechnic State University, San Luis Obispo, CA, USA
513. Chang Gung University, Taiwan
524. Chapman University, Orange, CA, USA
535. Clemson University, Clemson, South Carolina, USA
546. Drake University, Des Moines, IA, USA
557. FEMhub, an open source distribution of scientific computing code enhanced with a unified Python interface. The FEMhub Notebook is based on the Sage Notebook.
568. Gordon College, Wenham, MA, USA
579. Korea Advanced Institute of Science and Technology, Daejeon, Korea
5810. Mendel University in Brno, Czech Republic
5911. Reykjavik University, Iceland
6012. Universidad Autónoma de Madrid, Spain
6113. Universidad de la República, Montevideo, Uruguay
6214. Universitat Politècnica de Catalunya, Barcelona, Catalonia, Spain
6315. Université Claude Bernard Lyon 1, France
6416. Université de Provence, Marseille, France
6517. Universiteit Leiden, The Netherlands
6618. University of Canterbury, Christchurch, New Zealand
6719. University of Minnesota Duluth, Duluth, MN, USA
6820. University of Nevada, Reno, Reno, NV, USA
6921. University of Puget Sound, Tacoma, WA, USA
7022. University of Washington, Seattle, Washington, USA
7123. University of Wisconsin, Oshkosh, Oshkosh, WI, USA
7224. US Naval Academy, Annapolis, Maryland, USA
73
741.7 Come posso ricevere aiuto ?
75
76Sage ha due liste email molto attive:
77• sage-devel: http://groups.google.com/group/sage-devel
78• sage-support: http://groups.google.com/group/sage-support
79Vi e' anche un canale IRC molto attivo: #sage-devel su freenode. Molti sviluppatori hanno anche dei blog aggiornati e pubblicano altri tutorial e discussioni relative a Sage. Consulta http://www.sagemath.org/help.html per una lista di queste risorse.
80
811.8 Non sarebbe meglio se Sage non fosse distribuito come un gigantesco aggregato di pacchetti ?
82
83Quest'aspetto e' stato discusso a fondo piu' volte. Quindi prima di ricominciare a discutere, leggi bene e rifletti su quanto segue. Sage e' una distribuzione di oltre 90 pacchetti FOSS per calcolo simbolico, numerico e scientifico. In generale, l'insieme di configurazioni possibili da gestire sarebbe di gran lunga troppo grande. E' pressoche' impossibile trovare una qualunque distribuzione Linux (quali Arch,  CentOS, Debian, Fedora, Gentoo, Mandriva, Ubuntu) che abbia un numero di dipendenze che si avvicini anche lontanemente al numero di versione dei pacchetti da cui dipende Sage. La maggior parte delle persone che contribuiscono a Sage lo fanno nel loro tempo libero. Queste sono persone che hanno un lavoro quotidiano non direttamente collegato allo sviluppo software o alla programmazione. E' pressoche' impossibile per chiunque tenere traccia della versione corretta dei pacchetti, configurarli e compilarli su Linux, Mac OS X, Solaris o Windows, solo per poter iniziare ad usare Sage o iniziare a dare il loro primo contributo a Sage. Dal momento che il progetto Sage aspira ad essere utile ad un pubblico il piu' ampio possibile, crediamo che Sage debba innanzitutto essere il piu' semplice possibile da installare per chiunque, con qualunque livello di conoscenze informatiche. Se vuoi aiutare Sage a realizzare quest'obiettivo puoi contattare la mailing list "sage-devel".
84
851.9 Perche' ci sono cosi' tanti bachi in Sage, con centinaia di modifiche in corso, perche' non producete una versione stabilizzata ?
86
87Ogni software contiene bachi. In qualcosa di cosi' complesso come Sage nessuno, ne' la squadra di sviluppo di Sage ne' la sua comunita', ha alcuna pretesa che esso sia libero da bachi. Farlo sarebbe un atto di disonesta'.
88Un ciclo di rilascio di Sage di solito dura dalle 3 alle 4 settimane. Ogni ciclo di rilascio e' presieduto da un singolo gestore che si occupa dell'albero di integrazione pacchetti per tutta la durata del ciclo. In questa fase tale gestore deve spesso dedicare tempo equivalente ad un lavoro a tempo pieno alla gestione della qualita', e deve interagire attivamente con la comunita' internazionale degli utenti, degli sviluppatore e dei potenziali contributori a Sage. Ci sono stati molti casi in cui due contributori a Sage sono stati affiancati come gestori di rilascio per un ciclo di rilascio di Sage. Comunque in genere poche persone hanno tempo libero per l'equivalente di 3 settimane per dedicarsi alla gestione del rilascio. Se vuoi aiutare nella gestione del rilascio iscriviti alla mailing list "sage-release".
89Fin dall'inizio del progetto Sage i contributori hanno cercato di ascoltare e di riflettere su cosa potesse aumentare la possibilita' che altri potenziali validi contributori dessero effettivamente un aiuto. Cosa incoraggia un contributore puo' scoraggiare un altro, quindi bisogna trovare degli equilibri. Decidere che un rilascio stabilizzato dovrebbe includere le patch di correzione dei bachi, e solo quelle, probabilmente scoraggerebbe qualcuno dal contribuire, nel momento in cui gli fosse detto in anticipo che la sua aggiunta, anche se giudicata positivamente, non verrebbe integrata nel rilascio. La comunita' Sage crede nel principio "pubblica subito, pubblica spesso". Il modo in cui il progetto Sage e' organizzato e gestito differisce parecchio da quello di una azienda di software commerciale. I contributori sono tutti volontari e questo cambia totalmente la dinamica del progetto da quella che sarebbe se Sage fosse un'iniziativa software commerciale con sviluppatori stipendiati a tempo pieno.
90
911.10 Come posso scaricare la documentazionedi Sage cosi' da poterla leggere offline ?
92
93Per scaricare la documentazione standard di Sage in formato HTML o PDF, visita il link "Help and support" sul sito web di Sage (http://www.sagemath.org/help.html). Ogni release di Sage dispone della documentazione completa che costituisce la documentazione standard di Sage. Se hai scaricato un rilascio di Sage in formato binario, la versione HTML della sua documentazione si prova gia' disponibile nella cartella "SAGE_ROOT/src/doc/output/html/". Nel corso della compilazione da sorgente viene preparata anche la documentazione HTML, che comunque puo' essere preparata da riga di comando lanciando, dopo essersi posizionati in SAGE_ROOT:
94$ ./sage -docbuild --no-pdf-links all html
95Invece la preparazione della documentazione in formato PDF richiede che sul tuo sistema sia installata una versione funzionante di LaTeX. Per preparare la documentazione in formato PDF puoi lanciare da riga di comando, dopo esserti posizionato in SAGE_ROOT:
96$ ./sage -docbuild all pdf
97Per altre maggiori opzioni disponibili a riga di comando fai riferimento alle istruzioni stampate dei seguenti comandi:
98$ ./sage -help
99$ ./sage -advanced
100
101Capitolo 2: uso di Sage
102
1032.1 Come posso partire ?
104
105Puoi provare Sage senza dover scaricare nulla. Vai al link http://www.sagenb.org e richiedi un account gratuito. Collegandoti lavorerai su un server gratuito di sessioni di lavoro (detti Notebook cioe' quaderni) di Sage che lavora in modo identico ad un'installazione locale di Sage. Per scaricare una distribuzione binaria (ciao' precompilata) di Sage vai al link http://www.sagemath.org/download.html e clicca sul link relativo al file binario per il tuo sistema operativo. Il codice sorgente di Sage e' anche disponibile in download: vai al link http://www.sagemath.org/download-source.html per scaricare l'archivio TAR di qualunque rilascio di Sage. I rilasci precedenti sono disponibili al link http://www.sagemath.org/src-old.
106Le sessioni di lavoro (Notebook) di Sage sono eseguite all'interno di un browser web. Puoi eseguire Sage in un browser che non sia quello predefinito nel tuo sistema. Per farlo lancia, da riga di comando o dal menu di Sage:
107env SAGE_BROWSER=opera /usr/bin/sage -notebook
108
1092.2 Quali sono i prerequisiti di Sage ?
110
111La maggior parte delle dipendenze sono incluse all'interno di Sage. Nella maggior parte dei casi puoi scaricare il binario precompilato ed usarlo senza dover installare alcun pacchetto dipendente. Se usi Windows avrai bisogno di intallare VirtualBox, che puoi scaricare dal link http://www.virtualbox.org/wiki/Downloads. Dopo aver installato VirtualBox devi scaricare una distribuzione di Sage per VirtualBox al link http://www.sagemath.org/download-windows.html. Segui bene le istruzioni che trovi a quella pagina. Poi puoi lanciare la macchina virtuale Sage usando il software VirtualBox e, dopo aver aspettato che la macchina virtuale sia partita, digitare "notebook" da riga di comando.
112Puoi scaricare il codice sorgente completo di Sage per compilarlo sul tuo sistema Linux o Mac OS X. Sage si trova in una cartella isolata e non va ad interferire col sistema in cui si trova. Viene dato con tutto il necessario per lo sviluppo, il codice sorgente, tutte le dipendenze ed il changelog (cioe' la lista delle modifiche operate) completo. Sui sistemi Linux come Debian/Ubuntu puoi dover installare il pacchetto "build essential" ed il processore di macro "m4". Il tuo sistema deve disporre di un compilatore C funzionante se vuoi compilare Sage da codice sorgente. Su Debian/Ubuntu puoi installare questi prerequisiti come segue:
113sudo apt-get install build-essential m4
114Se hai un sistema multiprocessore puoi scegliere una copilazione parallela di Sage. Il comando:
115export MAKE=’make -j8’
116abilitera' 8 threads per quelle parti della compilazione che supportano il parallelismo. Al posto del numero 8 metti il numero di processori/core del tuo sistema.
117
1182.3 Come posso far riconoscere l'installazione di Tcl/Tk corrente sul mio sistema all'interprete Python di Sage ?
119
120Potresti avere la libreria Tcl/Tk installata ed l'interprete Python del tuo sistema la riconosce ma l'interprete Python di Sage no. Per risolvere questo ti basta installare la libreria di sviluppo Tcl/Tk. Su Ubuntu lancia, da riga di comando:
121sudo apt-get install tk8.5-dev
122o qualcosa di simile. Poi reinstalla l'iterprete Python di Sage con:
123sage -f python
124Questo aggancera' automaticamente la libreria Tcl/Tk. Dopo aver reinstallato correttamente l'interprete Python di Sage, lancia i seguenti comandi dall'interfaccia a riga di comando di Sage:
125import _tkinter
126import Tkinter
127Se non ti viene segnalato alcun errore di "ImportError" allora il problema e' risolto.
128
1292.4 Come faccio ad importare Sage in uno script Python ?
130
131Puoi importare Sage in uno script Python come faresti con una libreria. La cosa a cui fare attenzione e' che devi lanciare quello script Python usando l'interprete Python interno a Sage, che correntemente e' il 2.6.x
132Per importare Sage metti la seguente istruzione in cima al tuo script Python:
133from sage.all import *
134Quando poi esegui il tuo script devi lanciarlo con l'opzione "-python" che fara' si' che venga eseguito dalla versione dell'interprete interna a Sage. Ad esempio, se Sage e' nella tua variabile d'ambiente PATH, puoi scrivere:
135sage -python /path/to/my/script.py
136Un altro modo e' scrivere uno script Sage e lanciarlo usando Sage stesso. Uno script Sage ha estensione ".sage" ed e' simile ad uno script Python ma utilizza funzioni e comandi specifici di Sage. Puoi poi lanciare tale script Sage in questo modo:
137sage /path/to/my/script.sage
138Questo si occupera' di caricare le variabili d'ambiente necesssarie ed eseguire gli import di default al posto tuo.
139
1402.5 Come posso ricaricare uno script Python in una sessione di Sage ?
141
142Puoi caricare uno script Python in una sessione Sage usando il comando "load". Ad esempio possiamo usare Sage per importare un file di nome "simple.py" con:
143load("simple.py")
144e ripetere questo comando ogni volta che cambiamo il file. Invece digitando:
145attach("simple.py")
146ogni cambiamento al file verra' automaticamente aggiornato anche in Sage.
147
1482.6 Posso usare Sage con la versione 3.x di Python ?
149
150Al momento no. Sage dipende dalle funzionalita' numeriche e scientifiche della libreria SciPy e, ancora nel 2010, SciPy utilizza Python 2.x. Pertanto finche' SciPy non sara' portata a Python 3.x e Cython non supportera' Python 3.x, Sage continuera' ad usare Python 2.x.
151
1522.7 vedo un errore di "Permission denied" (accesso negato) su un file di nome "sage-flags.txt".
153
154Quando Sage viene compilato dal sorgente, tiene traccia di quali istruzioni speciali supporta la tua CPU (quali ad esempio SSE2) e le memorizza. Cosi' se provi ad eseguire il codice su un'altra macchina, che non supporta queste istruzioni speciali extra, ti vengono segnalati degli errori in maniera intelleggibile anziche' dei generici "segfault" (segmento di memoria errato) o "illegal istruction" (istruzione non consentita). Poiche' quest'informazione  dev'essere memorizzata in Sage stesso anziche' nella cartella /home/utente/.sage, dev'essere creata da qualcuno con le necessarie autorizzazioni sul sistema. Quindi se vedi qualcosa del genere:
155Traceback (most recent call last):
156File "/usr/local/sage-4.0.2/local/bin/sage-location", line 174, in <module>
157t, R = install_moved()
158File "/usr/local/sage-4.0.2/local/bin/sage-location", line 18, in install_moved
159write_flags_file()
160File "/usr/local/sage-4.0.2/local/bin/sage-location", line 82, in write_flags_file
161open(flags_file,’w’).write(get_flags_info())
162IOError: [Errno 13] Permission denied:
163’/usr/local/sage-4.0.2/local/lib/sage-flags.txt’
164probabilmente significa che hai compilato/installato Sage usando un determinato account (nome utente), ma poi non l'hai eseguito cosi' da permettergli di generare il file "sage-flags.txt". Ti basta eseguire Sage una volta con lo stesso account con cui e' stato installato per risolvere questo problema. Questo si dovrebbe risolvere facilmente anche lanciando Sage una volta nel corso del processo d'installazione (cfr. correzione #6375).
165
1662.8 Ho scaricato il binario di Sage e va in crash quando lo lancio, con il messaggio "illegal instruction" (istruzione non permessa). Cosa posso fare ?
167
168Un modo di risolvere e' compilare Sage interamente dal codice sorgente. Un'altra possibilita' e' correggere la tua installazione di Sage con la ricompilazione dei componenti MPIR e ATLAS (richiede da 15 a 20 minuti), da effettuarsi a riga di comando a partire dalla cartella SAGE_ROOT della tua installazione con le 2 istruzioni:
169• rm spkg/installed/mpir* spkg/installed/atlas*
170• make
171E' possibile che i binari siano stati compilati per un'architettura piu' recente di quella della tua macchina. Nessuno ha ancora trovato un modo di compilare Sage in maniera che MPIR ed ATLAS funzionino su qualunque hardware. Questo sara' prima o poi risolto. Qualunque aiuto in tal senso sara' apprezzato.
172
1732.9 Ho usato Debian/Ubuntu per installare la versione 3.0.5 di Sage ed essa sta dando un sacco di errori. Cosa posso fare ?
174
175La versione di Sage distribuita con "apt-get" in Debian e Ubuntu (tipo la 3.0.5) e' molto vecchia. Nessuno ha ancora avuto tempo di aggiornare la versione di Sage per Debian/Ubuntu. Qualunque aiuto in tal senso sara' molto apprezzato. Dovresti scaricare la versione piu' recente di Sage dal link di download del sito web di Sage. Se vuoi aiutarci ad aggiornare la versione di Sage per Debian/Ubuntu manda un'email alla mailing list "sage-devel".
176
1772.10 Faccio meglio ad usare la versione ufficiale o quella di sviluppo ?
178
179Ti consigliamo di usare la piu' recente versione ufficiale di Sage. Delle versioni di sviluppo sono spesso annunciate sulle mailing list "sage-devel" e "sage-release". Una maniera facile di aiutare con lo sviluppo di Sage e' scaricare l'ultima versione di sviluppo, compilarla sul suo sistema, lanciare tutti i doctest e segnalare qualunque errore di compilazione o qualunque fallimento nei doctest.
180
1812.11 E' difficile imparare Sage ?
182
183Le funzionalita' di base di Sage dovrebbero risultare facili da imparare quanto le basi di Python. Molti tutorial sono disponibili in rete per aiutarti ad imparare Sage. Per trarre il massimo da Sage ti consigliamo di impararare qualche elemento del linguaggio Python. Segue una lista, incompleta, di risorse su Python. Altre risorse possono essere trovate cercando sul web.
184• Building Skills in Python di Steven F. Lott (http://homepage.mac.com/s_lott/books/python.html)
185• Dive into Python di Mark Pilgrim (http://www.diveintopython.net)
186• How to Think Like a Computer Scientist di Jeffrey Elkner, Allen B. Downey, and Chris Meyers (http://www.openbookproject.net/thinkCSpy)
187• Official Python Tutorial (http://docs.python.org/tutorial)
188• Python home page (http://www.python.org) e Python standard documentation (http://docs.python.org)
189
1902.12 Posso fare X in Sage ?
191
192Ti consigliamo di usare l'autocompletamento di Sage con il tasto TAB. Ti basta digitare qualche carattere, premere TAB e vedere se il comando che vuoi compare nella lista di autocompletamento. Se hai un comando che si chiama "mycmd", allora digitalo e premi TAB per visualizzare la lista di funzionalita' che sono supportate da quel comando. Per leggere la documentazione di "mycmd" scrivi "mycmd?" poi premi Invio e protrai leggerla. Similmente, digitando "mycmd??" e poi Invio potrai visualizzare il codice sorgente di tale comando. Ti consigliamo anche di eseguire ricerche nel codice sorgente e nella documentazione di Sage. Per eseguire ricerche nel codice sorgente di Sage usa il comando:
193search_src("<search-keyword>")
194mettendo al posto di <search-keyword> le parole chiave che vuoi cercare.
195Analogamente puoi effettuare ricerche nella documentazione di Sage usando il comando:
196search_doc("<search-keyword>").
197
1982.13 Cosa fa esattamente Sage quando digito "0.6**2" ?
199
200Quando scrivi "0.6**2" in Python, ti viene restituito qualcosa tipo  0.35999999999999999. Ma quando fai lo stesso in Sage ti viene restituito 0.360000000000000. Per capire perche' Python si comporta in questo modo vedi il "Python Tutorial", soprattutto il capitolo "Aritmetica floating-point: caratteristiche e limiti" (http://docs.python.org/tutorial/floatingpoint.html). Cio' che Sage fa e' preprocessare l'input e trasformarlo come segue:
201sage: preparse("0.6**2")
202"RealNumber(’0.6’)**Integer(2)"
203Cosi' che cio' che viene effettivamente eseguito e':
204RealNumber(’0.6’)**Integer(2)
205Gli sviluppatori Sage (in pratica Carl Witty) decisero che i numeri floating-point di Sage dovessero, di default, stampare solo il numero di cifre decimali corrette, quando possibile, cosi' da evitare il problema che ha Python. Questa decisione ha i suoi pro e contro. Nota che "RealNumber" e "Integer" sono specifici di Sage, quindi non puoi digitare quanto sopra nell'interprete Python ed aspettarti che funzioni, se prima non hai eseguito delle istruzioni di import quali:
206from sage.all import RealNumber, Integer, preparse
207
2082.14 Perche' il comando "history" di Sage e' diverso da quello di Magma ?
209
210Nell'uso di Sage non disponi di una funzionalita' dell'interfaccia a riga di comando di Magma. In Magma, se immetti una linea recuperata dalla "history" (cioe' dall'elenco dei comandi digitati precedentemente che viene automaticamente memorizzato) con il tasto "freccia in su'" e poi premi "freccia in giu'", viene recuperata anche la linea successiva nell'elenco. Questa funzionalita' ti permette di recuperare dalla "history" tante righe consecutive quante vuoi. Ma Sage non ha una funzionalita' simile: la riga di comando IPython utilizza la libreria "readline" (via pyreadline), che evidentemente non supporta questa funzionalita'. Magma ha una sua propria libreria personalizzata simile alla "readline" che invece supporta questa funzionalita'. (Dal momento che moltissime persone hanno richiesto questa funzionalita', se qualcuno trovasse un modo per implementarla sarebbe il benvenuto !)
211
2122.15 Ho problemi di tipo nell'utilizzo da Sage di SciPy, cvxopt e NumPy.
213
214Stai usando da Sage le librerie SciPy, cvxopt e NumPy e hai degli errori tipo:
215"TypeError: function not supported for these types, and can’t coerce safely to supported types."
216Quando digiti numeri in Sage, il preprocessore li converte in un anello base, come puoi vedere facendo:
217sage: preparse("stats.uniform(0,15).ppf([0.5,0.7])")
218"stats.uniform(Integer(0),Integer(15)).ppf([RealNumber(’0.5’),RealNumber(’0.7’)])"
219Sfortunamente il supporto che NumPy fornisce a questi tipi avanzati di Sage, quali Integer o RealNumber (numeri reali di precisione arbitraria), non e' del 100%. Per risolvere ridefinisci Integer e/o RealNumber per cambiare il comportamento del preprocessore di Sage cosi' che i decimali scritti vengano registrati come tipi float di Python anziche' RealNumber di Sage e gli interi scritti siano registrati come tipi int di Python anziche' Integer di Sage. Ad esempio:
220sage: RealNumber = float; Integer = int
221sage: from scipy import stats
222sage: stats.ttest_ind(list([1,2,3,4,5]),list([2,3,4,5,.6]))
223(array(0.07675295564533369), 0.94070490247380478)
224sage: stats.uniform(0,15).ppf([0.5,0.7])
225array([ 7.5, 10.5])
226In alternativa sii esplicito circa il tipo di dato, ad esempio:
227sage: from scipy import stats
228sage: stats.uniform(int(0),int(15)).ppf([float(0.5),float(0.7)])
229array([ 7.5, 10.5])
230Come terza alternativa puoi usare i suffissi semplici:
231sage: from scipy import stats
232sage: stats.uniform(0r,15r).ppf([0.5r,0.7r])
233array([ 7.5, 10.5])
234Puoi anche disabilitare il preprocessore nel tuo codice tramite il comando:
235preparse(False)
236Puoi lanciare Ipython da solo dalla riga di comando con:
237sage -ipython
238Questo non precarica niente di specifico di Sage.
239O ancora puoi cambiare il linguaggio di sessione (Notebook language) in "Python".
240
2412.16 Come faccio a salvare un oggetto cosi' che non devo ridigitarlo ogni volta che apro un foglio di lavoro (worksheet) ?
242
243I comandi "save" e "load" rispettivamente registrano e caricano un oggetto. Nella sessione di lavoro Notebook la variabile DATA e' la locazione dello spazio di salvataggio del foglio di lavoro (worksheet). Per registrare l'oggetto "my_stuff" in un foglio di lavoro puoi digitare:
244save(my_stuff, DATA + "my_stuff")
245e, per ricaricarlo, ti basta digitare:
246my_stuff = load(DATA + "my_stuff")
247
2482.17 Ho un errore da jsMath oppure un simbolo matematico non e' visualizzato correttamente nella sessione Notebook.
249
250Se vedi l'errore:
251"It looks like jsMath failed to set up properly (error code -7). I will try to keep going, but it could ..."
252allora vuol dire che non hai installato i font TeX che aiutano jsMath a visualizzare i suoi bei simboli matematici. Affinche' si veda il gradevole TeX assieme a jsMath, devi scaricare un insieme di font dal link "http://www.math.union.edu/~dpvc/jsMath/download/jsMath-fonts.html". Se sei un utente Linux ignora le istruzioni su quel sito e semplicemente decomprimi i font nella sottocartella ".fonts" della tua cartella home. Puoi anche installare il pacchetto "jsmath-fonts".
253
2542.18 Sage contiene una funzione simile alla "ToCharacterCode[]" di Mathematica ?
255
256Potresti voler convertire caratteri ASCII come "Big Mac" nel corrispondente codice numerico per ulteriori elaborazioni. In Sage e Python puoi usare "ord". Ad esempio:
257sage: map(ord, "abcde")
258[97, 98, 99, 100, 101]
259sage: map(ord, "Big Mac")
260[66, 105, 103, 32, 77, 97, 99]
261
2622.19 Posso far eseguire in automatico a Sage dei comandi all'accensione ?
263
264Si', ti basta creare un file "init.sage" nella sottocartella ".sage" della tua home, ed esso sara' eseguito ogni volta che lanci Sage. Questo presuppone che la variabile ambiente di Sage "DOT_SAGE" punti alla cartella nascosta "$HOME/.sage", cosa che avviene di default.
265
2662.20 Il mio aggiornamento di Sage e' fallito, segnalando simboli gmp mancanti su OSX 10.4. Cosa posso fare ?
267
268Spostare un'installazione di Sage su Mac OS X 10.4 e poi aggiornare qualcosa collegato alla libreria NTL porta ad errori di collegamento dovuti alla mancanza dei simboli gmp. Il problema e' la modalita' del collegamento con cui e' creato l'NTL dinamico. C'e' una soluzione ma si sta ancora verficando che risolva realmente il problema. Tutto cio' che e' collegato a NTL dev'essere ricompilato, ad esempio le librerie Singular e Cremona. A complicare la questione c'e' il fatto che questo problema non si verifica su Mac OS X 10.5. Una correzione per questo problema e' stata aggiunta in Sage 2.8.15 dunque per cortesia se avete quest'errore in un rilascio piu' recente di Sage segnalatecelo.
269
2702.21 Quando compilo Sage il mio computer fa beep e si spegne o si blocca.
271
272Compilare sage e' piuttosto faticoso per il processore del computer. Il comportamento suddetto di solito indica che il computer si e' surriscaldato. In molti casi questo si puo' risolvere pulendo il ventilatore del processore del computer ed assicurando adeguata areazione al computer. Puoi chiedere al tuo amministratore di sistema o ad un tecnico di provvedere, qualora tu non l'abbia mai fatto. Questa manutenzione del computer, se non fatta da persone preparate, potrebbe anche danneggiare il computer.
273Per gli utenti Linux, se pensi che la compilazione fallisca per un problema di risorse di macchina, una soluzione potrebbe essere di modificare il file /etc/inittab per far partire Linux al runlevel 3. Tale file di solito contiene qualcosa del tipo:
274#
2750 - halt (Do NOT set initdefault to this)
276#
2771 - Single user mode
278#
2792 - Multiuser, without NFS (The same as 3, if you do not have
280#
281networking)
282#
2833 - Full multiuser mode
284#
2854 - unused
286#
2875 - X11
288#
2896 - reboot (Do NOT set initdefault to this)
290#
291id:5:initdefault:
292Questo fa si' che la tua distribuzione Linux parta con la schermata di login grafico. Commenta la linea "id:5:initdefault:" e aggiungi la linea "id:3:initdefault:", cosi' da aver qualcosa come:
293#
2940 - halt (Do NOT set initdefault to this)
295#
2961 - Single user mode
297#
2982 - Multiuser, without NFS (The same as 3, if you do not have
299#
300networking)
301#
3023 - Full multiuser mode
303#
3044 - unused
305#
3065 - X11
307#
3086 - reboot (Do NOT set initdefault to this)
309#
310# id:5:initdefault:
311id:3:initdefault:
312Ora se riavvii il sistema ti troverai davanti all'interfaccia di login testuale. Questa ti permette di accedere al sistema con una sessione testuale all'interno di un terminale virtuale. Una tale sessione di solito non consuma molte risorse, come farebbe invece un'interfaccia grafica. Poi puoi compilare Sage da codice sorgente in tale sessione testuale. Dovresti assicurarti di essere in grado di riattivare successivamente l'interfaccia grafica, prima di tentare di accedere tramite un'interfaccia testuale.
313
3142.22 Quando lancio i doctest su Mac OS X vedo dei messaggi con "malloc", ma alla fine Sage dice che tutto e' andato bene.
315
316I messaggi "malloc" a cui ti riferisci potrebbero essere qualcosa tipo:
317sage -t src/sage/libs/pari/gen.pyx
318python(4563) malloc: *** vm_allocate(size=4096000000) failed (error code=3)
319python(4563) malloc: *** error: can’t allocate region
320python(4563) malloc: *** set a breakpoint in szone_error to debug
321Questo comportamento non e' un fallimento dei doctest. E' un messaggio di errore stampato dal sistema ed e' esattamente quello che ci si aspetta di vedere. In quel particolare doctest, cerchiamo di allocate una lista molto grande in PARI che non ci sta nella memoria fisica (e' grande almeno 100 Gb). Quindi Mac OS X ti dice che non puo' allocare un blocco di memoria di circa 4 Gb, cosa attesa se stai usando Sage su una versione a 32 bit di Mac OS X ed hai compilato Sage nel modo a 32 bit oppure la tua distribuzione Sage binaria e' a 32 bit.
322
3232.23 Sage 2.9 o superiore non riesce a compilare ATLAS su Linux. Come posso risolvere ?
324
325La causa piu' probabile e' l'abilitazione della gestione dell'alimentazione. Disabilitala per risolvere il problema. In base al tuo tipo di distribuzione cio' si puo' fare da interfaccia grafica oppure no. Digita a riga di comando, come utente root, quanto segue, per ogni CPU presente sul tuo sistema:
326/usr/bin/cpufreq-selector -g performance -c #number CPU
327Su Ubuntu, prova a disabilitare “Power Manager” (gestione alimentazione) via System --> Preferences --> Sessions nel menu “Startup Programs” (programmi di avvio) o utilizzando "cpufreq-set" da riga di comando.
328
3292.24 Sage termina con il messaggio d'errore "restore segment prot after reloc: Permission denied". Cosa c'e' che non va ?
330
331Il problema e' collegato a SELinux. Vai al link seguente per dei suggerimenti su come risolvere questo problema: http://www.ittvis.com/services/techtip.asp?ttid=3092. Stiamo seguendo questo problema come correzione #480.
332
3332.25 Quando lancio Sage, SELinux segnala che "/path/to/libpari-gmp.so.2" richiede "text-relocation" (riallocazione del testo). Come posso risolvere ?
334
335Il problema puo' essere risolto eseguendo il seguente comando:
336chcon -t textrel_shlib_t /path/to/libpari-gmp.so.2
337
3382.26 L'aggiornamento di Sage e' andato bene, ma adesso l'indicatore continua a mostrare la versione precedente. Come posso risolvere ?
339
340L'indicatore e' memorizzato e non ricalcolato ad ogni esecuzione di Sage. Il fatto che non sia aggiornato non dovrebbe impedire a Sage di funzionare regolarmente. Digita "banner()" in una sessione di Sage per verificare la versione reale. Se vuoi l'indicatore corretto allora devi ricompilare Sage digitando "make build" in un terminale.
341
3422.27 Come posso eseguire Sage come demone/servizio ?
343
344Al momento non abbiamo una soluzione pronta. Ci sono parecchie possibilita'. Puoi usare i programmi a riga di comando "screen", "nohup" o "disown". Stiamo seguendo questo problema come correzione #381 quindi seguici.
345
3462.28 Sto utilizzando MacOS X. Dove devo mettere la cartella di font jsMath per far sparire il riquadro rosso ?
347
348Vai al link "http://www.math.union.edu/~dpvc/jsMath/download/jsMath-fonts.html" dove dice:
349"Per utenti Mac OS X: scaricare e decomprimere l'archivio, poi trascinare i font nella sottocartella Fonts della tua cartella Library (o nel FontBook, fare doppio click su di essi e premere il pulsante "installa")."
350
3512.29 Il comando "show" (mostra) per la visualizzazione di oggetti 3D non funziona.
352
353La visualizzazione 3D in tempo reale per Sage dalla versione 6.4 in avanti usa il pacchetto "Jmol/JSmol". Dalla linea di comando viene utilizzata l'applicazione Java Jmol, mentre per la visualizzazione dal browser vengono usati sia javascript puro che una Java applet. In genere nei browser e' usato javascript puro per evitare problemi con quei browser che non supportano i plugin per le applet Java (ad esempio Chrome). In ogni worksheet su browser c'e' una casella di spunta da spuntare prima di generare una vista tridimensionale qualora l'utente voglia usare l'applet Java (essa e' un po' piu' veloce con viste complicate).
354La ragione piu' probabile di un malfunzionamento e' che non hai installato l'ambiente runtime di Java (JRE) o che e' piu' vecchio della versione 1.7. Se le cose funzionano dalla riga di comando, un'altra possibilita' e' che il tuo browser non ha il plugin giusto per supportare le Java applet (al momento, nel 2014, tali plugin non lavorano con la maggior parte delle versioni di Chrome). Assicurati di aver installato o il plugin IcedTea (su Linux vedi il tuo gestore dei pacchetti) o il plugin di Oracle Java.
355se stai usando un server Sage sul web ed anche la visualizzazione tramite javascript non funziona, potresti avere un problema con la funzionalita' javascript del tuo browser, o potresti aver disabilitato javascript.
356
3572.30 Posso usare gli strumenti di Sage in un ambiente commerciale ?
358
359Si'! Assolutamente ! Fondamentalmente l'unico limite che hai e' che se fai dei delle modifiche a Sage stesso e redistribuisci pubblicamente tale versione modificata, allora devi renderci disponibili tali modifiche cosi' che le possiamo includere nella versione standard di Sage (se vogliamo). Altrimenti sei libero di usare quante copie di Sage vuoi per fare soldi, ecc. senza pagare alcuna licenza.
360
3612.31 Voglio scrivere del codice Cython che usa l'aritmetica dei campi finiti, ma l'istruzione "cimport sage.rings.finite_field_givaro" non funziona. Cosa posso fare ?
362
363Devi segnalare a Sage di usare C++ (sia Givaro che NTL sono librerie C++) ed hai bisogno anche delle librerie GMP e STDC C++. Ecco un piccolo esempio:
364# These comments are hints to Sage/Pyrex about the compiler and
365# libraries needed for the Givaro library:
366#
367#clang c++
368#clib givaro gmpxx gmp m stdc++
369cimport sage.rings.finite_field_givaro
370# Construct a finite field of order 11.
371cdef sage.rings.finite_field_givaro.FiniteField_givaro K
372K = sage.rings.finite_field_givaro.FiniteField_givaro(11)
373print "K is a", type(K)
374print "K cardinality =", K.cardinality()
375# Construct two values in the field:
376cdef sage.rings.finite_field_givaro.FiniteField_givaroElement x
377cdef sage.rings.finite_field_givaro.FiniteField_givaroElement y
378x = K(3)
379y = K(6)
380print "x is a", type(x)
381print "x =", x
382print "y =", y
383print "x has multiplicative order =", x.multiplicative_order()
384print "y has multiplicative order =", y.multiplicative_order()
385print "x*y =", x*y
386# Show that x behaves like a finite field element:
387for i in range(1, x.multiplicative_order() + 1):
388print i, x**i
389assert x*(1/x) == K.one_element()
390
391Per saperne di piu' digita quanto segue al prompt di Sage:
392sage.rings.finite_field_givaro.FiniteField_givaro.
393Poi premi TAB, ed usa ?? per avere piu' informationi su ogni funzione. Ad esempio:
394sage.rings.finite_field_givaro.FiniteField_givaro.one_element??
395fornisce informazioni sull'unita' moltiplicativa nel campo finito.
396
3972.32 La compilazione su Mac OS X fallisce in maniera incomprensibile. Come posso risolvere ?
398
399Cerca il file di log della compilazione (install.log) e controlla se c'e' il seguente messaggio:
400fork: Resource temporarily unavailable.
401Se e' cosi', prova a fare questo: crea (o modifica se c'e' gia') il file "/etc/launchd.conf" includendovi quanto segue:
402limit maxproc 512 2048
403Poi riavvia. Vedi il link seguente per maggiori dettagli: http://www.macosxhints.com/article.php?story=20050709233920660.
404
4052.33 Come va utilizzato in Sage l'operatore XOR bitwise ?
406
407L'OR esclusivo in Sage si fa con l'operatore ^^. C'e' anche il corrispondente "operatore inplace" ^^=. Ad esempio:
408sage:
4091
410sage:
411sage:
412sage:
41310
4143^^2
415a = 2
416a ^^= 8
417a
418Se definisci 2 variabili e poi confronti:
419sage: a = 5; b = 8
420sage: a.__xor__(b), 13
421(13, 13)
422Puoi anche fare:
423sage: (5).__xor__(8)
42413
425Le parentesi sono necessarie affinche' Sage non supponga di avere a che fare con un numero reale. Ci sono molti modi di definire una funzione:
426sage: xor = lambda x, y: x.__xor__(y)
427sage: xor(3, 8)
42811
429Un'altra possibilita', che aggira il preparser di Sage, e':
430sage: def xor(a, b):
431...
432return eval("%s^%s" % (a, b))
433...
434sage: xor(3, 8)
43511
436Puoi anche disattivare il preparser di Sage con il comando "preparser(False)", a quel punto l'operatore ^ funzionera' esattamente come in Python. Puoi successivamente riattivare il preparser con il comando ""preparser(True)". Questo funziona solo dalla riga di comando di Sage. Se sei in una sessione Notebook, passa in "Python mode".
437
4382.34 Quando provo ad usare LaTeX in una sessione Notebook, dice che non trova "fullpage.sty".
439
440La risposta piu' ampia, ma forse non la piu' utile, e' che hai bisogno di installare "fullpage.sty" in una cartella acceduta da TeX. Su Ubuntu (e probabilmente anche su altre distribuzioni Linux) dovresti installare il pacchetto "texlive-latex-extra". Se non e' disponibile, prova ad installare il pacchetto "tetex-extra". Se stai usando Mac OS X dovrai usare qualunque distribuzione TeX hai gia' per ottenere "fullpage.sty" (se usi MacTeX probabilmente ce l'hai gia' installato). Se stai usando l'immagine VirtualBox in Windows dovrai fare login in tale immagine ed di li' installare "texlive-latex-extra".
441
4422.35 Con degli oggetti "a" e "b" ed una funzione "f" ho digitato accidentalmente "f(a)=b" anziche' "f(a)==b". Questo mi ha dato un errore "TypeError" (come mi aspettavo) ma ha anche cancellato l'oggetto "a". Perche'?
443
444Questo e' dovuto a come sono definite le funzioni in Sage con la notazione "f(x)=expr" usando il preparser. Nota anche che se fai quest'errore in un costrutto IF, avrai un errore "SyntaxError" prima di qualunque altro comportamento errato, quindi, in questo caso, non hai il problema.
445
446Capitolo 3: Contribuire a Sage.
447
4483.1 Come posso iniziare a contribuire a Sage ?
449
450C'e' una guida rapida per chiunque voglia contribuire a Sage. E' indirizzata soprattutto a chi e' nuovo alla programmazione. Innanzitutto il linguaggio principale per la programmazione di Sage e' Python. Alcune parti di Sage possono essere scritte in altri linguaggi, specialmente le componenti che fanno l'elaborazione numerica piu' impegnativa, ma la maggior parte delle funzionalita' sono realizzate in Python, incluso il codice di collegamento. Uno degli aspetti validi di Python, che Sage eredita, e' che e' piu' importante scrivere codice funzionante che non codice veloce. Il codice veloce e' prezioso, ma il codice chiaro e leggibile e' importante. Nella comunita' matematica i risultati inaccurati sono inaccettabili. La correttezza viene prima dell'ottimizzazione. Nel seguente articolo:
451• D. Knuth. Structured Programming with go to Statements. ACM Journal Computing Surveys, 6(4), 1974.
452Don Knuth osserva che "dovremmo dimenticarci dell'efficienza di poco momento, diciamo per il 97% del tempo: l'ottimizzazione prematura sta alla radice di ogni male".
453Se non conosci Python dovresti iniziare ad imparare il linguaggio. Un buon posto dove iniziare e' al link "Python Official Tutorial" (http://docs.python.org/tutorial) e altra documentazione si trova al link "Python standard documentation" (http://docs.python.org). Un altro posto da guardare e' al link "Dive into Python" (http://www.diveintopython.net) di Marc Pilgrim, che puo' essere veramente d'aiuto su temi specifici come lo sviluppo guidato dai test. Il libro "Building skills in Python" (http://homepage.mac.com/s_lott/books/pyhon.html) di Stephen F.Lott e' adatto a chiunque abbia gia' nozioni di programmazione.
454Nel frattempo puoi guardare la tua copia del codice sorgente di Sage e familiarizzare con il sistema di controllo versione Git (cfr. http://git-scm.com). Una volta che sei a tuo agio con Python, cosa rapida per gli elementi di base, puoi iniziare ad usare Sage. Se vuoi puoi provare ad imparare Python usando Sage, ma non e' consigliabile perche' e' utile sapere cio' che e' il puro Python e dove invece Sage fa le sue "magie". Ci sono molte cose che funzionano in Python ma non in Sage e viceversa.
455Poi dai un'occhiata alla "Guida ufficiale di sviluppo di Sage" al link http://www.sagemath.org/doc/developer. Come minimo il suo primo capitolo dev'essere letto da ogni sviluppatore Sage. Fa anche particolare attenzione alle "linee guida su Trac" al link http://www.sagemath.org/doc/developer/trac.html. Puoi anche unirti alla mailing list "sage-devel" e gravitare sul canale IRC #sage-devel su Freenode.
456Il modo migliore per familiarizzare con il processo di sviluppo di Sage e' scegliere un ticket dal server Trac ed esaminare i cambiamenti ivi proposti. Se vuoi implementare qualcosa e' buona pratica discutere le tue idee prima sulla mailing list "sage-devel", cosi' che altri sviluppatori abbiano la possibilita' di fare commenti sulle tue idee/proposte. Sono anche molto aperti a nuove idee, come tutti i matematici dovrebbero essere.
457
4583.2 Non sono un programmatore. C'e' qualche altro modo in cui posso aiutare ?
459
460Certo. Come in ogni progetto FOSS ci sono molti modi in cui puoi dare il tuo aiuto nella comunita' di Sage. E programmare e' solo uno dei modi. Se sai parlare, leggere e scrivere in un'altra lingua, ci sono molti modi in cui il tuo contributo puo' essere molto prezioso all'intera comunita' di Sage. Diciamo che conosci l'italiano. Allora puoi scrivere un tutorial per Sage in italiano, o aiutare a tradurre il tutorial ufficiale di Sage in italiano. Per i grafici o gli artisti c'e' la possibilita' di aiutare migliorando l'aspetto del sito di Sage.
461O puoi dare un giudizio artistico sull'interfaccia Notebook di Sage, suggerendo come puo' essere migliorata.
462Molte persone amano scrivere tutorial tecnici. Una delle gioie di farlo e' che impari qualcosa di nuovo nel farlo. Allo stesso tempo comunichi delle conoscenze ai principianti, un'abilita' che e' utile anche in campi estranei alla stesura di documentazione tecnica. Un aspetto fondamentale della documentazione tecnica e' che espone un dato soggetto tecnico a dei principianti, pertanto il gergo tecnico dev'essere ridotto al minimo. Darrell Anderson ha scritto alcuni suggerimenti sulla scrittura di documentazione tecnica (vedi link http://humanreadable.nfshost.com/howtos/technical_writing_tips.htm), che ti suggeriamo caldamente di leggere. La suddetta e' una lista molto breve. Ci sono molti, molti piu' modi in cui puoi dare il tuo aiuto. Sentiti libero di inviare una email alla mailing list "sage-devel" per chiedere in quali modi potresti essere d'aiuto, o per suggerire un'idea sul progetto.
463
4643.3 Dove posso trovare risorse su Python e Cython ?
465
466Ecco una lista incompleta di risorse su Python e Cython. Ulteriori risorse possono essere trovate cercando sul web.
467Risorse generali
468• Cython (http://www.cython.org)
469• pep8 (http://pypi.python.org/pypi/pep8)
470• py2depgraph (http://www.tarind.com/depgraph.html)
471• pycallgraph (http://pycallgraph.slowchop.com)
472• PyChecker (http://pychecker.sourgeforge.net)
473• PyFlakes (http://divmod.org/trac/wiki/DivmodPyflakes)
474• Pylint (http://www.logilab.org/project/pylint)
475• Python home page (http://www.python.org) e Python standard documentation (http://docs.python.org)
476• Snakefood (http://furius.ca/snakefood)
477• Sphinx (http://sphinx.pocoo.org)
478• XDot (http://code.google.com/p/jrfonseca/wiki/xDot)
479Tutorial e libri
480• Building Skills in Python di Steven F. Lott (http://homepage.mac.com/s_lott/books/python.html)
481• Cython Tutorial di Stefan Behnel, Robert W. Bradshaw, e Dag Sverre Seljebotn (http://conference.scipy.org/proceedings/SciPy2009/paper_1/)
482• Dive into Python di Mark Pilgrim (http://www.diveintopython.net)
483• Dive Into Python 3 di Mark Pilgrim (http://www.diveintopython3.net)
484• Fast Numerical Computations with Cython di Dag Sverre Seljebotn (http://conference.scipy.org/proceedings/SciPy2009/paper_2/)
485• How to Think Like a Computer Scientist di Jeffrey Elkner, Allen B. Downey, e Chris Meyers (http://www.openbookproject.net/thinkCSpy)
486• Official Python Tutorial (http://docs.python.org/tutorial)
487Articoli ed HOWTO
488• decorator (http://pypi.python.org/pypi/decorator)
489• Functional Programming HOWTO di A. M. Kuchling (http://docs.python.org/howto/functional.html)
490• Python Functional Programming for Mathematicians di Minh Van Nguyen (http://wiki.sagemath.org/devel/FunctionalProgramming)
491• Regular Expression HOWTO di A. M. Kuchling (http://docs.python.org/howto/regex.html)
492• reStructuredText (http://docutils.sourgeforge.net/rst.html
493• Static Code Analizers for Python di Doug Hellmann (http://www.doughellmann.com/articles/pythonmagazione/completely-different/2008-03-linters/)
494
4953.4 Ci sono delle convenzioni di scrittura del codice sorgente che devo seguire ?
496
497Dovresti seguire le convenzioni standard di Python come documentato in PEP 0008 and PEP 0257 (http://www.python.org/dev/peps/pep-0008 e pep-0257). Consulta anche la "Guida dello sviluppatore di Sage", speciamente il capitolo "Convenzioni per scrivere codice sorgente in Sage" (http://www.sagemath.org/doc/developer/conventions.html).
498
4993.5 Ho inviato al server trac una correzione molte settimane fa. Perche' la state ignorando ?
500
501Non stiamo cercando di ignorare la tua correzione. Le persone che lavorano su Sage lo fanno nel loro tempo libero. Con centinaia di ticket aperti aventi un impatto molto variabile sulla comunita' di Sage, le persone che ci lavorano devono dare il loro tempo e sforzo prioritariamente a quei ticket che li interessano. A volte potresti essere la sola persona che comprende la tua correzione. In tal caso, ti invitiamo a fare uno sforzo supplementare per rendere il piu' semplice possibile a chiunque l'esaminare la tua correzione. Ecco alcuni suggerimenti su come rendere la tua correzione facile da esaminare:
502• Hai descritto in modo chiaro il problema che la tua correzione vuole risolvere ?
503• Hai fornito ogni informazione di base rilevante al problema che la tua correzione vuole risolvere ? Tali informazioni includono link a risorse online ed ad articoli, libri, o altro materiale di riferimento.
504• Hai descritto in modo chiaro come la tua correzione risolve il problema in oggetto ?
505• Hai descritto chiaramente nella tua correzione come effettuare i test dei cambiamenti ?
506• Hai elencato eventuali tickets da cui dipende la tua correzione ?
507• Se vi sono piu' correzioni, hai indicato chiaramente l'ordine in cui devono essere applicate ?
508• La tua correzione segue le convenzioni importanti indicate nella "Guida dello sviluppatore" ? (cfr. http://www.sagemath.org/doc/developer/writing_code.html)
509Se la tua correzione non ha possibilita' di essere aggiunta nell'albero dei sorgenti di Sage, non la ignoreremo ma semplicemente chiuderemo il ticket relativo con una spiegazione sul perche' non possiamo includerla.
510
5113.6 Come e quando posso ricordardare alla comunita' di Sage una correzione a cui tengo ?
512
513Ti suggeriamo di fare uno sforzo ulteriore nel ricordare alla comunita' di Sage una correzione che vuoi venga inclusa nell'albero dei sorgenti di Sage. Potrebbe esserci un prossimo evento "bug squash sprint" o "Sage days" che e' in relazione alla tua correzione. Tieni d'occhio le mailing list relative e rispondi educatamente ad ogni scambio di email relativo, spiegando chiaramente perche' la tua correzione ha importanza. Tieni d'occhio il canale IRC #sage-devel, avendo cura di rammentare la questione al momento giusto.
514
5153.7 Ho scritto del codice sorgente e voglio venga incluso in Sage. Pero' dopo aver rinominato il mio file "a.sage" in "a.py" ho degli errori di sintassi. Devo riscrivere tutto il mio codice in Python anziche' in Sage ?
516
517La risposta sostanzialmente e' si', ma riscrivere e' una parola grossa per cio' che bisogna realmente fare. C'e' ben poco da fare dal momento che Sage per lo piu' segue la sintassi di Python. Le 2 maggiori differenze sono la gestione degli interi (vedi anche il link http://www.sagemath.org/doc/tutorial/afterword.html per maggiori informazioni sul preparser di Sage) e la necessita' di importare quello che ti serve.
518• Gestione degli interi: dei fare i seguenti cambiamenti:
519– Notazione per l'elevamento a potenza: In Python ** significa elevamento a potenza e ^ significa “xor”.
520– Se devi restituire un intero all'utente, scrivi "return Integer(1)" invece di "return 1". In Python, 1 e' un intero Python, e Integer(1) e' un intero Sage/Gmp. Inoltre gli Integer sono molto piu' potenti degli int; ad esempio hanno collegata ad essi l'informazione di primalita' e la fattorizzazione.
521– Dovresti anche notare che 2 / 3 non significa piu' Integer(2) / Integer(3) che restituisce 2/3, ma invece int(2) / int(3), e pertanto restituisce 0 poiche' la divisione e' intera e trascura il resto. Se stai lavorando con i tipi Integer ma in realta' hai bisogno di eseguire una divisione intera puoi usare Integer(2) // Integer(3).
522• Note sull'importazione: la seconda cosa importante da tenere presente e' la necessita' di importare tutto cio' di cui hai bisogno. Nel dettaglio, ogni volta che usi una funzione Sage la devi prima importare all'inizio del file. Ad esempio, se hai bisogno di PolynomialRing, dovrai scrivere:
523from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
524
525Puoi chiedere a Sage dove si trova PolynomialRing usando:
526sage: PolynomialRing.__module__
527’sage.rings.polynomial.polynomial_ring_constructor’
528
529Questo corrisponde anche al percorso, che inizia dopo "site-packages", restituito da Sage quando richiami l'help su PolynomialRing. Ad esempio se scrivi "PolynomialRing?" otterrai:
530Type:
531[...]
532File:
533[...]
53424
535function
536/home/florent/src/Sage/sage/local/lib/python2.6/site-packages/sage/rings/polynomial/pol