Documentazione di Ghini 1.0

https://travis-ci.org/Ghini/ghini.desktop.svg?branch=ghini-1.0-dev https://hosted.weblate.org/widgets/ghini/-/svg-badge.svghttps://coveralls.io/repos/Ghini/ghini.desktop/badge.svg?branch=ghini-1.0-dev&service=github:target:https://coveralls.io/github/Ghini/ghini.desktop?branch=ghini-1.0-dev

Ghini è un programma per la gestione di collezioni di oggetti botanici. Con Ghini puoi creare una base dati di registri di piante, con molte opzioni di ricerca.

Ghini è software aperto e libero ed è distribuito secondo la GPL: Licenza Pubblica GNU

Statements

Obiettivi e punti salienti

Dovreste usare questo software? Questa domanda è per voi di rispondere. Siamo sicuri che se si gestisce una collezione botanica, troverete Ghini eccessivamente utile e ci auguriamo che questa pagina vi convincerà su di esso.

Questa pagina Mostra come Ghini rende il software soddisfare le esigenze di un giardino botanico.

Giardino botanico

Secondo Wikipedia,» un botanic(al) giardino è un giardino dedicato per la raccolta, la coltivazione e la visualizzazione di una vasta gamma di piante etichettati con i loro nomi botanici «e ancora secondo il Wikipedia,» un giardino è uno spazio progettato, solitamente all’aperto, mettere da parte per la visualizzazione, la coltivazione e il godimento delle piante e altre forme di natura. «

Così abbiamo in un giardino botanico sia lo spazio fisico, il giardino, come sua dinamica, le attività a cui è dedicato il giardino, attività che ci fa chiamare il giardino un giardino botanico.

_images/garden_worries_1.png

il fisico giardino

_images/garden_worries_2.png

raccolta attività correlate in giardino

Giardino botanico Software

A altra estremità del nostro ragionamento abbiamo l’applicazione programma Ghini e ancora una volta citando Wikipedia,» un programma applicativo è un programma per computer progettato per eseguire un gruppo di funzioni di coordinamento, attività o attività a vantaggio dell’utente «, o, in breve,» progettato per aiutare le persone a svolgere un’attività «.

Dati e algoritmi all’interno Ghini sono stati progettati per rappresentare lo spazio fisico e la dinamica di un giardino botanico.

_images/ghini-10.svg

struttura di database di Ghini

L’elemento centrale nel punto di vista di Ghini è la accessione (Accession). Seguendo i suoi collegamenti agli altri oggetti di database ci permette di comprenderne meglio la struttura:

Una Accession rappresenta l’aver ricevuto materiale botanico nel giardino. Per questo, una Accession è un concetto astratto, collega le Plant vive —gruppi di piante collocate tutte nella stessa Location— alla Species corrisondente. Ad una Accession si possono collegare zero o più Plant (0..n), e sarà sempre associata ad esattamente una Specie. Ciascuna Plant appartiene esattamente ad una Accession, mentre ciascuna Species potrà avere zero o più Accession.

Una Accssion rimane nel database anche se tutti i suoi Planting stati rimossi, venduto, o sono morti. Identificare la Species di una Accession equivale al connettere in modo consistente tutti i suoi Planting alla stessa Species.

Contatti esterni (Contact) o lo stesso orto botanico a traverso di propagazioni (Propagation) forniscono materiale vegetale per il giardino; Questa informazione è facoltativa e collezionisti più piccoli potrebbero preferire non approfittare di questa sezione del software. Una prova di Propagation potrebbe non riuscire, il più delle volte il risultato sarà esattamente una Accession, ma può anche produrre Species leggermente differenti, quindi il database permette di zero o più Accession a Propagation (0.. n). Anche un Contact può fornire zero o più Accession (0.. n).

Specialisti possono formulare il loro parere circa la ‘specie’ a cui appartiene un ‘accessione’, fornendo una ‘verifica’, firmarlo, e affermando il livello applicabile di fiducia.

Se un ‘accessione’ è stato ottenuto nel vivaio giardino da una successo ‘propagazione’, i link ‘propagazione’ ‘accessione’ e tutti i suoi ‘planting’ ad un unico genitore ‘piantatura’, il seme o il genitore vegetativo.

Anche dopo la spiegazione di cui sopra, nuovi utenti generalmente ancora chiedono perché hanno bisogno di passare attraverso un schermo di ‘Accessione ‘ mentre tutto quello che vogliono è quello di inserire un planting di ‘ ‘ nell’insieme e ancora: che cosa è questo “accession” cosa comunque? Maggior parte delle discussioni in rete non rendere il concetto più chiaro. Uno dei nostri utenti ha dato un esempio che mi fa piacere da includere nella documentazione di Ghini.

caso d’uso:
  1. All’inizio del 2007 abbiamo ottenuto cinque piantine di * Heliconia longa * (una pianta ‘ specie ‘) dal nostro prossimo (la fonte di ‘ contatto ‘). Dato che era la prima acquisizione dell’anno, abbiamo chiamato il loro 2007.0001 (abbiamo dato loro un codice singolo unico ‘accessione’, con quantità 5) e li abbiamo piantato tutti insieme a una ‘posizione ‘ come una singola piantatura del ‘ ‘, anche con quantità 5.

  2. Al momento della scrittura, nove anni più tardi, ‘ accessione ‘ 2007.0001 ha 6 distinti ‘planting’, ognuno in un diverso ‘luoghi ‘ nel nostro giardino, ottenuti per via vegetativa (asessualmente) da 5 piante originali. Il nostro unico intervento era spaccare, lo spostamento e naturalmente scrivere queste informazioni nel database. La quantità totale dell’planting è superiore a 40.

  3. Nuovi ‘planting ‘ ottenuti (assistita) sessuale ‘propagazione ‘ vengono nel nostro database di codici diversi ‘ accessione’, dove il nostro giardino è la fonte di ‘ contatto ‘ e dove sappiamo quale dei nostri planting di ‘ ‘ è il padre di seme.

questi tre casi si traducono in diverse storie di breve utilizzo:

  1. attivare il menu Inserisci → accessione, verificare l’esistenza e la correttezza della specie ‘ ‘ * Heliconia longa *, specificare la quantità iniziale del ‘accessione ‘; aggiungere il suo ‘planting ‘ ‘posizione ‘ preferita.

  2. modificare ‘ planting ‘ per correggere la quantità di piante viventi — ripetere questa operazione più spesso necessario.

  3. modificare ‘ planting ‘ per dividerlo in sedi separate del ‘ ‘ — questo produce un diverso ‘planting ‘ sotto la stessa ‘accessione ‘.

  4. modificare ‘ planting ‘ per aggiungere un ‘ propagazione ‘ (seme).

  5. modificare per aggiornare lo stato della ‘propagazione ‘ che ‘ pianta ‘.

  6. attivare il menu Inserisci → accessione per associare un’accessione a un processo di ‘ propagazione ‘ successo; aggiungere la piantatura del ‘ ‘ nella posizione desiderata del ‘ ‘.

In particolare la capacità di dividere una piantatura del ‘ ‘ in diverse località diverse del ‘ ‘ e per mantenere tutte le uniformemente associato a una ‘specie ‘, o la possibilità di mantenere informazioni su ‘planting ‘ che sono stati rimossi dalla raccolta, contribuire a giustificare la presenza del livello di astrazione di ‘Accessione ‘.


La nostra sezione di storie utente contiene informazioni dettagliate su quanto sopra e altro ancora.


Highlights

non-così-breve elenco delle principali attrattive, destinata stuzzicare l’appetito.

informazioni tassonomiche

When you first start Ghini, and connect to a database, Ghini will initialize the database not only with all tables it needs to run, but it will also populate the taxon tables for ranks family and genus, using the data from the “RBG Kew’s Family and Genera list from Vascular Plant Families and Genera compiled by R. K. Brummitt and published by the Royal Botanic Gardens, Kew in 1992”. In 2015 we have reviewed the data regarding the Orchidaceae, using “Tropicos, botanical information system at the Missouri Botanical Garden - www.tropicos.org” as a source.

Importa dati

Ghini vi permetterà di importare i dati che hai messo in un formato intermedio json. Che cosa è importare completerà a quello che hai già nel database. Se hai bisogno di aiuto, si può chiedere qualche professionista Ghini per aiutarti a trasformare i dati in formato json intermedio di Ghini.

sinonimi

Ghini vi permetterà che si definiscono sinonimi per specie, generi e famiglie. Anche questa informazione può essere rappresentata nel formato json intermedio ed essere importata in un database esistente di Ghini.

scientifica responsabile

Ghini implementa il concetto di «accessione», intermedio tra planting fisico (o un gruppo di loro) e astratte taxon. Ogni accessione possibile associare le stesse piante di diversi taxa, se due tassonomisti non concordano sull’identificazione: ogni tassonomista possono dire la loro e non è necessario sovrascrivere il lavoro di altri. Tutte le verifiche possono essere trovate nel database, con timestamp e firma.

Aiuta identificazione off-line

Ghini permette di associare immagini alle piante fisiche, questo può aiutare a riconoscere la pianta, nel caso in cui un adesivo è perso, o identificazione tassonomica aiuto se un tassonomista non è disponibile a tutti volte.

esportazioni e rapporti

Ghini ti consente di esportare un report in qualsiasi formato testuale che avete bisogno. Utilizza un motore di template potente denominato ‘mako’, che vi permetterà che si esportano i dati in una selezione in qualsiasi formato che avete bisogno. Una volta installato, un paio di esempi sono disponibili nella sottodirectory mako.

annotare le informazioni

È possibile associare note piante, accessioni, specie,... Note possono essere categorizzati e utilizzati nei rapporti o ricerche.

giardino o erbario

Gestione delle posizioni di pianta.

cronologia del database

Tutte le modifiche nel database viene memorizzato nel database, come log di cronologia. Tutte le modifiche sono ‘firmate’ e timestamp. Ghini rende facile per recuperare l’elenco di tutte le modifiche nell’ultima giornata di lavoro o settimana, o in qualsiasi periodo specifico in passato.

indipendente dal database

Ghini is not a database management system, so it does not reinvent the wheel. It works storing its data in a SQL database, and it will connect to any database management system which accepts a SQLAlchemy connector. This means any reasonably modern database system and includes MySQL, PostgreSQL, Oracle. It can also work with sqlite, which, for single user purposes is quite sufficient and efficient. If you connect Ghini to a real database system, you can consider making the database part of a LAMP system (Linux-Apache-MySQL-Php) and include your live data on your institution web site.

lingua agnostico

Il programma è nato in inglese e tutta la sua documentazione tecnico e utente è ancora solo in quella lingua, ma lo stesso programma è stato tradotto e può essere utilizzato in varie altre lingue, tra cui spagnolo (86%), portoghese (100%), francese (42%), per citarne alcune lingue dell’americano del sud, come pure la svedese (100%) e ceca (100%).

indipendente dalla piattaforma

Installazione di Ghini su Windows è un processo semplice e lineare, ci vorranno non più di 10 minuti. Ghini nasce su Linux e installarlo su ubuntu, fedora o debian è di conseguenza ancora più facile. MacOSX essendo basato su unix, è possibile eseguire correttamente la procedura di installazione di Linux su qualsiasi computer Apple recenti, dopo alcuni passaggi di preparazione.

facilmente aggiornabile

Il processo di installazione produrrà un’installazione aggiornabile, dove l’aggiornamento avrà meno di un minuto. A seconda della quantità di feedback che riceviamo, produrremo aggiornamenti ogni pochi giorni o una volta in un po ‘ di tempo.

