Aggregator

Codice con le rughe - 1/4



Il software ha due caratteristiche davvero singolari che non ci sono negli oggetti comuni di tutti i giorni e nella maggior parte dei prodotti industriali.



William Gibson in Mona Lisa overdrive sembra conoscerle bene, è così che Angie, 3Jane e Continuity realizzano il sogno della Tessier-Ashpool di raggiungere l'immortalità nella matrice.



Il software per quanto viene utilizzato (compilato o eseguito) non si usura ne si consuma -  e  - col passare del tempo non invecchia ne deperisce.



Allora cos'è che fa diventare il codice sorgente Legacy  ???   quand'è che un programmatore considera un codice sorgente "Legacy" ???
Update E quindi _quando_ e _come_ quel codice è diventato Legacy ???


Tags :   |  |  |  |
26/08/2008 20.11.07 Luca Minudel (luKa)

Web Service: Mobile Agent + servizi + risorse

Aggiorno e dettaglio un idea che avevo già accennato sulla progettazione di Web Service e di applicazioni che li utilizzano.


Un Web Service può fornire
  • un servizio: un risultato finito e fruibile
    come l'esito della ricerca delle citazioni di un dato articolo tra i libri di una banca dati, o l'invio automatica di un allarme fatto dal sistema di controllo della cella frigo quando la temperatura sale oltre la soglia di congelamento.

  • una risorsa: la copia digitale di un dato in locale
    come il pdf di una fattura o di ordine, una immagine ad alta definizione della analisi di un pezzo danneggiato, il video delle telecamere di sicurezza di un sito controllato. la risorsa potrà poi venire  elaborata dal sistema informativo locale che la riceve.

Il WS quando fornisce un servizio ha il vincolo di "possedere" il componente sw che implementa il servizio e di avere "a portata di mano" le risorse da elaborare.


Il WS quando fornisce una risorsa ha i vincoli che derivano dal traffico di rete che genera.


Sono vincoli che derivano dallo stato della infrastruttura e dalla proprietà e dall'accesso a risorse e algoritmi. Che quindi possono cambiare anche senza che cambi la natura del problema sw che il WS deve risolvere.


Cosa succede quando dal servizio si vogliono risultati che arrivano dall'elaborazione di risorse non alla "portata di mano"  del fornitore del WS?   O quando si vogliono applicare alle risorse in possesso al fornitore del WS delle elaborazioni personalizzate? E quando l'accesso a una risorsa tramite WS supera il traffico di rete disponbile?


Bisogna adattare pesantemente il sw che implementa il WS e in alcuni casi anche le applicazioni che li utilizzano !!!


E' qui che i Mobile Agent guidati dalla Misura di Prossimità della risorsa possono risolvere il problema alla base permettendo al componente sw che implementa il servizio di andare in esecuzione remota su un nodo che si trova sufficentemente vicino alle risorse che deve accedere.

Il programmatore potrà implementare il proprio WS come se le risorse fossero disponibili in locale e dovrà indicare l'intervallo di prossimità valido per ogni risorsa che l'implementazione accede. Sarà in fase di esecuzione che il componente verrà spostato su un nodo adeguato.



La Misura della Prossimità tra il nodo di elaborazione e il nodo della risorsa è fatta in base:
  • ampiezza di banda
  • tempo di latenza
  • loss rate
  • riservatezza della risorsa

Il nodo che posside la risorsa potrà controllare i privilegi di acesso alla risorsa da parte del Mobile Agent tramite policy della Code Access Security mentre il codice di elaborazione del Mobile Agent potrà essere protetto attraverso criptazione asimmetrica del codice sotto forma di Secure Virtual Machine Language
.



Tags :   |
26/08/2008 0.05.44 Luca Minudel (luKa)

Chi scrive codice con Visual C++ cominci a dare l'addio ai puntatori (se non l'ha già fatto)

Festeggiamo la Service Pack 1 di Visual C++ 2008 perché ha rilasciato l'implementazione delle TR1 (Technical Report 1 della commissione ISO C++) la maggior parte delle quali è in sostanza l'integrazione della celeberrima libreria boost la cui integrazione nel compilatore VC++ era possibile ma non proprio una passeggiata.

Adesso non ci sono più scuse, se ancora con auto_ptr (uno smart pointer che sembrava più che altro un fool pointer) le cose erano difficili, adesso finalmente shared_ptr fa dimenticare cosa sia un puntatore.

NON sto dicendo che VC++ cambi nulla del linguaggio, anzi, implementa sempre di più quelli che sono gli standard ISO. Sto invece dicendo che grazie a queste nuove librerie, e senza installare nulla di extra, è possibile scrivere codice decisamente più pulito e realmente object oriented.

Al linguaggio C++ usato come superset del C ho sempre detto 'no grazie'.

Dimenticare i puntatori non è una penalizzazione ma un importante salto di qualità che possiamo far fare ai nostri listati. Ogni volta che usiamo un puntatore ci leghiamo indissolubilmente a una specifica zona di memoria e quindi all'hardware sottostante. Future tecnologie come transactional memory saranno inutilizzabili con listati che fanno pesante uso di puntatori.

Prendiamo ad esempio una funzione che internamente chiama una API Win32 che trasforma un SID in nome dominio e utente.

Nonostante l'uso di classi, la funzione lavora in modo C-Style. La prima chiamata a LookupAccountSid serve a farsi dire quanto devono essere grossi i buffer allocati e la seconda recupera i dati, avendo preventivamente allocato un buffer adeguato. Il problema è sempre il solito, le malefiche delete[].

Inoltre la funzione, che funge da Factory, restituisce una nuova istanza come puntatore, lasciando al chiamante il compito di ricordarsi di disallocare la memoria.

static Account* GetAccountFromSid(PSID Sid)
{
    Account *pAccount = new Account();
    pAccount->_Sid = Sid;

    LPWSTR Name, Domain;
    DWORD NameLen = 0, DomainLen = 0;
    SID_NAME_USE eUse = SidTypeUnknown;
    LookupAccountSid(NULL, Sid, NULL, &NameLen, NULL, &DomainLen, &eUse);
    if(NameLen == 0)
    {
        pAccount->_LastError = ::GetLastError();
        return NULL;
    }
    Name = (LPWSTR)new BYTE[NameLen * 2];
    Domain = (LPWSTR)new BYTE[DomainLen * 2];
    if(!LookupAccountSid(NULL, Sid, Name, &NameLen, Domain, &DomainLen, &eUse))
    {
        pAccount->_LastError = ::GetLastError();
        delete [] Name;
        delete [] Domain;
        return NULL;
    }

    pAccount->_Name = Name;
    pAccount->_Domain = Domain;
    delete [] Name;
    delete [] Domain;

    return pAccount;
}

Una implementazione alternativa che fa uso di shared_ptr è la seguente (Account e SecurityIdentifier sono la stessa classe che ha subito refactoring):

static SecurityIdentifierPtr GetFromSid(PSID Sid)
{
    SecurityIdentifierPtr spSecurityIdentifier(new SecurityIdentifier());
    spSecurityIdentifier->StoreSid(Sid);

    DWORD NameLen = 0, DomainLen = 0;
    SID_NAME_USE eUse = SidTypeUnknown;
    LookupAccountSid(NULL, Sid, NULL, &NameLen, NULL, &DomainLen, &eUse);
    if(NameLen == 0)
    {
        spSecurityIdentifier->_LastError = ::GetLastError();
        return SecurityIdentifierPtr();
    }

    shared_ptr<WCHAR> spName(new WCHAR[NameLen]);
    shared_ptr<WCHAR> spDomain(new WCHAR[DomainLen]);
    if(!LookupAccountSid(NULL, Sid, spName.get(), &NameLen, spDomain.get(), &DomainLen, &eUse))
    {
        spSecurityIdentifier->_LastError = ::GetLastError();
        return spSecurityIdentifier;
    }

    spSecurityIdentifier->_Name = spName.get();
    spSecurityIdentifier->_Domain = spDomain.get();
    spSecurityIdentifier->_SidType = eUse;
    return spSecurityIdentifier;
}
 

