Technology Experience

.NET World

Programmazione, libri, snippet di codice, articoli tecnici

.NET World

ASP.Net: alla fine è successo davvero!!!

Premessa: il post è volutamente ironico. Chiedo scusa a tutti (ma proprio a tutti) i miei amici di UGIdotNET: vi prego, siate clementi nei commenti! 🙂

Molto tempo fa dissi che prima che succedesse una cosa, ne sarebbero accadute delle altre. Sono stato smentito. Quella cosa è accaduta ieri mattina.

Ieri ho programmato e ho messo on-line la mia prima pagina in ASP.Net.

E ne ho persino due prove. La prima è lo screenshot di Visual Studio 2008:

La seconda è la mia nuova home-page. Che emozione…l’estensione è .aspx.
Chi l’avrebbe mai detto???

Sapevo che VS2008 potesse creare siti Web, sapevo che esisteva una certa tecnologia chiamata ASP.Net. Lo sapevo perchè ne avevo sentito solo parlare. Da ieri invece conosco qualcosa di più concreto. Da oggi posso dire…cavolo, ho messo on-line una pagina ASP.Net funzionante!

E vi dirò di più: dopo aver letto l’articolo su MSDN Magazine di Justin Smith, ho persino sfruttato il .NET Framework 3.5 con le classi SyndicationFeed e SyndicationItem messo a disposizione da WebHosting4Life per prendere il feed del mio blog e bindarlo in una GridView.

Tutto è cominciato quando ho deciso di ridisegnare la home-page. Mi son detto…dal momento che devo e voglio rifarla, perchè non usare uno strumento che conosco già? Non mi riferisco ovviamente a ASP.Net, ma a Visual Studio. Quindi, mi sono messo di buona lena…ed il risultato non si è fatto attendere.

Che dici, Mario, mi sono riguadagnato un posto tra i soci UGIdotNET. Mi concedi un…

UgiDotNet.Members.Add(Igor);

Era parecchio che non mi occupavo di pagine Web.
Vi devo chiedere scusa: non è mica tanto male, lo sapete?
D’altronde, questo ASP.Net è eccezionale!!!!

Technorati Tags:   

Send to Kindle
.NET World

MSDN Code Gallery

Da questo post del mio amico Alessandro Del Sole sono venuto a sapere che esiste un portale denominato MSDN Code Gallery, dove è possibile uploadare esempi di codice, piccoli progetti, prototipi che illustrano il funzionamento di una determinata tecnologia, video e così via. Non mi sembra che sia attivo da molto tempo, perchè i vari progetti sono stati tutti uploadati nel 2008, ed anche la loro quantità mi fa pensare che sia online da relativamente poco tempo. Alcuni di questi progetti vengono poi referenziati direttamente da MSDN, come nel caso di Visual Basic LINQ Video Series Samples.

Le funzionalità del portale sono simili a quelle di CodePlex, solo che quest’ultimo è più che altro dedicato all’hosting di veri e propri progetti completi. Tra l’altro, manna dal cielo, per accedere alla MSDN Code Gallery non è necessario creare l’ennesimo account, ma è possibile sfruttare il classico Windows Live ID.

Technorati Tags:   

Send to Kindle
.NET World

Se MSDN Magazine non vi arriva…

Allegato al numero di Gennaio 2008 di MSDN Magazine, che mi è arrivato oggi, ho trovato un foglietto informativo che recita così:

HELP US! If there is an error in your address, please go to www.bleuchipintl.com click on Subscriber Services and enter the Ref# printed below to correct your address.

Avevo già provato in passato a correggere l’indirizzo, ma non usando quel sito, bensì mandando un’e-mail a qualcuno di MSDN Magazine che adesso non ricordo. Oggi pomeriggio sono andato sul sito, ho inserito il Ref# e magicamente è comparso un form con il mio indirizzo, con tutti i dati sputtanati. Li ho sistemati in modo corretto e, spero, una volta per tutte: spero che sia servito a qualcosa.

Morale: se anche voi avete qualche problema con la spedizione di MSDN Magazine, provateci anche voi. Tentar non nuoce!

