Archivi Categorie: Linux

Perché si chiama shell?

1000x-1

La shell (detta anche interprete dei comandi), in informatica, è la parte di un sistema operativo che permette agli utenti di interagire con il sistema stesso, impartendo comandi e richiedendo l’avvio di altri programmi. Insieme al kernel costituisce una delle componenti principali di un sistema operativo. Il suo nome (dall’inglese shell, guscio) deriva dal fatto che questa componente viene considerata l’involucro, la parte visibile del sistema ed è dunque definibile come l’interfaccia utente o il programma software che la rende possibile.

Questo dice la Wiki. La Wiki è tutta da leggere ma –secondo me– serve una precisazione: “shell” è usata|capita solo da quelli di Linux, e gli antichi di Unix.

Ma la domanda è un’altra: perché quel nome? Uh! da indagare 👀
Googlando, anzi –meglio– duckduckgando salta fuori la risposta, completa di perché. Nota mia estemporanea e OT: oltre alla mancanza del genere neutro (condivisa dalle lingue neolatine (che conosco almeno un po’)) l’italiano manca anche nella distinzione tra perché e perché; chissà perché?

Why was the word “shell” used to descibe a command-line interface?
Parecchie info qui:

  • una definizione più rigorosa, il link a “What is the exact difference between a ‘terminal’, a ‘shell’, a ‘tty’ and a ‘console’?“, si usano ancora termini come “terminal” e “TTY”? Ho sbagliato da sempre a considerarli sinonimi? dovrei indagare 👀
  • è stato Multics;
  • c’è anche un valore metaforico: “Since the shell is a symbol of authority, speech, and hearing, which is to say a symbol of prophecy…” (vedi più avanti)
  • the analogy is with a nut: outside is the shell, inside is the kernel. aya! adesso come traduco kernel (della noce, non dell’OS?). Gheriglio mi dicono; sbagliato usare nocciolo, secondo me, comprende il guscio, cioè la shell. Ottima la Treccani 💥
  • [f]urther down the wikipedia rabbit hole finds this: “Louis Pouzin, introduced the term shell for the command language used in Multics”, ah!, dalla Wiki. E c’è il nome Louis Pouzin da indagare 👀; a breve, promesso 📌
  • [a]s I understand it, “shell” is an older term for what we now would call “Primary User Interface”. The modern analogous term would be “Desktop Environment”, since virtualy all modern systems use the desktop metaphor. Così i giovani, largo ai giovani ‼️

Glossary of Multics acronyms and terms – S.
Qui ritrovo termini antichi, caduti in disuso, e un link fondamentale a Louis Pouzin, il prossimo.

The Origin of the Shell.
Louis (c’è anche la foto di allora) racconta, ecco cercavo proprio questo 😁: I wrote a paper explaining how the Multics command language could be designed with this objective. And I coined the word “shell” to name it. It must have been at the end of 64 or beginning of 65. The small gang of Multics wizards found it a sleek idea, but they wanted something more refined in terms of language syntax. As time left to me was short, and I was not an expert in language design, I let the issue for them to debate, and instead I made a program flowchart of the shell. It was used after I left for writing the first Multics shell. Glenda Schroeder (MIT) and a GE man did it. Io nel 64-65 avevo 12-13 anni, non ero ancora interessato ai ‘puters, tutto preso con Françoise Hardy ❤️

Ovviamente Luois è sulla Wiki, en e, molto bella, fr.

Guscio come per la noce e l’uovo? Non solo, anche conchiglia, come dice la Wiki, dove dentro ci trovi (nella conchiglia, non nella Wiki, nèh!) il mollusco, la perla e altro ancora.

OK, ci sono altri link, disseminati nei documenti citati. L’informatica è giovane ma ha già una storia, non sempre conosciuta. O sono solo io che le schede perforate e il Fortran e la stampante a catena e il plotter e –OK tutto il resto. Ma posso smettere quando voglio, probabilmente. Forse 🙄

RMS, l’annuncio iniziale di GNU e un appuntamento imminente

Giovedì sera questo tweet Happy #GNU anniversary! con un link che per tutto ieri è risultato irraggiungibile (almeno per me), questo: Initial Announcement.

Free Unix!

