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.

Agile Architecture

From this post an interesting article: "Agile Architecture: Red Pill or Blue Pill." (Jeff Sutherland, 2009) And one more link on this topic: EnterpriseArchitecture 2.0  (James McGovern, 2006) And even one more: Who Needs an Architect?  (Martin Fowler, 2003) What's your experience about this? Tags :  | Progettazione Software | Agile

Scrum, XP e le pratiche di Engineering

I metodi Agili come Scrum e XP non sostituiscono le pratiche di software engineering come ad esempio: - Analisi e definizione dei requisiti - Definizione delle specifiche - Disegno e modellazione del sistema - Implementazione - Versioning e Release management - Verifica e validazione - Stima E nemmeno si sovrappongono.      I metodi Agili fanno si che ogni pratica di engineering sia impiegata nella misura in cui serve allo specifico progetto (che emerge dal loop di inspect-adapt) con semplicità (dovuta all'uso costante/iterativo della pratica, dalla sua specializzazione  e dalla consapevolezza del fattore  umano/sociale) Cosi nella pratica in molti casi si scoprono degli...

Decisions by consensus without compromise

One of the Toyota Way principles is « Nemawashi », take decisions by consensus. ... The consensus-building process solicits ideas and review from everyone involved so that the final idea is usually a lot stronger than the original. But there’s one big misunderstanding about consensus. Consensus doesn’t require Compromise Leggi il post : http://blog.nayima.be/2009/06/19/nemawashi-decisions-by-consensus-without-compromise/ Guarda anche: Negoziazione integrativa : nasce dalle differenze Tags :  Team Work | Agile | Lean Agile | Conflitto | Negoziazione | Motivazione | Progettazione Software |

Qualità subito

Il principio XP che guida questo modo di procedere è  Quality Ecco l'esempio di alcuni criteri di qualità che richiedono tempo e sono indispensabili già da subito e quindi vanno conteggiati nelle stime dei tempi : il codice deve essere nel Source Code Repository il software deve avere una Build Automatica con i rispettivi test il software deve avere degli script di deploy / un setup kit con la gestione del versioning ...

Qualità in Small-Safe-Steps

I principi XP che guidano questo modo di procedere sono Improvement, e Baby Steps Ecco degli esempi di miglioramenti della qualità che richiedono tempo e sono a rischio di errore e quindi vanno fatti in modo incrementale : Remove code duplication tra 2 diverse classi o pagine aspx, tra una una pagina asp e una aspx - quando è la nuova feature che si sta scrivendo che crea la duplicazione invece di eliminarla subito è più sicuro prima crearla rendendola evidente e scrivere i test e  solo poi provare a eliminarla. cosi si consegna la nuova feature funzionante,...

Qualità a tempo zero

Ecco esempi di miglioramenti della qualità del codice  che non richiedono tempo ma solo la conoscenza tecnica e la consapevolezza che sono utili: Rename di classi, metodi, argomenti, variabili con nomi che descrivono in modo chiaro cosa fa il codice - anche un nome lungo e prolisso è meglio di una lettera o un acronimo incomprensibile Replace dei commenti con estrazione di blocchi di codice in un nuovo metodo e introduzione di variabili intermedie con nomi esplicativi - il codice viene compilato ed eseguito per queto...

A View on the Future of Agile e Beyond Agile

Queste slide sono anche l'occasione per scoprire la storia dell'Agile dalla sua nascita, come è vista l'adozione dell'Agile in italia e perchè e la Tecnica del pomodoro tutta italiana. Ecco le slide di A View on the Future: http://www.crisp.se/futureofagile/slides/davidanderson E qui la presentazione Beyond Agile: Cultural Patterns: http://www.infoq.com/presentations/beyond-agile Tags :  Team Work | Agile | Lean Agile | Pratiche | Leadership | Creatività | Innovazione | Progettazione Software |

Design strategies: Kent Beck presentation

I've seen this presentation, found it very useful : http://www.infoq.com/news/2009/06/responsive-design Some quick excerpt from the presentation here. A design goal: Steady Flow of ... Features ! A design definition: Beneficially Relating Elements (that's a thing and also an action) Design principle: safe steps Some design strategies: Leaps vs Parallel, Stepping Stone vs Simplification  (here slides that explain this http://www.slideshare.net/deimos/kent-beck-effective-design) Tags :  Team Work | Agile | Complessità | Pratiche | Creatività | Innovazione | Semplicità | Progettazione Software |

Scrum: Roles & Responsibilities

Product Owner ► Prioritizes features according to market value ► Is responsible for the profitability of the product (ROI) ► Defines the features of the product and decides on release content ► Can change features and priority after every Sprint ► Accepts or rejects work results ScrumMaster ► Ensures that the team is fully functional and productive ► Enables close cooperation across all roles and functions and removes barriers ► Shields the team from external interferences ► Ensures that the process is followed. Invites to daily scrum, Sprint review and planning meetings Team ► Cross-functional, seven plus/minus two members ► Selects the iteration goal and specifies work results ► Has the right to...

In equilibrio tra focus e creatività (da David Allen di Get Things Done)

     La capacità di controllare gli impulsi, concentrarsi è importante per imparare e sviluppare nuove abilità, per le relazioni personali e sociali e per il lavoro:     impegnarsi, organizzarsi, superare le distrazioni, adoperare la memoria e il pensiero sequenziale razionale_ Come lasciare spazio alla creatività in tutto questo ? Usando la capacità di distinguere un idea da un impulso a distrarsi,  lasciare spazio all'idea nel luogo e nel momento in cui arriva, fermarsi per svilupparla e... catturarla! All'inizio può essere caotico, una volta abituati è produttivo e creativo - imparare/fare/realizzare ricomincia a essere divertente Fonte: Be creative amid chaos, David Allen Tags...

2 giochi iper-tecnologici per il futuro prossimo

Natal, da Microsoft Natal Hands On Giz from Gizmodo on Vimeo. Qui: http://gizmodo.com/5277954/testing-project-natal-we-touched-the-intangible Augmented-reality geisha Qui: http://gamesalfresco.com/2008/07/20/want-your-own-augmented-reality-geisha/ Fonte: http://www.wired.com/beyond_the_beyond/ Tags :  Creatività | Innovazione |

Un esempio di semplicità col TDD: state based vs interaction based

    ((( continuo la serie di post pratici sulla semplicità ))) Gino ha a disposizione l'intero giorno in pair programming col collega per chiarirgli la differenza tra state e interaction testing. Per farla semplice da dove comincia? Comincia in pair a implementare uno state based unit test evidenziando i passi : Istanzia l'oggetto usando Stub per eventuali dipendenze esterne Inizializza lo stato dell'oggetto da testare Richiama l'operazione da testare Verifica che lo stato finale dell'oggetto è quello...

Breaking changes Refactoring 2° di 2

    Per esempio sollevare una eccezione che prima era silenziata e ignorata - aggiungere un vincolo di unicità per due colonne di una tabella Team Work Nel tecnico esperto con competenze di refactorig prevale il coraggio di cambiare per migliorare il codice e la consapevolezza che i vantaggi sono maggiori dei rischi Nel tecniico che ha la conoscenza storica del sistema prevale la tendenza a limitare cambiamenti che possono compromettere il sistema Nel CTO attento alle esigenze degli utenti/clienti prevale la attenzione all'operatività del sistema in uso e alle conseguenze pratiche di un malfunzionamento Invece di  radicare queste differenze...

Breaking changes Refactoring 1° di 2

    Per esempio sollevare una eccezione che prima era silenziata e ignorata - aggiungere un vincolo di unicità per due colonne di una tabella Tecnica di coding      Fare l'analisi statica del codice  - tipo Find Usages con Resharper - in modo esaustivo può richiedere uno sforzo eccessivo ed essere insufficente ((( per es. perché c'è codice VB6 o C++ che il tool automatico non copre ))) e testare il sw in esecuzione può essere a rischio di errore ((( per es. la modifica può avere conseguenze sorprendenti/impreviste )))   Più di tutto con solo queste 2 tecniche non si...