Technorati Tags:

Send to Kindle
.NET World

Da leggere? Ne ho fin troppo!

Qualche tempo fa vi ho tediato raccontantovi qualche disavventura con il mio abbonamento alla rivista MSDN Magazine. Le mie diaavventure continuano, ma ho deciso di non annoiarvi più di tanto. Vi dico solo – in forma breve – che il numero di Gennaio 2008 mi è arrivato questa mattina, dopo aver puntualmente ricevuto quelli di Febbraio e quello relativo al lancio degli ultimo prodotti Microsoft.

Quindi, ho tre numeri di MSDN Magazine da leggermi allegramente.
Non proprio tre, forse, solo due, perchè quello di Febbraio comunque l’avevo già letto.

Inoltre, mio fratello per il mio compleanno ha pensato di bene di regalarmi un libro su Expression Blend.

Ok, sono a casa in convalescenza, ma non potete tenermi lontano più di tanto dalla lettura, per cui…ho tutto il tempo che voglio per unire relax, visite mediche, libri, ospedale ed articoli.

Technorati Tags:   

Send to Kindle
.NET World

WPF: Accedere agli elementi di una ListBox con la classe ItemCollection

Ad una ListBox generalmente possiamo fornire oggetti da visualizzare in due modi differenti: o utilizziamo il data-binding con la proprietà ItemsSource oppure accedendo alla proprietà Items, attraverso la quale possiamo aggiungere/rimuovere/ricercare oggetti.

La proprietà Items è di tipo ItemCollection, una classe che espone un’interfaccia davvero semplice e potente al tempo stesso. Supponiamo di avere una Window con una ListBox popolata in questo modo. Se volessimo accedere agli oggetti contenuti nella ListBox possiamo scrivere in C# quanto segue:

1 ItemCollection photos = ListPhotosSelected.Items;

Possiamo sapere se la collection è vuota attraverso la proprietà IsEmpty.

Possiamo navigare all’interno della collection con un set di metodi: MoveCurrentTo(object item), MoveCurrentToFirst(), MoveCurrentToLast(), MoveCurrentToNext(), MoveCurrentToPosition(int position) e MoveCurrentToPrevious(). Dal momento che possiamo navigare nella collection in avanti e all’indietro, possiamo utilizzare le proprietà IsCurrentAfterLast e IsCurrentBeforeFirst.

Ma questi sono tutti dettagli tecnici, che tra l’altro potete trovare anche voi nella members list della classe ItemCollection su MSDN.

Quello che voglio dirvi è spiegarvi per cosa tutto questo mi è stato utile stasera.

Prima di vuole un preambolo: prometto di essere veloce. 🙂

Questo qui sopra è lo screenshot del plug-in che sto realizzando per poter inserire foto prese da Flickr direttamente nei post scritti con Windows Live Writer. E’ suddiviso logicamente in tre parti: nella parte evidenziata in rosso l’utente specifica il nome dell’utente Flickr, poi c’è un pulsante ed una Combox che elenca i photoset di quell’utente. Quando si seleziona un photoset, viene popolata la parte della Window evidenziata in verde scuro: ovvero, le fotografie appartenenti al photoset selezionato dalla Combox. L’ultima parte – quella in violetto – contiene le foto che l’utente vuole inserire nel post di WLW: la ListBox qui contenuta viene popolata tramite drag’n’drop, sfruttando le meravigliose classi di supporto di Beatriz Costa. Un consiglio spassionato: se avete bisogno di implementare il drag’n’drop in un’applicazione WPF, non buttate via il vostro tempo (prezioso). Studiatevi un attimo quello che ha fatto Beatriz Costa e vivrete tutti più felici.

Arrivo al dunque. Quando l’utente clicca il pulsante Ok, voglio generare il codice HTML per inserire le tre fotografie che sono state draganddroppate nella ListBox. L’handler dell’evento Click sul Button Ok è davvero semplice:

1 private void ConfirmButton_Click(object sender, RoutedEventArgs e) 2 { 3 FlickrBrowserPhoto p; 4 ItemCollection photos = ListPhotosSelected.Items; 5 6 if (!photos.IsEmpty) 7 { 8 while (photos.MoveCurrentToNext()) 9 { 10 p = (FlickrBrowserPhoto)photos.CurrentItem; 11 _photosHtml = string.Concat(_photosHtml, "<img src="", p.Url, "" />"); 12 } 13 14 this.DialogResult = true; 15 } 16 else 17 { 18 this.DialogResult = false; 19 } 20 }

Ottengo l’istanza di ItemCollection dalla ListBox. Se non è vuota, ciclo tutti gli elementi, castando ciascun elemento al tipo che conosco: in questo caso si tratta di FlickrBrowserPhoto, che è una classe custom sviluppata ad-hoc. Il resto non è importante, è solo logica applicativa che costruisce l’HTML da restituire al chiamante attraverso il membro privato _photosHtml.

Un’ultima cosa importante. Il metodo MoveCurrentToNext() ritorna un booleano che dice se l’operazione è avvenuta con successo oppure no. Alla riga 6 la proprietà CurrentItem vale null, e CurrentPosition vale -1. Questo perchè appena si accede alla collection il cursore interno è prima del primo elemento: ecco perchè ho usato un while invece di un do…while: l’avanzamento del cursore attraverso il metodo MoveCurrentToNext() deve essere fatto anche in corrispondenza della prima iterazione.

Technorati Tags:    

Send to Kindle
.NET World

Perchè non mi piace fare screencast o video

In alcune occasioni mi sarebbe piaciuto fare screencast o video dei contenuti del mio blog. Per esempio, se volessi parlare un po’ di WPF e XAML, potrei farlo con un bel video, invece di farvi vedere gli screenshot e scrivendo il testo del post. Ritengo però che ci siano alcuni aspetti contrastanti che non fanno del video lo strumento migliore per trasmettere contenuti tecnici.

  1. I motori di ricerca non indicizzano i video. O meglio, lo faranno anche, ma non ne indicizzano comunque il contenuto.
  2. Un video è difficilmente “navigabile”. Su una tradizionale pagina Web possiamo tranquillamente (e velocemente) andare su e giù, rileggere con calma il testo, senza necessariamente rispettare i tempi che il creatore del video ha seguito. Sembra una stupidaggine, ma se un tizio ha la parlantina veloce, sarà così anche nel video: non è così invece per un normale post.
  3. Il “copia & incolla” dai video non funziona. Se nel mio video vi facessi vedere un blocco di XAML o un metodo C#, non avreste modo di fare copy & paste nel vostro codice. Con un normale post invece sì. E…credetemi, io ci sono passato, perchè una volta ho dovuto ricopiare il codice da un filmato mi pare scaricato da qualche pagina di MSDN.
  4. Vuoi ascoltare un video? Disturbi i colleghi! Spesso blog e siti tecnici vengono consultati durante le ore di ufficio. Magari avete colleghi di fianco, e se alzate il volume li disturbate. Certo, mi dite voi, basta mettere gli auricolari e siete a posto. Ma io li considero scomodi e, oltre a questo, trovo poco elegante isolarsi dai colleghi.
  5. Il video non ha accento, nè inflessione, nè erre moscie. Sembra una sciocchezza persino questa, ma ciascuno di noi ha una propria voce, una parlata particolare, che possono risultare scomodi a chi ci ascolta. O persino a se stessi, come la mia erre moscia che io non sopporto. Il testo non ha nulla di tutto questo: oddio, il testo può essere scritto male ed essere sgrammaticato. Ma mentre lo stile di scrittura può essere migliorato, la voce è quella che è.
  6. Il video richiede banda larga, il testo no. Possiamo navigare siti testuali con un gran numero di dispositivi, dal notebook al palmare, dal cellulare più scarso allo smartphone, e con qualsiasi tipo di connessione. Con il video invece no.
  7. Il video non sempre è disponibile. A volte non ci si può permette di scaricare 80Mb di file AVI, a volte i firewall delle aziende bloccano siti come YouTube, a volte non si ha a disposizione il codec giusto, a volte qualcuno di voi naviga con un cellulare via GPRS, etc. etc. I motivi per cui potreste non riuscire a vedere un film possono essere diversi.

