Cosa bolle in pentola…

Su CodeProject questa settimana sono stati pubblicati o ripubblicati diversi articoli interessanti. La qualità del codice e delle persone che lo scrivono aumenta e si vede sempre di più. L’informatica continua a fare grandi passi avanti! Qualche anno fa non era così allettante leggere una news letter di qualche portale di sviluppo.

Comunque, secondo il mio ordine di rilevanza:
1. AutoDiagrammer: un tool per creare il class diagram dato l’assembly .NET; non avuto modo di vedere il codice sorgente, che sembra non esserci se non decompilando la library, ma all’interno si trova anche una classe che permette di capire se il file è un assembly .NET leggendone l’intestazione, domanda che leggo frequentemente
2. Generic cross thread per Windows Forms: un metodo per fare chiamate cross-thread usando Control.Invoke per eseguire il codice nel main thread dell’applicazione Windows; nota: è meglio convertire il metodo in un extension method ;-)
3. MVVM Dialogs: come risolvere il problema di visulizzare dialog box modali “sporcando” il pattern, argomento caldo visto che l’ha trattato anche Mauro ieri alla conference UGI Alt
4. Code browser take 2 Silverlight: un browser di codice via AJAX con syntax highlighter o via Silverlight
5. Permutations: calcolo delle permutazioni semplici, altra richiesta frequente

Il mio viaggio verso cit. “la Mecca delle architetture” continua…

Matteo Migliore.

Migrazione a Visual Studio 2010 B1 e al Framework 4: ahi ahi che dolor

Nella mia società stiamo facendo la migrazione di tutte le applicazioni core al FW 4.0, ovviamente non senza sorprese. Sto lavorando su una solution di esempio che pubblicherò a breve per testare Entity Framework v2 o v4 (mah :-) ) in modalità Model First: spettacolo; e su altre tipo Silverlight 3 come Navigation Application.

A proposito di Navigation Application, in VS2010 B1 a me non compare il template.

La soluzione sarebbe quella di reinstallare l’SDK di Silverlight 2, l’SDK Silverlight 3 e il Developer Runtime, a me non funziona; poco male perchè è sufficiente aggiungere le reference alle library:
1. System.Windows.Browser
2. System.Windows.Controls.Navigation

Arrivando a WCF 4.0, almeno credo proprio che il problema sia quello, non riuscivo a creare la reference al servizio ottenendo questo errore:
Metadata publishing for this service is currently disabled.

Certo cercare su Google è bello, ma far cercare ad altri, in particolare il buon Ale, è meglio. Per il momento la soluzione è questa:
------------------------------------------------------------
ServiceHostBase host = OperationContext.Current.Host;

ServiceMetadataBehavior serviceMetadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();

if (serviceMetadataBehavior == null)
{

    serviceMetadataBehavior = new ServiceMetadataBehavior();
    serviceMetadataBehavior.HttpGetEnabled = true;

    serviceMetadataBehavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
    host.Description.Behaviors.Add(serviceMetadataBehavior);

    host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
}
------------------------------------------------------------

L’avventura continua…

Matteo Migliore.

[OT] Verso la Croazia…

Cosa vogliamo dire di questo benedetto omino qua? :-D

Altre foto non posso pubblicarle causa censura (non sono foto di Lorenzo… :D).

Matteo Migliore.

Iterazione e azione ricorsiva su una collection gerarchica

Da una richiesta sul news group di ASP.NET riporto questi due extension method che ho scritto per iterare ricorsivamente su una collection in modo gerarchico ed effettuare un’azione, nel caso specifico è stato chiesto come cancellare tutte le TextBox di una pagina senza doverlo fare manualmente su ognuna:
-------------------------------------------------------- 
public static class ControlExtension
{
    public static void DoActionForAllChildren<T>(this Control container, Action<T> action)
    {
        container.Controls
            .OfType<Control>()
            .Traverse(control => control.Controls.OfType<Control>())
            .Where(control => control.GetType() == typeof(T))
            .Cast<T>()
            .ForEach(action);
    }
}

public static class EnumerableHierarchicalExtension
{
    public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> recursion)
    {
        foreach (T item in source)
        {

            yield return item;

            IEnumerable<T> recursionSequence = recursion(item);

            if (recursionSequence != null)
            {

                foreach (T itemRecurse in Traverse(recursionSequence, recursion))
                {

                    yield return itemRecurse;
                }
            }
        }
    }

    public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
    {
        foreach (var item in source)
        {
            action(item);
        }
    }
}
--------------------------------------------------------

Quindi la chiamata diventa:
--------------------------------------------------------
this.DoActionForAllChildren<TextBox>(action => action.Text = string.Empty);
--------------------------------------------------------

[Update]
Codice leggermente riadattato secondo il consiglio di Stefano.

Matteo Migliore.

[OT] Evento Microsoft in Croazia con Lorenzo

Si parte ora, per un evento Microsoft in Croazia con Lorenzo. Figata! 9 ore di viaggio!!

Matteo Migliore.