Il mio Mac è lento, che fare?

Sottotitolo: una post scritto in modo che possa capirlo anche mia nonna.

Quasi ogni giorno qualcuno mi dice che il suo Mac è lento e mi chiede se è il caso di acquistare della RAM, sostituire l’hard disk con un disco SSD o, nei casi più estremi, se è necessario buttare via il computer e comprarne uno nuovo.

Partiamo dunque dalle basi oppure, per chi non ha voglia di leggersi tutto lo spiegone, si può andare direttamente al punto.

CPU (Central Processing Unit)

Mac Lento? CPU
Photo Credit: Stéfan

La CPU è considerata il cervello del computer e spiegare come funziona è piuttosto complesso dunque, per farla breve, diremo che è quel componente hardware che esegue l’elaborazione dei dati. È abbastanza intuitivo capire che più la CPU è potente (la frequenza di clock viene misurata in Hz), più dati potranno essere elaborati in minor tempo. A partire dal 2005 hanno cominciato a diffondersi le CPU dual core: si tratta di un unico componente hardware con due processori montati in parallelo. Ancora più recenti sono i computer che montano processori multi core (tre o più core). Sui Mac attualmente in vendita troviamo comunemente processori Intel i5 dual-core (MacBook Air, MacBook Pro 13″, iMac, Mac Mini), Intel i7 quad-core (MacBook Pro 15″, Mac Mini, Mac Pro) o Intel XEON 6-core (Mac Pro).

Attenzione: per sfruttare al meglio la potenza di calcolo disponibile su computer con processori dual o multi core le applicazioni devono essere ottimizzate. Al momento della loro introduzione sul mercato, i computer con processori dual core funzionavano peggio di quelli single core.

Cache, Turbo Boost, Hyper-Threading

Leggendo le specifiche tecniche dei processori, è molto probabile che vi imbattiate in termini come questi:

  • Cache: si tratta di una piccola memoria che il processore ha in cui può salvare le operazioni ripetitive per fare in modo di accedervi più velocemente.
  • Turbo Boost: è una peculiarità dei processori Intel che permette, quando lavorano in single-core o dual-core, di aumentare la frequenza di clock (over-clocking) del processore. Esempio: normalmente il processore di un MacBook Pro 15″ con display Retina lavorerebbe a 2.0 GHz ma il processore può arrivare a 3.2 GHz.
  • Hyper-Threading: è un’altra tecnologia presente sui processori Intel che fa credere al computer di avere più core rispetto a quelli realmente presenti nella CPU, aumentando le prestazioni del computer. Questo aiuta quando l’utente utilizza più applicazioni contemporaneamente o, ad esempio, quando navigando sul web, apriamo un sito con diversi contenuti multimediali che devono essere caricati contemporaneamente (immagini, video, audio, ecc…).

RAM (Random Access Memory)

Mac lento? RAM
Photo Credit: purplemattfish

In Italiano il termine memoria è fuorviante soprattutto quando viene usato erroneamente per indicare sia la memoria RAM che lo spazio disponibile sull’hard disk. Eppure il termine memoria è corretto perché di fatto sia sulla RAM che sull’Hard Disk vengono letti e scritti i dati. Qual è la differenza, dunque? Che la RAM è innanzitutto una memoria volatile ovvero che non conserva i dati al suo interno quando il computer viene spento; questo punto a sfavore è compensato, però, dalla velocità di lettura/scrittura dei dati.

Per fare un esempio: se aprite un programma di scrittura e create un nuovo file, quel documento vivrà nella RAM finché non lo salverete la prima volta e ogni modifica che apporterete sarà salvata sulla RAM fino al salvataggio successivo. Ecco perché se il computer si dovesse spegnere improvvisamente, rischiate di perdere parte dei dati su cui stavate lavorando.

Negli ultimi anni gli sviluppatori di software hanno studiato dei metodi come l’auto-save periodico o il versioning per ovviare a questo problema; ma questo è un discorso che merita un post a parte.

I Mac attualmente sul mercato vengono generalmente venduti con 4GB di RAM ma ne supportano almeno 16. Dal momento che esistono vari tipologie di memorie (DDR, DDR2, ecc…) io consiglio sempre di utilizzare siti come Crucial in cui, indicando il modello del nostro computer, ci vengono mostrati i modelli di RAM compatibili. Sul sito Apple, invece, trovate le istruzioni su come sostituire o montare la RAM acquistata in base al computer che possedete.

Attenzione: alcuni modelli di Mac di ultima generazione (MacBook Air, MacBook Pro con display Retina), per questione di design, hanno i componenti saldati assieme ed è quindi impossibile fare un upgrade della RAM.

Hard Disk

Mac Lento? HDD o SSD
Photo Credit: wwarby

L’hard disk (HDD) è l’altro tipo di memoria presente sul nostro computer su cui vengono salvati i nostri dati. Gli hard disk hanno due limiti fisici: la velocità di rotazione del disco (generalmente 5400 o 7200rpm) e la velocità del braccio che legge e scrive i dati. Tale limite non è stato un problema finché i computer non sono diventati così potenti da riuscire a fare più operazioni di quelli che fisicamente sono scrivibili su un disco che gira a una velocità definita; per questo motivo fino a pochi anni fa gli upgrade che si consigliavano sempre erano l’acquisto di RAM o la sostituzione del processore mentre, oggi, si consiglia di sostituire l’hard disk. Negli ultimi anni sono comparsi sul mercato i cosiddetti dischi SSD che, a differenza dei precedenti, si basano su memorie flash (per capirci, sono simili alle schede SD che usiamo nelle macchine fotografiche o alle chiavette USB) invece che su componenti fisici.

  • Vantaggi: gli SSD sono molto più veloci in fase di lettura/scrittura dei dati (tra i 200 e i 550MB/s invece che 50-120 MB/s), questo permette di avere un computer più performante sia in fase di accensione e spegnimento sia quando apriamo i programmi. Non avendo componenti fisici i dischi SSD sono più silenziosi e consumano meno elettricità e, inoltre, non hanno alcun problema di magnetismo.
  • Svantaggi: i dischi SSD sono più costosi (si parla di circa $0.50/GB rispetto a $0.15/GB dei dischi HDD), hanno ancora capienze limitate (è difficile trovare dischi SSD da 1TB) e hanno una vita più breve; hanno, cioè, un numero definito di dati che possono leggere/scrivere prima che diventino completamente inutilizzabili. Gli hard disk tradizionali, invece, sono utilizzabili finché non subiscono un danno “fisico”.

