Sunday, August 4, 2013

Download all files on a site

After tons of times I stumbled upon the problem of downloading many files listed on a single web page... after trying browser extensions, apps, and looking for a not too complicated bash script to use for the purpose... okay, I realized it's time to get hands dirty and write my definitive solution.

So here it is:
curl URL | grep -o http.*pdf | while read pippo; do wget $pippo; done 
Seems too simple, doesn't it?

I don't want to digress here about how it works: if you can't understand it, read
Actually, I didn't read the stuff above, just spotted what I needed!

You can easily modify the regular expression http.*pdf  to fit your needs (download different file formats etc).

Saturday, March 9, 2013

First paper

Il mio primo articolo come coautore è finalmente online su Arxiv, qui: http://arxiv.org/abs/1302.5607
L'abbiamo inviato a ICALP, vedremo come andrà.

Thursday, March 7, 2013

Come installare EiffelStudio

Eiffel è un linguaggio di programmazione ad oggetti con la sua storia e i suoi pregi. Per caso ho cercato di installare  EiffelStudio (una IDE ufficiale per Eiffel,  sotto GPL) su Ubuntu 12.10, e riporto di seguito come ho fatto (ho seguito la guida ufficiale).
Nel mio caso si è trattato di Eiffel72 nella versione a 64 bit, per versioni successive sostituire tale nome nei comandi seguenti, e per architetture a 32 bit togliere il "-64" nel secondo comando "export" del punto 3 e nel percorso del punto 4.
Ecco la procedure:
  1. scaricare il pacchetto da https://www2.eiffel.com/download/download_info.aspx?id=eiffelstudio&info=false&mirrors=eiffelstudio dopo essersi registrati sul sito (se vi dà fastidio si trova su SourceForge); 
  2. spacchettare il pacchetto aprendo il terminale, andando nella cartella dove si trova il pacchetto, ed eseguendo
     tar xvfj Eiffel72_gpl_91169-linux-x86-64.tar.bz2 -C ~/  
    
  3. aprire il file ".bashrc" in un editor di testo, ad esempio digitando nel terminale
     gedit ~/.bashrc  
    
     ed incollare dunque alla fine del file le seguenti righe per aggiungere le necessarie variabili d'ambiente:
     #environment variables for EiffelStudio   
      export ISE_EIFFEL=~/Eiffel72   
      export ISE_PLATFORM=linux-x86-64    
      export PATH=$PATH:$ISE_EIFFEL/studio/spec/$ISE_PLATFORM/bin   
    
  4. sloggarsi e riloggarsi nell'utente attuale;
  5. digitare nel terminale "estudio", ed EffelStudio si avvierà ;) 
  6. alla prima esecuzione, creando il primo progetto, chiede di compilare i precompilati. Scegliere "yes".

Tuesday, February 12, 2013

Laziodisu&Unidata + low_bandwith + javascript = connettersi con un click

Come suggerito dal titolo (...) qui si fornisce un piccolo trick per diminuire di una briciola lo stress cui sono sottoposti gli studenti delle residenze universitarie gestite da Laziodisu. Pare infatti che una connessione internet decente (un diritto tanto fondamentale che il M5Stelle ne ha fatto uno dei punti fondamentali del proprio programma), sia considerato da Laziodisu poco più che un optional: il (dis)servizio è fornito agli studenti sulla base di un contratto con Unidata che... beh, basta chiedere opinione agli stessi studenti delle residenze...

Il solo atto di connettersi inserendo le proprie credenziali nel captive portal in certi periodi della giornata è spesso impossibile. Un primo accorgimento che si può prendere è senz'altro quello di salvarsi la pagina sul PC in modo da risparmiare al browser lo sforzo di scaricarla da Internet. 

