Category Archives: Windows

Variabili d’ambiente (environment)

Quando si dice la serendipità! 💥
Un meraviglioso post di Julia b0rk Evans mi fornisce lo spunto per un post che diventerà presto (ma non subito) utile con la telenovela su JavaScript.

Mi sa che l’argomento viene visto in modo diverso da Linux e Windows. Comincio con Linux, anche perché è quello che 1) rockz! 🚀 ; e 2) il mio OS 💥.

Ci sono tante variabili predefinite, per esempio USER:

Posso definirne di nuove, per esempio nel terminale:

Così definita è una variabile locale al terminale che l’ha definita. Posso verificarlo con lo script vv.sh

echo $MYVAR

Non viene vista perché è locale al terminale. Per renderla globale (nel senso che sarà precisato tra poco) bisogna espertarla:

Apro uno nuovo terminale (con Ctrl-Alt-T o utilizzando il tasto destro del mouse all’interno del gestore dei files e selezionando “Apri nel terminale”) MYVAR non risulta definita:

Questo perché il nuovo terminale è indipendente da quello in cui la variabile MYVAR è stata definita.

Se invece dal terminale originario apro un terminale figlio (child), così:

MYVAR c’è come previsto. OK, con questo dovrebbe aver chiarito cosa s’intende per locale e globale.
Quando una variabile è davvero importane si può definire in uno dei file di configurazione, nel caso più normale ~/.bashrc.

Tutto questo per poterla usare negli script, ecco per esempio con Python:

import os
print(os.getenv("USER"))
print(os.getenv("MYVAR"))

E, come vedremo prossimamente con NodeJS:

console.log(process.env["USER"]);
console.log(process.env["MYVAR"]);

Windows

Io sono negato con Windows 10 ma sono riuscito a fare questo:

Per aprire il terminale che li si chiama Prompt dei comandi (o qualcosa di simile) ci sono diverse possibilità:

  • tasto Windows + S apre cerca; scrivere cmd + Invio;
  • tasto Windows + X apre il menu; selezionare findestra dei comandi (o qualcosa di simile);
  • tasto Windows + R apre una finestra per ricevere i comandi; scrivere cmd + Invio;

È possibile aprire quante finestre si vuole ma le variabili settate sono visibili solo nella finestra in cui sono state definite. A differenza di Linux non c’è distinzione tra maiuscolo e minuscolo e invece del $ iniziale il nome dev’essere riferito racchiudendolo tra %.
Inoltre l’history dei comandi viene cancellata quando si chiude la finestra.
Siccome non uso mai Windows forse ci sono altre cose che non so; suggerimenti benvenuti 😊

Argomenti sulla linea di comando
Lo vedremo anche questo prossimamente ma rispondo a una richiesta via mail. Come i normali linguaggi anche con NodeJS è possibile passare argomenti allo script che si vuole eseguire; ecco a.js:

args = process.argv
console.log(args.length)
console.log(args)
console.log(args[2])

:mrgreen:

Annunci

Valutare XKCD con Windows? Si può fare!

nm0

Nel post precedente si valutava l’ipotesi che XKCD sia collegato a La Risposta, come –forse– un giorno grazie all’AI si riuscirà finalmente a provare, trovando –finalmente– La Domanda.
Nel post precedente (devo ricordarmi di non cominciare una frase nello stesso modo della precedente) eravamo in un ambiente adatto con tutti i tools che possono tornare utili disponibili e pronti fin da subito, anzi da prima (quando ero ggiovane ricordo che un giorno è arrivato UNIX (allora si scriveva così, tutto maiuscolo e bisognava dire che UNIX is a trademark of Bell Laboratories, Inc.)) ma come e cosa si può fare in ambienti meno friendly amichevoli. O –a volte– decisamente ostili, per esempio quello con la finestra storta, com’è già che si chiama?