Quindi, in futuro non mi vedrete mai fare video tecnici, a meno che le cose cambieranno. Ma penso proprio di no, visto che alcune cose sono proprie del contenuto multimediale, quindi…

Technorati Tags:   

Send to Kindle
.NET World

Un pizzico di Linq nel mio Technorati plug-in

La cosa più bella nello sviluppare piccole applicazioni opensource/freeware in autonomia è quella di poter cogliere l’occasione per studiare le nuove tecnologie, o i nuovi strumenti che i nuovi framework ci danno. Per esempio, ecco la schermata del mio WPF Technorati Plug-in for Windows Live Writer:

Assumiamo che la ListBox a sinistra sia popolata con una semplice List<string>. Tale lista di stringhe viene ritornata dal web-service di Technorati, che ci restituisce per l’appunto i primi 100 tags utilizzati su un determinato blog.

La nuova funzionalità che ho aggiunto permette all’utente di filtrare l’elenco dei tags per trovare quello che vuole aggiungere: invece di scorrere a mano i 100 tags, può scrivere parte della parola nella TextBox indicata dalla Label Tags Filter. Questo è stato realizzato in Linq:

1 void filterTagsTextBox_TextChanged(object sender, TextChangedEventArgs e) 2 { 3 string filter = filterTagsTextBox.Text; 4 5 if (!string.IsNullOrEmpty(filter)) 6 { 7 IEnumerable<string> filtered = Enumerable.Where 8 (_tagsList, n => n.ToLower().Contains(filter.ToLower())); 9 _filteredTags = new List<string>(filtered); 10 tagsListBox.ItemsSource = _filteredTags; 11 } 12 else 13 { 14 tagsListBox.ItemsSource = _tagsList; 15 } 16 17 foreach (string s in _selectedTags) 18 tagsListBox.SelectedItems.Add(s); 19 }

Alla linea 5 controllo se l’utente ha effettivamente indicato un filtro: se no, imposto la proprietà ItemsSource della ListBox al membro privato della classe _tagsList, che è la List<string> di cui parlavo prima, quella ritornata da Technorati.

Se invece l’utente ha indicato un filtro, ottengo un’istanza di IEnumerable<string> filtrata usando Linq:

IEnumerable<string> filtered = Enumerable.Where(_tagsList, n => n.ToLower().Contains(filter.ToLower()));

Con una sola riga ottengo il risultato voluto. Notare che uso il metodo ToLower(), per non fare differenza tra maiuscole/minuscole. Uso il metodo Contains(), così quello che scrivete nella TextBox viene cercato all’interno della stringa: può essere all’inizio, alla fine oppure in mezzo.

Alla linea 9 creo una nuova List<string> che viene riassegnata come ItemsSource della ListBox ed il gioco è fatto.

Alla linea 17 e 18 mi occupo di riselezionare via codice gli eventuali tags selezionati prima di applicare il filtro: cambiando ItemsSource, perdo tutti i SelectedItems, per cui devo andare a rimetterli io manualmente via codice.

Technorati Tags:   

Send to Kindle
.NET World

Visual Studio Dark non sarebbe male se…

Anche io sono cascato nel “tranello” di Emanuele. Tranello nel senso buono, sia chiaro. Ho scaricato il file emadark.zip e ho provato ad applicarlo al mio Visual Studio 2008 per farlo diventare dark.

Non è male, anche se bisogna farci l’abitudine. Sarà pur vero che lo sfondo nero aiuta la lettura, però secondo me c’è un problema di fondo. Switchare da un Dark Visual Studio a un qualsiasi altro software che adotta il bianco, è imho una mazzata per gli occhi.