Il mio Mac è lento, che fare?

Prima o poi il computer nuovo che avete appena acquistato diventerà lento. Il ciclo di vita di un computer è generalmente di 4 o 5 anni ma con i dovuti accorgimenti e upgrade si può arrivare anche a 7 o 8 anni. Evitando di fare aggiornamenti continui il nostro computer può essere utilizzabile finché non si romperà qualche componente: non a caso ci sono dei computer degli anni ’80 ancora perfettamente funzionanti.

Le cause del rallentamento delle prestazioni di un computer possono essere molteplici: aggiornamenti software che richiedono più potenza rispetto ai precedenti e che, alla lunga, possono rallentare l’intero sistema oppure problemi legati all’hardware insufficiente rispetto al tipo di utilizzo che facciamo del nostro computer. Per fare un esempio: è impensabile fare dei montaggi video in HD 4K su un MacBook Air.

La prima cosa da fare è dunque capire se il problema di lentezza del nostro computer è dovuto a un problema hardware o software. Nel primo caso, le soluzioni possono essere fare un upgrade dei componenti (acquistare più RAM oppure sostituire il nostro HDD con un disco SSD) oppure sostituire la nostra macchina con una più moderna. Spesso dei piccoli investimenti fatti nel tempo ci aiutano ad allungare di 2 o 3 anni la vita del nostro Mac. Se cercate delle guide da seguire per la sostituzione dei componenti del vostro computer, vi suggerisco il sito IFixIt.

Nel caso sia un problema legato al software la mia prima domanda è: qual è stata l’ultima volta che hai formattato (per i meno esperti: formattare = cancellare tutto e ripartire da zero come se il computer fosse nuovo) il tuo computer? Io formatto il mio Mac almeno una volta all’anno reinstallando manualmente ogni applicazione e ricopiando da un hard disk esterno i dati che mi interessa tenere. Questo mi permette sia di avere un computer più performante (perché evito, ad esempio, di installare nuovamente software che non ho utilizzato negli ultimi mesi) sia di fare una cernita dei file essenziali e di quelli che, invece, non mi servono. Stessa cosa dicasi quando ci sono importanti aggiornamenti del sistema operativo: piuttosto che fare un upgrade dove, ovviamente, vengono mantenuti e aggiornati i vecchi file, preferisco ripartire da zero con un bel clean install.

Programmi come Mac Cleaner, App Zapper e simili per me sono da evitare come la peste. Non discuto sulla loro utilità per le persone meno esperte ma preferisco di gran lunga avere pieno controllo di quello che avviene sul mio computer e non mi piace che un programma valuti al posto mio quali sono i file utili e quelli inutili.

ChucK 101 – Lezione 3: Questione di tempo

È passato un po’ di tempo dalla seconda lezione e, ormai, dovreste aver acquisito una certa familiarità con le variabili e i tipi di dati in ChucK. Negli esempi che abbiamo fatto visto fino a oggi abbiamo usato una parola chiave che non abbiamo mai approfondito: now.

In ChucK, così come in tutti i linguaggi di programmazione, esistono delle parole chiave che sono “riservate” perché permettono al linguaggio stesso di funzionare e, quindi, non possono essere usate per attribuire a variabili create dall’utente quel nome specifico. Ad esempio, non possiamo creare una variabile di nome now perché per il compilatore quella parola ha già un significato ben preciso. La regola generale dice che tutte le parole che dentro miniAudicle vengono colorate, sono parole chiave riservate.

La variabile di durata “dur”

Possiamo utilizzare la parola chiave dur per determinare delle variabili di durata. Riprendiamo l’ultimo esempio fatto nel precedente post (quello con le variabili di tipo float) e aggiungiamo delle variabili di durata.

/*
* Chuck 101 - Lezione 3
* Questione di tempo
*/
SinOsc sine => dac;

// Middle C (in Hz)
261.626 => float myFrequency;

// Volume as a variable
0.6 => float myVolumeOn;
0 => int myVolumeOff;

// Variabili di durata
0.50::second => dur onDuration;
0.75::second => dur offDuration;

// Suoniamo una nota
myFrequency => sine.freq;
myVolumeOn => sine.gain;
onDuration => now;

myVolumeOff => sine.gain;
offDuration => now;

// Suoniamo un'altra nota al doppio della frequenza
2 *=> myFrequency;

myFrequency => sine.freq;
myVolumeOn => sine.gain;
onDuration => now;

myVolumeOff => sine.gain;
offDuration => now;

Analizziamo il codice che abbiamo appena scritto: all’inizio del programma abbiamo deciso di utilizzare un’oscillatore con onda sinusoidale a cui abbiamo assegnato una frequenza pari a 261.626 Hz (Do centrale); abbiamo due variabili di volume: la prima a 0.6 (nota ON) e la seconda a 0 (nota OFF). Nel primo caso abbiamo utilizzato una variabile float in quanto il valore è decimale, nel secondo caso una variabile di tipo integer. Abbiamo dichiarato due variabili di durata utilizzando la parola chiave dur.

Nelle blocco di codice tra le righe 18 e 24, facciamo suonare al nostro oscillatore una nota per 0.5 secondi per poi fare una pausa (impostando il gain a 0) di 0.75 secondi. Nel blocco dalla riga 26 alla fine del progetto, ripetiamo la stessa operazione raddoppiando, però, la frequenza riprodotta.

Altre variabili di tempo

Oltre a now durin ChucK sono previste altre parole chiave di tempo:

samp che corrisponde a 1 sample digitale e dipende dalla frequenza di campionamento (normalmente 1 sample equivale a 1/44100 di secondo), ms ovvero millisecondi, second per i secondi, minute per i minuti, hour per le ore, day per i giorni, week per le settimane. Mancano le variabili “mesi” e “anni” perché, come ben sappiamo, posso avere durate diverse (mesi di 28, 30 o 31 giorni e anni di 365 o 366 giorni).

Questione di tempo

Nel post introduttivo avevo accennato all’importanza del tempo in ChucK. Non dobbiamo dimenticare che senza lo scorrere del tempo il suono e, di conseguenza, la musica non potrebbero esistere. Grazie alla lezione di oggi, abbiamo scoperto che in ChucK possiamo cominciare a manipolare il tempo a nostro piacimento.

