TODO
(18:02:30) pat1@jabber.linux.it: pare che provami non chiuda la connessione al db
(18:02:40) pat1@jabber.linux.it: questo quando si esce
(18:02:45) pat1@jabber.linux.it: mysql non fa una piega
(18:02:53) pat1@jabber.linux.it: oracle pare non molli invece
(18:03:03) pat1@jabber.linux.it: e obbliga a un ctrl-C

 - non accettare rep_cod da command line (al momento lo accetta ancora per
   compatibilità)

 - guardare software di Opera (licenza ignota) per codifica/decodifica BUFR
   satellite
 - aggiungere 'getting started' al README
 - mancano tetex-extra, swig, python-dev tra le dipendenze elencate nel sito
 - pacchettizzare debian/
 - Per i test: 172.20.10.242

STORED PROCEDURE
 + Requisiti: MySQL 5 e libmyodbc >= 3.51.14
 + Convertiti: pseudoana e context
 - Da fare: speedup prendilo, speedup import
    - prendilo: usare ODBC bulk insert
    - import: usare ODBC bulk insert sia per dati che per attributi
    - valutare sistema di speedup estrazione e inserimento per vol7d
   http://dev.mysql.com/doc/refman/5.0/en/declare-handlers.html
   http://dev.mysql.com/doc/refman/5.0/en/cursors.html

 - Batch insert

 - Fare una nuova tabella dati e attr per i dati di pseudoana, visto che
   vengono sempre comunque gestiti diversamente

 - Controllare che gli indici UNIQUE abbiano un senso, altrimenti tenerli solo
   per debug: ad ogni modo io in fase di insert devo fare una select, quindi...
 - Controllare che l'indice unique di pseudoana abbia un senso quando ident is
   null, altrimenti si può pensare di toglierlo

 - Fare un tool che data una tabella di un DB fa un analisi di quali tabelle
   sono correlate e di quanti valori distinti ci sono in ogni suo sottoinsieme
   di colonne
   	$ mysql test2 -e "SELECT DISTINCT id_ana, datetime FROM data" | wc -l
	103334
	enrico@viaza:~/lavori/arpa$ mysql test2 -e "SELECT COUNT(1) FROM data" | wc -l
	2
	enrico@viaza:~/lavori/arpa$ mysql test2 -e "SELECT COUNT(1) FROM data"
	+----------+
	| COUNT(1) |
	+----------+
	|  1298237 | 
	+----------+
	$ mysql test2 -e "SELECT DISTINCT id_ana, id_dim4 FROM data" | wc -l
	4869
	$ mysql test2 -e "SELECT COUNT(1) FROM dim4"
	+----------+
	| COUNT(1) |
	+----------+
	|       41 | 
	+----------+
 - Aggiungere una tabella 'info (key varchar(255) primary key, val
   varchar(255))' in cui salvare metadati sul database tipo la versione del suo
   formato, e controllarla sempre in fase di apertura del database, dando
   errore se il formato non è supportato

 - Fare un programmino o uno script che fa dump di un database scrivendo in
   output tutti (e soli) i dati necessari a rigenerarlo, in un formato
   indipendente dalla struttura del database.  Usarlo per fare dump e restore
   in caso cambi la struttura del database, e per provare database con
   struttura diversa.

 - Branch riorganizzazione livelli
    + Uniformare i livelli 101 e 121 e 141, 105 e 125, 108 e 128
    + Vedere come committare i livelli uniformati
    - Cambiare i livelli in Oracle

 - http://www.easysoft.com/developer/interfaces/odbc/linux.html#cursor_lib_unixodbc

 - dballe.ma:
    - fare un exporter a linea di comando che esporti una query dballe in uno
      dei vari formati (come il salvataggio di provami)

    - fare il listone [(pos, val)] su file temporaneo

    - documentazione
       + la sintassi di read
       + l'elenco degli indici
       - esempi, tanti esempi

 - Implementare supporto per piú parametri di query in dbamsg filter

 - Spiegare nel record la differenza tra i parametri e i valori

 - Sistemare la documentazione dei moduli (secondo tab in doxygen)

 - Aggiungere documentazione specifica per ogni libreria:
    + Contenuto della B locale
    - Elenco dei campi dei record
    - Lista feature di codifica supportate per dballe-bufrex
    - Tabella di template supportati in import/export per dballe-msg
    - Spiegazione di livelli, scadenze, livello di anagrafica e le varie altre
      caratteristiche di dba_msg
    - Spiegazione della differenza tra dba_msg e dba_msgs
    - Lista database supportati in dballe-db e istruzioni sul setup dei vari
      tipi di DSN

 - Usare i BUFR da satellite anche in altri test di lettura, ricodifica, import, export

 - Reintrodurre la hash table nel record, visto che i dati extra di anagrafica
   ora vanno tutti nella listona delle variabili

 - Fare un generatore di query casuali sullo stile di mysqld.log e testare cosa
   succede a InnoDB quando si inserisce un mare di roba

 - Esportare i dati dei satelliti in NetCDF per Lokal col formato che mi darà
   la Francesca

