Visto nel Web – 139

Quasi ferie, o meglio vacanze per chi ancora va a scuola. Io invece qui, al solito, e come al solito ecco cosa ho visto nel Web.LJ-Extremist-red-stamp
trash-cli – Command Line Interface to FreeDesktop.org Trash
::: github

IEEE Spectrum Ranks the Top Programming Languages
::: Slashdot

Classic algorithms and data structures in coffeescript
::: github

7_Telefono

How Does One Create A Gtk+ Application?
::: GNOME

First they came for the Whistleblowers, and I did not speak out
::: Cognizant Transmutation

New Single Board Computer Lets You Swap Out the CPU and Memory
::: Slashdot

377814_244326458970620_2026297833_n

10 Combinazioni veloci da tastiera per la shell Linux
::: alexiobash

Copiare ai tempi della twittervisione
::: manteblog

Ellipsoid surface area
::: The Endeavour

Richard Stallman spiega perchè usare free software nelle scuole
::: You Tube

Br3rm3TIIAAFRdU

Unix for the Beginning Mage
A Tutorial by Joe Topjian
::: Unix Mages

The Elements of HTML
::: W3C

Compenso poco equo e difeso malamente. Parlano Caselli, Conte, Ghezzi, Guccini ecc
::: Luca De Biase

brosio

Bash: test di sistema “fai da te”
::: Extended Reality

Intro to BoltDB: Painless Performant Persistence
::: Nate Finch’s

Robolinux 7.5.4: da Windows a Linux senza dolore
::: TUXJournal

Br7gQiJCYAAe4TP

Rivoluzione digitale
materiale da un corso al Politecnico di Torino, speciale :grin:
::: Rivoluzione Digitale

Google svela il fatturato italiano
::: Punto Informatico

MIT And Dropbox Alums Launch Inbox, A Next-Generation Email Platform
::: TechCrunch

BsELwxRIIAAFgCc

Go-like concurrency (and profiling!) in Hy and PyPy
::: Tao of Mac

Python is now the most popular introductory teaching language at top U.S. universities
::: CACM

OCaml for the Masses
::: ACMQ

27-copia

Remove Windows 8.1, then install Windows 7 and Ubuntu 14.04 in UEFI mode
::: The Ubuntu Incident

Awesome Python
A curated list of awesome Python frameworks, libraries and software
::: github

Three biggest internet companies in each country
::: The Economist

enhanced-buzz-32445-1404905663-4

Europa digitale. Italia deve cambiare interfaccia
::: Luca De Biase ::: Luca De Biase

The World’s Best Living Programmers
mah!
::: Slashdot

Il genio politico di Guido: il vero esperimento di Facebook
::: Luca De Biase

BsLBwVfCUAAAUyr

Welcome to WCSAxes’s documentation!
WCSAxes is a framework for making plots of Astronomical data in Matplotlib
::: WCSAxes

Making change
sai ‘na roba? avendo tempo si potrebbe verificare con newLISP, chissà…
::: The Endeavour

installing new fonts
::: The Ubuntu Incident

BsC1JENCMAAt1wn

EMR Streaming in Go
::: The New York Times

funcgo
Funcgo is a compiler that converts Functional Go into Clojure, to run on the JVM or as JavaScript. The compiler and language is still in alpha.
::: github

Beginner’s guide to OCaml beginner’s guides
::: Alex Clemmer

10449786_782822918419337_88445154_n

A Peek Inside D-Wave’s Quantum Computing Hardware
::: Slashdot

First Release of LibreSSL Portable Is Available
::: Slashdot

Chinese State Media Declares iPhone a Threat To National Security
::: Slashdot

monument-valley

Costruiamo una calcolatrice
AWK, il tool universale
::: the secrets of ubuntu

O3b Launches Four More Satellites To Bring Internet To ‘Other 3 Billion’
::: Slashdot ::: la Repubblica

Vi(m): impararlo con un solo video
::: Bl@ster’s

kinder

La Corea del Sud sceglie Linux come alternativa a Windows 7
::: lffl