Cose importanti da ricordare:

  • le variabili di tempo durata sono native in ChucK (come le variabili integerfloat).
  • la variabile now rappresenta sempre il tempo corrente in ChucK (riparte ogni volta da 0 quando avviamo la Virtual Machine).
  • l’unico modo per far scorrere il tempo in ChucK è manipolare la variabile now.

Dal momento che le variabili di tempo e durata sono native, possiamo ovviamente seguire operazioni matematiche tra di esse per creare nuove variabili di tempo.

2::second + 1::minute => dur newDur;

Nella musica “suonata” il tempo viene contatto in BPM (Beats Per Minute) e non in secondi. Come ovviare a questo problema? Creando delle variabili come nell’esempio seguente:

// Impostiamo i quarti (seminima) a 0.8 secondi (75BPM)
0.8::second => dur quarter;

// Impostiamo, di conseguenza, il valore della semibreve o intero
4::quarter => dur whole;

// Impostiamo il valore della minima (1/2)
whole/2 => dur half;

// Impostiamo il valore della croma (1/8)
quarter/2 => dur eighth;

Random Music

Vi lascio con un ultimo programma, molto semplice, che genera musica in modo assolutamente casuale. In questa porzione di codice ci sono cose che ancora non abbiamo visto ma i commenti inseriti credo lo rendano piuttosto chiaro:

/* Random Music */

SinOsc sine => dac;

// Loop infinito
while (true)
{
 // Frequenza casuale tra 100 e 1000
 Math.random2(100,1000) => sine.freq;

 // Durata casuale tra 30 e 1000 ms
 Math.random2f(30,1000) :: ms => now;
}

Chuck 101 – Lezione 2: Tipi di dati e variabili

Con la prima lezione abbiamo cominciato ad avventurarci nel fantastico mondo di ChucK; ora è arrivato il momento di definire un paio di concetti fondamentali per sviluppare le nostre future applicazioni musicali: tipologie di dati e variabili.

Tipi di dati

La maggior parte dei dati che ci troveremo a gestire all’interno di ChucK sono numeri. Quando si programma si incontrano principalmente due categorie di numeri: integerfloating points. Nel primo gruppo rientrano tutti i numeri senza decimali, nel secondo quelli che invece li hanno.

1 – 45 – 3945 – 20395 sono tutti numeri di tipo integer.

1.2 – 2.3495 – 294056.1 – 394.12 sono, invece, dei float (abbreviazione di floating points).

Esempio 1: Integer

In questo programma in ChucK, opportunamente commentato, vediamo come creare una variabile chiamata «a» a cui assegnamo un valore integer pari a 4. Infine, stampiamo a schermo la nostra variabile:

/*
* Chuck 101 - Lezione 2
* Tipi di dati e variabili
*/
// Esempio Integer
// Definiamo una variabile 'a' come integer;
int a;
// Assegnamo alla nostra variabile un valore numerico
4 => a;
// Scriviamo il valore di a
<<< a >>>;

Se avete fretta c’è un metodo più veloce per assegnare un valore direttamente a una variabile; possiamo sostituire la definizione della variabile e l’assegnazione nel precedente programma con il seguente codice:

/*
* Chuck 101 - Lezione 2
* Tipi di dati e variabili
*/
// Esempio Integer
// Definiamo una variabile 'a' come integer;
int a;
// Assegnamo alla nostra variabile un valore numerico
4 => int a;
// Scriviamo il valore di a
<<< a >>>;

Operazioni matematiche

Ora che abbiamo imparato ad assegnare numeri a delle variabili, possiamo sbizzarrirci con le operazioni matematiche;

Provate a scrivere nel vostro programma:

// Definiamo una variabile 'a' come integer;
4 => int a;
// Moltiplichiamo per 4 la nostra variabile
5*a => a;
// Scriviamo il valore di a
<<< a >>>;

Se tutto è stato scritto correttamente,  nella virtual machine dovreste leggere:  20 : (int)

Anche in questo caso possiamo ricorrere alla seguente scorciatoia per velocizzare la programmazione:

// Definiamo una variabile 'a' come integer;
4 => int a;
// Moltiplichiamo per 4 la nostra variabile
5*=> a;
// Scriviamo il valore di a
<<< a >>>;

Esempio 2: Floating Points

Utilizziamo ora una variabile ti tipo floating points (quindi con dei numeri decimali) all’interno di un programma “musicale”.

/*
* Chuck 101 - Lezione 2
* Tipi di dati e variabili
*/
SinOsc sine => dac;

// Middle C (in Hz)
261.626 => float myFrequency;
// Volume as a variable
0.6 => float myVolume;

// Imposto la frequenza
myFrequency => sine.freq;
// Imposto il volume
myVolume => sine.gain;

// Imposto la durata a 1 secondo.
1::second => now;

Questo piccolo programma riprende in parte quanto fatto la prima lezione ma, anziché assegnare dei valori direttamente alla frequenza e al volume, abbiamo assegnato i valori numeri a delle variabili; così facendo, come vedremo nelle prossime lezioni, potremo modificare i valori con l’avanzare del tempo nel programma.

Per chi se lo stesse chiedendo, il valore 261.626 non è casuale ma è quello riportato in questa tabella e indica, come riportato nel commento, l’esatta frequenza del do centrale nel pianoforte.

Altri tipi di dati

Abbiamo visto variabili di tipo numerico che, come già detto in precedenza, saranno quelle che useremo maggiormente. In ChucK, però, possiamo definire anche altri tipi di variabili:  char (un singolo carattere, es: “a”, “b”, “z”, …), string (una stringa di caratteri, es: “hello”, “ciao”, “cartella/fileaudio.wav”), dur (per definire la durata, es: 1::second) e, infine, time (definisce la durata in sample).

Compiti a casa

Nella prossima lezione, analizzeremo nel dettaglio le variabili temporali e la gestione del tempo in ChucK. Nel frattempo, con le nozioni apprese oggi, provate a sperimentare con suoni, variabili e funzioni matematiche per modificare la frequenza assegnata al vostro oscillatore.

ChucK 101 – Lezione 1: Hello Sine!

