Protetto: Java custom libraries in Mirth

Il contenuto è protetto da password. Per visualizzarlo inserisci di seguito la password:

Python,MySQL e date

Python logo
Python logo

Sto scrivendo un programma Python che deve inserire in una tabella di un db MySQL alcuni campi letti da un file; alcuni di questi sono di tipo data e sono formattati con il formato “%d-%m-%Y” (per esempio: “25/12/2020”) per cui nel programma devo rovesciare giorno e anno per presentarli a MySQL perché interpret la stringa come una data.

Orbene la seguente riga intesa a svolgere questo compito, non funziona (ometto la definizione della connessione e del cursore):

query = "select str_to_date(substring(%s,1,25), '%d-%m-%Y') data" 
prm=list()
prm.append('16-04-2021')
print(prm)
cur.execute(query, prm)
for row in cur.fetchall():
    print("------------> ",row[0])

Quello che capita è questo:

Traceback (most recent call last):
   File "./mail.py", line 46, in 
     cur.execute(query, prm)
   File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 206, in execute
     raise ProgrammingError(str(m))
 MySQLdb._exceptions.ProgrammingError: not enough arguments for format string

Dov’è che Python si incasina?

Ora, il casino deriva dalla notazione % che si usa sia per i parametri della query SQL che per il formato della data.

Pensavo che il parser ci arrivasse da solo visto che la stringa di formato è racchiusa da virgolette, e invece no. Ingenuo che sono, dopo tanti anni non ho ancora imparato!

Per risolvere questo problema occorre applicare un carattere di escape alla stringa di formato, nel modo seguente

query = "select str_to_date(substring(%s,1,25), '%%d-%%m-%%Y') data" 

Nota il doppio %%.

Facendo così il programma termina correttamente

------------>  2021-04-16

In realtà il formato della data è un po’ più complicato di così, ma l’ho semplificato per circoscrivere il problema.

Risorse web

VPN con Forticlient 6.2.0

vpn
VPN

Un cliente cambia l’infrastruttura di rete privata virtuale e adotta Fortinet.

Finora si era adottata openvpn.

Di seguito trascrivo le istruzioni per installare il client in Ubuntu 20.04.2 LTS focal.

Howto VPN per Ubuntu 18.04 LTS e 20.04 LTS

Scaricare la chiave GPG

wget https://repo.fortinet.com/repo/6.4/ubuntu/DEB-GPG-KEY

Aggiungerla al repository:

sudo apt-key add DEB-GPG-KEY

Aggiungere questa riga in /etc/apt/sources.list

deb [arch=amd64] https://repo.fortinet.com/repo/6.4/ubuntu/ /bionic multiverse

Aggiorna package lists

sudo apt-get update

Installazione FortiClient

sudo apt install forticlient

Procedura 2

La versione scaricata utilizzando sources.list non era compatibile al 100%, sono dunque andato a scricare direttamente il file deb. Prima ho però rimosso la versione appena installata:

sudo apt-get remove forticlient

e poi ho scaricato la versione deb direttamente:

wget https://filestore.fortinet.com/forticlient/downloads/FortiClientFullVPNInstaller_6.4.0.0851.deb

Poi si può procedere ad installarlo

sudo apt install ./FortiClientFullVPNInstaller_6.4.0.0851.deb

A questo punto

$ forticlient
 Starting FortiTray
 Platform detected: ubuntu

Appare la schermata di configurazione della VPN in cui si scrivono l’host del tunnel, la porta, il nome che si vuole dare alla connessione

Impostazioni VPN Fortinet
Impostazioni VPN Fortinet

Ci si connette fornendo username e password:

Client VPN Fortinet
Client VPN Fortinet

e la connessione (se non ci sono altri problemi) viene stabilita:

VPN connessa
VPN connessa

That’s all folks!

Risorse web

Crepa nel Modello Standard

muon-g-2-physics
Precessione di un muone – un modellino

È una cosa che si subodora da vent’anni, ma solo ora c’è un’evidenza molto forte di questo segno di crisi del Modello Standard. Dopo una considerazione introduttiva, riporto il testo integrale dell’annuncio comparso il 7 aprile 2021 sul sito web del Fermilab.

Una premessa: cos’è il Modello Standard?

Il Modello Standard è una teoria di campo che spiega com’è il mondo dal punto di vista microscopico per quanto riguarda le forze fondamentali elettromagnetica, nucleare forte e nucleare debole. La forza gravitazionale non è descritta nel Modello Standard. Esso cataloga in una tabella tutte le particelle fondamentali per tipo (materia – fermioni – o interazione – bosoni) e per famiglia (quark o leptoni). Tuttavia non è solo una semplice tabella quanto un’articolata teoria di campo quantistica che si integra con la Relatività Speciale. Tutto quello che accade in questo reame, da come l’occhio percepisce i colori al bosone di Higgs, è descritto con precisione incredibile da questa teoria.