unit testata

Ghini è continuamente e ampiamente testato unità, qualcosa che rende la regressione di funzionalità quasi impossibile. Ogni aggiornamento è automaticamente qualità selezionata, il servizio di Travis Continuous Integration. Integrazione di TravisCI con la piattaforma github renderà difficile per noi a rilasciare qualcosa che ha un’unità singola in mancanza di prova.

La maggior parte delle modifiche e aggiunte noi fare, venire con alcuni test di unità extra, che definisce il comportamento e farà qualsiasi cambiamento indesiderato facilmente visibile.

customizable/extensible

Ghini è estensibile tramite plugin e può essere personalizzato per soddisfare le esigenze dell’istituzione.

Missione & Visione

Qui di seguito riportiamo chi siamo, cosa pensiamo del nostro lavoro, cosa potete aspettarvi di questo progetto.

Chi c’è dietro Ghini

Ghini iniziò come un progetto individuale, per mano di Brett Adams. Brett iniziò questo software sotto il nome di Bauble, per conto del giardino botanico del Belize, e successivamente lo adattò alle richieste di un paio di altri utenti che fecero richiesta. Brett dichiarò Bauble patrimonio libero, proteggendolo con una licenza GPL.

Dopo alcuni anni di stagnazione che Mario Frasca ha assunto la responsabilità di Bauble, lo ha ridenominado come Ghini, in onore a Luca Ghini, ha iniziato a viaggiare per promuoverlo e distribuirlo, ne ha ripreso lo sviluppo e la documentazione, ed ora è Mario Frasca qui dietro il software, migliorandolo, alla ricerca di utenti, stimolando feedback...

Quindi attualmente dietro Ghini c’è molto di più che solo uno sviluppatore, cè una piccola ma crescente comunità globale di utenti.

Le traduzioni sono fornite da volontari che per lo più rimangono dietro le quinte, traducendo un paio di termini o di frasi mancanti e scompaiono nuovamente.

Per rendere le cose più chiare quando si parla di Ghini, è bene indicare se si tratta di Ghini (il software), o Ghini (le persone), a meno che ovviamente non vogliamo indicare entrambe le cose.

Missione

La missione di una organizzazione è la sua ragion d’essere, definisce la logica di un’entità ed è specifica e vera. Per Ghini, la missione stabilisce l’ordine sociale in cui è impegnato, le esigenze che sono soddisfatte con Ghini(il software) e con i servizi di Ghini(le persone), il mercato in cui Ghini si muove e la sua immagine pubblica prevista.

  • accedere al software

  • accedere allo sviluppo

  • impacchetta le risorse

  • fonte di pubblico accesso

  • dati aperti

  • Comunità che formano

Visione

La visione serve a indicare la strada da percorrere e proietta un’immagine futura di quello che vogliamo che la nostra organizzazione diventi, in modo realistico e attraente. Essa serve come motivazione perché visualizza la sfida e la direzione delle modifiche necessarie per crescere e prosperare.

  • entro il 2020

  • segno di riferimento

  • comunità

  • sviluppo

  • integrazione con il portale web

  • informazioni geografiche

Istallare Ghini

Istallazione

ghini.desktop è un programma multipiattaforma e funziona su macchine unix (Linux e MacOSX) ma anche su Windows.

uso Linux proprio perché ho fretta

Scarica ed esegui lo script di installazione. La documentazione può attendere.

Il gruppo di sviluppo di Ghini è piccolo, preferiamo lavorare al migliorare il programma, o a documentarlo, piuttosto che perder tempo con pacchetti di installazione. Invece di tanto pacchetti differenti, uno per piattaforma, offriamo una stessa procedura di installazione per tutte le piattaforme. Questo non solo ci risparmia tempo, ci regala anche un po’ di vantaggi, che apprezzeremo nel corso dell’uso del software.

L’installazione è basata sull’esecuzione di uno script.

  • Lo script GNU/Linux si occupa di tutto, dalla soluzione delle dipendenze alla installazione per tutti gli utenti nel gruppo ghini.

  • Lo script per Windows richiede l’installazione previa di un paio di cose.

  • Su MacOSX utilizzeremo lo stesso script di GNU/Linux, però non avendo OSX un gestore di pacchetti ne istalleremo uno prima di eseguire lo script.

Seguendo le seguenti istruzioni di installazione si ottiene ghini.desktop installato in un ambiente Python virtuale, tutte le dipendenze saranno installate localmente e non entreranno in conflitto con altri programmi Python che possono essere sullo stesso elaboratore.

Le dipendenze che non è possibile installare in un ambiente virtuale Python sono: Python, virtualenv, GTK+, e PyGTK. La loro installazione differisce per piattaforma.

Se dovessi in seguito decidere di rimuovere Ghini, basterà rimuovere l’ambiente virtuale, che è una directory, con tutto il suo contenuto.

Installare su Linux

Aprire una finestra di terminale di shell e seguire queste istruzioni.

  1. Scaricare il programmino devinstall.sh ed eseguirlo:

    https://raw.githubusercontent.com/Ghini/ghini.desktop/ghini-1.0-dev/scripts/devinstall.sh
    

    Siete pregati di notare che lo script non vi aiuterà a installare alcun connettore aggiuntivo di database. Questo non è strettamente necessario e si può fare in qualsiasi passo successivo.

    Se il programmino di installazione termina senza errori, si può ora avviare ghini:

    ~/bin/ghini
    

    o aggiornare ghini all’ultima versione rilasciata nella linea di produzione:

    ~/bin/ghini -u
    

    Lo stesso programmino puoi utilizzarlo per cambiare ad un’altra linea di produzione. Al momento ci sono la ghini-1.0 e ghini-1.1.

  2. su Unity, apri un terminale, avvia ghini, la sua icona (il signor Ghini mostrando il suo erbario) apparirà nel launcher, e se si vuole lo si può saldare al launcher.

  3. Se si desidera utilizzare il valore predefinito ‘ SQLite <http: sqlite.org/=”“>’ _ database oppure non so che cosa questo significa, allora si può saltare questo passaggio. Se si desidera utilizzare un database back-end diverso da backend SQLite predefinita quindi è necessario anche installare un connettore database.</http:>

    Se si desidera utilizzare un ‘ PostgreSQL <http: www.postgresql.org=”“>’ _ database poi attivare l’ambiente virtuale e installare psycopg2 con i seguenti comandi::</http:>

    source ~/.virtualenvs/ghide/bin/activate
    pip install -U psycopg2
    

    Si potrebbero bisogno di risolvere le dipendenze. Come farlo, dipende dal sapore che GNU/Linux si sta utilizzando. Consultare la documentazione di distribuzione.

nota per il principiante

Per eseguire uno script, in primo luogo assicurarsi che avete segnato il nome della directory in cui avete scaricato lo script, quindi si apre una finestra di terminale e in quella finestra si digita ‘bash’ seguita da uno spazio e il nome completo dello script incluso nome directory e colpire il tasto di invio.

nota tecnica

You can study the script to see what steps if runs for you. In short it will install dependencies which can’t be satisfied in a virtual environment, then it will create a virtual environment named ghide, use git to download the sources to a directory named ~/Local/github/Ghini/ghini.desktop, and connect this git checkout to the ghini-1.0 branch (this you can consider a production line), it then builds ghini, downloading all remaining dependencies in the virtual environment, and finally it creates a startup script. If you have sudo permissions, it will be placed in /usr/local/bin, otherwise in your ~/bin folder. Again if you

Prossimo...

Connettersi ad una base dati.

L’installazione su MacOSX

Essendo MacOSX un ambiente unix, la maggior parte andrà bene lo stesso come su GNU/Linux (sorta di).

Ultima volta che abbiamo testato, alcune delle dipendenze non poteva essere installato su MacOSX 10.5 e presumiamo che problemi analoghi si mostrerebbe anche su vecchie versioni OSX. Ghini è stato testato con successo con 10.7, 10.9 e 10.12.

Prima di tutto, avete bisogno di cose che sono parte integrante di un ambiente unix, ma che mancano in un mac disponibile immediatamente:

  1. strumenti per gli sviluppatori: xcode. controllare la pagina di wikipedia per la versione supportata sul vostro mac.

  2. Gestione pacchetti: homebrew (tigerbrew per le vecchie versioni OSX).

con sopra installato, aprire una finestra terminale ed eseguire:

brew doctor

Assicurarsi di che comprendere i problemi segnala e correggerli. PyGTK dovrà xquartz e brew non risolverà automaticamente la dipendenza. installare xquartz utilizzando brew o il modo che preferisci:

brew install Caskroom/cask/xquartz

quindi installare le dipendenze rimanenti:

brew install git
brew install pygtk  # takes time and installs all dependencies

seguire tutte le istruzioni su come attivare ciò che avete installato.

Mac running OSX 10.12 —Sierra—

Su OSX 10.12, rapporti che ‘ gettext ‘ è già installato, ma allora è non fateci trovare ‘birra ‘. Una soluzione consiste nell’eseguire la seguente riga:

brew link gettext --force

Prima di poter correre ‘ devinstall.sh ‘ come su GNU/Linux, abbiamo ancora bisogno di installare un paio di pacchetti python, a livello globale. A tale scopo:

sudo pip install virtualenv lxml

Il resto è proprio come su una normale macchina unix. Leggere le istruzioni di GNU/Linux sopra, li seguono, godere.

Prossimo...

Connettersi ad una base dati.

installazione su Windows

L’attuale responsabile della ghini.desktop non ha alcun interesse a imparare a produrre file di Windows Installer, quindi l’installazione di Windows è qui ridotto alla stessa procedura di installazione come su Unix (GNU/Linux e MacOSX).

Si prega di segnalare eventuali problemi. Aiuto con l’imballaggio sarà molto gradito, in particolare da altri utenti di Windows.

La procedura descritta qui le istruzioni su come installare Git, Gtk, Python, e il pitone database connettori. Con questo ambiente impostato correttamente, la procedura di installazione di Ghini viene eseguito come su GNU/Linux. Le fasi conclusive sono nuovamente Windows specifico.

Nota

Ghini è stato testato con ed è noto a lavorare su W-XP, W-7 e W-8. Anche se dovrebbe funzionare bene su altre versioni di Windows non è stato accuratamente testato.

Nota

Download diretto link vengono forniti per tutti i componenti necessari. Sono stati testati in settembre 2015, ma le cose cambiano con il tempo. Se uno qualsiasi dei download diretto link smette di funzionare, si prega di suonare il campanello, così possiamo aggiornare le informazioni qui.

