Un post OT ma anche no

banner
Dai mica si può sempre essere seriosi e noiosi e poi lo dice anche il proverbio “Il Lisp Può Attendere(sì, appena inventato ma mi sembra una cosa saggia, o almeno saggina). Uno dei miei interessi, da sempre, è la fisica, quando ancora ero a scuola i quark erano appena nati. Poi ho fatto altro, anche perché, ahemmm… come dire, sì ecco, troppo difficilissimissimo.

Ma oggi capita un tweet che consiglia uno slashdot che rimanda a un’intervista a una fisica sudafricana.
Uh, parla di Python (non solo e forse solo per motivi di divulgazione) ma intanto, secondo me, merita di più che finire nella solita rassegna domenicale.

Chissà se c’è su Twitter? Problema: ha un nome condiviso da millemila altre Claire Lee. Ma è una ragazza in gamba, fin dall’uso del social-coso cinguettante, il suo indirizzo lo conferma.
E sapete una cosa? quasi quasi ci clicco Following, anzi fatto :grin:
Adesso ho due contatti che mi diranno cosa c’è oltre al Modello Standard.

OK, torno al CL, domani un post noioso. Probabilmente, forse…

Prima di Windows

real_commanderC’era il DOS, diranno i vecchi come me che già usavano il ‘puter.
Io in realtà ho una storia leggermente diversa ma poi tanto sono finito lì. E questo post nostalgico lo dedico agli XPisti, orfani e superstiti. Nihil novum –com’è già che continua la (cit.)?

Parlo di roba di quando non c’era il Web, anzi c’era chi diffidava dall’usare l’hard disk (vero P?).
Dunque c’era il DOS e con il DOS la linea di comando. Sì e No. Cioè sarebbe sì, punto finita lì, ma no, c’erano diversi aiuti per i comuni mortali costretti a usare il PC (si diceva davvero così, allora).
In una piovosa domenica pomeriggio con un mio collega di allora (che poi ha astutamente cambiato vita) siamo andati alla ricerca di questi reperti archeologici. Sulla Wiki –come faremmo senza la Wiki? (auto-cit.).

Il primo della lista per noi che frequentavamo un certo giro è XTree.
Nato nell’85. Ubiquitoso per parecchio tempo.
In realtà io ero per un rivale, PC Tools, 1986.
Però lo usavo solo per compiti particolari come ordinare i file alfabeticamente, recuperare quelli cancellati per sbaglio e cose simili. Inoltre i fan di PCTools non avevano creato un’abbreviazione, a differenza di XT, TR, NC, … Insomma una cosa di nicchia già allora.
Il primo nato era comunque Framework, nato addirittura prima del PC IBM, per il Mac, o un suo antenato.
Nella nostra rievocazione non riuscivamo a ricordare il nome e ci sono arrivato solo per via di Ashton Tate, quelli del DBIII. Pensa te che Framework esiste tuttora, qui il loro sito.

Il più popolare e usato era però un altro, NC,  il Norton Commander.

nortonLa wiki dice cose davvero interessantissime su NC, per esempio non è di Peter Norton ma di John Socha, autore anche del primo screen saver.
Ma è Peter che divenne famoso. Non solo su PC, compariva sul monitor spesso per ricordarti di fare frequentemente (often diceva lui e come  Piteroften era conosciuto) su quelle meravigliose meraviglie della Mela Morsicata™.

OK, mode nostalgia off.

Visto nel Web – 159

Continua sempre a piovere quindi settimana del cattivo umore :evil: Ma anche quella in cui si pensa di in insegnare più ai bambini a scrivere a mano (sono vecchio). Intanto ecco cosa ho visto nel Web.

B3W3oSbCIAAm5JM
Lezione LibreOffice Writer scuola primaria
::: slideshare

Zélus : A Synchronous Language with ODEs
::: Lambda the Ultimate

A brief history of video game graphics
::: Doc Madhattan

1473068_10152044342502418_920021081_n

Sophisticated malware has been spying on computers since 2008
::: Engadget ::: The Next Web

Records reveal net neutrality chats between FCC and telecoms
::: Engadget

How medieval astronomers made trig tables
::: The Endeavour

BfYUs9kIQAADMIj.jpg:large