Ma nella storia ci sono molti esempi di teorie che prevedono tutto ma per le quali arriva un giorno in cui si osserva qualcosa di insapettato.

Buttare via tutto? No, la Fisica è come il maiale, non si butta via niente: c’è solo una classe di fenomeni che per essere spiegata ha bisogno di un’ampliamento della teoria. E generalmente questa nuova teoria getta una luce nuova sul cosmo e ne aumenta la leggibilità e la profondità di interpretazione. Per questo si parla di una Nuova Fisica. Perché ogni volta da una crepa è nata una nuova fisica.

Dall’impossibilità di mettere d’accordo Elettromagnetismo ed il funzionamento del corpo nero è nata la Meccanica Quantistica.

Dall’impossibilità di mettere d’accordo Elettromagnetismo e Meccanica è nata la Teoria Speciale della Relatività.

Dal fatto che la precessione di Mercurio non risultasse così accurata dalle equazioni della Meccanica per un errore di 43″ in un secolo… Be’ qui potete dire: ma che errore è una rotazione 43″ in un secolo? è pedanteria! No! Non lo è. La previsione della teoria e il valore che esce dalla misura possono differire al massimo all’interno dell’incertezza della misura: se la differenza è maggiore c’è qualcosa che non va nella teoria. Ecco… 43″ al secolo era un errore piccolo ma non trascurabile perché più grande dell’errore dello strumento, quindi la Meccanica non spiegava del tutto il fenomeno della precessione più lenta. Qui la Teoria Generale della Relatività invece spiegò benissimo anche quella differenza. A differenza dei casi precedenti la crepa da cui irruppe la Teoria della Reatività Generale non furono quei 43″ d’arco, bensì stavolta la Teoria arrivò da sola a spiegarlo, essendosi evoluta autonomamente nella testa di Albert Einstein.

È curioso che una crepa in una teoria per venga fuori per un fenomeno analogo: la precessione! Anche nel caso del Fermilab c’è una frequenza nella precessione che non torna con quento è previsto dai modelli matematici: i muoni precedono ad una frequenza più alta (dondolano più velocemente) di quella prevista dal Modello Standard.

Come vedrete anche qui la differenza è piccolissima, ma non è trascurabile, perché lo strumento consente una precisione più grande di quell’errore. Nell’articolo non ho toccato la forma, ho solo convertito le unità di misura usate nelle unità del Sistema Internazionale.

Il post integrale sul sito del Fermilab

I risultati, attesi per molto tempo, dell’esperimento Muon g-2 [leggi “g meno 2”] presso il Dipartimento dell’Energia degli Stati Uniti al Fermi National Accelerator Laboratory [Fermilab] mostra particelle fondamentali chiamate muoni che si comportano in un modo non previsto dalla migliore teoria quantistica elaborata dali sceinziati, il Modello Standard della Fisica delle Particelle. Questo risultato di forntiera, svolto con una precisione senza precedenti, conferma una discrepanza su cui i ricercatori stanno rosicando da decenni .

La forte evidenza che i muoni deviano dai calcoli del Modello Standard potrebbe suggerire un’eccitante nuova fisica. I muoni funzionano come una finestra sul mondo subatomico e potrebbero interagire con particelle o forze ancora sconosciute.

“Oggi è un giorno straordinario, atteso a lungo non solo da noi ma da tutta la comunità internazionale di fisici,” ha detto Graziano Venanzoni, co-portavoce dell’esperimento Muon g-2 e fisico dell’Istituto italiano di Fisica Nucleare (INFN). “un grande ringraziamento va ai nostri giovani ricercatori che, con il loro talento, le loro idee e il loro entusiasmo, ci hanno permesso di raggiungere questo incredibile risultato”.

Il muone ha una massa circa 200 volte più grande di quella del suo cugino, l’elettrone. I muoni si trovano in modo naturale nei raggi cosmici che attraversano l’atmosfera terrestre, e gli acceleratori di particelle del Fermilab li possono produrre in grandi quantità. Come gli elettroni, i muoni si comporano come se avessero al loro interno un piccolo magnete. In un campo magnetico intenso, la direzione del muone si muove in precessione, ossia dondola in modo molto simile ad una trottola, o a un giroscopio. L’intensità del magnete interno determina la velocità dell’oscillazione del muone immerso nel campo magnetico esterno ed è descritta con un numero che i fisici chiamano g-factor. Questo numero può essere calcolato con una precisione molto grande.

Fermilab magnetic storage ring per abbattere il Modello Standard
Fermilab magnetic storage ring per mettere alla prova il Modello Standard. I primi risultati dell’esperimento Muon g-2 al Fermilab hanno rafforzato le prove della nuova fisica. Il fulcro dell’esperimento è un anello di accumulo magnetico superconduttore di 15,24 m di diametro (50 piedi), che si trova nella sua sala rivelatori tra rack di elettronica, linea di fascio di muoni e altre apparecchiature. Questo impressionante esperimento opera a una temperatura di 5 K e studia la precessione (o oscillazione) dei muoni mentre viaggiano attraverso il campo magnetico. Foto: Reidar Hahn, Fermilab