La procedura di installazione su Windows:

  1. scaricare e installare ‘ git ‘ (viene fornito con un unix-like ‘ sh ‘ e include ‘ vi ‘) da:

    https://git-scm.com/download/win
    

    ‘Direct link per scaricare git’ _

    tutte le opzioni predefinite sono corrette, tranne che abbiamo bisogno di git per essere eseguibile dal prompt dei comandi:

    _images/git3.png
  2. scaricare e installare Python 2. x (32 bit) da:

    http://www.python.org
    

    ‘Direct link per scaricare Python’ _

    Ghini è stato sviluppato e testato con Python 2. x. Sarà sicuramente non eseguire su Python 3. x. Se sei interessato ad aiutare porta a Python 3. x, si prega di contattare i manutentori di Ghini.

    durante l’installazione di Python, mettere Python nel percorso:

    _images/python3.png
  3. Scarica ‘ pygtk ‘ dall’origine seguente. (questo richiede python a 32 bit). Accertati di scaricare il “all in One” versione:

    http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/
    

    ‘Direct link per scaricare PyGTK’ _

    fare un’installazione completa, selezionando tutto:

    _images/pygtk1.png
  4. (Windows 8. x) si prega di considerare questo ulteriore passaggio. È forse necessario evitare il seguente errore su installazioni Windows 8.1:

    Building without Cython.
    ERROR: 'xslt-config' is not recognized as an internal or external command,
    operable program or batch file.
    

    Se si ignora questo passaggio e può confermare che si ottiene l’errore, vi preghiamo di informarci.

    È possibile scaricare lxml da:

    https://pypi.python.org/pypi/lxml/3.4.4
    

    Ricordate che avete bisogno della versione a 32 bit, per Python 2.7.

    ‘Direct link per scaricare lxml’ _

  5. (facoltativo) scaricare e installare un connettore di database diverso da ‘sqlite3 ‘.

    Su Windows, non è facile da installare ‘ psycopg2 ‘ da fonti, utilizzando pip, così “avoid il detailsgory” e utilizzare un foglio pre-compilato da:

    http://initd.org/psycopg/docs/install.html

    ‘Direct link per scaricare psycopg2’ _

  6. RIAVVIA

    Ehi, questo è per Windows, è necessario riavviare per rendere effettive le modifiche!

  7. scaricare ed eseguire (da ‘ system32cmd.exe ‘) il file batch:

    giusto prima di colpire il tasto di invio per eseguire lo script, sullo schermo potrebbe apparire come qualcosa di simile:

    _images/sys32cmd-1.png

    Questo sarà tirare ‘ ghini.desktop ‘ repository su github alla tua home directory, sotto ‘LocalgithubGhini ‘, check-out la linea di produzione ‘ ghini-1.0 ‘, creare un ambiente virtuale e installare ghini in esso.

    è inoltre possibile eseguire ‘ devinstall.bat ‘ passando come argomento la parte numerica della linea produttiva che si desidera seguire.

    Questo è l’ultimo passo di installazione che dipende, in larga misura, su un lavoro connessione internet.

    l’operazione può richiedere alcuni minuti per completare, a seconda della velocità della tua connessione internet.

  8. l’ultimo passo di installazione crea il gruppo Ghini ed i collegamenti nel Menu Start di Windows, per tutti gli utenti. A tale scopo, è necessario eseguire uno script con diritti amministrativi. Lo script si chiama ‘ devinstall-finalize.bat ‘, è proprio nella tua cartella HOME ed è stato creato nel passaggio precedente.

    pulsante destro del mouse su di esso, selezionare Esegui come amministratore, confermare che si desidera apportare modifiche al computer. Questi cambiamenti sono nel Menu Start solo: creare il gruppo di Ghini, inserire il collegamento di Ghini.

  9. scaricare il file di batch che si utilizzerà per rimanere sempre aggiornati con la linea di produzione che si è scelto di seguire:

    Se siete su una recente installazione di Ghini, ogni volta che si avvia il programma, Ghini controllerà sul sito di sviluppo e avviso di qualsiasi più recenti ghini rilasciare entro la linea di produzione selezionata.

    ogni volta che si desidera aggiornare l’installazione, basta avviare il prompt ed eseguire ‘ ghini-Update. bat ‘

Se si desidera generare e stampare report in formato PDF utilizzando il generatore di report predefinito di Ghini, quindi sarà necessario scaricare e installare ‘ Apache FOP <http: xmlgraphics.apache.org/fop/=”“>’ _. Dopo l’estrazione dell’archivio FOP è necessario includere la directory estratti nel tuo percorso.</http:>

Prossimo...

Connettersi ad una base dati.

Troubleshooting

  1. qualsiasi errore relazionati a lxml.

    Per essere in grado di compilare lxml, è necessario installare un compilatore C (su GNU/Linux questo sarebbe il pacchetto ‘ gcc ‘) e Cython (una specializzazione di Python, che viene compilata in codice C. Nota: Cython non è CPython).

    Tuttavia, non dovrebbe essere necessario compilare nulla, e ‘ pip ‘ dovrebbe essere in grado di individuare i moduli binari nelle librerie online.

    Per qualche ragione, questo non è il caso su Windows 8.1.

    https://pypi.python.org/pypi/lxml/3.4.4

    Si prega di segnalare eventuali altri problemi relazionati all’installazione di lxml.

  2. Non poteva installare gdata.

    Per qualche ragione gdata pacchetto di Google stesso sono elencati nell’indice pacchetto Python ma non funziona correttamente con il comando easy_install. È possibile scaricare l’ultimo pacchetto di gdata da:

    http://code.google.com/p/gdata-python-client/downloads/list

    Decomprimerlo ed eseguire ‘ python setup.py installw ‘ nella cartella per decomprimere.

Prossimo...

Connettersi ad una base dati.

Uso di Ghini

Configurazione iniziale

Dopo una corretta installazione, organizzazioni più complesse vorranno configurare il loro database e configurare Ghini secondo la loro configurazione del database. Questa pagina si concentra su questo compito. Se non hai idea di cosa si tratti, meglio continuare la lettura con la parte relativa a SQLite.

E se fosse SQLite?

Questa è la prima volta che si utilizza Ghini, sono stai andando a lavorare in un ambiente autonomo, avete non la più pallida idea come gestire un sistema di gestione di database? Se avete risposto sì a uno qualsiasi dei precedenti, è probabilmente meglio restare con SQLite, il database facile, veloce, senza doveri di amministrazione, tutto basato su file, il database più diffuso al mondo.

Con SQLite non c’è bisogno di preparare altro e si può proseguire con connecting.

D’altra parte, se si desidera collegare più di una workstation ghini allo stesso database o se si desidera rendere disponibili i dati per altri client, come potrebbe essere un server web in una configurazione LAMP, è consigliabile mantenere il database in un database management system come PostgreSQL o MySQL/MariaDB, entrambi supportati da Ghini.

Quando ci si connette a un server di database come uno di cui sopra, è necessario creare manualmente: almeno un utente Ghini, il database che Ghini dovrà usare, e concedere ad almeno un utente bauble tutti i permessi sul database. Fatto ciò, Ghini sarà in grado di procedere, creare tabelle e importare il set di dati predefinito. Il processo in dettaglio dipende fortemente dal database e cade ben oltre la portata di questo manuale.

Se già vi tremano le ginocchia, non c’è bisogno di preoccuparsi, basta restare con SQLite, senza perdere in funzionalità né prestazioni.

Connettersi ad una base dati

All’avviare Ghini, la prima cosa che appare è la finestra per la scelta della connessione.

Abbastanza naturalmente, la prima volta che si avvia Ghini non ci saranno connessioni a disposizione. Ghini mostra una finestra di avviso.

_images/first-time-activation.png

Questo avviso vi mostrerà alla prima attivazione e anche in futuro se il tuo elenco di connessioni diventa vuota. Come l’avviso stesso dice: fare clic su aggiungere per creare la prima connessione.

_images/enter-a-connection-name.png

Semplicemente: inserire un nome per la connessione, una cose semplice e significativa che si associ naturalmente alla collezione che si vuol inserire (che so, “alberi monumentali”), e scegliere OK. Ghini torna allo schermo precedente, ma il nome della connessione sarà selezionato e la sezione Dettagli della Connessione sarà visibile.

_images/my-first-botanical-garden.png

specificare i dettagli della connessione

Se non si conosce cosa fare qui, Ghini vi aiuterà a stare al sicuro. Attivare il utilizzare la casella di controllo posizioni di predefinito e creare il tuo primo collegamento facendo clic su Connect.

Si può tranquillamente ignorare il resto di questa sezione per il momento e continua a leggere la sezione seguente.

mettere a punto i dettagli di connessione

Per impostazione predefinita Ghini utilizza SQLite database basato su file. Durante il processo di installazione si aveva la scelta (e avete ancora dopo l’installazione), per aggiungere connettori di database diverso da quello predefinito SQLite.

In questo esempio, Ghini può connettersi a SQLite, PostgreSQL e MySQL, ma nessun connettore è disponibile per MS SQL Server o Oracle.

_images/connection-drop-down.png

Se si utilizza SQLite, è davvero necessario specificare solo il nome di connessione. Se permetti che Ghini utilizzi il nome file predefinito, Ghini crea un file di database con lo stesso nome come la connessione ed estensione .db e una cartella di immagini ancora con lo stesso nome ma senza estensione, entrambe in ~/.bauble su Linux/MacOSX o in AppData\Roaming\Bauble su Windows.

Ancora con SQLite, si potrebbe avere ricevuto o scaricato un database bauble, e si desidera connettersi ad esso. In questo caso non lasciate Ghini utilizzare il nome file predefinito, ma navighi nel vostro computer nel percorso dove è stato salvato il Ghini SQLite database file.

Se si utilizza un connettore diverso database, finestra di dialogo avrà un aspetto diverso e vi offrirà l’opzione di mettere a punto tutti i parametri necessari per connettersi al database di vostra scelta.

Se ci si connette a un database esistente è possibile continuare a Inserire e modificare dati e successivamente Ricerca in Ghini, altrimenti leggete la sezione seguente sull’inizializzazione di un database per Ghini.

Se si prevede di associare immagini alle piante, specificare anche il * cartella radice * immagini. Il significato di questo è spiegato in dettaglio a: ref: ‘pianta-immagini’ in: ref: ‘editing-e-inserimento-dati’.

Inizializzare la base dati

La prima volta che si apre una connessione ad una base dati che Ghini non ha mai utilizzato prima, Ghini mostrerà l’avviso:

_images/empty-database.png

seguito a ruota da una domanda:

_images/bauble-create-new.png

Fare attenzione quando si specificano manualmente i parametri di connessione: i valori immessi possono riferirsi a un database esistente, non destinato all’uso con Ghini. Permettendo a Ghini di inizializzare il database, questo sarà svuotato e tutto il suo contenuto verrà perso.

Se sei sicuro di voler creare un database con questi parametri seleziona “Sì”. Ghini inizierà quindi col creare le tabelle del database e procederà con l’importazione di dati predefiniti. Questo può richiedere un minuto o due: prego pazientare mentre tutti i dati predefiniti vengono importati.

Una volta creata, configurata, inizializzata la base dati, siamo pronti per iniziare a editing-and-inserting-data`ed in seguito :ref:`searching-in-bauble.

Ricerca in Ghini

Ricerca permette di visualizzare, esplorare e creare rapporti dai dati. È possibile eseguire ricerche inserendo le query nella voce di ricerca principale o utilizzando il generatore di Query per creare le query per voi. I risultati delle ricerche di Ghini sono elencati nella finestra principale.

Strategie di ricerca

Ghini offre quattro strategie di ricerca distinte:

  • per valore — in tutti i domini;

  • per espressione — in alcuni campi impliciti in un dominio esplicito;

  • per query — in un dominio;

  • di nome binomiale — cerca solo nel dominio di Species.

Tutte le strategie di ricerca —ad eccezione di ‘ricerca nome binomiale’— non fanno distinzione tra maiuscole e minuscole.

Ricerca per valore

Ricerca per valore è il modo più semplice per la ricerca. Immettere una o più stringhe e vedere che cosa corrisponde. Il risultato include oggetti di qualsiasi tipo (dominio), dove uno o più dei relativi campi contengono uno o più delle stringhe di ricerca.