Mi capita praticamente sempre di lavorare con Visual Studio, ed avere in contemporanea aperti Adobe Reader, oppure Word, oppure Omea Reader, oppure un sacco di altri software e passare dal bianco al nero (e viceversa) è piuttosto traumatico. Quando si passa un po’ di tempo ad editare codice in stile dark, il tutto rimane impresso sulla retìna, e quando si passa al bianco si vede per qualche secondo il residuo dell’immagine e sinceramente lo trovo davvero fastidioso.

La morale è una sola.

Se tutti gli applicativi avessero l’ambiente con lo sfondo nero, allora sì che andrebbe bene, sarebbe tutto uniforme, ma così mi vanno in palla gli occhi.

Technorati Tags:   

Send to Kindle
.NET World

Le keywork namespace e using sono meravigliose!

Il .NET Framework è composto da una moltitudine di classi, tipi, interfacce, enum. Saremmo spaesati se non potessimo esprimere in alcun modo un concetto come: ok, adesso fammi lavorare solo con questa parte del framework. La keywork using ce lo permette.

Dalle migliaia e migliaia di classi del framework, la using seleziona/filtra solo la parte che ci interessa: System, System.Data, System.Windows, System.Xml, System.Security e così via. Saremmo tutti più confusi se non esistesse la using, e tantomeno il suo amico namespace. Avremmo tutti gli oggetti in un unico grande calderone, tutte le classi mischiate assieme, senza alcuna suddivisione logica.

La using è molto comoda anche solo per leggere il codice, vostro o altrui. E’ sufficiente aprire un file .cs, dare un’occhiata all’elenco di using dichiarate all’inizio ed avete subito l’idea chiara e precisa su cosa fa quel pezzo di codice che avete sotto il naso. Vedete System.Xml.Serialization? Da qualche parte il codice serializza o deserializza qualcosa. Vedete System.IO? Da qualche parte il codice accede a file system, utilizza uno stream in lettura o scrittura e così via.

E’ importante che l’elenco degli using sia il più breve possibile? Beh, non fatene di certo una regola, ma io personalmente credo di sì. Se avete un progetto con 20 classi – ciascuna dichiarata in un namespace diverso – avete bisogno di 20 using per utilizzare tutte quelle classi. E’ importante accorpare le classi che hanno ed espongono la stessa logica (implementata in modi diversi), che hanno forte dipendenza fra loro, che logicamente fanno parte dello stesso dominio applicativo. E’ importante che con l’utilizzo di una sola using entrino in gioco un insieme di classi coerenti e collaborative fra loro. Supponiamo di digitare using VivendoByte.Fatturazione.UserInterfaceWPF: vi aspettereste di trovare in questo namespace una classe chiamata NetworkStreamManager? Probabilmente no. Nessuno ci dà delle regole per utilizzare le keywork namespace e using: tutto è dato dal nostro buon senso, e tutto deve alla fine portare alla realizzazione di un’applicazione il cui design sia chiaro, semplice e limpido da leggere: sia per noi, sia per gli altri che un giorno metteranno mano al nostro codice.

Ricordatevelo, quindi: la namespace e la using sono nostre amiche.

Technorati Tags:    

Send to Kindle
.NET World

Articolo del mio amico Giancarlo su Linq to SQL

E bravo il mio amico Giancarlo, che ha pubblicato un ottimo articolo su Linq to SQL. Prendete questo giudizio con le dovute cautele, perchè conosco poco Linq e dintorni e quindi la mia idea potrebbe essere sfalsata dal fatto che questo Linq mi sembra tutto rose e fiori.

Linq to SQL è l’Object Relational Mapper di Microsoft, capace – detto brutalmente – di persistere su database il proprio domain model, composto da oggetti di business. L’articolo descrive molto bene l’architettura di Linq to SQL, il DataContext, l’Identity Map, il tutto con un linguaggio semplice e chiaro, anche per chi come me non ha mai sentito parlare – o comunque non ha mai visto in modo serio – Linq e/o tutte le sue applicazioni. Se lavorate in ambiente Microsoft, non potete ignorare Linq, che è una delle novità del .NET Framework 3.5. Buona lettura!

Link : http://www.microsoft.com/italy/msdn/risorsemsdn/sql/linq_sql.mspx

Technorati Tags:    

Send to Kindle