Gnome-Weather 3.14 in Debian Testing
::: OS)(SIDE

Clojure is still not for geniuses
::: Adam Bard

La politica scelga su Internet
::: la Stampa

BfdeX-QIQAAqLHV.jpg:large

Download
disegni, modelli, blocchi e molte altre risorse per utenti di software Computer Aided Design (CAD)
::: Giovanni Longo

Innovazione, tecnologie, digitale: riscopriamone il senso di queste parole
::: Tech Economy

Ho appena scoperto che
::: Twitter

Bh2KyRhIcAI-4my

Debugging software
::: Twitter

Bei tempi
::: Silvia Ziche

This is Kano
It’s a computer — and you make it yourself
::: Kano

forza

New Regin malware is an incredibly sophisticated spy tool, possibly developed by the US government
::: ExtremeTech ::: Engadget

Attack of the One-Letter Programming Languages
::: Slashdot

Free Code Camp Doesn’t Make Money, and That’s OK
::: Free Code Camp

BiA7RNUIYAEgOEr

Most CEOs Still Don’t Get Social Media
OK, lo sapevo già, per CEO meno grossi ma CEO (nel loro piccolo (ma anche mica tanto))
::: CIO

OCaml Briefly
::: Mads Hartmann

1

11 anni di Wikisource
non è OT, e poi…
::: Questo blog non esiste

La proposta italiana che rischia di abolire la Net Neutrality
::: Pagina99 ::: la Repubblica ::: Il Fatto Quotidiano ::: Luca De Biase

Europa unita per dividere Google?
::: Punto Informatico

Good programmer

Top500: Linux domina con il 97%
::: lffl

Italia, la Rete che non c’è
::: Punto Informatico

Web neutrale, servono regole sovrannazionali
ma da confrontare con la proposta di sopra
::: la Stampa

lubit4

Google si rifiuta di mettere in blacklist le homepage dei siti pirata
::: Downloadblog

La popolazione mondiale d’internauti raggiunge i 3 miliardi
::: HDBlog ::: Slashdot

“Senza fili, senza confini”, in Piemonte il primo gestore internet creato dai cittadini
::: la Repubblica ::: la Stampa

bea-rockz!

The World’s First Computer Has Finally Been Resurrected
::: wired

Software Open Source “Commerciale”?
::: Computerworld Italia

io uso ancora xp e ho un sistema sicuro
::: Twitter

10670096_799235890114521_2851544209230638642_n

La crescita dell’offerta di robot di consumo
::: Luca De Biase

How the Gates Foundation is pushing for open access
::: Vox

Apple OS X 10.10 vs. Ubuntu 14.10 Performance
indovina chi vince; alla grande :wink:
::: [Phoronix]

1982233_754849567921803_8501350181905441142_n

What next after the Jolla Tablet’s $1.2 million crowd-funding success? Maybe a smart watch
::: The Next Web

Viewing Shapefiles Using Basemap in Python
::: Connor Johnson

How Intel and Micron May Finally Kill the Hard Disk Drive
::: Slashdot

10446686_919218754763782_2648487744290154460_n

CuBoxTV: Tiny $100 Linux-based XBMC media center
::: Liliputing

Twitter experimenting with in-tweet analytics
funziona; e sì, non m’interessa più di tanto, ormai mi sono assuefatto :wink:
::: The Next Web

Firefox Will Soon Offer One-Click Buttons For Your Search Engines
::: Slashdot

unnamed

Is LTO Tape On Its Way Out?
nostalgia: una volta passavo parecchio tempo a fare back-up su nastri da 1/2 pollice
::: Slashdot

New Snowden Docs Show GCHQ Paid Telcos For Cable Taps
::: Slashdot

Comparing strikers statistics
cosa non si riesce a fare con Python, con i dati della Wiki!
::: the Glowing Python

lolcatsdotcomaxdjl1t6rivbjr5u

Censoring the Web Isn’t the Solution to Terrorism or Counterfeiting. It’s the Problem
::: Electronic Frontier Foundation

United Nations human rights committee resolves to protect privacy
::: the Guardian

Twitter: il primo medium molti-a-uno
::: .mau.

2858e0ed-3e5e-4b5a-bd12-c2d853735a17-large

VenGO
Create and manage Isolated Virtual Environments for Golang
::: github

Chiuso per Facebook
::: Sergio Gridelli

Security Alert: Bug found in GNU acronym
::: The Quick Word

B28HfYCIcAAPMcg

From The Homebrew Computer Club 2nd newsletter, April 1975
::: Twitter

Characteristics of a universal simulator
::: SISSA

How To Learn Hacking
::: Eric’s

16LjwhIfW7-_I0-L_bSIj3w

Wikipedia’s “Complicated” Relationship With Net Neutrality
::: Slashdot

Il Parlamento europeo approva la mozione per “dividere” Google
::: Downloadblog

La neutralità della rete resta fuori dal Consiglio europeo
::: Agenda digitale ::: Luca De Biase

B3CuhkNIMAAsAML

Google’s Very Bad Week: Europe Attacks and Glass Disappears
::: LinkedIn

Don’t panic and keep forking Debian™! :^)
::: Devuan

