Sull’uso di tablespaces separati per dati e indici

Mi sono imbattuto in questo interessantissimo botta e risposta nel sito dell’Oracle.

La domanda è: sarà più performante il database nelle operazioni di lettura e scrittura (e magari anche per i backup) se mettiamo tabelle e indici in tablespace separati?

I DBA con cui lavoro spesso adottano questo espediente per avere prestazioni migliori, ma alla Oracle stessa non ritengono così certa questa convinzione,  che, a quanto pare, risulta molto diffusa. La separazione può essere utile, ma non per le ragioni per cui di solito viene adottata.

Leggetevi la discussione in questo interessante forum: Ask Tom Oracle … almeno fino ad un certo punto rimane lucida; poi, come capita spesso nei forum, si va a farfalle.

“Howto” per l’installazione di un sistema LAOP (Linux Apache Oracle PHP)

Ho avuto la necessità di realizzarmi un ambiente di sviluppo basato su Linux, Apache e PHP ma con il vincolo di adottare una base dati Oracle.

Oracle da’ la possibilità di utilizzare un server ad uso test Oracle eXpress Edition. Il sistema che ne deriva l’ho chiamato LAOP, ricordando il molto più popolare ambiente LAMP che si basa sul DBMS MySQL (che è di proprietà di Oracle).

Ho seguito un utile howto sull’ottimo sito http://www.danilovizzarro.it/ ma ho voluto “vivisezionare” gli script di automazione per capire ciò che facevano. Ne è risultato un piccolo howto, redatto ovviamente in LaTeX ;-), che volentieri metto a disposizione con la speranza che risulti utile.

XML

Un piccolo problema: avevo la risposta di un web service e volevo renderla leggibile con maggior facilità. I web service rispondono (nella maggior parte dei casi) in XML, l’indentazione non è necessaria per un parser (il software che legge il file) ma per l’occhio umano è preferibile vedere come si annidano i nodi nel gioco di scatole cinesi.

Due soluzioni:

  1. in Ubuntu, aprire Synaptic e cercare xmlindent (probabilmente non è installato); una volta installato si lancia
    $ xmlindent file.xml > file1.xml

    Per chi vuole qualche info in più, man xmlindent

  2. soluzione per chi smanetta un po’ di più: applicare una trasformazione XSLT come suggerito in questo sito. Per chi non conosce le trasformazioni XSLT ho fatto qualche esempio in questa risorsa.

Openoffice.org

Mi è capitato talvolta che all’apertura di Open Office (versione 2.2) venisse avviata la procedura di recupero file corrotti (di solito in seguito ad un crash del programma o ad un arresto inatteso del sistema). Ogni tanto capita che, se fallisce il ripristino di uno o più files, al suo avvio Open Office mostri la schermata di ripristino perché i file da ripristinare non sono più disponibili nella cartella /tmp/, e il ripristino non è comunque più possibile. Questa situazione è destinata a permanere in eterno perché il recupero non può più essere effettuato.

Un modo per rimediare è il seguente:

Posizione file dei recuperi OpenOffice:

 <home>/.openoffice.org/user/registry/data/org/openoffice/Office/Recovery.xcu

La guida online (F1) recita:

Avviare il Programma di notifica errori. Nella maggior parte dei casi di crash del software, il Programma di notifica errori si avvia automaticamente. Tuttavia, se il software sembra essere bloccato e il programma non si avvia automaticamente potete avviarlo manualmente:
Accedete alla cartella del programma {office_install_path}/ e avviate il file crashrep.

Workaround alternativo:

Esco da OO (se già aperto). Con OO spento:

 $ vi <home>/.openoffice.org2/user/registry/data/org/openoffice/Office/Recovery.xcu

cancello le righe relative ai documenti citati nel prompt iniziale (nel campo oor:name) e le sostituisco con le righe:

 <node oor:name="recovery_item_2" oor:op="remove"/>

dove anziché item_2 può essere un item diverso, di solito più righe uguali in ordine da 1 a 15). Salvo e riavvio OO. Non appare più il prompt di recovery.

Nella versione 3.2 che ho in questo momento, tuttavia, il problema è stato risolto, per cui non serve alcun intervento (la coda dei file da ripristinare si svuota da sola).

