Progettazione Software

Definizione della Architettura Software, scelta della infrastruttura tecnologica, Progettazione e Disegno del software, implementazione e idiomi OO seguendo i metodi innovativi dell'informatica moderna e gli standard affermati. Con lo scopo di assolvere ai bisogni del committente e generare valore e nuove opportunità di business.

Geobook geo-aware social network

Cosi come le Social Network tipo Facebook hanno unito in modo inestricabile il mondo virtuale di internet alla nostra vita quotidiana...    ...Similmente la social network Geobook  unisce in tempo reale le persone che incrociamo fisicamente per la strada con la loro presenza sulle social network       Ad esempio mentre siamo ad una conferenza possiamo avviare una applicazione sul nostro iPhone, Android, Blackberry o Windows Mobile e grazie al GPS interno comunicare la nostra posizione a Geobook e scoprire se li ci sono altri colleghi che abbiamo linkato su Linked-In       O mentre siamo facendo i turisti per caso grazie al GPS la...

Posta elettronica consegnata da vere lumache

      E' proprio da questo sito www.boredomresearch.net/rsm/  che prende il titolo il post precedente Ma gli androidi sognano anche lumache elettriche ? Tags :  | Creatività | Innovazione | Progettazione Software |

The end of an era - Windows 3.x

Estratto dall'articolo della BBC: The end of an era - Windows 3.x   Windows 3.x has come to the closing moments of its long life. On 1 November Microsoft stopped issuing licences for the software that made its debut in May 1990 in the US. The various versions of Windows 3.x (including 3.11) released in the early 1990s, were the first of Microsoft's graphical user interfaces to win huge worldwide success. They helped Microsoft establish itself and set the trend for how it makes its revenues, and what drives the company until the present day.  (continua) Tags :  Tools | ...

Ma gli androidi sognano anche lumache elettriche ?

If we can imagine it, there's a good chance it can be programmed Vint Cerf, Internet evangelist on the official Google blog E' chiamato       The Internet of Things       è un mondo, imminente, dove gli oggetti fisici e gli esseri umani insieme a spazi e informazioni virtuali interagiscono tra loro in tempo reale in uno spazio comune. In breve tutto è interconnesso E' la realizzazione del neologismo coniato da Bruce Sterling nel 2004        spime       cioè oggetti che possono identificarsi in base alla propria posizione e al tempo.  Ad esempio possono localizzarsi col GPS e...

Il codice che scrivi parla di te ?

Delle volte mi è capitato di notare delle similitudini almeno strane    Ad esempio tra l'approccio che ha un turista nel girare per una città o un museo e il modo che ha di cercare e scovare informazioni in internet con Google        Tra la costanza che ha una persona nella vita di tutti i giorni , la sua capacità di sopportare e superare la frustrazione e di mantenere     calma e fiducia     anche nelle difficoltà  e la sua capacità di affrontare e risolvere  bene problemi di programmazione impegnativi anche in condizioni difficili    Tra l'efficacia con cui una persona riesce tra...

Disaccoppiamento, inversione delle dipendenze e architetture esagonali

Segnalo questo post che parla del PatternMediator con gli steroidi sino a diventare architettura applicativa: Disaccoppiamento, inversione delle dipendenze e architetture esagonali Tags :  | Agile | Progettazione Software |

Disegno versus Produzione 3/3 conclusioni

       Nel disegno si fanno emergere varie alternative possibili che vengono analizzate e esplorate in un processo iterativo fatto di prove e tentativi che migliorano via via la comprensione del problema e della soluzione sino alla definizione del disegno prescelto (vedi ad esempio Modificare metodi interminabili: strategia).        Il primo passo per l'efficenza è distinguere le (re)iterazioni di disegno che in questo modo generano valore dalle (re)iterazioni di produzione che invece sono un "rework" cioè rifare il lavoro che è uno spreco (l'esempio in questo commento)        Il secondo passo per l'efficenza è riuscire a distinguere anche tra le (re)iterazioni di...

Disegno versus Produzione 2/3

       _P_ er realizzare software le attività di disegno e produzione si combinano insieme. Trovo che sia molto facile confondere quello che è disegno da quello che è produzione e molte sviste sul disegno credo che nascono proprio da questo.    Riporto le distinzioni che ho trovato in questo articolo  POSITIVE VS NEGATIVE ITERATION IN DESIGN, G Ballard che propone dei criteri per distinguere vantaggi e sprechi nel disegno e nella produzione.         Il disegno agisce nel mondo del pensiero e della immaginazione per "creare una ricetta"  (strutturare un sw in namespace, in classi, in livelli, etc.),  la...

Disegno versus Produzione 1/3

       _P_ er realizzare software le attività di disegno e produzione si combinano insieme. Trovo che sia molto facile confondere quello che è disegno da quello che è produzione e molte sviste sul disegno credo che nascono proprio da questo.    Designare una applicazione è simile in un certo senso a fare una buona chiacchierata che lascia tutti con una visione più chiara delle cose.  Ci si confronta su più alternative possibili di design, si prendono le idee migliori da ogni alternativa, si verifica la fattibilità e si fanno stime migliori.    Quando invece è simile a uno scontro, le alternative...

Arte Generativa e software-art

C.STEAM 2008, a Torino la mostra dal 19 al 27 settembre l'intersezione tra design e informatica Tags :  Team Work | Creatività | Innovazione | Progettazione Software |

Hoare sul disegno del software

Tony Hoare è conosciuto per aver inventato l'algoritmo QuickSort e per i suoi contributi alla programmazione concorrente, su molti  libri sono citati i Monitor di Hoare. Sono rimasto sorpreso di scoprire che questo bel pezzo di antiquariato :D - cioè questo arzillo vecchietto - è ancora vivo e vegeto ed è Senior Researcher alla  Microsoft Research in Cambridge Ecco una citazione di Hoare sul del disegno del software There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there...

Codice con le rughe - 3/4 (e resto mancia)

Quand'è che un programmatore considera un codice sorgente "Legacy" ??? Quando e come quel codice è diventato Legacy ??? Visti i link, letti i commenti, l'idea che mi convince sempre di più è questa. Visto che non è una tecnologia superata a rendere un codice Legacy - visto che non è il fatto che il codice non è documentato e nessuno sa più cosa fa come e perché a renderlo Legacy  - visto che non è il tempo che passa e non è l'uso che lo consuma a renderlo Legacy - vista la difficoltà di leggere il codice rispetto la facilità a...

Codice con le rughe - 2/4

Quand'è che un programmatore considera un codice sorgente "Legacy" ??? Quando e come quel codice è diventato Legacy ??? Letti i commenti al post precedente faccio alcune riflessioni:    - L'idea che il codice diventa legacy perchè impiega tecnologie superate funziona poco.  Il codice sorgente di Sw di successo resta in onorato servizio diversi anni dopo la comparsa di nuove tecnologie alternative. Ad esempio Don Box disse 'mscoree is the last COM DLL' - chi fa software in ambiente Enterprise sa invece quanto è ancora indispensabile l'interoperabilità con COM perché il codice in questa tecnologia è ancora presente e vivo.     -...

Codice con le rughe - 1/4

Il software ha due caratteristiche davvero singolari che non ci sono negli oggetti comuni di tutti i giorni e nella maggior parte dei prodotti industriali. William Gibson in Mona Lisa overdrive sembra conoscerle bene, è così che Angie, 3Jane e Continuity realizzano il sogno della Tessier-Ashpool di raggiungere l'immortalità nella matrice. Il software per quanto viene utilizzato (compilato o eseguito) non si usura ne si consuma -  e  - col passare del tempo non invecchia ne deperisce. Allora cos'è che fa diventare il codice sorgente Legacy  ???   quand'è che un programmatore considera un codice sorgente "Legacy" ??? Update E quindi _quando_ e _come_ quel...

Web Service: Mobile Agent + servizi + risorse