Il puntatore al buffer interno è allocato e mantenuto all'interno dello smart pointer e spName.get() permette il passaggio del puntatore senza mai il rischio di subire un memory leak.

Inoltre anche il passaggio dello smart pointer della istanza creata con il metodo Factory al chiamante viene fatta con lo smart pointer SecurityIdentifierPtr così definito:

class SecurityIdentifier;    // forward declaration
typedef shared_ptr<SecurityIdentifier> SecurityIdentifierPtr;

class SecurityIdentifier
{
...

Cioè abbiamo definito SecurityIdentifier come un nuovo tipo che equivale a shared_ptr<SecurityIdentifier>

Lo smart pointer verrà distrutto alla fine del metodo e ricostruito in uno nuovo del chiamante:

SecurityIdentifierPtr spsid = SecurityIdentifier::GetFromSid(Info.Sid);

 

Che dire, sembra codice tanto pulito quanto quello di C#! ... ma con tutti i vantaggi di C++ :-)

Una volta costruite le classi C++ native, non rimane che wrapparle con una dll C++/CLI e usare il tutto da C#. E con questo ci possiamo dimenticare di quelle cervellotiche dichiarazioni PInvoke.

 

Dulcis in fundo, shared_ptr può anche essere usato dentro i container come list e vector delle STL, creando così liste di puntatori che disallocano correttamente gli oggetti puntati (e quindi senza i memory leak che sarebbero derivato dall'uso di questi container con auto_ptr).

class Aces : public list<AcePtr> {};

 

Fino a prima del Feature Pack (adesso assorbito dalla SP1 di VS2008) mi ero arrangiato con smart pointer casalinghi e liste di puntatori casalinghe, etc. Ma ora è decisamente tutto più pulito e le novità delle TR1 sono ovviamente molte molte di più e tutte da scoprire.

25/08/2008 22.23.30 Raffaele Rialdi Web Log di Raffaele Rialdi

Geniodelmale@Vienna

Per la serie “Cronache di un Blue Badge”, questa settimana sono a Vienna, per seguire due corsi (non tecnici). E’ la terza volta che vengo a Vienna, durante la prima, una vita fa, era straripato il Danubio, durante la seconda c’era stato una specie di tornado… speriamo stavolta di non provocare troppi danni… smile_confused

Da un lato non mi sembra ancora che sono finite le vacanze (una sola settimana passata in bicicletta in Alto Adige/Sudtirol, passando poi per Trento, Riva del Garda e in barca fino a Peschiera) vista la lingua e anche la cultura locale molto simile a quella altoatesina.

Nonostante quello che si possa immaginare le differenze ci sono, qui sono molto più “organizzati” e “rigidi” che a Bolzano e dintorni.

Ora colazione e poi si comincia…

Non so quanto riuscirò a bloggare… probabilmente ricomincerò a pieno ritmo dalla settimana prossima… vedremo… smile_regular

25/08/2008 7.35.14 Lorenzo Barbieri Lorenzo Barbieri @ UGIblogs!

.NET Framework: Le dimensioni contano…

Effettivamente c’è molta confusione sulle dimensioni reali del .NET Framework…, l’unica certezza è che, versione dopo versione, le dimensioni aumentano e, allo stato attuale, le dimensioni sembrerebbero circa 200 MB.
In realtà non è proprio così, o almeno non è vero che per installare da zero il .NET Framework SP1 sia necessario scaricarsi tutti i 200 MB.
Questo post di Scott Hanselman chiarisce ogni dubbio e, se volete capire quanti MB dovete scaricare per aggiornare una qualsiasi macchina, potete andare su www.smallestdotnet.com

Technorati Tags:
24/08/2008 19.42.44 Corrado Cavalli Corrado's BLogs

Modificare metodi interminabili: strategia

 White Zig Zag di Wassily Kandinsky


Il modo naturale di procedere per rimuovere il codice duplicato?     procedere per tentativi facendo passi in avanti e ogni tanto passe indietro: ad ogni tentativo il disegno originale apparirà più chiariro e cosi il modo di procedere.


Ad esempio tovato un grande if o switch si può cominciare a estrarre in metodi i corpi degli if e in funzioni le espressioni condizionali  oppure estrarre insieme nello stesso metodo la condizione insieme al corpo del if.


La prima strada può evidenziare corpi di if uguali richiamati in diversi punti del metodo, la seconda può evidenziare if interi ripetuti. Provare aiuta ad avvicinarsi velocemente al la rispostra migliore.

 

Riferimenti: Working Effectively with legacy code di M.C.Feathers

Tags :   |  |  |  |

23/08/2008 17.51.51 Luca Minudel (luKa)

Una difficile scelta: la tastiera!

Qualche giorno fa sono riuscito finalmente a sistemare un po' il mio studio a casa e quindi da un po' ho iniziato a lavorare su tastiera e monitor separati e non piu' direttamente sul portatile che invece rimane a fianco come secondo monitor.

Ecco che mi sono trovato di fronte l'ardua scelta di adottare una tastiera il cui feedback soddisfi il mio esigente tatto. Purtroppo mi sto rendendo conto che scegliere una tastiera adeguata e' un compito difficile. Nonostante abbia acquistato ben tre tastiere (2 Microsoft e 1 Logitech), l'unica che mi da la necessaria soddisfazione e conseguente velocita' e' quella "originale" del portatile. Il problema e' sempre lo stesso. La mia mano ha necessita' di una tastiera che non "opponga resistenza". Questo purtroppo non e' vero per 2 su 3 delle tastiere e tra esse la Logitech e' in assoluto la peggiore che oltre a "dimenticarsi" di rispondere alle mie dita un po' troppo spesso dato che richiede una notevole pressione, mi infastidisce con un clack-clack odioso. L'ultima tastiera, la Microsoft Natural Ergonomic Keyboard 4000 ha un feedback decisamente migliore ma non ancora quello che mi aspetterei. Pero' il suo uso mi regala un fastidioso affaticamento alle mani che probabilmente ormai sono assuefatte alle tastiere normali e rifiutano l'ergonomicita'.

Ora, reduce da tre tastiere e impossibilitato a continuare a provare tastiere dato il loro non irrisorio costo mi chiedo quale sia la tastiera migliore che si puo' trovare sul mercato. Sono anche disposto a spendere un po' dato che la qualita' del mio lavoro dipende in gran parte da questo strumento. Chissa se qualcuno di voi non abbia qualche preziosa indicazione da darmi...

Technorati Tag:
23/08/2008 15.17.37 Andrea Boschin Radicalmente

Modificare metodi interminabili: quando il tool di Refactoring manca


Quando è necessario modificare un metodo lungo centinaia o migliaia di righe di codice e modificare un comportamento esistente senza l'aiuto di un tool di refactoring conviene   SCOMPORRE IL METODO ABNORME E METTERLO SOTTO TEST   applicando delle tecniche specifiche.


Visto che è difficile scrivere dei test sul quel metodo, allora si inserisce il test dentro il metodo. L'idea consiste nel inserire delle variabili di rilevazione nel codice del metodo che "misurano" se si è comportato correttamente e queste variabili vanno a testare le stesse cose che si testerebbero se si potessero scrivere test unitari sul metodo abnorme. 


La prima è una tecnica di test duale ed equivalente agli unit test per quanto riguarda la possibilità di verificare un comportamento. Se si può istanziare la classe in un test basta dichiarare le variabili di rilevazione pubbliche di classe e testarle dopo aver chiamato il metodo, altrimenti si possono usare dei Debug.Assert() e in questo caso è importante ricordarsi di esercitare il codice in modo che tutti i rami condizionali vengano eseguiti.


Una volta fatti i refactoring per scomporre il metodo e messo sotto test le parti estratte bisogna rimuovere variabili e test e Debug.Assert().


La seconda tecnica consiste nel estrarre piccole parti ci codice conosciuto di cui si sa bene cosa fa e come verificare che sta ancora funzionando correttamente (provando il programma). Con piccole si intende poche righe e poche dipendenze del codice cioè pochi parametri che serve passare al metodo che si estrae.  Conviene partire dalle parti più piccole di codice (con zero parametri), procedendo il disegno e la struttura del metodo abnorme diventa più chiara ed poi è più facile procedere. Quando i parametri sono più di zero torna utile usare anche le variabili di rilevazione.


Ci sono due ulteriori tecniche chiamate Gleaning Dependencies (in breve consiste nel mettere sotto test il codice che implementa la responsabilità principale del metodo abnorme ed estrarre a mano le funzionalità secondarie) e Break out Method Object (in breve consiste nello spostare il metodo estratto in una classe apposita, le variabili locali diventano globali ci classe e i parametri diventano argomenti del costruttore).

 

Riferimenti: Working Effectively with legacy code di M.C.Feathers

 


Tags :   |  |  |  |

 

22/08/2008 18.07.05 Luca Minudel (luKa)

Limitare le interruzioni


Scrivere codice è una di quelle attività che funziona meglio senza interruzione invece che in multi-tasking          Il codice risulta migliore e il lavoro richiede meno tempo        Punto.


Nel mondo reale può capitare che le cose cambiano senza preavviso  (una data, un requisito, una priorità è cambiata) anche cose che hanno conseguenze sul codice che si sta scrivendo. E può capitare che un collega o un cliente in ritardo abbia un grosso bisogno di aiuto per cavarsela.


Ecco perchè saltare come una molla da una cosa all'altra funziona tanto quanto (il suo opposto ossia) chiudersi in una bunker e uscire solo a iterazione completata. Cioè poco.

Il punto quindi è trovare la misura che funziona meglio nella propria specifica situazione. Ecco alcune indicazioni.






Riguardo le piccole interruzioni da colleghi e utenti/clienti ad ogni richiesta la si può annotare e promettere di richiamarli appena finita la cosa in corso: si può aspettare di finire il pomodoro in corso  o più pomodori (= più mezzore) senza mai interrompere un pomodoro iniziato.

Quante ragioni di "interruzione" sono già note allo stand-up e possono essere schedulate nella giornata senza causare task-switch
improvvisi ? Quanti pomodori i colleghi e gli utenti/clienti possono aspettare prima di ricevere risposta ?  E quante interruzioni lo sviluppatore riesce a fare senza deteriorare il suo lavoro?

La risposta si può scoprire con la pratica, provando e ragionandoci a posteriori alla retrospective.





Riguardo il cambio dei piani durante l'iterazione da utenti o clienti a meno che non sia un abort della interazione anche qui si può annotare la richiesta e
promettere di incontrare l'utente o cliente appena conclusa l'interazione in corso.

Quanti dubbi o incertezze del piano sono già note al Planning Game e le user story relative possono essere spostate all'iterazione successiva quando i dubbi sono risolti
? Fino a quanto gli sviluppatori riescono a spezzare una richiesta in user story di pochi giorni ? E quanti giorni possono aspettare utenti o clienti per cambiare il piano in corso   ?

Anche queste risposte si possono trovare con la pratica, provando interazioni di mezza-1-2 settimane e ragionandoci a posteriori alla retrospective.




Tags : 
 |  |  |
21/08/2008 18.34.45 Luca Minudel (luKa)

Sviluppatore Mobile + Silverlight 2.0 beta 2? Non con Visual Studio 2008… (KB950630)

Sono reduce di una di quelle giornate altamente improduttive, anche se in effetti ho lavorato più (e più intensamente) del solito… Quest’oggi in azienda abbiamo scoperto che un PC su cui abbiamo recentemente installato Visual Studio 2008 (e non ancora la SP1) improvvisamente non riusciva più a connettersi ad un processo in debug su un Device Windows CE.

Partendo con il classico F5 il problema non si pone, il processo viene agganciato e il debug va a buon fine. Invece, dal menù di Debug>Attach to a process... si ottiene un errore criptico per quanto stringato e inutile: "Unable to attach to the process". Io e i colleghi Andrea e Mirco abbiamo perso l'intera giornata cercando di capire cosa non funzionasse e alla fine ci siamo resi conto che il problema non affliggeva solo una macchina ma anche altre nella rete. Alla fine, stremato dagli inutili tentativi la soluzione si è presentata così inattesa da risultare inverosimile.

La chiave che accomuna le macchine che presentavano il problema è la presenza dei "Silverlight 2.0 Tools for Visual Studio 2008" e l'aver notato questa peculiarità è stata la chiave per risolvere il problema. Il fatto è che questi Tools (che sono tuttora in beta) installano una patch per Visual Studio 2008 (KB950630). Tale patch è così fantomatica che non se ne trova nemmeno traccia sul sito Microsoft. Il link alla Knowledge base che si trova nell'About box di VS2008 è semplicemente bucato. Inoltre il disinstallare i tools non è sufficiente a risolvere il problema; infatti la patch rimane installata.

Immagine3

Disinstallate a mano la KB950630 e tutto magicamente tornerà a funzionare.

Morale? Se sviluppate con Silverlight 2.0 non potete fare l'attach dei processi con Windows CE e naturalmente se sviluppate con Windows CE non potete installare i necessari tools di Silverlight.

20/08/2008 15.40.45 Andrea Boschin Radicalmente

Reflector passa a Red-Gate

Il tool per .NET più famoso della terra abbandona il suo papà storico Lutz Roeder e passa al gruppo Red-Gate, la buona notizie è che in ogni caso, il tool rimarrà free.

Fonte: The future of .NET Reflector

Technorati Tags:
20/08/2008 8.35.06 Corrado Cavalli Corrado's BLogs

WPF Text Clarity

Una delle maggiori lamentele rivolte a WPF riguarda il rendering del testo, sopratutto in caso di piccole dimensioni dove il testo appare effettivamente leggermente “sfuocato” rispetto alla controparte GDI+
Se siete curiosi di capire il perchè di questo problema ed eventualmente come ‘mitigarlo’ leggete questo articolo.

Technorati Tags:
19/08/2008 20.35.17 Corrado Cavalli Corrado's BLogs

Client Profile Deployment Survival Guide

Se avete intenzione di utilizzare la nuova modalità di distribuzione Client Profile e sopratutto volete ridistribuire il Client Framework insieme alla vostra applicazione, non perdetevi questo link

Technorati Tags:
19/08/2008 15.45.05 Corrado Cavalli Corrado's BLogs

Martin, mi hai deluso..

Seguo da tempo il blog, i video di Martin Varsavsky, un venture capitalist che vive in spagna ma ha investimenti in tutto il mondo, famoso per il network fon. Sono anch’io un fonero, peraltro.  Con il post “Honesty as a comparative advantage: Italy vs Spain” mi ha proprio deluso. E’ chiaramente un post scritto di [...]
19/08/2008 9.43.19 Marco Trova .mark.net - Marco Trova

dotNETUmbria: Battista, puoi pubblicare questo mini tips? Ecco come utilizzare messenger per fare co

Messenger è utilizzato nei modi più svariati e la sua diffusione è tale da permettere sempre nuove iniziative con la certezza di raggiungere un buon numero di potenziali utenti. Forse è questo il motivo che ha spinto dotNETUmbria a decidere di creare un bot per Messenger che permetta di pubblicare mini tips nel sito della community. Se siete curiosi potete trovare il post originale di Paolo qui: Un Chatbot per postare su dotnetumbria.org e se pensate che possa essere utile anche per la vostra community qui trovate il progetto in Codeplex: Battista.

17/08/2008 23.37.01 davide Blog di Davide Vernole

Italia? Paese di disonesti... parola di Martin Varsavsky

Non ho commenti in merito (o meglio quelli che mi vengono non si possono scrivere...). Lascio a voi trarre le conclusioni e magari dire due parole al figuro che ha scritto quanto vi riporto nel suo piu' recente post... (grazie a Marco per la segnalazione)

Link: Honesty as a comparative advantage: Italy vs Spain

17/08/2008 22.55.34 Andrea Boschin Radicalmente

[.NET FX SP1] Eseguire codice managed da uno share di rete

Col SP1 si può! e senza necessariamente impostare i criteri di sicurezza per lo share interessato.
La motivazione è semplice: Impedirlo non aggiungeva nessuna sicurezza in quanto Windows comunque permette l’esecuzione di applicazioni unmanaged.

Fonte: qui

Technorati Tags:
14/08/2008 9.54.02 Corrado Cavalli Corrado's BLogs

Giornata di aggiornamenti: Visual Studio 2008 SP1 & C.

.NET Framework 3.5 SP1 Language Pack Microsoft .NET Framework 3.5 SP1 Language Pack contain translated text, such as error messages, for each language. .NET Framework 3.5 Client Profile The Microsoft .NET Framework 3.5 Client Profile contains the .NET Framework assemblies needed for the installation and distribution of .NET Framework client applications. Silverlight Tools Beta 2 Add-on for Visual Studio 2008 [...]
12/08/2008 13.35.45 admin .mark.net - Marco Trova

Per chi (come me) aveva su la Beta del SP1 di VS2008 e vuole fare pulizia…

La strada migliore è quella di usare il “Preparation Tool”…

11/08/2008 20.35.26 Lorenzo Barbieri Lorenzo Barbieri @ UGIblogs!

Perchè dopotutto mi sento sempre e ancora orgoglioso di essere europeo…

Ho letto il post del Prof. Fuggetta, e concordo pienamente su tutto.

Vedo questo assalto della Russia alla piccola Georgia. Ripenso a quello che dice Berlusconi del suo “amico” Putin e poi a quello che dice dei “comunisti” che ci sono in Italia.

Ma lasciamo perdere la “polemica politica”. Mi sa che in questo mondo di prepotenti e interessi economico-politici devastanti (vedi gli USA di Bush, la Russia, la Cina, e il disastro del continente Africano), l’unica speranza vera è l’Europa, la sua cultura, il suo umanesimo che forse non è ancora tramontato. Su questo ha ragione Rifkin: l’Europa è la speranza di questo mondo disastrato e disastroso.

Se solo fossimo capaci di essere veramente una “European Union”.

Fonte: Meglio l’Europa

11/08/2008 10.34.48 Lorenzo Barbieri Lorenzo Barbieri @ UGIblogs!

YSOD in banca… nel 2008? :-S

Senza parole…

image

08/08/2008 11.53.23 Lorenzo Barbieri Lorenzo Barbieri @ UGIblogs!

Finalmente è arrivata…

Opel Astra SW Cosmo 150Cv… Colore grigio azzurrino… Bella… veramente bella…

E adesso per un po’ dovrei essere a posto… ringrazio la Bravo e la 147 che mi hanno accompagnato da Aprile a ieri… smile_wink

08/08/2008 11.50.12 Lorenzo Barbieri Lorenzo Barbieri @ UGIblogs!

Auguri Codeplex

Dal blog di Somasegar arriva la notizia che in questi giorni Codeplex compie 2 anni. Con più di 1000000 di hit al giorno, 5000 progetti e ben 7 server TFS direi che il compleanno va festeggiato con tutti gli onori.

http://blogs.msdn.com/somasegar/archive/2008/08/06/codeplex-celebrates-its-2nd-birthday.aspx

Technorati Tags: ,
07/08/2008 7.49.35 Andrea Boschin Radicalmente

Silverlight: Un blog su deep zoom

Pare che sia stato aperto un blog dal team di DeepZoom

http://blogs.msdn.com/lutzg/

Stiamo a vedere.

Technorati Tags: ,
06/08/2008 8.07.51 Andrea Boschin Radicalmente

Allergici alle traduzioni italiane? Dite la vostra!

Chi mi conosce sa bene quanto io sia allergico a certe traduzioni. È come se un americano si mettesse a tradurre tutti i termini specialistici botanici che sono in lingua latina. Allo stesso modo l'informatica è di dominio della lingua inglese e trovo azzardato tradurre termini che non hanno una ovvia e diretta corrispondenza nelle altre lingue.

Da un po' di tempo Licia Corbolante, esperta in terminologia di Microsoft Italia e preziosa alleata nel limitare le traduzioni azzardate in Italiano, ha  iniziato a bloggare. Dico preziosa alleata perché le riconosco di aver sempre cercato il giusto compromesso tra l'esigenza di tradurre per chi non è pratico e l'esigenza di non tradurre per evitare ancora più confusione.

Proprio oggi l'amico Cristian mi segnala che Licia ha lanciato l'iniziativa ha lanciato l'iniziativa del terminology community forum in cui le community possono dire la loro circa la scelta dei termini.

No more excuses! Fatevi sotto e dite la vostra se la scelta di un termine tradotto non vi piace.

04/08/2008 22.37.36 Raffaele Rialdi Web Log di Raffaele Rialdi

Troppo POCO ... il troppo stroppia

Non posso che concordare sul discorso Persistence Ignorance fatto pìù volte da Andrea sull'entity framework.

Con altrettanta convinzione affermo però che la completa ignoranza dall'infrastruttura è utopica in scenari reali:

  • INotifiyPropertyChanged /  INotifiyPropertyChanging ha un costo neppure tanto basso quando è implementato negli oggetti a causa del raising degli eventi. Nella RafCollection avevo scritto INotifiyPropertyChanging ben prima che il framework la introducesse ma sono tornato indietro sfruttando la INotifiyPropertyChanged con parametro null per motivi di performance.
    Se penso di usare addirittura un proxy, i valori di performance si alzano vertiginosamente.
  • IEditableObject è inerentemente compito dell'entity in quanto gestisce la transazionalità dello stato dell'entity stessa. Questa interfaccia garantisce la coerenza dello stato dell'oggetto quando vengono effettuate modifiche a più proprietà.
  • Cloning. Nessuna interfaccia qui per il noto articolo di Brad Abrams. Ma non c'è dubbio che il clone di un oggetto è molto più efficiente se fatto su membri *privati*.
    Esempio: Il datetime mantiene un intero a 64 bit. Se io per clonarlo copio tutte le proprietà (giorno, mese, anno, ...) invece di duplicare il valore a 64 bit sto facendo un pessimo lavoro.
    Ricordiamoci che non tutte le entity sono fatte di fields 1:1 con le proprietà e una strategia come POCO la si implementa per tutte le entity o nessuna.
  • ISerializable / IXmlSerializable. E qui faccio veramente fatica a vedere un proxy che possa risolvermi questa situazione in modo anche lontanamente decente. Il serializzatore Xml tra le altre cose genera al volo con CodeDom il codice per generare una serializzazione performante.
    Io mi sono scritto un serializzatore Xml che fa le stesse cose di quello standard ma le performance sono ben lontane da quelle ottenute grazie a CodeDom.

Poi arriviamo a motivazioni più pratiche. Il costo di creazione e manutenzione dei proxy e del codice che serve a fare quelle stesse cose (ma dall'esterno dell'entity) non è poco: maggiore complessità e ciclo di vita più lungo del software.

BTW, come ho detto ai Community Days, mi stupisce che i framework IoC e il neonato MEF lavorino ancora così tanto di reflection invece di sana generazione di codice adhoc a *design* time.

E una volta che fosse possibile trovare il compromesso e arrivare finalmente ad una totale agnosticità del domain model, che ci guadagno? È tutto scritto in C#, dipende tutto dal framework, da un CLR all'altro certe classi potrebbero diventare obsolete, ...

Insomma *IMHO* bisogna arrendersi al fatto che tutto quello che scriviamo è legato alla tecnologie che usa. Questo non toglie che questo vincolo possa permetterci il cross-platform (vedi Mono) ma non certo l'universalità.

Urka, una volta che non sono daccordo con Il Presidente, adesso rischio dei perdere i gradi smile_tongue

29/07/2008 11.56.34 Raffaele Rialdi Web Log di Raffaele Rialdi

Beyond Persistence Ignorance: *real* POCO

Negli ultimi mesi, complice anche la querelle "PI or not" portata alla luce da "vorrei ma non posso (ancora)" Entity Framework, ho ulteriormente riflettuto sul valore di un Domain Model agnostico alla persistenza ed ho concluso che PI non basta. Quello che "voglio" è un DM agnostico alla infrastruttura: non voglio PI, non mi basta. Voglio POCO, ma sembra che sia... Troppo <g> (interessante gioco di parole)

Detta "seriamente", vorrei poter modellare un DM concentrandomi sulla soddisfazione dei requisiti "business" (DDD anyone?), ed avere uno stack tecnologico in grado di "appiccicare" in qualche modo il codice necessario alla infrastruttura. Tanto per fare un esempio pratico, vorrei poter evitare di *sporcare* il mio DM implementando INotifyPropertyChanged "solo" perchè così alcuni scenari diventano + comodi da implementare. Un approccio già praticabile sarebbe quello basato sulla generazione dinamica dei proxy unita all'uso dei mixin (a proposito, perchè MS non ne parla più?). Per intenderci, con Castle.DinamicProxy2 si potrebbe impostare così:

ProxyGenerator gen = new ProxyGenerator();
ProxyGenerationOptions options = new ProxyGenerationOptions();
options.AddMixinInstance((INotifyPropertyChanged) new INotifyPropertyChangedImplementation());

Product proxy = (Product)gen.CreateClassProxy(typeof(Product), new Type[] {typeof(INotifyPropertyChanged)}, options, new InvokeInterceptor());
return proxy;

In questo scenario, INotifyPropertyChangedImplementation potrebbe usare una hashtable/dictionary per implementare una strategia genericamente valida. Una implementazione di questo tipo, pur soffrendo dell'overhead necessario alla generazione dei proxy, sarebbe sufficiente nella maggior parte dei casi. Un'altra opzione che sto indagando si basa invece sulla code generation a compile time: probabilmente basterebbe una "custom action" per msbuild, e se fossi MS indagherei seriamente in tal senso.

Ciò di cui sono sicuro è che l'esigenza di un DM "infrastructre agnostic" sia fondamentale: su Linq 2 SQL pende una spada di Damocle e Entity Framework è, negli interessi di MS, il perno della propria strategia MDD. Già sappiamo che le entità gestite da EF saranno recepite (per esempio) dai Reporting Services di SQL Server, quindi è importante evitare sin da subito di avere un DM all'interno del quale ogni framework/sottosistema infili il proprio "ciarpame": il DM è "business", e tale dovrebbe rimanere.

29/07/2008 10.48.03 Andrea Saltarello StrangeLog - Il blog di Andrea Saltarello

Architetture multilayer fatte di programmazione funzionale, provider e servizi

L'ingresso di Linq nel Framework è stato prepotente. I tangibili vantaggi di Linq to Sql e le promesse delle future versioni di Entity Framework hanno scatenato una vera e propria corsa a Linq. E pensare che siamo solo alle prove tecniche di trasmissione dei concetti di programmazione funzionale dentro il Framework ...

Mi è saltata in mente un'idea balzana. Ma voglio prima partire riaffermando alcuni concetti ormai consolidati da case studies e libri di fama:

  • Le architetture multilayer sono più facili da difendere (sicurezza applicativa)
  • L'astrazione con provider è un vantaggio in termini di evoluzione dell'applicazione e di manutenibilità
  • I servizi (stateless) garantiscono un alto margine di scalabilità

Vediamo come sfruttare la programmazione funzionale in una architettura multilayer. Per esempio la UI:

  • tipicamente esegue molte operazioni di selezione di entità caratterizzate da  un certo numero di proprietà [projection]
  • ha la necessità di filtrare i risultati [restriction]
  • spesso deve paginare i risultati perché sono comunque troppi [partitioning]
  • deve anche ordinare i risultati secondo un criterio [ordering]
  • può avere bisogno di raggruppare [grouping] o di aggregare (sum, count, max, ...) [aggregation]
  • ...

Tutto questo ricorda molto gli operatori di Linq smile_regular

Il service layer da parte sua espone già un contratto che permette una astrazione rispetto il data server o comunque le risorse sottostanti. Ma la difficoltà sta proprio nel contratto che il più delle volte è "ad hoc" per la nostra applicazione. Un domani che dovessimo usare un contratto differente, dovremmo necessariamente applicare una di queste soluzioni: (a) cambiare la UI per supportare il nuovo servizio, (b) creare un nuovo servizio che "trasformi" i dati con il nostro formato, (c) usare BizTalk per piallare le differenze.

L'idea balzana è semplice:

  • usare i provider di Linq come "adapter" per lo strato dei servizi
  • i provider useranno gli expression tree (che sono serializzabili) come "linguaggio" per mappare le richieste della UI sul servizio (Expression.Call esegue un determinato metodo)
  • Le Expression.Call possono essere usate anche per le operazioni che non facciano mero retrieval di valori (per esempio insert/update/delete)
  • usare sempre gli expression tree per le restriction (And, Not, Or, etc.). [Questo non esclude di poter avere oggetti di business differenti nel presentation e nel service layer in quanto convertire un expression tree non è complesso.]
  • ...

Il vantaggio immediato è quello di ottenere un presentation veramente sterile, persino dai servizi; ...di avere una architettura a provider "gratis"; ...di avere i preziosi expression tree senza alcuno sforzo; ... di lavorare in modo strong-typed.

Sento già le ambulanze suonare ma io la vedo così...

28/07/2008 19.06.05 Raffaele Rialdi Web Log di Raffaele Rialdi

[OT] Xobni rocks!

Un po' di tempo fa, quando mi feci riconoscere come utente di Xobni, "Il solito ignoto" mi prese di mira (in modo assolutamente benevolo, si intende). Da tempo lo usavo e avevo il suo logo nella home del mio blog.

Per chi non lo conoscesse Xobni, nome derivato da Inbox al contrario, è un plugin per Outlook che organizza e cerca le email. Non è il solito indexer e, a onor del vero, i risultati della ricerca sono ottimi ma non sono sempre così ben fruibili rispetto ai più noti google search e windows desktop search.

Ho cercato più volte di convincere il nostro super-esperto di Web 2.0 ad usarlo e dalla RTM già include una feature tipica da Web 2.0 che continua a stupirmi per quanto sia fantastica.

Sto parlando dell'integrazione con LinkedIn che fornisce un volto ai mittenti delle email. Seleziono una email, e parte la ricerca della foto, se presente e resa pubblica, presente nel profilo del mittente su LinkedIn.

Semplicemente geniale e così non stupisce che lo stesso Bill Gates abbia definito Xobni come la prossima generazione del social networking.

Adesso spero che arrivi anche l'integrazione con Facebook che sembrerebbe il candidato perfetto.

25/07/2008 18.11.06 Raffaele Rialdi Web Log di Raffaele Rialdi

Tempo per le tue parole

Premessa: questo post è esplicitamente diretto ad un "pubblico" dark e/o indie: astenersi perditempo e alternativi :-)

Loro sono i modenesi FATA ed hanno pubblicato un singolo d'esordio che è troppo bello per essere vero, solo che poi li ascolti live e capisci che è.... "Davvero vero". Una "sindrome da primo ascolto" paragonabile a quella causata da Lights degli Editors, per intenderci. Come dice il famoso proverbio: Ascoltatore avvisato, mezzo album "La percezione del nero" comprato <g>

Technorati Tag: ,
25/07/2008 9.31.40 Andrea Saltarello StrangeLog - Il blog di Andrea Saltarello

Scrum for Team System: è possibile registrarsi per la Beta 1 della Task Board

clip_image001Trovare una metodologia adeguata da utilizzare nei team di sviluppo non è certo una cosa semplice. Dopo qualche anno di esperienza con Team Foundation Server utilizzando MSF Agile for TFS, sono arrivato a Scrum for Team System. Scrum è una metodologia agile che, a mio parere, bene si sposa con il nostro mercato in cui non si ha sempre un team con la maturità adeguata per essere completamente autonomo nella conduzione delle attività assegnate ed in cui il concetto di qualità test e qualità spesso lascia a desiderare. In questo e per altri motivi, questa metodologia aiuta a migliorare la qualità delle soluzioni realizzate e a mantenere il giusto livello di controllo sull'andamento di un progetto software.

Perchè vi ho parlato di Scrum? Semplicemente perchè, se qualcuno lo utilizza, oggi può entrare a far parte dei beta tester della Task Board, strumento perfetto per seguire e gestire progetti basati sulla metodologia agile seguita dal template di Scrum for Team System. Se siete interessati potete iscrivervi e scaricare la Task Board da questo link: Task Board for Team System - Beta 1 Registration.

24/07/2008 6.31.26 davide Blog di Davide Vernole

Formazione gratuita grazie a Microsoft e-Learning

Qualcuno di voi già li utilizzerà mentre altri magari non conoscono ancora i servizi di formazione Microsoft. Penso che non faccia male ricordare che Microsoft e-learning offre spesso dei corsi gratuiti che si possono seguire online o offline con l'opportuno tool (scaricabile da qui: E-Learning Offline Player). Comunque, ecco il link ai corsi gratuiti attualmente a catalogo. Volendo potete anche sottoscrivere il feed che vi tiene aggiornati su nuovi corsi e promozioni.

Dimenticavo, se avete Windows Vista e vi trovate in difficoltà ad installare il player, ecco il link ad un mio post in cui trovate come risolvere il problema: E-Learning Offline Player e Windows Vista.

Technorati Tags: ,
24/07/2008 6.18.17 davide Blog di Davide Vernole

Apples to Oranges

Capisco che era il bancone delle "offerte speciali", ma in ogni caso vedere nello stesso scaffale Opel di Syd Barrett e l'album dei 30 Seconds to Mars mi perplime.

23/07/2008 8.56.49 Andrea Saltarello StrangeLog - Il blog di Andrea Saltarello

Pattern o non pattern?

Raffaeu mi porge un (gradito) complimento, che è però anche un interessante spunto per una riflessione. BTW, niente di nuovo all'orizzonte, perchè è una riflessione che ho già ampiamente esposto durante il tutorial dei Community Days, ma ritengo comunque interessante estenderla.

Un moderno emulo di Gian Battista Vico non esiterebbe ad includere il seguente scenario tra i "corsi e ricorsi storici": quando un dev entra in contatto con i [design|architecture|refactoring|vattelapesca] pattern la reazione è, tipicamente, una delle seguenti:

  1. Il dev diventa un "pattern fanatic": parla continuamente di pattern e li infila dappertutto (un divertente "asse cronologico"" di questo scenario 1 è disponibile in [Nilsson, ADDD.NET])
  2. Il dev li rifiuta in quanto (scegliere il proprio "best pick"): inutili, "acquacaldosi", eccessivamente astratti, ...

Ma i pattern rappresentano (o aggiungono) davvero un valore? Parliamone :-)

Partendo dal presupposto che la soluzione sia basata sul FX .NET o comunque implementata utilizzando un linguaggio che aderisca al paradigma object oriented, quando "progettiamo" ("to design" in inglese) un sistema dovremmo farlo tenendo *bene* in mente i requisiti e i princìpi di progettazione OO; i requisiti rappresentano ciò che il sistema deve fare e per un architetto sono "sacri ed inviolabili" giacchè:

  • Se funzionali, sono di competenza di un analista che ha *sicuramente* una comprensione del dominio  superiore alla nostra
  • Se non funzionali, sono frutto di qualche accordo "contrattuale" (es: SLA)

Ergo, non è certo inclusa nella "carta dei diritti" di un architetto la possibilità di modificarli a propria volontà. Per quanto riguarda i requisiti, inoltre, la norma ISO9126 svolge un ottimo lavoro di categorizzazione e rende evidente la natura di requisito di "topic" (troppo) spesso trascurati quali (a puro titolo di esempio ed in rigoroso ordine alfabetico): interoperability, security e testability.

Affrontato il "cosa", dedichiamoci al "come": un buon architetto è un uomo (o donna) di... Sani princìpi :-) Dal primordiale "...you must find pertinent objects..." ai vari DIP/LSP/OCP/SRP/... essi sono il "razionale" che ci deve guidare nelle nostre scelte progettuali a qualunque livello di dettaglio. Se anche i pattern non esistessero, questi principi ci permetterebbero in ogni caso di scrivere del "buon codice". Ma i pattern esistono, quindi... Che fare? Semplicemente, non vivere "inseguendoli" (i pattern). Non "snobbiamoli/ignoriamoli", ma impariamo ad evere un approccio rilassato nei loro confronti. Affrontiamo un problema alla volta e, se avessimo l'evidenza che quello che stiamo affrontando sia risolto da un pattern, usiamolo senza remore: nessuno oggi si inventa una tecnica risolutiva per il problema "gestione di un documento strutturato" quando esiste Composite.