Starting this Thanksgiving I am going to write a complete Unix-compatible software system called GNU (for Gnu’s Not Unix), and give it away free to everyone who can use it. Contributions of time, money, programs and equipment are greatly needed.

GNU è una delle più grandi idee e realizzazioni del XX secolo. E continua, per esempio io uso GNU/Linux, Linux per gli amici ma non per Richard.

Forse oggi c’è ancora qualcuno che usa Unix ma è Linux che impera. Mi dicono che c’è chi usa altri OS, uno con una finestra sghemba nel logo ma non so quanto questa diceria sia attendibile.

E sì! com’è cambiato il mondo dell’informatica. Io allora avevo appena iniziato con Unix (allora si scriveva UNIX) dopo un po’ di tempo con altri OS, allora ogni ditta aveva il suo, tranne IBM (uno per modello) e DEC (l’unico vero a sentir loro). Poi è arrivato Linux (GNU/Linux).

Dai, basta lollare, buon anniversario GNU 💥🎉💥🎉💥🎉

Ma c’è un’altra notizia importante, per lunedì 1° ottobre, qui a Torino. Ho rischiato di farmela sfuggire, per fortuna c’è l’amico Dario: Richard Stallman all’Università di Torino il 1 ottobre “Computing, Freedom and Privacy”. Uh, sempre sui temi di GNU. Nel tweet c’è il link a FSF (altra creatura di RMS) che vi dire tutto.

La realtà a volte non è come appare e gutta cavat lapidem &

Per esempio non so se conoscete Erik St. Martin; io l’ho scoperto adesso come effetto collaterale dell’acquisto di GitHub da parte di Microsoft. Fermi lì! Microsoft non è come pensate, non interamente, non tutta, per esempio cinguetta Erik (è il tweet che mi lo ha fatto conoscere):

Linux as my primary OS, haven’t touched Windows in 10+ years

Tutto qui. E c’è anche il suo blog, dove trovi:

Microsoft today is not the Microsoft it was 10-20 years ago

Sì ha ragione. Erik è come vorrei essere io, più giovane ma non solo, rockz 💥 assay 💥

Però io che sono vecchio ho una storia alle spalle e allora mi viene da pensare che Microsoft è responsabile di chi vede il ‘puter coincidente con Excel, per lavoro; per il resto c’è il telefono con Facebook.

Una volta, ben lontano nello scorso millennio, c’era IBM che –OOPS! dimenticato cosa faceva. C’era DEC, ottima per il Fortran ma c’era il VMS, voi giovani non potete capire, non mi ci provo a raccontarvelo.

E, nel mio piccolo, il Norton Commander. Qui una spiegazione, minima, è doverosa. Riguarda le direttive PP: il tuo programma doveva essere facilmente lanciabile da Norton. Quindi niente direcrtories (cartelle, allora si chiamavano dir, tranne per i macisti per i quali erano cartellette) perché sarebbero state elencate per prime obbligandoti a scrollare, output direttamente sulla stampante e, quando proprio necessario, sul dischetto A:, in 360 KB (pron. kappa) cosa vuoi che non ci stia. OK, acqua passata F10Y.

Chi altri? Per esempio il Basic forse il mondo non aveva tutti i torti, ero io a non capire. E l’OOP? adesso fa fine parlarne male. E i frames nelle pagine web? OK, quella volta ero nel giusto! E l’animazione flash nella home, anzi la home tutta in flash? Dimenticata. E Java e JavaScript? parliamone. E Haskell –no lì sono io a sbagliare tutto.

Tornando a Microsoft… Windows? beh, potrei mettermi seduto in riva al fiume (Po o basta la Chisola?) ma sapete ho una certa età, non so se… Ma in fondo who cares?

L’immagine lassù è un selfie di Erik, trovato qui.

Cambiare il prompt del terminale

Michele Mordenti

Una cosa nata per gioco e che poi si è dimostrata meno semplice del previsto. Colpa mia, certo. Adesso vi conto.

Domanda: si può cambiare al volo e ripetutamente il prompt del terminale?
Risposta non tanto corretta, anzi per nulla: certo, basta ridefinire la variabile d’ambiente PS1.

Ma non è vero. Cioè non funziona come vorrei. Esempio:

Il prompt $ era quello normale di Unix, roba dello scorso millennio.

Quindi dall’esempio sembra funzionare… nope!