Non si specifica il dominio di ricerca, tutti sono inclusi, né è necessario indicare quali campi si desidera far corrispondere, questo è implicito nel dominio di ricerca.

Nella tabella seguente consente di comprendere i risultati e vi guida nel formulare le ricerche.

Panoramica sui domini di ricerca

nome ed abbreviazioni

campo

tipo di risultato

family, fam epithet (family) Family
genus, gen epithet (genus) Genus
species, sp epithet (sp) × Species
vernacular, common, vern name Species
geography, geo name Geography
accession, acc code Accession
planting, plant code × Plant
location, loc code, name Location
contact, person, org, source name Contact
collection, col, coll locale Collection
tag, tags name Tag

Esempi di ricerca per valore sarebbe: Maxillaria, Acanth, 2008.1234, 2003.2.1, indica.

A meno di non includere fra virgolette, gli spazi separano le stringhe di ricerca. Per esempio se si cerca Block 10, Ghini cerca le due stringhe blocco e 10 e restituisce tutti i risultati che corrispondono a una di queste due voci. Se si desidera cercare Block 10 come una stringa intera basterà usare le virgolette, così: "Block 10".

× Chiavi primarie composte

Un epiteto di specie significa poco senza il genere corrispondente, allo stesso modo un codice di planting è univoco solo nell’ambito dell’accessione a cui appartiene. Nella terminologia della teoria dei database, epiteto e codice non sono sufficienti per formare un chiave primaria per rispettivamente specie e le planting. Questi domini necessitano di una chiave primaria composta.

Ricerca per valore consente di cercare planting dal loro codice planting completo, che include il codice di accessione. Presi insieme, il codice di accessione e la piantatura del codice forniscono uns chiave primaria composito per gli planting. Per specie, abbiamo introdotto la ricerca binomiale, descritta di seguito.

Ricerca per espressione

Ricerca per espressione vi dà un po’ più controllo su ciò che stai cercando. Permette di restringere la ricerca ad un dominio specifico, il software definisce i campi per la ricerca all’interno del dominio indicato.

Un’espressione è costruita come <domain> <operator> <value>. Ad esempio la ricerca: gen = Maxillaria restituisce tutti i generi che corrispondono al nome Maxillaria. In questo caso il dominio è gen, l’operatore è = e il valore è Maxillaria.

La tabella Panoramica sui domini di ricerca poco sopra ti indica i nomi dei domini di ricerca, e, per ogni dominio di ricerca, quali campi vengono inclusi implicitamente nelle ricerche.

La stringa di ricerca loc like blocco% restituisce tutti le Location per cui nome o codice inizia con “blocco”. In questo caso il dominio è loc (un’abbreviazione per location), l’operatore è like (questo viene dall’SQL ed aggiunge un fattore di approssimazione nella ricerca), il valore è blocco%, i campi di ricerca sono implicitamente nome e codice. Il segno di percentuale viene utilizzato come una wild card, pertanto se si cerca ‘blocco % ‘ quindi ricercherà tutti i valori che iniziano con max. Se si cerca %10 ricerca per tutti i valori che terminano in 10. La stringa %ck%10 indica la ricerca di tutto ciò che contenga ck e termini in 10.

Quando una query richiede molto tempo per completare

Si dà una query, ci vuole davvero tempo per calcolare il risultato e questo contiene una quantità irragionevolmente di voci. Questo accade quando si intende utilizzare una strategia, ma le stringhe inserite non formano un’espressione valida. In questo caso Ghini ricorre al caso ricerca per valore. Ad esempio, la stringa di ricerca gen lik maxillaria cercherà le stringhe gen, lik e maxillaria, restituendo tutto ciò che soddisfi almeno uno dei tre criteri.

Ricerca per Query

Le query consentono il massimo controllo su ricerca. Con le query è possibile cercare attraverso relazioni, colonne specifiche, combinare i criteri di ricerca utilizzando gli operatori booleani come and, or, not (e loro rispettiva abbreviazioni &&, ||, !).

Se volete maggiori informazioni, o volontariare per documentare questo più a fondo, si prega di contattare gli autori. Nel frattempo si può iniziare a familiarizzare con la struttura di base del database di Ghini.

_images/ghini-10.svg

struttura di database di Ghini

Alcuni esempi:

  • piante della famiglia delle Fabaceae in posizione Blocco 10:

    plant WHERE accession.species.genus.family.epithet=Fabaceae AND location.description="Block 10"
    
  • posizioni che non contengono piante:

    location WHERE plants = Empty
    
  • accessioni associate ad una specie dal nome binomiale noto (es.: Mangifera indica):

    accession WHERE species.genus.epithet=Mangifera AND species.epithet=indica
    
  • accessioni propagate nell’anno 2016:

    accession WHERE plants.propagations._created BETWEEN |datetime|2016,1,1| AND |datetime|2017,1,1|
    
  • accessioni modificate negli ultimi tre giorni:

    accession WHERE _last_updated>|datetime|-3|
    

Ricerca per query richiede qualche conoscenza della sintassi ed un’idea della estesa struttura del database Ghini. Entrambe si acquisiscono con la pratica e magari con l’aiuto del Generatore di Query.

Generatore di Query

Ghini offre un generatore di Query, una interfaccia grafica che aiuta a costruire query di ricerca anche complesse. Per aprire il Generatore di Query fare clic sull’icona querybuilder a sinistra della voce di ricerca o selezionare Strumenti‣Query Builder dal menu.

Una finestra apparirà, che vi guiderà attraverso tutti i passaggi necessari per creare una query corretta che sarà compresa dalla strategia di Ricerca per Query di Ghini.

_images/qb-choose_domain.png
_images/qb-choose_property.png

Prima di tutto si indica il dominio di ricerca, questo vi permetterà il generatore di Query completa la sua interfaccia grafica, quindi si aggiunge il numero di clausole logico necessario, collegandoli con operatore binario and o or.

Ogni clausola è formata da tre parti: una proprietà che può essere raggiunto dal dominio di ricerca iniziale, un operatore di confronto che si seleziona dall’elenco a discesa, un valore che è possibile digitare o selezionare dall’elenco di valori validi per il campo.

Aggiungere altrettante proprietà di ricerca quante necessarie, facendo clic sul segno più. Selezionare and / or al lato dal nome della proprietà, per scegliere come combinare le clausole nella query.

Quando si è finito di costruire la query fare clic su OK per eseguire la ricerca.

A questo punto il generatore di Query scrive la query nella voce Cerca e lo esegue. Adesso si può editare la stringa come fosse stata inserita manualmente. Si noti come i valori alla sinistra vengono interpretati dal generatore di query e racchiusi tra virgolette singole se riconosciuto come stringhe, o lasciati senza virgolette se sono numeri o i due riservati parole None e Empty. Si può modificare la query e inserire virgolette se necessario, ad esempio se avete bisogno di cercare letteralmente la stringa Empty.

None è il valore di un campo vuoto. Non è la stessa che la stringa di lunghezza zero '' né il numero 0 né il booleano False né l’insieme Empty: None indica che al campo non è associato alcun valore.

Empty is the empty set. Being it a set, it can be matched against sets (eg: plants of an accession, or accessions of a species), not against elements (eg: quantity of a plant or description of a location). However, the Query Builder does not let you choose a left hand side value stopping at a set, it expects you to select a field. Choose just any field: at the moment of producing the query, when the Query Builder meets a clause with right hand side value the literal string Empty, it will drop the field name and let you compare the set on the left with Empty on the right.

We have no literals False and True. These are typed values, and the Query Builder does not know how to produce them. Instead of False type 0, and instead of True type 1.

Grammatica delle Query

Per coloro che non temono un po’ di precisione formale, il codice BNF seguente vi dà un’idea piuttosto precisa della grammatica implementata dalla strategia di Ricerca per Query. Alcune categorie grammaticali sono informalmente definite; alcune mancano e sono lasciate alla vostra fertile immaginazione; i valori letterali sono inclusi tra virgolette singole; la grammatica non fa differenza tra maiuscole e minuscole, se non diversamente indicato:

query ::= domain 'WHERE' expression

domain ::= #( one of our search domains )
expression ::= signed_clause
             | signed_clause 'AND' expression
             | signed_clause 'OR' expression
             ;
signed_clause ::= clause
                | 'NOT' clause  #( not available in Query Builder)
                ;
clause ::= field_name binop value  #( available in Query Builder)
         | field_name set_binop value_list
         | aggregated binop value
         | field_name 'BETWEEN' value 'AND' value
         | '(' expression ')'
         ;
field_name ::= #( path to reach a database field or connected table )
aggregated ::= aggregating_func '(' field_name ')'
aggregating_func ::= 'SUM'
                   | 'MIN'
                   | 'MAX'
                   | 'COUNT'
                   ;
value ::= typed_value
        | numeric_value
        | none_token
        | empty_token
        | string_value
        ;
typed_value ::= '|' type_name '|' value_list '|'
numeric_value ::== #( just a number )
none_token ::= 'None'    #( case sensitive )
empty_token ::= 'Empty'  #( case sensitive )
string_value = quoted_string | unquoted_string

type_name ::= 'datetime' | 'bool' ;  #( only ones for the time being )
quoted_string ::= '"' unquoted_string '"'
unquoted_string ::=  #( alphanumeric and more )

value_list ::= value ',' value_list
             | value
             ;
binop ::= '='
        | '=='
        | '!='
        | '<>'
        | '<'
        | '<='
        | '>'
        | '>='
        | 'LIKE'
        | 'CONTAINS'
        ;
set_binop ::= 'IN'

Si prega di essere consapevoli del fatto che il linguaggio di Query di Ghini è più complesso di quello descritto dal Generatore di Query: le query costruibili con il Generatore di Query costituiscono un sottoinsieme proprio delle query riconosciute dal software:

query ::= domain 'WHERE' expression

domain ::= #( one of our search domains )
expression ::= clause
             | clause 'AND' expression
             | clause 'OR' expression
             ;
clause ::= field_name binop value
         ;
field_name ::= #( path to reach a database field or connected table )
value ::= numeric_value
        | string_value
        ;
numeric_value ::== #( just a number )
string_value = quoted_string | unquoted_string ;

quoted_string ::= '"' unquoted_string '"'
unquoted_string ::=  #( alphanumeric and more )

binop ::= '='
        | '=='
        | '!='
        | '<>'
        | '<'
        | '<='
        | '>'
        | '>='
        | 'LIKE'
        | 'CONTAINS'
        ;

Inserire e modificare dati

Fondamentalmente, la maniera per aggiungere o modificare informazione con Ghini, è utilizzando gli editori. Per ciascun tipo di informazione, Ghini ha un editore, così per esempio c’è un editore per le famiglie, per i generi, per le accessioni, eccetera.

Per creare un nuovo elemento nella base dati, attivare il menu Insert, e scegliere il tipo di oggetto da inserire. Questo apre un nuovo editore, vuoto, per il tipo scelto.

Per modificare un registro già presente nella base dati e visualizzato nella finestra principale di Ghini, fare click destro sulla sua riga e scegliere Edit dal menu che emerge. Questo apre un editore relativo al registro selezionato, modificando i dati nell’editore è possibile aggiornare la base dati.

La maggior parte dei tipi di dati hanno registri che ne dipendono.

Note

Quasi tutti gli editori in Ghini hanno una vista Note, che dovrebbe funzionare ugualmente per qualsivoglia editore attivato.

Un indirizzo web inserito a sé stante in una nota, viene trattato in modo speciale da Ghini: quando l’oggetto è selezionato nel pannello risultati, l’indirizzo web verrà mostrato nel contenitore *Links”.