Rust Guidelines
::: github

LibreOffice nella PA
Dieci motivi per scegliere il risparmio, l’accessibilità e la qualità delle soluzioni open
::: Data Manager Online ::: devs on acid

broken_windows-wallpaper-1920x1080

647,000 Comments Have Been Sent To The FCC About Net Neutrality. Keep Them Coming
::: TechCrunch

Perché il diritto all’oblio dovrebbe esser negato per chi ha commesso reati
::: Google+

BsR4Q8sCQAAKlln

Patoline
A modern digital typesetting system
::: Patoline

Perla da articoli che spiega come disintallare un programma Ubuntu
::: Twitter

Br88vGrIUAAcvXp

Backup solo se… adesso con Python – 1

n2
Continuo da qui. Ma cambio tutto. Con bash, shell di Linux, usata negli script dei post precedenti abbiamo visto che non è facilissimo. O meglio, non è come siamo abituati. E poi c’è un grosso limite: non funziona con Windows.
E se provassimo a usare Python?
Sì è un’idea, traduciamo l’ultima versione dello script. Una cosa: da parecchio ormai di Python ne esistono due versioni: la 2.x che continua a essere usatissima per lo più per inerzia e la 3.x, ormai giunta a 3.4; userò questa. Peraltro le differenze (per quello che dobbiamo fare) sono minime.

Ecco la versione iniziale dello script:

#!/usr/bin/python3

import os.path, shutil

ORIG = ["./orig-1/f-1",
        "./orig-1/f-2-piccolo",
        "./orig-2/f1-3",
        "./orig-3/f1 4",
        "./orig-3/f2-4 manca"
       ]

DEST = "./dest/"

for fn in ORIG:
    print(fn)
    if os.path.isfile(fn):
        sz = os.path.getsize(fn)
        dest = DEST + os.path.basename(fn)
        if sz > 7:
            print("\tcopio", fn, "in", dest)
            shutil.copyfile(fn, dest)

t1

OK. L’unica modifica da apportare per utilizzare la versione 2 di Python è di togliere le parentesi a print() che in 2.x è un’istruzione e in 3.x una funzione.

ORIG è adesso una lista (righe 5-10), i componenti sono stringhe. DEST è invece una stringa.

In pratica questo script non è facilmente usabile: i file da copiare sono codificati all’interno dello stesso script, idem la directory di destinazione e resta da vedere cosa capita con nomi più generici.
L’elenco dei file da back-up-pare propongo di memorizzarlo in un file ad hoc, chiamato tag-orig, così:

./orig-1/f-1
./orig-1/f-2-piccolo

~/lab/OKp/lug/Tag-3/orig-2/f1-3
/home/juhan/lab/OKp/lug/Tag-3/orig-2/f1 4

./orig-3/f2-4 manca

Notare che i nomi dei file possono essere relativi alla directory dello script (i primi 2), con l’uso della ~ per indicare la home (il terzo) e assoluti (il quarto). Inoltre ci possono essere righe vuote. Anzi se uno è pasticcione può scrivere commenti: la riga relativa non sarà un file esistente e verrà ignorata.

Ecco lo script per gestirlo:

#!/usr/bin/python3

import os.path, sys

progname = sys.argv[0]
print(sys.argv, progname)
progdir = os.path.dirname(progname)
print(progdir)
fbk = os.path.join(progdir, "tag-orig")
print("file bk =", fbk)
inpf = open(fbk, "r")
ORIG = inpf.readlines()
inpf.close()
print(len(ORIG), ORIG)
print("\n")

for st in ORIG:
    sst = st.strip()
    if len(sst) > 0:
        sst = os.path.expanduser(sst)
        fn = os.path.abspath(
            os.path.join(progdir, sst))
        print(fn)

t12

La path del programma si trova in sys.argv[0], il percorso del file tag-orig viene ricavato usando join() del modulo os.path. di questo modulo utilizziamo anche abspath() ed expanduser(). Quest’ultima si rende necessaria per risolvere ~. Non sono ancora riuscito a provarlo con Windows (G il mio valido aiutante è in vacanza con i nonni e si vede che ha di meglio da fare, beato lui!) ma dovrebbe funzionare (riferirò in futuro).