Anche per loro ci sono strumenti [1] grazie a FOSS, come vedremo.
Oggi useremo Python, 3.x, costruendo il comando passo-passo.

x6

Fin qui niente di speciale, è una stringa. Per il nostro scopo possiamo usare list():

x7

Dalla lista c possiamo passare a quella dei valori ASCII (o Unicode, in questo caso coincidono) v.

x8

Lo so che non si devono fare cicli in questo modo [2] ma è provvisorio, solo per la costruzione.
Usiamo la funzione ord().
Abbiamo così la lista dei valori; troppo grossi però. Dovrebbe valere 1 per A, 2 per B e così via.
Beh, facile basta applicare un offset, questo:

x9

e riscrivere il loop precedente così:

x10

Non ci resta che fare la somma, via sum():

x11

OK! Adesso l’unione degli snippets [3] precedenti ed ecco:

x12

Resta un ultimo step: [4]

x13

Fatto! In fondo era semplice [5] 😀


[1] Mi dice Sole (sì, è tornata) che non devo usare “tools”; e non fare i prulari.
[2] prima vennero per il GOTO ma non era per me, poi vennero per… (quasi-cit.).
[3] frammenti, mi dicono.
[4] passo. (Devo smetterla che si sta –come dire– potrebbe diventare pericoloso per me e per il ‘puter).
[5]
mom: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:

Memo per me quando uso Windows

Best

A volte mi capita –e potrebbe capitare anche a altri– di dover usare Windows (10 o altri) per fare cose sensate, tipo quelle che si fanno nel terminale; quello che là è conosciuto come Prompt dei comandi.

Ogni volta è il solito dramma, e poi per i post su AWK –prossimamente– servirebbe…
OK, questa volta me lo scrivo, tutto per bene.
Uso uno script (che là si chiama batch; io che sono vecchio ricordo che il batch era una cosa completamente differente, come dice il nome, ma tant’è), questo (udt.bat):

@echo off
echo sono %username%
echo sono nella cartella
dir
pause

Sono ospite sul ‘puter della figlia di mio fratello (che ringrazio) per cui tutto da penna USB, con divieto di rovinare qualcosa 😉

Inserendo la penna (ehi! al primo tentativo!) si apre il file manager full-screen da ridurre in finestra. Nella cartella giusta, E:\dos, posso fare doppio-click su udt (nota: niente estensione anche se si potrebbe, ma non io su questa macchina, settare diversamente) ottengo

1

che è proprio quel che volevo. Notare il messaggio “Premi un tasto …”, indotto dal comando pasue. Sì perché al termine dello script .bat la finestra del terminale si chiude.

Comportamento scomodo per chi deve interagire con il terminale in modo continuo. Ma c’è un modo semplice per avere il terminale come con Linux. Tra i millemila modi windoziani io uso la scorciatoia che mi sembra più semplice: premere in tasti Win+R e scrivere cmd 😀 Fatto.

2

Ci sono un po’ di cose da notare (per i linuxiani):

  • la directory (cartella) corrente è automaticamente esaminata per il comando, prima di cercarlo nella path; quindi basta udt invece di .\udt o ./udt;
  • non c’è distinzione (per i comandi) tra maiuscolo e minuscolo;
  • il comando pause che termina lo script ovviamente non chiude il terminale.

Una cosa che potrebbe servire a noi linuxiani: inserire la directory corrente nella PATH, come si vede non c’è:

3

Si può fare, io uso una combinazione alias + script; non so se c’è un modo più semplice. L’alias da me, per ragioni storiche, si chiama agpa (da aggiungi alla path): alias agpa='source ~/bin/ag_pa

Lo script ~/bin/ag_pa semplicissimo:

#!/bin/bash
export PATH=$PWD:$PATH
echo $PATH

ed ecco:

4

OK; ovviamente chiudendo il terminale la PATH torna quella originaria 😀

:mrgreen:

Certe cose non si possono fare

CZw-KD5WEAIW0AD