È possibile sfogliare le note per un elemento nel database utilizzando la casella note nella parte inferiore dello schermo. La casella note è desensibilizzata se l’elemento selezionato non dispone di eventuali note.

Famiglia

L’editore per le famiglie permette aggiungere o cambiare una famiglia botanica.

Il campo famiglia consente di modificare l’epiteto della famiglia. Il campo famiglia è obbligatorio.

Il * campo di qualificatore consente di modificare il qualificatore di famiglia. Il valore può essere * sensu lato *, * sensu stricto *, o niente.

Sinonimi consente di aggiungere altre famiglie che sono sinonimi con la famiglia che si sta modificando. Per aggiungere un nuovo sinonimo iniziare a scriverne il nome nella voce sinonimi. È necessario selezionare un nome di famiglia dalla lista dei completamenti. Una volta che hai selezionato un nome di famiglia che si desidera aggiungere come sinonimo, fare clic sul pulsante Aggiungi accanto all’elenco sinonimi e il software aggiunge il sinonimo selezionato all’elenco. Per rimuovere un sinonimo, selezionarlo nell’elenco e fare clic sul pulsante Rimuovi.

Per annullare le modifiche, fare click sul pulsante Cancel/Annulla.

Per memorizzare le modifiche effettuate, fare click su OK.

Per memorizzare le modifiche e per aggiungere un genere alla famiglia aggiunta o modificata, fare click su Add Genera.

Per aggiungere un’altra famiglia dopo aver memorizzato le modifiche, fare click su Next. Questo salva la famiglia correntemente aperta ed inizia la modifica della prossima.

Genere

Il genere editor consente di aggiungere o modificare un genere botanico.

Il campo Famiglia nell’editore di generi permette di selezionare la famiglia a cui appartiene il genere. La famiglia dev’essere già presente nella base dati per poter essere selezionata. Iniziare a scrivere il nome, Ghini mostrerà quelli che coincidono.

Il campo Epiteto permette di specificare l’epiteto di questo genere.

Il campo Autore permette di specificare il nome o l’abbreviazione dell’autore o gli autori della pubblicazione del genere.

Synonyms allow you to add other genera that are synonyms with the genus you are currently editing. To add a new synonyms type in a genus name in the entry. You must select a genus name from the list of completions. Once you have selcted a genus name that you want to add as a synonym click on the Add button next to the synonym list and it will add the selected synonym to the list. To remove a synonym select the synonym from the list and click on the Remove button.

Per annullare le modifiche, fare click sul pulsante Cancel/Annulla.

Per salvare il genere sta lavorando, quindi fare clic su * OK *.

Per salvare il genere sta lavorando e aggiungere una specie ad esso, quindi fare clic sul * specie * Aggiungi pulsante.

Per aggiungere un altro genere, quando si è finito di modificare la corrente di uno scatto sulla * avanti * pulsante sul fondo. Questo salverà il genere corrente e aprire un nuovo editor di genere vuoto.

Specie / Tassone

Per ragioni storiche, chiamati una species, ma da questo si intende un taxon di rango specie o inferiore. Esso rappresenta un nome univoco nel database. L’editor di specie consente di costruire il nome così come associare metadati con il taxon come la sua distribuzione, sinonimi e altre informazioni.

La sezione informazione infraspecifica nell’editor di specie consente di specificare il taxon oltre al rango di specie.

Per annullare le modifiche, fare click sul pulsante Cancel/Annulla.

Per salvare la specie stanno lavorando, quindi fare clic su * OK *.

Per salvare la specie stanno lavorando e aggiunta un’accessione ad esso, quindi fare clic sul * accessione * Aggiungi pulsante.

Per aggiungere un’altra specie quando si è finito di modificare la corrente di uno scatto sulla * avanti * pulsante sul fondo. Questo salverà la specie attuale e aprire un nuovo editor di specie in bianco.

Accessioni

L’editore di accessioni ci permette di aggiungere accessioni relative ad una specie. In Ghini una accessione rappresenta una pianta, un gruppo di piante, tutte della stessa specie, tutte propagate allo stesso modo e con lo stesso trattamento, tutte ricevute allo stesso momento dalla stessa fonte.

Scegli il nome della specie, o aggiungine una se manca quella che serve.

You may note uncertainty in identification by adding an identification qualifier, at the proper rank, so you can for example have a plant initially identified as Iris cf. florentina by choosing Iris florentina in the taxon name, identification qualifier ‘cf.’, qualified rank ‘species’.

Scrivi l’identificativo dell’accessione, e preferibilmente anche la quantità ricevuta.

Fonte dell’Accessione

The source of the accessions lets you add more information about where this accession came from. Select a Contact from the drop-down list, or choose “Garden Propagation”, which is placed as a default first item in the list of contacts.

A Garden Propagation is the result of successful Propagation.

When accessing material from a Garden Propagation, you would initially leave the first tab alone (General) and start from the second tab (Source). Select as Contact “Garden Propagation”, indicate which plant is the parent plant and choose among the still not completely accessed propagations the one you intend to add as an accession in your database.

Once you select a propagation, the software will set several fields in the General tab, which you can now review. The Taxon (maybe you managed to obtain something slightly different than the parent plant). The Initial quantity (in case not all plants go in the same accession). The Type of Material, inferred from the propagation type.

Pianta

Una Plant nella base dati Ghini rappresenta un individuo nella collezione fisica. Una pianta appartiene ad un’accessione, ed ha una sua collocazione.

Creare più piante allo stesso tempo

È possibile creare più di una pianta in una sola volta, specificando un intervallo come codice di pianta. Questa opzione è disponibile solo al momento di inserire una nuova pianta, non quando se ne sta modificando una già presente nella base dati.

Per esempio, l’intervallo 3-5 creerà tre piante, con codici rispettivamente 3, 4 e 5. L’intervallo 1,4-7,25 crea sei piante con codici rispettivamente 1, 4, 5, 6, 7 e 25.

Quando si immette l’intervallo nella voce del codice planting la voce diventa blu per indicare che si stanno ora creando planting multipli. Tutti i campi che sono impostati in questa modalità verranno copiati tutte le piante che vengono create.

Fotografie

Come quasi tutti gli oggetti nel Ghini database può avere * note * associata a loro, possono avere piante * immagini *: accanto alla scheda per le note, l’editor di piante contiene una scheda aggiuntiva chiamata “Pictures”. È possibile associare molte immagini come potrebbe essere necessario un planting.

Quando si associa un’immagine di una pianta, il file viene copiato nella * cartella di immagini e una miniatura (500 x 500) è generato e copiato nella cartella thumbnails all’interno della cartella immagini.

Con Ghini-1.0.62, le immagini non restano nel database. Per garantire che le immagini siano disponibili su tutti i terminali dove s’è installato e configurato Ghini, è possibile utilizzare una cartella di rete, o un servizio di condivisione di file, come Tresorit o Dropbox.

Ricordo di aver configurato la cartella radice di immagini quando specificato i dettagli della connessione di database. Ancora una volta, è necessario assicurarsi che la cartella principale di immagini è condivisa con il vostro servizio di scelta di condivisione di file.

Quando una pianta nella selezione corrente viene evidenziata, le relative immagini vengono visualizzate nel riquadro Immagini, nel riquadro a sinistra del riquadro informazioni. Quando viene evidenziato un’accessione nella selezione, qualsiasi immagine associata alle piante nell’accessione evidenziato sono visualizzati nel riquadro immagini.

Ubicazioni

Editor posizioni :

danger zone

L’editor di percorso contiene una sezione inizialmente nascosta denominata * pericolo zona *. I widget contenuti in questa sezione consentono di unire la posizione corrente in un’altra posizione, consentendo all’utente di correggere errori di ortografia o implementare le modifiche dei criteri.

Si occupano di propagazioni

Ghini offre la possibilità di associare prove di propagazioni di piante e di documentare i loro trattamenti e risultati. Trattamenti sono parte integrante della descrizione di una prova di propagazione. Se una prova di propagazione è successo, Ghini consente di associarla a una nuova accessione. È possibile associare solo una accessione ad una prova di propagazione.

Qui descriviamo come si utilizza questa parte dell’interfaccia.

Creazione di una propagazione

Una propagazione (trial) è ottenuta da una pianta. Ghini si riflette nella sua interfaccia: selezionare una pianta, aprire l’Editor di pianta su di esso, attivare la scheda di propagazione, fare clic su Aggiungi.

Quando si fare quanto sopra, si ottiene una finestra di Editor di propagazione. Ghini non considera prove di propagazione come entità indipendenti. Di conseguenza, Ghini considera l’Editor di propagazione come una finestra di editor speciale, che si può raggiungere solo dall’Editor di pianta.

Per una propagazione di nuova, si seleziona il tipo di propagazione (che diventa una proprietà immutabile della propagazione) quindi inseriscono i dati che lo descrive.

Sarete in grado di modificare i dati di propagazione tramite lo stesso percorso: selezionare una pianta, aprire l’Editor di pianta, identificare la propagazione si desidera modificare, fare clic sul pulsante modifica corrispondente. Sarete in grado di modificare tutte le proprietà di una prova, tranne il tipo di propagazione esistente.

Nel caso di una prova di propagazione del seme, si dispone di un genitore di polline e un genitore del seme. È sempre necessario associare il processo di propagazione al padre di seme.

Nota

In Ghini-1.0 è possibile specificare la pianta del genitore di polline nella “Notes” di campo, mentre Ghini-1.1 ha un campo (relazione) per esso. Secondo ITF2, potrebbero esserci casi nelle prove di propagazione di seme dove non è conosciuto che pianta svolge quale ruolo. Ancora una volta, in Ghini-1.0 è necessario utilizzare una nota per indicare che se questo è il caso, Ghini-1.1 presenta un campo (boolean) che indica se questo è il caso.

Utilizzando una propagazione

Una prova di propagazione può essere successo e provocare una nuova accessione.

Ghini ti aiuta a riflettere questo nel database: creare una nuova accessione, immediatamente passare alla scheda origine e selezionare “Garden Propagation” nel campo contatto (devo ammettere che un po ‘ fuorviante).

Iniziare a digitare il numero di piante e verrà visualizzato un elenco di piante corrispondenti con prove di propagazione per selezionare da.

Selezionare l’planting e l’elenco delle prove di propagazione raggiunto e inutilizzato apparirà nella parte inferiore della finestra.

Selezionare una versione di prova di propagazione ancora inutilizzato dall’elenco e fare clic su Ok per completare l’operazione.

Utilizzando i dati dalla prova di propagazione, Ghini completa alcuni campi nella scheda Generale: nome del Taxon, tipo di materiale e possibilmente di provenienza. Sarete in grado di modificare questi campi, ma siete pregati di notare che il software non impedirà l’introduzione concettuale incoerenze nel database.

È possibile associare una prova di propagazione sola accessione.

Etichette

Etichettare è un modo semplice per fornire un contesto per un oggetto o creare un insieme di oggetti che si desidera richiamare più tardi. Per esempio se si desidera raccogliere una serie di piante per cui più tardi si vuol creare un report, puoi etichettare (tag) le piante in questione con la stringa ‘per quel rapporto a cui stavo pensando’. È possibile quindi selezionare l’etichetta ‘per quel rapport a cui stavo pensando’ dal menu dei tag per mostrare tutti gli oggetti che hai etichettato.