Prestazioni

 + vedere come va con postgres

 * Optimizations
    - Remove the big unique index on context (it's already been enforced by the
      rest of the code, that looks up from and existing context index before
      inserting, and does it inside a transaction)

 * Milestone release-extra
    - Export AOF

 * BUFR
    - In fase di export sounding BUFR e CREX, non esportare i livelli extra

 * Documentazione codice
    - Spiegare l'architettura del sistema di I/O encoding e decoding
    - Spiegare come aggiungere:
       - nuovi template di export bufrex
       - nuove conversioni tra unità di misura
       - nuove funzioni ai tool a linea di comando
       - import da nuovi template bufrex
      (farlo mettendo questa documentazione in un nuovo gruppo 'tasks')

 * Tools
    - In fase di conversione, aggiungere uno switch per fare unset di tutti i
      valori che hanno intervallo di confidenza al di sotto di una soglia data
    - Fare un import delle anagrafiche che scandisca una serie di CREX:
       - mettendo assieme i dati anagrafici delle varie stazioni.
       - controlli che le stazioni non si spostino e alla fine inserisca tutto
	 nella tabella di anagrafica

 * Procedura per supportare un nuovo tipo report in un formato specifico
    - Cercare un file con un'osservazione nel formato voluto
    - Cercare un file con la stessa osservazione in un formato per cui è già
      supportata, o in alternativa, cercare un dump dei dati presenti nel
      campione
    - Aggiungere il campione all'archivio dei test case
    - Aggiungere a check_import i test per il nuovo file, usando l'altro file o
      i dati del dump come riferimento
    - Implementare

 - Appunti per un nuovo report:
    - La nuova API (con un programma di esempio è forse meglio)
    - Cosa è stato fatto finora
    - Cosa verrà fatto in futuro
    - MySQL 4? (transazioni (forse non servono), DELETE USING, performance, faremo
      delle prove)
    - Completamento API dalle specifiche
       - semantica elencamele
       - semantica QC
       - semantica cancellazione

 * Note dalla presentazione
    - Non è molto felice la definizione "reti"
    - quadballitem: serve la idba_seti(handle, "rep_cod", 1) dopo la
      seti("ana_id")?
    - [no, perché nessuno poi la saprebbe/potrebbe mantenere] Fare
      un'interfaccia python con solo quello che serve per fare toolettini
      grafici per import, export, correzione dati anagrafici, correzione
      singoli dati

 - Articolo per ARPA rivista
 - Mettere assert nel codice
 - Verificare memory leak
 - Controllare il keynote di Triggell alla LCA sui tool da avere per
   controllare il software

 - Domande
    - Scrivere il test per guidare la stesura del codice: dato un AOF (o uno
      per tipo) fare l'elenco delle variabili fisiche che ci si aspetta in
      output (coi loro codici WMO o B locale), e usarle per testare il codice.
      -> Meglio: convertire 4/5 bufr di tipo diverso in AOF, poi darmi gli AOF e
         il dump dei BUFR


 * Tools
    - Export di variabili in un foglio elettronico
   
 * CREX
    - Raggruppare i dati che abbiamo per tipo report e vedere quali
      informazioni di contesto ci sono per ogni tipo report
    - Documentazione
    - Test

    - Parse Entry C
    - Testare il decoding di CREX con piú di una subsection
    - Encoding CREX con piú di una subsection
    - Encoding CREX con entry C
    - Inserimento informazioni sul report

 * BUFR
    - Gestire in input le entry C 22 e C24
    - Export
       - Fare un file di configurazione dove specificare il numero
	 dell'originating centre da usare nell'Identification Section dei BUFR
	 generati

 * Refactoring
    - Future optimizations for dba_vartable can make use of string tables to
      store varinfo descriptions and units instead of long fixed-length
      records.
       - The string table cannot grow dynamically or it will invalidate the
         string pointers
    - Distinguere nei messaggi:
       - Metainformazioni (nome del file, offset del messaggio, numero
         d'ordine, ...)
       - Informazioni codificate (il messaggio codificato)
       - Informazioni decodificate (il contenuto del messaggio)
   
 * Dballe
    - Espansione code table quando si fa enqc di un parametro di tipo "CODE TABLE"
      (sembra un compito impossibile, a meno ché qualcuno non trovi una lista
      parsabile di tutte le variabili e i loro valori.  C'e' anche da vedere
      come gestire eventuali aggiornamenti futuri)

 * Guida utente
    - Troubleshooting
       - Raccogliere casi mano a mano che si presentano