Ci sono cose che con Windows si possono fare, cose che ho fatto anch’io, quando ero giovane, ne parlo qui.
Ma se poi si passa a un Sistema Operativo serio diverso si deve essere disposti a cambiare qualcosa.

Lo so che mi sto ripetendo a distanza di meno di due settimane ma metti che capita come recentemente che qualcuno twitta, magari a sua insaputa (cit.), una soluzione migliore della mia. Sarebbe über-bellissimissimo 😀
Se invece questo non dovesse succedere (non è che ci spero davvero) ho comunque fatto vedere che ce l’ho messa tutta a fare tutto quello che sapevo fare 😳
Un solo avvertimento: l’esempio è minimale, il caso reale è molto più complesso, ma credo sia sufficiente a illustrare il problema.

Posso eseguire un eseguibile da penna o disco USB?

Con Windows si può:

Cattura

come si vede i 2 scripts (batches nel mondo DOS|Windows) vengono eseguiti correttamente.

Ecco e.bat:

@echo ciao!
@echo sono  nella cartella %cd%
@echo e sono il file %0%

e la variante f.bat:

@echo off
echo ciao!
echo sono  nella cartella %cd%
echo e sono il file %0%

Li ho costruiti con notevole difficoltà 😦 e.bat l’ho scritto con Gedit su Linux e –naturalmente– ho dimenticato che l’a-capo cambia per Windows. Avevo anche dimenticato di iniziare i comandi con @ per sopprimere l’echo, prima di ricordarmi di @echo off; ma a questo punto mica potevo distruggere quanto costruito con grande fatica! 😉

OK, funziona tutto, come previsto, come da sempre.
Resta da fare la versione Linux (in particolare Ubuntu ma non è influente). Io ci provo, ecco e.sh:

#!/bin/bash

echo ciao!
echo sono $0 in $PWD

che eseguo:

lx

Uhmmm… problemi 😦
Se lo lancio come bash e.sh funziona ma se lo lancio nel modo normale no. E non è questione di permessi. Per uno script interpretato non c’è problema ma per un compilato non c’è speranza. Secondo me, se poi qualcuno mi smentisce ben contento, anzi grazie mille anticipate.

Proposta, vecchia, scontata, lo so che mi ripeto: spostare l’eseguibile in /tmp, è apposta per le cose temporanee:

lx1

Devo riabilitarlo ma non dovrebbe essere un problema. E pensa te che io sono talmente abituato alla ditectory temporanea tmp che ne ho una perso, tutta mia:

tmp

Ma forse la questione è un’altra: cambiando OS devo adeguarmi a qualche nuova convenzione. Oltretutto questa è ampiamente giustificata per motivi di sicurezza.

:mrgreen:

Linux e Windows (e me)

b6

Un post perso (si legge persò e sta per personale, come fanno J-C e i francesi) 😉
Un post difficile è in elaborazione da diversi giorni anche se dice cose banali. E poi è la continuazione di questo.

Linux e Windows sono fondamentalmente incompatibili. Gli utenti di Windows non possono o vogliono capire cose semplicissime e che funzionano proprio perché sono semplici. Ma visto che parlo di me (l’ho detto che è un post perso, vero?) e che mi confronto con chi usa Windows forse sono io che sto sbagliando. Anche perché –vedi il fondo dl post.
Intanto gli aggiornamenti: adesso è praticamente obbligatorio avere la versione 10.qualcosa, appena ti colleghi a Internet parte l’aggiornamento, anche di soppiatto, e ti ritrovi tutto cambiato (non subito, può essere lentissimo). Per contro certi über-nerds-windowsiani (esistono) con riti woodoo e l’uso della forza riescono a continuare a usare XP (2001).
Ah! Libre Office sta soppiantando l’esoso M$Office, ma si continua a parlare di documento Word e Excel. Oggi –sono fondamentalmente buono– nonparlo dei mostruosi documenti Excel multifogli.

