  Coffee Making
  Fotis Georgatos < gef@ceid.upatras.gr>
  V1.0  2004-08-29

  Uno dei pi memorabili commenti mai fatti sul software  se questo o
  quel pezzo di codice possa fare il caff. Il caff  un bene del mondo
  secondo solo al petrolio. Linux FA il caff; ed  anche buono!
  Traduzione fino al 1998 a cura di Christopher R. Gabriel, dopo il 1998
  a cura di Claudio Cattazzo, claudio(at)pluto.it, e Giuseppe Briotti,
  g.briotti(at)mclink.it.
  ______________________________________________________________________

  Indice Generale


  1. Introduzione
     1.1 Copyright
     1.2 Disclaimer
     1.3 Versione
     1.4 Traduzioni
     1.5 Ringraziamenti
     1.6 Cosa bevi o fumi mentre scrivi questo documento?
     1.7 Commenti

  2. Menu
     2.1 Alla francese
     2.2 Nescaf
     2.3 Frapp
     2.4 Freddo
     2.5 Espresso
     2.6 Cappuccino

  3. Hardware
     3.1 Pilotare la tensione 0-5V dal computer
     3.2 Controllo tramite rel
     3.3 Controllo con un TRIAC #1
     3.4 Controllo con un TRIAC #2

  4. Software
     4.1 Programmazione
     4.2 Driver di periferica
     4.3 Connessione via Internet

  5. Costruire la Macchina di Turing da Caff
     5.1 Un linguaggio assembly adatto
     5.2 Hardware ed interfacciamento
     5.3 Software
     5.4 Una criticit minore della Macchina di Turing

  6. Sintomi da overdose
  7. Espansioni
  8. Maggiori informazioni


  ______________________________________________________________________

  [1m1.  Introduzione[0m

  Per lungo tempo l'umanit si  chiesta come un computer potesse fare
  il caff...

  Le persone hanno bisogno di caff per svegliarsi e restare sveglie per
  lungo tempo di fronte al computer. Tutti sanno che per programmare 
  meglio la notte!


  Il trucco principale  interfacciare la macchina da caff con il
  computer, in modo da poterla controllare via software. Questo HOWTO
  mostrer come farlo.

  Prima, descrive un interruttore ACCESO/SPENTO implementato come un
  circuito che controlla l'alimentazione della macchina da caff. Un
  altro capitolo spiegher i segreti della costruzione di macchine di
  Turing da caff, affidabili e intelligenti!

  Questo HOWTO  stato scritto inizialmente come parte di un dibattito
  nella mailing list linux-greek-users sul fatto che linux potesse o
  meno fare il caff.  divenuto poi un articolo sul nostro magazine
  online chiamato magaz. Nel caso ve lo chiediate, magaz  in greco e
  sicuramente vi apparir cos!

  Buon divertimento.


  [1m1.1.  Copyright[0m

  Copyright  2004-08-29 by Fotis Georgatos.  You are free:

    to copy, distribute, display, and perform the work

    to make derivative works

    to make commercial use of the work Under the following conditions:
     Attribution. You must give the original author credit.  Share
     Alike. If you alter, transform, or build upon this work, you may
     distribute the resulting work only under a license identical to
     this one.

    For any reuse or distribution, you must make clear to others the
     license terms of this work.

    Any of these conditions can be waived if you get permission from
     the author.


  [1m1.2.  Disclaimer[0m

  Si usino le informazioni presenti in questo documento a proprio
  rischio.  Rinnego ogni potenziale responsabilit per i contenuti di
  questo documento.  L'utilizzo di concetti, esempi e/o altro contenuto
  di questo documento  interamente a proprio rischio.

  Tutti i copyright sono dei rispettivi possessori, a meno che non sia
  specificato diversamente. L'uso di un termine in questo documento non
  dovrebbe interessare la validit dei marchi.

  Il fatto di nominare un particolare prodotto o marca non dovrebbe
  venire visto come promozione.

  Si consiglia fortemente di fare un backup del proprio sistema prima di
  installazioni di grande entit e di effettuare backup ad intervalli
  regolari.

  [1m1.3.  Versione[0m

  Il Coffee HOWTO ora  chiamato Coffee Making HOWTO e si avvicina alla
  release v1.0, che apparir in prima edizione da qualche parte qui:

  http://fotis.home.cern.ch/fotis/Coffee.html.

   tempo per ognuno di sapere che fare il caff  solo una delle
  funzionalit standard presenti gratuitamente in *ogni* distribuzione
  Linux. O SCO ha un brevetto anche su quello?


  [1m1.4.  Traduzioni[0m

  Si dovrebbe essere in grado di trovare facilmente una traduzione di
  questa versione o delle precedenti del Coffee Making HOWTO nelle
  seguenti lingue:

    Cinese

    Giapponese

    Russo

    Indonesiano

    Italiano

    Polacco

     e si spera molte altre... (nessuno spagnolo o portoghese?)


  [1m1.5.  Ringraziamenti[0m


    Etiopia: identificata come il paese di origine del caff.

    Il caff  popolare nel Medio Oriente da secoli, finch un fallito
     assedio dei Turchi alla citt di Vienna nel 1683 si lasci dietro
     sacchi pieni di strani chicchi marroni che nessuno voleva:
     http://www.vienna.cc/ekaffeeh.htm/.

    Kostas Lialiambis  quello che os dire che non era in grado di
     fare il caff con il suo sistema Linux, ancora nel 1997.

    Panagiotis Vrionis per avermi fornito note interessanti ed
     umoristiche ed aver avviato tutto nei primi tempi.

    NUMEROSE persone in internet con aggiunte ed osservazioni. Grazie a
     tutti, veramente! Anche se posso non aver risposto alle vostre
     email!


  [1m1.6.  Cosa bevi o fumi mentre scrivi questo documento?[0m


  Per quanto mi risulta, questo  un lavoro svolto senza uso di doping.

  Ma posso dirvi il segreto della musica suonata in sottofondo: quasi
  tutte le canzoni di Zampetas o Mpithikotsis (bouzouki greco e affini).



  [1m1.7.  Commenti[0m


  Per i commenti online sulla propria macchina da caff rivolgersi a
  http://coffee.sf.net/.


  Se avete ancora commenti da fare, le email in questi giorni vanno
  perse, quindi perch non inviarmi semplicemente una cartolina con una
  immagine della vostra magnifica citt, aggiungendo una raccomandazione
  per il caff preferito dalle vostre parti?
       Fotis Georgatos,
       Aliartou 32,
       TK 11142 Athens,
       GREECE



  PS.

    I vostri suggerimenti non andranno pers, in questi giorni tendo a
     viaggiare parecchio in giro per il mondo e potrei essere da voi
     prima che ve ne rendiate conto.

    Certo, sono stato ad Amsterdam ed ho anche vissuto l per tre anni;
     i coffee shop generalmente non riguardano il caff!

    Sorpresa: al momento preferisco la cioccolata o il t al caff. ;-)


  [1m2.  Menu[0m



  [1m2.1.  Alla francese[0m

  Caff molto popolare tra i programmatori perch non necessita di molta
  cura e la sua cottura  ridotta all'essenziale; come il software
  commerciale.  Il suo gusto stimolante ha ispirato migliaia di
  programmatori nella scrittura di software incredibile, scritto nelle
  primissime ore del giorno. Windows per esempio  stato scritto alle 5
  esatte del mattino, solo grazie al caff! Un risultato simole 
  garantito.


  [1m2.2.  Nescaf[0m

  Nescaf  un caff piuttosto forte, fatto mescolando acqua calda con
  una mistura di caff, zucchero e un po' d'acqua. Solitamente si
  versano un cucchiaio di caff e uno di zucchero, con pochissima acqua
  per miscelarli.  Nel frattempo l'acqua dovrebbe bollire. Non appena
  l'acqua  calda a sufficienza, mescolare tutto assieme e
  preferibilmente aggiungere latte condensato. Sebbene si possa usare
  qualcosa di pi semplice di una macchina da caff per scaldare
  l'acqua, l'ho visto fare cos molte volte...


  [1m2.3.  Frapp[0m

  Una popolare variante del caff appena menzionato. In realt non 
  necessaria una macchina da caff, ma un congelatore per avere acqua
  fredda e cubetti di ghiaccio.  molto popolare nel sud-est dell'Europa
  durante i caldi mesi estivi.


  [1m2.4.  Freddo[0m

  Questo  complicato, si leggano le Coffee FAQ (si vedano i
  riferimenti).



  [1m2.5.  Espresso[0m

  L'espresso  un tipo di caff italiano molto forte. Lo si serve in
  piccole tazze (Perch? Si veda il capitolo "Sintomi da overdose") con
  una o due zollette di zucchero. Per produrre un buon espresso c'
  bisogno di grani di caff appena macinati, acqua, zollette di zucchero
  e una macchina speciale. Queste macchine fanno bollire l'acqua e
  spingono il vapore bollente attraverso i grani di caff macinati. Si
  pu comprare una macchina super-mega-automatica con un bel po' di
  denaro. Ma si pu usare anche una macchina a basso prezzo.


  Ok, iniziamo. Riempire d'acqua la propria macchina. Lasciarla
  diventare calda. Nel frattempo, riempire con circa un cucchiaio da t
  di polvere di caff il porta filtro della propria macchina. Pressare
  la polvere di caff.  Non troppo. Ora l'acqua  alla giusta
  temperatura. Fissare il porta filtro alla macchina e lasciarla
  lavorare. Dopo circa 30 secondi si pu servire un delicato, caldo
  espresso.  eccellente dopo un buon pasto. Ci si sente bene e si pu
  programmare per qualche ora in pi.


  [1m2.6.  Cappuccino[0m

  (Si veda anche il capitolo "Espresso") Se si possiede una macchina pi
  professionale, la si pu usare per montare il latte. C' bisogno di
  questa funzionalit per fare una variante morbida del caff.  facile
  da preparare.  Mettere del latte montato in una tazza da caff e
  riempirla con l'espresso.  Decorarla poi con qualche fiocco di
  cioccolata. Tutto qua.


  [1m3.  Hardware[0m

  Un diagramma generale potrebbe essere come questo:



       ---------   0-5V  ----------  ~220V   -------------------
       |  PC   |====>====|Circuito|==========|Macchina da caff|
       ---------         ----------          -------------------



  Il concetto  quello di prendere una tensione di controllo dal
  computer, che guida un circuito elettrico isolato con un Rel o un
  Triac.


  Si deve scegliere un circuito a Rel se si ha una macchina da caff
  superiore ai 200W. Se ne pu usare uno basato su Triac se la propria
  macchina non  ad alta potenza.


  Tutti i circuiti presentati sono stati sperimentati, ma i risultati e
  i rischi sono di VOSTRA RESPONSABILIT. Se non si ha esperienza con
  l'elettronica, NON SI DEVE cercare di farsela basandosi su questi
  circuiti, altrimenti se ne pu ottenere una pessima...


  Si deve stare molto attenti mentre si sperimenta con i 220V e si
  consiglia caldamente di usare un fusibile giusto.

  [1m3.1.  Pilotare la tensione 0-5V dal computer[0m

  Ecco un semplice esempio di come ottenere una tensione 0-5V dalla
  porta parallela del computer.



             Vista posteriore   -----    Pin 10 - ACK
             Connettore DB-25   |   |    Pin  9 - D7
             Maschio            |   |                           Pin 2 - D0
                                v   v                           v   Pin 1 -
       ~Strobe
              ____________________________________________________________
             /                                                            \
             \     13  12  11  10   9   8   7   6   5   4   3   2   1     /
              \                                                          /
               \     25  24  23  22  21  20  19  18  17  16  15  14     /
                \______________________________________________________/



  Pin 1  lo Strobe (logica inversa).

  Pin 2-9 sono i segnali del BUS DATI, esattamente quello che  stato
  scritto nei latch della porta parallela con un comando OUTB.

  Pin 10  il segnale di acknowledge (ACK), controllato da voi, in modo
  da poter produrre un interrupt nella CPU.

  Pin 18-25 sono corto-circuitati e rappresentano la massa (GND).

  In dettaglio:



       <= in   DB25    Cent    Nome del        Reg
       => out  pin     pin     Segnale         Bit     Note sulla funzione
       ------  ----    ----    --------        ---     -----------------------------
       =>       1       1      -Strobe         C0-     Imposta l'impulso basso >0.5uS per permettere la scrittura
       =>       2       2      Data 0          D0      Imposta il dato meno significativo
       =>       3       3      Data 1          D1      ...
       =>       4       4      Data 2          D2      ...
       =>       5       5      Data 3          D3      ...
       =>       6       6      Data 4          D4      ...
       =>       7       7      Data 5          D5      ...
       =>       8       8      Data 6          D6      ...
       =>       9       9      Data 7          D7      Imposta il dato pi significativo
       <=      10      10      -Ack            S6+ IRQ Impulso basso ~ 5uS per conferma ricezione
       <=      11      11      +Busy           S7-     Alto per Occupato/Spento/Errore
       <=      12      12      +PaperEnd       S5+     Alto per fine carta
       <=      13      13      +SelectIn       S4+     Alto per stampante selezionata
       =>      14      14      -AutoFd         C1-     Imposta basso per autoavanzamento di una riga
       <=      15      32      -Error          S3+     Basso per Errore/Spento/Fine carta
       =>      16      31      -Init           C2+     Imposta l'impulso basso > 50uS per inizializzare
       =>      17      36      -Select         C3-     Imposta basso per selezionare la stampante
       ==      18-25   19-30,  Ground



  [1m3.2.  Controllo tramite rel[0m

  Il circuito pi semplice che si possa costruire :



                                      Vcc
                                       |
                                       +------+
                                       |    __|__
                                   Rel con  /^\  Diodo 1N4002
                                     bobina /---\
                                       |      |
                                       +------+
                                       |
                                    | /
                          4.7K    B |/  C
       porta parallela >-\/\/\/\/---|        Transistor NPN: BC547A o 2N2222A
       pin di dati                  |\  E
                                    | \
                                       V
                                      |
       porta parallela >--------------+
       pin di massa                   |
                                   Massa



  Si colleghi Vcc alla stessa tensione del tipo di rel (solitamente 5 o
  12V). Ovviamente le specifiche del rel devono essere adatte alla
  propria macchina da caff.


  I baristi hanno la tendenza a mettere il rel DOPO il transistor, al
  pin emettitore (E) invece che al collettore (C).  una cattiva
  abitudine perch influenza malamente il transistor e pu risultarne un
  pessimo caff :-). Il diodo 1N4002  utile per proteggere il
  transistor dalla corrente del rel.  Se non lo si utilizza, il
  transistor diventer ben presto scuro e puzzolente...


  [1m3.3.  Controllo con un TRIAC #1[0m

  Se si desidera un circuito semplice si pu usare il driver triac
  MOC301[012] della Motorola, assieme ad un TRIAC multi-funzione come
  l'SC141D. Questo metodo ha il vantaggio che non necessita di
  alimentazione supplementare.


  Per un carico non induttivo si usi questa circuiteria:



               270     1 +-------+ 6    180
         +5v -VAVAVA-----+       +----VAVAVA-----+-------------- Linea carica
                       2 |  MOC  |               |
         TTL in ---------+ 3012  +nc            VA  SC141D
                         |       | 4           / |
                       nc+       +------------/  |
                         +-------+               +----\/\/\/---- Linea non carica
                                                      CARICO


  Se si sta lavorando con 220V si cerchi di ottenere un 3021. Carichi
  induttivi dovrebbero essere utilizzati assieme a dei condensatori di
  bypass, meglio consultare la [4mMotorola[24m [4mApplication[24m [4mNote[24m [4mAN-780[24m. Le
  macchine da caff sono per lo pi carichi resistivi e non induttivi
  (come un motore), ma chiss come  la vostra?


  [1m3.4.  Controllo con un TRIAC #2[0m



       +5VDC
       |    180                      180            2.2k
       +---/\/\/\----+-----+   +----/\/\/-+--/\/\/\---+-------> 120V
                     |    1|   |6         |           |         Carico
                     |    +=====+         |           | MT1
                     |    | MC  | Driver  |          +-+
                     |    | 3032| TRIAC   |        G | | TRIAC
                     |    +=====+         |         /| |
                     \    2|   |4         |        / +-+
              2N3904  |----+   |          |        |  | MT2
                     /     |   +--------- | -------+  |
                    V      \              |        |  |
                    |      /              |        \  |
                    |      \ 43    .01u  ---   10k /  |
                    |      /       500V  ---       \  |
                    |      |              |        /  |
                    +------+              |        |  |            Non carico
                    |                     +--------+--+---o    o--> 120V
                    /                                     carico
        >-/\/\--|  2N3904
                    \
                     V
                     |
                    ---
                   ///

       Il progetto  per 120V. Si dovrebbero cambiare le resistenze in funzione dei
       220V.



  Descrizione del circuito:


  L'MC3032  un driver TRIAC optoisolatore. La resistenza da 180 Ohm
  imposta la corrente per il LED dentro l'optoisolatore. Si cambi il
  valore di questa resistenza, se necessario, per ottenere una corrente
  accettabile (es.  15 mA).


  Si noti che non si pu controllare questo circuito senza un carico. Il
  TRIAC non cambier a meno che non sia connesso ad una sorgente di
  tensione AC, quindi non lo si pu controllare per un semplice
  interruttore senza applicare AC e un carico. Si noti la valutazione di
  500V sul condensatore da .01.


  [1m4.  Software[0m



  [1m4.1.  Programmazione[0m

  Si dovr creare un eseguibile che far i seguenti passi:

    Ottenere i permessi per usare lo spazio degli indirizzi di I/O,
     chiamando il kernel, con la chiamata [1mioperm[22m: es. [4mioperm(BASE,[0m
     [4mintervallo,[24m [4m1);[0m

    Eseguire un'istruzione di richiesta in uscita per impostare la
     tensione 0.5V sulla porta parallela, es. [4moutb(1,[24m [4mBASE);[0m

    Attendere il tempo necessario alla preparazione del caff. Sarebbe
     bello se questo tempo fosse mostrato nella riga di comando.

    Quindi dovr spegnere la macchina del caff: [4moutb(0,[24m [4mBASE)[24m;

    Prima di terminare deve restituire la porta parallela con un
     [4mioperm(BASE,[24m [4mintervallo,[24m [4m0);[0m

  Si cambi BASE = 0x3bc per /dev/lp0, 0x378 per /dev/lp1 e 0x278 per
  /dev/lp2; intervallo = 8.

  Sarebbe utile avere questo programma setuid in modo che tutti possano
  bere il caff! BOFH!


  [1m4.2.  Driver di periferica[0m

  Basta leggere la kernel hacker's guide per implementare un driver di
  periferica; lo si potrebbe anche fare in user space. Per favore lo si
  compili come modulo, in modo che non si debba compilare il kernel ad
  ogni aggiornamento. Quindi si scriva:


  echo cappuccino > /dev/coffee



  E si avr una calda tazza di caff in pochi minuti! Ci si ricordi di
  assegnare i giusti permessi a /dev/coffee, a seconda che solo root
  possa farsi il caff o meno.


  Il vantaggio di questo metodo  che supporta il feedback dalla
  macchina da caff utilizzando l'ACK della porta parallela, quindi
  macchine da caff intelligenti potrebbero produrre un interrupt quando
  sono pronte.


  Lo si faccia da soli, dopo aver letto l'eccellente libro di Alessandro
  Rubini e Jonathan Corbet Linux Device Drivers e studiato il repository
  del codice sorgente di Cross Reference Linux.


  [1m4.3.  Connessione via Internet[0m

  Se si  implementato il programma di controllo in C (si veda sopra),
  si deve soltanto scrivere uno script CGI che accende e spegne la
  macchina da caff o che passi attraverso istruzioni pi complesse. Si
  dovrebbero scrivere alcune pagine web carine, dove si spiega come fare
  il caff, e metterle su un server web [1mApache[22m...


  ...la tecnologia LAMP (Linux, Apache, MySQL, [Perl|Python|PHP]), vi
  aiuter a costruire un sistema per il caff completamente
  configurabile!

  In futuro, quando le applicazioni tenderanno a divenire pi complesse,
  potrete volerle estendere sulla base della programmazione Flow-Based:
  http://www.jpaulmorrison.com/fbp/.  Che accoppiata per una grande
  macchina da caff!


  [1m5.  Costruire la Macchina di Turing da Caff[0m


  Vi struggete in memoria dei bei vecchi tempi, quando gli uomini erano
  uomini e si costruivano da soli la propria macchina da caff?


  Questo capitolo spiega il modo di assemblare una autentica,
  intelligente, macchina da caff. Sar un computer progettato con
  architettura di von Neumann, comprensivo di una CPU, ROM/RAM, I/O e
  sar anche adatto ad impieghi pi generici, una cosiddetta Macchina
  Universale di Turing.


  [1m5.1.  Un linguaggio assembly adatto[0m


  Contrariamente ad altri complessi ma popolari sistemi quali CISC o
  RISC, la nostra macchina sar semplicemente MISC: Mono-Instruction Set
  Computer!


  Il nostro processore comprender soltanto un comando, ma
  ciononostante, con memoria e tempo sufficiente, sar in grado di
  eseguire qualunque azione che possa essere compiuta dal vostro Pentium
  IV 3GHz, o simularla completamente.  Pu risolvere un qualunque
  problema computabile eseguendo del semplice codice come questo:



       SBN     $mem1, $addr1
       SBN     $mem2, $addr2
       SBN     $mem3, $addr3
       SBN     $mem4, $addr4
       SBN     $mem5, $addr5
       SBN     $mem6, $addr6
       [...]



  Il comando magico  chiamato SBN $mem, $addr (Subtract and Branch if
  Negative), che prende il valore dalla cella di memoria $mem, lo
  sottrae all'accumulatore (A  l'unico registro disponibile in questa
  architettura) e lo memorizza nuovamente nell'accumulatore e in memoria
  $mem: [4m[mem][24m [4m<=[24m [4mA[24m [4m<=[24m [4mA-[mem][24m. Se e solo se il risultato  negativo,
  salta all'indirizzo specificato da $addr. Se $addr punta al comando
  successivo, non vi  alcun salto condizionato. Ora, con questo comando
  a disposizione,  possibile sottrarre, sommare, azzerare gli indirizzi
  di memoria, spostare byte, moltiplicare, comparare e cos via. Cosa
  migliore di tutte, ci si pu costruire facilmente un compilatore
  ottimizzato.


  Voila. Questo  un grande sistema per qualunque problema di Turing
  Completo, inoltre,  sicuramente pi facile da programmare della
  Macchina di Turing originale!


  [1m5.2.  Hardware ed interfacciamento[0m


  La gran cosa di questo innovativo processore MISC  che si ha bisogno
  di 0 bit per memorizzare l'opcode dei comandi. Questo rende la CPU
  molto, molto pi semplice: si ha bisogno di leggere solo una coppia di
  operandi ogni volta.  Si potrebbe voler estendere le possibilit del
  processore estendendo l'istruzione SBN a 3 o 4 operandi, cos sarebbe
  in grado di caricare e memorizzare i dati dalla memoria principale.
  Questo  un esercizio lasciato al lettore; onore a google.

  Il diagramma della CPU risulter come segue:



       <========= ADDRESS BUS ==============>
               =                =
               =  +---------+   =
               =  | CONTROL |   =
          +---------+  +-----------------+
          | ALU & A |  | Program Counter |
          +---------+  +-----------------+
               =  |  LOGIC  |   =
               =  +---------+   =
               =                =
       <=========== DATA BUS ===============>



  Ora, tutto quello che si deve fare  mettere insieme alcuni chip di
  memoria, ad esempio riciclando una RAM di cache statica da vecchi PC
  386, una ALU e pochi componenti glue. Si pu scegliere tra TTL o CMOS
  per le porte logiche e i latch; io sono un sostenitore di CMOS, ma
  questo dipende in realt dalle proprie preferenze. Si pu costruire un
  sistema ad 8, 16, 32, 64 bit o della dimensione di cui si ha bisogno.
  Nel caso servisse, per word pi lunghe ho trovato preferibile
  costruire l'ALU con EPROM 27128 pre-programmate piuttosto dei chip
  74x181s, pi difficili da trovare. Ci si procuri anche un'unit di
  propagazione del carry.


  La natura monolitica di questo sistema consente solo I/O mappato in
  memoria e richiede di provvedere ad un progetto particolare per
  l'interfacciamento bidirezionale, ma niente di pi particolare di
  quanto gi visto in sistemi di pi vecchia generazione. AGC, il
  computer che ha guidato la missione Apollo 11 sulla Luna,  stato
  realizzato utilizzando questa tecnica, quindi dovrebbe essere
  sufficiente anche per i nostri scopi.


  Si osservi che il bus dei dati deve essere ampio esattamente come il
  bus degli indirizzi; questo implica che la nozione di un byte 
  applicabile solo alle macchine da caff ad 8 bit, il che risula essere
  pi una funzionalit che un baco. Si rester sorpresi da quale caff
  si potr ottenere con un bus a 8 o 16 bit!  davvero un hardware di
  impiego generale.



  [1m5.3.  Software[0m

  Un sistema cos puro si accoppier bene con il linguaggio di
  programmazione FORTH, famoso per il controllo di sistemi embedded. Il
  pi importante prerequisito per fare questo  di avere un meccanismo
  di stack, che in questo caso pu essere realizzato con un contatore
  combinato con un pool di memoria.


  Se si aspira ad una seria piattaforma di sviluppo per il caff, la
  portabilit del C  una scelta obbligatoria. La propria scelta
  potrebbe essere quella di modificare gcc, lcc o sdcc, che con i giusti
  aggiustamenti ai back-end saranno in grado di produrre lo speciale
  codice assembly MISC. Un giorno si potrebbe anche voler riscrivere un
  altro linguaggio come il C; ci si scordi la lettera D,  gi stata
  presa, quindi non si facciano gli stessi errori con il compilatore:
  http://www.gnu.org/software/gcc/projects/beginner.html


  Qualora si stia pensando di scriversi il proprio compilatore, ci si
  documenti prima su flex, yacc e solo un altro po' di teoria. In
  particolare, si apprezzer subito la tassonomia di Noam Chomsky sui
  linguaggi:

    grammatica regolare (formalismi generali per le espressioni
     regolari),

    grammatica libera dal contesto (qualunque linguaggio BNF rientra in
     questa categoria) e cos via. Si legga anche Computability Theory.


  [1m5.4.  Una criticit minore della Macchina di Turing[0m

  A causa di come una Macchina di Turing opera (si guardi a proposito
  http://plato.stanford.edu/entries/turing-machine/),  un dispositivo
  molto complicato da programmare e su cui fare il debug una volta fatto
  tutto.  La ragione  che il suo comportamento  un processo
  sequenziale completamente determinato dai seguenti parametri:

    (1) lo Stato in cui si trova la macchina;

    (2) il Simbolo (o Numero) nella casella che sta analizzando;

    (3) una Tabella di Istruzioni.

  Contemporaneamente, il maggiore svantaggio della Macchina di Turing
  (MT)  che la sua natura sequenziale comporta che pu essere
  efficacemente mappata su di essa solo una particolare classe di
  problemi. Le MT sono adatte per problemi che sono descritti su un
  supporto di immagazzinamento seriale (nastri) e che non fanno utilizzo
  di indici per referenziare i dati. Questo  in contrasto con la
  Macchina da Caff (MC), che pu gestire anche algoritmi ad Accesso
  Casuale (senza perdita di semplicit).

  In aggiunta a questo, le MT costringono ad una notevole e non
  necessaria complessit sul punto (3) con l'idea di mantenere semplici
  i punti (1) e (2).  E qualora non si ritenga che la cos chiamata
  Tabella delle Istruzioni non sia di una complessit schiacciante, mai
  provato a scrivere un compilatore per una Macchina di Turing? Un
  sistema che non sia facilmente programmabile e sia di difficile debug,
  dovrebbe essere considerato un sistema seriamente discutibile, almeno
  per quanto riguarda l'Ingegneria dei Computer. Per esempio, si provi a
  simulare la Macchina da Caff con una Macchina di Turing e viceversa.
  Beh, se ancora si  in disaccordo, mostratemi il codice!


  Ultima annotazione: la Macchina da Caff (MC)  un modello per
  l'architettura di von Neumann molto migliore ed ha una relazione O(1)
  con quella che  la pratica diffusa degli algoritmi pesati
  nell'attuale teoria della complessit.


  [1m6.  Sintomi da overdose[0m


    eccitazione

    nervosismo

    insonnia

    tachicardia o aritmia cardiaca

    inquietudine

    ipersensibilit alla luce

    fastidio rispetto a stimoli sonori

    disturbi gastrointestinali


  [1m7.  Espansioni[0m


    Tutto l'hardware e il software descritti in questo documento
     possono essere espansi fino a supportare tostapane, bistecchiera,
     forno a microonde, ecc.

    Cluster di 8 macchine da caff. Questo permetter di avere del
     caff anche se la prima macchina si spegne. Ovviamente ci sar un
     aumento delle prestazioni.

    Macchine da caff a vettore parallelo saranno una futura release.

    Se si desidera la massima automazione si avr bisogno di pi
     circuiti e sensori, in modo da poter controllare il flusso
     dell'acqua, la temperatura, la quantit di caff, ecc.

    Nel prossimo futuro verranno implementate funzionalit SNMP.

    Macchina da caff seriale a 115Kbps.


  [1m8.  Maggiori informazioni[0m



    http://db.uwaterloo.ca/~alopez-o/Coffee/coffaq.html Questa  la
     [1mCoffee-FAQ [22mpi conosciuta di Internet

    http://faculty.washington.edu/chudler/caff.html Caffeina ed effetti
     sul Sistema Nervoso

    http://www.gardfoods.com/coffee/coffee.coffee.htm Una storia
     completa, anche se informale, dell'interazione dell'uomo con la
     pianta di caff. La gente ha masticato bacche di caff in Africa
     per circa 100.000 anni. Il caff si  sviluppato nello Yemen, dove
     non  nativo (deve essere seminato) nel 525 dC.

    http://www.faqs.org/rfcs/rfc2324.html RFC2324: Hyper Text Coffee
     Pot Control Protocol (HTCPCP/1.0)
    http://www.faqs.org/rfcs/rfc2325.html RFC2325: Definitions of
     Managed Objects for Drip-Type Heated Beverage Hardware Devices
     using SMIv2

    http://www.tldp.org/HOWTO/mini/IO-Port-Programming Programmazione
     della porte di I/O sotto il popolare sistema operativo Linux.

    http://www.ee.washington.edu/circuit_archive/circuits/F_ASCII_Schem_PC.html
     Tantissimi circuiti in ASCII. Alcuni di questi sono per la porta
     parallela.

    http://www.citr.auckland.ac.nz/~james/parport.html Tutto quello che
     avreste voluto sapere sulla porta parallela e non avete mai osato
     chiedere.

    http://en.tldp.org/LDP/khg/HyperNews/get/khg.html Come scrivere i
     propri driver di periferiche. Avanti, fatelo anche voi!

    http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html La
     pagina web di Tomi Engdahl;  *obbligatorio* vederla per chiunque
     si interessi di elettronica.

    http://dir.yahoo.com/Computers_and_Internet/Internet/Devices_Connected_to_the_Internet/Coffee_Machines/
     Macchine da caff online. Sfortunamente non ci sono benchmark.

    http://www.cs.su.oz.au/~bob/Coffee/index.html Questa macchina da
     caff fornisce solo cappuccino. Deve essere aggiornata!

    http://einstein.et.tudelft.nl/~janssen/ Caff caldo dai Paesi
     Bassi.

    http://www.cl.cam.ac.uk/coffee/coffee.html The Trojan Room Coffee
     Machine.

    http://www.menet.umn.edu/coffeecam/ CoffeeCAM.

  L'elenco di link in questo capitolo spesso diventa superato, per
  questo si pu voler utilizzare l'eccellente Way-Back Machine per
  ritrovarli nuovamente: http://www.archive.org/