Un trucco minimamente più ingegnoso è quello di inviare direttamente le proprie credenziali per la connessione senza passare per il captive portal, cioè facendo "a mano" ciò per cui si viene indirizzati al captive portal. 
In pratica, basta prendere questo URL: 
https://romawireless.unidata.it:8081/login?81bd1635640576bf2301102209f04d1a=1&original_url=http://geoip.ubuntu.com/lookup&username=PIPPO&password=PLUTO
scrivendo al posto di PIPPO il nome utente che inseriamo nel rispettivo campo del captive portal (di solito si tratta più o meno del proprio numero di cellulare), e al posto di PLUTO la password corrispondente.
A questo punto, basta creare un segnalibro (in generale, qualsiasi browser si usa, basta cliccare col destro la barra dei segnalibri e dovrebbe esserci un'opzione del tipo "aggiungi segnalibro"), chiamandolo con qualcosa come "ConnessioneRomaWireless", e incollando nella voce dell'URL quello che abbiamo appena costruito.
Ad esempio, su Chrome si arriva alla finestra che potete vedere bene cliccando sulla seguente immagine
E voilà! Quando siamo sconnessi basta cliccare su tale segnalibro ed è come se avessimo già caricato la pagina del captive portal e inserito le credenziali e cliccato su "Invia". 

Wednesday, January 30, 2013

MOOC


Dopo vari tentativi evaporati nell'inettitudine, sembra che finalmente io stia seguendo un MOOC su Coursera.

Più che per il corso in sé, ero molto curioso di fare l'esperienza di seguire un MOOC, e devo dire che finora sono molto impressionato da come sia molto superiore il rapporto tra quanto si apprende dal corso rispetto al tempo dedicatovi,  in confronto a quanto invece sperimentato in un ordinario corso universitario. 

Certo, la parte che non stupisce, in tale divario, è quanto è dovuto alla bassa qualità del sopracitato normale corso universitario, per fattori tra cui i seguenti:
  • insegnanti privi di talento e/o motivazione per il proprio incarico didattico;
  • mancanza di fondi da parte dell'università (per pagare assistenti, tutor, esercitatori...);
  • obsolescenza del modello a lezione frontale, con l'insegnante che svolge il proprio monologo e gli studenti che trascrivono materiale già disponibile su libri di testo;
  • mancanza di adeguati strumenti per lo studente che complementino la sua formazione al di fuori della lezione e dello studio sul testo (forum ove scambiare idee con altri studenti e reperire materiale utile, etc)
In parte sull'ultimo punto sto assistendo ad un po' di positiva informatizzazione: gli studenti possono scambiarsi informazioni tramite la pagina Facebook di cui oramai ogni singolo corso di laurea dispone, e reperire materiale utile al corso su cartelle condivise su Google Drive.

Il MOOC, dal canto suo, coi video delle lezioni che si possono vedere e rivedere quando e come si vuole, il materiale didattico che per forza di cose è ben ordinato e curato, il forum e il wiki del corso dove, oltre che col corpo docente, si può trovare l'aiuto delle decine di migliaia di colleghi, i quiz che appena completati mostrano il risultato e dove sono stati commessi gli eventuali errori... crea un ambiente di apprendimento che, per quanto ho sperimentato finora, risulta molto più adattabile alle proprie esigenze e molto meno "massificato" del corso tradizionale (sempre, rispetto alla mia vita scolastica italiana).

Prima che ci fosse questo boom dei MOOC, qualche hanno fa, ricordo di aver discusso con un ex-collega universitario sul proporre ai professori di far filmare le proprie lezioni per renderle disponibili online; il collega mi spiegò che aveva già provato a proporre la cosa, ma senza successo: i professori ai quali aveva chiesto non volevano saperne di farsi filmare. Non mi lancio nelle speculazioni psicologiche sui perché dietro tale rifiuto... 

Una cosa è certa: un fattore cruciale nell'assicurare la qualità dei MOOC è proprio il fatto che l'insegnante si ritrova a tenere un corso a tutto il mondo... le sue lezioni, ogni dettaglio del corso, è visibile all'intera umanità! La qualità della didattica del docente e dell'università si ritrova dunque in discussione al 100%, e per non perderci la faccia non resta che offrire agli studenti un'insegnamento che sia il meglio del meglio.

Spot: chi si ferma è perduto.

IMHO decisamente un bel video da vedere, anche se non propriamente rilassante....


Tuesday, January 29, 2013

Dannate tessere, dannati circuiti e dannata porta

Un problema che mi è stato posto giorni fa e alla cui soluzione sono arrivato dopo rosicati fallimenti.

Problema:
Hai tre tessere e sei davanti a una porta con tre fessure in cui puoi infilarle. Ciascuna tessera è la tessera corretta di una sola fessura e viceversa.
Ogni fessura è collegata ad un circuito che non puoi vedere e che inizialmente può essere o aperto o chiuso, e la porta si aprirà solo quando tutt'e tre i circuiti saranno chiusi. Puoi cambiare lo stato dei circuiti solo inserendo tutt'e tre le tessere, e il cambiamento avviene così: se il circuito è chiuso, si apre; se il circuito è aperto, si chiude solamente se nella sua fessura è inserita la tessera corretta.
Qual'è il minimo numero di inserimenti necessario ad aprire la porta?

Soluzione

Thursday, January 17, 2013

A boy is better unborn than untaught.

Oggi ho concluso le 4 esercitazioni che ho tenuto per il corso di Algoritmi e Strutture Dati 2 del prof. Clementi.
L'esperienza è stata davvero formativa, e penso di aver imparato molto più di quanto abbia fatto imparare.
Le slides sono sul sito del corso. Le ultime due contengono errori che non ho corretto, in particolare l'ultima ha un esattamente di troppo e con il senno di poi le prove di correttezza dei due algoritmi non sono di certo le migliori possibili.
In ogni caso ecco lo zip dei pdf su Google Drive e il sorgente Latex per i neofiti dell'eccellente Beamer (classe Latex per creare presentazioni in tale linguaggio).

Nel mentre sono indietrissimo con lo studio bibliografico che volevo condurre, impaziente di verificare l'utilità dell'ausilio della digital-library/social-network  CiteULike, ma in compenso sono tornato a sporcarmi le mani con l'impareggiabile software matematico Sage, e con le meraviglie del programmare in Python (al seguito di un dottorando in informatica davvero pro, da cui ho tutto da imparare), con lo scopo di implementare delle belle simulazioni (sogni che si realizzano, dato che poco mi affascinò in passato quanto il concetto di simulazione virtuale).

Sunday, December 30, 2012

X

27 Ottobre 2012, sono al banchetto del Roma2Lug a raccogliere i nomi dei partecipanti al Linux Day. Arriva un partecipante, di cui purtroppo ancora non ricordo/riscopro il nome, con circa 4 copie di un libro: X di Cory Doctorow. Dice che possiamo venderli a offerta libera e incassare (in quanto LUG) il 100% del ricavato. Dice che dopo averlo letto capitò ad una bancarella dove ne vendevano varie copie e ne comprò tante con l'idea di diffondere il libro. Inconfutabile dichiarazione di idealistica vocazione apostolica.
Mi faccio raccontare la trama. Sembra interessante. Naturalmente una copia resterà al LUG.
Cerco l'autore su Wapedia: Cory Doctorow, "He is an activist in favour of liberalising copyright laws and a proponent of the Creative Commons organization, using some of their licenses for his books."
Ok, già ho deciso che dovrò leggerlo.
Qualche giorno dopo inizio. Mi prende. Non mi stacco. Lo finisco.
Accidenti, la sensazione del "ma perché non me l'hanno detto prima?!"
È il libro che avrei voluto avere in mano da adolescente. Hackeraggio, reverse engineering dell'X-Box, Paranoid Linux, crittografia... tante belle cose da sapere.
Da tempo mi ero proposto di scrivere una recensione carina del libro, e finalmente l'ho fatto. Ho anche ordinato su Amazon una copia tutta mia, a prezzo stracciato, e un altro libro dell'autore: Infoguerra.
La letteratura che vale, questa: quella che diffonde idee, che lancia nel cervello del lettore la bomba delle vere problematiche attuali, che ti obbliga a sapere quello che dovresti sapere.

Presentation

Ho passato la serata a googlare come far comparire un timer all'angolo dello schermo mentre si visualizza una presentazione, incredulo che finora nessuno si fosse curato di provvedere un modo user-friendly.
All'inizio trovavo soltanto soluzioni che richiedevano Acrobat, ma dopo una valanga di query ho trovato il gioiello. Ancora, non riesco a credere di averlo dovuto cercare tanto.

Si tratta di Impressive, che oltre a permettermi di perseguire il sopracitato obiettivo (vedere opzione -d nella documentazione), ha un paio di altre features che mi hanno davvero commosso: 
  • T key - Activate or deactivate the time display at the upper-right corner of the screen. If the timer is activated while the very first page of the presentation is shown, it activates "time tracking" mode. In this mode, a report of all pages visited with their display duration, enter and leave times will be written to standard output. This can be very useful when preparing presentations.
Questo significa che a voler fare una prova dell'esposizione, uno può lanciarla col comando
impressive PRESENTAZIONE.pdf | tee -a TEMPI_SLIDES.txt
e uscendo dalla presentazione si ritrova nel file "TEMPI_SLIDES.txt" una bella tabella di quanto tempo ha speso su ogni singola slide.
  • Return key or Enter key - Toggle spotlight mode. In this mode, the page is darkened in the same way as if highlight boxes are present, but instead of (or in addition to) the boxes, a circular "spotlight" will be shown around the mouse cursor position, following every motion of the mouse cursor.
Davvero un ottima cosa, se si vuole ad esempio evidenziare un dettaglio particolare in una formula; estremamente più elegante che usare un puntatore laser, specialmente se si usa il tablet come touchpad remoto così da non essere vincolati a stare accanto il portatile!

Molte altre chicche nella documentazione del programma :)