Visto? il titolo del terminale resta sempre lo stesso, la path di quando si è cambiato il prompt.

In questi casi io ricorro a Stack Overflow ma questa volta non ha funzionato. Forse colpa mia, ma forse (io ne sono convinto) no.

Quando il gioco si fa duro … (inizio cit.) e questo è un pochino uno di quei casi.

La soluzione è semplice (quasi): vedere cosa fa ~/.bashrc. Ah! prima setta il prompt e poi il titolo della finestra, sempre modificando PS1. Non riporto le righe di ~/.bashrc perché le avevo già pasticciate e cercarle nel backup non ne sono capace (OK, a volte dico bugie, a fin di bene però) ma un po’ per tentativi sono arrivato a due aliases, _ps per il prompt (e titolo) standard e _pu per la versione Unix.

Uh! forse è il caso di scriverle:

alias _ps='export PS1="\[\e]0;\w\a\]* \[\033[01;31m\]\W\[\033[00m\] \$ "'
alias _pu='export PS1="\[\e]0;\w\a\]\[\033[01;31m\]\$ \[\033[00m\]"'

Quando un alias funziona si può memorizzare, di solito in ~/.bash_aliases, nel caso questo non esista si possono aggiungere in fondo a ~/.bashrc.

Da provare:

e, di seguito

