di .NET e di altre amenità

Un web server in due righe :-D

Se per caso vi serve avere un mini web-server, al solo scopo di fare qualche test, c'è un modo semplice di lanciare da codice l'ASP.NET Development Server. Per poterlo fare da un progetto di Visual Studio è sufficiente cercare, via command prompt, il seguente assembly:

c:\WINDOWS\assembly\GAC_32\WebDev.WebHost\8.0.0.0__b03f5f7f11d50a3a\WebDev.WebHost.dll

Dopo averlo referenziato da Visual Studio (è obbligatorio avere Visual Studio perchè questo è un componente che si installa con esso), il seguente codice avvierà un WebServer in local sulla porta 3010:

class Program
{
    
static void Main(string[] args)
    {
        Server server = 
new Server(88, "/imho", "d:\\");
        server.Start();

        Console.ReadLine();
    }
}

Attenzione però che se sviluppate un software usando questa tecnica non potrete mai redistribuirlo per il semplice fatto che l'ASP.NET Development Server è parte di Visual Studio 2005 e la licenza lo impedisce.

Se per caso vi serve un web server opensource, miigliore del vecchio Cassini, alora provate questo che supporta anche completamente ASP.NET.

Link:

Appunti di WPF: L'applicazione

Stamane ho cominciato ad esplorare un po' più approfonditamente Window Presentation Foundation e ho deciso di iniziare a buttare giù i concetti che ho chiarito, sperando di fare cosa utile ai miei lettori.

Per iniziare da quello che appare essere il principio, per prima cosa vorrei chiarire cos'è una applicazione WPF. Dopo un po' che si mette il naso in una applicazione basata su XAML, la cosa che appare chiara è che una applicazione può essere parificata ad un unico documento XML che descrive le varie parti che la compongono. Naturalmente in realtà queste parti si trovano in file separati, ma l'impressione generale che si ottiene è che essi potrebbero stare tranquillamente assieme. Dico questo non per puro scopo accademico. Considerando una applicazione XAML come un unico document XML l'approccio con cui ci si avvicina ad esso assume una connotazione più organizzata. Così la prima curiosità che viene in mente, o almeno che è venuta in mente a me, è capire quale è la radice di questo gigantesco documento.

Manco a dirlo il nodo principale è <application>. All'interno di un progetto WPF è presente un solo nodo Application.

<Application
    x:Class
="wpf1.App"
    
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    
StartupUri="Page1.xaml">
<
/Application>

Tralasciando le definizioni di namespace che dovrebbero essere chiare a chiunque abbia usato XML, rimangono l'attributo Class e StartupUri. Il primo definisce qual'è la classe codebehind che rappresenta l'applicazione e il secondo definisce qual'è la pagina/finestra di partenza. La parte che assomiglia alla programmazione web è proprio questa. Ogni singolo elemento ha una classe codebehind che lo rappresenta. In fase di compilazione poi il codice XAML viene compilato alla stessa stregua di una pagina web.

powered by IMHO 1.3

Windows Live Writer, estensibile ma non troppo...

Guardate cos ho scovato ancdando a curiosare nel codice di Windows Live Writer, per caprie quali sono i punti di estensibilità (quelli nascosti, non quelli pubblici)

private static IList ClientTypes
{
      
get
      
{
            
lock (BlogClientManager._classLock)
            {
                  
if (BlogClientManager._clientTypes == null)
                  {
                        BlogClientManager._clientTypes = 
new ArrayList();
                        BlogClientManager.AddClientType(
typeof(Blogger2Client));
                        BlogClientManager.AddClientType(
typeof(LiveJournalClient));
                        BlogClientManager.AddClientType(
typeof(MetaweblogClient));
                        BlogClientManager.AddClientType(
typeof(MovableTypeClient));
                        BlogClientManager.AddClientType(
typeof(WindowsLiveSpacesClient));
                        BlogClientManager.AddClientType(
typeof(BloggerAtomClient));
                  }
                  
return BlogClientManager._clientTypes;
            }
      }
}

Con tanti saluti all'estensibilità (quella vera)... Questo praticamente impedisce di create un proprio client di blog per supportate piattaforme non direttamente "previste" da Microsoft.

powered by IMHO 1.3

How to: creare una associazione no-profit

Ho scritto un articolo nel sito di XeDotNet a proposito della mia esperienza nella creazione della Associazione no-profit. Non si tratta di un argomento tecnico, ma spero potrà esserecomunque apprezzato da coloro che intendano fare il nostro medesimo percorso. Colgo l'occasione per ringraziare pubblicamente mighell, che è stato il primo che è riuscito a mettermi sulla giusta strada per la formalizzazione, dandomi alcuni consigli chiave.

Link: http://www.xedotnet.org/40/section.aspx/290

powered by IMHO 1.3

MovableTypeProvider: Un regalo per le community