Spesso però confondiamo una congettura con una evidenza, e dovremmo invece migliorare la nostra capacità di riconoscere le congetture. Di fronte ad una congettura, trasformiamoci in Pollicino ed usiamo requisiti e principi come "traccia" per affrontare lo scenario: facendolo sistematicamente realizzeremo comunque una soluzione strutturalmente simile a "qualche" pattern, nel qual caso valuteremo se un "refactoring to quel pattern" possa portare del valore aggiunto, altrimenti... Squadra che vince non si cambia :-)

In (estrema e quindi approssimativa) sintesi: i pattern possono essere un "fine" (refactoring to pattern) od un "mezzo" (abbiamo un problema *chiaramente* risolto da un pattern in modo ottimale), e a volte "il fine giustifica i mezzi". Di certo non "sono" un valore, anche se "hanno" valore, giacchè sono "soluzioni *dimostrate* funzionanti a problemi ricorrenti".

18/07/2008 10.12.47 Andrea Saltarello StrangeLog - Il blog di Andrea Saltarello

Refresh4 per NSK

Ho migrato NSK alla versione refresh4 del framework ASP.NET MVC rilasciata ieri, "fondendo" la web app con il sample project standard in modo da avere "gratis" l'implementazione della login: poichè è basata sul SqlMembershipProvider, è necessario creare il "solito" aspnetdb.mdf in App_Data.

