<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Pensieri</title>
        <link>http://www.coding4art.com/category/24.aspx</link>
        <description>Pensieri</description>
        <language>en-US</language>
        <copyright>Maurizio</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <item>
            <title>Mini rivisitazione dei progetti a cui ho partecipato</title>
            <link>http://www.coding4art.com/archive/2010/07/20/mini-rivisitazione-dei-progetti-a-cui-ho-partecipato.aspx</link>
            <description>&lt;p&gt;Avendo visto negli ultimi anni un bel pò di applicazioni .Net di ogni tipo, avendo partecipato ad un bel pò di progetti e conseguentemente visto una quantità considerevole di righe di codice, di seguito elenco (in ordine sparso) le mie considerazioni sulla qualità media del codice sorgente da me visionato e su cui spesso e volentieri sono intervenuto in prima persona per correzioni e/o nuove funzionalità (leggasi elenco di brutture e/o coding horror): &lt;/p&gt;  &lt;p&gt;- La visibilità delle classi è una questione non tenuta nella giusta considerazione. Quando si crea una classe la si marca come "public", e tale resta per sempre, anche se la classe potrebbe essere "internal"; &lt;/p&gt;  &lt;p&gt;- il paradigma "&lt;a href="http://it.wikipedia.org/wiki/Programmazione_orientata_agli_oggetti"&gt;Object Oriented Programming&lt;/a&gt;" è scarsamente applicato, ed anche scarsamente conosciuto, e cosi si finisce spesso per avere, solo a titolò di esempio, codice duplicato, scarsamente coeso e altamente accoppiato; &lt;/p&gt;  &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/it-it/library/yz2be5wk(VS.80).aspx"&gt;Boxing e unboxing&lt;/a&gt;: concetto non conosciuto dai più, e cosi accade che il tipo "object" è usato a sproposito, e la tipizzazione dei dati diventa una rarità; &lt;/p&gt;  &lt;p&gt;- Concatenazioni di stringhe a go-gò, anche se è arcinoto che questa operazione non è performante a causa dell'immutabilità dell'oggetto stringa che "stressa" parecchio il garbage collector; &lt;/p&gt;  &lt;p&gt;- Utilizzo delle eccezioni nella logica di business dell'applicazione per notificare situazioni particolari; &lt;/p&gt;  &lt;p&gt;- Utilizzo indiscriminato di Dataset/Datatable in ogni layer applicativo (front-end compreso), al posto di oggetti di dominio non anemici, cioè dotati di attributi e di comportamento (sì lo so, chiedo forse troppo, questo è &lt;a href="http://domaindrivendesign.org/resources/what_is_ddd"&gt;Domain Driven Design&lt;/a&gt;...), con conseguente profilerazione di classi per la gestione delle entità trattate dalla applicazione, es. CustomerManager, OrderManager, ecc.     &lt;br /&gt;Su questo argomento potrei aprire una lunga discussione, circa colui che io definisco "il programmatore del dataset"; &lt;/p&gt;  &lt;p&gt;- La modularità di una applicazione e il concetto di &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns"&gt;"Separation of Concern" (Soc)&lt;/a&gt;  non attira l'interesse della maggior parte degli addetti ai lavori. Come già discusso &lt;a href="http://www.coding4art.com/archive/2010/07/09/settore-ingegneristico-o-artigianale.aspx"&gt;qui&lt;/a&gt;, è più importante rispettare i termini di consegna puttosto che creare software di qualità, ed ecco che si finiisce per scrivere software quasi monolitici, dove le responsabilità si "accavallano" in modo netto ed evidente tra i vari moduli. In applicazioni ASP .Net il code-behind si è spesso rivelato una trappola, nel senso che la classe "pagina" contiene una quantità spropositata di codice, ad esempio negli event handlers, alla faccia del concetto di basso accoppiamento; &lt;/p&gt;  &lt;p&gt;- Assenza di Unit Test, non nel senso che nessuno li scrive ma nel senso che il &lt;a href="http://www.agiledata.org/essays/tdd.html"&gt;Test Driven Development&lt;/a&gt; per molti è una sigla non pienamente compresa; in quei pochi scenari in cui ho visto scrivere Unit Tests questi non erano mai strutturati nel modo corretto secondo lo schema &lt;strong&gt;&lt;em&gt;arrange-act-assert&lt;/em&gt;&lt;/strong&gt; ma erano per lo più invocazioni di metodi a scopo di debugging. In pratica, più che "Sviluppo guidato dal test" ho visto l'esatto opposto &lt;img alt="smile_sad" src="http://spaces.live.com/rte/emoticons/smile_sad.gif" /&gt;&lt;/p&gt;  &lt;p&gt;Fortunatamente ho anche visto codice scritto benissimo, bene, o almeno in modo decente&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/169.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/07/20/mini-rivisitazione-dei-progetti-a-cui-ho-partecipato.aspx</guid>
            <pubDate>Tue, 20 Jul 2010 10:16:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/169.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/07/20/mini-rivisitazione-dei-progetti-a-cui-ho-partecipato.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/169.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/169.aspx</trackback:ping>
        </item>
        <item>
            <title>Settore ingegneristico o artigianale ?</title>
            <link>http://www.coding4art.com/archive/2010/07/09/settore-ingegneristico-o-artigianale.aspx</link>
            <description>&lt;font face=""&gt;
&lt;p&gt;Poichè mi piace tenere insieme i miei pensieri su questo blog, riporto la mia risposta all'amico &lt;a href="http://blogs.ugidotnet.org/pape/Default.aspx"&gt;Andrea Saltarello&lt;/a&gt; sullo spinoso tema da lui sollevato in un &lt;a href="http://www.guisa.org/forums/t/240.aspx"&gt;thread&lt;/a&gt; sul forum di &lt;a href="http://www.guisa.org"&gt;GUISA&lt;/a&gt;, ovvero "ma siamo solo artigiani ?"&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;em&gt;"Hai perfettamente ragione quando affermi che "siamo un settore artigianale", e ciò dipende a mio avviso &lt;br /&gt;
dal fatto che non tutti sono disposti a migliorarsi professionalmente per comprendere "il perchè" piuttosto del "come".&lt;br /&gt;
Molti sanno come impiantare un sito Web MVC; pochi conoscono però il pattern, ancora meno sanno che quel pattern si chiama "Model 2" e non MVC; qualcuno addirittura non conosce nemmeno il significato dell'acronimo, ma tutti però ci spacciamo come architetti poichè, come affermi giustamente, "architetto" è una buzzworld figa da mettere sul bigliettino da visita o nella firma elettronica della mail. &lt;br /&gt;
Questo è solo un esempio, ma ne potrei citare molti altri.&lt;br /&gt;
Come sicuramente ben sai, esistono realtà IT dove ad una applicazione è richiesto solo che funzioni; non è minimamente richiesto e non si ha nemmeno la consapevolezza dell'importanza di avere software modulare che evolve nel tempo con il minimo impatto sulle funzionalità esistenti.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;La qualità del prodotto software è una caratteristica scarsamente apprezzata, anche dagli stessi addetti ai lavori; ciò che conta è consegnare la versione 1 funzionante, per poter fatturare, non importa come viene sviluppata.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Qesto è un settore dove "i fiorellini" non sono richiesti.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Quindi, altro che TDD e sviluppo incrementale... "&lt;br /&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;/font&gt;&lt;img src="http://www.coding4art.com/aggbug/163.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/07/09/settore-ingegneristico-o-artigianale.aspx</guid>
            <pubDate>Fri, 09 Jul 2010 13:06:14 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/163.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/07/09/settore-ingegneristico-o-artigianale.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/163.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/163.aspx</trackback:ping>
        </item>
        <item>
            <title>Quando applicare una metodologia alla cieca è controproducente...</title>
            <link>http://www.coding4art.com/archive/2010/06/29/quando-applicare-una-metodologia-alla-cieca-e-controproducente.aspx</link>
            <description>&lt;p&gt;&lt;font face=""&gt;Spesso applicare una metodologia per il gusto di farlo, oppure solo perchè si è un profondo sostenitore di una certa tecnica ignorando completamente il contesto in cui si sta operando, può essere più deleterio che non applicarla proprio, e si finisce per avere una attenzione maniacale ai dettagli (che di norma costtuiscono il dogma della metodologia / tecnica che si sostiene), anche ai più insignificanti e più difficili anche solo da notare, e contemporaneamente una completa disattenzione per aspetti molto più evidenti che emergono giorno per giorno, ai quali si finisce poi per non dare il giusto peso.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;L'argomento di questo post sono le metodologie di gestione di un progetto software con elevata complessità e criticità, ed il post è volutamente ermetico, ma sicuramente, rileggendolo a distanza di tempo, mi ricorderò molto bene del contesto che mi ha portato a sfogarmi con un post come questo.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/157.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/06/29/quando-applicare-una-metodologia-alla-cieca-e-controproducente.aspx</guid>
            <pubDate>Tue, 29 Jun 2010 14:54:13 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/157.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/06/29/quando-applicare-una-metodologia-alla-cieca-e-controproducente.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/157.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/157.aspx</trackback:ping>
        </item>
        <item>
            <title>Considerazioni molto personali sul lavoro nel mondo IT</title>
            <link>http://www.coding4art.com/archive/2010/04/23/considerazioni-molto-personali-sul-lavoro-nel-mondo-it.aspx</link>
            <description>&lt;p&gt;&lt;font face=""&gt;Negli ultimi tempi sono stato coinvolto in una attività di recruitment mirata a reperire figure professionali nel mondo IT con skill particolarmente elevato, diciamo una figura di senior developer con conoscenze anche in ambito architetturale. Ho accettato con entusiasmo questa attività poichè ero curioso di capire se la preparazione universitaria in ambito informatico fosse sufficientemente in grado di reggere l'impatto con il mondo del lavoro e con la realtà di tutti i giorni (questo ovviamente per i laureati, ma lo stesso discorso può essere applicato anche per chi laureato non è).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;E le sorprese non sono mancate.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;Ecco, in sintesi, le mie considerazioni:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;- Una laurea non è assolutamente garanzia di preparazione e competenza. Spesso i neolaureati, si "adagiano sugli allori", pensando che il loro titolo di studio basti e avanzi, ma in realtà non è così, poichè i ritmi con cui si evolve la tecnologia sono talmente elevati che solo con una spiccata dose di passione e/o sacrificio è possibile essere aggiornati in modo almeno sufficiente;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;- L'attività di senior developer o comunque qualsiasi attività prettamente tecnica spesso sono viste come attività "rognose" e molto impegnative, per cui le ambizioni dei candidati a volte si spostano verso ruoli di più alto livello, o comunque non a stretto contatto con la tecnologia (es. coordinatore di risorse o addirittura analista funzionale);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;- I cv sono spesso gonfiati a sproposito. Per un appassionato non c'è nulla di male nell'inserire "ottima conoscenza teorica di ....." senza aver avuto la possibilità di mettere in pratica questa conoscenza. Diverso è inserire esperienze anche pluriennali senza alcuna valenza. Non è possibie sentirsi dire che non si sono mai utilizzate le caratteristiche più elementari del polimorfismo quando sul cv è scritto "pluriennale esperienza nella programmazione ad oggetti", oppure "ottima conoscenza di ASP. NET" e poi non si sa a cosa serve il ViewState; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;- L'atteggiamento del candidato durante una intervista non è spesso quello giusto da tenere in situazioni del genere, dove, a mio avviso, occorre mostrare soprattutto umiltà di fronte a ciò che si conosce e soprattutto di fronte a ciò che non si conosce;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;Fortunatamente si incontrano anche persone appassionate di questo lavoro e competenti, che ripagano ampiamente gli sforzi effettuati.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/153.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/04/23/considerazioni-molto-personali-sul-lavoro-nel-mondo-it.aspx</guid>
            <pubDate>Fri, 23 Apr 2010 10:57:32 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/153.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/04/23/considerazioni-molto-personali-sul-lavoro-nel-mondo-it.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/153.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/153.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Basic Tips &amp;amp; Tricks Community Day a Milano</title>
            <link>http://www.coding4art.com/archive/2010/03/19/visual-basic-tips-amp-tricks-community-day-a-milano.aspx</link>
            <description>&lt;p&gt;Ieri pomeriggio ho partecipato al &lt;a href="http://www.visual-basic.it/" target="_blank"&gt;Visual Basic Tips &amp;amp; Tricks Community Day&lt;/a&gt; tenutosi a Milano.&lt;/p&gt;  &lt;p&gt;Devo dire che è stato un pomeriggio decisamente interessante dal punto di vista tecnologico, permettendomi di focalizzare alcuni concetti su tecnologie che uso o che vorrei usare, e mi riferisco a TFS 2010 ed Entity Framework 4.0&lt;/p&gt;  &lt;p&gt;L’evento si apre con una sessione di &lt;a href="http://www.geniodelmale.info/" target="_blank"&gt;Lorenzo Barbieri&lt;/a&gt; che parla delle varie versioni di Visual Studio 2010 che saranno disponibili a breve e delle novità, veramente tante, della nuova versione dell’IDE.&lt;/p&gt;  &lt;p&gt;In ordine sparso:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font face="Lucida Sans Unicode"&gt;Possibilità di effettuare ricerche parziali con l’Intellisense;&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;Intellisense nei file Javascript migliorato, ora vengono risolti anche i simboli presenti nei files inclusi, e non solo quelli del file in debugging; &lt;/li&gt;    &lt;li&gt;Funzionalità di “&lt;strong&gt;search a you type&lt;/strong&gt;”, per intenderci tipo Google quando ci presenta i risultati della ricerca mano a mano che scriviamo il testo da ricercare; &lt;/li&gt;    &lt;li&gt;Funzionalità di “&lt;strong&gt;Call Hierarchy&lt;/strong&gt;”, per il momento presente solo con il linguaggio C#, ovvero la possibilità di navigare a partire da un metodo / proprietà / costruttore verso il codice chiamante / chiamato a partire dal punto di navigazione scelto; &lt;/li&gt;    &lt;li&gt;Modalità “&lt;strong&gt;Web only&lt;/strong&gt;” dell’IDE, ovvero la possibilità di utilizzare un IDE con il solo codice in primo piano e tutte le finestre di dialogo minimizzate; &lt;/li&gt;    &lt;li&gt;Selezione del testo per colonne; &lt;/li&gt;    &lt;li&gt;Gestione degli add-in con un apposito &lt;strong&gt;Extention Manager&lt;/strong&gt; dedicato; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Intellitrace&lt;/strong&gt; (feature molto molto utile ed interessante per troubleshooting), ovvero un componente capace di registrare tutto quello che avviene nel codice quando questo è in esecuzione, una specie di scatola nera dell’applicazione, utilizzabile su applicazioni scritte con la versione 2.0 del Framework in poi ; &lt;/li&gt;    &lt;li&gt;Test di automazione della UI; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;font face="Tahoma" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Tahoma"&gt;Poi è stata la volta di &lt;a href="http://community.visual-basic.it/Alessandro/" target="_blank"&gt;Alessandro Del Sole&lt;/a&gt;, che ha mostrato le novità di Team Foundation Server 2010 in ottica singolo sviluppatore o piccoli gruppi di lavoro.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Tahoma"&gt;Successivamente &lt;a href="http://community.visual-basic.it/tdj/" target="_blank"&gt;Antonio Catucci&lt;/a&gt; ha mostrato le novità di Entity Framework 4.0, ovvero:&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Possibilità di gestione della &lt;strong&gt;Foreign Key&lt;/strong&gt; nel modello dati, senza che la stessa sia nascosta (come è noto nel mondo dei database relazionali una relazione tra 2 tabelle si traduce con la presenza di una colonna in comune tra le due tabelle, che costituisce appunto la relazione, nel mondo OOP una relazione di questo tipo si traduce con la presenza di una proprietà tipizzata nell’oggetto “padre”);&lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;Lazy Loading&lt;/strong&gt;” attivo sempre di default;&lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;Pluralization&lt;/strong&gt;” dell’Entity Set basato sulla grammatica inglese. Con Entity Framework 1.0 questa mancanza mi ha provocato qualche problema, in quanto va gestito a manina;&lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;Model-First Design&lt;/strong&gt;”, feature decisamente interessante che consente di creare un domain model senza che sia necessariamente presente un database da cui partire. Con la versione 1.0 il domain model è forzatamente creato a partire da una base dati esistente;&lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;T4 Code Generation&lt;/strong&gt;”. Con questa feature il codice generato da Entity Framework può essere basato su template, fornendo quindi la possibilità di generazione personalizzata dello stesso.&lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;POCO Entity (Plain Old CLR Objects&lt;/strong&gt;)”, anche questa è una feature molto interessante, ovvero la possibilità di usare nel Domain Model della classi “pulite”, magari già esistenti senza che debbano per forza di cose ereditare da una classe specifica di Entity Framework;&lt;/li&gt;    &lt;li&gt;Gestiona automatica delle relazioni molti a molti, senza la visualizzazione della terza tabella di legame tra le due relazionate;&lt;/li&gt;    &lt;li&gt;Nuovo controllo &lt;strong&gt;EntityDataSource&lt;/strong&gt; per il binding dei dati in ASP .NET.&lt;/li&gt;    &lt;li&gt;Metodo “&lt;strong&gt;ApplyCurrentValues&lt;/strong&gt;”. Permette di gestire le modifiche apportate su oggetti “detached”, ovvero al di fuori dell’ObjectContext attivo, e di propagare le stesse modifiche sull’oggetto avente la stessa chiave presente nell’ObjectContext (oggetto “attached”).&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;Come è evidente la versione 4.0 di Entity Framework contiene una pletora di novità, che sicuramente consentiranno a questo ORM made in Microsoft di superare alcuni limiti di “gioventù” della precedente versione.&lt;/ul&gt;&lt;img src="http://www.coding4art.com/aggbug/147.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/03/19/visual-basic-tips-amp-tricks-community-day-a-milano.aspx</guid>
            <pubDate>Fri, 19 Mar 2010 11:04:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/147.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/03/19/visual-basic-tips-amp-tricks-community-day-a-milano.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/147.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/147.aspx</trackback:ping>
        </item>
        <item>
            <title>Anobii, la mia libreria virtuale</title>
            <link>http://www.coding4art.com/archive/2010/02/08/anobii-la-mia-libreria-virtuale.aspx</link>
            <description>Finalmente ho modo di mettere un pò in ordine la mia libreria, non fisicamente ma almeno virtualmente. Ho infatti creato su &lt;a href="http://www.anobii.com" target="_blank"&gt;Anobii&lt;/a&gt;, un social network incentrato totalmente sui libri, la mia libreria virtuale dove piano piano organizzerò per argomento i numerosissimi libri in mio possesso, tecnici e non, onde consentire anche ai più curiosi di darci una sbirciatina per curiosare cosa conservo gelosamente sui miei scaffali.   &lt;p /&gt;  &lt;p&gt;&lt;a href="http://www.anobii.com/jdm/books" target="_blank"&gt;Qui&lt;/a&gt; è accessibile il mio scaffale virtuale, per il momento ancora molto limitato.&lt;/p&gt;  &lt;div id="anobii_blogbadge_4bdc1d1acc1d6ef5" class="anobii_blogbadge"&gt;   &lt;div class="classic"&gt;     &lt;div style="background-image: none; border-bottom: #c7c7c7 1px solid; text-align: center; border-left: #c7c7c7 1px solid; padding-bottom: 7px; line-height: 19px; background-color: transparent; text-indent: 0px; margin: 0px auto; padding-left: 0px; width: 110px; padding-right: 0px; display: block; border-collapse: separate; background-repeat: repeat; font-family: 'Lucida Grande', verdana, 'Lucida Sans Unicode', sans-serif; float: none; color: black; font-size: 12px; overflow: visible; border-top: #c7c7c7 1px solid; border-right: #c7c7c7 1px solid; text-decoration: none; padding-top: 12px" class="shelf_badge"&gt;       &lt;div style="background-image: none; border-bottom-color: black; text-align: center; padding-bottom: 5px; line-height: 19px; background-color: transparent; border-top-color: black; text-indent: 0px; margin: auto; padding-left: 5px; padding-right: 5px; display: none; border-collapse: separate; background-repeat: repeat; font-family: 'Lucida Grande', verdana, 'Lucida Sans Unicode', sans-serif; float: none; color: black; border-right-color: black; font-size: 11px; overflow: hidden; border-left-color: black; text-decoration: none; padding-top: 5px" class="shelf_top"&gt;&lt;a style="background-image: url(http://static.anobii.com/anobi/live/image/blog_badge_wooden_logo.png); border-bottom-color: #0062c6; text-align: center; padding-bottom: 0px; line-height: 19px; background-color: transparent; border-top-color: #0062c6; text-indent: -1000px; margin: auto; padding-left: 0px; padding-right: 0px; display: block; border-collapse: separate; background-repeat: no-repeat; font-family: 'Lucida Grande', verdana, 'Lucida Sans Unicode', sans-serif; float: none; color: #0062c6; border-right-color: #0062c6; font-size: 11px; overflow: visible; border-left-color: #0062c6; text-decoration: none; padding-top: 0px" class="logo" href="http://www.anobii.com"&gt;&lt;span style="background-image: none; border-bottom-color: #0062c6; text-align: center; padding-bottom: 0px; line-height: 19px; background-color: transparent; border-top-color: #0062c6; text-indent: -1000px; margin: auto; padding-left: 0px; padding-right: 0px; display: inline; border-collapse: separate; background-repeat: repeat; font-family: 'Lucida Grande', verdana, 'Lucida Sans Unicode', sans-serif; float: none; color: #0062c6; border-right-color: #0062c6; font-size: 11px; overflow: visible; border-left-color: #0062c6; text-decoration: none; padding-top: 0px"&gt;aNobii&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;        &lt;table style="width: 100%" class="badge"&gt;&lt;tbody&gt;           &lt;tr&gt;             &lt;td style="height: 100px" valign="bottom" align="center"&gt;&lt;a class="cover_image" href="http://www.anobii.com/badge_product?badgeId=4bdc1d1acc1d6ef5&amp;amp;pos=1"&gt;&lt;img src="http://widgets.anobii.com/badge_image?badgeId=4bdc1d1acc1d6ef5&amp;amp;pos=1&amp;amp;seq=65620" /&gt;&lt;/a&gt;&lt;/td&gt;           &lt;/tr&gt;         &lt;/tbody&gt;&lt;/table&gt;        &lt;div style="margin: 0px auto" class="shelf_bottom clear"&gt;&lt;a href="http://www.anobii.com/jdm/books" target="_blank"&gt;Visit my shelf&lt;/a&gt;          &lt;div class="link_to_anobii"&gt;&lt;a href="http://www.anobii.com/"&gt;www.anobii.com&lt;/a&gt;&lt;/div&gt;       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;&lt;img src="http://www.coding4art.com/aggbug/140.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/02/08/anobii-la-mia-libreria-virtuale.aspx</guid>
            <pubDate>Sun, 07 Feb 2010 23:09:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/140.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/02/08/anobii-la-mia-libreria-virtuale.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/140.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/140.aspx</trackback:ping>
        </item>
        <item>
            <title>Java meglio di .NET ?</title>
            <link>http://www.coding4art.com/archive/2010/01/25/java-meglio-di-.net.aspx</link>
            <description>&lt;p&gt;Il titolo di questo post è volutamente ironico, ed affronta un argomento all'ordine del giorno in ogni ambiente di lavoro e/o community in cui si ha a che fare con le tecnologia legate al mondo del software.&lt;br /&gt;In questi ambienti capita spesso infatti di sentire o di partecipare a discussioni circa il fatto che quella o quell'altra tecnologia prevale a parità di contesto di utilizzo, es. Java è meglio di .NET,  Oracle è meglio di Sql Server, o viceversa.&lt;br /&gt;Questi dibattiti, per quello che è la mia esperienza sul campo, sono spesso e volentieri condizionati dalla unilaterale conoscenza di una particolare tecnologia, e raramente colui che l'appoggia ha una consolidata esperienza su entrambe le piattaforme.&lt;br /&gt;Ho assistito molto spesso a discorsi tipo: &lt;/p&gt; &lt;p&gt;"&lt;em&gt;questo pezzo di codice se fosse scritto in Java non avrebbe quel bug...&lt;/em&gt;", &lt;/p&gt; &lt;p&gt;oppure &lt;/p&gt; &lt;p&gt;"&lt;em&gt;se questa query fosse in PL-SQL le prestazioni sarebbero sen'altro migliori&lt;/em&gt;".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;In questo interessantissimo &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/01/24/about-technical-debates-both-in-general-and-regarding-asp-net-web-forms-and-asp-net-mvc-in-particular.aspx" target="_blank"&gt;post&lt;/a&gt; di &lt;a href="http://weblogs.asp.net/scottgu" target="_blank"&gt;Scott Guthrie&lt;/a&gt; in merito all'ultimo dibattito tecnologico in essere tra gli sviluppatori web (meglio ASP .NET Web Forms o ASP .NET MVC ?), è sintetizzato il mio pensiero sull'argomento:&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;em&gt;"Great developers using bad tools/frameworks can make great apps. Bad developers using great tools/frameworks can make bad apps. Be very careful about making broad assumptions (good or bad) about the quality of the app you are building based on the tools/frameworks used".&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;Sono le persone che partecipano allo sviluppo a rendere vincente o perdente un software, a prescindere dalla particolare tecnologia applicata, ed è un grave errore pensare che solo perchè si è scelto di utilizzare l'ultima moda tecnologica un progetto software debba per forza essere vincente.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/138.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2010/01/25/java-meglio-di-.net.aspx</guid>
            <pubDate>Mon, 25 Jan 2010 21:28:50 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/138.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2010/01/25/java-meglio-di-.net.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/138.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/138.aspx</trackback:ping>
        </item>
        <item>
            <title>Piccolo sfogo...</title>
            <link>http://www.coding4art.com/archive/2009/07/15/piccolo-sfogo.aspx</link>
            <description>&lt;p&gt;Una pensiero che spesso mi viene in mente guardando il codice sorgente è: ma perchè scrivere in 10 righe di codice quello che potrebbe essere scritto in una o due righe ? &lt;img alt="smile_sad" src="http://spaces.live.com/rte/emoticons/smile_sad.gif" mce_src="http://spaces.live.com/rte/emoticons/smile_sad.gif" /&gt;&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/110.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2009/07/15/piccolo-sfogo.aspx</guid>
            <pubDate>Wed, 15 Jul 2009 00:56:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/110.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/07/15/piccolo-sfogo.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/110.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/110.aspx</trackback:ping>
        </item>
        <item>
            <title>Le direttive using devono essere poste all'interno del namespace</title>
            <link>http://www.coding4art.com/archive/2008/07/22/le-direttive-using-devono-essere-poste-all-interno-del-namespace.aspx</link>
            <description>&lt;p&gt;Questo post inizia con una frase tratta da un &lt;a href="http://www.hanselman.com/blog/BackToBasicsDoNamespaceUsingDirectivesAffectAssemblyLoading.aspx" target="_blank"&gt;post&lt;/a&gt; di &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;Scott Hanselmann&lt;/a&gt; con cui mi trovo completamente d'accordo:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Don't believe everything you read, even on a Microsoft Blog.              Don't believe this blog, either!                                                           Decide  for yourself with experiments if you need a tiebreaker!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Credo sia proprio vero, mai fidarsi ciecamente di quello che si legge in giro, soprattutto quando seri dubbi farebbero pensare il contrario.&lt;/p&gt;  &lt;p&gt;Il motivo è presto detto: utilizzo normalmente &lt;strong&gt;FxCop&lt;/strong&gt; come strumento di analisi del codice sorgente, lo trovo molto completo e ben fatto. Spinto dalla curiosità ho voluto utilizzare &lt;strong&gt;Source Analysis&lt;/strong&gt;, un tool gratuito fornito da Microsoft ed integrato nell'IDE di Visual Studio. Dopo la primissima prova fatta mi ha incuriosito una sua segnalazione:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;SA1200 - All using directives must be placed inside of the namaspace.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Per farla breve, tutti i files sorgenti del mio progetto provocavano una segnalazione di questo tipo poichè le direttive using erano poste esternamente alla definizione del namespace, così come automaticamente viene creato uno scheletro di una classe all'interno dell'IDE. La segnalazione in questione invita invece ad includere le direttive using all'interno della definizione del namespace, semprecchè sia presente. Facendo qualche ricerca in giro ho scoperto che in questo modo il compilatore segnala immediatamente una eventuale ambiguità tra i nomi dei tipi creati all'interno del proprio namespace e i tipi presenti nei vari namespace del .NET Framework. E fin qui nulla di strano. &lt;/p&gt;  &lt;p&gt;Ho scoperto inoltre che questa guideline servirebbe anche ad aumentare le prestazioni, almeno nei casi specifici, in quanto forzarebbe il "lazy loading" degli assembly e non il caricamento immediato. In altre parole, quando il viene invocato un metodo di una classe e viene compilato il codice "just in time" (JITTED) il lazy loading permette di caricare in memoria solo gli assembly referenziati che servono all'invocazione del metodo stesso, e non tutti gli assembly referenziati da una classe, a prescindere se utilizzati o no da una specifica invocazione di un metodo. Questo permette di caricare solo lo stretto necessario anche se una classe referenzia un assemby non utilizzato da un metodo.&lt;/p&gt;  &lt;p&gt;Sinceramente non mi è venuto in mente un solo valido motivo per cui una direttiva using posta in un certo modo potesse influenzare l'attività del CRL a runtime, e sono rimasto alquanto dubbioso sulla effettiva validità. Prima che potessi avere il tempo di fare una prova specifica mi son trovato questo &lt;a href="http://www.hanselman.com/blog/BackToBasicsDoNamespaceUsingDirectivesAffectAssemblyLoading.aspx" target="_blank"&gt;post&lt;/a&gt; di &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;Scott Hanselmann&lt;/a&gt;, al quale rimando per una esauriente spiegazione, che dimostra come purtroppo ciò non sia affatto vero, cioè gli assembly referenziati vengono caricati tutti i memoria immediatamente, a prescindere se il metodo in questione li usa oppure no, ed a prescindere se le direttive using vengono poste all'interno o all'esterno della definizione di namespace.&lt;/p&gt;  &lt;p&gt;Quindi la morale è: non credere mai a quello che leggi, neanche se lo leggi da questo blog :), ma sperimenta sempre.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/92.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2008/07/22/le-direttive-using-devono-essere-poste-all-interno-del-namespace.aspx</guid>
            <pubDate>Tue, 22 Jul 2008 02:59:42 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/92.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2008/07/22/le-direttive-using-devono-essere-poste-all-interno-del-namespace.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/92.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/92.aspx</trackback:ping>
        </item>
        <item>
            <title>Tecnologia in evoluzione ed il suo utilizzo</title>
            <link>http://www.coding4art.com/archive/2008/04/01/tecnologia-in-evoluzione-ed-il-suo-utilizzo.aspx</link>
            <description>&lt;p&gt;In questi giorni mi è capitato frequentemente di leggere su blogs e forum vari commenti entusiastici sull'adozione delle ultime tecnologie appena sfornate - parlo di Silverlight, Ajax e LINQ, le quali hanno ormai preso prepotentemente piede nello sviluppo di applicazioni. Premesso che utilizzo anch'io sia Ajax che LINQ, ritengo che il tutto debba essere calato nel contesto opportuno di utilizzo, senza lasciarsi prendere troppo dall'entusiasmo come invece vedo che accade. Può sembrare scontato ma la realtà è ben diversa. Comprendo perfettamente che lo sviluppatore esperto e soprattutto appassionato affronti le sfide tecnologiche che molto frequentemente il nostro mestiere ci offre, con l'entusiasmo di un ragazzino, ma credo che ultimamente si stia un po' esagerando. Sembra quasi che oggiogiorno ogni applicazione web debba essere necessariamente Ajax-enabled e sembra che LINQ to SQL, o meglio gli ORM in generale, abbiano sostituito di colpo l'utilizzo di strumenti per così dire tradizionali quali le store procedure, diventate improvvisamente uno strumento superato. Riflettendo un attimo, questo entusiasmo non è certo una novità nel mondo delle tecnologie software: come esempio non isolato, ricordo che  successivamente all'introduzione dei web services tutti gli utilizzatori di software hanno adottato incondizionatamente questa tecnologia anche se le loro applicazioni non erano affatto interoperanti se non con sè stesse...L'unificazione del paradigma di sviluppo in funzione dei diversi contesti di utilizzo si è verificata solo con l'avvento di WCF. Accadrà lo stesso con le attuali tecnologie ?&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/79.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid>http://www.coding4art.com/archive/2008/04/01/tecnologia-in-evoluzione-ed-il-suo-utilizzo.aspx</guid>
            <pubDate>Mon, 31 Mar 2008 22:27:51 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/79.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2008/04/01/tecnologia-in-evoluzione-ed-il-suo-utilizzo.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/79.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/79.aspx</trackback:ping>
        </item>
    </channel>
</rss>