Aggiorno e dettaglio un idea che avevo già accennato sulla progettazione di Web Service e di applicazioni che li utilizzano. Un Web Service può fornire un servizio: un risultato finito e fruibile come l'esito della ricerca delle citazioni di un dato articolo tra i libri di una banca dati, o l'invio automatica di un allarme fatto dal sistema di controllo della cella frigo quando la temperatura sale oltre la soglia di congelamento. una risorsa: la copia digitale di un dato in...

Modificare metodi interminabili: strategia

Il modo naturale di procedere per scomporre metodi troppo lunghi?     procedere per tentativi facendo passi in avanti e ogni tanto passe indietro: ad ogni tentativo il disegno originale apparirà più chiariro e cosi il modo di procedere. Ad esempio tovato un grande if o switch si può cominciare a estrarre in metodi i corpi degli if e in funzioni le espressioni condizionali  oppure estrarre insieme nello stesso metodo la condizione insieme al corpo del if. La prima strada può evidenziare corpi di if uguali richiamati in diversi punti del metodo, la seconda può evidenziare if interi ripetuti. Provare aiuta ad avvicinarsi...

Modificare metodi interminabili: quando il tool di Refactoring manca

Quando è necessario modificare un metodo lungo centinaia o migliaia di righe di codice e modificare un comportamento esistente senza l'aiuto di un tool di refactoring conviene   SCOMPORRE IL METODO ABNORME E METTERLO SOTTO TEST   applicando delle tecniche specifiche. Visto che è difficile scrivere dei test sul quel metodo, allora si inserisce il test dentro il metodo. L'idea consiste nel inserire delle variabili di rilevazione nel codice del metodo che "misurano" se si è comportato correttamente e queste variabili vanno a testare le stesse cose che si testerebbero se si potessero scrivere test unitari sul metodo abnorme.  La prima è...

Modificare metodi interminabili: scomporli

Quando è necessario modificare un metodo lungo centinaia o migliaia di righe di codice e modificare un comportamento esistente conviene   SCOMPORRE IL METODO ABNORME E METTERLO SOTTO TEST   con l'aiuto di un tool di refactoring come Resharper.  La strategia è quella di separare la logica dalle intricate dipendenze nel codice e quindi sradicare le dipendenze (ad esempio sostituendo i riferimenti a classi concreti  con riferimenti a interfacce) per semplificare il test del codice. Il metodo non è già coperto da test e quindi è necessario cominciare applicando solo i refactoring previsti dal tool (principalmente RefactoringExtractMethod e RefactoringRenameMethod) evitando refactoring manuali che non sono sicuri senza ne test...

Modificare metodi troppo lunghi

Sto parlando di modificare un metodo lungo centinaia o migliaia di righe di codice non coperte da test.   Quando la modifica è   UNA NUOVA FUNZIONALITA' DA AGGIUNGERE   cioè che non modifica comportamenti esistenti il punto è quello di non peggiorare ancora la lunghezza del metodo e di testare almeno la nuova funzionalità che si implementa. L'idea è implementare la nuova funzionalità in un altro metodo e di richiamarlo dal metodo già troppo lungo.  In questo modo il metodo originale si allunga solo di una riga. Per rendere testabile il nuovo metodo serve renderlo indipendente dal contesto passandogli le informazioni che gli servono come parametri. Questo pattern si chiama...

Single-goal Editing

Ecco un'altra cosa che richiede disciplina e faccio fatica a seguire - ma non mi arrendo : fare una cosa alla volta quando si scrive codice Per esempio devo modificare un metodo di un oggetto perché accetti un enum con 3 valori invece del booleano che ha ora per poter gestire una nuova casistica: Inizio la vodifica e mi accorgo che sul form c'è da sostituire il check-box con 3 option button quindi interrompo la modifica del metodo e vado sul form. Sistemato il form torno al metodo, proseguo con la modifica quando mi accorgo che ci sono 3 if che...

La qualità del codice che fa la differenza nella pratica

Lavoro nel team di cui faccio parte da quasi 3 anni.  Un tempo in cui lo stile di programmazione nel team si è evoluto migliorandosi. Cosi quando c'è uno sviluppo da fare mi trovo a lavorare di volta in volta su codice di qualità differenti, questo mi ha permesso di vedere in pratica le diverse caratteristiche di qualità del codice e gli impatti che hanno sul mio lavoro: tempi, affidabilità, risultato finale. In generale percepisco 4 diversi livelli crescenti di qualità del codice: Facilità di trovare dove fare la modifica Dipende...

Strategie per togliere duplicazioni nel codice

Rimuovere le duplicazioni nel codice raramente è una sequenza lineare di passi in avanti. Ci sono modi diversi di scegliere da quali duplicazioni cominciare, modi diversi di eliminare ogni duplicazione, e durante ogni eliminazione si possono evidenziare nuove duplicazioni.    Qual è il modo naturale di procedere per rimuovere il codice duplicato?  Il modo naturale è di procedere per tentativi facendo passi in avanti e ogni tanto passi indietro: ad ogni tentativo il disegno originale apparirà più chiaro e cosi il modo di procedere. Questo è un punto in cui Team System ha una carenza. Infatti ci sono CVS che permettono di fare check-in locali e...

Eliminare il codice duplicato: la scelta non è meccanica

  Scelta la duplicazione da rimuovere e i refactoring da usare capita anche che ci sono più alternative per rimuoverla e quindi bisogna   scegliere il modo di rimuovere la duplicazione  .  Per fare un esempio, il metodo   void C { a(); a(); X(); a(); X(); X(); }  può essere  trasformato in         void C { aa(); X(); a(); XX(); } oppure in        void C { a(); aX(); aX(); X(); } In questo caso nel cercare un nome per il metodo ottenuto in un modo (nel esempio un nome per aa() e XX()) e quello ottenuto nell'altro (nel esempio u nnome per aX())  scegliere quello col nome che ha più senso aiuta a fare la scelta giusta. Un altro criterio...

Eliminare il codice duplicato: i refactoring

E' arrivato il momento di     raccogliere il fattore comune     del codice duplicato e unificarlo in un solo punto eliminando cosi le duplicazioni. Annoto alcune indicazioni da  Working Effectively with legacy code di M.C.Feathers .        Quando la duplicazione riguarda una porzione di codice o una parte di una espressione dentro un metodo si applica il RefactoringExtractMethod.        Quando la parte duplicata è una espressione, ad esempio una espressione condizionale applica il RefactoringDecomposeConditional .               Quando la parte duplicata è un metodo intero e relative variabili di classe si applica il RefactoringExtractSuperclass.                   Quando la duplicazione riguarda buona parte di un metodo a meno di piccole differenze, si applica...

Eliminare il codice duplicato: da dove cominciare

Trovate le duplicazioni il passo seguente è    scegliere quale duplicazione rimuovere per prima   :  in basa alla scelta fatta il risultato finale, il codice e la sua struttura, saranno diversi.  L'esperienza insegna di cominciare dalla duplicazione più piccola perché una volta rimossa emergeranno nuove informazioni e nuove duplicazioni cominceranno ad essere più evidenti.   Riferimenti: Working Effectively with legacy code di M.C.Feathers   Tags :  Team Work | Agile | Pratiche | Progettazione Software |

Eliminare il codice duplicato

Il primo passo è quello di   riconoscere il codice duplicato  .  Quando il codice è il cut-and-paste di un altro codice o di un metodo è abbastanza immediato riconoscerlo. Altre volte le duplicazioni sono piccole parti di codice riscritto uguale (una riga di codice o una parte di una espressione) in molti posti. Ci sono anche delle sequenze di codice che si ripetono con lo stesso ordine e a volte in ordine differente o interi metodi che differiscono per piccoli dettagli (vedi Refactoring e il CatalogoDelleCodeSmell). Questi casi di codice duplicato si trovano cercando a vista con pazienza e facendo esperienza. Un altro approccio reattivo cioè quello di...

Individuare le responsabilità di una classe