OK. Con _ps torno alla versione normale (per me, taroccata anni fa e immessa in ~/.bashrc nella personalizzazione di ogni nuova versione.

e

OK, ma se chiudo il terminale e ne apro uno nuovo torno alle condizioni specificate in ~/.bashrc. Se c’è un modo per rendere permanente PS1 per la sessione non lo conosco. Ma in fondo  non è matura  who cares 😉

Ah! ‘ncora una cosa: il colore. Ne avevo parlato quando ero (più) giovane, qui dove trovate l’indicazione vera, questa.

Aggiornamento: qui un post esaustivo sui colori nel terminale 😋

👽

Nope: il 2018 non sarà l’anno di Linux per il desktop

C’è questo rilancio di Slashdot che ripete un mantra storico: Could 2018 Be The Year of the Linux Desktop?
Rimanda a un post lungo e articolato, questo: Why hasn’t The Year of the Linux Desktop happened yet?
E prima ancora le previsioni per l’anno che viene: Some predictions for 2018

Adesso non voglio fare paragoni che non hanno senso ma Christian non mi convince. C’è (o sono solo io) Windows che rockz! Orami sono tutti sul 10 che sembra buono (per loro).

Invece –parlo sempre per me– vedo gente che ormai fa tutto con il telefono, a parte qualcuno che usa il tablet. E lo usano anche per scrivere (certo, di meno).

Vivendo in campagna tra i contadini, non tutti aggiornati tecnologicamente (i seniors, sapete…), lo usano spesso a modo loro. Giorni fa ho assistito alla trasmissione orale di un numero di telefono: quando parli o ascolti non puoi digitare e allora devi scrivere, su carta, nel 2017!

Comunque ecco dove Linux (un derivato di _) ha vinto. Non sul ‘puter.

Ovviamente, secondo me, chissà se poi… 😋 perché il futuro sta seduto sulle ginocchia di FMS (sempre sia condito, RAmen) 😋

Ah! un calendario (ma volendo ce ne sono altri): non ci facciamo mancare nulla 😋

Ho altre due previsioni per il ’18 che vorrei rivelare:

  • un antico collaboratore (ciao Ron, non ci sentiamo da due mesi) dice che Trump si dimetterà o verrà dimesso entro maggio;
  • in base a considerazioni che non saprei rispiegare i contadini indigeni locali di qui si aspettano un anno con pochissima pioggia, per la coltura prevalente del mais sono da preventivare costi per l’irrigazione.

Ecco, quest’ultima previsione –no! non voglio sapere da dove viene– mi sembra la più attendibile.

🤩

Dot files

C’è qualcuno che sta sbagliando su Twitter, siwoti per usare un termine tecnico.

Ma forse (anzi molto probabilmente) sono solo io che non sono più in sintonia con il mondo, in particolar modo con quelli che abbandonano i blogs (davvero stanno morendo questa volta?) e quelli che sui social-cosi (Twitter, il mio preferito, quasi l’unico che frequento) postano cose –corrette, non sto dicendo che non lo sono– che possono essere male interpretate dai ggiovani o dai nuovi (o dai possibili) linuxiani.

Come questo post di mcc che ha avuto ben 1600 retweets e tanti commenti interessanti:

  • Remember not to fix the bug or you will erase 50 years of unix history
  • I recently learned that 1. in Windows there are “super-hidden” files, and 2. Explorer has a VERY SIMILAR bug with filenames starting with ~
  • To be fair, every feature in Windows 10 is actually just a bug in NT4
  • Just learned that : has the same functionality on NTFS (albeit for a completely different reason) [pro tip, CIA, Vault7]

Molto interessante la McClure (111), molte cose ontehtoobz, anche un interesse simile (top secret, per ora).

Tornando invece ai dotfiles un paio di cose.

Sono un argomento ricorrente, di solito si cita questo post di Rob Pike (l’ho fatto anch’io tanti anni fa, in questo blog) e Rob ne parla per via che Plan 9 si comporta diversamente. Ma Plan 9 non è diventato come nelle intenzioni dei suoi creatori il successore di Unix. Conosco chi l’ha usato per qualche tempo ma, mi sembra, solo perché doveva; adesso usa qualcosa ancora di peggio, ma non posso contarvi (cioè non ne so niente, nada, zilch). Sono sicuro che Linux non sarà il sistema operativo definitivo, qualcuno riuscirà –incredibile ma vero– a fare di meglio. Android e Quello_della_Mela_Morsicata sono solo prove preliminari, vedrete (voi ggiovani) 😉

Di solito è comodo che siano nascosti, ma nel gestore dei files (Nautilus, Nemo o equivalenti) posso visualizzarli/nasconderli con Ctrl-H.

Ancora meglio per il terminale, esiste l’opzione -a (o --all): non nasconde le voci che iniziano con punto (.).
Di solito è OK che stiano nascosti, per esempio la mia home sarebbe troppo lunga:

E poi c’è il motivo vero, la ragione di questo post. I blogs forse stanno morendo (si dice da tempo, magari questa volta è vero) ma per me non vale. Continuerò (probabimente) a scrivere, cose che interessano me e (quasi sicuramente) solo me. Per esempio linguaggi di programmazione sexy, anche se non usati (come Coconut, l’anno scorso). È il mio hobby preferito.

:mrgreen:

Cinguettii dal Linux Day

ld16

Niente, me lo sono perso. In attesa di video che certo attiveranno ecco una rassegna di tweets catturati con una punta di rimpianto 😀

Davvero ora di guarire, tornare pimpante per poter esserci l’anno prossimo, nèh! 😉

Alias o funzione o script?

codiceatlantico_0010
OK, io sono poco metodico e quando mi accorgo di continuare a usare frequentemente un comando sono tentato di creare un alias.
Poi capita che compare su Twitter una cosa che sapevo già, questa: For almost every purpose, shell functions are preferred over aliases.

Forse è il caso di approfondire, finalmente, sono decenni che rimando, ho cominciato con Unix, anzi prima ancora con il Pr1me, dove c’era abbrev, abbreviabile in ab. E gli script (chiamati command files) si potevano fare sia in Primos che in CPL (command process language) quando diventavano più impegnativi (potevi usare le variabili).

Rapida googlata ed ecco cosa ho trovato:

Quindi…
mi sa che non sono poi messo così male.
Attualmente ho definito qualche funzione (risultano tutte piuttosto lunghe) e ~20 aliases in ~/.bashrc. Ho poi ~40 scripts in ~/bin.
Per compiti particolari ho scripts sparsi in altre directories che posso aggiungere a PATH via una combinazione di un alias:

alias agpa='source ~/bin/ag_pa'

e  uno script (~/bin/ag_pa):

#!/bin/bash
export PS1="* \e[1;33m\W $ \e[m"
export PATH=$PWD:$PATH
echo $PATH

Ma il post non sarebbe completo se non lo personalizzassi.
La funzione di cui sono più orgoglioso l’ho raccontata qui: J una nuova utility vecchia di 30+ anni.

Da allora è un po’ cambiata, nuove opzioni. L’aggiornamento principale è per il caso di default:

*) cat ~/.Jd ;;