In particolare il mio rant viene dal fatto che domenica pomeriggio ho fatto la figura dell’über-niubbo-pollo-estremo. Tutto perché un’app (adesso are si deve dire così) a cui avevo collaborato è stata vestita di un’interfaccia grafica da paura (per me). E siccome stava girando su un desktop con schermo sensibile a dove ci metti i diti— io ho ditato male, ho perso l’app e mi sono perso. Pensare che era tutto OK, semplicissimo bastava fare [non ho capito cosa].

C’è da dire che il modello di riferimento oggi è il telefono (in qualche versione di Android, pare che Windows lì non akkiappi) e io uso solo il telefono fisso da casa (Se Don Knuth non usa la mail io posso –senza paragone, si dice da noi in questi casi– non usare il mobile.

Il telefono comporta anche altre possibilità (e inconvenienti per me): lavorando in posti diversi, lontani, ci si scambiano messaggi che per me sono mail, dovrebbero esserlo. Una cosa sul lavoro a distanza: bisogna definire mooolto meglio cosa si vuole fare, non è possibile urlare al volo il meraviglioso improvamento che hai appena scoperto. Poi io sono dell’idea che ogni funzione che scrivi (e che deve fare una sola cosa) devi testarla a parte prima di inserirla nel malloppo. E adoro il terminale e la REPL per i linguaggi che ce l’hanno, altrimenti si può fare come faccio con Rust, niente Cargo, uso rustc.
Fare il debug di codice che occupa più di una schermata può risultare non banale, ma forse è solo una cosa mia. Vale copiare dal Web (Stack Overflow è lì per quello) ma solo se capisci esattamente quello che fa il codice copiato, o ti si rivolta contro.
In condizioni normali un’app dovrebbe essere di un solo sviluppatore, con aiuti di terzi ma sua; nel caso di cui sto parlando la colpa era mia che non conosco le librerie grafiche.

Ma c’è un’altra cosa che devo confessare: io sono rimasto legato al terminale, proprio come quando ho cominciato a fine anni ’70; no le schede perforate non e rimpiango (anche perché la perforatrice s’inceppava continuamente e poi dovevi fare attenzione a non fare errori, pare che le schede fossero costosissime). Il terminale di oggi non è certo quello di allora, ne puoi aprire quanti ne servono, tutt’altra cosa di & (ph, per phantom su Pr1me); io uso anche Tilda, che visualizzo e nascondo con F12 ma tengo sempre aperto.

Per i windowsiani l’uso del terminale (Prompt del Comandi, almeno una volta, lì i nomi si aggiornano spesso) è anomalo; e non saprei nemmeno più rintracciarlo.

Invece io –bastian contrario?– ultimamente continuo con l’evoluzione di J, roba vecchia di un anno ormai, ne avevo raccontato qui.
Ecco basta una funzione e da terminale si può lanciare praticamente tutto. Per la cronaca dopo J ho creato E. Sì ho scoperto che i nomi maiuscoli sono tuti a disposizione (e distinti dai minuscoli, a differenza di Windows). Un esempio? Per aprire Google Maps dalle mie parti l’opzione di E è:
gmap) xdg-open https://www.google.it/maps/@45.2622625,7.9204472,8z?hl=en ;;
per compilare posts per Ok, panico mi servo di
oco) gedit ~/lab/OKp/wp-tag/tag-pre & ;;
per l’HTML di SICP c’è
sco) xdg-open https://mitpress.mit.edu/sicp/code/index.html ;;.

Nota: WordPress inserisce automaticamente il link se trova un URL nel testo; non sono riuscito a disattivare l’opzione.

don-k