Where 2.0 conference

Si è conclusa oggi la Where 2.0 Conference 2 idee simpatiche : DIYcity: How do you want to reinvent your city? e Glympse  : Tags :  Comunicazione | Creatività | Innovazione |

New York Times Dropping WPF/Silverlight for Adobe AIR

Qui l'articolo : http://www.infoq.com/news/2009/05/Times-AIR-Reader Alcuni estratti    lack of cross-platform support ... most developers seem to end up maintaining two separate code bases ... Apple users complained about not having all the same features as Windows users La domanda la giro agli esperi di UGI per il diritto di replica: è davvero cosi ? Tags :  Progettazione Software |

Linq2Sql, carenze imbarazzanti

Annoto delle carenze ... imbarazzanti  ( cosi le definirebbe l'ex collega Riccardo :D ) non c'è modo di specificare Hint al Database per ottimizzare/indirizzare il piano di esecuzione di una query la proprietà AutoSync che determina se dopo in INSERT venga eseguito o meno un SELECT per avere in ritorno i valori di campi autoincrement non si può indicare a livello di singola query ma solo di DataContext non c'è modo di eseguire Bulk Insert ossia insert massivi in una unica operazione massiva (come quando si fa  INSERT a_table (colA, ...,...

Axum, Microsoft’s Approach to Parallelism

Axum applica il pattern Session/Application [1] per definire e gestire l'accesso concorrente a ricorse condivise Lo fa implementando il concetto di domain  (un domain definisce un gruppo di risorse condivise e usate in modo concorrente e domini diversi sono gruppi di risorse tra loro isolati) e quello di agents che eseguono parallelamente operazioni su dati e risorse condivise Quindi implementa il Modello a Competizione [1] Agents diversi possono scambiarsi messages cioè second il Modello a Sincronizazione [1] detto anche produttore-consumatore detto anche Message Passing. Non ho notizie riguardo alla implementazione da parte di Axum (presumibilmente non sono supportate/implementate) di -...

Is Parallel Programming Hard?

Un articolo pubblicato su InfoQ che ribadisce i risultati emersi dall'articolo risultato dal brainstorming su XP-IT circa le applicazioni multi-threading e il TDD Un motivo in più per segnalarlo a chi sviluppa app multi-threading: Design di applicazioni multi-threading Tags :  Team Work | Agile | Pratiche | Creatività | Innovazione | Progettazione Software |

Semplicità: valutare l'andamento di un team Agile

Nel post Scrum: un processo di sviluppo Empirico sono linkati modi di valutare un team Agile Il post Keep the Peel and Throw Out the Banana di Francesco Cirillo va alla semplicità della questione : Guarda il codice, quando è pieno di IF/SWITCH, casi speciali, diversi tipi di logica accoppiata, bug frequenti, è un campanello d'allarme che dello sviluppo Agile il team ha tenuto la buccia e gettato la banana Guardandomi indietro e riflettendo trovo che nella pratica questo criterio è efficace Tags :  Team Work | Agile | Pratiche | Leadership | Software | Semplicità |

Linq code refactoring: good programmer and bad one

IMHO the difference between a good programmer and a bad one is that a good programmer always strives to do things the straight way while a bad programmer feels smart when he discover and use dirty tricks  -  While refactoring long methods with Linq/Linq2Sql code and so trying to extract some Linq/Linq2Sql code into a new method it do emerge the need to return anonymous types from the extracted method. The C# compiler can complains for this You can Google and find a trick to return anonymous types. While in the first moment it looks interesting by a...

I programmatori migliori usano meno IF/SWITCH (codice di esempio)

     Ecco un esempio con le 2 implementazioni a confronto: Esempio di codice con e senza IF/SWITCH      Ecco altri esempi qui: Codice Anti-If di esempio Tags :  Agile | Pratiche | Disciplina | Professione | Semplicità | Progettazione Software |

I programmatori migliori usano meno IF/SWITCH

     Questa settimana ho visionato una quarantina di soluzioni di un test di programmazione. Le implementazioni meno buone  avevano anche un numero elevato di if/switch (una 40na), quelle migliori anche nessun if/switch. Penso che non è un caso      Resto sorpreso che tra gli skill avanzati di coding che sono assodati e riconosciuti da anni la capacità di evitare gli if/switch inutili e duplicati è ancora ignota a una gran parte di programmatori, e anche da alcuni programmatori di Microsof (vedi qui , mal comune  mezzo gaudio :D). Tecniche per eliminare IF/SWITCH: vedi qui Altri skill avanzati di coding: vedi qui Il passo...

The Internet Of Things: l'italianissimo Arduino fa già parte della storia

Questa è la presentazione Shhh, they're listening, a subjective history of the Internet of Things Shhh, they're listening, a subjective history of the Internet of Things View more presentations from Alexandra Deschamps-sonsino. (tags: iot design) Chi è Arduino ? Guarda qui Cos'è The internet of Things ? Guarda qui Fonte: Alexandra's subjective history of the Internet-of-Things Tags :  Creatività | Innovazione | Progettazione Software |

C# Nullable Types: 2 errori nel disegno

Il punto centrale del pattern nullable object o special case che dir si voglia è quello di evitare gli IF per gestire il Null. E invece ... Nella conversione da int? a string:  non c'è modo di specificare che stringa usare in caso di null senza usare un IF nemmeno con l'operatore ??.  Per es. in una label vorrei poter visualizzare il numero oppure N.A. quando c'è il null e mi tocca mettere un if.     L'abilita principale di un programmatore è sapersela cavare col codice. E invece... Al posto di contare sulla capacità dei programmatori di capire e usare correttamente la logica...

Brian Eno: amplificare la creatività nel team (e con gli U2)

Qualcosa va storto e non si sa cosa fare - la reazione spontanea  è quella di affidarsi alle abitudini consolidate Nei team affiatati il punto di forza della "telepatia" si bilancia con l'eccesso di diplomazia: nessuno vuole mettere  a rischi l'equilibrio che si è creato Brian suggerisce 2 giochi per rompere le regole e aprirsi a nuove cose e a nuovi modi di fare Imporsi dei limiti per incrementare la creatività - per esempio con gli U2 gli ha fatto scambiare gli strumenti cosi che uno suonasse quello dell'altro - obbligarli a suonare con solo una parte della scala Fare...

Design Under Constraint: How Limits Boost Creativity

The same principle applies to design. Given fewer resources, you have to make better decisions The idea of operating within constraints—of making more with less—is especially relevant these days. From Wall Street to Detroit to Washington, the lack of limits has proven to be a false freedom More recently, the very iPhone on which you listen to Davis' landmark album is a one-buttoned example of restraint in pursuit of an ideal, while the sublimely simple Google homepage is forever limited to 28 words Fonte: W.I.R.E.D. Tags :  Team Work | Agile | Creatività | Innovazione | Semplicità | Progettazione Software |

Informatica e Design 3° (Generative Systems)

Game designer Will Wright (SimCity, The Sims) and musician Brian Eno discuss the generative systems used in their respective creative works. Ancora info su questi argomenti ? ~  schemi complessi che emergono dall'implementazione di regole assai semplici come una foresta che nasce da pochi semi (John Conway)  in questo post     ~  simulazioni sociali in questo post ~  NetLogo un sw per eseguire e implementare principalmente simulazioni sociali ma anche sistemi genereativi in questo post Tags :  Team Work | Agile | Complessità | Team | Creatività | Innovazione | Semplicità | Progettazione Software |

Informatica e Design 2° (Brian Eno)

L'area di intersezione tra informatica e design è in continua espansione. In termini di prodotti, tecnologie e applicazioni e anche designer e artisti digitali che sconfinano nella programmazione e programmatori che si dedicano a prodotti informatici di design e artistici La potenzialità che intravedo riguarda la possibilità che programmatori possano scoprie da designer e artisti digitali come lavorare e come affrontare in team problemi in modo creativo e anche contribuire in termini di metodologie e pratiche di programmazione Naturalmente i team agili sono i candidati ideali avendo nel loro nucleo gli aspetti di creatività esplorazione dinamiche di team Brian Eno è un precursore...

Simulazione di fluidi con Blender

Dopo i sw di social networking, ecco un altro sw che da vita alle cose Deve essere estremamente emozionante realizzare sw che ti permettono cose come queste Fonte: Fluid simulations Tags : Complessità | Creatività | Innovazione |Tools | Progettazione Software |

In Sintesi: Design di applicazioni Multi-Threading

Ecco in sintesi una serie di indicazioni utili e per me illuminanti e sorprendenti sul multi-threading: le applicazioni multi-threading sono di un ordine di grandezza più complesse delle altre appicazioni quindi è sensibilmente sconveniente portare in causa il multi-threading quando può essere evitato il ruolo e la principale utilità dello unit-testing e del TDD per le applicazioni multi-threading è quello di portare a disaccoppiare la gestione deil multi-threading dalla logica di business ...

Siamo poi d'accordo su cos'è cattivo codice ? : Risultati

Ecco le opinioni raccolte su cos'è cattivo codice per noi: Le 3 cose che sono state scelte di più come casi di cattivo codice (95%) sono: Nomi di variabili senza senso, incomprensibili, irrintracciabili Mancanza assoluta di naming convention e metodi con nomi fuorvianti Trovare nel codice la stessa cosa fatta in 10 modi diversi Le 3 cose che sono state considerate di meno come casi di cattivo codice (32-33%) sono:  Mancanza di documentazione sulle configurazioni e sul deploy Assenza totale di Unit...

Sulla persuasione (Selling Scrum)

     Uno che vende numeri del Lotto invece di giocarseli mi lascia perplesso tanto quanto uno che vuole venderti "Scrum" invece di prodursi buon software - nonostante il titolo questo post sulla persuasione l'ho trovato utile : Selling Scrum: How to persuade people to change! Alcune frasi But if you are in a position to give instructions or give orders, you cannot do this unless you have a lot of confidence about what you are saying. However, people's ideas are unreliable things and I would be impressed if we were right half the time. ... ... We are all human and we...

Design di applicazioni Multi-Threading

     Dalla la serie di post e riflessioni che feci sul disegno di applicazioni muti-threading è partito uso scambio interessante su XP-IT e istruttivo Il risultato è una raccolta di indicazioni link e commenti - unica - perché centrata sul  *design*  del multi-threading: Design di applicazioni Multi-Threading       La trovo molto interessante perché si posso trarre idee semplici (una volta emerse si :) ) e efficaci per ridurre la durata/superfice di lock/sincronizzazioni disaccopiare le responsabilità ...

Working Effectively with legacy code: link & riferimenti & sintesi

Raccolta di link, riferimenti, sintesi a complemento del libro Working Effectively with legacy code di M.C.Feathers e su coding (clicca sul titolo per visualizzare)

Siamo poi d'accordo su cos'è cattivo codice ?

Come ricordava un commento a un post precedente non basta elencare i difetti del codice per risolvere i problemi Per migliorare una code-base il primo passo è  quello di essere d'accordo su cos'è cattivo codice  su quali sono i difetti da rimuovere E' cosi facile?        Partecipa al sondaggio   cliccando qui E poi guarda i risultati (clicca qui) Ultimo aggiornamento: - su 10 dei punti siamo in accordo nel considerarli come cattivo codice - su 12 punti non c'è sufficente accordo  Tags :  Team Work | Pratiche | Team | Conflitto | Negoziazione | Disciplina | Progettazione Software |

Situazioni da team: sperimentazioni pericolose

    Qualche tempo fa avevo raccolto opinioni su quanto fosse professionale quando nel team un tuo collega per passione, per curiosità, per interesse o per semplice aggiornamento professionale decide di sperimentare in un progetto  per un cliente alcune soluzioni tecnologiche che non conosce e quindi non ha una ragionevole certezza di padroneggiarle a sufficenza Qui il post con ogni singolo feedback e la sintesi finale: Situazioni da team: azzardi tecnologici      In questo post ho trovato una posizione interessante sull'argomento e consiglio di leggerlo: Keeping up is not enough Se qualcuno vuole commentare ancora sull'argomento, naturalmente...

Esempio di un Open Space riuscito (Domain Driven Development)

Guardando i video della recente UGIALT.NET conference mi ha colpito l'open space a mio avviso riuscito . Annoto alcune cose che ho osservato  •  gli argomenti discussi, i tempi e i modi gli decidono dalle persone che sono li intanto che la discussione va avanti, anche in base a quello che succede e a dubbi e interessi di ognuno     invece     di essere pre-stabilita  da  qualcun altro e condotta in modo unilaterale  •  la conversazione è fatta dalle conoscenze, dalle domande, dai dubbi e dalle singole esperienze pratiche concrete e reali del quotidiano lavorativo dei partecipante e le risposte che si...

Qual'è secondo te codice pessimo?

Quando apri un sorgente e ti viene da ... imprecare :) quando c'è un certo programma da modificare e quindi ... prendi ferie quando guadri lo schermo per ore senza capici niente ... e non sei nemmeno innamorato :)  ... cosa c'è in quel "codice" che ti fa  schifo  ribrezzo ? Tags :  Team Work | Pratiche | Team | Disciplina | Progettazione Software |

Coding: migliorare lo stile

Il nostro lavoro é quello di programmare computer, la abilitá di scrivere del buon codice é spesso sottovalutata a favore della conoscenza delle tecnologie Un po come fanno gli sportivi e i musicisti il trucco é esercitarsi A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there to have fun and to engage in DeliberatePractice in order to improve their skills: http://codingdojo.org/ Ho partecipato anche a una variante dove tutte le coppie in contemporanea scrivevano codice per poi discutere insieme le diverse soluzioni Tags :  Team Work | Agile | Lean Agile | Pratiche | Progettazione...

Social networking prisma vs Antisocia NotWorking

Il prisma dei media sociali: http://www.briansolis.com/2008/08/introducing-conversation-prism.html Il progetto antisocial: http://project.arnolfini.org.uk/projects/2008/antisocial/ Segnalati da Bruce Strerling Colonna sonora: L'ombra della luce di Franco Battiato Tags :  Team Work | Complessità | Comunicazione | Creatività | Innovazione | Tools | Progettazione Software |

Come migliorare la qualità del codice giorno per giorno

Questo post di PierG dichiara una tra le cose più importanti che ho imparato in questi ultimi tre anni di lavoro: Quando il tuo software si è trasformato in un ammasso di codice legacy, rifarlo da zero probabilmente è la cosa peggiore. Infondo i problemi di quel codice sono comiciati quando il software è stato scritto da zero: perché dovrebbero andare meglio  riscrivendolo da capo ancora allo stesso modo ? In linea con una ipotesi che avevo condiviso qualche tempo fa: Il codice quando è Legacy lo è dal momento stesso in cui viene scritto Il punto è che scrivere...

Product Owner: abbraccia l'incertezza

E' una presentazione davvero bella. Da indicazioni al Product Owner su come esprimere i requisiti e ai membri del team su come raccoglierli/scomporli/ragrupparli al meglio per Produrre il maggior valore di business $$$ Trovare le soluzioni/funsionalità che meglio realizzano l'obiettivo di business Procedere in modo da chiarire sempre meglio quello di cui si ha bisogno Garantire le funzionalità indispensabili al business in...

Quali applicazioni/siti Web preferire ?

Richard Stallman si scaglia contro le applicazioni Web. Dal suo ragionamento nasce un suggerimento che trovo utile e importante :         Conviene verificare che l'applicazione Web permetta di esportare e copiare i propri dati meglio se in un formato standard importabile in altri siti/applicazioni prima di scegliere una applicazione Web per se e per la propria azienda       (ad esempio il Blog di Ugi permette di esportare i propri post nel formato standard BlogML e Google permette di scaricare la propria posta con un client POP standard e di fare il back-up) Perchè usare una applicazione Web...

Riconoscere una buona idea?

Stavo riflettendo che non è sempre facile Citare un autore, un "guru", una sua idea presa da un suo libro/articolo/post, magari a sostegno di una propria tesi,  si Poi quando lui è li presente, cita la stessa idea e giunge a conclusioni opposte, è ancora facile riconoscere che l'idea è buona? Credo sia meno facile Quando una buona idea differente dalla propria viene da un collega  è facile riconoscerla ? Difficile: accettare che la propria idea è meno buona,  credere che riconoscerla  è come cedere la vittoria, temere che possa far perdere la stima E quando finalmente si riconosce una persona come esperta, come...

Ci vuole troppo tempo, non si può fare!!!

      In un team Agile quando il capo progetto (coach) smette di dire    "questo non lo possiamo fare cosi perché non c'è tempo"    e sprona il team a scrivere codice di qualità accade una cosa ... almeno strana !?!?!? Capita di sentire un membro del team dire     "Questo non lo posso fare, ci vuole troppo tempo !!!"           L'ho osservato diciamo pure vissuto in almeno 3 team differenti, di diverse nazionalità, sia con una code-base ampia e legacy che in progetti completamente nuovi e in parte coperti da  test, sia in domini applicativi ampi e molto complessi che in...

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 di Wiki numero 3: Firmarsi sul Wiki

Il contenuto del Wiki è un work-in-progress in continua evoluzione. Il Wiki si affianca a Forum, Blog, Articoli, Tips e Newsletter di UGI ed è adatto per ospitare i contenuti in modo visibile e permanente che desideriamo via via strutturare, organizzare, discutere e affinare facilmente e in modo veloce. Con il Blog è possibile dare visibilità ai propri contenuti sul Wiki e invitare al commento/confronto e alla partecipazione i propri lettori. Anche per questo è utile dare visibilità ai propri contenuti sul Wiki firmandoli.Walkthrough: crea la tua home page sul Wiki: - Vail alla pagina delle Home Page sul Wiki qui: HomePageSulWiki - Entra in modifica...