Oltre che spostarsi su e giù per le directories fa anche altre cose, per esempio

yt) xdg-open https://www.youtube.com/ ;;

apre un tab con YouTube nel browser.

Per gli scripts la situazione è più complessa. Sono un seguace da sempre di un lavoro fondamentale di John Ousterhout, Scripting: Higher Level Programming for the 21st Century, vecchio, dello scorso millennio addirittura, ma sempre attuale (secondo me) 😀

Più della metà degli script in ~/bin non sono scripts Bash bensì Python, Racket (1, copiato), newLISP (2, superstiti, una volta erano di più), altri Lisp (mezza dozzina), AWK, … Il meccanismo della shebang, la prima riga, quella che per Bash è #!/bin/bash è una cosa fantastica di quelle che mancano a Windows. Ecco Windows: per ragioni di compatiilità spesso uso Python al posto di Bash, sed, AWK, grep per averlo anche di là (con modifiche). Sono atipico? fregaca who cares! 😀

Ah gli aliases: sono molto comodi, per esempio

alias ipy='ipython3 --no-banner --no-confirm-exit'
alias roc='octave -q --no-gui'
alias rre='racket -il xrepl'

Ah! ‘na roba che non tutti sanno: come tutti (kwasy) ho

alias ls='ls --color=auto'

ma alle volte il colore può essere inappropriato; e allora:

no-al

Ah! ‘ncora na roba: certe operazioni si possono fare solo con le funzioni (o sono comunque molto più semplici). Per esempio cambiare directory (come in J) perché la funzione viene eseguita nell’ambiente  corrente mentre lo script ne crea uno nuovo che termina con la fine dello script. Tutto raccontato negli URL elencati.

:mrgreen:

L’ecosistema, Racket e un tutorial

Tin_Woodman
Un post che ho scritto e poi riscritto (stravolgendolo) in seguito a un colloquio con un ex-collega Mr.X che rockz 😀
Inizialmente c’era solo la parte Racket –una delle mie passioni– ma quando Mr.X ha letto la bozza mi ha indotto a cambiare qualcosa, adesso vi conto.

Ci sono cose belle (sexy) ma spesso capita di doverne usare altre perché si usano quelle; cioè dove lavori tutti usano quelle.
Mr.X parla in questo caso di ecosistema. E per lui l’ecosistema e Windows, sempre più 10 ma con ancora qualche 7. E per i linguaggi quelli ammessi sono pochissimi, in funzione del task, si potrebbe parlare di sub-ecosistema. Per esempio per il Web solo HTML, CSS, JavaScript. JavaScript (come NodeJs) potrebbe essere usato anche da se. Altrimenti Java. O il VisualBasic. Assolutamente niente altro, meno che mai Lisp, linguaggi funzionali di moda solo nei blog ma non nella pratica. Ah! niente Python, a meno che usi solo quello, ma non per il Web.
E siccome tutti usano Windows niente Linux.

Ovviamente non sono d’accordo ma riporto questa opinione, credo anzi di approfondire l’argomento in futuro.
Altrettanto ovviamente continuerò peraltro a occuparmi anche delle cose che i piacciono, anche –e specie se– sono fuori della lista delle cose approvate. Per esempio Coconut, Haskell (forse, in futuro) e Racket. Ecco ero partito con Racket, questo che segue.

prl
Twitter vi fornisce consigli e suggerimenti che voi non tweeps non potete minimamente immaginare. Tutto sta nella scelta a chi followare e poi la magia segue, gratis 😀

Comincio dal suggerimento più semplice (e fondamentale): il blog Inside PRL è da seguire. Obbligatorio (se volete, nèh!). Forse non tutti sanno che PRL sta per Programming Research Laboratory e fa parte del College of Computer and Information Science della Northeastern University, quella di Racket, nella città più sexy del Universo.