Facile vero? o sono fuori? o maniaco? o sono i giovani?
“Io non so da quanto tempo non scrivo una riga di codice”, “nemmeno io” dicevano i miei antichi capi e colleghi. E forse nemmeno a loro piace Java (questo non so se posso scriverlo, rischio di peggiorare il mio status).
A proposito di linguaggi: la condizione ottimale sarebbe di usarne uno solo; non sempre è possibile, si usa quello più adatto per quel compito specifico, ma il numero complessivo di linguaggi dev’essere limitato. E (rigarda me) Rust è troppo difficile (ho anche copiato TheK3nger, qui e qui ma non ho convinto). E i linguaggi funzionali (Lisp e tutti gli altri) no, solo per me. Ma in realtà –segreto disvelato qui– il blog è un divertimento, mio 😀

:mrgreen:

Linux non sarà mai largamente adottato

SaurabhNon so da dove mi sia arrivato il link al blog di Saurabh Tripathi, studente PhD a Gwalior, 480 km a sud di New Delhi. Devo ancora esaminarlo a fondo ma ci sono parecchie cose, per esempio questo post: Linux Will Never be Adopted Widely, Here is why. Dice cose vere, condivido quasi completamente.

Fine del post. No, aspetta, sarebbe davvero troppo corto. E poi –a dirla tutta-tutta fino in fondo– non è nemmeno tanto originale. Io, per esempio, la storia di AutoCAD l’ho accennata (o raccontata, non ricordo, sapete la mia RAM…) più volte e la do per scontata. E non parlo neanche di GnuPlot, dev’essere il vostro giorno fortunato 😉

Ma capitano cose anche divertenti, una recentissima che Gwalior mi ha fatto tornare in mente. Adesso vi conto.

Ricevo una mail preoccupata di un mio vecchio amico che non riesce a far funzionare un programmino Python su Windows. Il programma in questione estrae dati da un documento troppo grosso per processarlo a mano. E per di più viene generato periodicamente in automatico, insomma a richiesta avevo scritto qualcosa che automatizza il tutto. Fatto per un PC vecchio con Ubuntu. Ora per standardizzare (e poi quella macchina sta morendo) si è deciso di trasferirlo su Windows. Ma, stranamente, Python per Windows dice che non va.

Sì. Python ha ragione a rifiutarsi di trattare quella roba. Fin dalla prima riga che fa riferimento a /bin/bash (ma è un commento, no?).
E poi in sostanza c’è solo poco più di una chiamata a grep!
Se fossi stato perverso avrei usato awk ma ero giovane e ingenuo allora (qualche anno fa).
Insomma, si potrebbe ma bisogna installare roba e non si vuole.
Sembra incredibile ma con un linguaggio di programmazione normale diventa subito più impegnativo e lungo. Per fortuna c’è Perl –anch’io come Shintakezou 😀
Perl me l’hanno lasciato installare (forse non se ne sono accorti).

perl

E tutto perché Linux no, mai!
Anzi, da altre parti, c’è chi continua a usare XP: “mi trovo bene con quello” (cit.).

I computers non sono più quelli di una volta

I ‘puters non sono più quelli di una volta.
E l’utente è funzione del ‘puter (non funzione nel senso di function ma nel senso che viene condizionato a fare cose indotte (o invogliate) dal ‘puter).

Ne ho già parlato, non è importante dove perché ho una soluzione migliore, definitiva (forse o comunque per adesso e in ogni caso solo per me), del problema dell’a-capo nel passaggio dei documenti di testo da Linux a Windows. Ignorando –per il momento– che i giovani ignorano i file di testo ecco la mia soluzione.
Al solito non è mia ma viene da Stack Overflow: How to convert DOS/Windows newline (CRLF) to Unix newline (\n) in bash script?

La soluzione di Jonathan Leffler 😀 funziona perfettamente 😀
Jonathan la sa lunga, la sapevate quella del $:

3.1.2.4 ANSI-C Quoting
Words of the form $’string’ are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:
[…]
\n newline
\r carriage return

Ecco un test iniziale fatto con un mio giovane contatto windowsiano, il file scritto su Linux viene visto così nel Blocco note (Notepad):