Benvenuto alla prima lezione del corso «ChucK 101», ovvero il corso introduttivo al linguaggio di programmazione real-time dedicato alla musica di cui ho già parlato qui.

È la prima volta che programmi?

Nel caso in cui la risposta a questa domanda sia si, prima di cominciare ad avventurarci nei meandri del codice, è il caso di spendere due parole per mettere in chiaro alcune questioni fondamentali:

  1. Programmare non è semplice; richiede tempo per migliorarsi e un sacco di pazienza.
  2. Non copiare il codice! Mi rendo conto che la tentazione di fare un veloce copia-incolla del codice che troverai di seguito sia troppo forte ma, così facendo, non imparerai nulla. Inserire a mano, di volta in volta, le righe di codice ti darà la possibilità di imparare più in fretta il linguaggio di programmazione e di capire realmente quello che si sta facendo.
  3. Sperimenta. Questo è un concetto fondamentale: non basarti solo su quello che troverai scritto nei miei post. L’obiettivo è sperimentare: prova a sostituire dei valori, delle variabili, intere parti di codice, ecc… . Solo così facendo riuscirai a imparare a programmare in ChucK esplorandone tutte le possibilità.
  4. Debug. Ti potrà capitare che i tuoi programmi non funzionino. È normale, succede a tutti (anche ai programmatori più esperti) e succede di continuo. Talvolta gli errori sono dovuti a sviste banali: errori di digitazione, punti o virgole mancanti, ecc…, altre volte individuare il problema può essere un’attività lunga complessa. La cosa che devi imparare subito è capire e interpretare correttamente i messaggi di errore che ti vengono restituiti dal compilatore quando il programma non funziona. Prima imparerai a riconoscerle questi messaggi e le relative cause del problema, più semplice sarà effettuare il debug del programma.
  5. Copia gli altri e non cancellare mai niente. Molti programmatori rilasciano parti di codice liberamente e con licenze che ti permettono di copiare o modificare i loro programmi. Non reinventare la ruota ogni volta; cerca se qualcuno ha affrontato il problema prima di te, studia le loro soluzioni (ma non prenderle mai come oro colato perché potrebbero non essere aggiornate) e, se consentito, copia il loro codice. Non c’è modo migliore di imparare e migliorarsi che guardare come programmatori più esperti hanno risolto lo stesso problema. Ricorda di non cestinare mai i tuoi programmi, in futuro quelle porzioni di codice potrebbe sempre tornarti utile.
  6. Google è tuo amico. Quando sbatti la testa contro un problema che non riesci a risolvere, cerca su Google, è molto probabile che qualcuno l’abbia fatto prima di te e abbia già trovato la soluzione (e sia stato così gentile da condividerla da qualche parte).

Il software: miniAudicle

Il primo passo da compiere è quello di scaricare il software  miniAudicle da questo indirizzo. L’ultima versione disponibile, al momento, è la 1.3.4.0. Il programma è diviso in tre finestre principali: Main Window (dove scriveremo il codice), Virtual Machine Monitor Window (il server che dobbiamo avviare ogni volta che vogliamo far girare un nostro programma), Console Monitor Window (finestra che si attiva quando avviamo la virtual machine e che ci mostra vari messaggi).

Main Window
Main Window
Virtual Machine Monitor Window
Virtual Machine Monitor Window
ChucK Console Monitor
Console Monitor Window

Hello World!

Normalmente il primo programma che si impara a scrivere, indipendentemente dal linguaggio utilizzato, si chiama “Hello World!”. Lo scopo di tale programma è quello di far scrivere sul monitor del computer queste due parole come output del programma.

Nella Main Window digitate:

<<<"Hello World!">>>;

Salvate il programma andando nel menu File > Save (scorciatoia Command + S). Dopodiché nella finestra Virtual Machine cliccate sul pulsante Start Virtual Machine e, infine, nella Main Window cliccate sul pulsante Add Shred (Command + “+”).

Se avete scritto tutto correttamente, dovreste ottenere un risultato come quello nell’immagine seguente:

ChucK Hello World

Dopo l’inizializzazione della Virtual Machine  (con i relativi parametri di configurazione), potete notare che il programma ha restituito in output quello che volevamo: la scritta “Hello World!”.

Con questo semplice programma abbiamo imparato due cose importanti: la prima è che alla fine di ogni riga di istruzioni dobbiamo utilizzare il punto e virgola, la seconda è che per vedere scritto qualcosa nella finestra Console Monitor dobbiamo utilizzare il comando <<<” “>>>.

Hello Sine!

Siccome ChucK è un linguaggio di programmazione orientato alla musica, il nostro obiettivo è quello di produrre dei suoni. Mettiamo dunque da parte il nostro primo programma “Hello World” e concentriamoci sul nostro primo esperimento musicale: “Hello Sine!”.

Per non rendere questo post troppo lungo e noioso con questioni teoriche, sorvolerò alcune questioni di base sull’audio, le forme d’onda, ecc… .

L’obiettivo del programma sarà:

  1. Utilizzare un oscillatore con onda sinusoidale (la forma d’onda più semplice)
  2. Fare in modo che tale oscillatore sia collegato al convertitore digitale-analogico (ovvero quel componente che permette al computer di emettere dei suoni attraverso gli speaker)
  3. Assegnare un valore di gain (volume) all’oscillatore
  4. Assegnare un valore di frequenza all’onda sinusoidale
  5. Emettere un suono per 1 secondo

Il codice del nostro programma:

// Hello Sine
// Aprile 2014
SinOsc sine => dac;
0.7 => sine.gain;
440 => sine.freq;
1::second => now;

Una volta completata la digitazione, avviando la Virtual Machine e cliccando su Add Shred, il vostro computer emetterà un suono a 440Hz (la nota di riferimento che viene utilizzata dai musicisti per accordarsi).

Analizziamo il codice che abbiamo scritto: le prime due righe, precedute da //, sono semplicemente di commento. All’inizio del tuo percorso, ti consiglio di commentare il più possibile ogni passaggio, più migliorerai, più sarai in grado di valutare autonomamente quando sarà necessario scrivere un commento e quando no. Cosa molto importante: tutto ciò che è scritto nei commenti verrà completamente ignorato dal compilatore.

Con il comando SinOsc abbiamo richiamato un oggetto unit generator in grado di generare il suono di un’onda sinusoidale. Il nostro generatore l’abbiamo chiamato sine (ma avremmo potuto scegliere un nome qualsiasi) e, attraverso l’operatore =>, l’abbiamo collegato al dac (digital to analog converter).