Nel blog –c’è altro ma devo ancora perlustrare– c’è questo Tutorial: Zero to Sixty in Racket. È per via di questo post che ho scoperto il blog, via questo cinguettio.
Uh! a proposito di @racketlang per me ha 17 Followers you know (su un totale di 220 (circa, numero soggetto a variazioni come il meteo).

OK, vengo al post di Ben Greenman: Racket is excellent for incrementally growing scripts into full-fledged programs. This post steps through the evolution of one small program and highlights the Racket tools that enable incremental advances… E continua, mica posso copiare tutto 😳

Il compito che si pone è un indice KWIC (se non sapete cos’è un motivo in più per andarci, e protrete dire TIL KWIC), roba che secondo la letteratura richiede parecchio tempo (e poi ci sarebbe la Legge di Hofstadter che Ben colpevolmente non cita) ma c’è anche Yannis e –OK, 20 minuti dice Ben.

Siccome Ben è OK da per scontato che l’aspirante racketeer usi l’ambiente integrato, Dr Racket, manco sta a ricordarvelo. Io di solito uso la REPL, quella di una volta, mi sono pure fatto l’alias, alias rre='racket -il xrepl' ma solo perché sono vecchio (però non tanto vecchio da rientrare nella classe “non puoi insegnare un gioco nuovo a un cane vecchio”, nèh!), ma in questo cas è OK.

Nel codice trovate subito un’altra nerdata: λ invece di scrivere lambda. Il codice Unicode di λ è 03BB, per ottenerlo con Linux si sua Ctrl-Maiusc-U, compare una u sottolineata e si scrive il codice voluto. Con Windows chissà… (googlate). Ma potete benissimo scrivere lambda, come facevano i nostri vecchi (e me).

Poi basta seguire Ben, rockz! 😀 Costruisce le funzioni che gli servono, spiegando quello che fa, visualizza il codice completo dello script, 79 righe compresi i commenti. Eseguendolo (tasto run) si ottiene test.txt ma è solo il primo passo.

Ben crea un submodule, lo esegue con raco, passa alla versione typed, aggiunge l’interfaccia per la command-line e testa il tutto. E continuerà –promette– con la documentazione e la creazione del package per condividerlo (shararlo).

I tempi? forse Ben è un po’ troppo ottimista c’è la legge di Hofstadter, io non sono così smart) ma OK: Racket & Ben rockzs 😀
Io sono occupato con cose promesse da finire ma il blog l’ho RSSato subito.

:mrgreen:

Una risposta & una domanda

woz

Una risposta a Jilla, forse se lo saranno chiesto anche altri: Coconut è nuovo ma promette bene. E l’uso che immediatamente viene in mente è quello di creare moduli con dentro le costanti e le funzioni che si intende usare, visto che permette di scrivere chiaramente e sinteticamente cose che con Python sono meno immediate, p.es. case.
Ecco un esempio (banalissimo, certamente nessuno scriverebbe cose così per davvero) di quali sono le mie intenzioni.

Il modulo coco_module.coco:

risposta = 42

def ciao(nome):
    print("Ehi", nome, "ciao!")

def doppio(n):
    return 2 * n

Che compilo ottenendo il modulo Python

r0

Non importa che coco_module.py sia lungo 298 righe, non devo editarlo, solo usarlo, nello script uso_c_m.py:

from coco_module import *

ciao("Juhan")
print(risposta, doppio(doppio(doppio(risposta))))

r1

Ovviamente –come già detto– quando il gioco si fa duro (inizio-cit.).

OK, lo ammetto: Coconut mi piace per i suoi aspetti funzionali che adesso pare siano trendyassay, quasi fossero pokémons. Forse perché contemporaneamente sto vedendo quell’altro linguaggio, di cui al momento non ricordo il nome, molto più tradizionale (nato come alternativa semplice del Fortran).


Siccome ho risposto, spero esaurientemente, alla domanda fattami ne avrei una anch’io (me). Chissà se…
Viene da un tweet, Why Linux sucks and will never compete with Windows or OSX.

Non so chi l’ha retwittato ma ho voluto vedere cos’è che non va con Linux.
Inizialmente ho classificato non tanto bene il post, l’autore del post, il titolare del blog, il retwittatore &co. poi però –in modo non esattamente razionale– ci ho rimuginato su. Non ho capito se l’autore sta lollando o cosa. Non ho capito cosa non gli va di Linux, sa usarlo, lo usa da tempo. Viene anche il dubbio che sia al servizio di NWO o Bilderberg o anche peggio (M$).

Sperando di non fargli pubblicità (segue 3 ed è seguito da 4 ma ha un blog) la mia domanda è: che dire del tipo e del tipo che ha linkato?

:mrgreen: