ottobre 2008 - Posts
Lo scorso 28 ottobre è stata rilasciata la versione definitiva dell'SDK del .NET Micro Framework 3.0. Il download è disponibile qui, mentre per maggiori informazioni è possibile fare riferimento al sito di Microsoft Connect.

Nel Self-Paced Training Kit per l'esame 70-444 si dice che con le Included Columns è possibile creare indici compositi, indicando i nomi di tutte le colonne che devono confluire nell'indice nelle parentesi che seguono il nome della tabella nel comando CREATE INDEX; inoltre, in un singolo indice composito si possono usare fino a 16 colonne, e la sua dimensione massima è di 900 byte.
In realtà, le cose non stanno esattamente così. Le Included Columns permettono di aggiungere colonne all'indice i cui valori però sono inseriti solo a livello delle foglie, quindi non possono essere utilizzati per le condizioni WHERE, ma sono utili per risolvere una SELECT senza dover andare a leggere i dati (nel caso in cui le colonne richieste siano tutte presenti nell'indice). Le Included Columns, quindi, non concorrono al limite dei 900 byte. Per creare questo tipo di indici, si deve usare la parola chiave INCLUDE:
CREATE NONCLUSTERED INDEX IX_SalesOrderDetail_ProductID ON Sales.SalesOrderDetail
(
ProductID
) INCLUDE (TestName)
Maggiori dettagli sulle Included Columns sono disponibili su MSDN.

Il nuovo controllo DataPager di ASP .NET permette di aggiungere funzionalità di paginazione ai propri controlli collegati ad una fonte dati. Può essere personalizzato in molti modi, ad esempio per mostrare automaticamente un messaggio nella forma Pagina X di Y (Elementi totali: Z):
<asp:TemplatePagerField>
<PagerTemplate>
<b>
Page
<asp:Label runat="server" ID="CurrentPageLabel"
Text="<%# Container.TotalRowCount>0 ?
(Container.StartRowIndex / Container.PageSize) + 1 : 0 %>" />
of
<asp:Label runat="server" ID="TotalPagesLabel"
Text="<%# Math.Ceiling (
(double)Container.TotalRowCount / Container.PageSize) %>" />
(
<asp:Label runat="server" ID="TotalItemsLabel"
Text="<%# Container.TotalRowCount%>" />
records)
<br />
</b>
</PagerTemplate>
</asp:TemplatePagerField>
Per l'esempio completo, rimando alla documentazione di MSDN.

Avevo la necessità di elaborare un file CSV, risultato di un'esportazione da Excel, selezionando solo le righe con determinati valori. Confidando nelle potenzialità di LINQ, ho fatto una rapida ricerca su Internet e sono arrivato in questa pagina, in cui è disponibile una libreria (corredata dal codice sorgente) che permette di realizzare interrogazioni LINQ su un file in formato CSV. L'unica cosa da fare per utilizzarla è definire una classe con l'indicazione di quali sono i campi del file che si vuole recuperare.

Il controllo AutoCompleteExtender dell'AJAX Control Toolkit consente di creare facilmente TextBox con funzionalità di completamento automatico, ottenendo le alternative attraverso l'invocazione di un Web service. In alcuni casi, tuttavia, i valori restituiti possono sembrare errati: ad esempio, seguendo l'esempio disponibile sul sito, ma cercando di mostrare valori che iniziano con uno o più 0, si noterà che tali 0 non appaiono nelle voci del menu a tendina.
Per risolvere il problema, si devono racchiudere tra virgolette i valori restituiti dal Web service. Ad esempio:
1 [System.Web.Services.WebMethod]
2 [System.Web.Script.Services.ScriptMethod]
3 public string[] GetCompletionList(string prefixText, int count)
4 {
5 string[] ret = //Recupero dei valori.
6 for (int i = 0; i < ret.Length; i++)
7 ret = "\"" + ret + "\"";
8 return ret;
9 }
Alla riga 7, ogni elemento recuperato viene racchiuso tra virgolette doppie. Così facendo, l'AutoComplete visualizzerà i valori esattamente come gli sono stati passati (escludendo le virgolette).

Tra un paio di giorni Microsoft distribuirà ad un ristretto gruppi di tester il Service Pack 2 di Windows Vista. E' ancora presto per fare una previsione sulla data di rilascio, che dipenderà in larga parte dai feedback degli utenti. Rimando a questo post per maggiori dettagli e per la lista di alcune delle novità.
Technorati Tag:
Windows,
Updates
Da qualche giorno sto studiando sul Self-Paced Training Kit per l'esame 70-444. Gli argomenti sono interessanti, dal momento che viene spiegato come diagnosticare e risolvere i diversi tipi di problemi che possono affliggere un'istanza di SQL Server 2005 (relativi a risorse, query mal progettate, indici, ecc.). La parte iniziale è un po' noiosa, perché fornisce una panoramica sulle diverse situazioni che possono verificarsi. Da pagina 100 in poi, però, le cose migliorano decisamente e si entra nel "vivo" degli argomenti. Tutto sommato, quindi, per adesso sono soddisfatto... Vedremo come va avanti...
Technorati Tag:
Certification
Da qualche giorno è disponibile un aggiornamento del Feature Pack per SQL Server 2008. Il pacchetto comprende applicazioni, utility e add-on: per la precisione, in totale sono 26, ma purtroppo devono essere scaricate e installate separatamente.