Tagging può essere fatto in due modi. Selezionando uno o più elementi nei risultati della ricerca e premendo Ctrl-T, o selezionando Tag‣ Tag selezione dal menu. Se avete selezionato più elementi, solo quel tag che sono comuni a tutti gli elementi selezionati avranno una spunta accanto ad esso.

Generare relazioni

Un database senza esportare strutture è di scarsa utilità. Ghini consente di esportare i dati in formato tabella (aprirli nel vostro editor di fogli di calcolo di scelta), come le etichette (per essere stampata o incisa), come pagine html o documenti pdf o postscript.

Questa pagina descrive i due strumenti che Ghini offre per queste attività.

Utilizzando il formattatore di Report di Mako

Il formattatore di relazione Mako utilizza il linguaggio del modello di Mako per la generazione di report. Ulteriori informazioni su Mako e il suo linguaggio possono essere trovati alla ‘ makotemplates.org <http: www.makotemplates.org=”“>’ _.</http:>

Il sistema di template Mako dovrebbe già essere installato sul tuo computer se è installato Ghini.

Creazione di report con Mako è simile nel modo in cui si creerà una pagina web da un modello. È molto più semplice di Formatter(see below) il XSL e dovrebbe essere relativamente facile creare un modello per chiunque con un po ‘ ma di esperienza di programmazione.

The template generator will use the same file extension as the template which should indicate the type of output the template with create. For example, to generate an HTML page from your template you should name the template something like report.html. If the template will generate a comma separated value file you should name the template report.csv.

Il modello riceverà una variabile denominata ‘valori’ che conterranno l’elenco di valori nella ricerca attuale.

Il tipo di ogni valore in ‘valori’ sarà lo stesso come il dominio di ricerca utilizzato nella query di ricerca. Per ulteriori informazioni su domini di ricerca vedere: ref: domini di ricerca.

Se la query non dispone di un dominio di ricerca quindi tutti i valori possono essere di diverso tipo e il modello di Mako dovrebbe preparare per gestire loro.

Utilizzando il formattatore di Report XSL

Il formattatore di relazione XSL richiede un XSL per renderer PDF per convertire i dati in un file PDF. Apache FOP è è un libero e open-source XSL-> renderer PDF ed è consigliato.

Se si utilizza Linux, Apache FOP dovrebbe essere installabile utilizzando il vostro gestore di pacchetti. Su Debian/Ubuntu è installabile come ‘fop ‘ in Synaptic o utilizzando il comando seguente:

apt-get install fop
L’installazione di Apache FOP su Windows

NO QUERY SPECIFIED. EXAMPLE REQUEST: GET?Q=HELLO&LANGPAIR=EN|IT

In alternativa è possibile scaricare il ‘ archivio <http: www.apache.org/dist/xmlgraphics/fop/binaries/=”“>’ _. Dopo l’estrazione dell’archivio è necessario aggiungere la directory è stato estratto l’archivio alla variabile di ambiente PATH.</http:>

Importare ed esportare dati

Anche se Ghini può essere ampliato tramite plugin, così da poter supportare formati alternativi per importare ed esportare dati, per impostazione predefinita può solo importare ed esportare file di valori separati da virgola o CSV.

C’è qualche supporto per l’esportazione dell’accesso per dati biologici collezioni è limitato.

C’è anche un supporto limitato per l’esportazione in formato XML che più o meno riflette esattamente le tabelle e la riga del database.

Esportazione di ABCD e XML non sono coperti qui.

Avvertimento

Importazione di file molto probabilmente distruggerà tutti i dati che avete nel database in modo assicurarsi che avete eseguito il backup dei dati.

Importazione da

In generale è meglio solo importare i file CSV in Ghini che sono stati precedentemente esportati da Ghini. È possibile importare qualsiasi file CSV ma che è più avanzato che coprirà questo doc.

Per importare file CSV in Ghini selezionare Strumenti‣ esportazione‣ valori separati da virgola dal menu.

Dopo facendo clic su OK nella finestra di dialogo che chiede se sei sicuro di che sapere quello che stai facendo si aprirà una finestra di selezione file. Nella finestra selezione file selezionare i file che si desidera importare.

Esportazione in CSV

Per esportare i dati di Ghini in formato CSV selezionare Strumenti‣ esportazione‣ valori separati da virgola dal menu.

Questo strumento vi chiederà di selezionare una directory per esportare i dati in CSV. Tutte le tabelle in Ghini verranno esportate ai file in tablename.txt il formato dove tablename è il nome della tabella dove è stati esportati i dati da.

Importare da JSON

Questo è * il * modo per importare dati in un database esistente, senza distruggere il contenuto precedente. Un tipico esempio di questa funzionalità potrebbe essere importazione tua collezione digitale in un database di Ghini fresco, appena inizializzato. Conversione di un database in formato di interscambio di json Bauble esula dall’ambito del presente manuale, si prega contattare uno degli autori se avete bisogno di ulteriore aiuto.

Utilizzando il formato di scambio JSON, è possibile esportare dati da una versione di Ghini ed importarli in una versione differente.

Esportare verso JSON

Questo è ancora “lavori in corso”.

_images/export-to-json.png

Quando si attiva questo strumento di esportazione, si è data la scelta di specificare cosa esportare. È possibile utilizzare la selezione corrente per limitare l’intervallo di esportazione, oppure è possibile avviare il contenuto completo di un dominio, a scelta tra specie, accessione, pianta.

Esportazione di * specie * solo esporterà le informazioni tassonomiche complete nel database. * Accessione * esporterà tutte le vostra accessioni oltre a tutte le informazioni tassonomiche si riferisce a: unreferred a taxa non verrà esportati. * Planting * esporterà tutti i viventi, piante (alcuni accessione non può essere incluso), tutti si riferiscono a posizioni e taxa.

Gestione Utenti

Nota

Il plugin di utenti Ghini disponibile solo su database PostgreSQL basata.

Plugin dell’utente Ghini vi permetterà di creare e gestire le autorizzazioni degli utenti per il database di Ghini.

Creare Utenti

Crea nuovo utente

Permessi

Ghini consente lettura, scrittura ed esecuzione autorizzazioni.

Amministrazione

Amministrazione di basi di dati

Nel caso si stia utilizzando un vero e proprio DBMS (sistema di gestione di basi di dati) per contenere le collezioni di Ghini, è importante prendere in considerazione l’amministrazione di questo DBMS. Una descrizione del compito di amministrare una base dati è qui assolutamente fuori luogo, ma è importante che l’utente sia consapevole del problema.

SQLite

SQLite offre una soluzione in quanto SQLite non è esattamente quanto si potrebbe definire un DMBS: ogni base dati SQLite è un file, farne copia di emergenza (backup) sarà sufficiente. Se si è creata la connessione alla base dati SQLite accettando i valori per difetto, il file relativo alla connessione si trova nella directory ~/.bauble/ (con Windows bisognerà trovare la AppData).

In Windows è da qualche parte nella directory AppData, molto probabilmente nel AppData\Roaming\Bauble. Tenete a mente che Windows fa del suo meglio per nascondere la struttura di directory AppData agli utenti normali.

Il modo più veloce per aprirlo è con Esplora Risorse: inserisci %APPDATA% e premi INVIO.

MySQL

Prego riferirsi alla documentazione ufficiale.

PostgreSQL

Prego riferirsi alla documentazione ufficiale. Una discussione molto approfondita sulle varie opzioni di backup inizia al chapter_24.

Configurazione di Ghini

Ghini utilizza un file di configurazione per memorizzare i valori tra le chiamate. Questo file è associato all’account dell’utente, così ogni utente avrà il suo file di configurazione.

Per esaminare il contenuto del file di configurazione Ghini, digitare :prefs nell’area di immissione testo dove normalmente tipo le ricerche, quindi premere INVIO.

Normalmente non è necessario modificare il file di configurazione, ma è possibile farlo con un programma di editor di testo normale. File di configurazione di Ghini è il percorso predefinito per i database SQLite.

Prospetto errori

Se notate qualcosa di imprevisto nel comportamento di Ghini, si prega di considerare un problema di deposito sul sito di sviluppo Ghini.

Ghini lo sviluppo del sito sono accessibili tramite il menu di aiuto.

Sviluppo di Ghini

Manuale dello sviluppatore

Sostieni lo sviluppo di Ghini

L’installazione di Ghini sempre include scaricare i sorgenti, collegati al repository su github. Questo è così perché nei nostri occhi, ogni utente è sempre potenzialmente anche uno sviluppatore.

Se volete contribuire a Ghini, può farlo in diversi modi:

  • Utilizzare il software, notare cosa piace di meno e potrebbe essere corretto, ``segnalarlo come problema <http://github.com/ghini/ghini.desktop/issues/new>`_ separatamente. Uno sviluppatore reagirà prima di quanto si possa immaginare.

  • Se avete un’idea di ciò che manca nel software ma non abbastanza e formalizzare in questioni separate, si potrebbe prendere in considerazione l’assunzione di un professionista. Questo è il modo migliore per assicurarsi che qualcosa accade rapidamente su Ghini. Assicurarsi che lo sviluppatore apra problemi su github e vi pubblichi il contributi.

  • Traduci! Qualsiasi aiuto con traduzione sarà gradito, così si prega di tradurre! è possibile farlo senza installare nulla sul tuo computer, usando solo il servizio di traduzione on-line offerti da http://hosted.weblate.org/

  • “Fork the repository”, scegliere un problema, risolverlo, aprire una richiesta “pull request”. Vedere il flusso di lavoro per risolvere bug qui sotto.

Se non hai ancora installato Ghini e desideri dare un’occhiata alla storia del suo codice, è possibile aprire la nostra pagina progetto github e vedere tutto ciò che s’è fatto intorno a Ghini fin dalla sua nascita nel 2004 come Bauble.

Fonte del software, versioni, rami

Se si desidera che una particolare versione di Ghini, abbiamo rilasciare e gestire versioni come rami. Si dovrebbe effettuare il git checkout del ramo corrispondente alla versione di vostra scelta.

linea di produzione

Nomi dei rami per le versioni stabili (produzione) di Ghini sono nella forma ghini-x.y (ad esempio: ghini-1.0); nomi dei rami dove sono pubblicate le versioni di prova di Ghini sono nella forma ghini-x.y-dev (ad esempio: ghini-1.0-dev).

Flusso di sviluppo

Il nostro flusso di lavoro è di impegnarsi continuamente per la branca di test, spesso di spingerli a github, di lasciare travis-ci e coveralls.io di controllare la qualità dei rami test spinti, infine, di volta in volta, per unire il ramo testing la versione corrispondente.

Quando si lavora a problemi più grandi, che sembrano richiedere più di un paio di giorni, io potrei aprire una filiale connessa alla questione. Non lo faccio molto spesso.

problemi più importanti

Quando affronta un problema più grande singolo, creare un tag di ramo all’estremità di una linea di sviluppo principale (ad es.: ghini-1.0-dev) e seguire il flusso di lavoro descritto al

https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

In Breve

git up
git checkout -b issue-xxxx
git push origin issue-xxxx

Lavorare sul nuovo ramo temporaneo. Quando è pronto, andare a github, unire il ramo con la linea di sviluppo principale da cui diramano, risolvere i conflitti, ove necessario, eliminare il ramo temporaneo.

Quando si è pronti per la pubblicazione, è possibile unire la linea di sviluppo nella linea di produzione corrispondente.

Aggiornando l’insieme di stringhe traducibili

