Development

Codice, considerazioni...

“Enterprise”?

Non è la polemica che mi interessa, perché è solo una inutile perdita di tempo, ma è il concetto su cui (provare a) ragionare. Dopo tante prove, “fregature”, problemi (dal 1994 in poi…), una decina di anni fa abbiamo “trovato”, per alcuni nostri prodotti ASP.NET + MSSQL un provider “locale” di servizi web in hosting condiviso (che viene spesso considerato da molte grandi aziende come quello “da dilettanti…”) che si è dimostrato eccellente: per anni ed anni mai un problema, rapidità e livello di assistenza ottimi. Due anni fa abbiamo scelto per scrupolo di spostare il database di...

Fioretti per un futuro migliore

Egregio Cliente, mi impegno nel farmi carico col massimo impegno delle tue esigenze di salvare capra e cavoli. D’ora in poi, però, terremo conto entrambi che per attraversare il fiume salvando capra e cavoli servono ben 7 viaggi invece di 1…

MSDN code samples per Windows Phone 7.1

Datati 26/08/2011 (ieri), li trovate qui: http://msdn.microsoft.com/en-us/library/ff431744.aspx

Addio CardSpace 2.0

Sono effettivamente rimasto quasi totalmente disconnesso dal mondo (non solo informatico) negli ultimi 4 mesi, ma mi ha davvero deluso leggere il necrologio di CardSpace 2.0.

SQL Azure tip#1

Come spiegato in questa pagina, è consigliabile impostare nella connection string per un db su SQL Azure i due parametri seguenti: Encrypt=True; TrustServerCertificate=False ;

Community Tour di mercoledì a Bergamo

BLIN BLON Si informano i Signori dev & co. che è in arrivo il diretto CommunityTour in arrivo da Napoli e diretto a Milano. Si prega di predisporsi in posizione fantozziana per aggrapparsi adeguatamente al convoglio. Prossima fermata: Mozzo, nei pressi di Bergamo (a 9 minuti dall’uscita di Dalmine dell’A4), in cui sarà possibile assistere a sessioni relative a .NET, architettura, Umbraco, Azure, Windows Phone 7, Automated Software Factory, Domain-Driven Design, WCF e Silverlight. Il convoglio effettuerà la sosta fino a sera inoltrata, in modo da permettere ad eventuali intenzionati di assaporare le particolarità culinarie locali...

“Validation First” development in DDD e refactoring

La validazione, a livello di dominio, di business e di DAL, è la vera garanzia che le entità che stiamo creando/utilizzando contengano dati coerenti. Nella versione finale dell’applicazione è ovviamente assolutamente cruciale che esista un unico punto centralizzato dell’applicazione (ovunque esso sia) che si occupi della validazione di dominio ed un altro che si occupi della validazione a livello di database, in modo da sapere sempre dove andare ad agire quando effettuiamo del refactoring sul domain model (discorso differente per la validazione a livello di casi d’uso, che si può centralizzare ma rimane comunque frammentata). La cosa di...

IT

Ho letto il post di Ivan rammaricandomi ancora una volta nel leggere parole di sconforto riguardo il settore italiano dell’IT. Lasciando un commento, come al solito mi stavo dilugando; ho “tagliato” all’osso ma non sono riuscito ad esprimere il concetto e quindi...  WLW. Il paragone economico presentato da Ivan è sicuramente demoralizzante per chi lavora nel mondo dell’IT, su questo concordo pienamente, ma poi mi sono soffermato a chiedermi se sia realmente così inappropriata come richiesta da parte del cliente o sia anche la nostra visione a dover evolvere. “Ce ne sono 4 su 100 come Lei”...

“Automated” Software factory(ies?) @ ALM Day

Venerdì ho partecipato all’ALM Day di Milano, che IMHO si conferma come un appuntamento da non perdere. I complimenti vanno veramente a tutti gli speakers ed anche all’organizzazione, ma ovviamente ci sono tematiche che coinvolgono più di altre la propria esperienza lavorativa attuale. L’ultima sessione sulle software factories mi ha quindi coinvolto in modo particolare, soprattutto per il fatto che, per motivi che francamente al momento non comprendo, si sente parlare molto poco di questo tipo di “strumento” che a mio avviso è ormai semplicemente indispensabile per realizzare applicazioni di qualità a costi concorrenziali. E’ stato pertanto...

Windows Identity Foundation RC

Ok, ok... per gli amici “trattasi” dell’evoluzione di CardSpace & co, una delle tecnologie IMHO tra le più importanti per il futuro, che rischiano IMHO di finire nello sgabuzzino perchè poco “cool”. Inutile dire che sarebbe, per tutti, come tirarsi una “mazzata” sui… “ditini”! Io non l’ho ancora scaricata, spero di riuscire a dargli un’occhiata a breve. Chi vuole, la trova qui: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=defd2019-a61f-4327-9332-6a4b6103527a   Fonte: The RC of Windows Identity Foundation is here!

L’erba voglio

Voglio una serie di assemblies contenenti classi capaci di farsi carico di quasi tutte le esigenze “comuni” di sviluppo di un’applicazione. Voglio che, per quanto possibile, queste classi non siano legate ad un particolare ambiente di UI oppure ad una particolare tecnologia, un particolare framework (escluso .NET, ovviamente) o tool. Voglio che presentino delle API semplici! Voglio evitare di dover ricordare ogni volta come utilizzarle ed ancor più voglio fare in modo che non richiedano della documentazione per capirne l’utilizzo. Voglio che siano loro, i loro metodi, i loro nomi a guidarmi in modo naturale nell’utilizzo. ...

Progetto sospeso? Ciao...

Penso di averlo sempre saputo, ma forse solo oggi ho “formalizzato” il concetto nella mia mente. Ogni volta che parte un progetto, magari interno o come investimento, senza una scadenza “ultima” e poi rimane in stand-by per la necessità di dare priorità ad altri progetti commissionati, nove volte su dieci le uniche cose a rimanere valide della vecchia Solution sono l’analisi iniziale e l’esperienza acquisita in quel progetto. Il codice di solo due anni prima, spesso risulta talmente differente da quello attuale ed obsoleto al punto da rendere evidente il vantaggio nel cestinare l’esistente e ripartire con una...

[Brainstorming] Anonymous DTO

Quando “indovinate chi” mi introdusse, ormai anni fa, al concetto di base degli Anonymous Types mi comparve subito un sorriso da buongustaio sulla faccia. Di contro l’aver scoperto poco più tardi che tali oggetti sono (giustamente) utilizzabili solo come variabili locali smorzarono di parecchio l’entusiasmo. Non che questo riduca il loro grande valore, ma so di non essere l’unico che, pur apprezzando i vantaggi dei DTO, non sia proprio veramente così felice ogni volta che si rende conto di doverne inserire uno “ad hoc” nella solution. Oggi però mi sono reso conto di un aspetto che forse ho sempre...

SW Factory Enhancements

Approfittando del ritardo a fine luglio nella ripresa di una commessa ho deciso di dare una piccola “botta” alla nostra software factory, in particolare per quanto riguarda la generazione di Presentation e View. Quando si sviluppa un software si deve giustamente sottostare alle “regole” dell’Evidence-Driven-Development (termine inventato scherzosamente qualche anno fa, commentando la giusta osservazione di Andrea sul passaggio “esigenza->sviluppo” e sull’errore di inventarsi i requisiti) e di conseguenza non ci si può permettere di soffermarsi troppo su ogni dettaglio, ogni casistica ed ogni feature “nice to have” perchè la clessidra non si ferma e di conseguenza il costo...

Eppur si muoveva…

Nel mio precedente post di stamattina riportavo un’alternativa per l’implementazione di INotifyPropertyChanged basata sullo StackTrace. Come si evince dallo stesso Namespace, la classe StackTrace viene utilizzata per scopi relativi alla diagnostica, quindi il primo pensiero quasi naturale é stato “ok, in release non andrà”! Poi penso... beh, ma Exception ha una property StackTrace che funziona anche in Release. Creo un progettino Console di prova, creo un po’ di metodi “a cascata” per riempire lo StackFrame. Compilo in Release, copio solo l’eseguibile… Funziona! Ohibò! Erroneamente convinto del risultato, passo all’implementazione. Il tempo stringe, vorrei “evadere”...

Yet another INotifyPropertyChanged implementation

Il post di Matteo mi aveva già stuzzicato, ma non conquistato del tutto per un paio di motivi. La variante riportata oggi da Corrado mi ha suggerito una possibile soluzione che poi si è rivelata forse ancora più “lineare” di quanto mi aspettassi, permettendo di centralizzare il tutto in un unica classe “helper” esterna, con i vantaggi che ne derivano. Così il “set” riportato da Corrado potrebbe diventare (chiedo venia per non aver ancora installato un code formatter per WLW): set {     if (!(value.Equals(userName))     { ...

AJAX HTML Editor

Arrivato proprio nel momento in cui mi serviva! :-) Grazie!!! Fonte: http://blogs.msdn.com/italy/archive/2009/05/16/ajax-control-toolkit-nuova-versione-disponibile.aspx

VB6 update

Prima ho pensato di aver letto male, poi ho pensato ad uno scherzo ma mi sono accorto che il primo aprile ormai è passato da un pezzo, alla fine mi sono rattristato pensando a chi è ancora costretto ad utilizzare VB6... Forza ragazzi, avete tutta la mia solidarietà!

Abc ...defg

Qualche giorno fa un mio cliente mi ha chiesto la disponibilità per supportare una persona nel suo percorso di formazione relativo a .NET e poche settimane prima mi era arrivata un'altra richiesta simile. In realtà negli ultimi due anni ho ricevuto diverse volte questa richiesta ed in un modo o nell'altro, a seconda di entrambe le disponibilità, credo e spero di essere sempre riuscito a condividere quelle nozioni apprese in questi anni grazie soprattutto ad UGIdotNET e Microsoft. Perché lo scrivo qui? Come praticamente è avvenuto in tutte queste occasioni stavo riscrivendo più o meno la solita mail con qualche...

Linq2DAL?

Premesso che la crescenza che ho mangiato a pranzo aveva un aspetto non troppo rassicurante... :-) Ecco la (folle?) idea che continua a frullarmi in testa da mesi: considerato che in effetti "LINQ è *il* query model idiomatico offerto dai compilatori 2008 di C# e VB" vorrei ovviamente utilizzarlo nelle applicazioni che sviluppiamo, ma mi trovo di fronte ad una difficoltà. In quasi tutte le soluzioni che progetto, i layers superiori sono indipendenti non solo dalla base dati, ma anche dalle tecnologie/tools utilizzate nel DAL. Utilizzando questo genere di tool, si ha a che fare con il contesto di persistenza,...

Asta la vista, baby!

Personalmente inaspettata quanto condivisibile la notizia riportata da Andrea. Ho recentemente utilizzato Linq2Sql, più che altro al fine di utilizzarlo almeno una volta in vita, per realizzare una singola pagina web che esegue banalmente delle CRUD dirette su una singola tabella. Francamente avrei impiegato molto meno tempo generandomi le statement con il tool che qualsiasi developer dell'era pre-ORM avrà scritto/adottato, comunque posso cercare il mio lato "buono" ed affermare: "peccato, per applicazioni di questo tipo era ottimo". Ma per tutto il resto... ;-) Cmq, scherzi a parte, comprendo la difficoltà di chi ha scelto di basare un nuovo prodotto su...

Tra il dire e il fare...

...a volte passano mesi, anche anni! Più di due mesi fa ho scritto (dai, non è ancora da passato remoto...) che avrei provato a pubblicare qualche esempio relativo al breve video. Non mi andava proprio, però, di pubblicare degli esempi non "eseguibili" per l'assenza di alcune librerie referenziate (seppur OT rispetto all'argomento del video) ed ho preferito cercare un'altra soluzione che soddisfasse da un lato le esigenze "commerciali" e dall'altro quelle della community. MSDN Code Gallery, per motivi burocratico/amministrativi che evito di citare, si è rivelata un'ottima scelta e qualche settimana (?) fa ho pubblicato alcune librerie necessarie per far...

Dove abiti?

In indexOf, nella provincia di bindWithEvent... Vabè che i bytes di Igor ormai sono famosi, ma considerarli pure utenti dei form di ricerca mi sembra davvero esagerato! :-)     

Community Days 2008

Ho avuto la fortuna di riuscire a partecipare a tutti i workshops di UGIdotNET dal 2003 ad oggi, ma questi due giorni ho dovuto davvero sudarmeli tra scadenze ed impegni presi (con tanto di invio mail al cliente poco prima di mezzanotte!). Ogni workshop di questi anni ha avuto modalità, contenuti, coinvolgimento ed emozioni differenti, ma non ce n'è mai stato uno che non abbia apprezzato. Anche nei casi più unici che rari in cui gli argomenti non matchavano molto con il mio percorso professionale del momento, sono comunque tornato a casa felice di aver potuto rivedere tanti amici...

Model-View-Presenter in salsa Duz

Dovendo descrivere ad una persona le modalità con cui ad oggi utilizzo il pattern Model-View-Presenter, ho optato per la realizzazione di un (modesto) video. Nulla di particolarmente accademico, anzi lo scopo è decisamente più pratico; ma ho semplicemente pensato che dovendolo comunque realizzare potrebbe rivelarsi anche una base su cui prendermi gli insulti confrontarsi su UGIdotNET. Per fare qualche passo indietro, la mia difficoltà iniziale era relativa al (troppo) tempo che richiede un'implementazione "pura" di MVP con una view completamente passiva ed inoltre dal fatto che una view di questo tipo non permettesse di sfruttare a fondo i vantaggi specifici degli specifici...

ROTFC (alias La matematica dei Geeks #3)

Single a = 14.56F;Single b = 5.02F;Single sum = 19.58F;Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine(a + b);Console.WriteLine(sum == (a + b)); //FalseConsole.WriteLine(sum.Equals(a + b)); //TrueConsole.ReadLine(); Single a1 = 14.56F;Single b1 = 254.02F;Single sum1 = 268.58F;Console.WriteLine(a1);Console.WriteLine(b1);Console.WriteLine(a1 + b1);Console.WriteLine(sum1 == (a1 + b1)); //FalseConsole.WriteLine(sum1.Equals(a1 + b1)); //FalseConsole.ReadLine(); Propongo una sessione per i prossimi Community Days: "Le addizioni".   Update: dimenticavo un tassello...

Comitato di salvaguardia del contesto di persistenza

Sarà quasi sicuramente un caso, ma in giro per il web vedo veramente pochi riferimenti al contesto di persistenza e sulle problematiche ad esso connesse. Non che la cosa non mi faccia dormire la notte, ma ci sono veramente tanti aspetti a riguardo che ho dovuto affrontare nell'ultimo anno (incredibile come vola il tempo!) e mi sorprende che se ne parli davvero così poco. Mi rendo conto di scrivere cose scontate, ma (citando nozioni apprese dal buon Janky): NO contesto di persistenza? NO lazy load delle entities (tramite OR/M)! ...

Il lupo perde il pelo...

"Favor object composition over class inheritance"! Da anni continuo a sentire questa frase eppure ogni tanto ci ricasco. :-( Fortunatamente sbattendo il naso contro il muro, poi la memoria funziona meglio!

[IMHO] Ruoli, permessi, gruppi

In questi giorni, continuando l'opera di refactoring (e abbondante rewriting) su una applicazione presa in... consegna, mi sono ritrovato nuovamente di fronte ad una gestione degli account... (continua)

[Forum] BB-Editor

Come scritto al Ghizza sul forum in merito al... forum (gh gh...) alla fine abbiamo optato per un editor BB Code da inserire in seguito nella GUI web del progetto forum. Ovviamente ci siamo prima guardati attorno (anche se devo ammettere che personalmente non sono andato oltre le 2 pagine di ricerca di Google) per vedere se esiste già qualche editor BB-Code per Asp.NET, ma non sono emersi candidati. Quindi è nato un workspace su CodePlex per hostare lo sviluppo del controllo e a dire il vero forse è proprio quello che mi fa piacere perchè in questo modo qualsiasi utente del futuro forum (nel...

[Forum] PreAlpha di... un prototipo!

So che l'iniziativa non ha raccolto praticamente quasi nessun consenso (continua)

Persistenza "spontanea"? Autopersistenza?

Qualche giorno fa mi sono trovato di fronte ad una eccezione sollevata da NHibernate che mi ha fatto prima dannare e poi riflettere. Cercando di farla breve, mentre recuperavo da db un oggetto di tipo A veniva sollevata un eccezione riguardante un oggetto di tipo B che non aveva legami con nessuna delle altre entità del domain model. In effetti la causa non era riconducibile all'oggetto A, ma dipendeva dal fatto che avevo istanziato un oggetto di tipo B (quindi ancora transiente) e lo avevo associato ad un terzo oggetto, che a sua volta aveva aggiunto quell'oggetto B alla bag di un...

"My" review

Più cresce la complessità dell'architettura di una soluzione (niente di che, nel mio caso, ovviamente... ), più mi trovo a scrivere cose tipo: sample.InsertedBy = Authentication.AuthenticationManagerFactory.GetAuthenticationManager().CurrentUser; Il codice diventa sempre più dannoso per il tasto "." tanto più aumenta la profondità di annidamento degli AbstractFactory. Il pensiero è andato subito alla classe My introdotta in Visual Basic 2005 (anche se ormai uso al 90% C#) e stavo pensando ad una classe simile anche se rigorosamente internal (l'associazione di colori è puramente casuale) in cui riversare le chiamate ai metodi statici più gettonati, tipo: sample.InsertedBy = MyBiz.CurrentUser; Non so se siano in tanti ad aver adottato...

GpTiming @ CodePlex

Nato dopo l'idea della piattaforma forum/blog, GpTiming si è reso degno del suo nome spuntando la pole position, o meglio la pole publication, rispetto agli altri due progetti. (continua)

"quel che non c'è, non costa e non si rompe"

(...) Dalla frase "quel che non c'è, non costa e non si rompe", sono riuscito anche a spuntare una riflessione personale... (continua)

Chicchirichì

Avrei preferito evitare di "cantare" così presto... E' sempre meglio, IMHO, parlare di qualcosa di "tangibile" piuttosto che di un'idea che non ha ancora "toccato terra".

Mi sembrava poco sensato d'altronde (continua)

Le guide svogliate

Quando sono "in buona" e vedo certe cose sorrido: Un pulsante con un testo, es. "DoSomething", ed un bel tooltip con "Push the button to DoSomething". MA VAAAAAA? Ma chi lo avrebbe mai detto? Ed io che pensavo che bisognasse guardarlo per 3 secondi di fila schioccando le dita, per far succedere qualcosa...

Refactoring o... rewrite?

Lunedì ho dato una prima occhiata alle pagine di una parte di applicazione ASP.NET che dovrò espandere nelle prossime settimane.

Sapevo a priori che il tipo di codice che mi sarei trovato davanti era scritto con una metodologia decisamente differente da quella che ormai sono abituato ad utilizzare da un po' di anni (continua)

Insalata di codice

Il titolo del post farebbe pensare ad una versione estiva del menù del giorno e invece l'argomento non fa pensare a tavole imbandite.

In realtà, anzi, l'argomento è tutt'altro che leggero...(continua)

Bandiera nera ai CSS-layout

Per l'ennesima volta, all'ennesimo nuovo progetto web ho dedicato tempo invano nel tentativo di impostare un layout tableless "non elementare".

(Continua)

TDD, UnitTesting ed il significato di "qualità del software".

Il post di Raf ha già espresso in modo particolarmente chiaro molti concetti che condivido perfettamente.

Lo so... sembra pecoronismo scrivere "agganciandosi" al trenino, ma in realtà dopo i CDII...

(continua...)

Appunti post-pizza

Come scrivevo venerdì sera, mi farebbe piacere trovare il tempo ed un modo per fare un test "concreto" sul mare di tecnologie nuove non ancora utilizzate in produzione.

Da un veloce censimento mentale è nato un elenco (continua)

ReMixed

Vorrei solo "loggare" qualche impressione al volo sulle due giornate del ReMix appena concluso. (leggi)

Contesto: buzzword o keyword?

Settimana scorsa, chiacchierando con due nostri amici di fronte ad una carrellata di polente in ogni forma e salsa, è saltata fuori una battuta su come il termine "contesto" venga usato così spesso dai progettisti. Al di là della semplice battuta, già da un po' di tempo mi sono reso conto di quanto anche io utilizzi quella parola. Ci ho anche già riflettutto in passato e credo il mio utilizzo di quella parola sia quasi sempre mirato. Non mi piacciono di norma quei discorsi seriosi che non hanno un contesto, che iniziano dalla citazione di un servizio al telegiornale e finiscono con il citare come elemento di discussione un'esperienza personale, gettando concetti e...

Attimi alla scrittura di codice nativo...

E va bene che WM Smartphone 2003 è stato uno dei primi nel suo genere,e va bene che il Compact Framework 1.0 era il primo della sua stirpe... Prima ti accorgi (il che forse può anche essere comprensivo) che Sql CE non supporta il CF 1.0 per Smartphone,poi ti accorgi che i serializzatori presenti nel framework "full" qui non ci sono,va bene anche che i typed DataSet (AAAARGH, questa parola sul mio blog!!!!) non ci sono e bisogna fare tutto a manina,ma... ...manco Guid.NewGuid()?????? :-( "Attimi" che si arriva a scrivere il tutto in codice binario! Meno male che nel Compact...

Provare ReSharper adesso è più semplice

Con la nuova release 2.5.2 di ReSharper non è più necessario richiedere a JetBrains una key per scaricare ed utilizzare la trial valida 30 giorni. IMHO, una decisione ottima...

NH.Steps ++

Durante una "chattata" con Marco di più di un mese fa, gli dissi che non concordavo con la metodologia da lui illustratami di creare una Session per ogni nuovo Form (Win o Web poco cambia) perchè non mi va assolutamente di "legare" in alcun modo la UI con i livelli sottostanti, ne l'idea di un BizLayer non "stateless". Tuttavia qualche settimana dopo, con molto più tempo e più calma a disposizione, al Mastering di Janky ho avuto la possibilità di comprendere quanto sia necessario gestire e mantenere il più possibile "vivo" il contesto di persistenza (la Session, nel caso di NHibernate), ma neanche la soluzione ipotizzata...

Primo giorno andato...

Domani seconda metà del Mastering NHibernate con Janky. Definire solo come "attiva" la partecipazione dei presenti oggi pomeriggio, nonostante l'abbuffata al buffet, quando si è entrati nel "vivo" sarebbe limitativo!!! Basti pensare che siamo usciti 2 ore dopo la fine prevista della giornata. Povero Janky, lo stiamo spremendo come un limone, pardon... come un arancio! Bello bello bello!

ISpecialCase

Non molto tempo fa, avevo inserito nei miei progetti una mia interfaccia IUnknowEntity che mi ha permesso di far gestire (o forse far digerire) gli special case "Unknow" (i "Missing" IMHO vanno gestiti dal DAL) a NHibernate. In poche parole tutti gli special case "Unknow" delle mie entità implementano l'interfaccia IUnknowEntity e sviluppando un PropertyAccessor custom per NHibernate si può dire semplicemente al custom Getter di inserire null nel db nel caso in cui l'entità che deve persistere implementa IUnknowEntity. BTW, di recente mi sono anche reso conto che come ISetter può essere tranquillamente utilizzato il BasicSetter se la relativa proprietà della classe utilizza una lazy initialization...

Duz' Snapshot (2/3)

Proseguo con la corposa istantanea passando a NHibernate (è vivamente sconsigliata la lettura a tutti i Janky deboli di cuore...), lasciandomi come ultima parte quella che più mi sta coinvolgendo. (Continua...)

Intellisense in Web.config e ASP.net Web Site Administration Tool

Ogni volta mi dimentico dei cazzotti che si tirano 'sti due e impazzisco per 5 minuti! http://blogs.ugidotnet.org/giorgio/archive/2005/11/22/30387.aspx

Duz' Snapshot (1/3)

Era da un bel po' di post che non facevo il punto sulla mia malsanità mentale informatica. Vediamo se si riesce a recuperare...

(Continua...)

L'incubo dell'ISV

Finire un prodotto software, presentarlo ad un potenziale cliente esponendogli tutte le virtù ed alla domanda: Bene bene ma... una domandina: la fa QUESTA cosa? cercare il sinonimo più indolore per rispondere: "no"! :-) Spero che non mi succeda mai!!!

Spot the difference

...tra VAB e VAB. Che si tratti del sequel della campagna promozionale Microsoft? Scherzi a parte, sinceramente non so chi sia il primo ad aver pensato alla "validation by attribute", ma di certo ad un workshop ormai negli annali qualcuno ne aveva già parlato...

Validazione: dove, come, quando, perchè... IMHO.

La validazione è uno degli aspetti a cui ho iniziato a dare un volto nuovo da quando è comparso il VAB . In tutta sincerità, prima del VAB il mio concetto di validazione era (continua...)

Il caldo di fine settembre che da alla testa...

Confesso, non senza un pizzico di vergogna, che ieri, verificando l'avanzamento di Northwind Starter Kit, per un istante mi era venuto in mente, nonostante la risicatissima disponibilità di tempo, di provare a capire se avrei potuto dare anche solo qualche piccolo aiutino; non so... tipo: rinominare i files, svuotare i cassonetti del garbage collector, lucidare gli StringBuilder... Ma mi è bastato fare un salto sul  nuovo spazio su CodePlex e vedere la "formazione"... Andrea (Ooooleeè)Lorenzo  (Ooooleeè)Corrado (Ooooleeè)Janky (Ooooleeè)Raf (Ooooleeè)Ricky (Ooooleeè) ...per farmi una bella risata e dirmi: "MA SMETTILAAAA!" Va beh, torno a scornarmi su XAML che è meglio!

DNN? Mah...

Stavo valutando la possibilità di utilizzare DotNetNuke 3.4.5 per realizzare una sorta di mini "portale" sperimentale. Il motivo principale per cui avevo inizialmente pensato a DNN è legato in particolar modo al ridotto budget in termini di tempo che potrò dedicare al progetto, soprattutto nelle prime fasi e speravo che DNN fosse, in un certo senso, pronto all'uso nel giro di un'oretta o giù di lì (citando il mitico Franco, in stile "schiscia el butùn, spara el canùn!"). I requisiti, in questa prima fase, sono veramente minimi: il sito deve avere una skin grafica personale (tanto per capirci, non quella standard di...

Partner vacante

Dopo gli enormi sforzi (compreso un bel salto delle ferie d'agosto) compiuti per mettere a punto nei tempi previsti la prima alpha del complesso engine di un software che fungerà da base per molteplici gestionali, in questo agosto duemilasei succede anche che il partner commerciale che si era proposto come tale si riveli purtoppo non attendibile nei suoi propositi. Risultato? Nuova ricerca di un partner commerciale che distribuisca il software e progetto in naftalina fino a quando non verrà stipulato un nuovo accordo commerciale. Devo dire che tra una cosa e l'altra questa seconda metà di agosto si è divertita non poco a tirar...

Interfacce, classi astratte e code snippets: che bel trio!

Clicca per visualizzare

Intellisense in VS per i file di mapping NHibernate

Mentre cercavo tutt'altro (come sempre), ho "sbattuto il naso" su un paragrafo della guida di NHibernate che spiegava come attivare l'intellisense dell'editor XML di VS per i files di NHibernate. E' sufficiente copiare i due files nhibernate-mapping-2.0.xsd e nhibernate-configuration-2.0.xsd dalla cartella in cui si è installato NHibernate alla sottocartella (Cartella programmi)\Microsoft Visual Studio .NET 2003\Common7\Packages\schemas\xml\ nel caso di VS2003 oppure (Cartella programmi)\Microsoft Visual Studio 8\Xml\Schemas\ nel caso di VS2005.

Data Sources property drag&drop in Visual Studio 2005 (renamed)

Questo strano comportamento si verifica sia in C# che in VB: aggiungendo una nuova Object Data Source (per esempio una nostra classe di business) questa viene aggiunta alla finestra Data Sources e come si sa è possibile (bellisssssimo!!!) scegliere il tipo di controllo più adatto al tipo di proprietà e trascinare il campo sulla form in modo che VS crei per noi il controllo scelto, una label di descrizione (entrambi con nomi già "descrittivi")e crei il binding tra il controllo e la proprietà. Il problema riscontrato é che la label di descrizione (mentre il controllo in binding stranamente no) viene dichiarato all'interno della InitializeComponents() invece che...

[NHibernate] Date null e MinValue

In questi giorni sto proseguendo con lo sviluppo di un'applicazione che utilizza NHibernate per persistere i dati sul DB Sql. Si tratta del secondo progetto nel quale utilizzo NHibernate ed il primo era talmente particolare (un engine di report e query su base oggetti che sfruttava Reflection) che non mi sono neanche ritrovato realmente di fronte a problematiche real-world. Oggi pomeriggio, però, mi sono trovato di fronte ad un campo date del db che in alcuni casi doveva essere null. Lì per lì era come se mi fossi dimenticato dell'esistenza di questo tipo di problema... Ovviamente DateTime non accetta null (ok, nella 2.0 ci sono i nullable ma alla fin fine...

Code Snippets a go go...

Utilizzando i semplici code snippet generici di cui scrivevo qualche giorno fa, mi sono chiesto quanto, o meglio "fin dove", potessero essere utili. Da allergico cronico alla ripetitività la tentazione era forte ed allora settimana scorsa ho provato a buttare giù altri 3 "strani" snippet relativi ai layer di un'applicazione: uno snippet che scrive semplicemente i metodi base di CRUD nell'interfaccia di un DataAccessLayer (ok, son 5 righe, ma son sempre le stesse!!!!) il secondo che scrive i relativi metodi base nella classe dello strato di business (sempre 5 metodi, ma già con qualche riga in più!) l'ultimo scrive l'intera implementazione di un DAL basato...

DALFactory

Mi sembra molto carina la possibilità di utilizzare i Generics con la factory dei DAL. Invece di avere GetCustomerDAL(), GetOrderDAL() ecc.. si può utilizzare (e soprattutto scrivere) una sola funzione più o meno come la seguente: public static T GetDAL<T>(string entityName){      string dalProviderName = "NH"; //Get from config...      System.Reflection.Assembly dalAssembly = System.Reflection.Assembly.GetExecutingAssembly(); //The assembly that contains specific DAL implementations      return (T)dalAssembly.CreateInstance(string.Format("MyFullNamespace.DAL.{0}.{1}DAL", dalProviderName, entityName));} da utilizzare più o meno così:       DAL.ICustomerDAL dal = DAL.DALFactory.GetDAL<DAL.ICustomerDAL>("Customer"); E' sicuramente da mettere un po' a posto ma il punto di partenza mi sembra carino...

Code Snippets

E' probabile che ci sia in giro qualcosa di gran lunga migliore, ma dal momento che ultimamente non ne posso più di scrivere le stesse cose mi sono creato qualche banalissimo snippet per C# con le operazioni più comuni che non ho trovato negli snippet esistenti: Creazione delle classi relative allo Special Case (Unknow e Missing) Creazione della collezione tipizzata su base Collection<> Scrittura proprietà string con inizializzazione a String.Empty Scrittura proprietà DateTime con inizializzazione a DateTime.MinValue (de gustibus...) Scrittura proprietà Guid con inizializzazione a Guid.Empty Scrittura proprietà generica ma su più righe rispetto allo snippet di C# (per la lazy...

Samples II, sempre sicuri?

Che il concatenamento stringhe eseguito nel modo meno opportuno sia presente in più esempi contenuti nella guida di VS2005 è ormai accertato, ma guardando il codice d'esempio relativo a SymmetricAlgorithm ho notato che, oltre alla citata modalità di concatenamento, non viene neanche eseguita la Dispose() dei due FileStream. Ok, lo stream viene chiuso, e nella chiusura viene invocata la Dispose(), ma essendo codice "didattico" a mio avviso è sicuramente errato dare per scontato che lo sviluppatore (che tendenzialmente consulta la guida per "imparare") conosca il meccanismo interno della classe FileStream. Mi aspetterei piuttosto che ogni "sample", in merito alla Dispose, comunichi il concetto: "se implementa IDisposable, alla fine chiama 'sta Dispose". Anche perchè in una...

Namespace vs Filename

Sebbene siano due aspetti totalmente distinti tra di loro, ho notato che vengono utilizzati diversi approcci per la scelta del nome file di progetto e del namespace principale di progetto. C'è chi crea progetti usando nomi file "corti" (es. MioProgetto, DALMioProgetto, BizMioProgetto), lasciando tali anche i relativi namespace e nome assembly, e chi invece utilizza la nomenclatura "completa" (es. MiaAzienda.MiaSoluzione.MioProgetto, ecc). Considerato che, IMHO, la prima delle due scelte mi sembra la "meno corretta", personalmente tendo a cercare di avvantaggiarmi di entrambe le soluzioni in questo modo: creo la solution vuota col solo nome della stessa (es. MiaSoluzione), poi aggiungo i progetti specificando come filename il...

Le comodità moderne

Spesso ci si rende conto delle potenzialità che si hanno tra le mani solo quando relamente ci servono. Poco fa ho dovuto semplicemente rinominare il nome di una proprietà in una classe (in C#) di un business object e vedere che il buon Whidbey ha rinominato quel nome in tutta la soluzione (non solo nel progetto) ed in tutte le sue parti (data layer, business layer, GUI...) mi ha toccato il cuore!!! E forse mi ha smosso anche lo stomaco, visto che inizio a sentire un certo languorino. Ah, è l'una, ecco... Buon appetito!

Samples. Sicuri?

Leggendo queste righe di codice da uno dei "Samples" di Microsoft per C#2005 mi tornano in mente le "antiche" raccomandazioni sul concatenamento stringhe. Che sia cambiato qualcosa nella 2.0? if (_AppName.Length > 255) { throw new ProviderException("ApplicationName exceeded max length of " + 255); }

CType...

Tratto da MSDN: Dim dt As DateTime = CType(Convert.ChangeType(s, GetType(DateTime)), DateTime) No comment...

Wizard per i Test su Whidbey

Proseguendo con gli "smanettamenti seri" su Whidbey, ho provato ad aggiungere un progetto di Test, affidandomi al Wizard. Da smanettone cattivello la prima cosa che ho fatto è quella di provare a compilare e... tracckete! Ecco l'errore da conversione implicita: Dim target As Object = New Form1 Dim accessor As WinApp_Form1Accessor = New WinApp_Form1Accessor(target) e C#? Lo stesso... object target = new Form1(); TestProject2.WinApp_Form1Accessor accessor = new TestProject2.WinApp_Form1Accessor(target); In compenso su VB è comparso un bell'avviso con una proposta di correzione... peccato che invece di proporre un DirectCast, proponga un bel CType (non ditelo ad Andrea, mi raccomando!)

Eh beh... son traumi!

Dopo un po' di giochetti, di drag&drop e di righe scritte qua e là, stamattina ho provato ad iniziare a buttar giù un progetto reale con VS2005. Tutto sommato devo dire che il bilancio complessivo della giornata di "avvicinamento" a Whidbey, ovviamente a tratti "traumatica", è stato più che positivo, ma la cosa che MAI mi sarei aspettato è che sarei arrivato a fine giornata con l'idea più che accennata di iniziare ad utilizzare anche C# all'interno delle mie soluzioni! Personalmente al momento utilizzo VB.NET (2003) in tutti i progetti, non tanto per una scelta "tecnica" (infatti, dal mio modesto punto di vista,...

Videocorsi Microsoft sulle versioni Express della piattaforma VS2005

Sono disponibili all'indirizzo: http://lab.msdn.microsoft.com/express/beginner/default.aspx dei videocorsi Microsoft sulle versioni Express della piattaforma VS2005 e, come si intuisce dall'URL sarebbero dedicati ai principianti. Ho scritto "sarebbero" perchè forse alcune delle 16 lezioni (per un totale di 10 ore!) potrebbero comunque forse essere di interesse anche per chi semplicemente non ha mai affrontato qualcuno dei temi affrontati (tra cui, per esempio, XML in VS e l'utilizzo di RSS). Se qualcuno ha già avuto qualche "feedback" a proposito di questi corsi, i commenti sono aperti.

ShowDialog e DialogResult, che coppia!

Siamo ormai quasi arrivati alla "partenza" della 2.0 ed io riesco ancora a trovare solo adesso il tempo per capire alcuni "atteggiamenti" curiosi della 1.1. Probabilmente sarò l'ultimo... Visualizzare un form tramite .ShowDialog rende l'instanza di quel form particolarmente "sensibile" alla proprietà DialogResult. A dire il vero mi verrebbe da dire che "la fa quasi da padrone" viste le ultime provine ("provette" suona male...) che ho avuto incredibilmente tempo di fare stamattina. Per chi, come il "soprascritto", non abbia avuto tempo (o non abbia avuto voglia) in passato di approfondire alcuni aspetti legati a questo "rapporto" riporto un paio di spunti. Supponete di considerare come...

DirectCast( ... , ... ): ben 13 caratteri e due shift! ;-)

Sempre per la serie "la pigrizia nello schiacciare i tasti è tanta" ho "investito" 3 minuti per creare questa macro per VB (e C#, anche se lì i caratteri sono 2... ) che, selezionato il nome dell'oggetto, aggiunge il codice che scrive il DirectCast verso il tipo desiderato. Aggiungendo un bel pulsantino sulla barra degli strumenti il tutto sembra essere sufficientemente comodo. Potrebbe sembrare totalmente inutile, ma forse centra il fatto che avendo scelto di settare Option Strict On su un vecchio progetto in VB.NET la task list si è accesa come un albero di natale...  Meno male che esiste: Opzioni -> Progetti -> Impostazioni...

[WebServices] Copiare i valori da una business entity "originale" a quella proxy creata da VS e viceversa.

Chi fosse interessato all'argomento o avesse suggerimenti trova il codice qui:http://blogs.ugidotnet.org/duz/articles/18110.aspx

[ASP.NET] Effettuare un __doPostBack per passare un valore personalizzato

#########ModificatoNei feedback trovate il commento di Andrea Boschin che spiega la soluzione "corretta" al problema. Lascio comunque il testo originale coi miei passaggi, che mi sono stati comunque utili per conoscere meglio il PostBack e per capire meglio il funzionamento di CommandName e CommandArgument suggeriti da Andrea.######### Ieri mi sono trovato nella condizione di dover eseguire una singola operazione al click effettuato su un semplice link (ma poteva essere qualsiasi altro controllo) contenuto in un DataList associato a dati di uno UserControl. Non volevo perdere il ViewState degli altri UserControl e quindi anche della pagina stessa e la soluzione che (per ora) ho...

Utilizzare una icona incorporata nell'assembly corrente.

Se può essere d'aiuto a chi ancora non avesse affrontato l'argomento... (N.B. recuperato dal web e leggermente modificato)     Private Function GetIconFromExecutingAssembly(ByVal iconName As String) As Icon        Dim oStream As System.IO.Stream        Dim oAssembly As System.Reflection.Assembly        Dim sIcon As String        Dim oBitmap As Bitmap        'open the executing assembly        oAssembly = System.Reflection.Assembly.LoadFrom(Application.ExecutablePath)        sIcon = String.Format("{0}.{1}", oAssembly.GetName.Name, iconName)        'create stream for image (icon) in assembly        oStream = oAssembly.GetManifestResourceStream(sIcon)        'create new bitmap from stream        oBitmap = CType(Image.FromStream(oStream), Bitmap)        'create icon from bitmap        Return Icon.FromHandle(oBitmap.GetHicon)    End Function powered by IMHO Modificato il 07/01/2005 Su suggerimento di Enzo Colluto (vedi feedback) ecco un modo ancora più immediato: Dim myIcon As Icon = New Icon(GetType(myForm), "MYICO.ICO")

Banalissima macro per creare i blocchi property in VB.NET

Banale, lo so... ma dopo 3 volte che riscrivo le stesse cose mi viene l'orticaria! E così intanto provo anche IMHO...     Sub WriteSimpleVBProperty()        Dim propertyName As String = String.Empty        Dim privateMember As String = String.Empty        Dim propertyType As String = "String"        propertyName = InputBox("Property name:", "WriteSimpleVBProperty", propertyName)        privateMember = InputBox("Private member:", "WriteSimpleVBProperty", privateMember)        propertyType = InputBox("Property type:", "WriteSimpleVBProperty", propertyType)        Dim fx As New System.Text.StringBuilder        fx.Append(String.Format("    Private {0} As {1}", privateMember, propertyType))        Select Case propertyType.ToLower            Case "string"                fx.Append(" = String.Empty")            Case "date", "datetime"                fx.Append(" = DateTime.MinValue")        End Select        fx.Append(ControlChars.Cr)        fx.Append(String.Format("    Public Property {0}() As {1}", propertyName, propertyType))        fx.Append(ControlChars.Cr)        fx.Append("        Get")        fx.Append(ControlChars.Cr)        fx.Append(String.Format("            Return {0}", privateMember))        fx.Append(ControlChars.Cr)        fx.Append("        End Get")        fx.Append(ControlChars.Cr)        fx.Append(String.Format("        Set(ByVal Value As {0})", propertyType))        fx.Append(ControlChars.Cr)        fx.Append(String.Format("            {0} = Value", privateMember))        fx.Append(ControlChars.Cr)        fx.Append("        End Set")        fx.Append(ControlChars.Cr)        fx.Append("    End Property")        fx.Append(ControlChars.Cr)        DTE.ActiveDocument.Selection.TopPoint.CreateEditPoint.Insert(fx.ToString)        fx = Nothing    End Sub powered by IMHO