Abbiamo assegnato il valore .7 al gain e 440 alla frequenza emessa dal nostro oscillatore. A differenza di molti linguaggi di programmazione, in ChucK si esprime prima il valore e poi la variabile a cui tale valore deve essere assegnata (e lo si fa utilizzando sempre l’operatore => che, come vedremo in futuro, sarà onnipresente nei nostri esercizi).

Come avrete intuito, le variabili sono legati all’oggetto di riferimento attraverso la sintassi oggetto.impostazione per cui dobbiamo utilizzare nomi efficaci e che abbiano senso. Per esempio, se avessimo assegnato all’oscillatore il nome «pippo» (SinOsc pippo => dac;) avremmo dovuto scrivere pippo.gain pippo.freq per assegnare correttamente i valori.

Infine, abbiamo detto al nostro programma di avanzare di un secondo nel tempo con il comando: 1::second => now;

Mi rendo conto che quest’ultima parte potrebbe non essere chiara al momento ma in futuro spiegherò esattamente come funziona la gestione del tempo in ChucK.

Compiti a casa

Per concludere questa prima lezione ti lascio con qualche spunto per divertirti un po’ nell’attesa della prossima lezione:

  • SinOsc ha prodotto un’onda sinusoidale, prova a utilizzare TriOsc (onda triangolare), SqrOsc (onda quadra) o SawOsc (onda a dente di sega)
  • Utilizza /* per aprire un commento di più righe e */ quando vuoi chiuderlo. Questo sistema tornerà molto utile in fase di debug per escludere, commentandole, le righe di codice non funzionante.
  • Prova a creare una breve composizione utilizzando solo ed esclusivamente le cose descritte fino a qui. Suggerimento: quando vuoi creare una “pausa”, devi impostare il valore del volume dell’oscillatore a 0. Ricordati di lasciare nei commenti un link alla tua composizione!

Mixare è come cucinare

Molto spesso mi servo di analogie per uscire dall’impasse di dover descrivere ai miei studenti, in termini facilmente comprensibili, questioni legate al mondo del suono e dell’audio che, per loro natura, sono soggettive o difficilmente descrivibili a parole.

Di recente mi è capitato di paragonare la professione del fonico, sia esso in studio di registrazione che live, con il mondo della cucina.

Gli ingredienti

Scegliere gli ingredienti giusti per mixare
Photo Credit: The Little Squirrel

Per prima cosa dobbiamo partire dagli ingredienti: in ogni cucina ci devono essere degli ingredienti base che non possono mancare ai quali, di volta in volta, ne dovranno essere aggiunti altri che dovranno essere freschi e di qualità. Indipendentemente dalla ricetta, dagli strumenti utilizzati e dalla persona che lo prepara, se cuciniamo un piatto con qualche ingrediente non fresco, il risultato sarà sicuramente da buttare.

Nel caso di un lavoro in studio di registrazione, gli ingredienti di un mix sono, ovviamente, le tracce audio; le nostre registrazioni devono essere della massima qualità sia per quanto riguarda l’aspetto tecnico (non starete mica registrando a 16 bit, vero?), che per quello musicale: evitate clip e distorsioni, non mettete un gain troppo alto perché, quando si lavora in digitale, è facile recuperare tracce con gain basso ma impossibile lavorare con quelle che sono andate in distorsione. Il nostro obiettivo è quello di registrare la miglior performance del musicista e, per farlo, dobbiamo mettere gli strumentisti a loro agio, assicurarci che le chitarre siano accordate, essere pronti a registrare e, per sicurezza, premere sempre REC anche quando “si fa una prova”.

In ambito live gli ingredienti sono i musicisti che sono sul palco: più sono professionali, migliore sarà il risultato finale. Anche in questo caso il vostro compito è quello di fare in modo che loro siano a loro agio e, durante la sera, possano fare la miglior performance possibile.

La ricetta

La ricetta
Photo Credit: ciuccio51

La ricetta è il punto di partenza di ogni esperimento culinario: che si parta completamente da zero o che si esegua un piatto già noto, le ricette sono la nostra guida (anche solo per controllare la quantità di un singolo ingrediente) e il libro delle ricette è il Sacro Graal di ogni chef. Fuor di metafora, le ricette sono i nostri riferimenti musicali e il libro delle ricette è la nostra libreria musicale. Più saremo curiosi e avidi di «nuova» musica, più sarà semplice il nostro lavoro di mixing engineer.

La cucina

Photo Credit: Julicious Photography
Photo Credit: Julicious Photography

Se stiamo pensando al lavoro in studio di registrazione, la cucina è la nostra Digital Audio Workstation ovvero il software che decidiamo di utilizzare per il nostro lavoro. Quando mi viene chiesto qual è il programma migliore per comporre, registrare, mixare, ecc…, la mia risposta è sempre la stessa: quello che conosci e sai usare meglio.

Fino a qualche anno fa esisteva una reale differenza in termini di qualità, prestazioni e potenzialità tra Pro Tools, Logic Pro, Digital Performer, Cubase, … . Oggi queste differenze si sono assottigliate parecchio e, come dicevo prima, il principio fondamentale deve essere quello di riuscire a compiere l’azione che vogliamo fare nel minor tempo possibile. Così come un cuoco è padrone della sua cucina e sa bene cosa si nasconde dentro ogni mobile e dentro ogni cassetto, quando si registra o siamo in fase di mix non dobbiamo perdere più di tre secondi per ogni azione che vogliamo compiere. Quindi scegliete un software, studiatelo bene e usate solo ed esclusivamente quello; installarne due e provare a utilizzarli entrambi sarà solo una gran perdita di tempo.

Nota a margine: quando avete un sistema funzionante e ottimizzato, NON aggiornate MAI. Ho sentito storie di tecnici del suono che utilizzano ancora Pro Tools 5.

Nel caso dei live, invece, la cucina è la strumentazione che stiamo usando e, in particolare, il mixer. Negli ultimi anni i mixer digitali hanno invaso il mercato grazie ai costi sempre più accessibili; ognuna di queste macchine ha possibilità pressoché infinite e, proprio per questo, dobbiamo conoscere la funzione di ogni tasto o knob e sapere che se stiamo muoviamo un fader, stiamo realmente ottenendo l’effetto che cercavamo.