Vorrei segnalare il mio ultimo articolo, sul sito web di XeDotNet, che parla dell'implementazione di un MovableTypeProvider sfruttando il Provider Model introdotto da ASP.NET 2.0. L'articolo illustra la recente esperienza che ho fatto per interfacciare Windows Live Writer con il la parte redazionale del sito di cui ho già ampiamente detto negli ultimi post.

Oltre ad essermi divertito parecchio a comprendere bene il Provider Model e l'uso delle MovableType, ho colto l'occasione per regalare questo lavoro al mondo delle community online, che partendo dal codice pubblicato potrebbero rapidamente esporre una analoga interfaccia sui propri siti web, facilitando in questo modo l'interazione con i propri iscritti. 

L'unica cosa che chiedo, a chi decida di utilizzare questo codice è un link all'articolo pubblicato sul sito web di XeDotNet da parte del sito che sfrutterà la libreria per fare in modo che essa possa essere adottata da un numero sempre maggiore di user groups e community.

Se qualcuno avesse bisogno di supporto per l'implementazione, non ha che da cercarmi via email all'indirizzo  e sarò a sua disposizione per qualunque consiglio o segnalazione vorrà farmi.

XeDotNet: Siamo linkati a CommunityCredit

Una notizia veloce: ieri sera ho completato il collegamento dei servizi di News e CommunityWall a CommunityCredit. Questo significa che postando sul muro di www.xedotnet.org si guadagnano 500 punti su community credit.

powered by IMHO 1.3

Community Credit again

Tenete d'okkio community credit. Questo mese ho deciso di riprovarci, anche se un po' in ritardo rispetto la partenza ufficiale. La scalata alla classifica è iniziata.

http://www.community-credit.com/

powered by IMHO 1.3

Ora esistiamo...

Se a qualcuno fosse sfuggita la notizia, la ripeto qui per rendere noti a tutti gli eventi della vita di XeDotNet, anche perchè in questo caso mi riguardano personalmente. Venerdì scorso, si è svolta la riunione nella quale abbiamo approvato lo statuto dell'associazione. In questo modo ora XeDotNet è a tutti gli effetti una vera e propria associazione no-profit (per la precisione lo sarà la prossima settimana non appena avrò depositato gli atti). Si tratta indubbiamente di un passo importante. Abbiamo atteso a lungo per compierlo perchè abbiamo voluto essere certi di sapere come muoverci, di come stendere il documento che unisce i nostri sforzi e regola l'andamento della nostra associazione, e un po' anche perchè io personalmente mi trovo molto più a mio agio con il codice che con la burocrazia. Infine lo abbiamo fatto. Venerdì ci siamo riuniti, e abbiamo apposto le firme sullo statuto e sull'atto costitutivo della associazioen no-profit XeDotNet.

Dicevo che la cosa mi riguarda personalmente. E' così perchè i presenti hanno deciso di conferirmi un incarico di una straordinaria importanza, ovvero la presidenza del Consiglio Direttivo. La cosa non è importante in quanto "titolo", ma in quanto al significato immenso che ha per me l'avere in questi mesi catalizzato la fiducia di persone così competenti e intellettualmente e umanamente preparate. Le ringrazio così pubblicamente di questo incarico, che non considero un mero francobollo da aggiungere ad una collezione che peraltro non ho, ma il simbolo di questa fiducia e considerazione tenendo conto della quale lavorerò nei prossimi mesi. Un saluto deve andare anche agli altri membri del Consiglio Direttivo, il massimo organo dell'associazione che con me condividono in toto questa fiducia e considerazione: Davide Vernole e Andrea Dottor. Sanno come me che ci aspetta un duro lavoro se vogliamo che questo embrione di associazione diventi una realtà concreta e prolifica di interesse, idee e lavoro.

Lavoro che in realtà è già iniziato da tempo... ma questo lo saprete a tempo debito.

powered by IMHO 1.3

Computer Programming: Non uno... ma ben due!

Questo mi dovrebbe far intuire che è giunta l'ora di dare una sfoltita ai miei impegni (tanto so che non lo faccio lo stesso), ora che sto sperimentando anche la "carenza di vita privata" spesso evidenziata anche da Andrea in alcuni suoi post. L'occasione per questa riflessione mi è data dall'aver completamente dimenticato che questo mese sono in uscita su Computer Programming non un articolo a mia firma, ma ben due! Sapevo che qualcosa doveva uscire, ma fino a stamattina non ero mai andato a leggere il sommario perciò solo oggi mi sono accorto che i titoli in uscita sono due.

Pattern & Practices: Microsoft Enterprise Library 2.0

Un cocktail speciale: ASP .NET, BuildProvider e un pizzico di Nhibernate