La directory di destinazione DEST invece dev’essere gestita in modo diverso, secondo me. Propongo due alternative:

  • la directory corrente, quella che con Linux otteniamo con il comando pwd e con Windows con cd;
  • la directory che passiamo allo script come primo argomento; da racchiudere tra apici se contine spazi.

Ritengo che il primo modo sia quello più pratico, pensando a drive (penne) USB, ma chissà…

#!/usr/bin/python3

import os, sys

if len(sys.argv) > 1:
    DEST = os.path.abspath(sys.argv[1])
else:
    DEST = os.getcwd()

print(DEST)

qui

Non resta che inserire questi due pezzi nello script iniziale. Argomento della prossima puntata che se faccio tutto adesso poi di cosa vi racconto? :wink:

Linux perché

gnurantsNon so se vale perché questo post è davvero piccolissimissimo minimo.
Ma mi sembra una cosa che devo dirvi assolutamente, importante, secondo me.

Oggi ho scoperto, su Google plus, un post su una cosa tipica e ostica che viene affrontata in modo originale; per adesso c’è solo la prima parte ma promette bene. L’autore è uno che seguo su Twitter, posta poco ma posta bene, insomma ho perlustrato il blog.

GNUrants è un blog nuovo di pakka, nato il 1° aprile ma non è uno scherzo. Questa è la sua presentazione e questo il post che mi ha indotto a scrivere questo post (lo so che la prof di tagliano mi avrebbe sottolineato e katsiato forte ma ormai non ha più potere su di me).

Sono le cose che ci diciamo un po’ tutti: l’XPocalypse, Monaco di Baviera, iniziative varie in corso (troppe per elencarle), l’amico free man.

Ecco GNUrants io l’ho appena RSSato. Bravi!

Backup solo se… esercizio in bash – 3

n1

Continuo da qui.
Se i file da copiare fossero tutti nella stessa directory lo script sarebbe qualcosa di simile a questo:

#!/bin/bash

function terpri() {
    echo -e copio \"$1\" "in" \"$2\"
}

ORIG=("f-1"
      "f-2-piccolo"
      "f1-3"
      "f1 4"
      "f2-4 manca"
     )

DEST="./dest/"