Behind Apple’s Sapphire Screen Debacle
::: Slashdot

1-15663896327_fcf4492393_k

iMessage: come faccio a disattivarlo e ricevere gli SMS sul mio telefono Android?
::: Gioxx

Twitter spia l’elenco delle APP installate
::: SIAMO GEEK

Eagle: quando Linux parla italiano
sì, Lubit con tante cose che ancora non sapete
::: News123

10665086_839923829361048_6306836102545107743_n

Facebook e privacy: perché il dissenso scorre sulle vostre
bacheche
::: You Tech

Ubuntu: i tools da provare assolutamente
::: oneOpenSource

Hacklab X – Anno 1, Numero 7
::: Hacklab Cosenza

Frank Olsen

Frank Olsen

Gli insoddisfatti e gli entusiasti
::: manteblog

In UK Study, Girls Best Boys At Making Computer Games
::: Slashdot

B3HH_FpIEAAyH0d

Un IDE per Python — PyCharm

BlogPostPicture_PyCharm4Solo una segnalazione, pare sia utile fare anche queste cose.
Anche se personalmente preferisco occuparmi di cose che –sembra– interessano solo me; prendi il post di ieri sul Lisp che finora ha accumulato 5 (cinque) visite :evil: OK, non sapete cosa vi perdete.
Dunque, tornando al dunque: c’è chi si lamenta che spesso nel mondo Linux manca un ambiente di sviluppo come si deve, tipo VisualStudio per M$Windows. In parte è vero, in parte solo colpa mia. Per me vanno benissimo Gedit (in effetti la versione 64 bit per Linux qualche bug ce l’ha; quella Windows anche), Geany (sì, c’è anche per Windows) e poco altro. Sono vecchio.
Uh! –e qui anticipo in parte la risposta all’amico itfs– mi sto scoprendo allergico anche a quelle cose troppo grosse, tipo Emacs (perdono RMS, non è come sembra, sappitelo o comunque fattene una ragione).
Quindi PyCharm, per Python. Tutto è nato da questo post, visto su Twitter (l’uccellino azzurro si dismostra sempre più indispensabile!): Announcing General Availability of PyCharm 4. Prima di subito Appena possibile sono andato sul sito, qui: The Most Intelligent Python IDE. Ho provato la versione free, Download PyCharm,  la Community Edition, OK, senza i componenti per il web, c’è per Windows. Fatto qualche piccola prova, sembra OK (in realtà ho solo assistito, su Windoze, certo non è VisualStudio ma vabeeene, dicono).

OK :wink: Adesso mi viene un dubbio: questo post riuscirà a battere il record del precedente?
Ma ho anche la risposta, anzi due: fregacazzi, direbbe Zerocalcare, chissene… dicono da queste parti. Forse :grin:

Lisp – REPL, Espressioni, Parentesi e valori ritornati

cons-cellsREPL –read, eval, print loop– è il cuore dell’approccio interattivo del Lisp (e non solo). Siccome tutti sanno cos’è salto la solita spiegazione, tanto ci volesse trova tutto da dove sto copiando, qui: The REPL.
Dai tutto semplicissimo, passo a Expressions, Parentheses, and Return Values.
Già sappiamo che in Lisp ci sono le S-Expressions che vengono valutate in base al loro primo dato e ritornano il valore dell’espressione stessa. Inoltre c’è la quotatura che inibisce la valutazione. Cose note.

Esercizio:


