Più che una challenge, questo è un’approfondimento su una peculiarità di Python: la mutabilità nei tipi di variabili. In Python i tipi di dato si dividono in mutabili e immutabili. Immutabile non significa che non …
Benvenuti nella raccolta di “Python Challenges”, un viaggio attraverso la risoluzione di problemi con un certo grado di difficoltà utilizzando il potente linguaggio di programmazione Python. In questo articolo, esploreremo una serie di sfide stimolanti, …
L’Ottica sembra diventata la regina delle discipline all’interno della Fisica: già nel 2022 erano stati premiati con Nobel tre fisici (Aspect, Clauser e Zeilinger) per i lavori sui fotoni e il loro contributo allo sviluppo …
Ho preso parte alla visita guidata dei laboratori dell’INFN di Legnaro (Padova), organizzata dalla Fondazione Ingegneri di Padova che si è svolta martedì 11 luglio 2023 ed è stata un’occasione per mettere il naso in …
Al corso di Complementi di Elettronica Applicata, un corso del quinto anno tenuto dal prof. Gaetano Malesani, forse era il 1992, oltre a studiare tante belle cose come le PLL o gli alimentatori switching, il …
Più che una challenge, questo è un’approfondimento su una peculiarità di Python: la mutabilità nei tipi di variabili.
In Python i tipi di dato si dividono in mutabili e immutabili.
Immutabile non significa che non si può cambiare, come suggerirebbe la parola (a mio modestissimo parere la scelta del termine è molto infelice), significa invece che posso cambiare il dato e che in realtà il compilatore, nel sottobosco, lascerà immutata la variabile precedentemente definita e creerà un’altra variabile con il nuovo valore!
Breve iter per exempla
Vediamo una rassegna con esempi per alcuni tipi di dato.
Variabili
Le variabili sono immutabili. Per verificarlo stampiamo l’indirizzo della locazione di memoria che contiene la variabile.
a = 1
print("a=", a)
print("address=", id(a))
a = 2
print("a=", a)
print("address=", id(a))
Come si vede, assegnando un nuovo valore alla stessa variabile, in realtà Python ne ha creata un’altra e se mi riferisco alla variabile “a” il puntatore ad essa sarà l’ultimo ad essere stato definito.
La variabile precedente non viene cambiata (questo è il senso di immutabile) e va direttamente a fare parte del garbage.
Quindi: per cambiare valore ad una variabile, Python la ridefinisce.
Anche se modifico il valore di una variabile tramite un’operazione, il runtime occupa una seconda locazione di memoria:
Qui la a che viene ridefinita è in effetti un’altra variabile rispetto a quella contenuta nella lista q che, a sua volta, è diversa dalla prima a che avevo definito:
Come si vede l’indirizzo dell’oggetto (l’istanza della classe) non cambia ma, all’interno della classe, le sue proprietà sono “variabili” e sono quindi immutabili, tant’è che se ne cambio il valore, cambia anche l’identificativo.
Attenzione a non confondersi, perché l’indirizzo di una variabile di un tipo immutabile cambia, mentre l’indirizzo di una variabile del tipo mutabile non cambia 🙂
Tuple
Le tuple sono simili alle liste: a differenza di queste si definiscono con le parentesi tonde e, diversamente dagli altri oggetti, sono immutabili:
Attenzione che c’è un’altra differenza sostanziale con le liste: non posso manipolare i singoli elementi della tupla, allo stesso modo di quanto accade con le stringhe:
Output:
Errore! 'tuple' object does not support item assignment
s = "ciao"
try:
s[0] = "m"
except TypeError as e:
print("Errore!", e)
Uno pensa che il programma stampi miao invece di ciao ma si sbaglia:
Output:
Errore! 'str' object does not support item assignment
Attenzione: l’utilizzo delle parentesi tonde per definire una tupla espone Python ad una pericolosa ambiguità: come faccio a definire una tupla con un solo elemento senza confondere la notazione con quella di una funzione?
Risposta: una tupla con un solo elemento (un singoletto) si scrive con largomento e la virgola:
>>> t=(1,)
>>> t
(1,)
Tuple packing
Le tuple sono formidabili perché consentono cose molto performanti come questa:
>>> a, b, c = 1, ['a', 0], 3.14
>>> a
1
>>> b
['a', 0]
>>> c
3.14
>>>
Alla fine rimangono solo le variabili, la tupla viene distrutta subito dopo l’assegnazione. Questo consente di fare questa operazione molto elegante:
>>> a, c = 2, 3.14
>>> a, c
(2, 3.14)
>>> a, c = c, a
>>> a, c
(3.14, 2)
Il swap di variabili è stato fatto senza utilizzare una terza variabile, come si fa di solito.
Attenzione perché questo non è mai scritto chiaramente: sono mutabili nel senso che posso modificare un singolo elemento. Se invece ridefinisco l’intera lista, anch’essa si comporta come un oggetto immutabile:
Gli oggetti immutabili sono quelli i cui valori non possono essere modificati dopo la creazione.
Esempi di tipi di dati immutabili in Python includono tuple, stringhe e interi.
Quando si modifica un oggetto immutabile, in realtà si crea un nuovo oggetto con il valore modificato.
Mutabilità:
Gli oggetti mutabili sono quelli i cui valori possono essere modificati dopo la creazione.
Esempi di tipi di dati mutabili in Python includono liste, dizionari e insiemi.
La modifica di un oggetto mutabile influisce direttamente sull’oggetto stesso, senza crearne uno nuovo.
In modo abbastanza elementare si potrebbe dire che le variabili contengono riferimenti agli oggetti, mentre gli oggetti vivono in posizioni ben definite della memoria [2].
La ratio dietro a questa partizione.
Ma qual è la ragione che sta dietro alla mutabilità delle variabili di Python? Perché alcuni tipi di dato sono mutabili e altri no?
La ragione per avere oggetti mutabili e immutabili in Python è legata a diverse considerazioni di progettazione e prestazioni. In particolare mi sono chiesto perché l’utilizzo di tipi immutabili sia considerato più efficiente e in effetti non è esattamente così:
Assegnazione diretta: Gli oggetti immutabili possono essere assegnati direttamente in memoria, poiché il loro stato non cambia. Questo elimina la necessità di allocare e deallocare memoria dinamicamente, rendendo il processo più veloce.
Condivisione sicura: Poiché gli oggetti immutabili non possono essere modificati dopo la creazione, possono essere condivisi in modo sicuro tra diverse parti del codice senza preoccuparsi delle modifiche accidentali da parte di altre parti. In particolare sono thread-safe. Questo riduce il rischio di condizioni di conflitto e semplifica la gestione della concorrenza.
Hashing efficiente: Gli oggetti immutabili sono hashabili, il che significa che possono essere utilizzati come chiavi in strutture dati come dizionari e insiemi. Questo è possibile perché l’hash di un oggetto immutabile sarà costante durante il suo ciclo di vita.
Ottimizzazioni del compilatore: La natura immutabile dei dati consente al compilatore di eseguire ottimizzazioni più aggressive. Ad esempio, il compilatore può decidere di memorizzare una singola copia di un valore immutabile utilizzato in più parti del codice anziché allocarne una copia separata per ciascuna occorrenza.
Semplifica il debug: Gli oggetti immutabili semplificano il processo di debug perché il loro stato non può essere modificato. Questo rende più facile ragionare sul comportamento del programma in fasi diverse dell’esecuzione.
Tuttavia, gli oggetti immutabili hanno anche degli svantaggi, come ad esempio il costo di creare nuovi oggetti ogni volta che si vuole modificare il valore di una variabile. Questo può portare a un overhead di memoria e a una maggiore pressione sul garbage collector [3] (per una spiegazione sul funzionamento del garbage collector si può fare rifermiento ad un mio articolo ,sempre in questo blog; l’articolo spiega come funziona il GC in Java, ma il concetto è simile anche per Python). Inoltre, gli oggetti immutabili possono essere meno flessibili e intuitivi da usare rispetto agli oggetti mutabili, soprattutto quando si lavora con strutture dati complesse.
In sintesi, la scelta tra mutabilità e immutabilità dipende dalle esigenze specifiche del programma. Python offre entrambe le opzioni per fornire ai programmatori flessibilità e controllo sulla gestione dei dati.
Spariti tutti i dubbi sulle proprietà di mutabilità e la differenza tra tuple e liste in Python? 😉
Ma allora già che ci siamo, dai… aggiungiamo la challenge. Non ha molto a che fare con l’argomento tratttato. Diciamo che studiando questa challenge poi sono approdato al problema della mutabilità, per questo lo presento qua.
Challenge di oggi
La funzione round trasforma un numero a virgola mobile in un intero. È curioso analizzarne il comportamento della funzione nei punti discriminanti come i seminteri: arrotondo per eccesso o per difetto?
Esempio:
print("round(5.5) = ", round(5.5))
Output:
round(5.5) = 6
Quindi mi aspetto che round(6.5)=7. Controlliamo:
print("round(6.5) = ", round(6.5))
Output:
round(6.5) = 6
Com’è possibile!!?!
Risposta
Il rounding operato dalla funzione built-in di Python si chiama arrotondamento di Banker: si tratta di un algoritmo per arrotondare le quantità a numeri interi, in cui i seminteri vengono arrotondati all’intero pari più vicino. Pertanto, 0,5 viene arrotondato per difetto a 0; 1,5 arrotonda a 2. Un algoritmo simile può essere costruito per arrotondare ad altri insiemi oltre agli interi (in particolare, insiemi che hanno un intervallo costante tra membri adiacenti) [3].
Riferimenti
Christian Hill, Learning Scientific Programming with Python, 2020, Cambridge University Press
Leodanis Pozo Ramos, Python’s Mutable vs Immutable Types: What’s the Difference?, 2023, Real Python
Benvenuti nella raccolta di “Python Challenges”, un viaggio attraverso la risoluzione di problemi con un certo grado di difficoltà utilizzando il potente linguaggio di programmazione Python. In questo articolo, esploreremo una serie di sfide stimolanti, ciascuna progettata per mettere alla prova le vostre abilità e ampliare la vostra comprensione della programmazione.
L’Arte di superare le Python Challenges
La risoluzione di problemi è l’essenza della programmazione. Ciò che rende Python così straordinario è la sua flessibilità e facilità d’uso, il che lo rende ideale per affrontare una vasta gamma di sfide computazionali. Durante il nostro percorso, affronteremo problemi di diversa natura, dai calcoli matematici avanzati all’analisi di dati complessi.
Struttura degli Esempi
Ogni esempio sarà presentato con un problema specifico e seguito da una soluzione dettagliata scritta in Python. Per rendere l’esperienza più istruttiva, useremo approcci e tecniche comuni, spiegando passo dopo passo il ragionamento dietro a ciascuna soluzione.
Destinatari
Questo articolo è pensato per programmatori di tutti i livelli. Se sei un principiante, troverai esempi di problemi che ti sfideranno ma allo stesso tempo ti aiuteranno a comprendere i concetti fondamentali. Se sei un programmatore esperto, sarai stimolato da sfide più avanzate che metteranno alla prova la tua abilità nel trovare soluzioni efficienti.
Pronti per la Sfida?
Preparatevi per affrontare le sfide che vi presenteremo. Ogni problema è un’opportunità di apprendimento, un modo per affinare le vostre capacità di pensiero computazionale e diventare un programmatore più esperto.
Senza ulteriori indugi, iniziamo il nostro viaggio attraverso gli “Python Challenges”!
La prova di oggi
Da un esercizio di proficiency:
Write a function add_n that takes a single numeric argument n, and returns a function. The returned function should take a vector v as an argument and return a new vector with the value for n added to each element of vector v. For example, add_n(10)([1, 5, 3]) should return [11, 15, 13].
Ho risolto questo problema definendo una funzione all’interno di un’altra funzione (ma magari c’è anche un altro modo):
def add_n(n):
def sum_scalar(v):
w = []
for i in range(0, len(v)):
w.append(n + v[i])
return w
return sum_scalar
Poi la funzione viene invocata nel modo che segue: prima viene definito un puntatore alla funzione passando il primo parametro, dopodiché si chiama il puntatore passando il secondo parametro:
v = [1, 5, 3]
y = add_n(10)
print("The value of a + v is", y(v))
Output:
$ python self_assessment.py
The value of a + v is [11, 15, 13]
Fig. 1 – Agostini, Krausz, L’Hullier insigniti del premio Nobel per la Fisica 2023
L’Ottica sembra diventata la regina delle discipline all’interno della Fisica: già nel 2022 erano stati premiati con Nobel tre fisici (Aspect, Clauser e Zeilinger) per i lavori sui fotoni e il loro contributo allo sviluppo dell’Informazione Quantistica: la produzione di fotoni entangled viene fatta con i laser. Quest’anno si parla sempre di laser da un punto di vista più “meccanico”, per così dire: sono stati premiati Pierre Agostini (Ohio State University, Columbus, USA), Ferenc Krauss (Max Planck Institute of Quantum Optics, Garching, Germany; Ludwig-Maximilians-Universität München, Munich, Germany) e Anne l’Hullier (Lund University, Lund, Sweden) per i loro lavori sulla produzione di impulsi laser ultrabrevi.
Quello di cui voglio parlarvi qui non è esattamente il premio Nobel per la Fisica 2023 ma qualcosa che ha a che vedere con questo premio. La maggior parte delle informazioni che uso in questo articolo le ho scritte in una tesina per il corso di Quantum Information che ho seguito nell’ambito del dottorato di Ricerca in Ingegneria delle Telecomuncazioni tenuto nell’A.A. 2015-2015 dai proff. Paolo Villoresi e Giuseppe Vallone.
Poi concluderò con un cenno all’argomendo degli impulsi ultrabrevi ad attosecondo che sono l’oggetto del premio Nobel 2023 per la Fisica.
La motivazione per esteso del premio ai tre fisici che è stata data dalla Reale Accademia delle Scienze di Svezia è la seguente:
For experimental methods that generate attosecond pulses of light for the study of electron dynamics in matter
Dunque il premio è per l’invenzione di metodi sperimentali che generano impulsi di luce di durata dell’ordine dell’attosecondo e poi è citato l’impiego di questa tecnica: quella di osservare la dinamica degli elettroni nella materia.
Ora, la traiettoria vera e propria degli elettroni intesa come descrizione della curva nello spazio delle fasi (posizione, quantità di moto o impulso) non la possiamo vedere: in quanto particelle quantistiche, le loro variabili dinamiche come posizione e impulso (dette variabili coniugate) non possono essere note simultanemente con precisione arbitraria per il noto principio di indeterminazione di Heisenberg: il prodotto delle incertezze delle loro misure è maggiore o uguale ad una quantità piccola:
\Delta p \Delta x \geq \frac{\hbar}{2}
dove \Delta p è l’incertezza sulla misura dell’impulso (che è proporzionale alla velocità) e \Delta x è l’incertezza sulla posizione. \hbar(“acca tagliato”) è la costante di Dirac, un numero piccolissimo, ed è pari alla costante di Planckh – che vedremo dopo – divisa per 2 \pi. Per questo la constante di Dirac è detta anche costante di Planck ridotta. La relazione è di proporzionalità inversa, per cui se ho una piccola incertezza sulla posizione ho grande incertezza sulla velocità e viceversa.
Però possiamo conoscere con precisione una delle due variabili e la tecnica degli impulsi ultrabrevi ci aiuta in questo.
Quello che volevo raccontare in questo articolo è il modo che ho imparato per produrre impulsi ultrabrevi: si potrebbe pensare di realizzare un impulso ultra breve interrompendo il raggio laser con un otturatore meccanico o elettronico, del tipo utilizzato nelle fotocamere digitali o negli smartphone.
Nulla di tutto questo.
La risoluzione temporale con otturatori elettronici arriva al massimo all’ordine del microsecondo (1 \mu s = 10^{-6} s = 0,000001 s = 1 milionesimo di secondo). Quelli meccanici arrivano a malapena al millesimo di secondo.
Io ho visto funzionare sistemi di produzione di impulsi dell’ordine del femtosecondo; il Nobel è stato vinto per una tecnica che ha permesso di abbassare di ulteriori tre ordini di grandezza la durata di questi impulsi e raggiungere gli attosecondi.
Quest’anno è stato molto divertente vedere testate giornalistiche attribuire il premio agli scienziati per la scoperta o l’invenzione dell’attosecondo. L’attosecondo è solo un sottomultiplo del secondo, non è un’invenzione. Il premio è invece per lo sviluppo della tecnica che consente di produrre impulsi della durata degli attosecondi. Quindi prima di inoltrarci nel terreno della tecnica degli impulsi ultrabrevi rivediamo questa nomenclatura.
La durata degli impulsi: i nomi degli ordini di grandezza.
Fermiamoci un attimo a rivedere questi prefissi standard definiti nel Sistema Internazionale di Misura ISO per indicare le frazioni dell’unità.
sottomultipli
prefisso
simbolo
potenza
multipli
prefisso
simbolo
potenza
millesimo
milli
m
10^{-3}
migliaia
kilo
k
10^3
milionesimo
micro
\mu
10^{-6}
milioni
Mega
M
10^6
miliardesimo
nano
n
10^{-9}
miliardi
Giga
G
10^9
millesimo di miliardesimo
pico
p
10^{-12}
migliaia di miliardi
Tera
T
10^{12}
milionesimo di miliardesimo
femto
f
10^{-15}
milioni di miliardi
Peta
P
10^{15}
miliardesimo di miliardesimo
atto
a
10^{-18}
miliardi di miliardi
Exa
E
10^{18}
Tabella dei multipli, e sottomultipli dell’unità, con potenza di dieci, prefisso e simbolo.
Ne esisterebbero altri quattro (due per i multipli , Zetta e Yotta, e due per i sottomultipli, zepto e yocto, (parliamo sempre di multipli di potenze di 10^{\pm 3}) ma sono così esotici che tralascio.
Scorrendo la tabella, ci rendiamo conto che gli ordini di grandezza più in basso sono molto al di fuori del nostro senso comune. A immaginare un chilometro, un Gigabyte o un microsecondo forse ci arriviamo. Gli altri prefissi descrivono invece quantità troppo grandi o troppo piccole, che probabilmente sfuggono alla nostra immaginazione.
Ma una proporzione può esserci d’aiuto.
Il numero di femtosecondi in un secondo è 10^{15}. Ci sono perciò più femtosecondi in un secondo, che giorni solari in tutta la storia dell’universo dal Big Bang a oggi (l’età dell’Universo in giorni è pari a circa 12 \times 10^{12} mentre un secondo contiene 10^{15} femtosecondi).
D’altra parte, il numero di attosecondi contenuti in un secondo è 10^{18}. Ci sono più attosecondi in un secondo, che secondi in tutta l’età dell’Universo (che sono circa 4 \times 10^{17}).
Come vengono prodotti impulsi dell’ordine del femtosecondo
L’argomento è la durata estremamente breve di questi impulsi. La capacità di generare impulsi laser così brevi è fondamentale per molte applicazioni scientifiche e tecnologiche avanzate.
Questi impulsi laser sono così corti che possono essere utilizzati per esplorare e studiare eventi molto veloci o su scale piccolissime. Ad esempio, vengono usati per studiare cosa succede quando le particelle microscopiche si muovono o interagiscono tra loro.
Gli impulsi laser ultrabrevi sono brevissimi flash di luce concentrata. Per capire meglio, immaginate una torcia elettrica che emette un lampo di luce molto breve, tanto breve che dura solo una frazione di secondo. Gli impulsi laser ultrabrevi sono simili, ma la loro luce è estremamente concentrata e dura solo per un tempo infinitesimale.
Una delle tecniche usata per produrre impulsi al femtosecondo l’ho studiata con il prof. Paolo Villoresi nel 2015 ai Laboratori LUXOR dell’Istituto di Fotonica e Nanotecnologie (IFN) del CNR di via Trasea a Padova, e si chiama mode locking. È utile prima una introduzione a questi argomenti.
Laser
Il laser è una speciale lampada in cui una sorgente convenzionale (una lampada normale) è racchiusa in una cavità tra due specchi parabolici (cavità di Fabry-Perot).
Fig. 2 – Cavità di Fabry-Perot con mezzo attivo e sistema di pompa
Le varie frequenze contenute nella luce prodotta dalla lampada si riflettono avanti e indietro sugli specchi, ma solo le lunghezze d’onda che sono sottomultiple della lunghezza della cavità sopravvivono costituendo onde stazionarie: è lo stesso principio di funzionamento delle corde di una chitarra: si impone solo un’onda stazionaria tra ponticello e capotasto – o il dito del chitarrista – più i suoi sottomultpli – le armoniche).
Fig. 3 – Onde stazionarie sulle corde producono il suono della chitarra (ref: https://mathone.it)
Poi c’è un componente fondamentale che distingue un laser da una semplice cavità risonante: quest’onda stazionaria investe uno spessore di materiale attivo – che può essere solido, liquido o gas – posto al centro della cavità, un materiale che amplifica in un modo molto selettivo – che vedremo – una determinata gamma di frequenze e smorza tutte le altre, per cui i modi – le frequenze – che sopravvivono sono molto pochi ma vengono amplificati tantissimo. A seconda del materiale attivo abbiamo vari tipi di colori:
laser a rubino, che emette sui 694.3 nm (rosso)
laser Nd:YAG (una miscela contenente l’1% di Neodimio e Granato di Ittrio e Alluminio): emette due armoniche, rispettivamente 1064 nm (infrarosso), 532 nm (verde)
laser a eccimeri, 157 nm (ultravioletto)
ma ce ne sono moltissimi altri. Per esempio nei lettori di compact disc i laser sono realizzati con un diodo a semiconduttore.
Aggiungo anche che i laser possono essere realizzati in un’amplissima gamma di potenze, dal diodo laser che spara impulsi dentro ad una fibra ottica ai laser per tagliare le lamiere.
Amplificatori di luce
Vediamo ora il principio secondo cui viene amplificata la luce.
Il modello atomico che possiamo prendere come riferimento è l’atomo di Bohr (quello di Bohr è oramai un vecchio modello superato dal modello a orbitali ma per quello di cui parliamo qui funziona benissimo lo stesso), un modello con
un nucleo centrale – che non entra nel gioco
ed elettroni – questi invece sono i protagonisti – disposti in orbite circolari ad energia quantizzata. Cioè gli elettroni non possono stare dove vogliono ma devono occupare stati con numeri quantici ben definiti, il principale dei quali è l’energia che non può avere un valore qualsiasi ma può assumere solo valori discreti. Il numero quantico dell’energia determina il raggio dell’orbita.
I fotoni che compongono la luce vengono prodotti dal “rilassamento” degli elettroni all’interno dell’atomo: quando passano da uno stato ad energia superiore ad uno di energia inferiore (in questo senso è da intendere il relax), riasciano un quanto di luce di frequenza proporzionale alla differenza di energia dei due livelli.
\nu = \frac{E_{sup} - E_{inf}}{h}
Il coefficiente di proporzionalità è detto costante di Planck e vale circa 6,63 \times 10^{-34} J \cdot s.
Questo fenomeno si chiama emissione. Se avviene in modo naturale si dice emissione spontanea.
Al contrario, l’assorbimento di un quanto di luce fa saltare l’elettrone da un orbitale meno energetico ad uno più energetico.
Il laser sfrutta questo meccanismo di assorbimento (durante la fase di pompa) ed emissione e lo realizza in modo continuo.
Il mezzo attivo aggiunge alla radiazione di pompa, con i suoi atomi, radiazione della stessa frequenza e fase dell’onda di pompa attraverso l’emissione stimolata di radiazione, grazie a elettroni che in una prima fase vengono pompati (si dice propri così nel gergo) a livelli energetici superiori assorbendo l’energia della lampada (che in questo contesto viene chiamata pompa) e poi ricadono nel loro livello energetico fondamentale, emettendo fotoni dello stesso colore (frequenza) e della stessa fase. Questo fenomeno dell’emissione stimolata della radiazione è stato studiato da Albert Einstein (eh sì, si è occupato di un sacco di cose oltre alla Relatività) che ha scritto le equazioni che si usano tutt’ora per progettare i laser: si tratta di quella che oggi viene chiamata teoria semiclassica dell’assorbimento della radiazione che formulò nel suo articolo del 1917 intitolato “Zur Quantentheorie der Strahlung” (Sulla teoria quantistica della radiazione), noto anche come “On the Quantum Theory of Radiation”.
LASER è l’acronimo per Light Amplification by Stimulated Emission of Radiation.
Da queste caratteristiche proviene il fatto che il laser è una sorgente praticamente quasimonocromatica e quasirettilinea (nel senso che il fascio non si allarga come avviene con i fanali dell’automobile e rimane pressoché rettilineo; in realtà è un fascio la cui divergenza si può controllare molto bene ed è detto fascio gaussiano). E il meccanismo di emissione stimolata di radiazione luminosa del mezzo attivo fa sì che le onde siano anche in fase per cui il laser si dice costituire una sorgente di radiazione coerente: i fotoni vengono emessi in fase come un’orchestra d’archi in cui gli archetti si muovono su e giù tutti insieme.
Tra gli effetti che caratterizzano una sorgente coerente rispetto alla luce di una lampadina o di un normale LED, citiamo la brillanza (il fatto che anche se molto sottile il fascio ha una grande intensità) e il rumore di puntinatura (speckle noise) che è quel riflesso di piccolissimi puntini brillanti dovuti all’interferenza di onde coerenti che raggiungono i nostri occhi quando un fascio laser colpisce un corpo come un muro o i granelli di polvere nell’aria.
Fig. 4: Speckle Noise o rumore di puntinatura
Tecnica del mode locking e impulsi di durata dei femtosecondi
Gli impulsi si ottengono facendo funzionare il laser in modo intermittente. Questa tecnica consente la produzione di treni di impulsi ultrabrevi, cioè della durata dell’ordine del pico o del femtosecondo. Durate cosı̀ brevi sono molto al di là delle possibilità dell’elettronica convenzionale per produrre commutazioni del guadagno o delle perdite nella cavità, che sono altre due tra le tecniche per ottenere laser impulsati.
Un laser normalmente oscilla su diversi modi longitudinali le cui frequenze sono separate da una spaziatura tipica del risuonatore di Fabry-Perot:
\nu_F = \frac{1}{T_F} = \frac{c}{2d}
d essendo la distanza tra gli specchi del risuonatore, T_F il periodo di attraversamento della luce della distanza complessiva avanti e indietro della cavità, quindi 2d.
Pensate che questo è esattamente il modo con il quale si determina anche la frequenza a cui oscilla una corda di chitarra: più corta la corda, più alto il suono (nel senso della frequenza, non del volume).
Questi modi di solito oscillano indipendentemente, ma per mezzo di un intervento esterno è possibile introdurre un accoppiamento, agganciando le fasi dei singoli modi.
In generale la sovrapposizione di N modi di frequenza multipla della frequenza centrale ν0 :
\nu_q = \nu_0 + q \nu_F \;\;\;(1)
(con q numero intero: non usiamo i soliti indici i, j, h, k perché sono simboli che in questo contesto hanno tutti un significato particolare) dà origine ad un campo:
dove i fattori A_q sono dei numeri complessi che caratterizzano il modulo e la fase di ogni modo, z è l’ascissa misurata lungo l’asse della cavità risonante.
Il modulo |A_q| è funzione della curva di guadagno del mezzo e delle perdite, mentre la fase arg A_q è casuale, a meno che non interveniamo per agganciare queste fasi tra di loro
Supponendo che i moduli dei modi siano tutti uguali e in fase, si ottiene, usando la (1) e raccogliendo l’esponenziale con \nu_0 :
L’intensità è rappresentata, in funzione del tempo, nella fig. 2 in cui si vede il treno di impulsi e anche quanto essi possano essere resi brevi. Questa durata nei laser reali può arrivare anche a 10 fs. La spaziatura temporale tra gli impulsi è T_F = 2d/c mentre la durata di un impulso è pari a T_F/N. Quindi agganciando un gran numero di modi (N → ∞) si può rendere questa durata dell’impulso molto piccola.
Fig. 5 – Treno d’impulsi risultanti dalla sovrapposizione di modi con fase agganciata (elaborazione mia)
Quando ho studiato queste cose, la necessità di produrre impulsi ultrabrevi e molto intensi era quella di scatenare un fenomeno che si chiama Spontaneous Parametric Down-Conversion (SPDC) che consiste nel creare in un cristallo un’onda secondaria in aggiunta a quella incidente sfruttando la non linearità del cristallo, che corrisponde alla creazione di due fotoni entangled che servono per gli esperimenti di misura della violazione della diseguaglianza di Bell. Per questo esperimento erano necessari tre laser in cascata:
un laser a semiconduttore che emette sulla lunghezza d’onda di 808 nm (viola), il quale pompa
un laser a neodimio Nd-YAG (a 4 livelli) che emette sulla lunghezza d’onda 1064 nm, del quale si seleziona la seconda armonica (532 nm), con la quale si pompa
un laser Titanio-zaffiro Ti3+:Al2O3 che viene fatto funzionare in mode locking nuovamente sulla lunghezza d’onda di 808 nm
e solo con la potenza raggiunta dal terzo stadio si poteva generare il fenomeno dell’SPDC nella lamina di cristallo birifrangente (ad esempio un cristallo di calcite come quello di Figura 6).
Un cristallo birifrangente di calcite (Wikimedia commons: APN MJM)
I laser a femtosecondo trovano oggi grande impiego in chirurgia oftalmica grazie alla loro versatilità e controllo di precisione sulla dimensione dello spot (il diametro del fascio che colpisce il tessuto) e sulla quantità di energia (che è il prodotto della potenza per il tempo) necessaria per colpire i tessuti. È il bisturi più preciso mai realizzato e può operare sulla retina senza la necessità di aprire il bulbo oculare.
Sempre più difficile: generare impulsi di durata dell’attosecondo
La generazione di impulsi così brevi è realizzata unendo due tecniche:
la generazione di armoniche di ordine elevato (HHG, High Harmonics Generation) e
l’aggancio di fase già visto (mode locking).
In questa tecnologia viene costruito un laser con un mezzo attivo gassoso in cui la lampada di pompa è un altro laser che in questo caso produce treni di impulsi a femtosecondo: l’interazione di questi impulsi giganti con il mezzo attivo provoca la generazione di armoniche di ordine elevato, i cui ordini più alti vanno da decine a mille volte la frequenza centrale. La larghezza di questa banda – così ampia – è il trucco per poter generare impulsi brevi, per un teorema di Analisi Matematica che dimostra che più breve è un impulso, più è ampia la banda di frequenze del suo spettro (matematicamente, della sua trasformata di Fourier).
Ma come è generato questo impulso elementare? Ogni singolo impulso è generato dagli elettroni che una volta espulsi dall’atomo grazie al laser di pompa, vengono ricatturati dagli atomi del mezzo attivo. Essendo questo salto di energia (dallo stato libero allo stato legato) particolarmente grande, i fotoni emessi alla ricattura hanno una frequenza molto alta, dell’ordine dei raggi X (quindi molto sopra i laser a ultravioletti che abbiamo visto).
Questi impulsi (burst) ad attosecondi vengono quindi agganciati in fase in una regione spettrale sufficientemente ampia. Questo consente di ottenere impulsi giganti di durata dell’attosecondo.
Ci sono altri modi di ottenere impulsi dell’ordine dell’attosecondo diversi dalla tecnica HHG e un esempio è l’impiego di laser a elettroni liberi.
Come si può vedere queste invenzioni presuppongono una sempre più profonda conoscenza del modo in cui la materia si comporta.
Come vengono usati gli impulsi ad attosecondo?
Con un calcolo neanche troppo complicato si può calcolare che il tempo di transizione di un elettrone tra uno stato fondamentale ad uno stato eccitato è dell’ordine degli attosecondi. Quindi generatori di impulsi di attosecondi si prestano ad osservare con un risoluzione temporale senza precedenti le evoluzioni degli elettroni, sia durante una transizione energetica in un atomo, come detto, ma anche in situazioni più generali, come il ruolo del movimento elettronico negli stati eccitati molecolari (ad esempio nei processi di trasferimento di carica) oppure ancora il comportamento degli stati elettronici legati (detti eccitoni) nei materiali 2D come il grafene.
Ad esempio questo video è la ricostruzione 3D del “respiro” dell’atomo di idrogeno al rallentatore, un processo in cui lo stato dell’atomo oscilla tra l’orbitale 1s e l’orbitale 2p che dura qualche centinaio di attosecondi, reso possibile dagli snapshot presi con la tecnica degli impulsi ultrabrevi.
(Source: Wikimedia Commons)
Bibliografia
B.E.A. Saleh, M.C. Teich, Fundamentals of Photonics, Second Edition 2007 Wiley Interscience.
V V Strelkov, V T Platonenko, A F Sterzhantov and M Yu Ryabikin, Attosecond electromagnetic pulses: generation, measurement, and application. Generation of high-order harmonics of an intense laser field for attosecond pulse production (2016) IOP Science.
G. Chui, A Potential New and Easy Way to Make Attosecond Laser Pulses: Focus a Laser on Ordinary Glass, (2017) SLAC National Accelerator Laboratory
Ho preso parte alla visita guidata dei laboratori dell’INFN di Legnaro (Padova), organizzata dalla Fondazione Ingegneri di Padova che si è svolta martedì 11 luglio 2023 ed è stata un’occasione per mettere il naso in alcune delle macchine che mi hanno sempre affascinato: gli acceleratori di particelle.
Ho avuto, in passato, l’occasione per vedere da vicino macchine simili, anche se di dimensioni molto, ma molto maggiori, nelle due visite che ho fatto al CERN di Ginevra nel 1993 e nel 2018 (in cui ho visto, rispettivamente, il LEP e l’LHC).
Qui non solo le dimensioni sono più contenute ma sono anche diversi la tipologia e gli scopi di queste macchine. Tuttavia per me il continuo raffronto tra queste due realtà è risultato inevitabile.
Ad illustrare le attività e la strumentazione dei laboratori sono stati tre tecnici, l’ing. Stefania Canella e i dott. Giorgio Keppel e Oscar Azzolini, scienziati dei materiali.
Il progetto SPES
Come ha detto nella presentazione il dott. Keppel, i LNL sono un’azienda che eroga un prodotto: fasci di ioni stabili che sono a disposizione 24/7 per chiunque abbia interesse a testare strumenti, macchine o a effettuare studi nell’ambito della fisica nucleare. L’ambito di applicazione è dunque la fisica dei nuclei e le energie prodotte da questi fasci raggiungono al massimo 1.5 GeV, uno scenario di applicazioni completamente diverso da quello del CERN, dove si accede a scale di distanza molto più piccole, con energie molto più elevate.
La facility che abbiamo visitato prende il nome di SPES (Selective Production of Exotic Species) e si occupa di produrre fasci di ioni a diverse energie per diversi tipi di applicazioni, dall’ingegneria dei materiali alla medicina nucleare. Questa facility è fondata sull’utilizzo di alcune macchine acceleratrici. Con il gruppo a cui mi sono aggregato ne ho viste due.
Acceleratori
Gli acceleratori presenti ai LNL sono di tipo lineare (LINAC), ne abbiamo visitati due:
l’acceleratore di ioni TANDEM basato su un generatore elettrostatico di Van de Graaf
l’acceleratore di ioni ALPI (Acceleratore Lineare Per Ioni) basato sugli acceleratori lineari a radio frequenza.
Esiste anche un acceleratore circolare, il Cyclotron B70, che però accelera protoni (come il CERN). Questo non è stato oggetto della visita (almeno non del mio gruppo).
Ripassino
Gli acceleratori di particelle sono macchine che accelerano particelle 🙂 Il moto rettilineo uniformemente accelerato di particelle cariche si imprime con i campi elettrici. Infatti una carica q immersa in un campo elettrostatico di intensità \mathbf{E} subisce una forza pari a \mathbf{F} = q\mathbf{E} e, se m è la sua massa, subirà l’accelerazione \mathbf{a} = q/m\mathbf{E} . Supponendo che il campo sia omogeneo e uniforme diretto in una sola direzione, se d è la distanza tra due elettrodi che si trovano sottoposti ad una differenza di potenziale V, l’energia acquisita dalla carica nel percorrere questa distanza sarà pari a qV. L’unità di misura sarebbe joule, ma quando si ha a che fare con cariche piccolissime, dell’ordine della carica di un elettrone (circa 1,6 \cdot 10^{-19}C), è più comodo esprimerla in elettron volt eV: l’energia che acquista un elettrone sottoposto alla ddp di 1 V.
Non si accelerano linearmente particelle cariche con i campi magnetici ma si può tuttavia imprimere loro con questi campi un’accelerazione centripeta e far compiere loro traiettorie circolari (o curvilinee in generale, nel caso di campi non uniformi), in virtù della forza di Lorentz\mathbf{F}_L = q\mathbf{v} \times \mathbf{B} , dove \mathbf{v} è la velocità relativa al campo magnetico \mathbf{B} (gli ingegneri preferiscono chiamarlo induzione magnetica).
Generatore di Van de Graaf
Il generatore di Van de Graaff è un accumulatore elettrostatico, una macchina che trasporta particelle cariche per mezzo di una cinghia rotativa, che preleva per frizione cariche da un elettrodo e le trasporta in un altro elettrodo dove vengono accumulate, creando tra questi due elettrodi un campo elettrico. Se l’intensità del campo elettrico supera il valore di 30 kV/m si possono vedere le scariche dovute alla rottura del dielettrico (l’aria).
Schema di funzionamento del generatore di Van de Graaff. (Wikimedia)
Storicamente gli accumulatori elettrostatici si sono diffusi nel XVIII secolo come macchine per divertimento. Erano molto popolari gli scherzi del bacio di Venere o della scossa sulle posate da tavola. Si era imparato a strofinare una superfice di vetro con un panno di lana e appoggiare questo panno su una superficie metallica. Sembrava che un misterioso fluido si depositasse sull’elettrodo. Ben presto vennero costruiti dei dischi rotanti di vetro con un dispositivo che lo strofinava portava la carica su un elettrodo metallico. Si tratta della macchina di Wimhurst e questo è uno degli esemplari esposti al Museo Giovanni Poleni di Padova.
Macchina di Wimhurst (foto mia)
Acceleratore TANDEM
Il TANDEM è stato prodotto a metà anni 80 negli USA dall’azienda fondata dallo stesso Robert Van de Graaff (USA, 1901-1967), la High Voltage Engineering Corporation, e installato presso i LNL.
Il suo funzionamento è fondamentalmente basato su un generatore di Van de Graaff.
Acceleratore Lineare TANDEM di HVEC (foto mia)
Questo acceleratore (chiamato affettuosamente Moby Dick per la sua stazza e per il colore – era bianco e nel corso del tempo è diventato grigio) oltre al nastro e gli elettrodi del generatore di Van de Graaff, è costituito da una colonna coassiale immersa in un sarcofago (che è quello che si vede nell’immagine). Il sarcofago è riempito di esafluoruro di zolfo (SF6, un gas serra per cui viene rigorosamente sigillato) in pressione a 7 bar; all’interno della colonna che costituisce una gabbia di Faraday corre la tubazione a vuoto contenente il fascio, che viene accelerato dal campo elettrico creato dal generatore.
Colonna all’interno del sarcofago (foto mia)
Degli ioni debolmente carichi negativamente (-e), provenienti da una fornace, si affacciano al tubo dell’acceleratore e vengono accelerati con una tensione di 14,5 MV; a metà colonna gli ioni incontrano loro il lungo percorso un sottile foglio di carbonio (stripper) che strappa alcuni elettroni per cui gli ioni, ora carichi positivamente, si affacciano alla seconda metà del tubo dove però incontrano un campo elettrico inverso che li accelera ancor più nella stessa direzione con una forza moltiplicata per il numero di carica. Alla fine dell’acceleratore l’energia del fascio è distribuita su uno spettro piuttosto ampio in quanto la carica degli ioni può andare da -e a -20e, ma è molto superiore all’energia che hanno a metà strada (>> 14,5 MeV).
Generatore di Van de Graaff (foto mia)
Distribuzione del fascio e circuito del vuoto
Il fascio viene poi diretto lungo una conduttura in cui è praticato un vuoto spinto (10^{-10}\textrm{ bar}).
Il vuoto è necessario per non compreomettere la qualità direzionale de fascio e per non perdere energia in collisioni inutili con particelle e molecole residue. Il grado di vuoto dipende dalla purezza che si vuole raggiungere nella produzione e trasporto del fascio. Vuoti così spinti si realizzano con tecniche criogeniche più che con l’utilizzo di pompe.
L’impianto del vuoto riguarda tutta la linea di accelerazione e distribuzione ed è controllato da dispositivi elettronici dedicati.
distribuzione degli ioni accelerati che escono da TANDEM (foto mia)
Focusing (focheggiamento) del fascio
Il fascio tende a divergere dalla direzione desiderata per cui occorre ricomporlo con due coppie di magneti (quadrupolo) che agiscono in due direzioni ortogonali tra loro e a loro volta ortogonali alla direzione del fascio, per consentire la convergenza.
Quadrupolo focalizzatore di fascio (foto mia)
Bending (curvatura) e selezione dei fasci
Alla fine della stanza un magnete curva il fascio per indirizzarlo verso la camera degli esperimenti,
Bender: curva il fascio di ioni (foto mia)
dove un ulteriore spettrometro di massa devia i fasci in base alla massa verso target prestabiliti.
Spettrometro di massa (devia gli ioni con un raggio di curvatura diverso a seconda del rapporto carica/massa) (foto mia)
Il fascio prodotto da TANDEM viene poi utilizzato direttamente negli esperimenti e in parte viene deviato come fascio di ingresso per l’acceleratore ALPI.
Acceleratore ALPI
L’acceleratore ALPI (Acceleratore Lineare Per Ioni) è molto più complesso e sfrutta una diversa tecnica di accelerazione che è quella delle cavità a superconduttore a radiofrequenza.
Acceleratori a RF
Sono degli array di cavità (drift tubes) in cui vengono iniettati degli ioni iso numero di carica, i quali vengono accelerati da un campo elettrico alternato. Questo tipo di cavità che illustro adesso è detta a mezz’onda e tra breve vediamo perché. Supponiamo che entri uno ione negativo nel primo tubo lungo la direzione +\hat{\mathbf{e}}_x; il campo abbia verso contrario alla direzione dello ione: essendo questo negativo, esso verrà ulteriormente accelerato:
La semionda deve mantenersi negativa per tutto il tempo impiegato dalla carica ad attraversare il tubo. Alla fine lo ione accelerato entra nel secondo tubo che prima aveva una tensione positiva, adesso ce l’ha negativa e il campo è ancora accelerante e così via. Ogni tubo è interessato da una semionda, nel senso che lo ione si trova accelerato per tutta la lunghezza dalla stessa semionda del segnale, da cui il nome “cavità a mezz’onda”. Siccome il tempo di percorrenza diminuisce nel secondo tubo, questo dovrà essere leggermente più lungo del precedente. Per velocità relativistiche questa differenza tra un tubo e il successivo tende a zero, ma per gli esperimenti in LNL la velocità v è tale che il fattore \beta = v^2/c^2 è in genere < 1.
Principio di funzionamento degli acceleratori lineari a radiofrequenza (immagine dalle dispense della prof. Valdata, unipg.it)
Le cavità acceleranti sono costruite in rame purissimo e vengono fatte funzionare a bassisima temperatura per consentire alle pareti interne delle cavita, che sono ricoperte di niobio (Nb), di funzionare in regime di superconduzione. Per questo motivo le cavità risonanti sono immerse in un criostato che consente al Niobio di lavorare ad una temperatura di 4,0 K che è al disotto del sua sua temperatura critica ( o di transizione) che è pari a 9,2 K.
Il regime di superconduttività consente di far funzionare i magneti senza dissipazione di potenza e di ottenere campi più intensi. Il surplus di energia necessario per far funzionare i criostati dà comunque luogo ad un consumo energetico inferiore rispetto al funzionamento a temperatura ambiente. Questa tecnica è usata anche per i magneti del CERN di Ginevra.
La forma delle cavità è come quella di figura
Cavità RF (foto mia)
L’interno di quelle ampolle è ricoperto di niobio. In realtà la forma dei moduli è diversa, si tratta di cilindri che lungo un asse orizzontale, ortogonale all’asse del cilindro consentono il passaggio del fascio e lungo l’asse del cilindro consentono l’applicazione del campo elettrico, quindi il passaggio degli elettrodi:
Modulo di cavità RF (foto mia)
Il cilindro contiene l’ellissoide e il foro trasversale (nella parte inferiore) per far passare il fascio ed è coassiale all’asse di rotazione dell’elissoide. Il foro coassiale con il cilindro invece serve per applicare il campo elettrico. Anche il funzionamento elettrico è leggermente diverso perché funzionano a quarto d’onda, perciò vengono detti QWR (Quarter Wave Resonator). In pratica il campo è postivo per due moduli e l’intensità massima del campo elettrico si ha nella transizione tra un modulo e il successivo.
Viene formato un array di 4 cavità immerse in bagno criostatico di elio liquido e ciascuno con una frequenza di lavoro progressivamente crescente: il primo gruppo lavora a 80 MHz, l’ultimo a 160 MHz (altro modo duale di configurare le cavità: invece di farle più lunghe le fanno lavorare ad una frequenza maggiore).
ALPI è un array di molti di questi moduli e lo scopo è di portare l’energia degli ioni uscenti a 1,4 GeV.
ALPI riceve il fascio da TANDEM, lungo la pipe mostrata in questo video in cui si vede la pipe fuoriuscire dal muro provenendo da TANDEM e attraversare lo stabilimento con tre focalizzatori di fascio e immettersi nell’edificio in cemento armato all’interno del quale è costruito ALPI:
Pipe da TANDEM al linac ALPI (Video mio)
ma riceve fascio anche da un altro acceleratore di nome PIAVE (hanno scelto tutti nomi nostrani, ma l’acronimo è Positive Ion Accelerator for VEry low velocity ions).
Tuning di ALPI
L’ing. Canella ha sottolineato il fatto che questa macchina è molto complessa da mettere in funzione. Le operazioni di fine tuning iniziali sono lunghe e laboriose e necessitano di un know how eccezionale. Accendere ALPI può richedere due settimane di lavoro, uno dei task più lunghi è proprio la sintonizzazione delle cavità risonanti: si parte con una cavità alla volta e si deve raggiungere un accordo ottimale di tutta la catena per massimizzare l’energia finale del fascio di ioni. Il pieno funzionamento viene supervisionato in remoto dalle sale di controllo tramite una complessa rerte di dispositivi di acquisizione e attuatori e la rete informatica che consente il controllo.
Software di controllo della facility SPES (foto mia)
Il software viene sviluppato in parte all’interno dei laboratori, ma molta parte è già disponibile dai fornitori dell’hardware di controllo.
Sicurezza degli impianti
Quando le macchine sono in funzione la radioattività è a livello di attenzione e tutti gli operatori devono trovarsi all’esterno della fascia di sicurezza (i muri perimetrali in cemento armato dei locali che ospitano le macchine sono spessi quasi due metri). La messa in funzione delle macchine segue un dettagliato e rigoroso piano di sicurezza che si avvale di procedure di ronda atte a verificare che tutto il personale sia fuori dall’area operativa e di attuatori e sensori che assicurano che i cancelli siano chiusi e il personale fuori dall’area interressata da radiazioni prima dell’accensione.
Impiego degli acceleratori
Gli acceleratori del progetto SPES vengono impiegati in campi di spettro veramente amplissimo, ne cito solo alcuni:
raccolta di radionuclidi per imaging diagnostico (PET) e terapia oncologica
generazione di neutroni per impieghi di ingegneria dei materiali
Al corso di Complementi di Elettronica Applicata, un corso del quinto anno tenuto dal prof. Gaetano Malesani, forse era il 1992, oltre a studiare tante belle cose come le PLL o gli alimentatori switching, il prof. Malesani dispensava perle di saggezza tipo “Non pensate che quando lavorerete ci sarà qualcuno ad insegnarvi ciò che dovete fare. Chi sa i trucchi del mestiere o non ha tempo o non ha voglia di spiegarveli e/o di documentarli e soprattutto se li tiene per sé”. È stata esattamente la mia esperienza, non in tutti i casi, ma in buona parte sì.
Al corso, poi, era rischiesta l’elaborazione di un progetto, nel nostro gruppetto di amici avevamo in mente di costruire un barcode scanner, ti ricordi Mario se eravamo in gruppo assieme? Forse ti eri già laureato. C’era anche Adriano “il Fufi” che mi chiamava “ingegnere dea Nasa”. Avevo anche preso contatti con la Datalogic di Calderara di Reno (c’è ancora) spiegando cosa ci apprestavamo a fare, per avere eventuale assistenza.
Senonché il prof ad un certo punto ci dice: “Ragazzi, siete troppi gruppi e il laboratorio è limitato, dobbiamo aggregarvi”.
Praticamente i nuovi accoliti non vollero saperne di un progetto così ambizioso, bisognava fare il meno possibile per passare l’esame. Dopo un po’ che non trovavamo un accordo, Malesani ci dice: “Allora ve lo assegno io il progetto: perché non costruite un oscillatore a ponte di Wien?” e ci diede delle specifiche assurde per quanto riguarda campo di frequenza coperto e distorsione armonica. Eravamo, noi del gruppetto inziale, abbstanza delusi, ci sembrava un ribasso notevole sulle nostre aspettative. Ma lui lesse lo sconforto nei nostri volti e aggiunse: “Non pensate che si tratti di una punizione: Hewlett e Packard hanno iniziato così, costruendo oscillatori a ponte di Wien, circuiti che emettevano fischi terrificanti, per un cliente di tutto rispetto: la Walt Disney”.
Alle fine ci siamo inventati una retroazione dell’oscillatore con un JFET, tipo i VCO che si usano nei sintetizzatori analogici, che rendeva il sistema performante ad una gamma di frequenze ancora più grande e con un distorsione armonica molto al disotto del limite imposto.
Poi alla fine scrissi da solo buona parte della relazione soffermandomi in modo particolare sull’analisi della retroazione e scoprii, spiegandola all’esame, che avevo impiegato senza accorgermene il metodo della funzione descrittiva che stavo studiando per la tesi sul caos deterministico. Ho preso 30 quella volta ed era sotto Natale.
La primava dopo, ricordo bene ero a piedi lungo il Piovego, un paio di studenti che facevano parte del gruppo e che non si erano mai fatti vedere, mi prendono in disparte e mi dicono “Ma chi cazzo ha scritto la relazione? non si capisce niente c’è solo un’analisi inutile della retroazione!”. Ho risposto che per me era la cosa più interessante del lavoro. E ho capito già allora come si fa a fare strada nel mondo del lavoro: usare i lavoro degli altri, prendersene gli eventuali meriti e sparare merda su chi ha lavorato.
È stato di sicuro il corso in cui ho imparato più cose, grazie prof. Malesani!
Mi sono trovato con due versione di Skype, una installata con apt e l’altra con snap. Non ricordavo di avere fatto questa cosa, probabilmente ho installato la seconda perché era comparso l’avviso che da quella versione era supportato ChatGPT.
In ogni caso ho deciso di eliminare la più obsoleta, quella installata con apt, che era alla versione 8.98 e il cui eseguibile era sotto /usr/share/skypeforlinux/.
Con una lista dei processi ho visto i due programmi che girano indipendentemente:
Visualizzando le rispettive versioni dalle due GUI, vedo che una è la 8.98 e una è la 8.99 ma non so quale di quei due processi corrisponda alla 8.98. Quindi chiudo la versione più vecchia e l’unico processo che sopravvive è il 10694, e la correlazione è fatta.
Come detto, la versione più vecchia l’ho installata con apt, la più recente con snap. Comunque dal programma di disinstallazione è possibile specificare la versione da rimuovere:
$ sudo apt remove skypeforlinux=8.98*
[sudo] password di marcob:
Lettura elenco dei pacchetti... Fatto
Generazione albero delle dipendenze... Fatto
Lettura informazioni sullo stato... Fatto
Versione "8.98.0.402" (. stable:stable [amd64]) selezionata per "skypeforlinux"
I seguenti pacchetti saranno RIMOSSI:
skypeforlinux
0 aggiornati, 0 installati, 1 da rimuovere e 23 non aggiornati.
Dopo quest'operazione, verranno liberati 330 MB di spazio su disco.
Continuare? [S/n] S
(Lettura del database... 529434 file e directory attualmente installati.)
Rimozione di skypeforlinux (8.98.0.402)...
...
$
Dopo l’ultimo aggiornamento di php-curl ho nuovamente il fastidio di emendare l’errore che stavolta si presenta in una veste diversa, a volte Warning
$ php -m | grep curl
PHP Warning: PHP Startup: Unable to load dynamic library 'curl.so' (tried: /usr/lib/php/20220829/curl.so (/usr/lib/php/20220829/curl.so: undefined symbol: curl_mime_addpart, version CURL_OPENSSL_4), /usr/lib/php/20220829/curl.so.so (/usr/lib/php/20220829/curl.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
e a volte Fatal
PHP Fatal error: Uncaught Error: Call to undefined function curl_init() in /home/marcob/IdeaProjects/PHP/code/vendor/jasig/phpcas/source/CAS/Request/CurlRequest.php:107
Stack trace:
#0 ...
Senza riportare tutta la ricerca fatta, vado al punto: al solito, un’aggiornamento di PHP ha nuovamente modificato un link simbolico facendolo puntare ad una versione non compatibile della libreria libcurl
Stamattina non riesco più a stabilire una connessione SSH con un server in cui ho lavorato l’ultima volta un po’ di tempo fa. Facciamo che questo host si chiami web.mysecretserver.it come FQNS.
Anche oggi ho la mia occasione per sentirmi stupido.
Primo tentativo
Al primo tentativo il protocollo mi dice che non ha trovato tra quelli a disposizione del client, alcun metodo di scambio chiavi crittografiche supportate dal server:
$ ssh web.mysecretserver.it
Unable to negotiate with 184.17.4.115 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
Secondo tentativo
Ho quindi specificato uno degli algoritmi supportati dal server
$ ssh -oKexAlgorithms=diffie-hellman-group-exchange-sha1 web.mysecretserver.it
Unable to negotiate with 184.17.4.115 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
ma stavolta i tipi di chiave supportati dal server sono diversi da quelli a mia disposizione (è inutile: ho una versione client di SSH molto più aggiornata del vecchio mysecretserver).
Terzo tentativo
Specifico allora un tipo di chiave supportato dal server:
Non serve specificare la cifratura (ssh-dss), basta il parametro -oHostKeyAlgorithms.
Quarto tentativo
$ ssh -oKexAlgorithms=diffie-hellman-group-exchange-sha1 -oHostKeyAlgorithms=+ssh-dss web.mysecretserver.it
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the DSA key sent by the remote host is
SHA256:iDMXs5dTRKtmP9VpVRtuPpJ1/bMja3ZSLnwuuEz5jAo.
Please contact your system administrator.
Add correct host key in /home/marcob/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/marcob/.ssh/known_hosts:23
remove with:
ssh-keygen -f "/home/marcob/.ssh/known_hosts" -R "web.mysecretserver.it"
Host key for web.mysecretserver.it has changed and you have requested strict checking.
Host key verification failed.
Ci siamo! Stavolta la connessione è possibile solo che la chiave dell’host è cambiata rispetto a quella contenuta nel mio portachiavi. Quindi
Elimino l’host
Aggiorno il file .ssh/known_hosts togliendo la chiave dell’host desiderato (il programma crea atuonomamente una copia di backup).
$ ssh-keygen -f "/home/marcob/.ssh/known_hosts" -R "web.mysecretserver.it"
# Host web.mysecretserver.it found: line 23
/home/marcob/.ssh/known_hosts updated.
Original contents retained as /home/marcob/.ssh/known_hosts.old
Trovo la soluzione
Dopo aver eliminato il vecchio host, il server SSH mi presenta il suo fingerprint (l’impronta) e mi chiede se sono disposto a fidarmi:
$ ssh -oKexAlgorithms=diffie-hellman-group-exchange-sha1 -oHostKeyAlgorithms=+ssh-dss web.mysecretserver.it
The authenticity of host 'web.mysecretserver.it (184.17.4.115)' can't be established.
DSA key fingerprint is SHA256:iDMXs5dTRKtmP9VpVRtuPpJ1/bMja3ZSLnwuuEz5jAo.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'web.mysecretserver.it' (DSA) to the list of known hosts.
* * * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * *
THIS SYSTEM IS RESTRICTED TO AUTHORIZED USERS FOR AUTHORIZED USE
ONLY. UNAUTHORIZED ACCESS IS STRICTLY PROHIBITED AND MAY BE
PUNISHABLE UNDER THE COMPUTER FRAUD AND ABUSE ACT OF 1986 OR
OTHER APPLICABLE LAWS. IF NOT AUTHORIZED TO ACCESS THIS SYSTEM,
DISCONNECT NOW. BY CONTINUING, YOU CONSENT TO YOUR KEYSTROKES
AND DATA CONTENT BEING MONITORED. ALL PERSONS ARE HEREBY
NOTIFIED THAT THE USE OF THIS SYSTEM CONSTITUTES CONSENT TO
MONITORING AND AUDITING.
* * * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * *
(webportal@web.mysecretserver.it) Password:
Last login: Wed Nov 16 10:13:25 2022 from az931356.mysecretserver.it
-bash-3.2$
Eureka!
Ultima chicca: mettere tutte queste opzioni in un file di configurazione per accorciare il comando:
Quindi posso collegarmi senza dover ricordare tutto lo stringone, semplicemente con:
$ ssh websecret
* * * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * *
THIS SYSTEM IS RESTRICTED TO AUTHORIZED USERS FOR AUTHORIZED USE
ONLY. UNAUTHORIZED ACCESS IS STRICTLY PROHIBITED AND MAY BE
PUNISHABLE UNDER THE COMPUTER FRAUD AND ABUSE ACT OF 1986 OR
OTHER APPLICABLE LAWS. IF NOT AUTHORIZED TO ACCESS THIS SYSTEM,
DISCONNECT NOW. BY CONTINUING, YOU CONSENT TO YOUR KEYSTROKES
AND DATA CONTENT BEING MONITORED. ALL PERSONS ARE HEREBY
NOTIFIED THAT THE USE OF THIS SYSTEM CONSTITUTES CONSENT TO
MONITORING AND AUDITING.
* * * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * *
(webuser@web.mysecretserver.it) Password:
Last login: Wed Nov 16 15:35:22 2022 from 10.196.82.233
-bash-3.2$
Il mantra avveniristico più in voga degli ultimi due anni è sicuramente lui, secondo me anche più dell’Intelligenza Artificiale: il Quantum Computing, calcolo quantistico.
È anche vero che da un po’ l’attributo Quantum va comunque di moda anche in ambiti non strettamente scientifici (coscienza quantica, mente quantica e via discorrendo), però di sicuro una delle innovazioni da cui ci si aspettano progressi sconvolgenti è proprio questa branca della ricerca che incrocia Fisica Teorica, Fisica Sperimentale e Computer Science.
Breve storia del Quantum Computing
La nascita della Fisica dei quanti è dovuta a Max Planck che, in un suo articolo del 1901, trovò la quadra per una giustificazione teorica della curva del corpo nero (ho tradotto l’articolo originale, per chi fosse interessato) un oggetto ideale che non riflette alcuna luce, a cui i fisici di fine ‘800 non riuscivano a dare una spiegazione in termini di Elettromagnetismo e Termodinamica.
A coniare il termine “quanto” fu Albert Einstein nel suo articolo sull’effetto fotoelettrico del 1905 (il primo dei tre articoli del suo annus mirabilis), uno dei primi contributi ad utilizzare con profitto l’idea di elemento di energia (come lo chiamava Planck).
L’idea di utilizzare la Meccanica Quantistica per costruire i computer si può far risalire a Richard Feynman che la descrisse nella sua celebre lezione al Caltech per l’American Physical Society il 29 dicembre 1959: There’s Plenty of Room at the Bottom.
Attenzione: già i computer attuali sono basati sulla Meccanica Quantistica (il funzionamento dei semiconduttori si spiega solo con la Meccanica Quantistica), ma per questa nuova generazione la differenza è questa: affidare la codifica dell’informazione ad uno stato di un singolo sistema quantistico. Attualmente non è così: 0 o 1 fisicamente vengono codificati con il fatto che una strisciolina di silicio lasci passare o meno una corrente, che è una informazione dell’elettromagnetismo classico.
Paradosso EPR e teorema di Bell
Fin dalle origini (Planck e Einstein, anni Zero), passando per i lavori di Bohr e Sommerfeld (anni Dieci) e poi ancora per quelli di Heisenberg, Schrödinger, Jordan, Born e Dirac (anni Venti) – ma ne ho lasciati fuori tanti – non ci si affrancò mai abbastanza da essere sicuri di dove questa teoria ci avrebbe condotto. Era strana. Molto più strana anche della stessa Relatività di Einstein. Occorreva capirla ancora, sempre meglio. Che fosse difficile da capire lo ammisero tutti dall’inizio.
Bohr nel suo tentativo di argomentare contro l’articolo EPR nel 1935 ammise “Stiamo cominciando a capirci qualcosa”. Eranopassati vent’anni dal suo primo articolo.
In un’altra lezione del 1965 Feynman lo disse fuori dai denti: “I think I can safely say that nobody understands Quantum Mechanics.”
Nel 1935 Einstein fece un lavoro che partì in sordina – le citazioni per vent’anni rimasero molto poche, poi all’inizio degli anni Sessanta fino ad oggi crebbero enormemente. Egli continuò a rimuginare sulla teoria quantistica per tutta la vita senza riuscire a digerirla. Il famoso articolo scritto quand’era già a Princeton dopo essere fuggito dalla Germania nazista, presenta il famoso paradosso di EPR (dai nomi degli autori: Einstein, Podolsky e Rosen), nel quale si sosteneva che la Meccanica Quantistica non può essere completa, attraverso un esperimento mentale grazie al quale si dimostrava che si poteva violare il principio di indeterminazione. Detto in parole semplici, secondo l’articolo di EPR la Meccanica Quantistica è probabilistica perché ci nasconde qualcosa.
Molti tentativi di confutare questa conclusione furono fatti – in primis da Bohr al quale avevano toccato il suo giocattolo – ma non convinsero mai completamente tutta la comunità scientifica. Una svolta si ebbe con il Teorema di Bell, dimostrato dal fisico irlandese John Bell nel 1964, nel quale si provava che erano fondate le preoccupazioni espresse da Einstein. In effetti Bell ci mostra che la Meccanica Quantistica non è reale né locale: la peggior paura di Einstein, in quanto pare che le informazioni possano propagarsi a velocità infinita (la spooky action at a distance detta poi entanglement) e che la Luna non esista quando la si guarda, cioè lo stato quantistico non sia definito prima della misura. In realtà le cose non stanno esattamente così nel mondo macroscopico, ma in quello subatomico sì.
Tecnicamente il teorema di Bell afferma che se la Meccanica Quantistica è una teoria a variabili nascoste (cioè è probabilistica perché ci nasconde qualcosa) allora deve valere una certa diseguaglianza. Ma se la Meccanica Quantistica è quello che dice di essere, questa diseguaglianza deve venire violata.
La violazione della diseguaglianza di Bell viene sistematicamente verificata dagli stati quantistici, in altre parole: la Meccanica Quantistica non è casuale grazie a variabili nascoste, è proprio dispettosa di suo. Questo fu provato sperimentalmente da Alain Aspect nel 1983 e da molti altri esprimenti condotti nei modi più fantasiosi per evitare che la Natura potesse aggirare l’esperimento (i cosiddeti loopholes), anche se la prova definitiva risale solo al recente 2018.
Alain Aspect, Anton Zeilinger e John Clauser sono stati insigniti del premio Nobel per la Fisica quest’anno, il 2022, proprio per questi lavori.
Cosa entra questo con il calcolo quantistico?
Quantum Computing – il qubit
La manipolazione degli stati effettuata per avere una conferma sperimentale del teorema di Bell, diede forza al concetto di qubit: un modo di codificare una informazione binaria attraverso lo stato di un sistema quantistico che però ha la bella proprietà di trovarsi in infinite combinazioni lineari di stati elementari prima di venire misurato. Il valore dello stato non esiste prima della misura, è questo che si intende con la locuzione la MQ non è reale.
Al contrario, il bit classico ha un valore anche prima di essere misurato, solo che lo ignoriamo ma è lo stesso che ha anche dopo che lo abbiamo misurato. La differenza è sostanziale ed è alla base del calcolo parallelo consentito dal questo tipo di dispositivi.
Nel 2015 ho seguito il corso di Quantum Information nell’ambito il Dottorato in Ingegneria delle Telecomunicazioni dal DEI – Università di Padova, tenuto dal prof. Paolo Villoresi, mio insegnante di Elettronica Quantistica quando studiavo Ingegneria Elettronica che, saputo del mio interesse sull’argomento, mi ha accolto affettuosamente nel suo gruppo di dottorandi.
In quel corso effettuammo un esperimento che era un po’ il rifacimento dell’esperimento di Aspect che mostrava la conferma sperimentale del teorema di Bell: una diseguaglianza che in teoria deve venire violata dalla MQ se è non reale o non locale – viene violata per davvero. Ne nacque questo mio lavoretto che mi divertii sommamente a scrivere, nel quale affronto un po’ di armamentario teorico per manipolare con una certa confidenza l’argomento, studio in dettaglio il paradosso EPR e infine descrivo il teorema di Bell e l’esperimento che da’ una conferma sperimentale che la disuguaglianza di Bell è davvero violata nella realtà.
Vedo, dai log del mio Google Analytics, che ultimamente il download di questo mio articolo ha avuto una rapida impennata, lo metto volentieri in evidenza per chi volesse leggerlo.
Utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Lo facciamo per migliorare l'esperienza di navigazione e per mostrare annunci personalizzati. Il consenso a queste tecnologie ci consentirà di elaborare dati quali il comportamento di navigazione o gli ID univoci su questo sito. Il mancato consenso o la revoca del consenso possono influire negativamente su alcune caratteristiche e funzioni.
Funzionale
Sempre attivo
L'archiviazione tecnica o l'accesso sono strettamente necessari al fine legittimo di consentire l'uso di un servizio specifico esplicitamente richiesto dall'abbonato o dall'utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze
L'archiviazione tecnica o l'accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall'abbonato o dall'utente.
Statistiche
L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici.L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l'identificazione.
Marketing
L'archiviazione tecnica o l'accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l'utente su un sito web o su diversi siti web per scopi di marketing simili.
Commenti recenti