Lucene, un potente motore di ricerca open source

Mi è capitato due anni fa di giocare con un motore di ricerca molto potente e flessibile: Lucene, uno dei prodotti dell’Apache Group. Lucene (pronunciato all’incirca lussìn) è scritto in Java ed è integrabile in un software qualsiasi in cui occorra avere a disposizione una funzione di ricerca su filesystem ma anche su database (io ad esempio l’ho usato in quest’ultima situazione).

Ha una API molto fornita a disposizione, buona documentazione ed è tutto sommato semplice sia da installare / configurare che da usare.

Ha funzionalità di ricerca fuzzy come anche su fornitura di espressioni di ricerca (quella che fa uso degli operatori OR, -, e altri, ma che pochi conoscono e usano) e di indicizzazione su più fonti dati, come detto.

Ho scritto un piccolo manualetto per l’installazione, nella speranza che possa essere utile. Di solito quello che scrive il manuale dimentica sempre un caso particolare che in una determinata situazione trasformano immantinente il manuale in carta igienica. Io sicuramente ci sarò riuscito. Però mi sono soffermato, forse, su dettagli che sono scontati per i più bravi.

Premi Breakthrough of The Year 2010

Sono dieci premi assegnati ogni anno da Physics World ai 10 maggiori successi della ricerca nell’ambito della Fisica (a cui sia riconosciuto il rango di una “svolta”).

Quest’anno il primo premio è stato assegnato ai fisici dell’esperimento ALPHA del CERN di Ginevra per avere isolato per 170 ms 38 atomi di antiidrogeno (ho fatto un piccolo tweet anch’io circa un mese fa su questa osservazione straordinaria).

I fisici sperano di osservare delle differenze nei livelli energetici tra idrogeno e antiidrogeno per trovare una motivazione dell’asimmetria nella presenza del primo rispetto al secondo nell’universo.

I dettagli nel sito di Physics World.

CakePHP

Dopo molti tentennamenti, visto il framework Struts per Java, ho deciso di iniziare a sviluppare applicativi PHP con il tool MVC CakePHP.

Il paradigma MVC è una configurazione architetturale (design pattern), un acronimo per Model – View – Controller (approfondimento su Wikipedia inglese).

MVC design pattern - Tratto da Wikipedia

MVC design pattern - Tratto da Wikipedia

Ogni applicativo viene separato in tre componenti interagenti che sono:

  • Model (il modello): è in sostanza il modello dati su cui si basa l’applicativo, può essere un database, o un file xml, o altro ancora. Nel caso del database relazionale, nel modello definisco lo schema entità/relazione, cioè tutto l’insieme delle tabelle e dei vincoli di integrità referenziale: è la parte di PHP che parla direttamente con il database
  • Controller (la logica) definisce le azioni sulle entità del modello (vista, inserimento, modifica); un click dell’utente chiama un componente del controller e una volta terminata l’elaborazione del modello, il controllore invoca la vista adeguata per visualizzare i risultati.
  • View (la presentazione) definisce come visualizzare il risultato delle azioni sul modello (listato di una tabella, inserimento o variazione di una o più tabelle).

CakePHP fornisce nativamente un ambiente di controllo della connessione a database (scaffold, impalcatura) che consente a costo 0 di controllare se la configurazione del modello e le principali azioni su di esso sono funzionanti. Tempo fa avevo scritto uno scaffold che avevo chiamato TABULA che fa la stessa cosa.

Telefonia

Mi è capitato oggi di dover gestire un ambiente di test interconnesso con la rete telefonica. Riporto qui un po’ di appunti, soprattutto per evidenziare l’abbondanza di acronimi nei quali ci si imbatte. E’ solo una lista di acronimi, non la spiegazione di cosa siano. Sul web trovate un sacco di risorse che vi spiegano i dettagli.

  • PSTN (Public Switched Telephone Network) ora più nota in Italia come
  • RTG (Rete Telefonica Generale) è l’Internet della telefonia, anzi, Internet sfrutta la RTG.

Ma talvolta con PSTN intendiamo la vecchia rete commutata (quella che meccanicamente sostituiva il lavoro delle centraliniste con gli spinotti) ma un  acronimo più adeguato è

  • POTS (Plain Old Telephone Service, ma che qualche tempo fa significava Post Office Telephone System).