Non ho sperimentato alcun problema particolare, se non un "bisticcio" con la custom controller factory che ho implementato per iniettare nei controller l'istanza del data context: sono incappato in un comportamento quanto meno "particolare" di Unity ed ho piazzato un piccolo hack workaround in Application_OnStart per risolverlo.

Technorati Tag: ,,,
17/07/2008 14.15.29 Andrea Saltarello StrangeLog - Il blog di Andrea Saltarello

How To: Configurare Hyper-V Remote Management

Continua lo sforzo per predisporre il mio server per la virtualizzazione. Anche per la configurazione di Hyper-V ho avuto la fortuna di trovare una serie di utili post che mi hanno aiutato nella configurazione della gestione remota di Hyper-V. Nel mio caso sia il client che il server appartengono ad un gruppo di lavoro e non sono inseriti in alcun dominio. Aggiungo che ho installato Windows Server 2008 Server Core e che quindi la configurazione da riga di comando potrebbe risultare abbastanza ostica senza gli opportuni suggerimenti. Per ridurre al minimo il tempo necessario per questo lungo processo, fatevi quidare dai post di John Howard che trovate qui:

Hyper-V Remote Management - Part 1
Hyper-V Remote Management - Part 2
Hyper-V Remote Management - Part 3
Hyper-V Remote Management - Part 4
Hyper-V Remote Management - Part 5

