.NET
Se siete sviluppatori Embedded, o vi interessa comunque l’argomento sta per arrivare una serie di webcast sull’argomento Windows Embedded Standard7 con delle anteprime sulla nuova versione che sarà basato su Win8. Le sessioni saranno fatte dal caro amico Valter Minute e vi guideranno sul come realizzare applicazioni, ma soprattutto come “ritagliare” il sistema operativo in modo che soddisfi le esigenze della vostra applicazione. Maggiori dettagli li potete trovare nella pagina di iscrizione Windows Embedded for Application Developers, il primo della serie è il 6 giugno, per cui non perdete tempo :). Gian Maria.
Talvolta mi viene chiesto se conosco qualche generatore di codice per NHibernate, ovvero qualche cosa che possa partire da un database e possa generare classi e mapping in modo da essere operativi con NH in poco tempo. Sinceramente ne conosco qualcuno, ma non li ho mai usati. My Generation: http://www.mygenerationsoftware.com/portal/default.aspx NHGen: http://sourceforge.net/projects/nhgen/ Devart: http://www.devart.com/entitydeveloper/nhibernate-generator.html NHDesigner: http://www.mindscapehq.com/products/NHDesigner/default.aspx La ragione è forse in questo post, se ho già un databse fatto, la cui struttura non verrà modificata troppo spesso, Entity Framework mi permette una più rapida operatività,...
Leggendo questo post di Ayende concordo sul fatto che EF è sicuramente utile se ho un database legacy che debbo principalmente leggere, o dove non devo modificare troppo i dati. Con due click infatti si può importare tutta la struttura e iniziare subito a lavorarci, con un prodotto che è comunque molto migliore di un Dataset. La cosa che non mi è mai piaciuta di EF Designer, è che se il db è in continua evoluzione è un po “goffo” da gestire, ma se debbo “leggere” da un db esistente mi garantisce l’operatività in un paio di minuti, fattore...
Penso che oramai tutti lo sappiano, la potete scaricare qui. http://msdn.microsoft.com/en-us/windows/home/ Ci sono in giro anche interessanti articoli su come provarla mettendola su ferro senza il rischio di distruggere la vostra partizione primaria http://www.hanselman.com/blog/GuideToInstallingAndBootingWindows8DeveloperPreviewOffAVHDVirtualHardDisk.aspx Buon Build. Gian Maria
E’ finalmente uscita la CTP3 di SQL Server codename “Denali”, per chi fosse interessato potete trovare un witepaper sull’argomento. Le novità in pentola per SQL-Server sembrano molte, anche per noi developer. Con i developer tools codename “juneau” vengono introdotte feature molto interessanti, soprattutto leggiamo dalla pagina di MSDN di juneau (http://msdn.microsoft.com/en-us/data/gg427686) Developers will also appreciate the familiar VS tools we bring to database development, specifically; code navigation, IntelliSense, language support that parallels what is available for C# and VB, platform-specific validation, debugging and declarative editing in the TSQL Editor, as well as a visual Table Designer for both...
Debbo dirlo, sono un appassionato dell’Async CTP ed una delle cose che mi piace di più è che appena installato hai subito la possibilità di vedere degli esempi di codice, tra cui il mitico 101 c# async samples. (lo trovate tra i samples, uno degli aspetti più interessanti è che di esempi ce ne sono veramente tanti) La cosa interessante di questo esempio è che mostra come una certa operazione asincrona può essere fatta con l’aiuto di async e come invece la faremmo in C# 4.0, questo fa capire veramente bene come il codice sia veramente molto, ma molto...
Una delle novità più succose del TFS2010 sono i Lab Management. Per chi ancora non sapesse di cosa si stia parlando qui potete trovare una serie di video (sono brevi di circa 5 min l’uno e si guardano in un attimo) che fanno una overview di cosa sia e come si possa usare Lab Management. Vale la pena darci uno sguardino, anche solo per vedere di cosa si tratta. Per chi poi avesse voglia di provarli “live”, qui trovate una bella macchina virtuale già pronta, ma attenzione, non è di quelle che apri il Virtual PC, la lanci e...
Per chi lavora con i Database Project di Visual Studio (Developer edition o Team Suite), l’utility vsdbcmd.exe sarà già nota. Il vsdbcmd.exe è infatti quel programma a linea di comando che vi permette di aggiornare il database di deploy all’ultima versione risultante dalla compilazione di un Database Project. Questo programma è redistribuibile e gratuito, ma manca di interfaccia grafica. Per risolvere a questo problema potete consultare questo post di Benjamin Day che contiene il link ad una utility scritta da lui che fornisce un’interfaccia grafica al vsdbcmd.exe e lo rende decisamente più piacevole da usare. alk. Tags:...
In questo post, Brian Harry chiede cosa ne pensate sull’avere il tfs distribuito anche come Virtual Appliance. L’opzione è decisamente interessante, visto che alcuni sono un po “spaventati” dall’installazione di TFS, ed in questo modo potrebbero invece avere una macchina virtuale completamente preconfigurata e customizazre solo alcune parti, ma avere con pochi click un tfs funzionante. Fate pure i vostri commenti al post e fate sapere cosa ne pensate. Alk. Tags: TFS
Quest’anno a Roma e Milano, rispettivamente il 5 ed il 6 novembre si terrà l’ALM day. In questa edizione avremo, oltre a speaker internazionali del calibro di Brian Harry e Brian Keller, 4 MVP e tanti partner che parleranno di situazioni reali. Con un po di emozione posso dire che tra quei 4 MVP c’è anche il sottoscritto :), oltre a Giancarlo Sudano, Martin Woodward e Davide Vernole, per cui le giornate si prospettano decisamente interessanti. Tutti i dettagli sull’evento li potete trovare a questo indirizzo. Alk.
Ho una applicazione che ad un certo punto analizza una serie di blocchi di testo per trovare dei pattern e deve restituire una lista univoca di stringhe che matchano. La prima implementazione è stata di fare una List<String> ed ad ogni match fare un List.Contains ed aggiungere solo quando la stringa non compare già. Faccio i miei bei unit test ma quando metto in produzione mi accorgo che i dati su cui si lavora sono molto di più di quello che mi attendevo, io mi attendevo nell'ordine delle centinaia di match, mentre invece siamo nell'ordine delle decine di migliaia....su...
dovevo fare un componentino che dato un insieme di url le scarica tutte a blocchi, ho usato HttpWebRequest e chiaramente ho usato il BeginGetRequest per fare richieste asincrone. Il programma va bene ma ogni tanto si blocca inaspettatamente, ho scoperto quindi con il fiddler che se una url si incanta e non risponde bene non esiste timeout, ho aspettato 30 minuti e la callback non è mai stata chiamata. Questo comportamento è conosciuto e basta guardare in msdn per vedere che effettivamente nei loro esempi di codice si fa un abort manuale allo scadere di un timeout. Alk. Technorati Tags:...
Se qualcuno fosse rimasto incuriosito dal comportamento di linq to sql mostrato in un precedente post, sto piano piano facendo qualche post nel mio blog inglese in cui spiego come si lavora con gli Expression Tree
Alk.
Talvolta è necessario scaricare pagine internet, per questo scopo il .NET mette a disposizione varie classi, una delle quali è il WebClient, ecco un esempio
Dim wc As New System.Net.WebClient() wc.Headers.Add("Accept", "image/gif, image…)") wc.Headers.Add("Accept-Language", "en,it;q=0.5") wc.Headers.Add("UA-CPU", "x86") wc.Headers.Add("Accept-Encoding", "deflate, gzip") wc.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; …)")
ponete attenzione alla quarta riga, dove si mette l'Accept-Encoding, perchè quell'header dice al sito la lista di codifiche di trasmissione che voi capite, mettere "deflate" o "gzip" come nell'esempio è buona cosa, perché limitate il traffico del sito, ma attenzione perché poi dovete verificare se il server vi ha risposto in un formato compresso o meno. L'errore classico è quindi quello di leggere tutti i dati dallo stream di risposta e poi trovarsi con tanti bei...
Questo me lo ero perso, è uscita una nuova versione di Ankh che potete trovare qui. Per chi non lo sapesse Ankh è un plugin Freeware per Visual Studio per gestire un repository subversion direttamente dal VS. Le vecchie versioni avevano qualche problemino, in particolare tendeva a rallentare molto in progetti con molti file e ad esempio non ti permetteva di rinominare un file appena creato se non era stato precedentemente committato nel repository. In generale per chi lavora con subversion è interessante installarlo e magari tenerlo attivo solamente per le solution più piccoline.
Ora proverò a riattivarlo per qualche solution...
Se si legge la documentazione dell'oggetto DirectoryEntry si suppone che tale oggetto sia utile solamente per active directory, invece ruminando per la rete si può vedere che è utilissimo anche per accedere al pc locale, ecco ad esempio come cambiare la password ad un utente del mio portatile, ltricci è il nome della macchina, mentre invece guardian è il nome utente, il mio portatile non è stato mai agganciato a nessuna active directory.
DirectoryEntry entry = new DirectoryEntry( "WinNT://ltricci/guardian", "gianmaria.ricci", "lami@passw0rd");Console.Writeline("Retrieved username:" + entry.Name + "\n"); entry.Invoke("SetPassword", new object[] { "nu0v@pa$sword" });
ed inoltre tramite questa classe potete enumerare e gestire i gruppi o anche i servizi, decisamente utile. Attenzione che la stringa di connessione sia "WinNT://nome macchina" con le...
Ho una form che deve fare questo (visione semplificata ma la sostanza è questa) ascoltare su una socket per ricevere una serie di stringhe, fare un lookup in database per ogni stringa e mostrare dei dati all'utente. Il programma ha una MDI, l'utente apre la form X e quando arrivano i codici sulla socket vengono visualizzati, se la form X non è aperta non viene visualizzato nulla.
Il cliente dopo avere visto il tutto funzionare fa la seguente richiesta di modifica: fare si che il programma MDI ascolti sempre nella socket, alla prima stringa che arriva se la form non...
Tempo fa si discuteva sul blog di Ayende, sul discorso tecniche di inversione di controllo etc etc, in sostanza ci si chiedeva se questi concetti sono alla portata dello sviluppatore medio, oppure se sia possibile "far digerire" ai project manager l'idea di usare librerie Open Source (Spring.Net o Castle) in progetti reali. Questo ultimo punto è particolarmente sensibile, perché talvolta la reticenza è alta, la diffidenza verso l'Open Source è ancora radicata in certi casi. Questo però non vuole dire rinunciare in partenza a scrivere codice basandosi sui sani principi della IoC dato che alla fine con tre righe di...
Ho un software che è sempre andato bene, ultimamente mi sono accorto che venivano loggati alcuni errori mentre si cercava di stabilire una comunicazione con le soket, andando a vedere i log ho visto che l'errore era il 10035 o WSAEWOULDBLOCK . Questo errore si verifica per socket non bloccanti, ma nel mio caso il valore della proprietà Blocking era pari a true. Dopo 10 min di ricerca mi imbatto in questo post. Leggendo vedo un moderatore che consiglia di fare questo workaround
As a temporary workaround you may want to explicitly set the Blocking property to true right before you...
Una cosa che mi manca tanto dal C++ è la STL. In C++ la libreria STL è ben organizzata, soprattutto i contenitori; in .NET invece c'è un po' di confusione e di entropia. Prendiamo ad esempio la IList<T> e la List<T>. La seconda non è solamente una implementazione concreta di IList<T> perché ha veramente tanti metodi in più, questo fa si che lavorare con una IList<T> o con la sua diretta implementazione concreta fornita da microsoft sia differente. Personalmente avrei fatto si che la List<T> implementasse solamente i metodi di IList<T> lasciando ad un'altra classe i metodi aggiuntivi, oppure ancora...
In un precedente post si parla di eguaglianza, volevo fare una piccola precisazione perché in un commento ho detto una cosa un po' sbagliata e confusa rispondendo a Diego di getto, ho per questo cancellato il commento riprendendo in maniera più estesa e spero più chiara il discorso. Prendete il seguente snippet:
Object TO3 = "test";Object TO4 = new StringBuilder().Append("test").ToString();Console.WriteLine("TO3 == TO4 is {0}", TO3 == TO4);Console.WriteLine("Object.Equals(TO3,TO4) is {0}", Object.Equals(TO3, TO4));Console.WriteLine("Object.ReferenceEquals(TO3, TO4) is {0}", Object.ReferenceEquals(TO3, TO4));
Stampa false, true, false; di questi, il terzo false è chiaro dato che il ReferenceEquals() compara per riferimento e le due stringhe sono chiaramente istanze differenti, ma per l'operatore == e per Object.Equals() avere un risultato differente può generalmente causare apprensione :D. Per capire il perché di questo comportamento...
Girovagando per i forum di C# ho visto uno snippet sbagliato di un tizio che in sostanza voleva fare una generica routine per comparare due entity. Da qui faccio nascere una riflessione con due piccole domande: cosa stampa lo snippet seguente?
String TS1 = "test";String TS2 = "test";Object TO1 = TS1;Object TO2 = TS2;Console.WriteLine("TS1 == TS2 is {0}", TS1 == TS2);Console.WriteLine("TO1 == TO2 is {0}", TO1 == TO2);
Siamo sicuri al 100% oppure abbiamo bisogno di altre informazioni per affermare con certezza l'output? E il seguente cosa stampa?
String TS3 = "test";String TS4 = new StringBuilder().Append("test").ToString();Object TO3 = TS3;Object TO4 = TS4;Console.WriteLine("TS3 == TS4 is {0}", TS3 == TS4);Console.WriteLine("TO3 == TO4 is {0}", TO3 == TO4);
Alk.
Avete mai pensato a quanto insicuri possono essere i parametri passati in una querystring? Il chiamante può infatti modificarli a piacimento per cercare di trovare ad esempio una falla di sicurezza nel vostro applicativo.
In questo piccolo articolo mostro una possibile soluzione, criptare la querystring in modo che sia impossibile per un attaccante modificarla.
(Clicca per leggere l'intero post)
Avete mai pensato a quanto insicuri possono essere i parametri passati in una querystring? Il chiamante può infatti modificarli a piacimento per cercare di trovare ad esempio una falla di sicurezza nel vostro applicativo.
In questo piccolo articolo mostro una possibile soluzione, criptare la querystring in modo che sia impossibile per un attaccante modificarla.
(Clicca per leggere l'intero post)
Dopo il post di Raf ho voluto scrivere un breve post in cui spiego brevemente come accedere a risorse del file system da asp.net in maniera un po più sicura del passare il nome del file nella querystring.
Alk.
In seguito al meraviglioso post di Raf vorrei segnalare un libricino. Il libro in questione si chiama Developing More-Secure Microsoft ASP.NET 2.0 Applications, lo ho quasi finito di leggere e non è assolutamente male, è molto pratico, non da troppa teoria di base, si legge in non troppo tempo, non sarà approfondito ma sicuramente evita di fare gli errori grossolani fatti nel sito di Veltroni.
Penso che sia una lettura obbligatoria per chiunque sviluppi asp.net, perché se è vero che non possiamo tutti essere esperti di sicurezza è anche vero che una conoscenza minima è doverosa.
Alkk.
Rovistando nell'hd mi è venuta fuori una vecchia discussione che avevo lanciato su GotDotNet riguardo un piccolo quizzetto, la ripropongo quì (Click per leggere)
Se qualcuno magari si è chiesto come fare a investigare il contenuto di un assembly da puro codice unmanaged C++ le MetadataApi possono venire in aiuto. (Cliccare per leggere il post completo)
Per chi venendo dal VB talvolta si trova interdetto per qualche comportamento del C# che può risultare non intuitivo ecco un piccolo esempio.
Se lavorate con il caricamento dinamico degli assembly con LoadFrom, potreste trovare problemi nel gestire la serializzazione di oggetti contenuti negli assembly caricati dinamicamente. In questo post si spiega come risolvere il problema.
Alcune considerazioni su come realizzare una semplice funzione di ricerca nel Dao che faccia uso di una fluent interface.
Una delle domande principale che mi faccio talvolta parlando di IoC e di AOP è se utilizzare castle o spring...Spring è una libreria in giro da più tempo e più matura, la documentazione inoltre è migliore di quella di Castle effettivamente, ma se dovessi scegliere sceglierei Castle, per una serie di motivi. Il primo motivo è le API pubbliche che si utilizzano, Castle.Windsor è fortemente tipizzato, ad esempio per recuperare un istanza si usa questo codice MyInterface instance = _container.Resolve<MyInterface>();
dove naturalmente _container è un istanza di WindsorContainer che possiamo ottenere da un file xml di configurazione o da una...
Una personale considerazione su un vecchio post di Janky che per mancanza di tempo avevo saltato.
Un post su come creare un IComparer generico che lavora tramite reflection, la soluzione proposta cerca di massimizzare le prestazioni minimizzando l'uso delle funzioni di reflection.
La memoria gioca talvolta brutti scherzi, mi è spesso capitato di strutturare pagine asp.net con creazione dinamica di controlli e mi sono sempre attenuto ad una linea guida che è quella di creare i controlli nel metodo init, o in generale prima del momento in cui viene ripristinato il viewstate. Ricordo anche di avere letto questa linea guida da qualche fonte autorevole, e chiedendo ad un mio amico e collega, anche lui mi ha risposto "I controlli vanno creati nel page_init, prima che il viewstate venga ripristinato." Oggi mi trovo invece con il dilemma dell'uovo e della gallina, debbo creare dei...
Ieri stavo controllando una pagina scritta in asp.net, lo scopo era aggiungere la localizzazione di un dato. Visto che la pagina conteneva vari user control ed aveva troppa logica nel code behind, ho aperto il profiler di sql server per sniffare subito le stored che venivano chiamate, senza nemmeno dovere andare a cercare nel codice (e' si lo so....sono veramente lazy :D). Con mia sorpresa ho visto, oltre la stored cercata, anche 34 select nella tabella utenti di asp.net. Purtroppo l'autore della pagina aveva inserito una logica strana in una gridview gestendo l'evento RowDataBound e chiamando in esso la Membership.GetUser(),...
Lavorare con un orm come nhibernate semplifica di molto la vita :P
In questo piccolo esempio si mostra come creare i propri snippet di codice per visual studio 2005
Sto da poco iniziando ad utilizazre Rhino, che trovo molto ben fatta come libreria di mock. Il primo problema che ho affrontato è il seguente. Durante il test mi piace utilizzare l'attributo InternalsVisibleTo per garantire al mio progetto di unit test di poter utilizzare tranquillamente i metodi marcati come internal della mia libreria sotto test.
Il problema accade quando vado a generare mock con Rhino e voglio dei mock tipizzati su un tipo che è interno, infatti viene generata questa eccezione.
failed: System.TypeLoadException : Type 'ProxyInterfaceSystemSystemObject_UserListImporter_InterfacesIMyInternalInterface_Rhino_Mocks_InterfacesIMockedObject_System_Runtime_SerializationISerializable' from assembly 'DynamicAssemblyProxyGen, Version=0.0.0.0, Culture=neutral, PublicKeyToken=f362209d9bee91d8' is attempting to implement an inaccessible interface.
Il significato è chiaro,...
Volete provare le funzionalità Windows.Services di spring.net ma non trovate il file Spring.Services.WindowsServices.Installer.exe citato sulla documentazione? Se vi interessa ecco cosa ho dovuto fare io per generarlo, spero che vi sia di aiuto.
In un server abbiamo un po di problemi perchè talvolta
sembra che la sessione utente si "perda". Questo genere di problemi accade
spesso con antivirus o programmi che monitorano l'Hard Disk e quindi fanno
credere a ASP.NET che i file sono cambiati richiedendo una nuova compilazione.
Per limitare questo problema bisogna escludere dal check di tutti gli
antivirus la cartella del sito, la cartella di cache di ASP.NET, ma girovagando
in rete ho trovato che alla fine la soluzione migliore è creare un Web Deployment Project che permette di creare un nuovo tipo di
progetti in grado di compilare tutto il codice...
Sicuramente la maggior parte di voi lo conoscerà, ma in
questo link ci sono suggerimenti preziosi su come
migliorare i tempi di compilazione per i vostri progetti web. Penso che valga la
pena riportarlo all'attenzione di tutti.
Alk.
powered by IMHO 1.3
Le buone pratiche di programmazione consigliano di inserire delle asserzioni
nelle proprie classi, ma cosa succede quando poi testiamo il nostro
codice con NUNIT? Il problema è che al fallimento di una asserzione standard di
.NET la GUI del NUNIT mostra la classica messagebox di avvertimento e purtroppo
l'esecuzione si ferma fino a che l'utente non interviene premendo un
bottone.
La soluzione a questo problema è disabilitare i trace listener standard nel
web.config del progetto NUNIT.
<system.diagnostics> <trace autoflush="false" indentsize="4"> <listeners> <clear/> </listeners> </trace> </system.diagnostics>
In questo modo al fallimento di una asserzione i vostri test non
si interromperanno. Se volete comunque vedere le asserzioni fallite, è
possibile utilizzare l'oggetto ConsoleTraceListener in...
In un sito che stavamo sviluppando improvvisamente in produzione inizia ad
apparire questo errore Timeout expired. The timeout period elapsed
prior to obtaining a connection from the poolQuesto errore viene
generato quando ci si dimentica di chiudere le sessioni o di effettuare il
dispose su un oggetto session o su uno degli oggetti ADO.NET che supporta
l'interfaccia IDisposable. Questo problema si chiama connection leak perchè la
connessione non viene mai tornata al pool di connessioni che piano piano si
esaurisce.Come individuarloIl modo più rapido è utilizzare il
perfmon.exe che ha al suo interno appositi contatori dedicati al monitoraggio,
li trovate...