program3
Costruiamo una applicazione windows utilizzando nvda: piacere, python
Donato Taddei su uictech, 11\02\2013, h.09.20.

anche questo messaggio non richiede alcun prerequisito.
Mi limiterò a spiegare il motivo per cui mi sono proposto per javascript e python dando qualche 
informazione generalissima su questo serpente.
Ho scelto questi due temi non per capriccio e nemmeno per sfoggiare le mie conoscenze su di essi, 
che non sono i linguaggi che conosco meglio.
O zappatore non s'a scorda a mamma e io, a lustri di distanza, non scordo il c, e quando ho bisogno 
di piccole elaborazioni di file non faccio altro che scrivere qualche riga in fondo al file 
contenente codice perl e lo eseguo attraverso l'interprete e non sono nemmeno legato al perl perchè 
me ne sono compilato una versione minimale portabile.
E ovviamente me la sono compilata con un compilatore c, liscio, perchè quello addizionato ed 
emulsionato cioè il c++ non mi ha mai interessato, tanto meno mi interesserebbe ala vecchiaia se 
non altro perchè sta passando di moda.
E ho sulle mie macchine almeno tre compilatori c-c++ ma da tempo non ne uso alcuno.

Ho scelto python perchè, a differenza di javascript che per funzionalità e dimensioni è 
assimilabile al linguaggio di script di jaws, nel senso di essere un linguaggino dedicato interno a 
qualche applicazione, il browser nel caso di javascript, il python è invece un linguaggio 
interpretato di alto livello.

Che vuole dire di alto livello?
Vuol dire che ad esempio tutto il codice, anche detto codicesorgente o soloo sorgente, di nvda che, 
per quanto più piccolo e semplice di jaws, è pur sempre un programma di una certa complessità, 
assomma a qualche centinaio di k.
Per scrivere lo stesso programma in c o in delphi sarebbe stato necessario scrivere qualche mega di 
codice e decine di mega per un linguaggio di basso livello come l'assembler.
Anche questo era uno dei motivi che ai tempi della lista nv-programmare di Andrea, nonostante 
c'erano programmatori come Di Grande, Tranfaglia, lo stesso Andrea, Giorgio Abraini, ci facevano 
sembrare quasi impossibile riuscire a fare noi uno screen-reader ed è ovviamente anche queto il 
motivo per cui Curran, in python, nvda invece l'ha fatto e anche da solo.

Altro esempio:
anche il visualbasic è un linguaggio di livello medio-alto ed è questo il motivo per cui Guido 
Ruggeri, da solo, ha sviluppato e mantiene winguido, che pure ha tante funzionalità da permettere a 
un cieco digiuno di windows di usare decentemente il computer, e Giuliano Artico ha fatto il doc 
per leggere i libri.
A tal proposito qualcuno avev chiesto se in visualbasic si possono scrivere files: evidentemente sì
ma bisogna fare un distinguo tra i files vbs che si eseguono usando come interprete il windows 
server host e il visualbasic compilato fatto con un ambiente di sviluppo:
nel linguaggio interpretato ci sono dei limiti anche se anche con quelli si possono fare ad esempio 
degli spyware e quindi evidentemente se ne possono fare di cose.

Ai tempi del dos, come tanti, anche io ho cominciato col quick basic e mi divertivo perchè in capo 
a un mesetto già facevo qualcosa, appunto perchè era un linguaggio di alto livello da cui l'attuale 
visualbasic discende, anche nella sua versione orientata ai server, vale a dire l'asp.
(ne avete incontrati no degli indirizzi web che finiscono con la parola asp?
Bene vuol dire che l'indirizzo rimanda a una pagina sui cui gira un "advanced server program", che 
è il nipote di quel quick basic o qbasic).