Ogni sezione segue una parte particolare delle possibili configurazioni e quindi dovrete prima di tutto identificare il vostro scenario e quindi seguire i post relativi alla vostra particolare configurazione. Armatevi di pazienza e buona configurazione.

14/07/2008 8.27.17 davide Blog di Davide Vernole

How To: da dove iniziare per installare e configurare Windows Server 2008 Server Core

Dopo una lunga meditazione e grazie alle incompatibilità tra il mio Dell Optiplex 755 e VMWare ESX 3.5, ho deciso di installare Windows Server 2008 con Hyper-V per gestire le mie macchine virtuali. Ho quindi pensato di utilizzare una delle nuove possibilità di installazione fornite da Windows Server 2008 e quindi, al fine di ridurre al minimo lo spreco di risorse per il sistema host, ho optato per Windows Server 2008 Server Core. Ok, scelta fatta ma.... da dove inizio? Per fortuna la risposta alla mia domanda è arrivata con una semplice ricerca tramite google. Ho trovato degli screencast di Giorgio Malusardi (risorse in italiano) e un sito molto ben fornito (in inglese). Quindi, per chi volesse cimentarsi in questa cosa, ecco alcuni link utili:

Installare e configurare "Server Core"
Windows Server 2008 Server Core: Remote Management