Quando capita di trovarsi con una classe troppo grossa (con 20-60 di metodi) probabilmente li ci sono troppe responsabilità, conviene individuarle e poi estrarle mettendole in nuove classi Ecco alcuni modi di individuare le responsabilità a partire dal codice esistente di una classe: Scrivi i nomi di tutti i metodi della classe insieme alla visibilità (public, privare, friend, internal, ...) e prova a raggrtupparli in base alle similitudini nel nome Guarda i metodi privati, internal e protected. Quando sono molti probabilmente li c'è una classe nella classe.  Una classe...

Disegno del codice che usa Framework e librerie di 3ze parti

 Sun per Java  e  Microsoft per .NET  hanno un framework esteso che soddisfa molte delle esigenze comuni nello sviluppo di software. E ci sono anche varie  librerie di 3ze parti  che capita di usare nelle proprie applicazioni. Questo può portare a realizzare codice composto da una sequenza di chiamate a librerie / framework, difficile da testare e difficile da capire.  In passato mi è capitato di scrivere codice in questo modo e di trovare codice fatto cosi  e non è stato facile lavorarci. L'altro svantaggio è la dipendenza inestricabile che si crea con il framework o la libreria. E questo ha un impatto economico e strategico...

Materiale dal ESSAP 2008

  Il materiale della 3rd European Summer School on Agile Programming riguardo Agile Loop , i Mini-Project, la sessioni sui Test di accettazione, un report dal campo sulla adizione dei metodi agili in azienda e la stima e pianificazione è qui: http://essap.dicom.uninsubria.it/pmwiki.php?n=Main.CourseMaterials Altro materiale sugli Agile Loops: http://www.xpday.net/Xpday2007/session/XpLoops.html La tecnica del pomodoro: http://www.tecnicadelpomodoro.it/tdp.html Il materiale relativo al Leadership game: http://www.paircoaching.net/docs/LeadershipGame.pdf     Tags :  Team Work | Agile | Pratiche | Leadership | Team | Team building | Progettazione Software |

Milioni di cose ancora da scoprire x scrivere buon codice

  proprio quando credevo di aver  imparato   tutto quello che c'è da sapere sulla programmazione scrivere proprio codice intendo, scopro che ce nè altrettanto ancora da imparare !!! un po come migliorare il tempo del giro in go-kart, per passare da 50'' a 48'' ce n'è da fare, provare, capire, imparare, forse  piu di quello che è servito per passare dai 60'' ai 50'' (oh, nella gara di go-kart  tra colleghi sono pure arrivato ultimo)! è che arrivato ai 50'' per abbassare ancora di 2'' al primo momento pare che sia questione di dettagli infinitesimali, tutta roba da   perfezionismo maniacale e talento naturale....

Lascia decidere l'utente

Quando c'è da prendere una decisione che ha impatto sul lavoro del'utente il compito dello sviluppatore, del coach e del project manager è quello di lasciare scegliere l'utente (il product owner). Anche se nel team c'è un esperto di dominio che conosce perfettamente il business dell'utente, difficilmente può conoscere la quotidianità in cui l'utente lavora e tutte le implicazioni della decisione sul suo lavoro. Ma anche se ipoteticamente le sapesse, l'utente è un'altra persona e quindi ha priorità, obiettivi, metri di giudizio propri. Le differenze sulla priorità/importanza sono più di quelle che si è portati a credere. In "The Manager as Negotiator" (D.A....

Parmenide, Eraclito e von Neumann

Leggendo questa citazione di von Neumann ho ricordato quella di Parmenide e Eraclito   « Non ci si può bagnare due volte nello stesso fiume, perché né l'uomo né le acque del fiume sono gli stessi »  (Eraclito, Battiato)     « E neppure è divisibile, perché tutto intero è uguale; ... Perciò è tutto intero continuo: l'essere, infatti, si stringe con l'essere ... Ma immobile, nei limiti dei grandi legami ... E rimanendo identico e nell'identico » (Parmenide, Monismo, Uno)   « Non c'è motivo di essere precisi riguardo a qualcosa quando non conosci quello di cui stai parlando  » (von Neumann)   Tags :  Team Work | Agile | Progettazione Software |

Arte e informatica ancora

  Ho visto questo concorso per realizzazioni artistiche che dimostrano comportamenti emergenti, che si evolvono nel tempo, reagiscono all'ambiente in cui sono immerse e sembrano avere una vita propria ... arti-ficiale Il concorso riguarda l'arte e le tecnologie di vita artifiviale insieme alle discipline collegate come robotica, intelligenza artificiale, biologia e la ricerca delle caratteristiche sintetiche della vita moderna     Il link al concorso , e alla fonte   Tags :  Agile | Complessità | Creatività | Innovazione | Progettazione Software |

Informatica & Design

    L'incontro tra medicina e informatica ha portato in dono all'informatica il metodo scientifico empirico tipico delle scienze naturali e sociali (vedi Empirismo) da cui ad esempio i metodi Agili.   L'incontro tra psicologia cognitiva e informatica ha donato all'informatica la centralità dell'uomo da cui ad esempio la Human-Computer Interaction, il Computer Supported Cooperative Work (vedi CSCW) e e il social networking. Oltre naturalmente ancora i metodi Agili.   Un incontro che sta portanto nuovi doni è quello tra arte, design e informatica. Se ne è accorta anche Microsoft:                   Microsoft Researchers at Intersection of Science and Art  che ha partecipato pure lei all'esposizione   Design and...

ESSAP 2008: Una settimana di training Agile full-immersion

  Questo venerdì ho completato una settimana molto intensa e fruttuosa di formazione sulle metodologie Agili alla 3rd European Summer School on Agile Programming o più brevemente ESSAP 2008. Hanno partecipato studendi universitari e dottorandi di tutta europa (Italia, Austria, Belgio, Olanda, Bulgaria) e oltre (Pakistan, Canada e Argentina) e professionisti esperti ( io sono tra questi ;-) ). Hanno partecipato come tutor e speaker gli organizzatori dalla Università dell'Insurbia tra cui Matteo Vaccari  Federico Gobbo e Vieri del Bianco, alcuni professionisti e consulenti che già impiegano i metodi agili (per es. in ThoughtWorks e in Funambol) e Coach con esperienza internazionale di insegnamento e utilizzo dei metodi agili su gradi progetti e per...

Creatività & profitto