Gli utensili

Photo Credit: felix388
Photo Credit: felix388

Una volta scelta con attenzione la nostra cucina, dobbiamo imparare a utilizzare ogni strumento nel modo giusto. Tentare di sbucciare un’arancia con un cucchiaino da caffé non ci porterà molto lontano così come cercare di eliminare con un riverbero il rientro dell’hi-hat nel microfono del rullante sarà fatica sprecata. Il mio esempio è, ovviamente, assurdo ma (molto) spesso mi capita di vedere ragazzi che utilizzano in modo inappropriato i compressori. Consiglio: non andate alla continua ricerca dell’ultimo plug-in in vendita o all’acquisto di hardware sempre nuovi; imparate a usare bene quelli che sono già a disposizione, gratuitamente, nella vostra DAW (o quelli che avete già acquistato); saranno sufficienti nel 99% dei casi.

Il cuoco

Photo Credit: Ansgar Trimborn
Photo Credit: Ansgar Trimborn

Alla fine tocca anche al cuoco perché pur partendo con gli ingredienti migliori, la cucina più attrezzata e gli strumenti giusti, è il cuoco che fa la magia. La stessa cosa avviene anche quando si mixa: è il «gusto» del fonico a fare la differenza.

Come si diventa dei bravi cuochi? Con la pratica: ore e ore di cucina, ore passate nei mercati per imparare a scegliere gli ingredienti giusti dai venditori migliori, un sacco di piatti buttate nella pattumiera per puntare a raggiungere un risultato migliore.

Un’introduzione a ChucK

L’introduzione dei computer in ambito creativo ha portato a un’evoluzione del significato abitualmente attribuito ai termini artista e musicista: il computer infatti, per moltissimi performer, è diventato indispensabile sia durante la fase creativa che live; ma possiamo davvero definirci «creativi» e non semplici «utilizzatori» di tecnologie sviluppate da altri?

Rispondere a questa domanda potrebbe non essere semplice e potremmo rischiare di finire in un loop nel caso in cui non fissassimo dei punti fermi: lo scopo di questo post (e di quelli che seguiranno) non è certo quello di spiegare come costruire un computer e programmare da zero un sistema operativo bensì di invogliare a spingersi un po’ più in profondità rispetto a quello che, normalmente, accade quando fruiamo di un programma di questo genere.

Utilizzare strumenti creati da altri è certamente una scorciatoia per realizzare velocemente le idee che abbiamo in mente ma questo comporta, necessariamente, rispettare dei limiti che ci vengono imposti da chi quel software l’ha creato. Alcuni artisti non amano avere questo tipo di barriere e, quindi, si sono rivolti al mondo della programmazione per poter analizzare più in profondità le possibilità che la tecnologia oggi può offrire.

Avere maggiore controllo sulla tecnologia ci permette di abbattere anche le barriere “di genere” e ci consente di unire più ambiti artistici. Uno dei maggiori trend in ambito sia tecnologico che musicale degli ultimi anni è proprio quello di combinare performance musicali ad altre discipline creative: danza, animazione, computer grafica, design, installazioni, ecc…

Cos’è ChucK?

ChucK è un linguaggio di programmazione open-source per sintetizzare suoni e creare musica in real-time sviluppato da Ge Wang, professore associato alla Stanford University e fondatore della start-up Smule (Ocarina per iPhone). A differenza degli altri linguaggi (CSound, SuperCollider, PureData e Max/MSP), ChucK si basa su un concetto fondamentale: il tempo. Come vedremo nei post che seguiranno, quando scriviamo un programma in ChucK dobbiamo sempre fare riferimento al tempo che, scorrendo, ci permette di generare suoni o sintetizzarli.

ChucK è un linguaggio di programmazione testuale; questo significa che per utilizzarlo dovremmo scrivere righe di codice, un modo davvero inusuale di fare musica. Personalmente l’ho trovato molto stimolante perché permette di approcciare un problema comune con una prospettiva diversa. All’inizio farete un po’ più di fatica ma, una volta superati i primi scogli, vi assicuro che vi divertirete.

Alcuni esempi

Per cominciare

ChucK è completamente gratuito; il primo passo da compiere è scaricare l’applicazione a questo indirizzo (è disponibile per Mac, Windows e Linux).

Lo scopo di questo post era introdurre ChucK; l’intento generale è quello di scrivere  nel corso delle prossime settimane e mesi una guida in italiano sull’utilizzo di questo linguaggio di programmazione.

Risorse

Per chi volesse partire “da subito” consiglio le seguenti risorse:

ChucK Documentation:
http://chuck.stanford.edu/doc/

Introduction to Programming for Musicians and Digital Artists:
https://www.coursera.org/course/chuck101

Programming for Musicians and Digital Artists (book):
http://www.manning.com/kapur/

Perché dobbiamo insegnare a programmare ai bambini

[...] Nella nuova era dei microchip «questi ragazzi avranno l’opportunità di fare soldi». [...] La prossima volta che vi capita di vedere un ragazzino di dieci anni indemoniato che impreca contro Mad Alien Targ, ricordate che non si sta solo divertendo, non sta solo ammazzando il tempo e buttando via soldi: sta imparando il linguaggio informatico. [...]

L’invasione degli Space Invaders

Potrebbe suonare strano ma il mio avvicinamento al mondo della programmazione è avvenuto durante il Liceo Classico. L’indirizzo P. N. I (Piano Nazionale di Informatica) prevedeva, oltre alle materie di un classico “tradizionale”, le stesse ore di matematica e fisica di un liceo scientifico e, in quarta e quinta ginnasio, informatica. Il programma si concentrava fondamentalmente sull’apprendimento di Turbo Pascal.

Nonostante non sia mai stato una cima in matematica e abbia sempre odiato i test di logica, i Giochi di Archimede e cose simili (ricordo ancora con orgoglio i miei 18 punti quando, lasciando tutte le risposte in bianco, il punteggio minimo era 20), programmare era una cosa abbastanza naturale: con un paio di miei compagni c’era sempre la sfida a chi riusciva a completare i problemi più velocemente o con meno righe di codice.