Di tanto in tanto, durante il processo di aggiornamento del software, si verrà essere aggiungendo o modificando le stringhe nelle fonti python, nella documentazione, nelle fonti glade. La maggior parte delle nostre corde sono traducibile e sono offerti a weblate per le persone a contribuire, sotto forma di diversi file. po.

Un file po è specifico di una lingua ed è composto da coppie di testi, in lingua originale e la corrispondente traduzione. Quando un traduttore aggiunge una traduzione su weblate, questa raggiunge il nostro repositorio github. Quanto un programmatore aggiunge una stringa nel software, questa raggiunge weblate per venir tradotta.

Weblate ospita il progetto Ghini. Il progetto è suddiviso in componenti, ciascuna corrispondente ad un branch di un nostro repositorio github. Ciascuna componente accetta traduzioni in diverse lingue.

componente

repositorio

branch
Desktop 1.0 ghini.desktop ghini-1.0-dev
Desktop 1.1 ghini.desktop ghini-1.1-dev
Documentation 1.0 ghini.desktop-docs.i18n ghini-1.0-dev
Documentation 1.1 ghini.desktop-docs.i18n ghini-1.1-dev
Web 1.2 ghini.web master

Per aggiornare i file po relativi al software, esegui il seguente script dalla linea di comando, preferibilmente dalla base del checkout di ghini.desktop:

./scripts/i18n.sh

Per aggiornare i file po relativi alla documentazione, esegui il seguente script dalla linea di comando, preferibilmente dalla base del checkout di ghini.desktop-docs.i18n:

./doc/runme.sh

Quando si esegue uno degli script di cui sopra, è probabile che si abbia bisogno di fare il commit di tutti i file po del progetto. Si potrebbero voler esaminare le modifiche prima di inserirle nel respository. Questo è più importante quando si esegue una correzione marginale di una stringa, come la rimozione di un errore di battitura.

La nostra documentazione su readthedocs ha una versione originale in lingua inglese, e diverse traduzioni. Seguiamo semplicemente la descrizione della localizzazione. Qui non c’è nulla che abbiamo inventato noi.

ReadTheDocs controlla l’impostazione “Language” del progetto ed invoca sphinx-intl per produrre la documentazione formattata nella lingua obiettivo. Con la configurazione predefinita — che non abbiamo alterato — sphinx-intl prevede un file po per ogni documento di origine, che abbia lo stesso nome del documento di origine, e che risieda nella directory locale/$(LANG)/LC_MESSAGES/.

D’altra parte, Weblate (e noi stessi) preferiamo un file po per ogni lingua, e tenerli tutti nella stessa cartella /po, come facciamo per il progetto software: /po/$(LANG).po.

Per non ripetere informazione e per lasciare lavorare entrambi i sistemi nel loro modo naturale, abbiamo due insiemi di link simbolici (git li rispetta).

Per riassumere: quando viene aggiornato un file nella documentazione, lo script``runme.sh`` si occupa di:

  1. copiare i file rst dal software alla documentazione;

  2. creare un nuovo file pot per ciascun elemento di documentazione;

  3. unire tutti i file pot in un unico doc.pot;

  4. aggiornare tutti i doc.po (uno per lingua) sulla base del nuovo doc.pot;

  5. creare tutti i collegamenti simbolici:

    1. quelli utilizzati da sphinx-intl in /local/$(LANG)/LC_MESSAGES/

    2. quelli utilizzati da noi e weblate in /po/$(LANG).po

Sicuramente potremmo scrivere tutto ciò in un Makefile, o ancora meglio includerlo nel ‘/ doc/Makefile ‘. Chissà, forse lo faremo, un giorno.

Aggiunta mancante unit test

Se siete interessati a contribuire allo sviluppo di Ghini, un buon modo per farlo sarebbe aiutandoci a trovare e scrittura di unit test mancante.

Una funzione ben testata è uno cui comportamento non è possibile modificare senza rompere almeno un test di unità.

Siamo tutti d’accordo che in teoria teoria e pratica corrispondono perfettamente e che uno prima scrive i test, quindi implementa la funzione. In pratica, tuttavia, pratica non corrisponde a teoria e noi abbiamo scritto test dopo scrivendo e pubblicando anche le funzioni.

In questa sezione viene descritto il processo di aggiunta di unit test per bauble.plugins.plants.family.remove_callback.

Elementi di cui eseguire il test

Prima di tutto, aprire l’indice del rapporto di copertura e scegliere un file con bassa copertura.

In questo esempio, eseguire in ottobre 2015, siamo sbarcati su bauble.plugins.plants.family, al 33%.

https://coveralls.io/builds/3741152/source?filename=bauble%2Fplugins%2Fplants%2Ffamily.py

Le prime due funzioni che hanno bisogno di prove, di edit_callback e add_genera_callback, includono la creazione e l’attivazione di un oggetto basandosi su una finestra di dialogo personalizzata. Ci dovrebbe davvero prima scrivere unit test per tale classe, poi torna qui.

La funzione successiva, remove_callback, attiva anche un paio di finestre di dialogo e il messaggio, ma in forma di richiamo di una funzione che richiede l’input dell’utente tramite caselle di sì-no-ok. Queste funzioni possiamo facilmente sostituire con una funzione beffardo il comportamento.

Come provare

Così, dopo aver deciso cosa descrivere nello unit test, guardiamo il codice e vediamo che ha bisogno di discriminare un paio di casi:

correttezza dei parametri
  • l’elenco delle famiglie non ha elementi.

  • l’elenco delle famiglie ha più di un elemento.

  • l’elenco delle famiglie ha esattamente un elemento.

cascade
  • la famiglia non ha nessun generi

  • la famiglia ha uno o più generi

confirm
  • l’utente conferma eliminazione

  • l’utente non confermare l’eliminazione

deleting
  • tutto va bene quando si elimina la famiglia

  • C’è qualche errore durante l’eliminazione della famiglia

Decido che mi concentrerò solo sugli aspetti cascata e confermare. Due domande binarie: 4 casi.

dove mettere i test

Individuare lo script di test e scegliere la classe dove mettere i test di unità extra.

https://coveralls.io/builds/3741152/source?filename=bauble%2Fplugins%2Fplants%2Ftest.py#L273

che fare con i test disattivati

La classe FamilyTests contiene un test saltato, attuarlo sarà essere un po’ di lavoro perché abbiamo bisogno di riscrivere il FamilyEditorPresenter, separarla dalla FamilyEditorView e riconsiderare ciò che a che fare con la classe FamilyEditor, che credo dovrebbe essere rimosso e sostituito con una singola funzione.

le prove di scrittura

Dopo l’ultimo test nella classe FamilyTests, aggiungere i quattro casi che voglio descrivere, e mi assicuro che falliscono, e dato che io sono pigro, scrivo il codice più compatto so per la generazione di un errore:

def test_remove_callback_no_genera_no_confirm(self):
    1/0

def test_remove_callback_no_genera_confirm(self):
    1/0

def test_remove_callback_with_genera_no_confirm(self):
    1/0

def test_remove_callback_with_genera_confirm(self):
    1/0
Una prova, passo dopo passo

Cominciamo con il primo test case.

Durante la scrittura di test, seguono in genere il modello:

  • T₀ (condizione iniziale),

  • action,
  • T₁ (test il risultato dell’azione data le condizioni iniziali)

la ragione di un nome — test unitari

C’è una ragione perché unit test sono chiamati unit test. Si prega di test mai due azioni in un test.

Quindi cerchiamo di descrivere T₀ per il primo test, un database che tiene una famiglia senza generi:

def test_remove_callback_no_genera_no_confirm(self):
    f5 = Family(family=u'Arecaceae')
    self.session.add(f5)
    self.session.flush()

Non vogliamo che la funzione in fase di test per richiamare la funzione interattiva utils.yes_no_dialog, remove_callback vogliamo di richiamare una funzione di sostituzione non interattiva. Raggiungiamo questo obiettivo semplicemente facendo punto di utils.yes_no_dialog in un’espressione lambda che, come l’originale funzione interattiva, accetta un parametro e restituisce un valore booleano. In questo caso: False:

def test_remove_callback_no_genera_no_confirm(self):
    # T_0
    f5 = Family(family=u'Arecaceae')
    self.session.add(f5)
    self.session.flush()

    # action
    utils.yes_no_dialog = lambda x: False
    from bauble.plugins.plants.family import remove_callback
    remove_callback(f5)

Successivamente abbiamo il risultato del test.

Beh, non vogliamo solo testare o meno l’oggetto è stato eliminato Arecaceae, ci dovremmo prova anche il valore restituito da ‘remove_callback ‘, e se yes_no_dialog e message_details_dialog sono stati richiamati o non.

Un’espressione lambda non è sufficiente per questo. Facciamo qualcosa di apparentemente più complesso, che renderà la vita molto più facile.

Innanzitutto definiamo una funzione piuttosto generica:

def mockfunc(msg=None, name=None, caller=None, result=None):
    caller.invoked.append((name, msg))
    return result

e possiamo importare partial dal modulo standard functools, applicarlo parzialmente alla mockfunc, lasciando solo msg non vincolato, ed applicare ed utilizzare questa applicazione parziale, che è una funzione che accetta un parametro e restituisce un valore, per sostituire le due funzioni in utils. La funzione di test ora assomiglia a questo:

def test_remove_callback_no_genera_no_confirm(self):
    # T_0
    f5 = Family(family=u'Arecaceae')
    self.session.add(f5)
    self.session.flush()
    self.invoked = []

    # action
    utils.yes_no_dialog = partial(
        mockfunc, name='yes_no_dialog', caller=self, result=False)
    utils.message_details_dialog = partial(
        mockfunc, name='message_details_dialog', caller=self)
    from bauble.plugins.plants.family import remove_callback
    result = remove_callback([f5])
    self.session.flush()

La sezione test controlla che message_details_dialog non è stato richiamato, che yes_no_dialog è stato richiamato, con il parametro di messaggio corretto, che Arecaceae è ancora lì:

# effect
self.assertFalse('message_details_dialog' in
                 [f for (f, m) in self.invoked])
self.assertTrue(('yes_no_dialog', u'Are you sure you want to '
                 'remove the family <i>Arecaceae</i>?')
                in self.invoked)
self.assertEquals(result, None)
q = self.session.query(Family).filter_by(family=u"Arecaceae")
matching = q.all()
self.assertEquals(matching, [f5])
E così via.

‘ci sono due tipi di persone, coloro che completano quello che iniziano e così via’

Prossimo test è quasi la stessa, con la differenza che il utils.yes_no_dialog deve restituire True (questo raggiungiamo specificando result=True nell’applicazione parziale della mockfunc generica).

Con questa azione, il valore restituito da remove_callback dovrebbe essere True, e non ci dovrebbe essere nessuna famiglia Arecaceae nel database più:

def test_remove_callback_no_genera_confirm(self):
    # T_0
    f5 = Family(family=u'Arecaceae')
    self.session.add(f5)
    self.session.flush()
    self.invoked = []

    # action
    utils.yes_no_dialog = partial(
        mockfunc, name='yes_no_dialog', caller=self, result=True)
    utils.message_details_dialog = partial(
        mockfunc, name='message_details_dialog', caller=self)
    from bauble.plugins.plants.family import remove_callback
    result = remove_callback([f5])
    self.session.flush()

    # effect
    self.assertFalse('message_details_dialog' in
                     [f for (f, m) in self.invoked])
    self.assertTrue(('yes_no_dialog', u'Are you sure you want to '
                     'remove the family <i>Arecaceae</i>?')
                    in self.invoked)
    self.assertEquals(result, True)
    q = self.session.query(Family).filter_by(family=u"Arecaceae")
    matching = q.all()
    self.assertEquals(matching, [])

