{"id":1015,"date":"2017-04-27T08:17:01","date_gmt":"2017-04-27T06:17:01","guid":{"rendered":"http:\/\/www.hunggartorino.it\/ql\/?p=1015"},"modified":"2017-04-27T08:19:15","modified_gmt":"2017-04-27T06:19:15","slug":"configurazione","status":"publish","type":"post","link":"http:\/\/www.hunggartorino.it\/ql\/configurazione\/","title":{"rendered":"Configurazione dei programmi, diverse filosofie di approccio."},"content":{"rendered":"<p>Nel momento in cui, nella nostra &#8220;carriera&#8221; di programmatori\u00a0QL, oltrepassiamo la fase in cui creiamo semplici programmini\u00a0ed iniziamo e creare software di una certa complessit\u00e0, uno\u00a0dei problemi a cui dobbiamo fare fronte, e&#8217; la necessita&#8217; di\u00a0rendere il nostro software configurabile.<\/p>\n<p style=\"text-align: justify;\">Quale che sia in tipo di configurazione che vogliamo\u00a0implementare e&#8217; irrilevante ai fini del problema, sia che si\u00a0tratti dei colori della finestra in cui il programma opera o\u00a0impostazioni di sicurezza, il modo di affrontare il problema\u00a0non cambia.<br \/>\nOvviamente sono possibili diverse soluzioni, tutte efficaci\u00a0ma con punti deboli e punti di forza diversi tra loro.<br \/>\nSta al programmatore cercare di orizzontarsi tra queste\u00a0diverse scelte filosofiche in funzione delle sue necessita&#8217;.<br \/>\nInfatti a necessita&#8217; diverse possono corrispondere soluzioni\u00a0diverse allo stesso problema.<br \/>\nAbbiamo ipotizzato una serie di sei esigenze principali di\u00a0uno sviluppatore di software e proveremo successivamente ad<br \/>\napplicarle alle varie metodologie che andremo analizzando.<br \/>\nAnalizziamo ora queste necessit\u00e0.<\/p>\n<h2 style=\"text-align: left;\">Mantenimento durante l&#8217;upgrade<\/h2>\n<p style=\"text-align: justify;\">E&#8217; la necessita&#8217; di un utente di non dover riconfigurare il\u00a0proprio applicativo ogni qualvolta installi una nuova\u00a0release, spesso e volentieri ci si dimentica sia di come\u00a0funzioni il software di configurazione in quanto lo si \u00e8\u00a0utilizzato soltanto una volta, sia di quali siano tutti i\u00a0parametri che aveva impostato.<br \/>\nLa difficolt\u00e0 nel ricordare questi particolari nascono\u00a0proprio dallo sporadico utilizzo di queste opzioni.<\/p>\n<h2 style=\"text-align: left;\">Intercomunicabilita&#8217; tra applicazioni<\/h2>\n<p style=\"text-align: justify;\">Applicativi evoluti sono in grado di aprire autonomamente\u00a0altri programmi per effettuare operazioni o per utilizzarne<br \/>\nspecifiche funzionalit\u00e0.<br \/>\nPenso ad esempio a The Reader, che utilizza un editor a\u00a0scelta dell&#8217;utente per digitare i messaggi.<\/p>\n<h1 style=\"text-align: left;\">Configurazioni multiple<\/h1>\n<p style=\"text-align: justify;\">A differenza del mondo lavorativo, dove ogni utente dispone\u00a0di una postazione a lui riservata, nell&#8217;ambito domestico \u00e8\u00a0usuale che piu&#8217; persona accedano allo stesso computer.<br \/>\nOvviamente non e&#8217; detto che la configurazione ottimale per\u00a0uno vada bene per gli altri, anzi spesso capita esattamente\u00a0l&#8217;opposto e ogni utente vorrebbe avere una configurazione\u00a0propria.<br \/>\nIl risultato piu&#8217; diffuso e&#8217; quello di generare prima una\u00a0serie infinita di piccole discussioni e poi una\u00a0configurazione &#8220;mediata&#8221; che di fatto non piace a nessuno.<\/p>\n<h2 style=\"text-align: left;\">Portabilita&#8217; tra OS<\/h2>\n<p style=\"text-align: justify;\">Agli sviluppatori pi\u00f9 evoluti pu\u00f2 interessare che la\u00a0propria applicazione giri su sistemi operativi diversi.<br \/>\nQuesto e&#8217; in genere un problema poco sentito nel nostro\u00a0mondo in cui siamo spesso impegnati a importare programmi da\u00a0sistemi pi\u00f9 diffusi ed evoluti (tipicamente da linux) che a\u00a0esportare i propri applicativi verso altre piattaforme, dove<br \/>\ncon ogni probabilit\u00e0 gi\u00e0 esistono concorrenti pi\u00f9\u00a0completi dello stesso tipo.<br \/>\nPero&#8217; trovo giusto considerare anche questa ipotesi, per\u00a0secondaria che sia, per fare un quadro completo della\u00a0situazione.<\/p>\n<p style=\"text-align: justify;\">Facciamo ora una breve panoramica dei metodi pi\u00f9 utilizzati\u00a0sia sulla nostra piattaforma che non, e proviamo a rapportali\u00a0alle necessita&#8217; appena descritte.<\/p>\n<h2 style=\"text-align: left;\">Alterazione dell&#8217;eseguibile.<\/h2>\n<p style=\"text-align: justify;\">Alterare il codice eseguibile tramite un programma esterno \u00e8\u00a0il primo metodo apparso sulla nostra piattaforma.<br \/>\nVi ricordate dei quattro mitici programmi gestionali PSION?<br \/>\nEbbene, venivano configurati proprio in quel modo grazie ad\u00a0un programma in SuperBASIC fornito assieme al package.<br \/>\nDiciamo subito che come metodo non e&#8217; un granch\u00e8.<br \/>\nCome prima cosa, ogni qualvolta si doveva cambiare qualche\u00a0parametro occorreva andare a ripescare il programma di<br \/>\nconfigurazione, (che veniva generalmente tolto per mancanza\u00a0di spazio) ricordarsi come funzionava e poi intervenire.<br \/>\nAi limiti questo sistema si possono anche aggiungere limiti\u00a0eventuali del software di configurazione.<br \/>\nLo stesso dicasi per poter accedere alle informazioni di\u00a0configurazione, occorre sempre guardare dentro l&#8217;eseguibile.<br \/>\nQuesto comporta un altro problema.<br \/>\nNon e&#8217; detto che in release diverse dello stesso programma\u00a0i punti dell&#8217;eseguibile da &#8220;patchare&#8221; siano gli stessi.<br \/>\nQuesto comporta di conseguenza la riscrittura del software\u00a0di configurazione.<\/p>\n<h2 style=\"text-align: left;\">Fileconfig<\/h2>\n<p style=\"text-align: justify;\">Fileconfig rappresenta sulla piattaforma QL dell&#8217;evoluzione\u00a0del sistema precedentemente descritto.<br \/>\nSi tratta di un blocco dati scritti in un formato standard\u00a0che viene inserito in testa al codice eseguibile.<br \/>\nIl blocco non contiene solo i parametri da configurare ma\u00a0anche una descrizione degli stessi in forma di domanda.<br \/>\nFacciamo un esempio il parametro che contiene il pathname\u00a0del file di aiuto avra&#8217; accanto anche la descrizione dello<br \/>\nstesso in forma di domanda o di richiesta\u00a0&#8220;Indicare il percorso del file di aiuto:&#8221;<br \/>\nPer intervenire sul blocco di configurazione esiste un unico\u00a0programma che analizzando il blocco e&#8217; in grado di<br \/>\nauto modificarsi in modo da adeguarsi alle specifiche\u00a0contenute all&#8217;intero del blocco.<br \/>\nIl sistema \u00e8\u00a0decisamente pi\u00f9 &#8220;user friendly&#8221; rispetto al\u00a0precedente.<br \/>\nInfatti e&#8217; sufficiente un unico programma di configurazione\u00a0per intervenire su tutti i programmi che utilizzano questo<br \/>\nstandard.<br \/>\nNon e&#8217; neppure necessaria una grande fatica per imparare ad\u00a0utilizzarlo, una volta selezionato l&#8217;eseguibile da\u00a0modificare, sara&#8217; il programma stesso, interrogando il\u00a0blocco di configurazione a fornirvi le domande a cui\u00a0rispondere.<br \/>\nRispetto al primo metodo e&#8217; un enorme passo avanti,\u00a0rimangono tuttavia i problemi di mantenimento delle\u00a0impostazioni.<\/p>\n<p style=\"text-align: justify;\">C&#8217;e&#8217; da dire che la versione commerciale del configuratore,\u00a0distribuita da Jochen Merz (www.jms.com) e&#8217; in grado di<br \/>\nleggere il blocco di configurazione e di salvarlo su di un\u00a0file separato e una volta installata la nuova release, di<br \/>\ninserire nel nuovo programma i dati precedentemente salvati.<\/p>\n<h2 style=\"text-align: left;\">\u00a0Variabili d&#8217;ambiente<\/h2>\n<p style=\"text-align: justify;\">Un metodo completamente diverso dai precedenti \u00e8\u00a0quello di\u00a0utilizzare le variabili d&#8217;ambiente:\u00a0ad ogni parametro viene assegnata una variabile d&#8217;ambiente\u00a0diversa che viene letta dl programma.<br \/>\nQuesto sistema ci permette di avere una serie di vantaggi\u00a0rispetto alle soluzioni precedenti.<br \/>\nPrima di tutto ad ogni aggiornamento del software non\u00a0dobbiamo preoccuparci della riconfigurazione, il programma<br \/>\nsi configurera&#8217; automaticamente leggendo le variabili .Le variabili d&#8217;ambiente sono pubbliche per cui anche le altre<br \/>\napplicazioni possono leggerne il contenuto.<br \/>\nA cosa puo&#8217; servire?<br \/>\nFacciamo un esempio pratico.<br \/>\nPrima si parlava di The Reader, che utilizza un editor\u00a0esterno per comporre i messaggi.<br \/>\nEsistono altri programmi che fanno la stessa cosa, ad\u00a0esempio C68Tools.<br \/>\nSe entrambi i programmi leggessero la stessa variabile\u00a0d&#8217;ambiente, dovessimo cambiare il nostro editor con un altro<br \/>\n(ad es. da QD a MicroEMACS), basterebbe intervenire in un\u00a0solo punto per aggiornare entrambi gli applicativi.<br \/>\nAltro vantaggio delle variabili d&#8217;ambiente e che profili\u00a0utente diversi, operanti sulla stessa postazione, potrebbero\u00a0avere valori diversi, consentendo in questo modo ad ogni\u00a0utente di avere le proprie impostazioni preferite senza\u00a0interferire con gli altri profili.<\/p>\n<h2 style=\"text-align: left;\">File di configurazione separato<\/h2>\n<p style=\"text-align: justify;\">Nel caso in cui i parametri risultino essere troppo numerosi\u00a0conviene evolvere il metodo precedentemente descritto.<br \/>\nSi riduce il numero delle variabili d&#8217;ambiente ad una, che\u00a0verr\u00e0 utilizzata per il puntamento ad un file di\u00a0configurazione separato.<br \/>\nIn questo modo il programma potra&#8217; accedere egualmente alle\u00a0informazioni, mantenendo i vantaggi del metodo escritto<br \/>\nprima, ma senza intasare eccessivamente l&#8217;elenco delle\u00a0variabili d&#8217;ambiente.<br \/>\nQuesto per contro significa che un programma esterno per\u00a0poter agire su questo archivio dovr\u00e0 prima conoscerne il\u00a0formato oltre che il contenuto.<\/p>\n<h2 style=\"text-align: left;\">Registro di configurazione.<\/h2>\n<p style=\"text-align: justify;\">Un ulteriore passo avanti e&#8217; la creazione di un archivio\u00a0univoco, gestito dal sistema, che contenga in un formato\u00a0standard tutte le informazioni relative ad ogni programma\u00a0presente sulla macchina.<br \/>\nE&#8217; la soluzione adottata da Windows.<br \/>\nOgni applicativo dovrebbe utilizzare tale registro (ripeto,\u00a0DOVREBBE!) per inserirvi i propri parametri in modo che\u00a0siano facilmente accessibili.<br \/>\nLa controindicazione e&#8217; che tale registro dovrebbe essere\u00a0gestito dal sistema operativo, cosa che attualmente nemmeno<br \/>\nSMSQ\\E fa.<\/p>\n<p style=\"text-align: justify;\">Esistono poi programmi che gestiscono configurazioni multiple\u00a0in cui si lascia decidere all&#8217;utente quale tipo di\u00a0configurazione adottare.<br \/>\nTecnicamente c&#8217;e&#8217; ovviamente una priorita&#8217; nelle varie\u00a0configurazioni, per cui il programma puo&#8217; liberamente decidere<br \/>\nquale di questi mezzi utilizzare.<br \/>\nIn questo caso, per evitare doppioni e\/o effetti indesiderati\u00a0e&#8217; sempre consigliabile valorizzare una sola configurazione in<br \/>\nmodo da essere certi che il programma in questione legga\u00a0soltanto questa.<\/p>\n<p style=\"text-align: justify;\">Come potete vedere le scelte possibile sono tante, ognuna con\u00a0pregi e difetti; ora la scelta e&#8217; solo vostra.<\/p>\n<p style=\"text-align: justify;\">Giorgio Garabello<\/p>\n","protected":false},"excerpt":{"rendered":"Nel momento in cui, nella nostra &#8220;carriera&#8221; di programmatori\u00a0QL, oltrepassiamo la fase in cui creiamo semplici programmini\u00a0ed iniziamo e creare software di una \n<a class=\"moretag\" href=\"http:\/\/www.hunggartorino.it\/ql\/configurazione\/\"> [..more...]<\/a>","protected":false},"author":1,"featured_media":275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-1015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-senza-categoria-it"],"_links":{"self":[{"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/posts\/1015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/comments?post=1015"}],"version-history":[{"count":3,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/posts\/1015\/revisions"}],"predecessor-version":[{"id":1038,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/posts\/1015\/revisions\/1038"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/media\/275"}],"wp:attachment":[{"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/media?parent=1015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/categories?post=1015"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.hunggartorino.it\/ql\/wp-json\/wp\/v2\/tags?post=1015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}