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