Ma allora i miei interessi erano diversi: come diceva Francesco Melisi mi interessava il discorso a 
basso livello, mi interessava toccare i registri, gli indirizzi di memoria, e perciò passai al c, 
all'inizio con grande frustrazione perchè era molto più lungo e lento da scrivere e per fare una 
cazzatina che in qbasic avrei messo 5 minuti lì impiegavo tre giorni.
Però, anche se poi non mi è capitato o quasi di farlo, il dito nei registri potevo infilarlo, ma 
anche lì fino a un certo punto e così tra le mie cianfrusaglie tengo pure un ottimo compilatore 
assembler, almeno per quei tempi.

Altro esempio:
Tempo fa inviai qui il link ad una mia paginetta in php che esplora la struttura di una qualsiasi 
pagina html
donatotaddei.altervista.org/dom.php
di soli 24 k ma se un pazzo avesse voluto farla in c o delphi, gestendosi connessione, server e 
tutto quanto, avrebbe dovuto scrivere tonnellate di codice.
Ad essere precisi il codice php di questa pagina non supera le 100 righe perchè il resto è 
costituito dall'html da generare.

Ma chi se ne frega, direbbe Gabriele, tanto io prendo, scelgo da una toolbar, trascino, il 
controllo che voglio creare, premo un tasto e il compilatore lo scrive per me, il che è ovviamente 
vero.
Ovviamente il compilatore non pensa il programma al posto tuo, non infila errori logici nel codice, 
non fa errori sintattici, non si scorda parentesi, ghirigori, ma se disgraziatamente bisogna 
metterci le mani, il che ovviamente succede quasi sempre, specie ai principianti, sono cavolini 
acidi e tanto più cavolini acidi quanto più sono i chili di codice implicati.

Ok allora il python è un linguaggio interpretato di alto livello, inventato da un italiano, un 
certo Guido Rosso o Rossi, in una università ma non quella di Cassino o di Chisciano ma quella di 
Amsterdam e perciò si fa chiamare Guido Wan Rossum.
Il python non è orientato agli oggetti ma è esso stesso un oggetto che ha le proprietà e metodi di 
un linguaggio di programmazione ad oggetti, interpretato di alto livello.
Nasce proprio per formalizzare le acquisizioni in materia di programmazione ad oggetti affermatesi 
nell'ultimo ventennio del 900.
Il problema degli altri linguaggi orientati agli oggetti come perl o c++ o php era infatti una 
sintassi alquanto farraginosa e perfino criptica, occorreva qualcosa di meno arzigogolato e più 
immediato ed è questo il motivo per cui pur essendo nato per ultimo verso il 2000 sta prendendo 
rapidamente quota.
Tra i linguaggi di programmazione è quello con sintassi più semplice: niente if, niente parentesi 
graffe, niente puntatori, una sintassi spartana e leggibilissima quando ci si è fatta l'abitudine.

Questo normalmente manda nel pallone chi è abituato con altri linguaggi di programmazione: delphi, 
c, visualbasic perchè all'inizio non ci si raccapezza una mazza.
Perciò anche a me è venuto un po indigesto.

Viceversa però, ed è questo il motivo per cui l'ho proposto, per chi dovesse cominciare da zero ed 
è quindi "tabula rasa" risulterebbe molto più digeribile perchè è molto più simile a quella cosa 
che chiamano pseudo-codifica, vale a dire quando si simula un linguaggio di programmazione usando 
l'italiano: se-allora-altrimenti, ripeti finchè, ripeti fino a che non, scegli opzione ecc.
Allora ho proposto javascript e python, sia pure così differenti per dimensioni e potenza, perchè 
entrambi sono nati come linguaggi ad oggetti puri, perchè ritengo che chi si avvicinasse oggi alla 
programmazione, anche nel suo interesse, dovrebbe giocoforza programmare ad oggetti, tranne chi 
deve programmare a basso livello bazzicando con l'hardware e i circuiti perchè un driver per 
gestire un aggeggio da collegarsi al pc od anche autonomo non può farlo in perl, php, python e deve 
avere 2 palle per farlo in c, ci sono gli assembler e gli eprom per quello.