Mentre i muoni circolano nel magnete del Muon g-2, essi interagiscono anche con una schiuma quantistica di particelle subatomiche che vengono all’esistenza e scompaiono in continuazione. Le interazioni con queste particelle dalla vita estremamente breve altera il valore del fattore g, causando alla velocità della precessione aumenti e diminuzioni molto piccoli. Il modello standard prevede questo cosiddetto momento magnetico anomalo in modo molto preciso. Ma se la schiuma quantistica contenesse forze addizionali o particelle non prese in considerazione dal Modello Standard, questo modificherebbe in modo ancor più sensibile il valore del fattore g del muone.

“Questa quantità che misuriamo riflette le interazioni del muone con il resto dell’universo. Ma quando i teorici calcolano la stessa quantità, usando tutte le forze conosciute e le particelle del Modello Standard non otteniamo la stessa risposta,” dice Renee Fatemi, una fisica dell’Università del Kentucky e responsabile delle simulazioni per l’esperimento Muon g-2. “Questa è una forte evidenza che il muone è sensibile a qualcosa che la nostra migliore teoria non considera”.

Il precedente esperimento effettuato al Dipartimento dell’Energia degli Stati Uniti presso il Brookhaven National Laboratory, che si concluse nel 2001, suggerì evidenze sulla deviazione del comportamento del muone rispetto a quanto previsto dal Modello Standard. Le nuove misure dal Muon g-2 del Fermilab concordano fortemente con il valore trovato al Brookhaven e deviano dalla teoria con le misure più precise mai eseguite fino ad ora.

L’esperimento Muon g-2 invia un fascio di muoni nell’anello di stoccaggio, nel quale compiono migliaia di giri ad una velocità prossima a quella della luce. I rivelatori che rivestono l’anello permettono agli scienziati di determinare a quanto ammonti la precessione dei muoni.

Nel suo primo anno di funzionamento, nel 2018, l’esperimento del Fermilab ha raccolto più dati di tutti i dati insieme usciti dagli esperimenti sul fattore g del muone fatti fino a quel momento. Con più di 200 scienziati da 35 istituzioni di sette nazioni, la collaborazione Muon g-2 ha ora terminato l’analisi del moto di più di 8 miliardi di muoni dal primo lancio dell’esperimento.

“Dopo i 20 anni trascorsi dalla fine dell’esperimento di Brookhaven, è così gratificante poter finalmente risolvere questo mistero”, ha detto lo scienziato del Fermilab Chris Polly, co-portavoce dell’attuale esperimento e che era lo studente principale che si è laureato sull’esperimento di Brookhaven.

L’analisi dei dati sulla seconda e terza esecuzione dell’esperimento è in corso, la quarta esecuzione è in corso ed è prevista una quinta esecuzione. La combinazione dei risultati di tutte e cinque le analisi darà agli scienziati una misurazione ancora più precisa dell’oscillazione del muone, rivelando con maggiore certezza se la nuova fisica si nasconde all’interno della schiuma quantistica.

“Finora abbiamo analizzato meno del 6% dei dati che alla fine l’esperimento raccoglierà. Anche se questi primi risultati ci dicono che c’è una differenza interessante con il modello standard, impareremo molto di più nei prossimi due anni “, ha detto Polly.

Differenza per il valore g tra Modello Standard e risultati sperimentali
Differenza per il valore g tra Modello Standard e risultati sperimentali. Il primo risultato dell’esperimento Muon g-2 al Fermilab conferma il risultato dell’esperimento condotto al Brookhaven National Lab due decenni fa. Insieme, i due risultati mostrano una forte evidenza che i muoni divergono dalla previsione del modello standard. Immagine: Ryan Postel, collaborazione Fermilab / Muon g-2

I valori teorici accettati per il muone sono
g-factor: 2,00233183620(86)
momento magnetico anomalo: 0,00116591810(43)
(l’incertezza è tra parentesi)

I nuovi valori medi sperimentali annunciati oggi [7 aprile 2021] dalla collaborazione Muon g-2 sono:
g-factor: 2.00233184122(82)
momento magnetico anomalo: 0.00116592061(41)

I risultati combinati dal Fermilab e Brookhaven mostrano una differenza con la teoria di una significatività di 4,2 sigma, un 5-sigma “timido” [1 sigma = 1 deviazione standard] che gli scienziati richiedono per annunciare una scoperta, ma una forte indicazione dell’evidenza di una nuova fisica. La probabilità che i risultati siano solo una fluttuazione statistica è di 1 su 40.000.