for (( i=0; i < ${#ORIG[@]}; i++ )); do
    O=${ORIG[${i}]}
    D=$DEST${ORIG[${i}]}
    terpri "$O" "$D"
done

t2

Notare che per adesso i file non vengono copiati, sono ancora in fase di prototipo.
In realtà i file si trovano in cartelle diverse per cui lo script va modificato; la directory di destinazione è invece unica, per comodità.

#!/bin/bash

function terpri() {
    echo -e copio \"$1\" "in" \"$2\"
}

ORIG=("./orig1/f-1"
      "./orig1/f-2-piccolo"
      "./orig2/f1-3"
      "./orig3/f1 4"
      "./orig3/f2-4 manca"
     )

DEST="./dest/"

for (( i=0; i < ${#ORIG[@]}; i++ )); do
    O=${ORIG[${i}]}
    N=$(basename "$O")
    D=$DEST$N
    terpri "$O" "$D"
done

t3

OK, ma OK, avete ragione, si può evitare una riga e una variabile:

#!/bin/bash

function terpri() {
    echo -e copio \"$1\" "in" \"$2\"
}

ORIG=("./orig1/f-1"
      "./orig1/f-2-piccolo"
      "./orig2/f1-3"
      "./orig3/f1 4"
      "./orig3/f2-4 manca"
     )

DEST="./dest/"

for (( i=0; i < ${#ORIG[@]}; i++ )); do
    O=${ORIG[${i}]}
    D=$DEST$(basename "${ORIG[${i}]}")
    terpri "$O" "$D"
done

Ho dovuto proteggere con virgolette il valore in basename() –cosa che si rende necessaria perché ormai dobbiamo rassegnarci agli spazi nei nome dei file ma rende nervoso il mio pupil (peraltro ottimo).

Beh direi che si sono, ecco la versione definitiva:

#!/bin/bash

function copia() {
    S="$1"
    D="$2"
    echo $S
    if [[ -e $S ]] ; then
        NC=$(wc -c "$S")
        ND=${NC%% *}
        if [[ $((ND > 7)) == 1 ]] ; then
            echo $'\t' copio $S in $D
            cp "$S" "$D"
        fi
    fi
}

ORIG=("./orig-1/f-1"
      "./orig-1/f-2-piccolo"
      "./orig-2/f1-3"
      "./orig-3/f1 4"
      "./orig-3/f2-4 manca"
     )

DEST="./dest/"

for (( i=0; i < ${#ORIG[@]}; i++ )); do
    O=${ORIG[${i}]}
    D=$DEST$(basename "${ORIG[${i}]}")
    copia "$O" "$D"
done

tag

Lo script può essere facilmente modificato per funzionare a rovescio, ripristinare i file precedentemente salvati. Troppo facile, lasciato come esercizio.
Un’altra cosa da prevedere (era una delle richieste) è di accodare ai file aggiunte memorizzate temporaneamente in un’altra locazione, p.es. su un drive USB. Cosa semplice, ricorrendo a cat con >> come potete verificate con man cat. E la storia della pipe ormai dovreste conoscerla, ne ho parlato spesso, è una delle cose più belle introdotte da Unix.

Però –sì c’è un però: quando G. (chissà se entrerà nel team degli autori o si farà un blog tutto suo?) ha visto che la programmazione bash non era così immediata e che poi comunque non avrebbe funzionato con Windows mi ha proposto una proposta più che sensata. Cosa che vedremo la prossima puntata. Prossimamente, forse :grin:

Nuovo Blog

free man

È con infinito piacere che annuncio al mondo tutto e in particolare agli Amici di Lubit e di Linux e (ma sì, dai!) di Windows la nascita di un novo blog di cui mi sento un po’ padrino: The “Free Man” Blog .
A richiesta, dietro adeguata prebenda (evitiamo inutili complicazioni burocratiche, nèh!), posso fornire l’identità del blogger.

Promette bene, fin dal sottotitolo. E il blogger (a proposito: dovrebbe darci qualche informazione in più su di sé, è interessante, parecchio) si occupa di free- e open-source da sempre. Con un’angolazione diversa da quella solita essendo profondamente inserito nell’ecosistema Micro$oft.

Ma mai dire mai e poi ci sono cose interessanti anche di là, tante, anzi di più.

Benvenuto nella blogosfera :grin:

Visto nel Web – 138

Caldo, zanzare, bisogno di ferie –staccare tutto, dimenticare internet per un po’– ma intanto ecco cosa ho visto nel Web.

code

The IPO is dying. Marc Andreessen explains why
::: Vox

Erlang
::: How I Start

Letter to the Patent Office From Professor Donald Knuth
OK, vecchia ma sempre attuale
::: Pluto
Birdcam Italia

Apple and Debian: A tragic love story
::: Peace, Love and C++

Estonia will hand out digital ID cards to non-residents
::: Engadget

Intelligent Autonomous Flying Robots Learn and Map Environment As They Fly
::: Slashdot

2013 - 1

How to make beautiful data visualizations in Python with matplotlib
::: Randal S. Olson

Unlock and Lock your Computer with a Mobile
::: Satyajit Ranjeev

La storia di Marco e il Pad Wireless
::: ElectroYou

cong

Presenting Timetable
::: Mario Guerriero

The Supreme Court’s baffling tech illiteracy is becoming a big problem
::: Salon

An Awk Primer
::: Wikibooks

BjzmpT7IQAIYLot

Netflix Could Be Classified As a ‘Cybersecurity Threat’ Under New CISPA Rules
::: Slashdot

US National Archives Will Upload All Its Holdings To Wikipedia
::: Slashdot

My ui package: lessons learned about threading and plans for the future
::: andlabs.lostsig

flickr

Two Dimensional Sequential Gaussian Simulation in Python
::: Connor Johnson

Why Go Is Not Good
parliamone; conosco chi lo usa, molto soddisfatto e anch’io lo provato e raccontato qui sul blog
::: Will Yager ::: reddit

10 awesome features of Python that you can’t use because you refuse to upgrade to Python 3
::: Aaron Meurer

mela

Julian Assange Plans Modeling Debut At London Fashion Show
::: Slashdot

The introduction to Reactive Programming you’ve been missing
::: github:gist

5 Secure Alternatives to WhatsApp
::: TechSource

BrN957pIEAAwbxk

Docker 1.0: impressioni, analisi e previsioni
::: Bl@ster’s

Zero Cost
rust
::: Such is the Power of Javascript

Software libero, incontri di approfondimento e conoscenza a Magione
per i perugini di tutto il mondo
::: Tuttoggi

BrbQqF0IEAAYST4

The New 501(c)(3) and the Future of Open Source In the US
confesso di non saperne niente; ma quello che capita negli USA poi finisce qui
::: Slashdot

30% of Americans Aren’t Ready For the Next Generation of Technology
::: Slashdot

Poveri ma mobili
::: manteblog

fiaccolata

Più importante dell’Ilva
chissà se…
::: Luca De Biase

Unexpectedly Simple
ehi! il RUNOFF, l’ho usato parecchio sul Prime :grin:
::: Programming in the 21st Century

awesome Python
solo un link ma mi piace indicare chi me l’ha detto; poi c’è tutto :grin:
::: Python Adventures

Brg_U4eIIAAOs1X

Dragonfly, cyber-spioni russi contro l’Occidente
::: Punto Informatico

4 mistakes I made writing my first Clojure application
::: Adam Bard

Maybe it’s time to learn Haskell
::: Twitter

nq140702

Facebook ci manipola e Google fonderà una Nazione!
::: You Tube

Rust 0.11.0 Released
::: Mozilla

Working with Excel Files using Python
::: Connor Johnson

sac140702

Open Sourcing Our Go Libraries
::: Dropbox Tech Blog

How do you, the reader, stay informed about research that influences your work?
::: ACMQ

NSA: Linux Journal is an “extremist forum” and its readers get flagged for extra surveillance
::: Linux Journal ::: tom’s

10509743_874351985926573_1731251934917411444_n

Chi usa OOXML fa del male anche a te, digli di smettere
::: Computerworld Italia

Functional programming in object oriented languages
vecchio, anzi preistorico, ma qualcuno l’ha segnalato su Twitter e mi sembra interessante; sbaglio?
::: My hovercraft is full of eels

Netmarketshare: «Sorpresa, a giugno XP torna a crescere…»
::: ICT4

BrjEaamCQAAyrWn

Apple Hardware: Part II
::: Peace, Love and C++

German Intelligence Employee Arrested On Suspicion of Spying For US On Bundestag
::: Slashdot

There is a flash of light! Your PYTHON has evolved into …
::: alex gaynor’s

divzero

Sick of Ruby, dynamic typing, side effects, and basically object-oriented programming
::: Abe Voelker

Where’s Your Digital Footprint?
::: Internet Society

Ubuntu MATE Remix diventa una derivata ufficiale
::: oneOpenSource

cong

Google Reader: One Year Later
::: Slashdot

IBM betting carbon nanotubes can restore Moore’s Law by 2020
::: ExtremeTech

In arrivo tasse oltre il 500% per chiavette USB,smartphone e tablet
::: Twitter ::: DDay

BreQ7FXCcAEmXE8

Lubit – aggiungere “Crea link” a Thunar

thunarÈ una cosa talmente facile che non so se questo post vale; ma oltre ai nuovi ci sono i niubbi (hey! it’s me!) e allora ecco.
Prima di subito: non è roba mia, copiato tutto, cioè adattato ma trovato qui: xfce-thunar-custom-actions [Xfce Docs]. In particolare c’è Creating a symbolic link.

Adesso le figure altrimenti il post è troppo corto e l’überBoss di Lubit capace che mi sgrida :mrgreen:
Aprite Thunar (Super-F) e selezionate Azioni personalizzate del menu Modifica. Si apre questa finestra:

1

Selezionate + per aggiungere l’azione che andrà compilata così:

2

e

3
Almeno, queste sono le mie impostazioni, funziona solo per i file di testo e per le cartelle (io continuo a chiamarle directories, ma in ambiente grafico mi adeguo), volendo potete aggiungere altri oggetti.
Il nome del link sarà quello dell’oggetto linkato con il prefisso ln- che sarà poi possibile cambiare.

Semplice vero? E ancora una volta salta fuori che Lubit rockz! (OK, è tutto Linux che rockz) :grin:

Lezione minima di Linux per i nuovi – i link simbolici

2nvc8q1Oggi una lezioncina facile-facile per chiarire ai nuovi una cosa che i vecchi linari (e gli ancora più vecchi che vengono da *nix) danno per scontata.
I veri link sono i nostri; quello che Windows chiama link (collegamento in italiano) sono solo un abbozzo. Assolutamente insufficiente, per noi. Non sto a raccontare tutta la storia per Linux, dovrei parlare di inode ma niente teoria, solo vedere la differenza. Cominciamo a vedere cosa capita con Windows (ho usato la versione 8, con grande difficoltà, non la conosco):

wHo cioè creato due directories (cartelle), src (che contiene il file di testo saluti.txt) e d-lnk in cui ho messo un collegamento al predetto file. Quando dico di visualizzare il file con il comando type, l’equivalente DOS di cat funziona correttamente. Se però mi sposto in d-lnk e eseguo la stessa operazione come si vede non ottengo il risultato sperato.
Infatti se lo apriamo con un editor esadecimale (io uso ghex) vedremo questo: ghexNon è lo stesso file di testo ma qualcosa di mysteryouso che solo M$ sa. Invece su Linux ho:
linuxTutto OK, e il comando ls -l ci dice che ciao punta a saluti.txt. Resta un piccolo problema: con Lubit e Thunar non è attivata l’opzione per creare il link, ho dovuto farlo con il comando ln.
Facciamo così: mi metto alla ricerca del plugin e ve lo dico. Prossimamente, promesso. Forse :roll:

Backup solo se… esercizio in bash – 2

contatti

Aggiornamento: ELENCO[0] è errato, corretto in ELENCO[@]

Continuo da qui, con un’avvertenza: questi post sono per “nuovi”, i quirk dei commenti precedenti sono benvenuti, saranno magari oggetto di un post successivo ma continuo in modo piano, banale. In fondo sono niubbo anch’io, anzi über- :grin:

Quando si deve ripetere più volte un gruppo di istruzioni si usano i cicli. Ecco un esempio:

#!/bin/bash

ELENCO=("alfa" "beta" "gamma" "d e l t a")

for (( i=0; i < ${#ELENCO[@]}; i++)); do
    ST=${ELENCO[${i}]}
    echo $i - $ST
done

c0

L’elenco può essere scritto meglio, una voce per riga così:

#!/bin/bash

ELENCO=("alfa"
        "beta"
        "gamma"
        "d e l t a"
       )

for (( i=0; i < ${#ELENCO[@]}; i++)); do
    ST=${ELENCO[${i}]}
    echo $i - $ST
done

Un’altra cosa utile –non indispensabile in casi semplici come questo ma utile– è l’uso delle funzioni. In bash (Bourne Again Shell e il suo predecessore sh, Bourne Shell) ovviamente ci sono, mica come in quel SO con le finestre volanti e adesso sghembe, ecco come.

#!/bin/bash

function terpri() {
    echo $1 $2
}

ELENCO=("alfa"
        "beta"
        "gamma"
        "d e l t a"
       )

for (( i=0; i < ${#ELENCO[@]}; i++)); do
    ST=${ELENCO[${i}]}
    terpri $i "$ST"
done

f0.sh

Nelle righe 3-5 viene definita la funzione terpri –terminal print, chissà dove ho già sentito questo nome?– che visualizzerà i due argomenti che gli saranno passati.
Il ciclo viene modificato chiamando la funzione terpri (riga 15). Notare che le voci dell’elenco (variabile ST) possono contenere spazi per cui si rende necessario l’uso delle virgolette.

Vediamo adesso come trattare i nomi dei file. Questo può riferirsi a un file nella directory corrente, quindi senza indicazione del percorso (path) o in una qualunque posizione all’interno del file system, quindi completo di percorso (path). Vediamo qualche caso:

#!/bin/bash

echo Caso normale
N=$(pwd)"/"$0
echo completo:" " $N
FN=$(basename "$N")
echo nome file: $FN
DIR=$(dirname "$N")
echo directory: $DIR

echo -e "\nSolo nome file"
N=$0
echo completo:" " $N
FN=$(basename "$N")
echo nome file: $FN
DIR=$(dirname "$N")
echo directory: $DIR

echo -e "\nNomi con spazi"
N=~"/alpha/b e t a/gam ma"
echo completo:" " $N
FN=$(basename "$N")
echo nome file: $FN
DIR=$(dirname "$N")
echo directory: $DIR

echo -e "\nEstensione"
N=$0
echo nome file:" " $0
EXT=${N##*.}
echo estensione: $EXT

n0

Ricordo che pwd (print working directory), riga 4, restituisce la directory corrente, come dice il nome e che i comandi racchiusi tra $() vengono eseguiti con priorità maggiore, nel nostro caso prima di concatenare i 3 elementi da inserire in N.

Se vogliamo sapere l’estensione del nome del file possiamo operare come alla riga 30, l’espressione è traducibile in tutto quello che segue l’ultimo punto, caso simile a quello di %% visto nel post precedente.

L’uso di ~ alla riga 20 non viene espanso, vediamo come possiamo operare.

#!/bin/bash

echo -e "\nEspansione di ~"
echo -e usando la variabile HOME: $HOME
ABS=~
echo -e usando l\'espandione di "~": $ABS
N=$ABS"/alpha/b e t a/gam ma"
echo e quindi, p.es.: $N

e0

Con questo abbiamo tutti gli elementi che ci servono per comporre il nostro script. Cosa che affronteremo la prossima puntata. Anche perché –temo– ci saranno sorprese. Mica finisce semplicemente come avevamo pensato :mrgreen:

Evoluzione – uno sfogo

cOK, questo post non credo interessi nessuno ma devo scriverlo, per me.
Partiamo dall’exhibit A, la copertina del libro dell’immagine qui sopra. Terza ristampa dell’edizione Ballantine Book del 1983. La storia originale è del 1952 (uh, come me!). La citazione di cui agli exhibit B e C (sotto) è del 1982 (uh! quando io ero ormai addentro ai ‘puter, avevo già messo le mani su parecchi, anche dentro, allora si saldava, i cavi te li facevi da solo).
Non parlerò del libro, che sto ancora leggendo, sono all’incirca a metà, è noioso, scontato e potrebbe benissimo essere ambientato nell’Inghilterra medievale. O da noi sempre in quell’epoca. Quello che ha destato la mia attenzione è una premessa, pubblicata originariamente a parte con il titolo The Story Behind the Foundation, 1982.

i1i2
Asimov racconta come si sia trovato a riprendere la Trilogia Galattica, una cosa interrotta da parecchi anni e come sia riuscito perché lui è bravo e lo sa e ce lo dice, spesso. Di tutto questo non c’interessa, è lo sfondo, l’ambientazione. L’unica frase (sentence direbbe lui) che mi ha portato a scrivere quanto sopra è

I could also take advantage of electronic computers, which had not been invented until I was half through with the series.

Ecco i computer elettronici. Sì allora bisognava precisare, prendi Olivetti dove si puntava ancora sulle calcolatrici meccaniche (sarebbe bello che qualcuno ce le raccontasse, c’è ancora chi –ne conosco anch’io– ci trafficava). Anzi da noi si usava abitualmente cervello elettronico, davvero. Io invece usavo calcolatore, come i miei colleghi e quest’abitudine un po’ m’è rimasta, a volte mi sfugge.

Asimov nell’82 di computer (elettronici) doveva già averne visti tanti, provo a elencarli:

  • 0 : precursori, grandissimi assemblati à la Archimede Pitagorico, sperimetali, tutti modelli unici, non in commercio; programmati spostando spinotti e interruttori (poi, in seguito, mica subito);
  • 1 : grandi come i precedenti ma prodotti in serie e dati in affitto; IBM ma anche altri; i nuovi si programmano con le schede perforate (la parola Hollerith ricorda ancora qualcosa a qualcuno?); niente sistema operativo, fai girare il job e poi resetti spegnendo la macchina;
  • 2 : dai, si migliora, c’è un linguaggio (uno per ogni modello) assembler (si dovrebbe dire assembly) quasi leggibile dagli umani; parole nuove come jumpare si uniscono alle vecchie (svicciare);
  • 3 : il Fortran (anzi FORTRAN) per le cose serie (scientifiche) e il Cobol (probabilmente COBOL) per i gestionali;
  • 4 : nasce come i funghi tutta una nuova categoria, più piccola, tanto piccola da essere chiamati mini (sono comunque armadi); qualcuno diventa famoso come sigla, come il PDP, e ci sono anch’io, con il Prime.

Come si vede era già una storia lunga, ricca di colpi di scena. Ogni ditta aveva il suo sistema operativo, tranne IBM che ne aveva uno per ogni modello. Sì, c’era già Unix ma non ancora popolare. E subito dopo ci sarebbero stati i PC, personal computer.
Anche lì tanti, incompatibili. Per esempio l’Apple II (il primo Apple), l’Olivetti M 20, il Commodor (16, 64, 128) e il fratellino Vic 20, gli HP, cari, usati dai professionisti, il Sinclair (e affini), il Texas Instrument di cui non ricordo la sigla che avendo aspettato troppo non sono riuscito a comprare, ho preso il PC IBM (compatibile, allora si diceva assemblato). Ecco l’IBM è quello che ha vinto, soppiantando tutti gli altri.
E poi è nato il MacIntosh (sì, inizialmente si chiamava così) mentre noi vecchi (ero già vecchio allora) scoprivamo le workstation Apollo, Sun, Vax, HP.
Ma i PC, quelli che usavano i programmi Microsoft erano diventati pervasini, con l’arrivo di Windows poi la storia sembrava finita lì.
Invece no, altre cose come Linux di Linus Torvalds, e poi un’altra rivoluzione.
I telefoni, cioè no gli iPhone e aiFon e simili, gli smartphones.
E lì io ho detto basta: sono troppo vecchio. Della lista di Asimov io ho vissuto solo il punto 4. Poi tutti i successivi tranne l’ultimo.
E per le immagini sopra le ho acquisite da una stampante tuttofare che non c’è nemmeno bisogno di collegare al ‘puter, salva su drive USB. fai tutto senza vedere il risultato e ti devi fidare.

E mica finisce qui. Per esempio adesso gli smartphone si dividono in poche categorie (Android, Apple iOS, Windows, altri minori) che probabilmente si espanderanno su altri dispositivi (tablet, cose che non so nemmeno come si chiamano). Roba che sostituirà (quasi completamente) il ‘puter. O almeno lo trasformerà in modo impensabile. E nasceranno nuovi sistemi operativi che faranno sembrare preistorici quelli di adesso (sì, anche Lubit). Nei giorni scorsi anche la tele ha detto che hanno riscoperto le valvole termoioniche, quelle che si usavano per la radio quando io ero piccolo. OK, quelle nuove sono mooolto più piccole, completamente diverse, c’è solo l’idea di quelle di allora.
Ma anche lì mica finisce qui. Anzi, come si diceva nel ’68 ce n’est qu’un début.
Per contro pochi giorni fa ho scoperto che i ragazzi del liceo, peraltro bravi, non sanno cos’è un file di testo e lo aprono con Abiword.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 71 follower