A questo indirizzo (e negli articoli correlati) è disponibile un'esaustiva spiegazione di tutte le numerose funzionalità del controllo ListView di ASP .NET 3.5. Ogni esempio è accompagnato da un'immagine con cui è possibile rendersi immediatamente conto di tutte le feature messe a disposizione.

Utilizzando le Membership API di ASP .NET, è molto semplice modificare l'indirizzo mail di un utente salvato nel suo profilo:
MembershipUser user = Membership.GetUser("UserNameUtente");
user.Email = "mail@dominio.com";
Membership.UpdateUser(user);
Il codice si commenta da solo: recuperiamo l'utente tramite il metodo Membership.GetUser, cambiamo il suo indirizzo di mail e, infine, aggiorniamo il profilo richiamando Membership.UpdateUser.

Quest'oggi su MSDN è stato inaugurato un nuovo blog dedicato allo sviluppo sulla prossima piattaforma Windows 7:
This blog will mainly focus on the development aspects of Windows 7 by providing valuable content for developers. We shell call this blog “The Windows 7 Blog for Developers”. By valuable content we mean that this blog will be a “one stop shop” on the road to get yourself familiar with what Windows 7 has to offer for developers and how you can “Light-Up” using Windows 7 features in your application.
Aspetto di vedere quali contenuti saranno pubblicati.

Notizia molto interessante: a partire da oggi è disponibile il codice sorgente di Windows Presentation Foundation per .NET 3.5 SP1. Questo rilascio va ad aggiungersi alla prima informata di codice resa accessibile circa un anno fa; in quell'occasione Microsoft rilasciò solo una parte del Framework .NET, lasciando però intendere che, nei mesi a venire, avrebbe progressivamente fornito anche gli altri tasselli. Sembra proprio che questa promessa sia stata rispettata.

ASP .NET fornisce un oggetto con cui è possibile serializzare/deserializzare oggetti secondo lo standard JSON, il DataContractJsonSerlializer. Esso è contenuto nel namespace System.Runtime.Serialization.Json, ma per utilizzarlo si deve aggiungere al proprio progetto un riferimento all'assembly System.ServiceModel.Web.dll.
Ogni classe o struttura che si vuole serializzare deve essere decorata con l'attributo DataContract; al suo interno, i membri che interessano devono avere l'attributo DataMember. Ad esempio:
[DataContract]
public class ShoppingCart
{
[DataMember]
public List<string> Articles { get; set; }
[DataMember]
public string UserName { get; set; }
public ShoppingCart()
{
Articles = new List<string>();
}
}
Fatto questo, l'utilizzo del DataContractJSonSerializer è molto semplice, dal momento che esso si comporta come un serializzatore standard. Le seguenti funzioni generiche consentono di serializzare e deserializzare un qualunque oggetto:
public string Serialize<T>(T obj)
{
DataContractJsonSerializer serializer =
new DataContractJsonSerializer(obj.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
return Encoding.Default.GetString(ms.ToArray());
}
}
public T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
DataContractJsonSerializer serializer =
new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
return obj;
}
}
Ad esempio, utilizzando la classe ShoppingCart definita sopra:
ShoppingCart cart = new ShoppingCart();
cart.UserName = "Marco";
cart.Articles.Add("Fiat 500");
cart.Articles.Add("Mini");
//Serializza l'oggetto.
string json = Serialize(cart);
//Deserializza l'oggetto.
ShoppingCart cart2 = Deserialize<ShoppingCart>(json);
Una cosa che ho trovato molto interessante è che questo oggetto supporta di default la serializzazione degli oggetti List<T>, che invece l'XmlSerializer non gestisce.

Nuovo rilascio per il Krypton Toolkit, che giunge a quota 3.0.6. Queste le novità:
- Major Bug Fixes
- Locking/Unlocking computer causes text to disappear.
- Text not drawing at all for some Visual Studio projects.
- ComboBox drop down not working on some computers.
- Cannot edit Image properties with KryptonContextMenu.
- Design time change of Ribbon.MinimizedMode crashes.
- Removing all Ribbon tabs still draws last tab shown.
- Feature Changes
- KryptonDomainUpDown added to the Toolkit.
- KryptonBreadCrumb now has overflow button feature.
Come sempre, il download è disponibile gratuitamente sul sito di Component Factory.

Da un padio di settimane sono disponibili nuove certificazioni MCTS per SQL Server 2008:
Il Self-Paced Training Kit per il primo esame sarà disponibile a Gennaio 2009, mentre per il secondo bisogna attendere fino a Marzo.
Technorati Tag:
Certification
More Posts
Next page »