Il primo computer fu meccanico, la prima programmatrice ... fu una donna!


Mi ha un po sorpreso ricordare che il primo computer fu meccanico e non elettrico.

Blaise Pascal a 19 anni inventò e costruì una macchina meccanica che calcolava somme e sottrazioni. Era il 1642.
In suo onore fu dato il suo nome al linguaggio di programmazione.

Qualche anno più tardi W.B. Leibniz inventò e costruì una macchina meccanica che faceva anche moltiplicazioni e divisioni . Oltre a inventare il calcolo binario e preparae basi utili alla realizzazione della macchina di Touring.

Solo 150 anni più tardi Charles Babbage costrui un macchina in grado di risolvere equazioni polinomiali e progettò una macchina meccanica programmabile dotata di memoria e lettore di schede perforate. Nel 1991 il suo progetto è stato totalmente realizzato a conferma della sua intuizione.  Tra le altre cose è stato il padre della ricerca operativa e prefigurò il concetto di intelligenza artificiale.

Notizie dei primi calcolatori meccanici si ritrovano anche ne L'accadeimia dei sogni di Wiliam Gibson , il Curta , calcolatore meccanico usato nei Rally sino agli anni '80.

La prima programmatrice fu una donna ed era il 1833 - ce ne fossero di più oggi le sw-house sarebbero luoghi più allegri :D - Ada Augusta Lovelace programmò la analytical engine di Baddage . Anche in suo onore il suo nome fu dato al linguaggio di programmazione.   E Rosalba Fiore questo lo sa bene :)

 

 

Progettazione di applicazione multi-threading 3°

 

          La successiva scelta di progettazione da fare è su     la metafora in base alla quale impostare il modello di programmazione      per la gestione della concorrenza.

Sono due le metafore più comuni, la prima è          il modello a sincronizzazione           in cui due (e più) istanze su due differenti thread si scambiano messaggi per coordinarsi nel fare i compiti/operazioni/calcoli necessari all'applicazione. Mentre l'altra è          il modello a competizione          in cui due (e più) istanze su due differenti thread competono per usare in modo esclusivo un'istanza che è in esecuzione su entrambi i thread (*).




  • Il modello a sincronizzazione

    è detto anche   
    produttore-consumatore   perchè come in una catena di montaggio una istanza in un thread "consuma" i risultati "prodotti" dall'istanza in esecuzione sull'altro thread.
    Un esempio è un programma di masterizzazione in cui una istanza su di un thread legge i dati dal lettore CD e una su un altro thread li salva sul masterizzatore. Un'istanza nel thread di "scrittura" manda un messaggio di send e resta in attesa di avere dati da salvare, l'istanza nel thread di lettura risponde con un buffer di dati e poi prosegue a leggere.





  • Il modello a competizione

    è detto anche   
    a variabili condivise   su cui istanze che girano su thread differenti ci  leggono e scrivono e vogliono farlo in modo esclusivo per leggere in modo consitente lo stato delle variabili e modificarlo in modo consistente. 
    Ad esempio una applicazione Web di registrazione ordini che serve diversi client su thread diversi ogniuno dei quali accede in modo esclusivo ai dati di magazzino per acaparrarsi in modo esclusivo la disponibilità di un articolo.




Il modello a sincronizzazione      è adatto ad applicazioni in cui ...    è naturale modellare il compito che l'applicazione svolge con una combinazione di coppie produttore-consumatore. Una modellazione a work-flow.
Tipicamente il numero di thread è fisso e il compito di ogni thread è noto a priori.

il modello a sincronizzazione         è adatto ad applicazioni in cui ...       è naturale modellare le risorse/variabili/istanze che saranno accessibili e condivise tra più thread.
Tipicamente le istanze condivise tra thread diversi sono fisse e note a priori e spesso lo è anche il compito dei thread mentre il loro numero può cambiare dinamicamente a run-time (ad esempio a seconda del numero di client serviti).

 

(*) Queste metafore interessano per il disegno della applicazione. Il fatto che ci sono primitive di programmazione della concorrenza che adottano queste metafore (lo scambio di messaggi send/receive con rendezvous e le sezioi critiche) confonde un pò.

Tags :  Progettazione Software 


Intelligenza collettiva, altre definizioni 3°

 

Concludo la terna con degli esempi di varie forme di inteligenza collettiva: political parties, military units, trade unions, and corporations:

__Queste 3 nuvole le trovo molto evocative

Coordinazione ... immagino una figura di nuoto sincronizzato
     Cooperazione ... immagino
una touche del rugby, i piloni alzano il saltatore durante una touche
           Cognition~Conoscenza ... immagino le conquiste appena consolidate e la nascita di nuove idee per il futuro durante una retrospective

Fonte: http://en.wikipedia.org/wiki/Collective_intelligence 

Tags :   |  |  |  |  |  |  |

Progettazione di applicazione multi-threading 2°


 L a progettazione comincia con la scelta di un modello di programmazione della applicazione multi-threading da queste 2 cose:

  • In che modo il disegno renderà riconoscibili gli oggetti che vengono eseguiti su/attraversati da più thread e avranno bisogno di una gestione della concorrenza?

    Una nota tecnica utile, la gestione della concorrenza serve quando thread diversi scrivono sullo stesso  field della classe oppure uno ci scrive e un altro ci legge. Queste sono chiamate le condizioni di Bernstein [1]


  • Quale politica di gestione dello stallo verrà seguita e come il disegno la renderà evidente e aiuterà ad applicarla in modo consistente in tutta la applicazione ?

    La condizione di stallo è quando un thread per proseguire la sua elaborazione ha bisogno di allocare (mettere un lock) a un field di classe che però già allocato a sua volta da un secondo thread ... che è fermo ad aspettare un'altra risorsa allocata dal primo. [2]

    Si sceglierà una tecnica di prevenzione del deadlock (ad esempio allocando contemporaneamente tutti i lock necessari a una elaborazione oppure acquisendo lock sempre seguendo uno stesso ordine) o una tecnica di riconoscimento del deadlock in corso e limpiego di provvedimenti per uscirne (tipo il rollback di uno dei thread in deadlock).

    Oppure nel caoso specifico sarà possibile adottare  una strutturazione degli oggetti tali da evitare del tutto necessità di wait/lock e quindi lo stesso deadlock [3]

 
[1] A.J. Bernstein, "Program Analysis for Parallel Processing" IEEE Trans. on Electronic Computers, EC-15, October 1966
[2] Richard C. Holt: Some Deadlock Properties of Computer Systems. ACM Comput. Surv. Vol.4 Num.3, Sett 1972
[3]  Maurice Herlihy, "Wait-free synchronization" ACM TOPLAS Vol.13 Num.1, Genn 1991

Tags :   |

Alan Turing sulle ... Congetture

Una citazione di Alan Turing del 1950

«

L'opinione popolare che gli scienziati procedano inesorabilmente da un fatto ben stabilito a un altro fatto ben stabilito, senza che intervenga mai l'influenza di una congettura non ancora provata, è del tutto errata.

Purché venga chiaramente messo in evidenza quali sono i fatti provati e quali siano le congetture, non può risultare alcun danno.

Le congetture sono di importanza fondamentale , dato che suggeriscono utili linee di ricerca.

»

Tags :   |  |  |