All’inizio della prima liceo la maggior parte della classe era sollevata dal non dover più dover scrivere una riga di Turbo Pascal; dal mio punto di vista, invece, sentivo la necessità di approfondire l’argomento perché era divertente riuscire a insegnare a un computer a risolvere un problema. Se dal punto di vista dell’IT sperimentavo tutte le distribuzioni di Linux di quegli anni, con la programmazione mi orientavo più sullo sviluppo web avendo capito i limiti di Turbo Pascal ed essendo spaventato dal fatto che mia sorella, al primo anno di ingegneria informatica all’università, non riuscisse a venire a capo di Java.

Lo sviluppo web può sembrare semplice ma io l’ho ritenuto sempre affascinante, complesso e, al tempo stesso, completo: unire contenuti testuali, video, immagini, acquisire o richiedere dati in modo dinamico a un database, sviluppare un’interfaccia grafica intuitiva, la gestione degli errori causati dagli utenti con spiegazioni che fossero umano-comprensibili e, infine, nonostante il rispetto di tutti gli standard, doversi barcamenare per fare in modo che il sito funzionasse correttamente con tutti i browser presenti sul mercato (cosa che, negli ultimi anni, si è complicata ulteriormente dovendosi adattare a tutti i nuovi dispositivi con schermi di dimensioni differenti e interfacce di controllo touch screen).

La programmazione per il web è, come dicevo prima, una disciplina completa perché permette allo sviluppatore di scontrarsi con varie difficoltà appartenenti a categorie differenti: back-end, front-end, database, user interface, compatibilità multipiattaforma, ecc… che non possono fare altro che renderti un programmatore migliore, attento tanto alla funzionalità del programma quanto al fatto che sia a prova di idiota.

Se Martin Amis, autore del libro sopracitato, aveva capito le potenzialità in termini economici e occupazionali legate al mondo dell’informatica già nel 1982, è chiaro che, a più di vent’anni di distanza, nel nostro paese stiamo rimanendo indietro ancora una volta rispetto al resto del mondo; così come è avvenuto per l’insegnamento delle lingue straniere, sarebbe importante introdurre lo studio delle basi di programmazione fin dalla scuola primaria. Ovviamente questa cosa avrebbe senso se indirizzata subito a risvolti pratici: creiamo un gioco insieme, scriviamo un programma per risolvere problemi quotidiani; e non fermandosi solo alla teoria delle condizioni if, then, else o ai loop.

Da quanto mi risulta, l’unica realtà in Italia che si sta muovendo in questo senso è, ovviamente, privata: Digital Accademia, una società legata all’incubatore H-Farm, che sviluppa progetti di formazione e promuove la cultura digitale. In particolare il loro corso denominato «K-12» (sigla che, negli Stati Uniti, identifica la scuola primaria e secondaria), il cui scopo è quello di sviluppare una conoscenza degli strumenti digitali e una consapevolezza nel loro utilizzo, è rivolto a bambini e ragazzi dai 3 anni in su.

Nel resto del mondo ci sono diversi progetti in ballo ma, attualmente, il paese che sta investendo maggiormente in questa direzione è l’Inghilterra che, in seguito alla riforma della scuola, ha inserito nel National Curriculum, l’insegnamento della programmazione ai bambini dai 5 ai 16 anni. A partire dal prossimo settembre, i bambini e i teenager di sua maestà avranno un vantaggio rispetto ai loro coetanei in giro per il mondo. Quanto ci impiegheremo per metterci alla pari?

Da dove cominciare?

Ecco qualche spunto (purtroppo tutti in inglese) per chi avesse voglia di lanciarsi in questo mondo:

http://www.code.org/ – Se avete un’ora libera, cominciate da qui.
http://www.codecademy.com – Una vera e propria scuola on-line e gratuita.
http://www.programmr.com – Become a programming guru.
http://learncodethehardway.org – Learn Code the Hard Way.
https://www.codeschool.com – Learn by doing.

Il falso senso di sicurezza che ci danno gli asterischi

Quanto pensate sia sicura la vostra password? Secondo quanto riportato da Mark Burnett, esperto di sicurezza informatica e autore di alcuni libri sul tema come Perfect Password, il 99,8% delle persone utilizza una parola chiave contenuta nella sua lista delle 10’000 password più comuni.

In base ai dati da lui raccolti, il 4,7% della popolazione utilizza come parola chiave «password», l’8,5% utilizza «password» o «123456», il 9,8% opta per «password», «123456» o «12345678».

Pur non occupandomi direttamente di sicurezza informatica, mi imbatto quotidianamente in persone che mi guardano incuriosite quando comincio a digitare la password per accedere al mio computer e benché questa sia una questione molto importante da considerare e su cui sarebbe necessario fare informazione, non se ne parla tanto quanto si dovrebbe come accade, ad esempio, per la tutela della privacy.

Il problema: password, sicurezza e social network

Partiamo dal presupposto che una password efficace sia costituita da lettere maiuscole e minuscole, numeri e simboli, sia di una lunghezza superiore agli 8 caratteri e non sia una parola comune o una semplice sequenza come qwertyuiop abcdefgh. Ho escluso per principio che la parola che avete scelto per proteggere il vostro computer o i vostri dati sensibili contenga il vostro nome, cognome, soprannome o la vostra data di nascita; in caso contrario cambiatela subito e poi tornate per continuare a leggere. Se siete in dubbio, provate su How secure is my password?

Se queste semplici precauzioni vi fanno dormire sonni tranquilli, forse sarebbe il caso di riflettere ancora un istante sulla reale sicurezza dei vostri dati.

Esempio 1: il recupero della password

Ogni sito offre la possibilità di recuperare la nostra password quando non riusciamo più ad accedere al nostro account: una delle modalità più comuni per procedere al recupero è quella di rispondere a tre domande “personali” che avevamo selezionato al momento dell’iscrizione. Se la persona che vuole rubare i vostri dati è tra gli amici di Facebook, vi segue su Twitter e Instagram (o altre piattaforme), quanto tempo pensate ci metta per recuperare il nome del vostro cane, quello di vostra madre da nubile o della scuola elementare che avete frequentato? Questa tecnica di hacking, chiamata Social Engineering, è una delle più efficaci per ottenere informazioni utili per accedere ai vostri dati. Se volete approfondire l’argomento, consiglio la lettura dei libri di Kevin Mitnick.

Esempio 2: l’effetto domino dei social login