ac0

Processato con lo script di Jonathan il documento diventa tutto OK per Blocco note:

ac1

Notare che ormai la limitazione al set di catatteri ASCII è definitivamente archiviata, Unicode dappertutto, emoji compresi 😀

Quindi prima di subito lo script wnl (windows’ newline):

#!/bin/bash
if [[ $# -eq 0 ]]; then
    echo manca il file txt
    exit 2
fi
sed $'s/$/\r/' $1 > w-$1

dopo averlo reso eseguibile con chmod +x wnl conviene spostarlo in ~/bin in modo da poterlo eseguire da qualunque directory.
OK, caso chiuso 😀

Però… 👿
Il giovane potrebbe chiedere “perché ti ostini a usare quella roba?”. Loro sono abituati al documento tipo Word (uso i nomi di M$Office anche se i nuovi adesso usano –finalmente– LibreOffice) che oltretutto è già formattato come si deve (o almeno come sperano). Già per me non esiste neretto, corsivo, dimensione del carattere e compagnia.
I giovani in oggetto la sanno lunga: a me è arrivata la dritta “mandami il tuo testo in una mail, non un allegato, il testo nella mail”. Anche se non sanno che le mie mail sono di solito sempre senza evidenziazioni di sorta, proprio come si usava una volta.

I miei fraintendimenti con il giovane mica finiscono qui, anzi!
“Quant’è grosso il tuo documento?”. Detesto la versione “quanto pesa” che di solito usano solo quelli dell’esosa MelaMorsicata. Dovevo produrre almeno una pagina di testo di Word-equivalente formattato normalmente.
Ahemmm… si, a sentimento ci sono ma –come dire– io uso altri sistemi di misura.

wc-t

wc –word count– scrive il numero di linee, parole e caratteri. Con l’opzione –c restituisce solo il numero di caratteri (e si vede che nei due files varia di 6, tante quante sono le linee).
Con Windows è tutt’un altra cosa!

we

ci sono skifetse, ci interessano solo i files t e td, che vengono indicati con una dimensione di 1KB. È ovviamente un valore approssimato, per saperne di più bisogna ricorrere a Prompt dei comandi (via cerca cmd), navigare (o arrimpicarsi visto che si parla di alberi delle directories) per giungere dove i files si trovano e eseguire il comando dir:

dir

dove finalmente i numeri tornano.

Ma, dice il mio interlocutore: “il comando wc funziona solo per i txt” (loro chiamano così i misteriosi files di testo, anche se l’estensione .txt non si lascia vedere quasi mai. Qui sono stato davvero un modello (mi auto-complimento per il mio auto-controllo). Ho indicato l’URL di un testo ormai un po’ vecchio ma sempre altamente consigliato, anzi lo aggiungerò al mio elenco di manuali, The Art of Unix Programming di Eric Raymond. Si parla di Unix ma vale (praticamente) tutto per Linux.

In particolare nel cap. 1, Basics of the Unix Philosophy troviamo (ma è tutto da leggere) “Write programs to handle text streams, because that is a universal interface”.
E non dimenticate (è sempre lì) la regola 6 di Rob Pike 😉

Per i windowsiani si fa diversamente. Per un file di testo facciamo click con il tasto destro sull’icona del file, e scegliamo proprietà.

wc-txt

Consideriamo un documento Word-like, ecco:

wc-w

info che ottengo per il documento aperto via Strumenti/Conteggio Parole.

Insomma due mondi completamente diversi. E qui voglio chiudere con un rimpianto relativo al bel tempo andato, ho anche un titolo.

C’era una volta il Basic

Tanti ex-giovani hanno scoperto il mondo dell’informatica attraverso il Basic. Oggi non c’è più perché il computer si usa per produrre i documenti Office richiesti dalla scuola, usare il browser (spesso quello M$, Chrome per i più evoluti) per Facebook e Wikipedia (per la scuola, ma sono finiti i tempi del copyncolla), i giochi, YouTube e niente più. Per tutto il resto c’è il telefono. Anzi i giochi si fanno lì. E si chatta e messaggia a tempo pieno.

Niente programmazione. Anche quando sarebbe gratuita e semplicissima.
Torniamo, per esempio, da dov’eravamo partiti: la dimensione dei file di testo. Lo faccio sulla mia macchina perché da noi ultimamente ci sono stati problemi gravi di virus e ci sono divieti di installare alcunché.
Un linguaggio semplice ma professionale che consiglio è Python. Eccolo all’opera nella versione interattiva:

py

Oppure un utility sexy (almeno io lo reputo tale, c’è dietro una lunga storia) che fa molto nerd ma è semplicissimo, newLISP:

nl

Ultimamente sto studiando Racket, una variante Lisp recente, über-nerd, non facilissima ma gratificante:

rkt

Si, per tutti bisogna usare il terminale, quello che per Windows si chiama Prompt dei comandi. Proprio come si faceva una volta. Anche prima che ci fossero le finestre, ve ne ho mai parlato di quando ho cominciato? 😉

E se … Windows 10

w10Un altro post estivo, risultano molto più graditi di quelli del meraviglioso Racket. Oggi racconto di un colloquio informale avvenuto la settimana scorsa, con una giovane amica che si sta laureando in una disciplina umanistica. La laureanda (candidata? così è definita nella bozza praticamente definitiva della tesi che attende solo l’esame e OK finale della relatrice) è un’amica di famiglia che a inizio anno mi aveva coinvolto, ho scritto un paio di pagine in formato ODF che poi lei ha corretto e inserito nella tesi senza nemmeno stravolgerle tanto. E voleva la conferma che fossero ancora come le avevo divisate (si dice vero?).

Nel frattempo per la stesura della tesi si è reso necessario l’acquisto di un nuovo ‘puter, anche perché l’altro è della sorella, anche lei alle prese con la tesi, questa di secondo livello (si dice vero?). Il ‘puter è particolare: un notebook piccolino, di HP, preso a un prezzo incredibilmente conveniente dal papà di un amico. Tutto OK 😀

Ah! hai messo su Windows 10!” dico io, dopo un po’; sono perspicace ma non troppo e poi con LibreOffice a pieno schermo (OK, lo schermo è piccolo e dovevo solo leggere un paio di pagine dopo aver visto le parti indicatemi, e tutto senza mouse).
Sì! tando dovrò abituarmi” è la risposta, sensata, corretta, onesta.

A dire il vero sono dell’idea che con un sistema operativo più serio il notebook sarebbe più performante ma non era il caso di passare una volta ancora per ripetitivo e monomaniaco. E poi assolutamente non in questo momento con la tesi praticamente pronta.
Anche se, per dirne una, le immagini (non fanno parte della tesi ma sono servite per la stessa) con Linux un altro OS si potrebbero gestire meglio.
Già le immagini: vengono da due fonti: una reflex digitale dalle caratteristiche impressionanti, non le dico perché non so se mi credereste e lo smartphone.
Va a finire che spesso vengono dal telefono, sono più che buone anche quelle ed è molto più pratico, ce l’hai sempre con te.

Qui la vera sorpresa: “devo cambiarlo, questo è vecchio…“, sì certo, questi aggeggi hanno un’obsolescenza accelerata, mica come me che sono sempre attuale (entro certi limiti) con 60+ anni!
E lo voglio con Windows, ormai ce l’hanno tutti così“.
Questa non la sapevo. Anzi, sarà vero? O –come spero– vale solo per il suo ecosistema?
Anche perché proprio in questi giorni …
E poi anche ‘buntu, mi dicono, promette bene; magari non adesso ma presto, chissà. E c’è anche Jolla. Si anche un altro ma non mi viene il nome, sapete la memoria 😉