(small edit)

(Ho rimosso da alcuni precedenti post l'embedding delle presentazioni/pdf che avevo postato, perché veniva formattato in maniera inutilmente fastidiosa: ho lasciato il link al file su Google Drive.)

Thursday, December 20, 2012

ASD2: Seconda esercitazione

Le slides della mia seconda esercitazione del corso ASD2 tenuta martedì scorso: link su G Drive.

Thursday, December 13, 2012

ASD2: Prima esercitazione

Oggi la mia prima giornata come esercitatore di un corso universitario. Ecco le slides dei due esercizi che ho proposto e discusso: link su G Drive.

Saturday, December 8, 2012

Uomo avvisato...

Unicredit è la banca che uso, perché ha un ottima Genius Card, è abbastanza paranoica da bloccarmi la carta dicendomi che è stato rilevato un virus sul mio pc Asus Ubuntu Certified, ha un ottima app per Android e trovi sue filiali in ogni angolo. A parte questo, tempo fa ho mandato una mail al rappresentante che mi ha fornito la Genius Card, lasciandomi con cortesia il suo biglietto da visita, ma sembra che quello che gli hp detto non l'ha toccato.
Il fatto è questo: se sul loro sito sbagli tre volte la password  per entrare nell'area clienti, ti bloccano l'account. A quel punto devi andare in una filiale o telefonare per fartela sbloccare. Confrontandomi con altri utenti ho notato che gli username sono incrementali, cioè con molta creatività gli utenti sono numerati tipo 01, 02, 03 etc...
Cosa potrebbe fare un malintenzionato con un minimo di fantasia? Da una rete anonima (vedi Tor), magari al comando di una botnet da quattro soldi, potrebbe fare uno scriptino che da vari ip inserisce l'user id di un utente (che come detto, magari sono addirittura assegnati in ordine... per cui se x è un utente, anche x+1 è un utente, e così via, senza rischio di perdere tempo a fare tentativi a vuoto), e inserisce un po' di volte una password a cavolo... nel giro di pochi secondi, tanti utenti si ritroverebbero l'account bloccato... chissà se sarebbero così tempestivi, quelli di Unicredit, da far andare giù il loro sito  prima che passi qualche minuto e gli utenti bloccati siano davvero tanti. In ogni caso, far andare offline il proprio sito non è una cosa carina da parte di una banca agli occhi dei propri utenti... non ispira certo molta fiducia. D'altronde, non facendolo, non è che poi potrebbero riattivare in blocco tutti quegli account... il malintenzionato in questione potrebbe approfittarsene in qualche modo...

Saturday, November 10, 2012

Lemmando

Due eventi sono indipendenti sse (se e solo se, conditio sine qua non) lo sono i loro complementari.
Molto intuitivo. Dimostrarlo coi conti non mi è venuto altrettanto immediato.
Assumendo $P(A|B)=P(A)$ abbiamo $$P({ A }^{ c }|{ B }^{ c })=\frac { P({ A }^{ c }\cap { B }^{ c }) }{ P({ B }^{ c }) } =\frac { 1-P({ A }^{  }\cup { B }^{  }) }{ P({ B }^{ c }) } =\\ =\frac { 1-P({ A })-P(B)+P({ A }^{  }\cap { B }^{  }) }{ P({ B }^{ c }) } =\frac { P({ B }^{ c })-P({ A })+P(A)P({ B }^{  }) }{ P({ B }^{ c }) }= \\ =1-\frac { P({ A })(1-P({ B }^{  })) }{ P({ B }^{ c }) } =P({ A }^{ c })$$

Sunday, November 4, 2012

Le Linux Day e la probabilità di ragionare

Un mese, tanta voglia di pensiero critico e rivoluzioni copernicane che mettano al centro un sistema tanto non inerziale che le forze fittizie possano essere il desiderio e il sogno.
Scherzo, questo non è un blog di letteratura.
Questo mese ho:

  • cercato di iniziare decentemente la tesi, con infinite insoddisfazioni verso la mia inefficienza e finendo col passare gli ultimi 4 giorni ( che in teoria erano una cartuccera di tempo per auspicare degni progressi), in vacanza;
  • rimandato infamamente il progetto di ML;
  • lavorato tanto tempo in biblioteca, quando la priorità dovrebbe essere evitare a tutti i costi di finire col dover scrivere i due punti precedenti;
  • fatto la mia picciola parte per il Linux Day: http://lug.uniroma2.it/2012/11/03/linuxday2012-ricordi-accanto-al-focolare/;
Nell'immediato futuro mi propongo:
  • di essere già a letto da almeno due ore a quest'ora;
  • di dare un sacco di ripetizioni per mettere da parte soldi;
  • di leggere quel che devo leggere (alcuni testi che dovrebbero fornirmi conoscenze strategiche) e far si che il mio relatore non si penta d'esser tale;
  • di fare il progetto di ML per diventare agile nel fare statistica.. 
Dopo quest'estroversione pragmatista passo alla riflessione del giorno.
A tutti piace conoscere e a nessuno piace studiare. 
Perché è così difficile studiare? 

In teoria è molto meglio starsene comodamente poltrendo in scrivania facendosi viaggi nel mondo delle idee che andare a spaccare legna. Eppure poca gente studia. È sgradevole? No. Ma pare che sia faticoso. 
Invece di studiare scegliamo di impiegare il nostro tempo col fare altro. Una parte di te è sicuramente d'accordo che non sarebbe una cattiva idea studiare per molte ore al giorno, eppure non lo fai. Qual è la parte di te che ti porta a non farlo? Una parte che vuole fare altro... che altro? 
Freud un po' di tempo fa ha coniato il "Principio del Piacere". Invece di studiare ci ritroviamo a fare cose che ci danno più piacere. La nostra vita è sproporzionatamente più dominata dal PP che dal PR (Principio della Ragione). Questo appare abbastanza evidente.
In un racconto fantascientifico che non ho ancora finito di scrivere (e non potete rubarmi l'idea, santa CC in alto a sinistra), viene trovato il modo di "spostare" la libido umana su un oggetto a piacimento (gioco di parole involontario), in pratica di pervertirsi a comando; nella pratica, per dirne una, la tempesta ormonale degli individui in piena pubertà viene artificialmente deviata verso lo studio accademico, sicché gli adolescenti si eccitano letteralmente in attività come lo studio, in modo propriamente sessuale; vi lascio immaginare l'umanità illuminata che ne faccio conseguire nel racconto.
Il problema, come pare potersi verificare nella pratica, è farsi piacere le cose. Se una cosa ti piace la fai, se una cosa non ti piace non puoi farla per troppo tempo, specialmente se la cosa ti richiede un certo animo; ad esempio un minatore che rischia di morir di fame può pure di mala voglia spaccarsi la schiena per anni in miniera, ma un presentatore televisivo che odia fare il presentatore televisivo non riuscirà a fare il suo lavoro al di sopra di un certo livello, per cui non appena è esatto un certo standard è bocciato. 
Non puoi studiare se non ti va. Puoi forzarti a farlo per molto tempo, ma non arrivi a livelli di eccellenza, a meno che non sei un masochista che gode a costringersi in cose che odia, ma ovviamente si ritorna in maniera abbastanza diretta a confermare che è tutta una questione di PP.

Il PP è la distrazione per antonomasia. Concentrarsi è spegnere il PP. Più in generale passare dallo stadio di bambino a quello di adulto prevede la capacità di procrastinare il soddisfacimento, in altre parole la capacità di dominare il PP; è una meta che può essere raggiunta nel momento in cui la tua volontà diventa un imperativo biologico, ovverosia quando te in quanto organismo senti che il tuo volere razionale, i.e. il prodotto della tua corteccia cerebrale, ha un alto valore nel garantirti il futuro piacere.

Studiare alla fine è gran facile. Prendi il libro, ti siedi in scrivania, lo apri e cominci a leggere.
Se poi cominci a riflettere sul fatto che sei schiavo di ciò che le tue passate esperienze (nelle concatenate interpretazioni con cui via via hai vissuto ciascuna di esse), ti obbligano a sentire più o meno piacevole... già così il fatto di studiare diventa una piccola e sottilmente piacevole affermazione di libertà contro il proprio destino biologico.

Thursday, October 4, 2012

Una base infinita per i razionali positivi

Problema: dimostrare o confutare che ogni $q\in \mathbb{Q}^+$ può essere scritto come somma di numeri della forma $\frac{1}{n}$ (con $n \in \mathbb{N}$) distinti (i.e. ciascuno preso una sola volta).

Lo riformulo a parole mie:
Dato $S=\{1,\frac{1}{2},\frac{1}{3},\frac{1}{4},...\}$, dimostra o confuta che per ogni $q\in \mathbb{Q}^+$ esiste un sottoinsieme finito di $S$ la somma dei cui elementi è uguale a $q$.

Il prof. Tauraso ha dato una dimostrazione a lezione che non ho ben seguito perché ero impegnato a pensare a un diverso approccio. A fine lezione mi ha suggerito che un metodo alternativo consiste nell'usare l'identità $\frac{1}{n}=\frac{1}{n+1}+\frac{1}{n(n+1)}$, avendo dunque cura di dimostrare che iterare un processo di "riscrittura" del numero razionale dato attraverso tale identità costituisce un processo finito.

Provando a buttar giù la mia presunta soluzione citata al post precedente, mi sono accorto dell'enorme epic fail che c'era dietro...
At least, I tried.

Tuesday, October 2, 2012

Step by step, vita i(n)tera(t)tiva

Durante questo mese ho accumulato molti spunti per vari post. Alcuni li iniziai pure a scrivere, ma non crebbero oltre il livello di bozza. Ho un amico che ultimamente mi ha definito più di una volta "ecologico": sono uno che risparmia, dal cibo al resto. Mi piacerebbe fosse vero, e in un certo senso è forse uno dei pochi vantaggi dell'essere nell'inflazionata, italianissima, classe dei procrastinatori. Il lofacciodopo ha il vantaggio di scremare il non essenziale, se lo si accompagna con decenti e potenti sensi di colpa.
Sul finir del mese mi ritrovo, grazie alla trafilata dei tre orali di ieri mattina, a tre esami dal chiudere il piano di studi. Un gran successo se non fossi me, cioè chi si era proposto di effettuare suddetta chiusura in tempi assai più brevi. 
Come mio insolito, non posto nulla del materiale del corso. Bisogna, prima o poi, prendere atto dell'esistenza di Google (cfr. l'insulsa quantità di studio mnemonico che il sistema d'istruzione italiano continua a propinare). Le dispense del Prof. Gianluca Rossi, per lasciare comunque un commento, non sono male, e gli esercizi fanno pensare.

Quest'estate, pur in pigrizia accademica, penso di aver avuto qualche piccola illuminazione sul numero 42, e qualche altra continua ad arrivare. A parte scherzi, tra le cose ho elucubrato su quanto sintetizzato in un recente post di uno dei miei blogger preferiti:
"per darsi una risposta bisogna prima essere disposti a farsi la domanda"

Mentre mi tengo la rarità di aver iniziato un blog di matematica senza quasi mai postare una formula, mi ripropongo a seguire di rendere più utile a me stesso l'attività di blogger cercando di scrivere in decente inglese. Nel mentre l'università è ricominciata, e con essa il bel corso di LAM. Nel prossimo post esporrò la mia soluzione a uno dei problemi presentati nella prima lezione.

Wednesday, September 5, 2012

POINTING OUT

Software and cathedrals are much the same 
– first we build them, then we pray.

I famigerati puntatori del linguaggio C, spiegati decentemente, non sono poi questo gran arcano. Con
int n 
dichiariamo una "scatola" che conterrà un intero e si chiamerà n, mentre con
int *n
dichiariamo una scatola che conterrà un intero e si chiamerà *n.
Stessa cosa dunque, ma

  • nel primo caso con n il computer intende il contenuto della scatola
  • nel secondo caso il contenuto per lui si chiamerà *n mentre se scriveremo solo n ci restituirà l'etichetta dello scatolone, cioè una stringa che corrisponde all'indirizzo di memoria fisico del computer dove il dato è registrato (vedere come è fatta la memoria di un pc dal punto di vista hardware).


Prima di arrivare a capire decentemente i puntatori nel modo che abbiamo tradotto in scatoloni e etichette, mi restava oscuro il fatto che l'asterisco quando dichiaravamo un puntatore assurgeva a indicatore del fatto che n avrebbe "puntato" un indirizzo di memoria, mentre nel restante testo del programma avrebbe funto da "operatore di dereferenziazione", cioè avrebbe indicato il "contenuto della scatola";
in altre parole i prof scrivevano
int *n
e dicevano "sto dichiarando un puntatore di tipo int", dunque io pensavo "qui '*' indica che n è un puntatore, cioè un indirizzo di memoria", mentre poi nel testo scrivevano
*n=1
e dicevano "ora nella memoria puntata dall'indirizzo indicato da n, stiamo registrando il valore 1", dunque io pensavo "qui '*' mi dice che sto andando a scrivere all'indirizzo n e non dentro n".
Dunque, mi pareva che al momento dell'inizializzazione l'asterisco significasse "è un puntatore" mentre in seguito volesse dire "è l'indirizzo del puntatore", ovvero due cose praticamente opposte...

L'errore derivava appunto dal fraintendimento riguardo che cosa volesse dire "dichiarare un puntatore".
Mentre inizializzare una variabile, per esempio facendo
int n
significa dire come dovranno essere letti e scritti i bit in un certo indirizzo di memoria (ad esempio il tipo unsigned int è un intero senza il segno, mentre int può essere negativo, dunque quest'ultimo a differenza del primo avrà un bit specificatamente dedicato a memorizzare se è positivo o negativo), ed n sarà associato al contenuto dell'indirizzo di memoria, cioè sarà il dato stesso;
inizializzare un puntatore invece, ad esempio facendo
int *n
significa che la lettera n designerà l'indirizzo stesso di memoria, e non il contenuto, e il tipo che precede l'asterisco non sarà riferito propriamente a n, ma a come dovranno essere scritti e letti i bit all'indirizzo n.
In parole povere, è sbagliato dire che si inizializza un puntatore (come dicevano i prof mandandomi in pappa), perché o si inizializza una variabile oppure si inizializza IL CONTENUTO ALL'INDIRIZZO DATO DAL PUNTATORE.