Manuale pratico di Wiki, numero 2

Ogni pagina del Wiki rappresenta un argomento trattato dal Wiki ossia un concetto: 1 pagina = 1 argomento = 1 concetto. In una pagina un concetto inserito in precedenza nel Wiki  può essere citato = linkato scrivendo il nome argomento in PascalCase. Le regole per scrivere e formattare il testo nel Wiki sono semplici, veloci da imparare e da usare. In ogni caso quando sei in modifica in una pagina, su lato destro c'è il riquadro che riporta le formattazioni più comuni: - Entra im modifica della pagina di prova - Clicca su 'Show tips....' nel riquadro a destra - Nota la descrizione delle...

Manuale pratico di Wiki, numero 1

Il WikiWiki è una ragnatela di pagine tra loro correlate, ecco un Walkthrough su come scrivere nelle pagine di UGIdotNETWiki: Apri la pagina di prova PaginaPerFarPratica Entra in modalità di modifica con il bottone Modifica o col doppio click Nel grande riquadro editabile indica una breve descrizione del contenuto della pagina scrivendo:Summary: Esercizio di realizzazione del Walkthrough. Vai a capo e scrivi:Questo è un esempio di scrittura nelle pagine del Wiki con gli stili più comuni come il '''grossetto''' e il ''corsivo o italico'' che dir si voglia. Mentre il +sottolineato+ non si usa spesso perché si potrebbe confondere con un link ;-) Visualizza l'anteprima della pagina...

Manuale pratico di Wiki, numero zero

In attesa della prossima iniziativa su UGIdotNETWiki (grazie a Riccardo e Roberto) mi sono deciso a postare un breve manuale (estremamente) pratico del Wiki. Bando alla chiacchiere, ecco le info preliminari per cominciare. Per andare in modifica di una pagina clicca sulla barra sinistra il comando Modifica: oppure fai doppio-click nel mezzo della pagina.Quando sei entrato in modifica, sulla barra destra hai a disposizione i comandi per Salvare, Annullare e per avere l'Anteprima della pagina modificata: mentre sul lato sinistro puoi editare il testo. Prova su questa pagina cavia. I comandi saranno utili nel prossimo Walkthrough.

Strong-Typing o Weak-Typing? La discussione prosegue

Grazie al contributo di Lorenzo la discussione tra pro e contro della tipizzazione forte e di quella debole è proseguita ed entrata nel dettaglio. Mi sembra che l'argomento sia stato sviscerato in modo chiaro e comprensibile cioè in modo tale da non rimanere astratto ma da avere una chiara relazione con le righe di codice .NET che scriviamo. Se qualche dubbio resta, qualche domanda o considerazione su casi specifici potrebbe aiutare, basta accodarla qui: TipizzazioneForteODebole.

Strong-Typing o Weak-Typing?

Simboli tangibili del Weak-Typing sono ad esempio: i Variant del VB6 gli object che compaiono tra i parametri dei metodi Equal, CompareTo, Add, Remove e Item del .NET 1.x ma anche i linguaggi di scripting interpretati come ASP. Le ragioni per sfruttare il Weak-Typing sono: aumentare il riutilizzo del codice aumentare la generalità di una procedura rimandare al più tardi possibile (a run-time anche dopo il deploy-time) la conoscenza del tipo specifico di un oggetto che un metodo riceverà in ingresso come...

Esperienza di Refactoring con ReSharper: resoconto

Clicca il titolo per leggere tutta la storia. Sono molto interessato a conoscere i commenti di altri utenti di ReSharper, di utenti di altri tool di Refactoring x .NET e anche dei tool di Java.

I namespace Alias sono utili?

Gli alias di namespace gli definisco nel codice così using sysDat = System.Data; using sysSql = System.Data.SqlClient; using sysXmlSrl = System.Xml.Serialization; using sysRtmSrl = System.Runtime.Serialization; e quindi per indicare il tipo DataRow scrivo sysDat.DataRow. Se invece nel codice scrivo using System.Data;  posso anche dimenticarmi che esiste il namespace System.Data e per indicare il tipo DataRow scrivo DataRow e basta.   Quando disegno il codice (sia up-front che col refactoring) uso i namespace per organizzare i tipi (classi, enum, etc.) raggruppando quelli logicamente correlati (un EventArgs insieme al suo evento, il tipo Spedizione insieme all'enum TipoSpedizione, etc.) [1]. Quando poi dichiaro, istanzio o referenzio quei tipi, il namespace in cui sono...

Quiz di programmazione OO

Quiz di programmazione: quanto bene conosci OOP? Cosa distingue più di tutto la programmazione OO dagli altri stili di programmazione? Quali strumenti tipicamente mettono a disposizione i linguaggi OO come C# e VB.NET (namespace, classi, costruttori, ...) e che funzione hanno? Cos'è una relazione di ereditarietà e che caratteristiche ha? Cos'è una gerarchia di classi? Che differenza c'è tra ereditarietà singola e multipla? Quando usare l'ereditarietà per creare diverse classi con parti comuni e quando invece usare un flag in...

I Generics del C# 2.0 e i Template del C++ ISO/IEC 14882

Confronto tra i Generics del C# 2.0 e i Template del C++ ISO/IEC 14882:   Generics C# 2.0 ...

I Generics del C# 2.0: quando sono preferibili alternative diverse?

Mi accodo ai precedenti blog sul tema: Le novità di C# 2.0 di Emanuele Del Bono Ancora sui Generics di Emanuele Del Bono Generics C# 2.0: termini mio Quando sono preferibili... alternative diverse?   Algoritmi generici Poco supportata e molto difficoltosa  la scrittura e l'utilizzo di algoritmi generici a causa delle limitazione dei generics del C#2.0(1). Per la realizzazione di algoritmi generici è più pratico ed efficace utilizzare la programmazione generativa, vedi il tool CodeSmith. Per questo nel Framework ad...

SOA... parliamone ;-)