Windows Server 2008 Tips and Tricks

Buona installazione e preparatevi ad usare la cmd come ai vecchi tempi.

14/07/2008 6.06.38 davide Blog di Davide Vernole

I'm going to PDC 2008

Blog Bling BrainAvrò la fortuna di partecipare al prossimo PDC 2008 e proprio oggi mi sono registrato.

Dopo i molti dubbi ed un insolito scetticismo mi sono convinto che l'utilità dell'evento sarà di gran lunga superiore al costo (non indifferente nonostante il cambio favorevole) sommato al rischio di partecipare ad un evento riparatore (PDC 2007).

Sapere che Don Box è coinvolto nella scelta di circa un quarto delle sessioni di questo PDC sicuramente mi ha convinto che la rilevanza di questa edizione, tanto attesa quanto travagliata, sarà eccezionale. Speriamo bene.

PDC parla al cervello dei partecipanti ma anche al cuore ed alla pancia (e non parlo del meraviglioso catering).  La componente emotiva ed irrazionale è presente e la grandiosità dell'evento la alimenta.
La keynote con Ray Ozzie sarà un grande cambiamento, già avvenuto nella realtà con la recente uscita di Bill Gates ma non ancora "ufficializzato" nella storia del più importante evento Microsoft rivolto agli sviluppatori .

11/07/2008 16.32.00 noreply@blogger.com (Davide Bedin) dude vs. IT

Vodafone Station: Seconde impressioni

Ora che sto aspettando lo switch dal Telecom Italia, sono in una sorta di limbo. Ho ancora Alice attiva e, per ora non mi sogno di smantellare il tutto. La Vodafone station attiva, con la internet key attaccata sulla Station posso navigare e telefonare da un telefono normale. Però: Per connettermi ad internet devo collegarmi ad una [...]
29/06/2008 7.00.18 admin .mark.net - Marco Trova

Vodafone Station: prime impressioni

Ho appena finito di scartare la Vodafone Station che mi è appena arrivata. Non funziona la internet key, sono alla ricerca dell’errore "Carta SIM lo status Errore! Si prega di Check it! ": ma diciamo che sono io.. Ha un Controllo Genitori, DMZ, Rubrica Composizione, firewall, port forwarding, Dynamic DNS, Wifi WEP/WPA e, attraverso [...]
26/06/2008 20.11.27 admin .mark.net - Marco Trova

Passaggio a BlogEngine. Addio WordPress

Era da tempo che avevo iniziato la cosa, ma per un motivo o per un’altro avevo sempre posticipato. Ecco che ora il mio blog gira su BlogEngine e non più su WordPress. Perchè questo? Semplice perchè BlogEngine è sviluppato in .NET e questo mi permette di personalizzarlo e aggiungergli funzionalità a mio piacimento, senza dipendere [...]
30/05/2008 9.25.10 Andrea Dottor Andrea Dottor - il silenzio di un urlo

PDC 2008, prime informazioni

Sono stati annunciati i primi dettagli riguardo alla Professional Developer Conference 2008, che si terrà a Los Angeles dal 26 al 30 Ottobre 2008.

Su http://www.microsoftpdc.com si può già vedere una lista preliminare delle sessioni previste per l'edizione 2008 della più importante conferenza per sviluppatori in ambiente Microsoft.

Gli argomenti sono invitanti, si parlerà di Windows 7 e dei servizi Live.
Però il mio crescente scetticismo (a mia discolpa faccio notare che sono tra chi si è appassionato a WinFS, ObjectSpaces, MBF, tutte vittime da PDC) mi porta a valutarne i contenuti soppesando la (remota) possibilità che si tratti di una PDC riparatrice per la rocambolesca cancellazione dell'edizione 2007 oppure che sia pensata con un intento più politico che un intrinseco contenuto tecnico. Aspetto di sentire qualche parere informato da parte degli MVP italiani.

Sarà anche la prima PDC di Microsoft 2.0 senza Bill Gates.