Ok, storie di artisti vissuti in povertà non mancano e forse nemmeno di grandi inventori "sfortunati". Per stare nel nostro campo (l'informatica)  Sir Clive Sinclair  la dice lunga :D    -    Altrettante le storie di artisti popolari e dalle opere determinanti quanto gli inventori di successo. I successi raggiunti con la creatività quali caratteristiche hanno in comune   ??? Mi vengono in mente successi nella architettura, nell'arredamento, nella moda, nella pubblicità, nelle auto sportive e di lusso    (( ( l'Italia ha una forte tradizione in questi settori ) ))    in cui creatività si traduce in prodotto     La frase più in tema che ho in mente  "il compito del design è di stare...

Perché passare a soluzioni "ASP.NET REST-ful"... IMHO!!!

Segnalo questo post interessante e di taglio pratico su REST : Perché passare a soluzioni "ASP.NET REST-ful"... IMHO!!!

DryadLINQ data parallel applications (spocchia da developer ?)

  Un altro progetto molto interessante di Microsoft Research, DryadLINQ : Dryad provides reliable, distributed computing on thousands of servers for large-scale data parallel applications. LINQ enables developers to write and debug their applications in a SQL-like query language, relying on the entire .NET library and using Visual Studio.   Questa frase mi è sembrata un po' spocchiosa come se la semplicità non fosse un valore, o ho frainteso ? The goal of DryadLINQ is to make distributed computing on large compute cluster simple enough for ordinary programmers.   Stiamo parlando di programmazione parallela a Single instruction stream, Multiple data stream su sistemi distribuiti. Cioè secondo...

Un progetto Microsoft Research sul multi-threading

  Il progetto di Microsoft Research si pone l'obiettivo di realizzare una libreria per supportare un modello di programmazione chiaro e consistente per l'accesso concorrente a risorse condivise tra 2 e più thread. Il progetto si chiama C# Software Transactional Memory (SXM), alcune estratti dalla descrizione: The SXM is a software transactional memory package written in C#... Threads synchronize by means of memory transactions, short-lived computations that either commit (take effect) or abort (have no effect)... - - - Un altro progetto di Microsoft Research sempre sulla programmazione multi-threading  è AME: Automatic Mutual Exclusion, dalla descrizione sembra quasi un approccio di baby-sitting del developer. Ecco alcuni estratti della descrizione:...

Due definizioni equivalenti di buon disegno

  Flessibile riesco a fare una modifica intervenendo localmente in parti isolate del codice Robusto faccio una modifica del codice e questa incide solo sulle parti strettamente/logicamente correlate del programma Riusabile riesco facilmente ad estrarre dal codice le funzionalità per riutilizzarle Basso accoppiamento: la dipendenza dei componenti software del sistema da altri componenti software del sistema è bassa Alta coesione: i componenti software del sistema possono collaborare tra di loro in svariate combinazioni per ottenere nuove funzionalità .     Tags :  Progettazione Software |

Situazioni da team: disaccordo sulla architettura

Per lo sviluppo di una funzionalità gli altri membri del team concordano su una soluzione architetturale che detesti, cosa fai ?  Update 17/06/2008: idee dai commenti cercherei di capire perchè il team stia facendo quella scelta e perchè la trovino più adatta a quella che farei io Dopodiche calcolo a spanne il guadagno che la mia soluzione avrebbe rispetto a quella proposta e valuto di conseguenza se vale la pena portare altri argomenti alla discussione o se non convenga lasciare perdere ...

Ma Turing che c'entra con la progettazione di applicazioni multi-threading?

  Oltre alle già affascinanti conseguenze del teorema di teminazione di Turing , alcune di queste riguardano direttamente la programmazione multi-threading. Dal teorema di terminazione deriva che non esiste un programma/tool/macchina capace di analizzare del codice e riuscire sempre e comunque a indicare se si bloccherà per deadlock oppure no.   Certo esistono tool che analizzano staticamente il codice e riescono a tracciare il grafo di allocazione delle risorse evidenziando i circuiti sul grafo, ma nulla il tool può dire se ci sono le condizioni o meno perchè a run-time questi circuiti potenziali possano accadere e causare un deadlock o meno. Diavolo di un Turing!   Tags...

Programmi più intelligenti del proprio programmatore ?

  Sembra di no, che non sia possibile.        Anche nei vecchi film di fantascenza si trovano robot, androidi, programmi di intelligenza artificiale o "semplici" programmi degli scacchi che riescono a essere intelligenti quanto il loro geniale programmatore e non di più Anche dall'esperienza professionale quotidiana sembra che no. E alpiù sarebbe dannoso. Il lavoro del programmatore è creare del codice che si comporta esattamente e solo in modo aspettato e cioè che corrisponde alle specifiche date. Qualsiasi differenza è ... un bug. E la sua professionalità consiste nella abilità di addomesticare il codice alla prevedibilità.   Dall'informatica si sa invece che : il comportamento di un computer/programma non è _in_generale_...

Libro: Object-Oriented Reengineering Patterns

Segnalo il post di Antonio Ganci sul libro Object-Oriented Reengineering Patterns disponibile online on pdf e ordinabile in formato cartaceo: http://blogs.ugidotnet.org/AntonioGanci/archive/2008/06/09/92985.aspx Contiene la prefazione di Martin Fowler e una recensione di Kent Beck. Rilancio qui la considerazione proposta nei comments ad Antonio Lo scopo del disegno è rendere una applicazione facile da evolvere e modificare: - ha senso distinguere il design dal redesign ? - imparare il design non dovrebbe significare imparare a fare redesign cominciando con applicazioni legacy ?  

SOA + ROA + Mobile Agent = ?

La Service Oriented Architecture si poggia sulla facilità per un sw di inviare la richiesta di un servizio a un sw su un sistema autonomo e remoto. E ricevere pure la risposta! La Resource Oriented Architecture si poggia sulla facilità di accedere a risorse distribuite e ottenerne in locale la copia fedele che il sw può elaborare. Ma cosa fare quando le risorse sono anche sparse, ingombranti da trasmettere e lontane da chi esegue il sw ? Fanno il loro ingresso i Mobile Agent, sw che possono migrare da un nodo all'altro della rete e fare una elaborazione accedendo anche ai dati...

Programmazione OO, una definizione alternativa

  La definizione di programmazione Object Oriented più diffusa è quella che si poggia su polimorfismo, ereditarietà e incapsulamento. Ha quel che di misterioso e intangibile che mi ha sempre affascinato e incuriosito. Esiste anche un modo alternativo di definire programmazione Object Oriented che ha il fascino della praticità e del quotidiano   ed è la somma di tre stili di programmazione.  Il primo è lo stile di programmazione modulare (conosciuto anche come principio di data hiding) in base al quale una struttura data e le procedure che la elaborano (stato e comportamento) formano un modulo dentro cui restano nascosti i dettagli implementativi.  (vedi sul wiki) Il secondo è lo stile...

Progettazione di app. multi-threading: conclusioni

  Sviluppare applicazioni che leggono, scrivono, interrogano e modificano un database in modo concorrente è enormemente più facile che scrivere applicazioni multi-threading eppure le similitudini tra questo tipo di  applicazioni sono più delle differenze I libri, gli articoli e gli esempi di codice reperibili   si focalizzano   sui modi di implementare le primitive di locking e sincronizzazione tra hw, sistema operativo, framework e linguaggio, sulla correttezza di un meccanismo di locking o su come scrivere correttamente un algoritmo concorrente. In questa serie di post invece ho raccolto un repertorio di idee e riferimenti a beneficio della fantasia di chi progetta applicazioni multi-threading più semplici da capire ed...

Progettazione di app. multi-threading: pattern per il modello a sincronizzazione

Il modello a sicronizzazione è più semplice da disegnare, è sufficente individuare la terna  produttore, consumatore e risorsa e renderla evidente nel disegno.     La terna Produttore, consumatore e buffer  Il produtore e il consumatore possono ad esempio venire marcati con una interfaccia (es. IProducer e IConsumer) lo stesso vale per la risorsa che concettualmente si presta bene a essere considerata un buffer (es IBuffer). Il buffer segue comunemente il pattern del buffer circolare: http://c2.com/cgi/wiki?CircularBuffer mentre la sincronizzazione tra produttore e consumatore può avvenire secondo il disegno per pattern Observer o detto anche Publisher-Subscribers : http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternObserver.html Anche quando il buffer non c'è perché l'elemento...

Progettazione di app. multi-threading: reagire al deadlock

  + Accorgersi del Deadlock Come accorgersi quando un deadlock è in corso ? Mantenere il grafo di allocazione dei lock sulle istanze man mano che vengono acquisiti a run-time e cercare cicli nel grafo è una possibilità ... che non viene quasi mai utilizzata. Quasi sempre si preferisce imporre un time-out nella acquisizione del lock a un'istanza. Quando scatta il time-out probabilmente è un deadlock. Ad esempio anche il Db Oracle fa cosi. L'istruzione per acquisire un lock con timeout in .NET è Monitor.TryEnter(istanza, timeout)   + Scegliere il time-out Se è troppo breve potrebbe scattare il timeout a causa di una operazione un po più lunga del...

Progettazione di app. multi-threading: prevenire il deadlock

L'obiettivo è quello di far emergere dal disegno in modo evidente la politica di gestione dello stallo che si  vuole seguire e aiutare ad applicarlo in modo consistente in tutta la applicazione. Elenco qui un repertorio di pattern che trovo utili quando si implementa la strategia di prevenzione del deadlock [1].  Ordered Lock  Quando l'esecuzione di un metodo e la sequenza che segue di chiamate ad altri metodi richiede di acquisire più lock insieme, si previene il deadlock acquisendo sempre i lock con ordine dato (per esempio i lock su istanze della classe ServerListener vanno fatti sempre prima di quelli sulla classe ConnectedClient che...

Progettazione di app. multi-threading - altri pattern comuni

Proseguo col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i  modelli a competizione e a sincronizzazione. Quelli che hanno lo scopo di ridurre il tempo di lock di una istanza condivisa (= attraversata da più thread = i cui metodi sono richiamati da più thread) o la durata del rendezvous per una sincronizzazione tra produttore e consumatore.    Optimistick Locking L'idea è la medesima di quella usata con i db, cioè quella di fare le elaborazioni e i calcoli lunghi prima ancora di mettere i lock o avviare il rendezvous per poi poter essere velocissimi dovendo solo...

Progettazione di applicazioni multi-threading - pattern comuni

      Comincio col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i  modelli a competizione e a sincronizzazione.    Active Objects  pattern   Lo scopo è riconoscere quanti thread ci sono in una applicazione, distinguere i compiti di un thread da quelli di un altro e identificare come quando e chi crea nuovi thread. L'esecuzione di un nuovo thread ha inizio in active object.  Le istanze di active object sono in relazione 1 a 1 con i thread. A un thread con un compito (per esempio quello restare in ascolto delle richieste di connessone di un client) cnrrisponde una classe di active object, a...

Resurce Oriented Architecture: il contratto

  Segnalo il post http://blogs.ugidotnet.org/PierreGreborio/Default.aspx   Tags :  | Progettazione Software |

Resource Oriented Architecture

Segnalo questo post molto interessante su Resource Oriented Architecture di Pierre Greborio che affianca al SOA un nuovo concetto architetturale: http://blogs.ugidotnet.org/PierreGreborio/archive/2008/05/10/92606.aspx Altri 2 link che mi hanno aiutato a capire: http://en.wikipedia.org/wiki/Representational_State_Transfer e http://en.wikipedia.org/wiki/Resource_oriented_architecture   Tags :  | Progettazione Software |

Progettazione di app. multi-threading: modelli di programmazione

  Esiste una terza         metafora in base alla quale impostare il modello di programmazione        per la gestione della concorrenza: Il modello a monitor lo scopo di questo modello è sollevare il programmatore delle complessità legate alla gestione della concorrenza che invece viene lasciata al compilatore e al sistema che eseguirà il codice. 2 esempi noti sono il Single Thread Apartment del Visual Basic 6 e le Activity dei componenti COM+. Ma anche il Syncronize del Java e il MethodImplOptions.Synchronized di .NET.   Il modello...

Progettazione di app. multi-threading: modelli di programmazione

            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 (*). ...

Progettazione di app. multi-threading: obiettivi

 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...

Progettazione di applicazioni multi-threading

  L'obiettivo di progettare una applicazione multi-threading - oltre a garantire che funzioni correttamente - è di scriverla in modo comprensibile e che aiuta a modificarla e evolverla con tempi e sforzi sostenibili.  Facendo manutenzione e evolvendo l'applicazione mi troverò ad esempio a cercare risposta a domande come queste, e vorrò riuscire a farlo senza bisogno di sacrifici eroici : Sto aggiungendo una nuova classe all'applicazione, quanti thread avranno accesso contemporaneo all'istanza della classe? Sto modificando il metodo di una classe per aggiungergli chiamate a metodi di altre classi, dovrò aggiungere dei lock ? quali e dove ? ...

Mescolare bene esperienza e capacità di imparare facendo

  I veloci cambiamenti del mercato e della concorrenza, i cicli di vita ridotti dei nuovi prodotti e la velocità con cui emergono nuove tecnologie evidenzia ogni giorno l'importanza di saper reagire e adattarsi in fretta - e questo si riflette anche nei software      Per molte sfide cioè reagire e adattarsi è indispensabile perché non è possibile prepararsi in anticipo ad affrontare eventi non prevedibili o totalmente nuovi e sconosciuti.    Altre sfide riguardano domini/tecnologie/etc  talmente nuove e anche se conosciute di esperti reperibili in tempo non ce n'è.    E ci sono sfide che affrontano eventi conosciuti e solo in parte prevedibili, preparasi a tutte le possibili...

I metodi Agili riscrivono le convenzioni ?

      Sto scoprendo che i metodi Agili guardano le cose da un punto di vista inconsueto rispetto alle abitudini consolidate nel modo classico di condurre i progetti software.  Quasi promuovono una nuova forma mentale.   Ecco gli esempi che ho raccolto senza dimenticare il  m a n i f e s t o :   La cultura del imparare invece del evitare gli sbagli Consuntivo sulle funzionalità e sul valore consegnato invece delle stime di previsione e consuntivo dei tempi Far emergere i possibili problemi per...

Elastic Mind la sfida del Design

                 ... , and to help people  deal with change . Designers have coped with these displacements by contributing thoughtful concepts that can provide guidance and ease as science and technology evolve. Fonte: The Museum of Modern Art Mi pare che l'informatica non sia più sola ad affrontare la sfida della complessita, per chi non è di passaggio a NY qui il link alla mostra on-line : http://www.moma.org/exhibitions/2008/elasticmind  Tags :  Complessità | Creatività | Innovazione |  Progettazione Software |

MVC - Real Report from the field

  Ecco un altro interessante resoconto di utilizzo di MVC MVP dalla trincea della produzione di software commerciale : Link : La mia esperienza con il pattern MVP , Fonte : Andrea Canegrati  

Il materiale del Italian AgileDay 2007 è on-line

  Qui  x tutte le sessioni i doc , le slide e i link :  http://www.agileday.it/index.php?page=slides E qui foto pubbliche dell'evento: - http://www.fabiobeta.it/photos/AgileDay2007Photos/  - http://picasaweb.google.com/matteo.vaccari/AgileDay2007   Tags :  Team Work | Agile | Eventi |

Architettura Real Life : adattabilità alle evoluzioni tecnologiche

Marco ha postato una riflessione sulle evoluzioni del Framework con conseguenti rilasci di nuove versioni e l'impatto che ha sul codice esistente. Raffaele ha indicato un caso in cui  le novità tecnologiche gli hanno portato qualche sconvolgimento. Lo trovo un interessante caso reale per pensare alla 'adattabilità' come potenziale requisito architetturale : qui il post http://blogs.ugidotnet.org/marcom/archive/2007/11/08/89525.aspx#354914    

Italian Agile Day 2007 - l'agenda

L'agenda è on-line ! Per chi non lo conoscesse  è l'evento che raccoglie la comunità italiana di appassionati ed esperti di metodologie Agili. La sfida è produrre e consegnare in tempo software di qualità che soddisfa il cliente ed è facile da evolvere. Sessioni , experience report cioè storie vere di vita "agile" vissuta e numerosi open space. Sarà l'occasione per incontri internazionali : Tim Mackinnon , Francesco Cirillo. e Marco Abis. Ci si vede li ?     Tags :  | Agile | Eventi |

[OT] Le cattedrali tecnologiche raccontate da LEWIS BALTZ

  Le cattedrali tecnologiche del recente passato - con le speranze e le promesse, anche quelle mancate Raccontate da LEWIS BALTZ nella mostra fotografica '89-91 Sites of Technology' in questo periodo a Modena  Unoccupied office, Mitsubishi, Vitre (FR)   Worker, clean room, Toshiba, Kawasaki City (JP)   Cry supercomputer, CERN, Geneva Ho comprato anche il catalogo della mostra, un bel viaggio tra passato e futuro di questa professione, un po come The Hacker Crackdown di Bruce Sterling  

XPLWebinar 6 Nov 2007

  La chat organizzata da Emanuele qualche tempo fa sui metodi Agili è stata interessante per le persone incontrate e le esperienze che ci siamo raccontati. Il 6 Novembre alle 18 ci sarà online un XPLWebinar un seminario in cui verranno presentati argomenti e proposte discussioni sui metodi agili. Parteciperà Francesco Cirillo (se avete girato la copertina del libro di Kent Back il suo nome l'avete già incontrato). Le info per partecipare qui : http://www.xplabs.it/xplwebinar.html   Tags :  | Agile | Eventi |

[OT] Design

www.jenstark.com Tags :  Creatività |

Intuito e visione d'insieme

Annotazioni rileggendo Extreme Programming Explained: Embrace Change, 2nd Ed. di Kent Beck. "This is the paradigm for XP. Stay aware. Adapt. Change." "The Theory of Constraints is a way of understanding systems and improving their throughput." "The practices are  also useful because they give you a place to start. You can start writing tests   before changing code, and gain benefit from doing so, long before you understand   software development in a deeper way.Even if I knew all the same gardening   practices as Paul, I still wouldn't be a gardener. Paul has a highly developed   sense of what is good and bad about...

Fare parte di un Team oppure no ?

  Fare parte di un gruppo, di una squadra, di un team ...     richiede il rispetto di alcune regole comuni per lavorare bene insieme in modo coordinato e un po di disciplina per far buon uso delle regole ed evolvere     comporta dei vantaggi come l'accesso alle conoscenze condivise e alle risorse del team, il supporto collaborativo dei compagni e il mutuo soccorso     necessita di spazi in cui poter esprimere la propria individualità all'interno del gruppo, dare il proprio contributo in modo rilevante e vederne riconosciuta l'importanza e il valore. ______________ Una persona può preferire di non entrare a far parte di un Team perchè considera le...

Intanto rilascio poi lo sistemo 2°

Oltre alle considerazioni linkate nell'ultimo post ecco altri due pensieri interessanti sull'argomento: Failure is not an option : <<We continuously deploy solutions just a bit late, almost with all the desired capabilities, that works in most cases for some time.>> Come va a finire ? Leggilo qui :  http://pierg.wordpress.com/2007/09/10/failure-is-not-an-option/  Fail Fast : http://martinfowler.com/ieeeSoftware/failFast.pdf articolo...

Design Pattern simmetrici

Design Pattern simmetrici rispetto l'ereditarietà e il contenimento : DesignPatternSimmetrici  . Fonte : http://wiki.ugidotnet.org/ 

Imparare i Design Pattern applicati a .NET

Ecco qui finalmente il QuartoPassoPerImparareIDesignPattern che completa la serie ImparareIDesignPattern dedicata alla descrizione dei design pattern con le loro applicazioni a .NET .   Tutti i pattern hanno trovato degli esempi ad applicazioni significative nel  .NET Framework, tutti tranne questi 3 :  PatternState, PatternVisitor, PatternInterpreter . C'è un esperto in grado di scovarli ?   Fonte : http://wiki.ugidotnet.org/ 

Progettazione software, un esempio di vita reale

Stufo di paroloni con cui riempirsi la bocca e citazioni imparate a memoria dai libri? Stufo di dissertazioni sui massimi sistemi che nulla portano di concreto alla vita di un prodotto software? Allora sei pronto ad uscire da Matrix :D Ecco un esempio di vita reale di un architetto. L'intera sequnza di commenti è molto interessante.

Model View Controller feat. web user interfaces: slide e video dagli Architectire Days

Grazie all'instancabile presidente ecco on-line il video e le slide dagli Architectire Days della sessione 'Model View Controller feat. web user interfaces': http://www.guisa.org/files/folders/architecture_days_2006/entry612.aspx http://www.guisa.org/files/folders/architecture_days_2006/entry608.aspx Se il codice d'esempio è per le applicazioni Web è vero che il tema dell'interazione utente e dei suoi aspetti progettuali è trattata in modo da essere utile anche per applicazioni WinForm come ho avuto modo di verificare in prima persona ;-) Qui il materiale degli altri eventi a cui ho preso parte.

10 criteri per valutare il disegno della tua applicazione, gestire la complessità, etc.

Ecco 10 criteri per valutare il disegno di una applicazione e suggerimenti per possibili miglioramenti: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ValutareIlDisegnoDiUnaApplicazione.html  Sulla Rubriki di Dicembre altri spunti molto interessanti sul disegno di una applicazione : http://blogs.ugidotnet.org/rubriki/archive/2006/12/15/59578.aspx e l'esperienza nel gestire la complessità delle applicazioni raccontata direttamente da Igor Damiani qui: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ManagingComplexity.html

La coesione dei metodi di una classe

La definizione di coesione a livello di granularità dei metodi spiegata da Antonio Ganci: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/Cohesion.html

Pillole di Domain Driven Design by Janky

Ecco un'introduzione di Janky sul Domain Driven Design:  http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PilloleDiDomainDrivenDesign.html  

Architettura del software: un approccio agile - slide & video disponibili

Eccolo finalmente on-line il materiale del Web Cast "Architettura del software: un approccio agile" che ho tenuto qualche settimana fa in cui parlo della mia esperienza con l'architettura fatta adottando un approccio agile. Alcuni dati interessanti: Dei vari temi disponibili in scaletta i partecipanti hanno votato i 2 argomenti preferiti che durante il web cast abbiamo affrontato più approfonditamente: Gli strumenti dell'Architettura nell'approccio Agile, le tecniche e gli skill (prima scelta con preferenza del 46%) Far emergere l'Architettura gradualmente, nel software legacy e nei nuovi progetti (seconda scelta con preferenza del 62%) Gli altri temi disponibili e nuovi temi emersi dalle domande e dal feedback durante...

Chat sulle metodologie agili

Martedì 19 Dicembre ci sarà una chat dedicata alle Metodologie Agili organizzata da Emanuele Del Bono. E' un'occasione per conoscerci e iniziare a parlare di questo argomento,  per esempio per introdurre l'argomento, risolvere i dubbi più comuni, condividere impressioni ed aspettative, approfondire l'argomento scambiandoci link e riferimenti a materiale online, scoprire quanti e cosa hanno già sperimentato, cercare indicazioni per i prossimi passi. E per vedere cosa succede ;-) La chat inizierà alle ore 21.00 su MSN Messenger, la partecipazione è libera ed è sufficiente contattare Emanuele qui: http://blogs.ugidotnet.org/blogema/archive/2006/12/02/58341.aspx . Non mancherò , ci si vede li !

Risorse on-line per Architetti

Ho trovato la segnalazione di Michele Bersani molto interessante, mi ha spronato a raccogliere qui altri link sul tema:  Object Mentor Articles: http://www.objectmentor.com/resources/publishedArticles.html  ObjectiveView Magazine: http://www.objectiveviewmagazine.com  Architecture Journal: http://www.architecturejournal.net/ (segnalato qui da Michele Bersani)   E se qualcuno si è distratto un attimo ... GUISA http://www.guisa.org/ MSDN Architetti http://www.microsoft.com/italy/msdn/risorsemsdn/architetti/default.mspx Wiki .NET http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ProgrammazioneObjectOriented http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/DisegnoObjectOriented http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ArchitetturaObjectOriented http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/LibriSuObjectOrientedDesign

Ready to start: Architettura del software: un approccio agile.

Inizia oggi (27-Nov) alle 14.30 il Web Cast dedicato agli Aspire Architect dal titolo               'Architettura del software: un approccio agile'. Il Web Cast si snoda in 4 punti: Il ruolo dell'Architettura nell'approccio Agile (differenze dall'approccio classico) Gli strumenti dell'architettura Agile (tecniche e skill) Una visione moderna dell'Architettura (principi e ruolo dell'Architetto) Far emergere l'Architettura gradualmente (dal codice legacy e dal nuovo codice) è organizzato da GUISA e Microsoft Italia. http://www.luca.minudel.it/link.html

Web Cast 'Architettura del software: un approccio agile'

  Tra qualche giorno, il 27 alle 14:30 inizierà il Web Cast 'Architettura del software: un approccio agile', è il terzo degli 8 dedicati agli "Aspire Architect" e organizzato da GUISA e Microsoft Italia. Il Web Cast parla dell'architettura del software nell'approccio agile allo sviluppo del software e affronta argomenti interessanti anche per chi segue l'approccio classico. Perché partecipare al Web cast? Ecco dei buoni motivi:- I principi della moderna della architettura, anche quelli applicati allo sviluppo classico, provengono dallo sviluppo Agile.- In un team agile è naturale imparare l'arhitetturara del software praticandola.- L'approccio Agile consente di migliorare l'architettura anche di sw legacy.- L'approcio Agile...

Architettura, una visione moderna

Annoto questa segnalazione estremamente interessante EnterpriseArchitecture 2.0  .

Architettura: Inversion of dependency dal data layer in su

Questo articolo di MS descrive 4 modi di rappresentare le entità da persistere sul db e farle fluire tra i vari strati: valori scalari xml senza xsd e poi con xsd dataset/datatable con inverion of dipendency non tipizzati tipizzati entità di business non crud con inverion of dipendency crud (non preferibili alla non-crud) descrivendo come in base alla situazione scegliere una rappresentazione o l'altra: Progettazione di componenti per l'accesso ai dati e passaggio dei dati da un livello all'altro. In molti progetti ho trovato le soluzioni 3 e 4.1 adatte (e a volte la 2 e in piccoli ambiti la 1) permettendomi di evitare i costi e la complessità che ha la 4.2. Il principio di inversione delle dipendenze ha il grosso vantaggio di eliminare...

Architecture Days: i link della sessione "Model View Controller feat. web user interfaces"

Come promesso ecco i link dei temi toccati durante la sessione. Per qualsiasi domanda, suggerimento e/o feedback qui e nei contacts è ok.Questi argomenti sono pane per i denti di un Architetto ;-)   L'implementazione del MVC e del  Application Controller, WebPer scaricare il codice di NSK su CodePlex: cliacca quiLe diverse pagine Web che implementano l'MVC con View e Input-Controller uniti le trovi qui: \ManagedDesigns.Northwind.Web\backoffice\enternewordermentre due diverse implementazioni di View e Input-Controller separati sono nelle pagine RequiredDeliveryDate.aspx e ShippingAddress.aspxL'Application Controller lo trovi qui: \ManagedDesigns.Northwind.Web\App_Code\BackOffice.EnterNewOrderLe istruzioni per vederlo in funzione: sono qui Le schede CRC (Class Responsability Collaborators), Web/WinUna introduzione all'argomento in inglese: clicca qui Può servire una introduzione in...

Workshop "Architecture Days" Special Extra Track

Durante il fantastico workshop "Architecture Days" ho avuto un insapettato special extra track incontrando alla mensa insieme a Federico e Massimo Hard-Rock (ciao ;-)) l'amico ed ex collega Giulio (Small notes from the field) che da tempo lavora in Microsoft. Una chiacchierata interessante ed il confronto di opinioni anche tecniche mi ha regalato piacevoli conferme ed interessanti spunti sul futuro, naturalmente le parole architettura, infrastruttura, progettazione, estensione, configurazione, personalizzazione, evoluzione non potevano mancare.Rinnovo qui i mie saluti e ringaziamenti a Giulio. P.S. dimenticavo, qui le foto della sessione ;-)

Pattern di Unit testing: XUnit Test Patterns

Mi segno questo riferimento con allegato catalogo on-line di pattern e best practices: http://xunitpatterns.com/

Italian Agile Day 2006, il 1° Dicembre

Ne avrete sicuramente sentito già parlare. Neanche quest'anno mancherò ;-) Sul sito ufficiale ci sono tutti i dettagli, allego qui un abstract. _______________________________Italian Agile Day 2006!Venerdi 1 Dicembre 2006 si terrà a Milano il terzo Italian Agile Day. Si tratta di una conferenza gratuita di un giorno dedicata alle metodologie Agili per lo sviluppo e la gestione dei progetti software rivolta agli sviluppatori, project leaders, IT managers, tester, architetti e coach che hanno esperienze da condividere o che iniziano solo ora ad interessarsi a queste tematiche. La giornata ha come obiettivo la conoscenza pratica, le esperienze sul campo e un attivo...

Architettura : ma serve davvero ?

Qual'è la differenza tra scrivere codice con un disegno ed una architettura chiara e adeguata alle esigenze e scrivere codice "piatto" senza disegno ne arhitettura ? Non è una domanda da poco visto che è la prima che il management si pone per decidere se investire o meno. Ho ritrovato per caso questo codice            http://www.luca.minudel.it/datatableeditor/ che con uno user control ad-hoc (leggi trusco, trucco, scorciatoia) e poche righe di codice+configurazione (leggi nessun disegno o architettura) punta a realizzare le "stesse" feature per l'utente di quest'altro prestigioso (leggi con un ottimo disegno ed architettura) progetto:             http://www.codeplex.com/Wiki/View.aspx?ProjectName=NSK Il primo richiede pochissima programmazione e pochissimo tempo, il secondo una invidiabile competenza...

Quality Assurance: Classico, Agile e Lean

La Quality Assurance nello sviluppo del software classico, agile e lean: QualityAssuranceAgile Fonte: Lean Agile Straight Talk podcast, episodio QA AS PROCESS IMPROVEMENT IN LEAN-AGILERiferimenti Utili:- The Toyota Way- Lean Software Developmen- Lean & Six Sigma    

Rubriki: i pattern più popolari del 2006

Questi sono i pattern più popolari del wiki di UGIdotNET cioè i 10 più visitati da gennaio 2006: Pattern Factory Method Pattern Observer Pattern Singleton Pattern Proxy Pattern Command Pattern Facade Pattern Abstract Factory Pattern Mediator Pattern Adapter Pattern Iterator tra cui ci sono appunto i 7 design pattern più usati in .NET. A breve distanza seguono: i Pattern GRASP i SOA Anti Pattern i Pattern Architetturali gli Anti Pattern e tutti gli altri Design Pattern

La mappa degli agilisti italiani

http://www.frappr.com/italianagilemovement Ci sono anch'io. Fonte: http://blogs.ugidotnet.org/nicolacanalini   Tags :  Team Work | Agile |

Programmare senza ego: linee guida

  Renditi conto che commetterai degli errori e accettalo. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on. Non sei il codice che scrivi, ne quello che hai scritto ne quello che scriverai Remember that the entire point of a review is to...

Il software come conoscenza in compresse

Mentre studiavo algebra imparai un teorema con una dimostrazione lunga 2 facciate, negli esercizi tra le note curiose scoprii che un secolo prima lo stesso teorema per essere dimostrato aveva richiesto 10 e più libri. Ora come allora la conoscenza che quel teorema portava era la medesima, ma allora trasmettere, comunicare o elaborare quella conoscenza richiedeva una quantità d'informazione estremamente più grande che oggi (10 libri contro 2 facciate).   Quando lo sviluppatore realizza una soluzione informatica ad un problema passa attraverso diverse fasi, dal problema alla sua soluzione sino alla implementazione del software in momenti successivi di analisi e sintesi sino al rilascio definitivo della versione ufficiale...

The Toyota way

Annoto alcuni spunti dal pdf segnalato qui da Antonio con l''intento di migliorarmi su questi temi: Fai galleggiare la barca sulla superfice (il flusso di lavoro e i processi) Rendi e mantieni sempre evidente il flusso (del lavoro, del processo) e fa in modo che sia noto ed evidente a tutti attraverso la tua cultura aziendale Crea un flusso che muove insieme materiali e informazioni (per me applicazioni e codice, dati applicativi e conoscenza del dominio) e che lega il processo...

Pair Programming: la diversità dei pair è una ricchezza

Due sviluppatori in pair che approcciano la rappresentazione del problema e la  soluzione in modo diverso e che hanno formazione diversa possono ottenere risultati nettamente superiori a una coppia in pair di programmatori molto capaci (specializzati sul problema) ma molto simili tra loro. Questa è l'idea che mi è venuta leggendo questo articolo:   Groups of diverse problem solvers can outperform groups of high-ability problem solvers   Fonte: http://www.pnas.org/cgi/content/full/101/46/16385 ...We find that when selecting a problem-solving team from a diverse population of intelligent agents, a team of randomly selected agents outperforms a team comprised of the best-performing agents. This result relies on the intuition that, as the initial pool...

Quiz sulle metodologie Agili ed eXtreme Programming: le risposte che mi sono dato

Dopo aver riflettuto sulle domande ed aver letto i feedback al post precedente ecco le risposte che ad oggi mi sono dato: In generale il committente (il reparto che ha richiesto un software) e la software factory (il reparto che realizzarà il software) hanno l'obiettivo comune di concludere il progetto con successo, il confine che vedo separa ciò che porta alla riuscita del progetto da ciò che lo ostacola. D: Che differenza c'è tra adattarsi alle richieste del cliente e subire le richieste del cliente? R: Metafora. Il passeggero è salito in Taxi verso l'aeroporto per prendere il volo che a breve...

Quiz sulle metodologie Agili ed eXtreme Programming

Ecco alcune domende che mi sono posto nell'ambito delle metodologie agili ed XP. Cosa ne pensate ? Che differenza c'è tra adattarsi alle richieste del cliente e subire le richieste del cliente? Che differenza c'è tra essere agili ed improvvisare? A volte è più facile cambiare il mondo che ... C:/> _ Tags :  Team Work | Agile | Pratiche | Cliente |

A caccia di un tool di metriche

Sono a caccia di un tool per raccogliere metriche del codice OO. L'uso che ne devo fare è molto pratico e concreto, consiste nel usare le mertiche per trovare risposte sulla direzione in cui investire energie per raggiungere certi obiettivi ben precisi (es. ridurre i tempi di realizzazione di una evoluzione o di un fix migliorando la comprensibilità del codice, ridurre i bug, semplificare gestione e le build riducendo le dipendenze, ...). Il contesto in cui questo tool deve essere usato è veloce e molto competitivo, per questo spero di trovare un tool che abbia tulle le qualità ideali: integrato a VS.NET e facile da configurare ed...

TypeMock.NET

Oggi ho fatto una breve sessione in Pair Programming con Antonio in cui abbiamo applicato il TDD per risolvere dei dubbi di disegno su come sostituire ad una applicazione la funzione di salvataggio in XML dei dati di configurazione. Ben presto è emersa l'utilità di usare un mock object per poter testare separatamente la rappresentazione dei dati dalla sua persistenza.  Questa è stata l'occasione per me per conoscere TypeMock.NET (tool commerciale a pagamento). TypeMock.NET rispetto ad altre librerie di mock object come ad esempio NMock ha un pregio che mi ha subito colpito e conquistato nonostante non sia open-source: permette di fare il Mock di ogni classe senza i vincoli tipici...

Come proteggere una class library rendendola accessibile ai soli assembly firmati

Così come il più noto attributo StrongNameIdentityPermission che autorizza solo gli Assembly con un dato strong name a richiamare una library (tutta intera, solo alcune classi o solo alcuni metodi) c'è anche l'attributo PublisherIdentityPermission che autorizza in base al certificato (X.509 v.3 Software Publisher's Certificate) dell'assembly chiamante. I tool di .NET makecert.exe, cert2spc.exe e permettono di creare un certificato di test e la relativa chiave privata necessaria a creare un Assembly ed il tool signcode.exe permette infine di firmare l'assembly chiamante con il certificato. Ad esempio:     makecert -sv CertPrivateKey.pvk Cert.cer    cert2spc Cert.cer Cert.spc    signcode /spc Cert.spc /v CertprivateKey.pvk AssemblyChiamante.exeIl seguente codice...

AgileDay 2005

Anche quest'anno ho assistito all'AgileDay, lo  seguo con molto interesse per affinare le mie conoscienze delle metodologie agili da cui mi faccio aiutare e guidare nel lavoro in team e nell'utilizzare tool e tecnologia per la buona riuscita dei progetti. La sera prima c'è stata una divertente cena di geeks (il presidente Andrea Saltarello si è esibito nel refactoring della serata in perfetto sitile Agile) impreziosita dalla presenza del gentil sesso e da un simpatico provocatore che ha contribuito ad ampliare il dialogo oltre i temi dell'informatica. Il viaggio di andata e ritorno con Riccardo Golia è stato come sempre un'ottima occasione per confrontarci sulla applicazione delle metodologie agili e sul nostro...

Una critica a Code Complete di Steve McConnell

Riporto qui una critica che ho letto, resta valida anche per la 2nda edizione?

XP e User Stories, per noi e per Microsoft

Conclusioni Il problema: 1 mese di tempo per MS per inserire dentro il build complessivo del prodotto una aggiunta fatta da una divisione di sviluppo del prodotto. La causa: l'elevato numero di persone necessarie al team e del prodotto. La soluzione: organizzare le divisioni di sviluppo/build assegnando ad ogniuna la prossima singola funzionalità (User Story) da rilasciare, arrivare per ogni divisione ad un build giornaliero e quindi ridurre (a 1 settimana?) il tempo di attesa per il build complessivo del prodotto. Il fatto interessante L'integrazione continua è utile per poter giungere a build giornalieri fatti in pochi minuti, è un ingrediente ma ne servono anche altri. Và beh, cosa nota. Organizzare il lavoro del...

I tool di refactoring: quale usare?

Ho in previsione di fare un uso maggiore del Refactoring riducendo il disegno up-front e quindi mi cerco di capire su che tool orientarmi x VS2005. La mia esperienza su Resharper è documentat qui: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/Refactoring.html#StrumentiDiRefactoring Avete usato altri Tool di Refactoring, quala consigliereste?  

Nomi di classi, metodi, namespace, etc. Italiano o Inglese?

Nella sezione NamingGuidelines curata da Fabio Cozzolino si è aperta una "diatriba" ancora irrisolta qui: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/NamingGuidelines.html#NamingIssues Argomentazioni pro e contro utili per arrivare a stendere una linea guida definitiva sulla denominazione di namespace/classi/metodi/... in italiano o inglese sono gradite ;-)

Manuale pratico di Wiki numero 6 (ultimo): Inseguire le modifiche sul Wiki

  Per inseguire le modifiche sul wiki puoi: Iscriverti al Rss Feed cliccando nel menu a sinistra alla voce Sottoscrizioni Visualizzare le ultime modifiche in ordine di tempo cliccando nel menu a sinistra alla voce Modifiche Recenti Per non farti sfuggire nulla puoi: Cercare una specifica parola o frase nel wiki nella sezione Cerca sotto il menù Trovare tutti i punti in cui la pagina corrente è citata cliccado nel menù a sinistra la voce 'Cerca Riferimenti' Per ogni altro dubbio c'è il WikiHelpDesk

Manuale pratico di Wiki numero 5: Creare nuove pagine

X aggiungere una nuova pagina al wiki ci sono almeno due modi diversi. Il primo modo è alla Scegli la pagina del Wiki sulla quale vuoi porre il link al nuovo argomento Trova un NomeArgomento adatto Vai in modifica della pagina e scrivi il nuovo nome argomento in pascal case Salva la pagina Ora il nuovo nome argomento apparirà con una sottolineatura tratteggiata: Clicca sul nuovo nome argomento Ora sei in modifica della nuova pagina, basta inserire il testo che desideri, tipicamente in StileDocumentale, e quindi salva Il secondo modo è alla Vai in una pagina qualunque del wiki Clicca in alto sul titolo blu a questo punto comparirà il messaggio: Digita il nome...

Manuale pratico di Wiki numero 4: Contribuire al Wiki

Il contenuto del Wiki è molto "Agile" : cambia continuamente al ritmo delle persone che vanno e vengono modificandolo, dell'esperienza che cresce e delle opinioni che cambiano. E' il momento di fare pratica su strada, la PaginaPerFarPratica ora non ci serve più, SeiInvitatoAModificareIlWiki:  Su UGIdotNETWiki trovi una lista di argomenti trattati dai precedenti visitatori, naviga e scegli un argomento che ti interessa Entra in modifica della pagina Posizionati alla fine per lasciare il tuo commento (se trovi l'argomento interessante, se lo trovi completo o se ci sono parti mancanti, se è chiaro quello che è scritto, se concordi con la tesi sostenuta, etc.) Se vuoi inserire un nuovo commento tira una riga dritta digitando:----e...

Manuale pratico