Service-Oriented Architecture, avendo ricevuto un valido suggerimento ho lanciato il sasso SOA sullo stagno Wiki (esattamente qui: ServiceOrientedArchitecture). La discussione è aperta sulla scelta degli argomenti da trattare e su come strutturare i contenuti, ma chi ha già contenuti da inserire può naturalmente farlo. So che questo tema interessa molto a Pierre Greborio e che è ferrato sull'argomento, spero voglia dire la sua! Tags :  Progettazione Software |

OOP

ProgrammazioneOO Il tema della OOP sul wiki ha raccolto quasi tutti gli argomenti principali, manca da descrivere le gerarchie di oggetti e le gerarchie di classi e la relazione di ereditarietà. Chi ha il desiderio di trattare questi temi è il benvenuto. Messo questo mattone si aprono le discussioni sul DisegnoOO, (dai pattern agli antipattern passando per i principi del disegno senza dimenticare il refactoring) e anche qui per cominciare basta dire la propria opinione sui temi più interessanti ed il modo di organizzarli. Anche sulla programmazione .NET c'è un tema molto interessante che è la scrittura di codice sicuro, argomento di grande interesse che con il...

Test: programmazione OO e gli altri 7 paradigmi

  Oltre alla programmazione OO, nell'informatica moderna ci sono (almeno) altri 7 paradigmi di programmazione. Quanti paradigmi conosci? Cosa distingue veramente la programmazione OO dagli altri paradigmi? Cosa hanno a che fare questi paradigmi con .NET? La risposta la trovi qui. P.S. Se vuoi discutere, controbattere, commentare, contribuire, fare domande, scrivere esempi di codice sui vari paradigmi, puoi scrivere direttamente sulle pagine del Wiki .NET. Tags :  Progettazione Software |

Refactoring Applied

   Sono online slide ed esempio della sessione!  Tags :  Progettazione Software |  

Alcune foto del Workshop 2 Dic, Microsoft Italia - Segrate

    Provocato da Roberto Messora, ecco le foto dell'evento che ho raccolto:                       Cliccare per vederle intere "as ususal".   Tags :  Eventi | Progettazione Software |

Workshop 2 Dic, Microsoft Italia - Segrate

 Dopo  il viaggio di ritorno e il meritato riposo si è conclusa bene anche questa avventura del Workshop "Architecture & Management".   E' stata un'esperienza positiva grazie al pubblico preparato e interessato e all'ottima organizzazione dell'evento. Quindi grazie ad Andrea e ad UGIdotNET per l'organizzazione, a Microsoft Italia per aver ospitato l'evento e alle "signorine Microsoft" per averci accolto col sorriso e agli sponsor Microsoft, ObjectWay e Managed Design.   L'avventura è iniziata con un brivido perché solo all'arrivo ho saputo che il PC su cui dovevo fare l'esempio "live" di Refactoiring non c'era. L'amico Riccardo Golia ha messo a disposizione un fantastico portatile e ha dato il suo aiuto per installare e...

Refactoring Applied: pratica avanzata del Refactoring

   Ho completato ora le slides e gli esempi per il Workshop "Architecture & Management" e mi stò preparando per partire in quel di Milano.    Non ho avuto aggiornamenti da Andrea su eventuali aggiustamenti di agenda per evitare la collisione con la sua sessione Designs Patterns applied di comune interesse anKe a chi fa Refectoring. Confermo l'agenda della sessione: Abstract - Perché fare Refactoring?   Riconoscere le situazioni ed i problemi che si risolvono con il Refactoring - Quali i prerequisiti per fare Refactoring?   Dotarsi del necessario per applicare il Refactoring in continuo miglioramento - Come comprendere e reagire ai feedback del codice?   Esempio "Live" di Refactoring del 2° tipo applicato...

Le Slide sono disponibili!!!

I posti disponibili per registrarsi all'evento sono andati esauriti in soli 3 giorni e molti non hanno potuto partecipare, credo quindi sia notizia gradita: le slides dell'evento sono disponibili qui. A mio avviso l'intervento di Joseph Perlin è stato stellare e da non perdere sono gli spunti interessanti relativi al rapporto col cliente usando i Metodi Agili (XP, SCRUM), le paure dei programmatori e del cliente e la carta dei diritti del cliente e dello sviluppatore (da tenere appesa in ogni ufficio!!!), le valutazioni di compatibilità caratteriale nelle coppie di Pair Programming, gli spunti per iniziare a mettere in pratica XP, gli spunti illuminanti su Refactoring,...