L’esperimento del Fermilab riutilizza il componente principale dell’esperimento di Brookhaven, un anello superconduttore magnetico di circa 15 metri di diametro. Nel 2013 fu trasportato per più di 5000 km via terra e via mare da Long Island alla periferia di Chicago, dove gli scienziati hanno potuto trarre vantaggio dall’acceleratore di particelle del Fermilab e produrre il fascio di muoni più intenso degli Stati Uniti. Nei successivi quattro anni, i ricercatori hanno assemblato l’esperimento, messo a punto e calibrato un campo magnetico incredibilmente uniforme; sviluppato nuove tecniche, strumenti e testato a fondo l’intero sistema.

Fonte

Pillole Oracle: scovare e ricompilare oggetti invalidati

oracle
Oracle logo

Ogni tanto capita che in seguito ad operazioni di modifica di programmi Oracle, alcuni oggetti da questi dipendenti risultino invalidati. Di solito, invocando questi oggetti con un client risulta in un errore a runtime.

L’istruzione che permette di trovare lo stato degli oggetti è il seguente e deve essere lanciato da un utente con privilegi di DBA:

select
   comp_id,
   comp_name,
   version,
   status,
   namespace,
   schema
from
   dba_registry;

Uno script che individua gli oggetti (packages PL/SQL, procedure, funzioni e corpi di package) è invece il seguente

invalid.sql

Set heading off;
set feedback off;
set echo off;
Set lines 999;
Spool run_invalid.sql

select
	'ALTER ' || OBJECT_TYPE || ' ' ||
	 OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from
	 dba_objects
where
	 status = 'INVALID'
and
	 object_type in ('PACKAGE','FUNCTION','PROCEDURE');

spool off;

set heading on;
set feedback on;
set echo on;

@run_invalid.sql

Link utili

Altri post sull’argomento

LibreOffice in pillole: il plugin MacroFormatterADP

Tra i molti plugin disponibili per Libreoffice, vi volevo illustrare MacroFormatterADP, un programma di formattazione del testo utile per evidenziare testo che costituisce un brano di un codice sorgente di un linguaggio di programmazione.

MacroFormatterADP: come installarlo

Il plugin MacroFormatterADP è disponibile a questo URL. È stato sviluppato da Andrew Pitonyak.

Come prima operazione, scaricate il pacchetto cliccando su Download e mettetelo in una cartella che ricordate.

Dal menu Strumenti cliccare su Gestione estensioni… si apre la finestra seguente

Libreoffice macrofromatterADP
gestione estensioni

Cliccate su Aggiungi, cercate il plugin appena scaricato nel disco e cliccate su Apri. L’installazione è fatta.

Cliccando su Scarica altre estensioni, accederete al sito di Libreoffice nella galleria completa di tutti i plugin disponibili: divertitevi!

Come usare MacroFormatterADP

Nel frattempo (da quando io l’ho installato qualche tempo fa) il plugin ha cambiato nome ed è diventato Code Colorizer Formatter ed è selezionabile evidenziando il testo da formattare e lanciandolo dal menu, come nella figura che segue:

macroformatter

Il risultato finale è il seguente

formatted

La formattazione con evidenzia della sintassi è molto gradevole.

Linguaggi disponibili

I linguaggi di programmazione in cui è possibile formattare sono i seguenti:

  • BASH,
  • Basic,
  • Bat
  • C++,
  • Go,
  • Java,
  • Perl,
  • PHP,
  • Python,
  • R,
  • Rust,
  • SQL,
  • XML,
  • C#,
  • Lisp,
  • Object C,
  • JavaScript,
  • Ruby,
  • 8085 Assembler, and
  • x86 Assembler.

È un plugin molto utile per documentazione tecnica che deve contenere alcuni estratti di codice sorgente, rende il documento leggibile come se stesse utilizzando una IDE.

Altri post su LibreOffice

Perseverance atterra su Marte

Il veicolo terrestre (rover) Perseverance che esplorerà i dintorni del cratere Jezero nell’ambito della missione Mars 2020, del Mars Exploration Program, è atterrato venerdì 18 febbraio 2021 alle 3:55 PM EST (le 21:55 in Italia) dopo aver percorso una traiettoria di 472 milioni di km in 203 giorni.

Va ad aggiungersi agli altri quattro rover che già sono su Marte: Pathfinder /Sojourner (1997) Spirit e Opportunity (2003) e Curiosity (2011). Però in più avrà un compagno di avventure: il drone Ingenuity.

Perseverance priam immagine dopo il landing
Questa è la prima immagine che il rover Perseverance della NASA ha inviato appena dopo essere atterrato su Marte il 18 febbraio 2021. La vista, da una delle telecamere di sicurezza di Perseverance, è parzialmente oscurata da una copertura antipolvere. Credits: NASA / JPL-Caltech.

