Oggi ripubblico due miei articoli a proposito di Skype, alla luce del fatto che il sistema per telefonare gratis o quasi si può usare anche su iPhone, ma anche alla luce delle gravi notizie a proposito dell'azienda stessa.
17 luglio 2008: i ricercatori della Purdue University in America anunciano di aver trovato il modo di costruire i LED su un substrato di silicio e non più di zaffiro, come si era sempre fatto. È una rivoluzione che cambierà le nostre vite: leggete questo articolo dove spiego le straordinarie caratteristiche dei LED.
Lo scienziato britannico Adrian Bowyer ha presentato in questi giorni una stampante 3D che è in grado di stampare... se stessa. Aggiungendo l'elettronica e montando i pezzi, si ottiene una stampante identica all'originale. È un nuovo passo su un percorso che il ricercatore iniziò nel 2005: leggete qui per saperne di più
DOVE MI TROVI
Nel numero in edicola da metà settembre circa il mio pezzo di opinione si chiama Visioni. E comincia così.
Uno dei motivi per cui dopo il PowerBook G4 Titanium abbiamo avuto il MacBook Pro in alluminio è che il titanio sta finendo. Non è il solo metallo raro e pregiato di cui l'umanità sta esaurendo le scorte planetarie. L'indio, per esempio, finirà in cinque o dieci anni (e di conseguenza il suo prezzo è salito di quindici volte negli ultimi quattro anni) ma oggi è indispensabile nella costruzione degli schermi piatti, cioè dei monitor. Siamo agli sgoccioli anche con il germanio, che serve per la produzione dei semiconduttori, ed è difficile immaginare che di fianco a casa qualcuno posizioni un cassettone per favorirne il riciclaggio. Apple può produrre un MacBook Pro senza titanio, ma non è pensabile oggi come oggi un personal computer portatile che non contenga indio o germanio. Che si fa?
Anche quest'anno terrò la cattedra di Tecnologie per il Web nel contesto dei Master in Web Design della Scuola Politecnica di Design. A Milano. Che ne volesse sapere di più, segua il link.
Se vuoi iscriverti alla mailing list di Luca Accomazzi inserisci qui la tua mail:
Vuoi saperne di più?
Ciascun sistema operativo va accoppiato ad un ambiente di sviluppo (o, più spesso, più d'uno). Infatti il sistema operativo in se si limita a fornire prestazioni ai programmi che girano sulla macchina, ma perche programmi del genere possano venire sviluppati in primo luogo è necessario che siano disponibili supporti alla programmazione.
Un programma non nasce quale Minerva dalla testa di Giove, adulta e guerriera: è necessario progettarlo e svilupparlo a pezzi e bocconi, ciascuno dei quali conterrà certamente nella prima stesura una serie di errori e limitazioni. Il programma nella prima stesura va eseguito più e più volte, per controllarne la velocità ed i punti di fallimento, e poi modificato e nuovamente verificato, sinchè non si comporta come desiderato.
Così, per creare un programma è necessario qualcosa di più dell'accoppiata sistema operativo e linguaggio. (Qui per "linguaggio" intendiamo il compilatore o l'interprete o l'assemblatore, cioé quel programma che traduce il codice sorgente scritto dal programmatore in forma eseguibile dal processore della macchina).
Quello che ci manca viene chiamato solitamente "ambiente di sviluppo", se il suo scopo principale è fornire aiuti alla programmazione, o "ambiente di lavoro", se viene al contrario utilizzato dai non-programmatori per colloquiare con il sistema e per selezionare il programma desiderato. Fra i due "environment", come li chiamano gli americani, passa qualche differenza, tanto che un computer potrebbe fornire un buon ambiente di lavoro che non si presta facilmente a divenire ambiente di sviluppo.
Lo shell è un ambiente di sviluppo molto simile esteriormente all'ambiente Basic, che molti lettori di Bit certamente conoscono. Anche qui, un prompt attende i comandi dell'utente, ed anche qui è possibile battere comandi di programmazione in modo diretto. Tuttavia, lo shell, creato per grandi sistemi, è più flessibile ed è generalmente più adatto anche per la creazione di programmi nei linguaggi compilati.
L'uso consistente dello shell unito alle altri caratteristiche di cui al capitolo precedente rende Unix un eccellente ambiente di sviluppo e lavoro, anche se le prestazioni del sistema operativo in sé possono venire considerate in scala minore rispetto ad altri sistemi multiutente presenti sul mercato.
Dallo shell possono venire eseguiti programmi scritti in qualunque linguaggio, e battuti comandi in modo diretto che vengono eseguiti dal parser di un semplice linguaggio costruito nello shell (e chiamato appunto il linguaggio di shell). Lo shell permette di passare argomenti ai processi quando li si invoca, direttamente dopo il nome del processo.
Un programma viene eseguito semplicemente battendo il suo nome e seguendolo con gli argomento che si desidera passargli: ad esempio, per eseguire il programma "pippo" con argomenti "pluto" e "paperino" basta scrivere:
pippo pluto paperino

Lo shell provvede a copiare il programma in memoria ed avviarlo (avvia un processo: per dettagli, capitolo terzo). Provvede inoltre a mettere gli argomenti in un punto dell'area in memoria accedibile dal processo ed a comunicargli ove si trovano ed in che numero.
E' possibile ottenere dallo shell una versione più sofisticata dei file exec, che viene chiamata nel gergo Unix "script": si tratta anche qui di una serie di comandi, che siano di linguaggio di shell o invocanti processi. E' possibile in questo caso che i processi invocati restituiscano allo shell dei valori che indicano il successo od il fallimento del loro compito, di modo che il programma script testando i valori possa regolarsi di conseguenza.
E' anche possibile passare argomenti agli script, rendendoli così super-programmi a tutti gli effetti.
Non esiste un comando specifico per avviare un processo: quando l'utente batte una riga di input per lo shell, lo shell provvede dapprima a verificare se si tratta di un comando proprio (consultando una tabella dei comandi "built-in"), poi se non è questo il caso consulta la directory dell'utente e cerca un programma eseguibile che abbia il nome indicato. Se questo è il caso esegue il processo.
Questo significa che lo shell è eccezionalmente flessibile, e che per aggiungervi un comando è sufficiente scrivere nel linguaggio preferito il programma che esegue il comando e salvarlo nella propria directory. Il meccanismo rende leggermente più lenta l'esecuzione di un comando (poichè tutte le volte la directory viene scorsa, provocando un accesso al disco che ha tempi relativamengte lunghi). D'altra parte un uso intelligente delle risorse da parte dello shell, grazie al prefetching ed alla cache memory (termini che non spiegheremo qui), minimizza il guaio.
Lo shell di Bourne mette a disposizione dell'utente numerose 'facilities', utilità di vario genere, che vengono combinate facilmente per produrre strumenti sofisticati e specifici con il meccanismo della ridirezione.
Ad esempio, poniamo di voler vedere sullo schermo il contenuto del file chiamato "lettera" e del file "seguito". Il comando CAT (che sta per "catenate") dello shell collega tra di loro i file argomento, ed è quindi sufficiente scrivere:
cat lettera seguito

Se poi fosse necessaria una stampa del ricavato, sapendo che la stampante va sotto il nome convenzionale di LPR (per "line printer"), sarà sufficiente RIDIRIGERE l'output del comando CAT sulla stampante, con
cat lettera seguito | lpr

E' possibile combinare i comandi, usando i "filtri" (processi che ricevono un argomento in input e ne restituiscono un altro in output sfruttando la ridirezione).
Nella tabella uno abbiamo elencato una serie non esaustiva dei filtri disponibili con lo shell di Bourne. A questi va aggiunto Awk, un filtro programmabile che analizza il testo in input alla ricerca di termini specificategli ed esegue azioni programmate se trova uno di essi.
Nome Signif. Input Output
cat catenate Più file qualunque Un solo file contenente i dati
cb C beautifier Un programma in linguaggio C Il programma indentato
cmp compare Due file Differenze tra i file
comm common Due file Ordina lessicograficamente
crypt Un file e una password Codifica e decritta i file
dd Un file Converte set di caratteri etc
echo Un file Lo stesso file
expr expression Espressioni matematiche I loro risultati
grep Un file ed un termine Righe ove appare il termine
join database join Due o più basi di dati Esegue il join
learn Un comando di shell Spiegazioni sul comando
lint C verifier Un programma in linguaggio C Diagnosi, commenti, bugs
look Un file ed un termine Righe inizianti per il termine
od octal dump Un file Codici dei caratteri nel file
pubindex Referenze bibliografiche Una bibliografia
sort sorting Uno o più file Il file ordinato
spell Un file e un vocabolario Trova errori di battitura
tail Un file e una posizione Il file da "posizione" in poi
tr translation Un file e coppie di caratteri Cambia i "1° car" in "2° car"
uniq unique Un file Le linee ripetute
wc word count Un file Il numero di parole nel file

Cosicchè, per trovare il numero di errori di battutura nella lettera basterà chiedere allo shell di eseguire: cat lettera | spell | wc

Un ulteriore capacità dello shell è di elaborare la storia di una sessione di lavoro. Lo shell "ricorda" i comandi battuti ed è in grado di rieseguire un comando del quale sia specificato l'ordine, a partire dal primo o dell'ultimo eseguito, se necessario editandolo e modificandone qualche parametro. Il metodo impiegato per la "history substitution" è in verità piuttosto macchinoso, ma consente sofisticazioni notevolissime agli utenti esperti che se ne siano impadroniti.
Lo shell di Bourne, infine, consente l'uso dei vari toolkit ed utilità varie di Unix, tra i quali editori per programma e per testi (word processor), debuggers, linker, compilatori, data base management system e quanti altri l'utilizzatore abbia installato nel sistema.
Per concludere, lo shell rappresenta un ambiente ideale di sviluppo ed un efficiente ambiente di lavoro, sacrificando l'immediatezza a favore della potenza e della flessibilità degli strumenti forniti. E' perfettamente adattabile all'utente che possieda esperienza di programmazione.
