2006-09-30T20:41:00+01:00
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: WebDev.WebServer2 by Wilco Bauer
2006-09-30T12:42:00+01:00
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
2006-09-30T06:11:00+01:00
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
2006-09-30T05:25:00+01:00
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
2006-09-29T08:46:00+01:00
Vorrei segnalare il mio ultimo articolo, pubblicato 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.
2006-09-26T01:58:00+01:00
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
2006-09-25T06:17:00+01:00
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
2006-09-24T03:36:00+01:00
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
2006-09-24T02:09:00+01:00
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
2006-09-21T16:02:00+01:00
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
2006-09-20T01:38:00+01:00
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
2006-09-16T11:19:00+01:00
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.