Date un’occhiata al commit 734f5bb9feffc2f4bd22578fcee1802c8682ca83 per le altre due funzioni di prova.

Prova registrazione

I nostri oggetti di bauble.test.BaubleTestCase utilizzano handler della classe bauble.test.MockLoggingHandler. Ogni volta che viene avviato un singolo unit test, il metodo setUp creerà un nuovo handler e lo associa al logger radice. Il metodo tearDown si prende cura di rimuoverlo.

È possibile controllare per la presenza di messaggi di registrazione specifici in self.handler.messages. messages è un dizionario, inizialmente vuoto, con due livelli di indicizzazione. Prima il nome del logger che rilascia la registrazione, quindi il nome del livello del record di registrazione. Le chiavi vengono create quando necessario. I valori contengono elenchi di messaggi formattati secondo qualsiasi formattatore si associa al gestore, per difetto logging.Formatter("%(message)s").

È possibile svuotare in modo esplicito i messaggi raccolti richiamando self.handler.clear().

Coordinamento

Di volta in volta si desidera attivare la classe di test che sta lavorando a:

nosetests bauble/plugins/plants/test.py:FamilyTests

E alla fine del processo si desidera aggiornare le statistiche:

./scripts/update-coverage.sh

Struttura dell’interfaccia utente

L’interfaccia utente è costruita secondo la modellovistaPresenter modello architettonico. Per gran parte dell’interfaccia, modello è un oggetto di database di SQLAlchemy, ma ci sono anche gli elementi dell’interfaccia dove non esiste un corrispondente modello di database. In generale:

  • Il vista è descritto come parte di un file glade. Ciò dovrebbe includere il segnale-callback e associazioni ListStore-TreeView. Basta utilizzare la classe base GenericEditorView definito in bauble.editor. Quando si crea l’istanza di questa classe generica, passarlo il glade nome del file e il nome del widget di radice, quindi consegnare questa istanza per il presentatore costruttore.

    Nel file glade, nella sezione action-widget chiusura tua descrizione oggetto GtkDialog, assicurarsi che ogni elemento di action-widget ha un valore valido response. Utilizza valori validi GtkResponseType, ad esempio:

    • GTK_RESPONSE_OK, -5
    • GTK_RESPONSE_CANCEL, -6
    • GTK_RESPONSE_YES, -8
    • GTK_RESPONSE_NO, -9

    Non c’è un modo facile per scrivere prove unitarie per una sottoclasse vista, cui si prega non derivare viste, davvero non ce n’è alcun bisogno.

    Nel file glade, ogni widget input deve definire quale gestore viene attivato il segnale. La classe generica di Presenter offre callback generici che coprono il maggior parte dei casi.

    • GtkEntry (voce di testo a riga singola) gestirà il segnale changed, con on_text_entry_changed o on_unique_text_entry_changed.

    • GtkTextView: associarla a un GtkTextBuffer. Per gestire il segnale changed sulla GtkTextBuffer, dobbiamo definire un gestore che richiama il generico on_textbuffer_changed, l’unico ruolo per questa funzione è quello di passare il nostro gestore generico il nome dell’attributo modello che riceve il cambiamento. Si tratta di un workaroud per un bug irrisolto in GTK.

    • GtkComboBox con testi tradotti non può essere facilmente gestito dal file glade, così non ci proviamo. Utilizzare il metodo init_translatable_combo della classe GenericEditorView generica, ma si prega di richiamarlo dal presentatore.

  • Il modello è solo un oggetto con attributi noti. In questa interazione, la modello è solo un contenitore di dati passiva, che non si fa nulla di più che lasciare che la presentatore modificarlo.

  • La sottoclasse Presenter definisce e implementa:

    • ‘widget_to_field_map ‘, un dizionario associando i nomi widget a nome degli attributi di modello,

    • ‘view_accept_buttons ‘, l’elenco dei nomi di widget che, se attivato dall’utente, significa che la vista deve essere chiusa,

    • tutti gli accessori necessari i callback,

    • Facoltativamente, essa svolge la modello ruolo, troppo.

    Il presentatore aggiorna continuamente il modello in base alle modifiche nella vista. Se la modello corrisponde a un oggetto di database, la presentatore impegna tutti modello aggiornamenti al database quando il vista è chiuso correttamente, o il rollback se la vista viene annullata. (questo comportamento è influenzato dal parametro do_commit)

    Se il modello è un’altra cosa, il presentatore farà qualcos’altro.

    Nota

    Un presentatore ben educato utilizza la API della vista per interrogare i valori inseriti dall’utente o per impostare lo stato dei widget. Per favore non imparare dalla pratica dei nostri presentatori anomali, alcuni dei quali direttamente gestire campi di view.widgets. Così facendo, questi presentatori ci impedisce di scrivere unit test.

La classe base per il presentatore, GenericEditorPresenter definito in bauble.editor, implementa molte utili callback generici. C’è una classe di MockView, che è possibile utilizzare durante la scrittura di test per il tuo presentatori.

Esempi

Contact e ContactPresenter sono implementati seguendo le linee di cui sopra. La visualizzazione è definita nel file contact.glade.

Un buon esempio di modello di visualizzazione/relatore (nessun modello) è dato dalla gestione connessione.

Usiamo lo stesso schema architettonico per l’interazione non di database, impostando il presentatore anche come modello. Facciamo questo, ad esempio, per la finestra di dialogo Esporta JSON. Il seguente comando vi darà un elenco di istanze di GenericEditorView:

grep -nHr -e GenericEditorView\( bauble

Tavolo allungabile Ghini con plugin

Quasi tutto di Ghini è estensibile tramite plugin. Plugin può creare tabelle, definire ricerche personalizzate, aggiungere voci di menu, creare comandi personalizzati e altro ancora.

Per creare un nuovo plugin è necessario estendere la classe bauble.pluginmgr.Plugin.

Il plugin Tag è un buon esempio minimo, anche se il TagItemGUI rientra il pattern architetturale Model-View-Presenter.

Struttura del plugin

Ghini è un framework per la gestione delle collezioni e viene distribuito insieme a una serie di plugin rendendo Ghini un manager collezione botanica. Ma Ghini rimane un quadro e si potrebbe in teoria rimuovere tutti i plugin distribuiamo e Scrivi la tua, o scrivere il proprio plugin che estendono o completare il comportamento attuale di Ghini.

Una volta che avete selezionato e aperto una connessione al database, si terra nella finestra ricerca. La finestra di ricerca è un’interazione tra due oggetti: SearchPresenter (SP) e SearchView (SV).

SV è quello che vedete, SP detiene lo status di programma e gestisce le richieste che si esprimono attraverso SV. Gestire queste richieste influenzano il contenuto di SV e lo stato del programma in SP.

I risultati di ricerca illustrati nella parte più larga della SV sono righe, oggetti che sono istanze di classi registrate in un plugin.

Ciascuna di queste classi deve implementare un preciso insieme di funzioni per poter correttamente operare all’interno di Ghini. Ghini riserva spazio alle classi dei plugin.

SP sa di tutte le classi registrate (contenute nei plugin), sono memorizzate in un dizionario, che associa ciascuna classe alla relativa implementazione di plugin. SV ha uno slot (un gtk.Box) dove è possibile aggiungere elementi. In qualsiasi momento, al massimo un solo un elemento nello slot è visibile.

Un plugin definisce una o più classi di plugin. Una classe di plugin svolge il ruolo di un presentatore parziale (pP - plugin presenter) come implementare i callback necessari per la visualizzazione parziale associata raccordo nello slot (pV - plugin vista), e il modello MVP è completato dal presentatore padre (SP), ancora una volta funge da modello. Vediamo di riassumere e completare:

  • SP funge da modello,

  • la visualizzazione parziale di pV è definita in un file glade.

  • i callback implementati da pP sono nominati e riferiti nel file glade.

  • un menu di scelta rapida per la riga di SP,

  • una proprietà dipendente.

Quando si registra una classe di plugin, la SP:

  • aggiunge il pV nello slot e lo rende invisibile.

  • aggiunge un’istanza di pP nelle classi plugin registrati.

  • informa il pP che il modello è SP.

  • collega tutte le richiamate dal pV a pP.

Quando un elemento in pV genera un’azione in pP, pP può inoltrare l’azione a SP e può richiedere che SP aggiorni il modello e di conseguenza la vista.

Quando l’utente seleziona una riga in SP, SP nasconde tutto nello slot pluggable e mostra solo il pV corrispondente al tipo della riga selezionata e chiede al pP di aggiornare il pV con tutto ciò che è relativo alla riga selezionata.

Oltre a impostare la visibilità del pV vari, niente deve essere disabilitato né rimosso: un pV invisibile non può innescare eventi!

flusso di lavoro per risolvere bug

flusso di lavoro in condizioni normali
  • durante l’utilizzo del software, è possibile notare un problema, o si ottiene un’idea di qualcosa che potrebbe essere meglio, pensate a questo proposito abbastanza buono per avere un’idea molto chiara di quello che realmente è, che notato. si apre un problema e descrive il problema. qualcuno potrebbe reagire con sentori.

  • si apre il sito di problemi e scegliere uno che si vuole affrontare.

  • assegnare il problema a se stessi, in questo modo che si è informare il mondo che avete intenzione di lavorare a questo. qualcuno potrebbe reagire con sentori.

  • Facoltativamente Forkare il repository nel tuo account e preferibilmente creare un ramo, chiaramente associato al problema.

  • scrivere unit test e loro si impegnano a tua filiale (per favore non spingere in mancanza di unit test per github, eseguire prima la nosetests localmente).

  • scrivere più unit test (idealmente, le prove formano la descrizione completa della funzionalità aggiunta o correzione).

  • Assicurarsi che la funzionalità che si desidera aggiungere o correggere è davvero completamente descritto dagli unit test che hai scritto.

  • Assicurarsi che gli unit test sono atomici, cioè verificare variazioni sui cambiamenti lungo una singola variabile. non dare input complesso di unit test o test che non si adattano su uno schermo (25 righe di codice).

  • scrivere il codice che effettua i test riescono.

  • aggiornare i file i18n (Esegui ./scripts/i18n.sh).

  • Quando possibile, tradurre le nuove stringhe che metti nei file di codice o radura.

  • quando cambi qualche stringa, assicurati che le sue vecchie traduzioni vengano ancora utilizzate.

  • confermare le modifiche.

  • spingere a github.

  • aprire una richiesta di pull.

pubblicazione in produzione
  • Aprire il pull richiesta pagina utilizzando come base una linea di produzione ghini-x.y, rispetto al ghini-x.y-dev.

  • Assicurarsi che un commit bump è incluso nelle differenze.

  • dovrebbe essere possibile unire automaticamente i rami.

  • creare la nuova richiesta di pull, lo chiamano come “pubblica la linea di produzione”.

  • Forse devi aspettare per travis-ci eseguire i controlli.

  • unire le modifiche.

  • raccontare al mondo: su facebook, il gruppo google, linkedin,...

Fase di
  • Scrivi una recensione su questo flusso di lavoro. considerare questo come una linea guida, a voi stessi e ai vostri colleghi. si prega di contribuire a rendere migliore e la pratica di corrispondenza.

Appoggiare Ghini

https://pledgie.com/campaigns/29188.png

Se utilizzi Ghini, o se ti sembra giusto aiutarne lo sviluppo, puoi considerare una donazione