Il rover, che ha una massa di 1026 kg ed è dotato di strumentazione con funzionalità di geologia e astrobiologia, percorrerà un cammino nei pressi del cratere Jezero, un cartere di 45 km di diametro formatosi 3,5 miliardi di anni fa, che gli scienziati ritengono fosse diventato il letto di un lago vulcanico (come il nostro lago di Bracciano) con un affluente con estuario a delta per studiarne le caratteristiche geologiche e tracce del clima antico. Contemporaneamente il laboratorio di astrobiologia cercherà tracce di microbi antichi.

I campioni prelevati da Perseverance verranno successivamente riportati a Terra da una seconda missione pianificata da NASA e ESA. Anche questa è una attività finora mai intrapresa.

Un vantaggio di questo di tipo di missione è che la strumentazione inviata è praticamente lo stato dell’arte in fatto di ricerca spaziale. Infatti il tempo di volo è di pochi mesi. Per missioni più lontane come quelle sui pianeti esterni, quando la sonda raggiunge l’obiettivo, la stumentazione a bordo è già obsoleta rispetto a quanto nel frattempo si è risuciti a produrre sulla Terra.

Strumentazione di bordo

La strumentazione di bordo è eccezionale: comprende, tra tutti i dispositivi installati:

  • una coppia di telecamere scientifiche Mastcam-Z, che costituiscono il sistema di visione e guida del rover e che possono ritrarre foto panoramiche steroscopiche a colori ad alta risoluzione,
  • il sistema MEDLI2 che contiene la strumentazione di ingresso in atmosfera, discesa e atterraggio come strumentazione di analisi dell’atmosfera
  • il sistema di collezione di reperti geologici Sample Gathering System,
  • il sistema SHERLOC (Scanning Habitable Environments with Raman & Luminescence for Organics & Chemicals ovvero il sistema indagine di ambienti abiltabili tramite la rilevazione di luminescenza e diffusione di Raman, da applicarsi a reperti chimici e biologici).
  • il sistema MOXIE (Mars Oxygen In-Situ Resource Utilization Experiment) che tenterà di generare ossigeno – l’atmosfera marziana è composta al 95% di CO2 e solo del 0,13% di ossigeno.
  • il RIMFAX (Radar Imager for Mars’ Subsurface Experiment) che usa una tecnologia Radar per esplorare il sottosuolo.

Per fare funzionare tutto questo laboratorio – e per portarlo in giro per il pianeta! – e far funzionare le trasmissioni radio c’è un generatore termoelettrico a radioisotopi multi missione (MMRTG) – un motore atomico che converte l’energia emessa dal decadimento di Plutonio-238 in elettricità attraverso il riscaldamento di una termocoppia – che gli consentirà di coprire un tragitto molto lungo, come illustrato nella prossima immagine:

Perseverance: il viaggio attorno al cratere Jezero.
Questa sovrapposizione di fotografie annotata raffigura un possibile percorso che il rover Mars 2020 Perseverance potrebbe intraprendere attraverso il cratere Jezero mentre indaga su diversi ambienti antichi che potrebbero essere stati abitabili. Credits: NASA/JPL-Caltech

La mascotte di Perseverance: Ingenuity

Tuttavia l’esplorazione marziana di Perseverance potrà iniziare soltanto a test conclusi sia per il rover (verranno effettuati test sulla strumentazione e sul software) e anche i test per il piccolo drone, o meglio l’elicottero marziano, Ingenuity (ingegnosità in Italiano, è un false friend :-)).

Questo elicottero usa dei motori che, per produrre una spinta sufficiente a tenerlo in volo, vengono fatti girare ad una velocità superiore a quella che sarebbe sufficiente sulla Terra per via della rarefazione dell’atmosfera di Marte. Infatti la pressione atmosferica media su Marte è di circa 7 hPa, mentre quella media sulla Terra è di circa 1013 hPa.

Per fare un paragone, la pressione al suolo di Marte è all’incirca quella che presenta l’atmosfera sulla Terra a 40 km di altezza.

L’importanza di Ingenuity è quella di costituire il primo esperimento di volo controllato in un’atomosfera non terrestre.

Ingenuity: Mars Helicopter Technology Demostration – il primo esperimento di volo controllato in atmosfera extraterrestre.
Credits: NASA/JPL-Caltech

Link utili



Google: la frequenza di rimbalzo collassa. Parte 2

Avevamo visto nel post precedente che un problema di configurazione aveveva fatto precipitare improvvisamente la frequenza di rimbalzo.

Per accorgerci di dove stia il problema avevo due strade, una un po’ più complicata e una semplice.

Frequenza di rimabalzo quasi a 0: che è successo?

Come ho già detto prima, il problema è la doppia invocazione di Google Analyitcs che viene scambiata per due pagine visitate, per cui sparivano i rimbalzi come per incanto.

Come prima cosa ho cercato sul web e ho trovato questa risorsa web che dava come suggerimento l’installazione di un plugin che controlla le informazioni scambiate dalla pagina con Analytics.