Ricapitolando, il python è interpretato, p la personificazione (qualcuno direbbe l'instanziazione) 
della programmazione ad oggetti, ha una sintassi semplice e priva di ghirigori.

Altra cosa che manda nel pallone chi viene da un linguaggio tradizionale, è il fatto che non ha una 
interfaccia o ambiente di sviluppo integrato (ide) in sigla) che ti fa pure il caffè come ho 
attribuito a Gabriele.
Infatti il cosiddetto pythonwin, una interfaccia minimale per window è una finestra vuota senza 
quasi strumenti, insomma somiglia molto da vicino alla console python di nvda, e allora tanto vale 
usare quella perchè si hanno anche sotto mano tutte le funzioni di accessibilità dello 
screen-reader.
nei 50 mega in cui si espande l'insaccato di 12 mega di nvda voi avete oltre allo screen-reader 
tutto il pitone per manipolare a vostro piacere il vostro pc e per farci velocemente le cose che ci 
vorrete programmare, avete, sia pure con le sue particolrità, tra le mani
un ambiente di sviluppo di alto livello, programmato ad oggetti..
Perciò paragona la terra a un piccolo asteroide chi paragona python al linguaggio di script di jaws.

Ma anche questo ha il suo rovescio positivo:
Gabriele non si sente più perchè dopo essersi scaricato tre manuali e 120 mega di compilatore avrà 
il suo bel da fare solo a fare una scorsa per capire cosa ha scaricato, poi avrà il suo problema di 
familiarizzare con l'interfaccia, trovare le scorciatoie che gli fanno più comodo, esplorare menu, 
documenti multischeda, capire cosa fanno: il problema di sapersene servire è di là da venire cioè 
quando si sarà cominciato a sciroppare più di qualche capitolo di manuali.
Come detto il python queste cose semplicemente non ce l'ha e quindi chiunque si avvicinasse da zero 
alla programmazione non deve passare quello che sta passando Gabriele.
Dico per dire, ovviamente perchè a quest'ora magari Gabriele, zac, za, ha già fatto due o tre 
programmetti elementari in c++.
L'altro giorno ho mostrato come è banale scrivere una funzioncina in javascript, analogamente avrei 
potuto fare in python ee chi ha solo una semplice curiosità e non l'ambizione di fare il 
programmatore pure si è fatto una idea di che si tratta.
E grosso modo è più o meno questo che si può fare in una lista tecnica sì ma generalista.
Però non ho avuto bisogno di perdere settimane a discutere:
su che linguaggio usare,
quale manuale scaricare,
quale ambiente di sviluppo scaricare e da dove,
come fare per aprire il primo progetto,
in quale menè trovare una certa cosa e combinazione di tasti usare,
(che ovviamente valgono solo per quell'ambiente,
come le combinazioni di tasti da utilizzare.

Purtroppo i computer hanno raggiunto dimensioni al di fuori della portata di un individuo.
Quante dll avete nel vostro computer?
centinaia solo nella directory c:\windows\system32
e quante funzioni sono contenute in una dll mediamente?
alcune centinaia il che fa decine e decine di migliaia di funzioni che ovviamente non si usano 
tutte ma solo a voler sapere ognuna a cosa serve si impazzisce.
E certo a farle entrare tutte in una lista è fare entrare il mare nel secchiello.
Credo a questo punto di aver chiarito perchè mi sono venute queste due idee bizzarre del javascript 
e di nvda.
Ed ora che vi lascio vado ad approfondire proprio una banalità del javascript relativa alla 
costruzione di oggetti decisamente più complessi della funzioncina per misurarsi la grossezza delle 
scatole, che non ho ben metabolizzato e per metabolizzare intendo trarre tutte le conclusioni e le 
implicazioni perchè in queste cose, superato le astrusità iniziali, dopo sembra tutto tanto 
semplice, tanto banale, che alla fine non si è capaci di servirsene, cioè di trarne le implicazioni 
più profonde.
Torna all'indice