Progettare software, la realtà italiana e della community .NET

In chat con alcuni colleghi preparati ed esperti ho potuto scambiare opinioni sulla realtà italiana dello sviluppo del software ed in particolare la realta della commnity di sviluppatori .NET. Riccardo Golia ha riassunto ottimamente le varie opinioni nel suo blog: Uno spunto di riflessione dalla chat MVP: la progettazione del software. Presto avrò modi di raccontare come ho potuto iniziare a mettere in pratica in forma graduale i buoni principi dii gestione di un progetto, progettazione e implementazione ossia mettere in pratica i valori di eXtreme Programming e le sue tecniche. Questo aspetto tecnico è molto interessante. La cosa però che + mi ha sorpreso in questa impresa (esperienza) è...

Perché .NET è più sicuro???

Ho letto il post .NET e Virus Writing di Matteo G.P. Flora ed i commenti tra cui quello di Lawrence Oluyede e Pierre Greborio e ne aprofitto per rispondere a questa domanda "latente": Perché .NET è più sicuro??? Parlando di sicurezza, questa domanda non ha nessun significato se prima non si precisa proteggere cosa e da chi? .NET aiuta in maniera innovativa ed efficace un utente a proteggere il proprio PC durante l'esecuzione di ogni programma .NET che potrebbe potenzialmente contenere codice malizioso. Questo significa che è responsabilità dell'utente assicurarsi di avere installato una versione genuina (non manomessa) e funzionante del .NET Framework ...

Essere un programmatore migliore

Ho appena letto con sorpresa queste due notizie http://www.rai.it/news/articolonews/0,9217,86649,00.html http://www.ansa.it/awnplus/internet/news/2004-09-23_2759234.html ed ho cercato di accoglierle in maniera costruttiva. I prodotti software che contribuisco a realizzare in tecnologia .NET per piattaforme MS si trovano a competere con prodotti realizzati da altri programmatori in tecnologia Java per piattaforme Linux. E quindi il lavoro che svolgono moltissimi programmatori (io compreso ;-) ha rilevanza in questa sfida: se il prodotto realizzato soddisfa i bisogni del cliente è un punto a favore di MS diversamente no. Come Programmatore mi sono ripromesso di scrivere codice tanto ...

Ancora su Patterns in Interaction Design

Ho aprezzato il link sulla UI Design Pattern specialmente la sezione "Web Design patterns" postato qui da Adrian. In particolare ho trovato utili gli stili qui indicati: - il link "Web-based Application" - il link "Form" - il link "Input Error Message" - l'intero gruppo "Basic Interactions" - l'intero gruppo "Navigation" - l'intero gruppo "Managing Collections" - l'intero gruppo "Page Elements" Se interessano anche le tecniche di modellazione della interazione Web segnalo questo link: http://www.luca.minudel.it/freestaff/ingsoftdotnet.htm dove si trova il documento  'ANCOM.REQ-SPE-DTL.1000.pdf'. Nel capitolo 'SPECIFICHE DELL'INTERAZIONE UTENTE' sono citati due riferimenti a tecniche di modellazione dell'interazione con l'UML e nel seguito del capitolo c'è una applicazione delle due tecniche combinate (prendendo il meglio di ogniuna delle due ;-). Tags :  Progettazione Software |

Semilavorati software per .NET

I Semilavorati software sono una realtà consolidata nella produzione industriale del software così come avviene da tempo negli altri settori industriali. E come negli altri settori industriali l'utilizzo di semilavorati favorisce la riduzione dei tempi e dei costi, il miglioramento delle funzionalità e della affidabilità, la riduzione dei rischi e l'aderenza agli standard. Un elenco di semilavorati di successo per .NET è disponibile quI! Tags :  Progettazione Software |

Differenze tra applicazioni WinForm/LAN e WebForm/Internet

Mentre è in corso un lungo download da Internet... colgo l'occasione di una domanda sul forum per stendere alcune considerazioni che ho raccolto durante la transizione da Client/Server ad Internet, la stessa che molte aziende hanno affrontato grazie a .NET (e che quindi ho vissuto da vicino). -  -  - Ci sono molte differenze architetturali tra WinForm e WebForm: 1) - L'interazione GUI di una applicazione WinForm è tipicamente sincrona mentre quella di una applicazione WebForm è potenzialmente asincrona (es. quando l'utente invia una richiesta al server, nel tempo che intercorre per ricevere la risposta può annullare la richiesta, fare una richiesta alternativa o...

Un po di pratica: Remoting, Web Service, NUnit e TDD

In un blog precedente ho introdotto e distinto la serializzazione ad opera del Remoting da quella ad opera degli ASP.NET Web Service. Passando dalla teoria alla pratica ecco l'articolo: Serializzazione: .NET Remoting, ASP.NET Web Service e l'interfaccia IXmlSerializable. Con un approccio estremamente pratico descrive come: distinguere tra la serializzazione del .NET Remoting e quella degli ASP.NET Web Service conoscere le peculiarità dei Web Service realizzati col .NET Remoting e quelli realizzati con ASP.NET testare con NUnit se una classe o una struttura è serializzabile per il .NET Remoting ...