Il primo è una overview ragionata degli strumenti della ENTLIB 2.0, ma la parte bella (leggi: quella di cui vado più orgoglioso) è nel secondo articolo. Chi mi legge regolarmente sa che ultimamente sto spostando la mia preferenza dall'uso massiccio di SQL nei suoi vari dialetti, verso un uso più "meditato" di un cocktail di ORM/SQL. In questo articolo propongo una soluzione decisamente smart dell'uso di NHibernate sfruttando una delle finezze di ASP.NET 2.0. Per chiarire in termini pratici, considerate che mentre scrivete il file di mappatura di NHibernate in realtà state descrivendo assieme la vostra base dati e la classe mappata su di essa. La mia idea è perciò quella di partire dalla mappatura per generare automaticamente (ad ogni minima modifica) la classe di business. ASP.NET 2.0 questo lo fa in modo trasparente già in molti casi... e se leggete il mio articolo capirete come e perchè lo può fare anche a supporto di NHibernate.

Visto che ci sono fatemi rilavare anche un paio di cose che fino ad oggi non avevo esplicitato: devo ringraziare infintamente la Infomedia, per due motivi. Il primo è i supporto che sta dando al concorso di XeDotNet, mettendo in palio dei premi e addirittura la possibilità di ripubblicare su una rivista a carattere nazionale i più bei articoli che scaturiranno da questo concorso. In secondo luogo, un ringraziamento personale lo debbo spendere per la sempre più marcata considerazione che deputano alle mie elucubrazioni letterarie. Scrivere mi piace, penso lo si sia capito, ma mai avrei pensato che fosse anche piacevole leggermi.

Buona Lettura!

powered by IMHO 1.3

Usare gli Adapter di Live Writer

Da qualche giorno su XeDotNet ho realizzato una interessante funzionalità che consente di postare i propri articoli tecnici direttamente da Windows Live Writer. In realtà quello che ho fatto è di implementare le MovableType API ritagliandone una versione ad-hoc per il sito web. Assodato che mi sono divertito parecchio (con questo tipo di lavoretti mi sento proprio a mio agio) ho avuto l'occasione di mettere il naso negli assembly di Live Writer. Sono così riuscito a scoprire come fare per istanziare uno degli Adapter (vi ricordate IMHO?). Ecco l'esempio.

using System;
using System.Collections.Generic;
using System.Text;
using WindowsLive.Writer.BlogClient.Clients;
using WindowsLive.Writer.BlogClient;
using WindowsLive.Writer.CoreServices.Settings;
using Microsoft.Win32;
using WindowsLive.Writer.Extensibility.BlogClient;
using WindowsLive.Writer.CoreServices;

namespace TestWriter
{
    
class Program
    {
        
static void Main(string[] args)
        {
            ApplicationEnvironment.Initialize();
            WebProxySettings.ProxyEnabled = 
false;

            ISettingsPersister persister = 
               new RegistrySettingsPersister(Registry.CurrentUser, @"Software\Windows Live Writer");
            IBlogCredentials credentials = 
              
new BlogCredentials(new SettingsPersisterHelper(persister));
            IBlogCredentialsAccessor credentialsAccessor = 
              
new BlogCredentialsAccessor("dummy-value", credentials);

            credentials.Username = "username";
            credentials.Password = "password";

            MovableTypeClient client = 
new MovableTypeClient(
                
new Uri("http://localhost/services/movabletype.aspx"),
                credentialsAccessor,
                PostFormatOptions.Unknown);

            
try
            
{
                BlogPost[] posts = client.GetRecentPosts("0", 5);
                Console.WriteLine(posts.Length);
            }
            
catch (BlogClientInvalidServerResponseException ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.ErrorMessage);
            }
        }
    }
}

A cosa serve? Ad esempio come nel mio caso a testare le API implementate, ma sono convinto che qualche altro utilizzo si possa trovare facilmente.

powered by IMHO 1.3

XeDotNet: Siamo sul sito Microsoft

Sono nel bel mezzo di una release e non dovrei avere nemmeno il tempo di respirare perciò immaginatevi cosa mi costa bloggare. Però l'occasione è troppo ghiotta per non buttare giù almeno due parole rapidissime. Date un'occhiata:

qui http://www.microsoft.com/italy/msdn/risorsemsdn/community/elenco.mspx
e qui: http://www.microsoft.com/italy/msdn/default.mspx (nientepopodimeno che la home page di msdn!)

Sì, ci siamo anche noi!

Grazie a chi di dovere!

powered by IMHO 1.3

Le congratulazioni di Martijn Boland

Stamane ho ricevuto una mail che mi ha fatto molto piacere da parte di Martijn Boland, l'ideatore di Cuyahoga. La riporto qui per intero:

Hi guys

I was just looking through the referrer list of the Cuyahoga site stats
and noticed a new entry with quite few hits. I visited your site and
couldn't tell it was Cuyahoga site at first look :).

Very well done!

Un grazie a Martijn, per il suo ottimo lavoro.