La rete telefonica italiana, poi, si struttura in quattro livelli (il primo è il più vicino all’apparecchio telefonico di casa, l’ultimo è il più generale):

  • SL (Stadio di Linea) è la centrale da dove parte il famoso ultimo miglio; ce ne sono circa 10.500 che coprono 8100 Comuni;
  • SGU (Stadio di Gruppo Urbano) a cui si collegano più SL: ce ne sono 628, gli SL sono a loro collegati tramite cavo interrato o ponte radio;
  • SGT (Stadio di Gruppo di Transito, o centrali interurbane) a cui accedono gli SGU (ce ne sono 65). Questi numeri non sono certi, fonti diverse riportano numeri leggermente diversi. Diciamo che ci sono 104 SL, 102 SGU e 101 SGT. Giusto l’ordine di grandezza. Queste SGT sono collegate tramite 3 gateway (che si trovano a Milano, Roma e Palermo) alla
  • OPB (Optical Packet Backbone) la dorsale a fibre ottiche internazionale
  • BBN è la dorsale nazionale (Back Bone Nazionale), che dovrebbe sostituire la rete basata su SL/SGU/SGT, da non confondersi con Bolt, Beranek & Newman, l’azienda che ha partecipato alla nascita di Internet (la BBN è dove lavorava Ray Tomlinson. Sì, proprio quello che ha inventato l’email). Ah! Backbone in Anatomia è la colonna vertebrale.

Ogni punto di accesso (il singolo telefono), poi, può al suo interno articolarsi in una piccola sottorete interconnessa che accede alla rete telefonica tramite un

  • PBX (Private Branch Exchange), volgarmente detto centralino e a volte detto
  • PABX (Private Automatic Branch Exchange), che può svolgere varie funzioni:
  • ACD (Automatic Call Distribution)
  • CTI (Computer Telehony Integration)
  • DISA (Direct Inward Selection Access)
  • IVR (Interactive Voice Response) che esistono in modalità di accesso vocale o tramite
  • DTMF (Dual Tone Multi Frequency), la tastiera a toni.

D’altro canto io necessitavo di far accedere un servizio da un server remoto, che a sua volta è collegato al suo PBX tramite il protocollo

  • SIP (Session Initiation Protocol), protocollo a livello di applicazione basato su
  • IP (Internet Protocol), e impiegato principalmente in applicazioni
  • VoIP (Voice over IP)

ma l’ingegnere mio collega mi ha detto di farlo su una

  • VPN (Virtual Private Network)

L’alternativa di esporre il servizio su internet?

  • MPC (omissis, su Google non lo trovo…)

mi ha risposto.

LaTeX

LaTeX

Di questo sistema di produzione di articoli scientifici mi sono innamorato nella mia tesi di laurea. Lo uso ancora per produrre la documentazione del software che scrivo.

Masochismo? no, solo nostalgia.

Per usare le lettere accentate disponibili nella tastiera evitando cose di tipo “`e” e ammennicoli simili, basta aggiungere una direttiva per l’utilizzo della codifica UTF 8 nel preambolo del file:

documentclass[11pt,a4paper,onecolumn]{report}
usepackage[italian]{babel}
usepackage[utf8]{inputenc}

questo snippet riporta le istruzioni che servono per:

  • caricare le sillabazioni per la lingua italiana;
  • adottare utf8 come input encoding.

Altri dettagli in WikiBooks.

Il primo editor scientifico non si scorda mai…

Extranet

Per Extranet si intende l’infrastruttura di comunicazione tra un soggetto erogatore di un servizio basato su Internet e una o più sottoreti, o anche punti di acceso singoli, ai quali viene dato un accesso riservato per fruire di applicativi prevalentemente basati su web (anche se non solo questi).

In sostanza è un canale riservato attraverso il quale, ad esempio, un’azienda tratta gli ordinativi con i suoi fornitori, canale che sfrutta l’Internet come infrastruttura ma il cui accesso non è pubblico, bensì controllato.

Sto seguendo la progettazione dell’architettura di questo canale di comunicazione per conto dell’Azienda Ospedaliera di Padova / ULSS 16.