Il plugin si chiama Google Tag Assistant. L’ho installato su Chrome e in effetti mi ha segnalato che c’era questa doppia invocazione.

Un modo più semplice di accorgersene, senza installare altri plugin, è semplicemente quello di leggersi il sorgente HTML della pagina web (Ctrl-U in Chrome):

<script type='text/javascript' id='google_gtagjs-js-after'>
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-28350766-1');
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-28350766-1');
</script>

Scorrendo la pagina fino a dove si trovano i codici di Google (si cerca “UA-“) ho individuato il punto in cui c’era il codice di tracciamento ripetuto perché ogni plugin aggiungeva le stesse identiche istruzioni, che sono quelle che Google si aspetta.

Bastava toglierne uno, e quindi dovevo disinstallare uno dei due plugin di Google. Ho tenuto SiteKit e buttato l’altro.

A distanza di due giorni la situazione della frequenza di rimbalzo è tornata alla normalità come testimonia il grafico di Google Analytics:

La frequenza di rimbalzo risale
La frequenza di rimbalzo risale

Aul fatto che la frequenza di rimbalzo sia così alta be’… è un po’ quello che faccio anch’io con i siti web: mordo e fuggo. Ad esempio, il sito in cui ho trovato il suggerimento del Tag Assistant ha avuto da me esattamente un rimbalzo: ho trovato la risposta e me ne sono andato.

È un comportamento che un po’ tutti teniamo qualora si usi il web per trovare risposte alle domande.

È tutto.

Google: la frequenza di rimbalzo collassa. Che succede?

Google Analytics - la frequenza di rimbalzo collassa istantaneamente. Che sta succedendo?
Google Analytics

Mi è successa una cosa.

Un giorno mi accorgo che da un momento all’altro la frequenza di rimbalzo (bounce rate) del mio sito è passata da attorno al 90% allo 0.

Sì non è un sito che fa tutta sta audience… ma a me serve solo per studiare. E un po’ per farmi conoscere.

Frequenza di rimbalzo: il contesto

Di cosa stiamo parlando? La frequenza di rimbalzo è uno degli indici di bontà calcolati da Google Analytics.

Questo indice misura la percentuale di utenti che visitano una sola pagina del nostro sito, proveniendo da una ricerca di Google.

Come una palla da tennis, atterrano sul nostro sito e se ne vanno.

Non è molto confortante; magari siamo riusciti ad ottenere un buon rank sui motori di ricerca grazie ad una buona ottimizzazione SEO e la nostra pagina è cliccabile nella prima pagina di risultati, però il nostro sito non è in grado di catturare sufficiente attenzione dell’utente per convincerlo a rimanere e a visitare almeno un altra pagina o leggere un altro post.

Più sono le sessioni che generano una sola page view e più alta è la frequenza di rimbalzo. Quindi avere un’alta frequenza di rimbalzo è di per sé un indice indesiderabile.

Sarebbe bello che fosse bassa!

Che bello, improvvisamente la frequenza di rimbalzo è quasi a zero!

Eh… non è detto che sia sempre una buona notizia. Soprattutto quando il calo è improvviso. Una diminuzione graduale è più compatibile con il progressivo aumento dell’interesse che mano a mano cattura persone che passano nel nostro sito sempre più tempo e visitano più di una pagina (in media).

Frequenza di rimbalzo precipita
Drop della Frequenza di rimbalzo

Una diminuzione drastica nel giro di qualche giorno generalmente nasconde un problema tecnico abbastanza serio che mette a repentaglio l’attendibilità dei dati elaborati da Analytics.

Troppi plugin per gestire Google Analytics

Ho aggiunto un plugn molto figo per WordPress che si chiama Google Site Kit.

Fornisce 4 dashboard per 4 prodotti di Google come mostrato dalla figura seguente:

Site kit per studiare la frequenza di rimbalzo
Site kit per studiare la frequenza di rimbalzo

Ho inserito nelle impostazioni l’ID per collegare il mio sito a Google Anaytics (UA-XXXX…).

Sfortunatamente molto tempo fa avevo anche installato un plugin Google Analyticator per WordPress che in sostanza faceva lo stesso lavoro (senza però fornirmi i cruscotti consultabili in un solo posto)

Praticamente la compresenza di questi plugin duplicava le chiamate ad Analytics per ogni click, risultando in almento due pagine visitate per ogni click, quindi facendo praticamente sparire i rimbalzi.

Questo ha fatto collassare il bounce rate!

Ah va be’, era facile!

Be’, facile… come al solito il diavolo si nasconde nei dettagli. La parte difficile era capire che era proprio questo il problema 🙂

Come l’ho scovato?

Stay tuned per la seconda parte, coming soon!

Riconoscimento e sintesi vocale con Python

Riconoscimento e sintesi vocale con Python
Riconoscimento e sintesi vocale con Python