28/05/2008 12.34.00 noreply@blogger.com (Davide Bedin) dude vs. IT

ASP.NET Dynamic Data - Custom Page

Come abbiamo vsito nel precedente post (Dynamic Data - Per iniziare), le pagine renderizzate sono basate su dei template che sono contenuti all’interno della cartella /DynamicData/PageTemplate/.I template che abbiamo a disposizione sono: Details.aspx Edit.aspx Insert.aspx List.aspx ListDetails.aspx queste pagine utilizzano i classici controlli di ASP.NET (e ulterioli controlli contenuti nei Dynamic Data) che [...]
22/05/2008 12.33.28 Andrea Dottor Andrea Dottor - il silenzio di un urlo

RockScroll - scrollbar sostitutiva per Visual Studio

Vi avevo promesso che lo avrei postato, ed eccomi qui.  All’ultimo meeting alcuni mi voi mi hanno chiesto cosa fosse la scrollbar che utilizzavo in Visual Studio. Altro non è che un tool che va a rimpiazzare la normare scroolbar e al suo posto ci mette una miniatura del testo presente nel file, evidenziando la [...]
20/05/2008 10.39.51 Andrea Dottor Andrea Dottor - il silenzio di un urlo

ASP.NET Dynamic Data - Per iniziare

Il miglior modo per capire cosa siano i Dynamic Data è quello di provare a realizzare una semplice applicazione che ne faccia uso. 1- Creazione Dynamic Data WebSite Creiamo da Visual Studio 2008 un nuovo WebSite, e tra i template disponibili selezioniamo Dynamic Data WebSite. Ricordo che questo template è disponibile solo installando il SP1 del [...]
19/05/2008 12.57.54 Andrea Dottor Andrea Dottor - il silenzio di un urlo

ASP.NET Dynamic Data… cosa sono?

Lo devo proprio ammettere, questi Dynamic Data sono proprio stupendi!In questo periodo ho avuto modo di approfondirli per bene, e rilascio dopo rilascio si può dire che Microsoft stà facendo proprio un bel lavoro, e i progressi si vedono. Cosa sono i Dynamic Data?I Dynamic Data permettono di creare una Web Application per l’accesso e la [...]
17/05/2008 12.35.40 Andrea Dottor Andrea Dottor - il silenzio di un urlo

Usare Windows 2008 come workstation

Ricordo che nel 2003 non riuscivo più a sviluppare con il portatile che avevo a disposizione, un PIII 800Mhz e 512Mb di RAM. Dovevo fare anche in fretta, la scadenza del progetto si avvicinava.. Ma perchè non usare Windows 2003 server invece di Xp? Nuova vita al portatile! Che scoperta. Avevo un pc più veloce, [...]
26/04/2008 8.42.26 admin .mark.net - Marco Trova

Hosted Exchange E-Mail and Services

Questo episodio mi ha fatto riconsiderare il costo di gestione del mio server Exchange che serve meno di 10 utenti. Come Partner ne abbiamo la licenza come privilegio annuale ma consideriamo questi elementi:

Migrazione.
La migrazione all'ultima versione 2007 di Exchange è inesorabilmente all'orizzonte. Disponibile solo a 64bit e con discreti requisiti di memoria, obbliga a cambiare server nonostante l'impegno rimanga lo stesso.

Manutenzione.
L'applicazione di Service Pack ed hotfix richiede più o meno lo stesso tempo per un server che supporta una realtà piccola o grande. Lo stesso vale per il Windows Server su cui è operativo Exchange.

Impegno server.
Gestione di un server praticamente dedicato ad Exchange per minimizzare i side effect di hotfix e service pack che si possono verificare in presenza di altro software.

Spam e virus.
Il costo in termini di traffico di rete, occupazione CPU e canoni annuali di sfotware antispam ed antivirus per il server (noi usiamo GFI). Considerando che circa il 98% del traffico di posta è costituito da SPAM questi sistemi sono necessari.

La soluzione a questi problemi potrebbe essere Exchange Hosted E-Mail e Exchange Hosted Services.
Alcuni Partner Microsoft sono in grado di offrire Exchange come servizio, per il quale si paga un canone proporzionale al numero di utenti ed al volume di posta gestita. 
Microsoft offre direttamente una serie di servizi agguntivi  tra cui il filtraggio (antispam, antivirus, filtro per contenuti), archiviazione e continuità del servizio, servizi utilizzabili con qualsiasi server di posta, sia in modalità hosted o gestito direttamente.

Credo che anche nel mio caso, in cui non ci sono i costi di licenza di Exchange da considerare, un servizio hosted potrebbe essere economicamente conveniente.

18/04/2008 13.50.00 noreply@blogger.com (Davide Bedin) dude vs. IT

Notifiche da Sharepoint 2007 via Exchange 2003

Dopo avere vissuto diversi problemi nella migrazione da una installazione basilare di Sharepoint Portal 2003 a Sharepoint 2007, ho lasciato passare alcuni mesi ed ho ritentato la migrazione graduale (volendo cambiare server e database), che questa volta ha avuto successo ed è andata come previsto, più o meno.

Con l'uso di Sharepoint 2007 mi sono accorto che non sono in grado di aprire in Outlook 2007 i messaggi di notifica del server.

In un primo momento ho pensato si trattasse di un problema locale, infatti altri utenti non hanno riscontrato lo stesso problema. La prima ricerca su Google trova alcuni articoli che affrontano il problema.

KB 930807: You cannot open a SharePoint Server 2007 notification message in Outlook 2007 when your mailbox is on an Exchange 2003 server

Si tratta di una incompatibilità tra Sharepoint 2007 ed Exchange 2003 che ne rende illeggibili i messaggi quando il client Outlook 2007 opera in modalità cached, salvando in locale i messaggi. La soluzione è applicare una hotfix ad Exchange 2003, dopo avere aggiornato il server a SP2.

Chi usa un portatile tende ad utilizzare la modalità cached, oltre ad essere l'impostazione di default nell'installazione di Outlook 2007, e quindi non sembra uno scenario così raro da non essere contemplato.

Che dire, Sharepoint 2007 continua ad essere fonte di inaspettate sorprese ;-)

18/04/2008 13.24.00 noreply@blogger.com (Davide Bedin) dude vs. IT

Vincitori premio STAGE.IT di Confindustria Padova

Ieri, 13 Marzo 2008, la BEDIN Shop Systems srl e lo studente Eric Miotto sono stati premiati dall'ICT Lab di Confindustria Padova per lo stage a maggiore contenuto di innovazione realizzato nell'anno 2007, nel corso della 3a edizione del premio regionale STAGE.IT.

Ecco il link al comunicato stampa riportato sul sito di Confindustria Padova e su PadovaNews.

Il progetto di stage sviluppato da Eric Miotto in BEDIN Shop Systems srl ha riguardato l'integrazione del web service Amazon.com Simple Queue Service (SQS) in uno smart client basato su piattaforma Microsoft .Net, mediante l'utilizzo di Microsoft .Net Windows Communcation Foundation (WCF).
Oltre ad offrire una soluzione pratica per l'invio di dati in asincrono tramite web services ha avuto anche il pregio di dimostrare il valore aggiunto portato dall'aggregazione di diversi servizi web, basati su piattaforme eterogenee, accomunati dalla condivisione dei meccanismi di interoperazione.

Al completamento del corso di studi di specializzazione Eric Miotto entrerà a fare parte del team di sviluppo della BEDIN Shop Systems.

14/03/2008 9.27.00 noreply@blogger.com (Davide Bedin) dude vs. IT