Simbolico/Atomico/Continuo.

Tre modi umani congrui allo stile dell'interfaccia.

  • Simbolico: comandi testuali con sintassi non-banale, esempio:
    delete* .txt (operazione) (espressione)
    valuta un elenco di file avente estensione .txt
    La valutazione e la cancellazione viene eseguita solo dopo che l'utente avrà pigiato il tasto enter.
    Le interfacce simboliche sono spesso estensibili.
  • Atomico: stile adatto a funzioni specifiche con percezione ed esecuzione immediata, la sintassi è banale, inoltre o riesce completamente nel suo scopo o non ha alcun effetto, quantificato, sulle composizioni disponibili (le interfacce a 'menu' sono di tipo atomico).
  • Continuo: usa apparecchiature 'continuos' in input (es.: una penna, mouse, joystick) con una rapida reazione visuale per ottenere un uso effettivo pari al movimento apportato (dell'occhio, del dito, della mano, del braccio o del corpo).
  • Selection-oriented (selezione-diretta), si sostiene uno stile di tipo Atomic (spesso usato per approvvigionare parametri ad una interfaccia simbolica).
  • Input tramite tastiera, che mette in grado l'utente di realizzare simboli di ingresso in un insieme di caratteri estesi.

    Stili dell'interfaccia

  • Ciascuno stile è distinto dall'altro, ma ognuno di esso può emulare gli altri due, un sistema reale conversazionale tenderà a mescolare tutto- l'interazione incrementale è basata sullo stile Atomico- uno stile simbolico è supportato da un sistema di tipo timesharing (come nelle banche) ed è ideale per i mainframes.
  • Una volta che un comando simbolico è eseguito esso può assegnare un arbitrario numero di operazioni senza dare alcun feedback (comunicazione controreattiva) all'utente (ci sarà una sola comunicazione: il risultato finale) .
  • Un'interfaccia atomica prevede che vi sia un feedback all'utente (di circa 10/secondo). Questo implica una maggior potenza di calcolo.
  • Un'interfaccia continua prevede una risposta in real-time (es.: l'intermittenza di un cursore, il movimento del puntatore del mouse, il movimento/rotazione di un oggetto), richiedendo un maggior potenza di calcolo (in particolare se si lavora con una workstation o un personal computer).
    E' necessario effettuare un distinguo tra emulazione e simulazione:
    Emulazione: cercare di uguagliare qualcosa.
    Simulazione: riprodurre in modo del tutto analogo mediante procedimenti tecnici.
    In breve: nell'emulazione ci interessa che avvenga un determinato risultato, nella simulazione il nostro interesse è rivolto al modo in cui si giunge al risultato.

    Trade/Offs

  • Un errore in un'interazione simbolica consiste in una perdita del comando, il suo recupero dipende dal L.T.M. dell'utente.
  • Un sistema può provvedere ad una nomenclatura in modo tale da accelerare la chiamata dei pezzi- l'utente può ricordare il nome in LTM più facilmente.
  • Un errore in un'interazione atomica causa la perdita di una singola azione; il recupero dipende dal S.T.M., se l'errore non è ricercato in un tempo breve, può essere perso per sempre.
  • Gli errori in un'interazione continua sorgono continuamente... l'utente tende a correggerli, questi sistemi sono reversibile fintanto che non si verifica un over-shoot o un under-shoot.
  • Se il feedack (contro-reazione) è veloce (per-ogni-azione) abbiamo sistemi reattivi (che consentono una continua 'conversazione' tra utente e macchina).

    Aspetti linguistici

  • Lessicale: forma di comandi/simboli.
  • Sintassi: regole con cui possiamo combinare i comandi.
  • Semantica: individua il significato delle combinazioni dei comandi.
    Quando un'interfaccia è eseguita, il livello lessicale è associato ai simboli presentati dal sistema sullo schermo (colori, finestre, widgets, menu, icone, ecc.).
    Il livello sintattico è legato alle regole per generare tali simboli (visuali), per spostare finestre, per posizionarli, per gestire la loro posizione sullo schermo, per ruotare, allargare, ecc.
    Il livello semantico non può essere definito con regole note a-priori, ma è severamente condizionato dai compiti che deve eseguire.

    Gli errori

  • Tutti questi livelli sono intrecciati. Un modo per classificarli suggerito dall'HT, può essere quello di distinguerli sulla base del loro effetto in un programma, es: il tempo necessario per individuare l'errore e quali sono i suoi effetti.
  • Gli errori lessicali possono essere scoperti immediatamente.
  • Gli errori sintattici possono essere localizzati dopo un accurato controllo delle regole.
  • Gli errori semantici possono essere trovati in due modi: nel primo caso l'errore è facilmente recuperabile (sostituzione del lemma scorretto con quello corretto). Nel secondo caso, l'errore si propaga indiscriminatamente senza che il sistema ne rilevi l'errore. Usualmente l'errore semantico può avere conseguenze drastiche: può eseguire un'operazione diversa o non richiesta.

    Comunicazione

  • L'interattività migliora la comunicazione.
  • Anche l'astrazione incrementa la comunicazione - la sigla CUP (University Cambridge Press) è un esempio: anche se non abbiamo un significato preciso di CUP (il luogo, la produzione, una società editoriale legata all'Università,ecc.)
  • L'interazione rompe il trasferimento di informazione riducendo l'errore; durante la trasmissione, a blocchi, dell'informazione si ha sia la comunicazione che la quiescenza, ci possono essere vantaggi economici per questo tipo di comunicazione.
  • Modi sperimentali consentono di ottenere informazione "ritrattando" azioni passate (UNDO).
  • Induction può essere ottenuta da un pattern onde evitare un pieno trasferimento di informazione (dati e regole).
  • Nel modello Adaptive il computer cerca di anticipare l'azione seguente; l'utente, interagendo, corregge tale predizione. Tale interfaccia può essere efficiente purché l'utente sia vigile.
  • Nel modello Caching una parte dell'informazione viene trattenuta affinché possa essere usata nel futuro. L'utente ha pieno controllo sull'informazione immagazzinata.

    Comunicazione parziale

  • Il calcolo è lasciato eseguire al computer quando ne ha bisogno.
  • La ricostruzione dell'informazione può essere fatta con i programmi in fase di elaborazione. La ricostruzione si compensa per la stretta bandwidth del canale di input.

    Colli di bottiglia per il modello Von Neumann

  • Architetturale: CPU/memoria (è maggiore il tempo per prelevare l'informazione piuttosto che il tempo per elaborarla).
  • Tecnico: oscurità nel linguaggio di programmazione (assegnazione a strutture dati o modal programming).
  • Concettuale: il tempo di programmazione è maggiore del tempo di esecuzione.
  • Gestionale: complessità del programma.

    Rimedi

  • Creare istruzioni potenti: un'istruzione complessa eseguirà una numero di operazioni con una sola istruzione di FETCH.
  • RISCs (interfacce con un insieme di istruzioni brevi): istruzioni veloci da eseguire (circa una dozzina).
    RISIs (interfacce con un insieme ridotto di istruzione): dovrebbe essere costruito affinché la complessità venga minimizzata.
  • Associare una singola parola ad una istruzione molto lunga.
  • Fare n-cose indipendenti insieme, in un tempo più veloce, disponendo di n-microprocessori ed istruzioni.
  • Creare Caches (nascondigli) in modo che l'utente possa ricordare (cache in the head) quello che aveva trasferito tempo addietro (e se immutato effettuare un ri-trasferimento).
  • Creare una buona organizzazione spaziale per ricordare meglio; se l'utente vuole nuovamente alcune informazioni di nuovo può ricordare l'organizzazione spaziale e non il sistema caches.
  • Valutazione LAZY (PIGRA): si evita di trasferire o lavorare fino a che non si ha bisogno dei dati.
  • Compressione: tipicamente viene fatta su file di dimensioni estese (ovviamente vi è la necessità di un decompressore).
  • Predictive Compression: si cerca di prevedere che tipo di compressione si possa effettuare. La predizione deve essere corretta affinché si abbia una decompressione fedele.
  • Multiplexing: trasferimento di informazione in tempi diversi (trasferimento a pezzi).
  • Dipendenza temporale: il tempo ha un significato ben-definito nel contesto di una interazione.Il significato di
    X1:=X2; X2:=X3; X3:=X1;

    è diverso se l'ordine viene cambiato.
    Il concetto di compressione è largamente usato per i file di immagini.

    Variazioni

  • Utilizzo di variabili non-ground: permettere di usare variabili anche se non hanno un valore ben-definito (le variabili non-ground, nel linguaggio utilizzato per la macchina di Von Neumann, non sono contemplate ), il valore può essere assegnato in seguito.
  • Utilizzo di più canali: generalmente, vengono utilizzate solo tre apparecchiature: mouse, schermo e tastiera (anche se ne aumentiamo il numero, non vi è alcun incremento della banda-passante) più canali di input/output potrebbero fare la differenza.
  • Threads multipli di controllo: una-cosa-alla volta per un linguaggio di tipo imperativo forza l'utente ad interagire in questo singolo thread pattern; al contrario, se si incorre in un numero multiplo di device di I/O, la programmazione in Pascal potrebbe non consentire interleaved tasks (una programmazione multipla per i mouse potrebbe essere estremamente ingombrante).
  • Handshaking: questo protocollo- evita che vi sia una perdita del tempo dopo la ricezione/trasmissione dell'errore- è perfezionato spesso con un extra wire, gli errori accadono in una interfaccia quando l'informazione è spedita al computer troppo velocemente (tanto da perdersi!) o viceversa...L'handshaking implica che vi sia la presentazione dell'informazione all'utente (a pieno schermo) mediante una nuova informazione.

    Watchdogs and Oracles

  • Protezione dei dati in modalità Watchdogs: quando accade qualche cosa di strano, Watchdogs interviene, azzera, svuota e svolge altre operazioni di pulizia- fra le interfacce se il watchdogs fosse un umano (o un computer) dovrebbe sorvegliare le anomalie e cercare di ripristinare l'ordine corretto di operazioni- il computer dovrebbe, inoltre, cercare di migliorarsi conservando più informazioni possibili.
  • Oracles: si cerca di indovinare quello che i processi devono svolgere nel tempo, un genere semplice è un default: se l'utente non fa nulla l'oracolo ripeterà questa situazione di attesa (modalità inerziale), se molti utenti cooperano su un compito, l'oracolo attribuirà una serie di informazioni a ciascuno di loro.

    Stile Imperativo

  • Il Pascal, linguaggio a stile imperativo, comporta una lavorazione 'ansiosa': faccio questo ORA, non eseguo altro fino a che non ho svolto i compiti precedentemente assegnati.
    write('What is your age?'); readln(age);
    write('How many children have you?); readln(children);
    if children > 0 then begin write('Tell me the age of ');
    if children > 1 then write('each child')
    else write('your child');
    for i :=1 to children do readln(childage (i));
    end;

    Stile interattivo

  • Precedentemente abbiamo visto che l'ordine dei valori (l'età, il numero di figli, l'età dei figli) era rigidamente richiesto.
  • In una interfaccia interattiva può essere preferibile fare le domande in un ordine diverso, saltellare alcune risposte, fare in modo che l'utente possa dialogare come meglio vuole.
  • L'interazione dovrebbe essere consentita senza limiti spaziali e/o temporali- dando ampie possibilità di scelta all'utente.

    Dialoghi mediante moduli

    What is your age?:
    How many children have you?:
    Age of children:
  • L'utente può muoversi intorno allo schermo, riempire una parte delle caselle; il computer può operare, simultaneamente, inserendo l'informazione legata alla seconda domanda nel momento in cui l'utente abbia riempito, totalmente o parzialmente, la terza linea.

    Laziness

    Un esempio generale di valutazione Lazy (pigra) può essere mostrata mediante la modalità Erathostenes Sieve per la ricerca di numeri primi.
    Dopo la scrittura di tutti i numeri fino all'ultimo prestabilito (20), prossimo scrive il primo numero primo più grande di 1 (2) e si cancellano tutti i suoi multipli (4, 6, 8, 10, 12, 14, 16, 18, 20); in seguito si procede prendendo il numero primo successivo (3) e si cancellano tutti i suoi multipli (9, 15).
  • Work space: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20.
  • Primi: 2 3 5 7 11 13 17 19.
  • Avremo la cancellazione fino al più grande numero primo che vogliamo ottenere- in un tempo limitato- se avessimo eseguito tutta la ricerca fino ad L con un approccio eager (ansioso/vorace) avremmo ottenuto uno alla volta un controllo, per stabilire la 'primarietà' di ciascun numero.

    Eager vs Lazy

  • L'approccio eager: se rilasciamo il valore di L, dobbiamo ricominciare il dialogo (cominciamo dal valore da cancellare per annullare i non-primi).
  • L'approccio lazy: il risultato si ottiene in modo più lento, il primo numero primo è trovato in modo più veloce rispetto al metodo eager ma, in seguito, la ricerca rallenta sempre più- a ciascun passo dobbiamo fare più cose ( ovvero svolgere quelle che avevamo posticipato precedentemente).
  • Le persone preferiscono avere un senso di chiusura e le strategie lazy non lo consentono.

    Implementazione interattiva Lazy

  • Si mostra come sia possibile simulare una valutazione lazy mediante un linguaggio imperativo come il Pascal; l'ordine in cui i parametri vengono valutati da una procedura (FINISHOFF) non è definito; la routine ASK può lavorare in una finestra dello schermo o su una typewriter (lavorazione parallela o seguente alla risposta dell'utente).
  • L'ordine prescelto di risposta sarà indifferente per il programma Pascal, il linguaggio ha un approccio eager, gli argomenti di ASK saranno valutati prima che la procedura FINISHOFF verrà chiamata;
  • Una linguaggio lazy valuta qualche cosa a patto che la abbia.
    procedure finishoff(age, children:integer);
    begin
    if children > 0 then
    begin write('Tell me the age of ');
    if children >1 then write('each child')
    else write('your child');
    for i:=1 to children do readln(childageˇiÒ);
    end
    end;
    ...
    finishoff(ask('What is your age?'),ask('How many children have you?'))

    Paradigma

  • I linguaggi di programmazione fanno alcune assunzioni- che non sono sempre dichiarate (es: l'insieme dei caratteri usati o le scelte della rappresentazione di I/O) tali dettagli appartengono al paradigma del linguaggio di programmazione.
  • Quello che non è affermato- per lo stile di una interfaccia data - è utile se noto a-priori (LISP compie, automaticamente, la gestione della memoria facendo credere, all'utente, di disporre di una memoria di lavoro infinita) ma può essere dannoso se non è noto.

    Programmazione a paradgmi

  • Un programma base-line - che può adempire a qualsiasi comando implementabile dal linguaggio di programmazione - è detto metainterprete per il linguaggio di programmazione.
  • I paradigmi prevedono caratteristiche trasparenti, se una caratteristica non è paradigmatica deve essere programmata.
  • Le interfaccia utente dovrebbero essere trasparenti all'utente stesso: l'utente deve avere le caratteristiche utili che gli servono senza preoccuparsi di come siano state realizzate.

    Macchina di Turing

  • Una Macchina di Turing (TM) può eseguire un programma universale U che può leggere la descrizione di una Macchina di Turing e simularla come un computer su cui viene eseguito un programma che simula una Macchina di Turing (questo concetto ci porta a capire come un computer possa simulare un altro computer).
  • un programma U può essere scritto in un qualsiasi linguaggio (Pascal, Prolog o BASIC), in genere, però, si dovrà decidere della rappresentazione standard I/O e dell'interfaccia utente.

    TM limitata

  • Un programma eseguito dal programma universale eredita alcune proprietà del TM sulla quale è eseguito- se il nastro non è infinito allora la macchina simulata non ha un nastro infinito- la finitezza del nastro è parte della paradigma di una TM simulata.
  • Un compilatore Pascal può tradurre stringhe denotazionali, simboli, ecc.; per rappresentare una sequenze di caratteri battuti: 'house'.
    Il compilatore tradurrà in una sequenza di codici prestampati come caratteri la parola:
    h, o, u, s, e

    Caratteri e rappresentazione

  • Se il compilatore è scritto in Pascal il frammento di codice legato al codice dei caratteri avrebbe la seguente forma:
    if carattere= 'h' then write ('h') else.

  • Il compilatore non ha bisogno di esprimere il codice attuale per 'h' in quanto già ne conosce il codice attuale richiesto (lo sta usando !) da qualcuno che lo aveva precedentemente stabilito e inizializzato.
  • È possibile modificare il compilatore per produrre una 'new line' ogni qualvolta si abbia in input il carattere '@' :
    if carattere= '@' then writeln else.


    Alcuni nozioni sulla conoscenza

  • Non sempre sappiamo definire ciò che conosciamo: è possibile conoscere qualche cosa, sapere che qualcuno altro conosce la stessa cosa ma non si è in grado di esprimerla a parole.
  • Si dovrebbe cercare di capire come il problema di conoscenza esplicita e di sistemi conversazionali possa essere progettato per far uscire fuori la conoscenza personale.

    Paradigmi dichiarativi e imperativi

  • Ciò che si è raggiunto (assegnazioni in Pascal)/in che modo qualche cosa debba essere raggiunta (argomento passeggero)- la maggior parte dei linguaggi di programmazione mescolano queste due paradigmi.
  • La maggior parte delle interfacce sono progettate con stili imperativi- ricevono ordini dall'utente che ne rispettano l'ordine delle istruzioni.
  • Nelle interfacce dichiarative, gli utenti danno mete ed obiettivi, in seguito le interfacce risolvono i problemi.
  • In breve, l'interfaccia progettata con uno stile dichiarativo aiuta l'utente a risolvere il problema senza che sia obbligato ad eseguire una sequenza di istruzioni che svolgeranno il compito; la programmazione imperativa può essere modificata ad una programmazione di stile dichiarativo cercando si simulare lo stesso linguaggio.

    Incorporazione all'interno di una procedura

  • Le modifiche per le interfacce sono costose ed ingombranti; questo è dovuto al significato del procedural embending che l'informazione rilevante è programmata in una procedura in modo tale da non essere, in generale, assoggettabile tanto da essere usata differentemente.
  • Le persone soffrono dello stesso problema ogni qualvolta vogliono ricordare qualche cosa che è stato memorizzato nell' LTM in particolari circostanze e si cerca di rinvenirle in circostanze completamente diverse.
  • La conoscenza, al contrario, è incorporata generalmente per ragioni di economia, velocità, attenzione ed estrazione. Lo stesso accade in programmi che hanno oggetti aventi informazione visuali o fonetiche che, nel tempo, dimenticano la loro conoscenza esplicita su come muovere la lingua/bocca.
  • Diverse persone nascondono alcune conoscenze tanto da non ricordare più quello che si era immagazzinato, in loro aiuto può venire la psicoanalisi.
    In seguito ad un trauma si può perdere momentaneamente la memoria.

    Interazione riflessiva

  • Un sistema conversazionale definisce un linguaggio per il suo utente, perfeziona un paradigma che può differire da un linguaggio di programmazione del progettista dell'interfaccia.
  • Un programmatore, che utilizza il linguaggio Pascal, ha alcuni elementi aritmetici a disposizione e pezzi del programma di begin/end- l'utente ha un numero piccolo di elementi aritmetici e deve usare comandi corti come ps qs. Questo mostra che il programmatore e l'utente 'dialogano' con diversi linguaggi.
  • Se il linguaggio a paradigmi viene scelto per l'implementazione di una interfaccia utente, allora questa interazione riflessiva incoraggia il programmatore a pensare alla stesso livello dell'utente.

    Esempi

  • in Smalltalk, un linguaggio di programmazione basato ad oggetti (finestre e menu sono oggetti), la modifica di oggetti ha un effetto equivalente sulle finestre e menu con cui interagirà l'utente: disegnatore/programmatore ed utente interagiranno a un livello simile
    Dovremmo guardare in:
    1. foglio elettronico usa un linguaggio matrix-based simile all'APL;
    2. sistemi competenti incoraggiano l'utente a seguire rule-based sui comportamenti/tipi;
    3. sistemi funzionali pigri spingono l'utente ad essere pigro e funzionale.

    Tesi Church-Turing

  • Se ignoriamo dettagli di velocità, peso, tempo e limitazioni del materiale, tutte le nozioni di calcolo sono equivalenti- tutti i tentativi di definire la calcolabilità è equivalente ad una Macchina di Turing- gli utenti non sono più potenti di TMs se fossero più potenti non ci sarebbe bisogno dei computer !!
  • L'area della memoria individua grandi differenze tra uomini e macchine; le persone difficilmente dimenticano, mentre i computer possono annullare totalmente i dati dalla loro memoria

    Il concetto di rottura

    Quando una macchina non lavora correttamente, è molto difficile per l'utente capire quale sia la causa se il problema appare a un livello diverso da quello con il quale interagisce, le conseguenze di tale fallimento possono apparire illogiche, remote, ecc., è importante che la correzione degli errori possa essere eseguito al giusto livello.Quattro strati tipici sono usati per scoprire e fissare i fallimenti:
  • un strato dell'astrazione
  • un strato del istanzazioni
  • un strato della macchina virtuale
  • un strato dell'interfaccia
  • Un strato dell'estrazione difende tutti gli strati sottostanti- sappiamo quello che fa ma non come lo fa- le astrazioni nascondono informazioni.
  • Un istanzazione- l'inverso di estrazione- un programma Pascal è una rappresentazione della TM.
  • Una macchina virtuale- ciascuno strato forma una macchina virtuale per creare uno scudo della sua rappresentazione sottostante.
  • Un'interfaccia dipende da dove c'interessiamo a compiere il lavoro, possiamo volere che la macchina posto sotto faccia alcuni lavori che in altri tempi vogliamo che siano svolti dalla macchina virtuale: in questo caso agisce come un'interfaccia tra livello presente e quello posto sotto.
  • Lo schermo e la tastiera non aiutano l'utente direttamente per dargli accesso alla macchina virtuale (come si potrebbe volere quansi si lavora con un word processor o in altri casi che potrà essere il sistema di conduzione, l'utente cambierà il livello a seconda delle sue necessità.
    In Word 7: l'astrazione: il foglio; l'istanzazione: linguaggio in cui è stato programmato;Virtual machine: la possibilità di personalizzare alcuni parametri da parte dell'utente (font,color,ecc.)

    La computabilità

  • Non esiste alcun analizzatore che determinerà se qualche algoritmo si arresterà per un dato input.
    Problema dell'HALT
  • Non esiste alcun analizzatore che determinerà se tutti programmi (o classi di programmi) sono facili da usare.
    Riformulazione del problema dell'HALT
  • Un programma è detto essere non-computable o indicibile se è impossibile concepire regole per una TM (o un programma in Pascal) che devono essere eseguite, in ordine, per risolverlo.
  • Un problema computabile è un problema che si potrebbe scrivere con un numero limitato di regole.
  • TMs non fa mai alcun errore.
  • La computabilità può essere rapportata anche all'interfaccia utente: un utente vuole che la sua interfaccia risolva problemi impossibili, alcuni difetti verrebbero fino alla superficie e, in fine, leggeremmo sullo schermo il messaggio seguente: "stack overflow".

    Decidibilità dell'usabilità

  • Le regole che interagivano con un'interfaccia formano un programma computabile ? Se sì l'interfaccia è usabile, bottom (indecidibile) altrimenti.
  • L'usabilità è indecidibile: può un utente termina una sessione con una interfaccia Turing Completa (es: word processor) che sappiamo non si può arrestare mai, perciò non possiamo decidere sull' usabilità per un umano-computer in quanto non possiamo decidere della sua terminazione.
  • Non possiamo dire se l'utente potrà arrestare il computer. In ogni caso, se non ne fosse in grado, il sistema risulterà essere certamente ostile.
    In breve: non è possibile stabilire se un programma terminerà o meno; cosí non è possibile stabilire l'usabilità del programma stesso.

    [Precedente] [Home Page] [Successivo]