Riconoscimento e sintesi vocale: In questo articolo parlerò di due bellissime funzionalità di Python che non è nemmeno difficile testare: il riconoscimento vocale (speech recognizing) e la sintesi vocale.

Ho preso ispirazione dal sito copyassignment.com e mi sono un attimo studiato le librerie.

Analisi vocale (riconoscimento)

Il primo aspetto comprende i metodi con i quali viene analizzato il segnale audio.

Il parlato è un processo stocastico particolare nell’insieme dei suoni che ci circondano che ha delle caratteristiche peculiari. Vengono individuate all’interno del segnale audio cioè le caratteristiche come la frequenza, la presenza di determinati pattern:

  • segnali periodici, come le vocali o le mute “m”, “n”;
  • segnali aperiodici, come il suono “f” o “s” che assomigliano al rumore bianco
  • segnali “esplosivi” come le lettere “p”, “t” ecc.

e la suddivisione del segnale del parlato in fonemi. In sostanza analisi significa estrarre l’informazione dal parlato (analogico), ovvero riconoscere i fonemi e ricomporli per associarli a parole di una frase per poterla maneggiare come informazione di testo (digitale).

L’analisi vocale è basata sulla libreria Python speech_recognition che mette a disposizione una serie di API per l’analisi.

Sintesi vocale

La sintesi, viceversa, è la costruzione del segnale sonoro (analogico) del parlato a partire da una stringa di testo (digitale). Come assemblare gruppi di consonanti e di vocali per produrre i fonemi che compongono a loro volta le parole. La sintesi vocale è fornita dalla libreria pyttsx3.

pyttsx3 è una libreria di conversione “da testo a parlato” scritta in Python. A differenza di librerie alternative, può funzionare senza essere collegati a Internet ed è compatibile sia con Python 2 che con Python 3.

Prima di avventurarci su riconoscimento e sintesi vocale

Potreste anche direttamente andare nel sito di copyassignment.com se volete, ma qui posso risolvervi un paio di piccoli grattacapi dovuti alla mancanza di configurazione necessaria per eseguire questo programma.

Si tratta di farsi una minima idea del complesso di librerie che ci è nessario per passare al microfono al programma e dal programma agli altoparlanti.

Vi predigerisco già la pappa e vi illustro qual è lo stack su cui si basa il programma che in sostanza ci servirà per spegnere il computer:

sd.py  <----- il nostro programma
---------------------------------
speech_assignment / pyttsx3
---------------------------------
espeak                        (x)
---------------------------------
pyaudio
---------------------------------
PortAudio19                   (x)
---------------------------------
hardware (mike/speakers)
---------------------------------

L’ordine delle operazioni come ve lo presenta CopyAssignment.com è il seguente dove però non capiamo cosa stiamo facendo:

$ pip install pyaudio
$ pip install speechrecognition
$ pip install pyttsx3

Procedendo in quest’ordine però è molto probabile che vi troverete qualche gatta da pelare, come vediamo tra poco. Con (x) nello stack sopra ho contrassegnato le installazioni non citate da CopyAssignment.com

Installazione di pyaudio

marcob@jsbach:~$ pip install pyaudio

Se vi dovesse uscire questo errore

Building wheels for collected packages: pyaudio
   Building wheel for pyaudio (setup.py) 
   ERROR: Command errored out with exit status 1:
    ...

significa che non è installato l’header file portaudio.h, che è contenuto nel package portaudio19-dev. Dobbiamo pertanto installarlo preventivamente.

Installazione di PortAudio19 (x)

marcob@jsbach:~$ sudo apt-get install portaudio19-dev

PortAudio è una libreria per I/O audio portabile progettata per la gestione multipiattaforma dell’audio. Dell’audio in generale, intendiamo. non solo la voce umana.

È la libreria che permette di generare suoni e di leggere dalla periferica del microfono e convertire il segnale analogico in digitale. È la libreria a più basso livello di cui abbiamo bisogno.

Usa un meccanismo di callback per richiedere l’elaborazione audio. L’audio può essere generato in svariati formati, inclusa virgola mobile a 32 bit, e sarà convertito internamente nel formato nativo.

Riprovando a questo punto, a me è terminata con successo l’installazione di pyaudio; posso procedere con il package dell’analisi vocale.

Installazione di speech_recognition

arcob@jsbach:~$ pip install speechrecognition
Collecting speechrecognition
  Downloading SpeechRecognition-3.8.1-py2.py3-none-any.whl (32.8 MB)
     |████████████████████████████████| 32.8 MB 43 kB/s 
Installing collected packages: speechrecognition
Successfully installed speechrecognition-3.8.1

A questo punto si deve installare con pip il package Python che per la produzione del parlato

Installazione di pyttsx3

marcob@jsbach:~$ pip install pyttsx3
Collecting pyttsx3
  Downloading pyttsx3-2.90-py3-none-any.whl (39 kB)