Avete presente quei siti internet che vi permettono di registrarvi utilizzando il vostro account di Facebook, Twitter o Google Plus? Sono indubbiamente una soluzione comoda che ci evita di inserire gli stessi dati centinaia di volte o di restare in attesa di un’e-mail di conferma ma potrebbero renderci la vita molto difficile nel momento in cui dovessero essere compromessi. La stessa cosa si applica, ovviamente, anche all’indirizzo e-mail che utilizziamo per iscriverci ovunque: se quello dovesse essere compromesso tutti gli account ad esso collegati sarebbero automaticamente a rischio.

Esempio 3: a chi affidiamo i nostri dati?

A differenza dei primi due esempi, dove la colpa è da attribuirsi esclusivamente all’utente finale, quest’ultimo si basa su una semplice domanda: chi ci assicura che le persone o i servizi a cui stiamo affidando i nostri dati seguano effettivamente delle procedure di sicurezza ad hoc? Nell’ultimo anno sui quotidiani sono comprarsi diversi articoli il cui titolo recitava qualcosa tipo “Rubate migliaia di password dal sito X“, “Rubati centinaia di numeri di carte di credito“.

Soluzioni

Come anticipato, una password lunga e complessa potrebbe essere una possibile soluzione ma dovete essere sicuri di avere una buona memoria e di possedere una certa calma quando, dopo aver perso un numero indefinito di secondi per digitare la password sulla tastiera minuscola del vostro smartphone, non vi sarà garantito l’accesso per un banale errore di digitazione.

Le soluzioni alternative ed efficaci ci sono: Apple, ad esempio, sta muovendo i primi passi in questo senso attraverso l’implementazione di chiavi di accesso non più legate a password alfanumeriche ma al riconoscimento di caratteristiche biometriche come, ad esempio, impronte digitali (quello che loro chiamano Touch ID).

Un’altra soluzione più semplice e alla portata di tutti è l’attivazione della cosiddetta 2-Step Verification: imitando il sistema di login adottato dalle banche, per accedere al nostro account saranno necessari la password e un numero identificativo associato a un dispositivo (normalmente uno smartphone) generato automaticamente a intervalli di tempo programmati. Se avete un account Google, potete leggere come attivarlo e utilizzarlo a questo indirizzo.

Password Assistant OSX Mavericks

L’ultima possibilità è quella di installare sul nostro computer e sui nostri dispositivi mobili applicazioni come 1Password (o, per utenti Mac, utilizzare l’applicazione preinstallata Accesso Portachiavi) dove salvare tutti i dati di accesso dei vostri account che saranno protetti da un’unica password.

Approfondimenti

Se sono riuscito a stuzzicare la vostra curiosità, vi consiglio di leggere How i Lost my $50.000 Twitter Username di Naoki Hiroshima (sviluppatore di app tra cui Echofon) e How Apple and Amazon Security Flaws Led to My Epic Hacking di Mat Honan (giornalista di Wired USA)

Will online courses take over universities?

I signed up on Coursera exactly one year ago. Even though I never enjoyed watching video tutorials on YouTube and following on-line courses on platforms like iTunes U, I was curious about attending an on-line class. I was eager to start: during the first week I signed up to a lot of different courses. At that time I was quite busy with my job so I knew that I couldn’t watch all the video lectures and do all the assignments but my main goal was to understand how the whole system worked and find out if I could use it to improve my teaching skills.

The only course that I actually completed at the beginning was “Introduction to Digital Sound Design” by professor Steve Emerett from Emory University. My background helped me a lot so it hasn’t been difficult to get a distinction on my statement of accomplishment at the end of the course (on Coursera you can get a Verified Certificate if you join the Signature Track which is available for some courses starting at $49.00).

After that first experiment I didn’t attend other courses but I kept myself in the loop and I enjoyed following the growing discussion about on-line education.

Four on the floor

At the end of the summer I felt that I needed to learn something new so I started browsing Coursera again and decided to commit myself to complete four different courses.

The first was Berklee College of Music’s “Introduction to Music Production“: as you probably guessed, this subject isn’t new for me but I was excited to attend a course from one of the world’s most renowned music school.

California Institute of Arts’ “Introduction to Programming for Musicians and Digital Artists” has been my second choice. Although I’ve been following Ge Wang’s work for a long time now, I never had the chance to learn ChucK (the programming language that he developed). When I saw this course I thought that this was the chance to fill this gap.

The third course that I attended has been: “Digital Signal Processing” from the École Polytechnique Fédérale de Lausanne. To be honest I quit after the first week. I was really looking forward to learn something but when I started I already knew that I couldn’t cope with all the math’s problems (math has always been my weak point).

The fourth and last course: “An Introduction to Marketing” from University of Pennsylvania. I know that this course is completely unrelated with the others but I also worked as marketing manager so I thought that this could be very helpful.

The pros and the cons

Attending an on-line course has a lot of pros: you can study what you want whenever you want (actually this is also one of the cons: do you know the term «procrastination»?). You can always access the video lectures and even play them at double speed if you haven’t enough time (I did this a lot!). One thing that I never used were the discussion boards, even though many students found them extremely helpful. I definitely learned A LOT of new things and I think I’ve improved my teaching skills by watching those lectures.

Obviously there are some cons too… from a teacher perspective, you can’t be a hundred percent sure that all the assignment are made by the students. I actually caught a lot of my peers copy and paste content from wikipedia and other websites. From a learner point of view it has been great to be part of these classes with thousands of students from around the globe but I really missed the “human factor”: discussing an assignment or a lecture behind a monitor is not the same as doing it in front of a cup of coffee/tea. I also got angry  once because I thought that my assignment weren’t reviewed following the course’s guidelines (and I’m convinced that I’ve been downgraded for that reason).

If you want to join one an online course, you have to be really commit to complete it because even if no one is looking at what you do, watching the video lectures and doing the assignments take the same amount of time that doing those things in a class (and, probably, you are doing an on-line course because you don’t have time to do it).

Conclusions

I don’t think that online courses will take over (and kill) universities. The institutions that will embrace these platforms and develop new content for their curricula will take a lot of advantages from it. My guess is that, in the future, students will prefer an enhanced learning experience instead of “traditional” lectures. Many new platforms were born in the last months and the number of courses is growing constantly. This is the right time to sign up on Coursera, EdX, FutureLearn, etc. and try to learn something new.