* ;; definisco un paio di variabili
(defvar *test-list-a* '(a b c))
*TEST-LIST-A*
* (defvar *test-list-b* '(d e f))
*TEST-LIST-B*
* (append *test-list-a* *test-list-b*)
(A B C D E F)
* *test-list-a*
(A B C)
* *test-list-b*
(D E F)
* ;; nconc è distruttiva
* ;; per convenzione le operazioni distruttive iniziano con N
* (nconc *test-list-a* *test-list-b*)
(A B C D E F)
* *test-list-a*
(A B C D E F)
* ;; mentre ...
* *test-list-b*
(D E F)
* 

Le espressioni ritornano un valore. Però una chiamata a funzione ritorna il valore dell’ultima form valutata:

Ecco una tipica funzione anonima, l’ultima form del suo corpo è (+ x x) e quindi passandogli 2 ritorna 4.


* ((lambda (x) (+ x x)) 2)
4

In quest’altra il valore ritornato dalla form (+ x x) viene perso:


* ((lambda (x) (+ x x) (* x x)) 10)
100

Ecco come ritornare sia (+ x x) che (* x x) come le variabili lessicali SUM e PRODUCT; usando values vengono ritornati più valori invece di uno solo:


* ((lambda (x) (let ((sum (+ x x)) (product (* x x))) (values sum product))) 10)
20
100
* (values)

*

Come si vede però values da solo non ritorna niente.

Come già visto una S-Expression può essere sia un atomo che una Cons-Cell. Cons-Cell sono rappresentate dalle liste.
Un sottoinsieme degli Atoms è chiamato self-evaluating objects. Sono quelli che ritornano se stessi. Quotando un’espressione la si rende self-evaluating (come si dice da noi? autovalutanti?).

Ecco qualche esempio:

;; strings---
* "a string"
;; characters---
* #\greek_small_letter_lamda
;; numbers
* 42
* #x2A
;; bit-vectors---
* #*1001

Notare che #x2A è 42; si può verificare con:

* (eq 42 #x2a)
T

Le liste sono collezioni ordinate di S-Expressions racchiuse tra parentesi i cui elementi sono separati da blank (spazi, new-line, tab, quelli insomma). Ecco tre volte la stessa lista:

* '(a b c)
(A B C)
* '(a
b
c)
(A B C)
* (list 'a 'b 'c)
(A B C)
Ecco, finora mi sembra di essere nella Easy Way :grin:

Inoltre ecco una frase da incorniciare:

Lisp code is meant to be simple and elegant; if you find yourself staring into an impenetrable confusion of parenthesis-chaos, your code is too complex for you to manage. Using techniques for decomposition and refactoring also presented in this book, you will learn how to write beautiful and elegant programs as well as the Common Lisp language itself.

Bravo Colin :wink:

Visto nel Web – 158

La settimana degli incubi; pasticciato parecchio ma intanto ecco cosa ho visto nel Web.

camicia
10 Tips to Improve Programming Skill and become better Programmer, Developer
::: Javarevisited

C++ è
::: Twitter

Neutralità
della rete
::: Internazionale

piatti

High Performance Web Sites
::: ACMQ

Nuntio Vobis, gaudium magnum
::: Twitter

modify the EXIF metadata of an image
::: The Ubuntu Incident

10 facts about you

Learn X in Y minutes
ma poi ci vogliono anni per diventare über-geek
::: Learn X in Y minutes

Gli e-book come i videogame: l’Ue boccia l’Iva agevolata
::: la Stampa

Open Microsoft
::: SIAMO GEEK

1912091_10152023974644748_156955047_n

Cheaper, Smaller, Curvier; The All New Raspberry Pi A+
::: Linux Voice

Hacklab X – Anno 1, Numero 6
::: Hacklab Cosenza

Clojure Is the New C
interessante tweet-scussione
::: Twitter

newton

Computer Science paradox
::: Twitter

Facebook, Google and Apple lobby for curb to NSA surveillance
::: the Guardian

Il copyright degli enti pubblici e il principio open by default: webinar per Regione Lombardia
::: Simone Aliprandi

1958218_718871114810367_2028412288_n

Court rules Google can arrange search results any way it wants
::: Engadget

A Blow Against the Empire
In 2004, it looked like Microsoft would own browsing forever. Then came a feisty open-source browser called Firefox. And the web was never the same.
::: Medium

cipria biancofiore

NYC To Replace Most of Its Payphones With Free Gigabit WiFi In 2015
::: Slashdot

Faster Python
::: Mark Litwintschik

Learning Haskell as a Nonprogrammer
::: superginbaby

IMG_2228337280450

Nokia’s N1 Android Tablet Is Actually a Foxconn Tablet
::: Slashdot

Clojure is not for geniuses
::: Adam Bard

The Bash Guide
::: Twitter

sbatterelammimnistratore

Wow, 3 resign from Debian TC
::: Twitter

Facebook releases “Flow”, a statically typed JavaScript variant
::: Lambda the Ultimate

dpkg Developer Resigns from Debian Technical Committee over Systemd
::: Softpedia

1186700_2164536803601559_1304537572_n

Cognitive Computing: The New Frontier in Machine Intelligence
::: IBM Data magazine

Amnesty International wants to help you avoid government surveillance
::: Engadget

Computer Science Innovation and the Open Source Multiplier Effect
::: a16z

1544963_530986790336180_1435862417_n

colorize man pages
fatto, funziona
::: The Ubuntu Incident

Ubuntu abbandonerà la versione a 32 bit
::: oneOpenSource

The Shazam Effect
::: The Atlantic

1609653_618451038228626_1459300136_n

i3 tips ‘n’ tricks
::: Extended Reality ::: adesso anche in versione italiana

the API search engine
::: {API}

Pensate di aver cancellato dei file? I malintenzionati li recuperano, ecco come
::: Andrea Lazzarotto

1017523_891496514228762_4947178482023617693_n

Net neutrality looks doomed in Europe before it even gets started
::: Gigaom

Twitter time machine: the first time these important words appeared on Twitter
::: The Next Web

Cargo: Rust’s community crate host
::: The Rust Programming Language

10431711_813387422032919_314431746679137814_n

The end of Linux
panico?
::: Lusis

The book on metaprogramming
::: Twitter

Autunno, tempo di meeting per le Comunità italiane del Software Libero
::: Dario Cavedon (iced)

lolcatsdotcom3gp6wm7dw3jihq9t

How to reward skilled coders with something other than people management
::: lizTheDeveloper

the command “source” doesn’t exactly work the way you thought
ok, difficile, evitare se possibile
::: The Ubuntu Incident ::: The Ubuntu Incident

The Easiest Raspberry Pi Media Centre, With RasPlex
::: makeuseof

sicilia ETNA eruz

Le contraddizioni italiane sulla net neutrality
::: Luca De Biase

Google presenta Contributor, paghi per non vedere la pubblicità sul web
::: la Repubblica

L’emergenza dei prossimi anni sarà ridimensionare Google
::: Twitter

10407876_594779577295302_6971371916763000775_n

Shuttleworrth ama Go, tutto quello che non è in C è scritto in Go
::: Twitter

Announcing General Availability of PyCharm 4
da provare, sembra bello
::: JetBrains
ubuntisti

Ricevere notifiche su Whatsapp quando finisce uno script:il download di un video su youtube

Sono sempre stato un downloader compulsivo e ora ho scritto uno script che mi avvisa su whatsapp quando un download -o uno script- finisce.

Può essere l’installazione di un programma molto pesante, il download di una iso con wget, o (questa non l’ho ancora fatta) avvisare della temperatura della stanza (se abbinato con un cronjob e un sensore).

Se non avete paura della mia soluzione molto incasinata, ecco come faccio.

Installiamo subito un programma che tramite riga di comando ci consente di scaricare dei video da internet


sudo apt-get install youtube-dl

Poi creiamo una cartella “video” che conterrà i file scaricati

mkdir /home/$USER/video

Per prima cosa dobbiamo  installare da github una libreria che ci consenta l’accesso da programma ai server whatsapp.

Si chiama YOWSUP-CLI,  per installarla e configurarla questo l’url

Io ho seguito il tutorial qui presente

Mi raccomando, vi conviene registrarvi con un numero di telefono dove NON avete Whatsapp.

Se avete genitori o nonni, prendete in prestito il loro telefono, ma non usate il vostro numero con cui siete registrati su whatsapp.

Si può programmare in python, ma non conosco bene questo linguaggio, e promette di inviare anche foto (cosa che non sono riuscito a fare, appunto per il motivo di cui sopra)

Quando trovo su Youtube un video che mi piace e voglio scaricare apro un file di testo “list” e ci copio dentro l’URL.

In effetti questo è un file che contiene degli url separati da un a capo.

Ho scritto poi un programma in C  “youload.c” che legge da questo file “list” e genera in output un file “list.sh” e poi lo esegue.

Non chiedetemi perchè ho dovuto ricorrere a questo stratagemma: sono passati diversi mesi e non me lo ricordo più ;)

Sono ricorso all’aiuto di StackOverflow per leggere dal file “list” e memorizzare nella variabile  “line” ogni riga di quel file, dove riga è sinonimo di URL di un video, come intuite.

Successivamente poi nel programma apro il file “list.sh” che è uno script, e da programma C ci scrivo  i comandi che sono necessari affinchè questo script generato automaticamente scarichi ciò che voglio e mi notifichi dell’eventuale successo.

Alla fine del programma eseguo materialmente lo script generato tramite il comando


system("./list.sh");

Affinchè questo programma funzioni dovete sostituire IL_MIO_NUMERO_DI_WHATSAPP e IL_MIO_USERNAME con il vostro numero telefonico e l’username con cui siete loggati al pc.

 


//questo programma si chiama youload.c

#define _GNU_SOURCE

#include <stdio.h>
#include <stdlib.h>
void strip(char *s) {
char *p2 = s;
while(*s != '\0') {
if(*s != '\t' && *s != '\n') {
*p2++ = *s++;
} else {
++s;
}
}
*p2 = '\0';
}
int main(void)
{
char buf[80];
FILE *fp;
char *line = NULL;
size_t len = 0;
ssize_t read;
FILE *sh;
sh = fopen("list.sh","w");
fp = fopen("list", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1) {
fprintf(sh,"youtube-dl ");
fprintf(sh,"%s", line);
strip(line);
fprintf(sh,"page=$( wget \"%s",line); // "\b" perchè %s,line aggiunge un ritorno a capo che non mi serve
fprintf(sh,"%c\" -O youtube)\n",0x08);

fprintf(sh,"echo -n \"Finito il download di %c\"\" >> whatsapp\n",0x5c); //hex value per "\"

fprintf(sh,"awk -vRS=\"</title>\" \'/<title>/{gsub(/.*<title>|%cn+/,\"\");print;exit}\' youtube >>whatsapp\n",0x5c);

fprintf(sh,"echo \"%c\" alle ore \" >>whatsapp\n",0x5c);

fprintf(sh,"echo $(date +\"%T\") >>whatsapp\n");

fprintf (sh,"echo \" del \" >>whatsapp\n");

fprintf(sh,"date +\"\%cd/\%cm/\%cy\">>whatsapp\n",0x25,0x25,0x25); //0x25=hex value di %
fprintf(sh,"a=$(cat whatsapp | tr -d \"");
fprintf(sh,"%cn\"",0x5c);
fprintf(sh,")\n");

fprintf(sh,"yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP \"$a\" --config /home/IL_MIO_USERNAME/yowsup-master/src/yowsup-cli.config\n");
fprintf(sh,"rm whatsapp\n");
fprintf(sh,"rm youtube\n");
}
fprintf(sh,"yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP \"Per oggi abbiamo finito!!\" --config /home/IL_MIO_USERNAME/yowsup-master/src/yowsup-cli.config\n");
fclose(sh);
fclose(fp);
if (line)
free(line);
system("cd /home/IL_MIO_USERNAME/video");
system("./list.sh");
exit(EXIT_SUCCESS);

}

Creo anche un altro file “whatsapp” che mi aiuta nella costruzione della stringa finale. Per l’utilità leggere più in basso

Non avete capito niente, lo so e anch’io adesso non ricordo l’iter che mi ha portato a questo procedimento, ma se apriamo lo script che viene generato da questo programma “list.sh”, capiamo subito un po’ di più.


//questo file script "list.sh" è stato generato automaticamente da youload.c

youtube-dl https://www.youtube.com/watch?v=URL_DEL_VIDEO
page=$( wget "https://www.youtube.com/watch?v=URL_DEL_VIDEO" -O youtube)
echo -n "Finito il download di \"" >> whatsapp
awk -vRS="</title>" '/<title>/{gsub(/.*<title>|\n+/,"");print;exit}' youtube >>whatsapp
echo "\" alle ore " >>whatsapp
echo $(date +"%T") >>whatsapp
echo " del " >>whatsapp
date +"%d/%m/%y">>whatsapp
a=$(cat whatsapp | tr -d "\n")
yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP  "$a" --config /home/MIO_USERNAME/yowsup-master/src/yowsup-cli.config

la riga


page=$( wget "https://www.youtube.com/watch?v=URL_DEL_VIDEO" -O youtube)

awk -vRS="</title>" '/<title>/{gsub(/.*<title>|\n+/,"");print;exit}' youtube >>whatsapp

mi serve per risalire al titolo del video su Youtube. Grazie StackOverflow!

vedete la riga


yowsup-cli --send 39IL_MIO_NUMERO_DI_WHATSAPP  "$a" --config /home/MIO_USERNAME/yowsup-master/src/yowsup-cli.config

usiamo il nome del programma senza “./” per eseguirlo. Ciò significa che è diventato un programma di “sistema”, perchè abbiamo copiato tutto il contenuto di yowsup-master/src in /usr/bin.

 

ESEMPIO

ecco il contenuto di “list”

list

ecco il contenuto di “list.sh”

sh

Ed ecco uno screenshot di whatsapp sul telefono

okpwz

NON BIASIMATEMI PER I TITOLI DEI VIDEO: dovevo controllare semplicemente se funzionava, e ho scelto i filmati più brevi.

Che cosa vi sembra?

Commentate numerosi, perchè so di non essere stato chiaro -ho scritto in fretta- !

Grazie dell’attenzione

61LL35

Help! una richiesta disperata — risolto

Il post è stato modificato, quasi interamente riscritto, sperando di non perdere troppi nerd-punti.

nerd

Quasi, nèh!
Ma c’è una cosa Unixosa che non sono riuscito a fare come vorrei. E penso che sia possibile anche se richiede un grado di überosità –evidentemente– superiore al mio. E se qualcuno dice che in effetti il mio grado è basso assay sappia che:

  • ha ragione; ma
  • non ci faccio più ‘mico.

Vengo al dunque. Per capire di cosa si tratta dovreste dare un’occhiata al post precedente, questo: SBCL – una prima scorsa al manuale.
Quello che vorrei fare è questo:

l0

cioè lanciare sbcl con un banner diverso dal suo, troppo lungo. E non vorrei nemmeno eliminarlo completamente, cosa fatta con l’opzione --noinform.

Ecco la sintesi delle prove fatte:

s0Come si vede per l’alias occorre passare la stinga tra virgolette semplici o doppie; si possono quotare con backslash i caratteri speciali come lo spazio nell’ultimo esempio.

2Tutti i caratteri speciali possono essere backslashati. Il comando che voglio aliasare è questo:

s1Notare come la form Lisp richieda le virgolette. Sono quelle che non sono riuscito a passare. Ho fatto diversi tentativi ma niente, il Lisp non gradisce e continua a dare errore (parte il debug integrato).

A questo punto mi sono perso. Cioè ho seguito un’idea bislacca che provo a raccontare a mia discolpa.
Spesso faccio cose su Linux che poi devono finire su Windows dove è una pratica usuale creare script che lì si chiamano batch, quelli con estensione .bat.
E pensando a Windows ho deciso di chiedere aiuto al web, creando uno shell-script in ~/bin e dopo averlo chmodato il risultato è quello illustrato. Lo script poi è semplicissimo:

#!/bin/bash
echo "Buon hack con SBCL"
sbcl --noinform

Avevo sempre in mente Windows per cui la mia richiesta è stata: “Ma non è elegante. O no? Come farebbe un über-nerd? Qualcuno mi aiuta?

Prima di subito (in realtà dopo le qualifiche per il Gran Premio) lui|61ll35 ha twittato la soluzione.

OK, ecco: alias CL=’echo -e “Buon hack con SBCL” && sbcl –noinform’
Semplice vero? Grazie lui! :grin:

Però, ripensamento: è il mio script trasformato in alias, unendo le due righe con l’operatore AND. E il messaggio non viene dal Lisp.

Insomma: non è quello che volevo; funziona ma non è lui.
Ma in fondo non m’interessa più, ho già perso troppo tempo. E poi devo essere meno impulsivo e occuparmi di meno cose (propositi per l’anno nuovo, un po’ in anticipo) :grin:

SBCL – una prima scorsa al manuale

manualeIl manuale di SBCL, 169 pagine, è una macchina del tempo, almeno per me. Sembra davvero uno di quelli anni ’80 (IBM ma non solo), pieno di cose misteriose, minacce, sigle e procedure che ti fanno pensare “non ce la posso fare”. Per di più l’ho iniziato senza avere la possibilità di verificare subito. Poi quando ho cercato le cose erano cambiate (forse, ma sapete che il Lisp è speciale).
Pare che il REPL sia davvero così come mi è apparso, anzi non è nemmeno nelle loro intenzioni di migliorarlo (p.5): SBCL is essentially a compiler-only implementation of Common Lisp. That is, for all but a few special cases, eval creates a lambda expression, calls compile on the lambda expression to create a compiled function, and then calls funcall on the resulting function object.
E poi (p.6): Though SBCL can be used running “bare”, the recommended mode of development is with an editor connected to SBCL, supporting not only basic lisp editing (paren-matching, etc), but providing among other features an integrated debugger, interactive compilation, and automated documentation lookup.
Currently SLIME (Superior Lisp Interaction Mode for Emacs) together with Emacs is recommended for use with SBCL, though other options exist as well.
Non l’ho ancora installato, aspetto di vedere cosa consiglia Colin the Phoeron Lupton. Anche perché c’è di mezzo Emacs, superlativo ma di nuovo una cosa (quasi) nuova.
Non mi è neanche ben chiaro che tipo di eseguibili crei, sempre che si vogliano ceare.
Le opzioni hanno nomi –come dire– non proprio semplici, non Unix like.
In compenso ho scoperto come eliminare il banner iniziale: --noinform. Ho subito creato l’alias cl='sbcl --noinform', funziona:

l0

Trovato la shebang per eseguire codice come script. In realtà la directory indicata nel manuale non è quella corretta ma c’è whereis :grin:
Testato, funziona anche quello:

l1

Giocato un po’ con l’opzione --eval che consente di eseguire un comando al volo, alcune cose sono ok, altre da chiarire leggendo Colin:

l2

Insomma come conclusione il manuale è decisamente ostico (anni ’80) ci sono parecchie cose che si lasciano intravedere, confido in Colin. O qualche altro libro introduttivo, ce ne sono diversi, alcuni elencati anche qui. Inoltre mi sono dimenticato quasi tutto; ultimamente ho usato newLISP che nel suo piccolo è grande. E semplice; e attuale fatto come si usa adesso.

Lisp – per chi è L(λ)THW e sintassi del linguaggio

large_get_sbcl_mugIl capitolo Preface pt. iii – Who Is This Book For? è da leggere attentamente, sono pienamente d’accordo con –beh– tutto.
Io mi considero (moderatamente) un You are already a Lisper, but want to take your code to the next level ma va bene per tutte le altre categorie. Anzi: You don’t have to know anything about programming or computer science to learn Lisp with this book. Però: I’m going to assume that you know that learning any new skill is hard for everyone, and that you need to work hard in order to succeed. Insomma The Phoeron rockz!
Mi sta venendo un dubbio: se continuo a citare (copiancollando) faccio la cosa giusta? Credo di no, leggetevelo voi. Dai!
Anche se, continuando con l’introduzione, non mi trovo tanto d’accordo con il misticismo del Lisp; almeno per ora. Forse quando sarò un grok fatto e finito… (non sapete cos’è il grokking? è il padroneggiare la materia –facciamo che vi leggete la definizione da Urban Dictionary). No, direttamente da Heinlein, nel capitolo successsivo.

OK, credo sia il momento di una panoramica della sintassi. In Lisp tutto è un oggetto e gli oggetti sono rappresentati da S-Expressions.
Le S-Expressions vengono dal Lambda Calculus, ognuna delle quali può essere un Atom o una List. Le liste sono implementate come Cons-Cells e gli atomi sono tutti gli oggetti che non sono un cons (le Cons-Cells prossimamente).
Viene proposto un primo esercizio, ecco il mio compito. Notare che sono stato mooolto coscienzioso: ho riprodotto l’errore di stumpa per lambda :roll:

ll1

Questi sono diversi tipi di atomi. Come si vede gli atomi possono essere parecchie cose: numeri, simboli, caratteri letterali (?), stringhe e liste vuote. Come si vede nil, '() e () restituiscono la stessa cosa: NIL. Questo perché nil è definito come la lista vuota che viene trattato come atomo visto che non richiede consing.
Le stringhe, trattate come atomi sono in realtà sequenze di caratteri; anche le liste sono sequenze. Per capire cosa succede bisogna considerare la gerarchia degli oggetti. In Lisp ogni oggetto discende da t ad eccezione della lista vuota e la sua rappresentazione nil.
Pertanto t e ogni oggetto che da esso discende rappresenta vero (true) mentre nil falso.

Qualcuno degli esempi sopra è quotato: ha un apice davanti. Questo è una scorciatoia di quote dice a Lisp di non valutare l’oggetto quotato. Esempi di espressioni quotate:

ll2

Le liste sono racchiuse tra parentesi. Ogni oggetto annidato entro una lista è un’S-Expression. Tutto quello non quotato è automaticamente valutato. Queste liste si chiamano form, esempio:

ll3

Cose da notare:

  • una form inizia con una funzione, macro o operatore speciale, tipicamente rappresentato da un simbolo;
  • il resto della form sono i parametri passati alla funzione, macro o operatore speciale;
  • si possono avere altre form come parametri, quelle interne vengono valutate per prime e il loro risultato viene usato come parametro al livello successivo della gerarchia.

Questa sintassi è nota come notazione polacca prefissa. Nel primo esempio è chiaro quello che capita: (+ 10 20 (* 30 2)) diventa dapprima (+ 10 20 60) e poi 90. In casi semplici come questo non se ne vede (purtroppo) la grande semplificazione che porta.
Di solito l’espressione nella posizione di operatore (la prima) di una form è un simbolo che rappresenta una funzione. Può però essere anche una funzione anonima, una macro o una special form. Le special form hanno regole loro, c’è un metodo per definirle. Le marco consentono, tra le altre cose, di creare sintassi personalizzate consentendo l’estensione del linguaggio. Ci sono anche le reader macros che consentono di definire form per trattare nuovi tipi di dati.
Abbiamo già usato una macro: l’apice usato al posto di quote.

Con questa sintassi (è tutta qui) si può esprimere qualunque programma immaginabile, usando il paradigma di programmazione che volete (imperativa, procedurale, object-oriented, or funzionale).

Prossimamente… forse… :roll:

Iscriviti

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

Unisciti agli altri 82 follower