Installing collected packages: pyttsx3
Successfully installed pyttsx3-2.90

Anche questo è andato bene. Questo è il sorgente del programma che potete trovare in CopyAssignment e che ho salvato in un file sd.py, modificando in italiano le stringhe di colloquio con il computer: lo posiamo avviare

# Importing required modules
# importing pyttsx3
import pyttsx3
# importing speech_recognition
import speech_recognition as sr
# importing os module
import os


# creating take_commands() function which
# can take some audio, Recognize and return
# if there are not any errors
def take_commands():
    # initializing speech_recognition
    r = sr.Recognizer()
    # opening physical microphone of computer
    with sr.Microphone() as source:
        print('Ascolto...')
        r.pause_threshold = 0.7
        # storing audio/sound to audio variable
        audio = r.listen(source)
        try:
            print("Riconoscimento")
            # Recognizing audio using google api
            Query = r.recognize_google(audio)
            print("Questo è ciò che ho capito='", Query, "'")
        except Exception as e:
            print(e)
            print("Prova a ripetere")
            # returning none if there are errors
            return "None"
    # returning audio as text
    import time
    time.sleep(2)
    return Query


# creating Speak() function to giving Speaking power
# to our voice assistant
def Speak(audio):
    # initializing pyttsx3 module
    engine = pyttsx3.init()
    voice_id = 'italian'
    engine.setProperty('voice', voice_id)
    # anything we pass inside engine.say(),
    # will be spoken by our voice assistant
    engine.say(audio)
    engine.runAndWait()

Speak("Vuoi spegnere il computer, Marco?")

while True:
    command = take_commands()
    if "no" in command:
        Speak("Ok Marco, lascio acceso")
        break
    if "yes" in command:
        # Shutting down
        Speak("Spengo")
        os.system("shutdown -h now")
        break
    Speak("Puoi ripetere? grazie")

Salvo il tutto in un file sd.py e provo ad eseguirlo

marcob@jsbach:~$ python3 sd.py
 OSError: libespeak.so.1: cannot open shared object file: No such file or directory

Questo è un problema che si situa ad un livello intermedio tra portaudio19 e Python (speech_assignment / pyttsx3): non risulta infatti installata nel sistema la libreria per il riconoscimento e la sintesi vocale che saranno invocate dalle librerie Python: espeak.

Installazione di espeak (x)

eSpeak è un sintetizzatore vocale software open source compatto per inglese e altre lingue, per Linux e Windows.
eSpeak utilizza un metodo di “sintesi formante”. Ossia costruisce i suoni in base ad un modello fisico dell’apparato fonatorio umano e utilizza la sovrapposizione di segnali sinusoidali, ovvero le serie di Fourier, per determinare il contenuto armonico del segnale.

Ciò consente di fornire molte lingue in dimensioni ridotte. Il parlato prodotto è chiaro e può essere utilizzato ad alta velocità, ma non è così naturale o fluido come sintetizzatori più grandi basati su registrazioni vocali umane. Ricorda un po’ i primi vocoder anni ’80. Se riprodotti su un impianto HiFi anche discreto, il suono risulta un po’ meno “cibernetico”.

marcob@jsbach:~$ sudo apt install espeak-ng-espeak
Lettura elenco dei pacchetti... Fatto
...
 Elaborazione dei trigger per doc-base (0.10.9)...
 Elaborazione 1 file doc-base aggiunto...
marcob@jsbach:~$

A questo punto manca solo il componente che collega python a espeak:

marcob@jsbach:~$ sudo apt install python3-espeak

A questo punto possiamo testare il programma.

Proprietà della libreria speech_recognition

Di questa libreria noi utilizzeremo in particolare la libreria Google di riconoscimento dei fonemi, il metodo recognize_google della classe Recognizer del package speech_recognition (sr).

L’unico parametro che viene impostato è

pause_threshold

ossia la soglia di silenzio che permette di separare le parole. Viene impostato a 0.7.

La variabile audio contiene un file mp3 che viene scritto dal metodo listen() della classe sr.Microhpone().

Alla fine il metodo magico che trasforma il suono (audio) ìn stringa (Query) è il seguente

Query = r.recognize_google(audio)

La classe è scritta bene, rende l’idea di cosa il programma stia facendo e con quali periferiche stia interagendo.

Proprietà della libreria pyttsx3

Questa componente trasforma la stringa in parlato ed è utilizzata per l’interfaccia human computer di interrogazione delle direttive dell’operatore. Ho selezionato il parlato in italiano (tra i molti disponibili):

voice_id = 'italian'
engine.setProperty('voice', voice_id)

e finalmente viene invocato il metodo che produce il suono:

engine.say(audio)
engine.runAndWait()

Se vi è piaciuto, mettete un like e/o ricondividetelo nel vostro social network preferito.