Archivio | Programmazione

Tags: , , , , , ,

12° Workshop "Community Tour 2009"

Pubblicato il 30 novembre 2009 da Massimo

Segnaliamo il 12° Workshop del Community Tour 2009, organizzato da DotDotNetMarche, che si terrà il 18 Dicembre 2009 presso OFFICE DC in via Via Selvagrossa, Loc. Case Bruciate Tavullia (PU).

Il Workshop prevede due sessioni:

  1. Le novità in IIS 7 e 7.5
  2. Tecnologie web per la UI a confronto

Durante la mattinata, nella stessa sede, si svolgerà un evento di presentazione delle novità di Windows 7 e Windows Server 2008 R2 lato sistemistico con la seguente agenda (speaker: Piergiorgio Malusardi):
– 09.30: Registrazione
– 09.50: Keynote
– 10.00: Windows 7: cosa c’è di nuovo?
– 10.45: Break
– 11.00: Le novità di Windows Server 2008 R2
– 12.00: Hyper-V v2 e SCVMM2008 R2: virtualizzare server secondo Microsoft
– 12.45: Q&A e chiusura lavori

 

Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: , , , ,

Gladiatori Fest un evento gratuito su .Net di DotNetRomaCestà

Pubblicato il 12 ottobre 2009 da Massimo

Con molto piacere segnaliamo un’importante evento gratuito su .net organizzato da DotnetRomaCestà lo User Group Romano .Net. L’incontro si svolgerà Mercoledì 21 Ottobre 2009 alle ore 8:30 presso l’Auditorium Sap Italia.

L’agenda prevedente una serie di sessioni incentrate su argomenti molto caldi come il framework Asp.Net MVC v1.0  e novità prossime come Asp.Net 4.0 e Asp.Net MVC v2.0. Non mancano sessioni alternative come quella sulle Api del nuovo motore di ricerca Bing e una sessione dedicata al Service Broker di SQL Server 2005. Come ultima chicca un premiazione finale in cui verranno assegnati ai partecipanti alcuni premi molto azzeccati.

Un evento importante, di qualità elevata e soprattutto gratuito a cui non potete non partecipare se siete della zona!

Per maggiori informazioni:
http://www.dotnetromacesta.org/EventoGladiatori.aspx

Ti piace questo articolo? Condividilo:

Commenti (0)

Tags:

In Visual Studio 2008 il Choose Items nella Toolbox causa un crash totale

Pubblicato il 30 giugno 2009 da Massimo

Se capita che selezionando il comando Choose Items nella Toolbox, Visual Studio 2008 SP1 vada in crash chiudendosi repentinamente, ecco alcune delle possibili soluzioni che ho trovato in proposito:

Soluzione 1

  1. Eseguire Visual Studio in modalità Safe Mode con il comando: devenv.exe /safemode
  2. Aprire un nuovo progetto Windows Application
  3. Selezionare Chooise Items dalla Toolbox
  4. Chiudere e riavviare normalmente

Soluzione 2

  1. Eseguire il comando: devenv /setup
  2. Eseguire il comando: devenv /resetuserdata
  3. Eseguire il comando: devenv /resetsettings CSharp
Technorati Tags:
Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: , , , , ,

Le novità di C# 4.0

Pubblicato il 12 maggio 2009 da Massimo

Il nuovo Microsoft .Net Framework 4.0 è arrivato ad uno stato avanzato di sviluppo. Forse per fine anno o metà del prossimo potremmo beneficiare non solo di una moltitudine di nuove funzionalità del .net framework ma anche del nuovo Visual Studio 2010 realizzato interamente in WPF.

In questo articolo ci concentreremo esclusivamente sulle novità apportate al linguaggio C# 4.0. Molte delle novità descritte in questo articolo sono già testabili scaricando e installando la Microsoft Pre-release Software Visual Studio 2010 and .NET Framework 4.0 Community Technology Preview. Si tratta di una macchina Virtual PC con dentro Windows, Visual Studio 2010 e il .net framework già installati e configurati. Per un totale di circa 7GB di macchina virtuale!

Complessivamente le novità introdotte in C# 4.0 si possono riassumere nel seguente elenco:

  1. Dynamic Type Object
  2. Name e Optional Arguments
  3. Co-variance e Contra-variance
  4. Migliorie su COM Interop

Vediamo in dettaglio.

Dynamic Type Object

Il Dynamic Type Object è un nuovo tipo statico introdotto soprattutto a beneficio del Dynamic Language Runtime (DLR). Con la nuova parola chiave dynamic è possibile dichiarare un type che verrà risolto solo a run-time. In questo modo:

public void MyFunction()
{
    // le seguenti variabili verranno convertite
    // implicitamente a run-time. 
    dynamic counter = 1;
    dynamic hello = "Hello C# 4.0";
}

Su un type dichiarato come dynamic è possibile richiamare metodi, campi o proprietà, come se fosse un object. Il tutto verrà risolto automaticamente a run-time in base al type effettivo contenuto all’interno della variabile. Con questa parola chiave C# 4.0 si uniforma così ai tipici linguaggi dinamici (dynamic appunto) come Ruby o Php.

Name e Optional Arguments

L’optional argument è una funzionalità del linguaggio già presente in Visual Basic ed è la capacità di dichiarare come opzionale un parametro di un metodo, in questo modo:

// il parametro i risulta essere obbligatorio
// mentre il parametro y è optionale e per
// default viene impostato a 0.
public int Calc(int i, int y = 0)
{
    // corpo del metodo
}

public void Main()
{
    // ho la possibilità di richiamare Calc con un
    // solo parametro o con due, poiché il parametro
    // y risulta essere opzionale.
    int result1 = Calc(5); // equivalente a Calc(5, 0);
    int result2 = Calc(10, 3)
}

Il name argument invece è la facoltà di passare un parametro per nome, in questo modo:

public int Calc(int i, int y = 0, int z = 1)
{
    // corpo del metodo
}

public void Main()
{
    // In questo modo chiamo il metodo Calc con i parametri
    // invertiti, cioè prima passando y e poi x.
    int result = Calc(y: 3, i: 4); // equivalente a Calc(4, 3, 0);

    // In questo, invece chiamo Calc passando i e z ma non y
    int result2 = Calc(z: 6, i: 3); // equivalente a Calc(3, 0, 6);
}

Co-variance e Contra-variance

Introduciamo il concetto di covarianza e contravarianza. Date due classi A e B. Dove B è una sotto classe di A, e avente una nuova classe C si dice che C è covariante rispetto a T se anche C è una sotto classe di C. Mentre si dice che C è contravariante rispetto a T se anche C è super classe di C. In pratica:

Questo risulta particolarmente interessante con i type parameter dei generics. In questo modo potremmo, per esempio, assegnare una collection di stringhe ad una collection di oggetti, dato che la classe string e sotto classe di object, o vice versa, così:

IList<string> strings = new List<string>();
IList<object> objects = strings;

I benefici della covarianza e della contravarianza non si limitano a questo aspetto, ma come esempio è chiarificatore.

Migliorie su Com Interop

Tra le migliorie su Com Interop citiamo:

  • Importazione dinamica con l’utilizzo del Dynamic Type Object invece che object
  • Compilazione senza PIA (Primary Interop Assemblies) che rendevano pensante l’applicazione
  • Chiamate a metodi senza l’utilizzo di ref

Conclusioni

Che dire, le novità sono davvero tante e tutte decisamente interessanti. Prima tra tutte la citata parolina magica dynamic, che introduce una vera e propria rivoluzione per un linguaggio prettamente statico come C#. Non resta che aspettare l’uscita ufficiale sia del .Net Framework 4.0 ma soprattutto del nuovissimo Visual Studio 2010 che merita veramente la visione, ma questa è un‘altra storia. 🙂

Risorse

Alcune risorse utili:

Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: ,

Pagine bianche nella stampa di un report in Reporting Services

Pubblicato il 22 aprile 2009 da Massimo

Ancora un piccolo tips sulle stampe in Microsoft Reporting Services. A volte può capitare che inviando un report in stampa (o anteprima) o esportandolo in un formato (tipo il pdf), alla fine di ogni pagina ci sia una pagina vuota o bianca.

Questo capita, nel 90% dei casi, a causa di una errata impostazione dei margini e del corpo della pagina in fase di design. Questo causa che il corpo di pagina sia troppo grande per contenere tutti gli elementi del report. La regola da rispettare quando si crea un nuovo report è la seguente:

Body Width <= Page Width – (Left Margin + Right Margin)

Quello che bisogna tener a mente è che esiste una area del report, chiamata Usable Area, che rappresenta lo spazio disponibile per disegnare il report dopo aver tolto dallo spazio totale di pagina i margini, l’intestazione e il piè di pagina. In pratica le dimensioni dell’Usable area sono:

X = Page.Width – (Left Margin + Right Margin + Column Spacing)

Y = Page.Height – (Top Margin + Bottom Margin + Header Height + Footer Height)

Questi fattori sono importanti da tener a mente quando si crea un nuovo report in modo da non avere brutte sorprese in fase di stampa o di anteprima.

Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: , , ,

Visualizzare Report di Reporting Services con Web Services e i problemi con l’impostazione internazionale del client (Locale)

Pubblicato il 21 aprile 2009 da Massimo

Torno ancora una volta a parlare di Microsoft SQL Server Reporting Services. Reporting Services mette a disposizione due interessanti web service per la visualizzazione e la manipolazione programmatica di report RS pubblicati sul server. In questo modo è possibile customizzare la visualizzazione e la gestione dei report all’interno della nostra applicazione .NET.

Detto questo può capitare di incappare in un fastidioso problema di localizzazione delle date e delle valute che potrebbero essere visualizzate in inglese invece che nella lingua impostata come default. Come si evince da un articolo sula KB di Microsoft il problema è noto e risiede nella mancata comunicazione dell’Accept-Language HTTP nell’header delle chiamate SOAP fatte dal client.

Secondo l’articolo, per sopperire al problema, è sufficiente aggiungere il seguente pezzo di codice all’interno del file Reference.cs o (.vb):

protected override WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest wr = base.GetWebRequest(uri) as HttpWebRequest;
    wr.Headers.Add("Accept-Language:" + CultureInfo.CurrentCulture.Name);
    return wr;
}

Nel mio caso ha funzionato 😉

Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: ,

JetBrains ReSharper 4.5

Pubblicato il 09 aprile 2009 da Massimo

speedometer_litIeri è stato rilasciato ReSharper 4.5, il più famoso addin per Microsoft Visual Studio. ReSharper è, dal mio punto di vista, uno dei migliori addin per Visual Studio che ne estende enormemente le funzionalità di refactoring e non solo. In questa ultima versione le novità sono tante e tutte molto interessanti. Ho deciso quindi di provare subito la nuova versione testandola direttamente sul campo con una solution Visual Studio composta da circa 80 progetti!

inspector3Rispetto alla versione precedente (la 4.1) questa è risultata però decisamente più pesante, sia in termini di memoria che in termini di velocità. Nonostante infatti i dichiarati miglioramenti di prestazioni e di consumo di memoria, aprendo la solution il consumo di memoria, al termine del caricamento, è passato da 700mb con vecchia versione a oltre 1GB con quella nuova. Nel task manager notiamo inoltre, un nuovo processo dal nome JetBrains.Resharper.ExeternalProcessStorage.Process.exe, prima inesistente, che consuma altri 20mb.

Tra le novità interessanti il Solution-Wide Code Inspections ora più preciso, anche se decisamente più lento, in grado di rilevare:

  • Dichiarazioni non private che non sono utilizzate
  • Valori di ritorno non utilizzati di metodi non privati
  • Campi privati non utilizzati
  • Parametri non utilizzati di membri non privati
  • Eventi abstract o virtual che non vengono mai invocati
  • Campi non assegnati
  • Membri e tipi public che possono essere convertiti in internal

newfeatures_naming_style

Ho provato sul campo il Solution-Wide Code Inspections che mi ha dato ottimi risultati rilevando problemi anche in classi e metodi particolarmente complessi. Attenzione però il Solution WiceCode Inspections può durare, in una prima fase, anche alcune ore dipendente dalla dimensione della solution, degradando le prestazioni del computer senza impedire però il continuo svolgimento del proprio lavoro.

namingstyle Oltre al supporto per Visual Basic 9, finalmente è arrivata la funzionalità di Extended Naming Style Configuration che ci permette di configurare tutta una serie di naming convention su namespace, metodi, classi, interfacce, campi e proprietà. Prima di oggi questa funzionalità era disponibile solo con appositi plugin di terze parti. Dal pannello delle opzioni, tramite una comoda interfaccia, è possibile specificare la convezione da applicare in base al tipo di membro. Tra le possibilità possiamo specificare un prefisso, un suffisso oltre alla stile suddiviso in UpperCamelCase, lowerCamelCase, ALL_UPPER, all_lower e First_upper. Queste convenzioni sono configurabili a livello globale o per linguaggio.

newfeatures_sw_inspections

Non da ultimo ci sono piccole ma sostanziali migliorie come il supporto nativo all’MSTest, nuove funzionalità di navigazione, nuove inline refactoring e tanto altro.

In definitiva ReSharper si conferma il miglior strumento per lo sviluppo in ambito .net e nonostante le performance in alcuni casi deludenti, le novità introdotte sono tante e soprattutto molto utili. Decisamente consigliato.

Technorati Tags: ,
Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: , , , ,

Problemi con SQL Server 2005 Service Pack 3, bpacmd.exe non trovato e codice errore 0x7370

Pubblicato il 06 aprile 2009 da Massimo

Da poche settimane è disponibile il Service Pack 3 di Microsoft SQL Server 2005 nelle sue varie declinazioni. Il service pack 3 porta con se un numero notevole di aggiornamenti e di correzioni importanti. Per un elenco completo consultare l’apposita pagina sul sito di Microsoft Support List of the bugs that are fixed in SQL Server 2005 Service Pack 3.

Può capitare, però, di incappare in uno strano errore in fase di aggiornamento del componente Reporting Services di SQL Server. L’aggiornamento se effettuato tramite Microsoft Update ritorna semplicemente il codice di errore 0x7370, mentre se eseguito manualmente con il file di setup ritorna l’errore –1 con messaggio vuoto. Cercando il codice di errore 0x7370 sia sul sito di Microsoft che su Google, non viene trovato niente di rilevante o comunque niente che sia direttamente correlato al service pack di sql server.

In questo caso ci viene in soccorso l’Event Viewer o altrimenti detto nella versione italiana Visualizzatore Eventi. Nel visualizzatore eventi, infatti, è necessario cercare un generico errore NET Runtime 2.0 Error Reporting dove si specifica che è impossibile trovare il file bpacmd.exe. Sul file di log di installazione “RS_1.log” viene specificato che:

04/06/2009 14:44:09 RS System.IO.FileNotFoundException: Impossibile caricare il file o l’assembly ‘BPAClient, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91’ o una delle relative dipendenze. Impossibile trovare il file specificato.
Nome file: ‘BPAClient, Ve

Una breve ricerca su internet e scopriamo che il file bpacmd.exe è un programma utilizzato in fase di aggiornamento anche noto con il nome esteso di SQL Server 2005 Best Practices Analyzer. In pratica il programma di aggiornamento non riesce a trovare e quindi a caricare la dll BPAClient.dll!

Per risolvere questo problema è sufficiente quindi completare i seguenti passi:

  1. C:\{Cartella Programmi}\Microsoft SQL Server\90\Setup Bootstrap\Bin selezionare tutti i file presenti nella cartella e copiarli nella cartella padre C:\{Cartella Programmi}\Microsoft SQL Server\90\Setup Bootstrap\
  2. Riavviare l’installazione del Service Pack 3.

Non è ancora chiara l’origine del problema ma a quanto pare non esiste una via ufficiale per risolvere l’errore. Nel frattempo questo piccolo tip potrebbe tornarvi utile 😉

Ti piace questo articolo? Condividilo:

Commenti (1)

Tags: ,

.Net Framework 2.0 Configuration Tool senza SDK

Pubblicato il 26 marzo 2009 da Massimo

Il .NET Framework Configuration Tool (Configurazione Microsoft .NET Framework in italiano) è un comodo strumento visuale che, tra le altre cose, ti permette di configurare la GAC (Global Assembly Cache) e la CAS (Code Access Security). Ovvero due degli aspetti fondamentali del .NET Framework.

Se con la versione 1.1 del .NET Framework questo strumento era incluso di default nella Redistributable Package del runtime di base, con la versione 2.0 le cose sono cambiante. E infatti installando il runtime del framework 2.0 il Configuration Tool misteriosamente non è presente. Secondo alcuni blog ufficiali, questa è una decisione presa proprio dal team di sviluppo di .NET che ha ben pensato di inserire il tool solo nell’SDK (Software Development Kit) del .NET Framework 2.0. Il problema è che l’SDK risulta avere una dimensione variabile di circa 200MB e questo fattore risulta essere proibitivo in alcuni contesti di produzione. Come fare allora?

Per fortuna un programmatore di Microsoft Aaron Stebner, program manager di XNA, ha realizzato un programma di installazione che permette di installare solo il .NET Framework 2.0 Configuration Tool come componente separato. Come lo stesso Aaron precisa, essendo un progetto personale, il funzionamento non è garantito. E’ bene quindi chiarire alcune degli svantaggi di questo sistema:

  1. Non è supportato ufficialmente da Microsoft
  2. Essendo un progetto amatoriale non è localizzato in italiano
  3. Facendo alcune prove ho riscontrato crash improvvisi (anche se lo stato è rimasto consistente)

Ma anche in questo caso come si dice: meglio che niente 😉

Programma:
http://cid-27e6a35d1a492af7.skydrive.live.com/self.aspx/Blog%7C_Tools/configwizard.zip

Ti piace questo articolo? Condividilo:

Commenti (0)

Tags: , , , ,

Rich TextBox in Microsoft SQL Server Reporting Services 2005

Pubblicato il 13 marzo 2009 da Massimo

Microsoft SQL Server Reporting Services 2005 (SSRS2005), il sistema di Microsoft per la reportistica e la business intelligence, soffre di una grave carenza: il componente Rich TextBox. Non è infatti possibile visualizzare all’interno di un report un testo formatto in RTF (RichTextFormat). Questo è un grosso limite della versione 2005, dato anche dal fatto che Crystal Report offre questa funzionalità sin dalle prime versioni.

Per fortuna l’enorme comunity di sviluppatori attorno al mondo Microsoft ci viene in aiuto. Girando tra forum e blog ho scoperto una valida soluzione a questo problema, anche se affetta da qualche piccola controindicazione. La soluzione consiste in un componente custom (una dll per intenderci) che, una volta registrato in SSRS2005, visualizza un testo Rtf come una immagine.

Il procedimento è molto semplice. Nell’allegato a questo articolo trovate un file RichTextImager.dll. RichTextImager è una libreria sviluppata in .Net 2.0 e all’interno dell’allegato trovate tutta la solution originale. Potete modificare la solution e ricompilarla per ottenere una versione modificata del componente. I passi da seguire sono:

  1. Copiare la dll in  C:\{Cartella Programmi}\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies in modo da poter utilizzare la libreria all’interno del designer.
  2. Copiare la dll in  C:\{Cartella Programmi}\Microsoft SQL Server\MSSQL.(n)\Reporting Services\ReportServer\bin (dove N è un numero che dipende dalla vostra installazione)
  3. Modificare il file C:\Program Files\Microsoft SQL Server\MSSQL.(n)\Reporting Services\ReportServer\rssrvpolicy.config e inserendo il testo:
  4. "UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust"
       Name="RTF_Converter"
       Description="A special code group for my custom assembly.">
      "UrlMembershipCondition"
        version="1"
        Url="C:\{Cartella Programmi}\Microsoft SQL Server\MSSQL.(n)\
             Reporting Services\ReportServer\bin\RichTextImager.dll"
      />
    
  5. Aprire il proprio progetto di reportistica in Microsoft Visual Studio 2005. Aprire il report su cui si vuole intervenire. Aggiungere in Report >Report Properties > References l’assembly RichTextImager.
  6. In Report > Report Properties >Code aggiungere il seguente pezzo di codice:
  7. Public Function GetRTFImage(ByVal rtfText as String) As Byte()
        Dim rtfConv As New RTFConverter()
        rtfConv.Rtf = rtfText
        return RTFConverter.ConvertImageToByteArray(rtfConv.PrintToImage(500,50))
    End Function
  8. Aggiungere al report un’immagine e impostare la proprietà Source a Database.
  9. Impostare la proprietà dell’immagine  MIMEType a image/bmp
  10. Impostare la proprietà Value a =Code.GetRTFImage(Fields!RTFText.Value)

Ci sono ovvie controindicazioni a questo approccio e sono:

  1. Non è possibile selezionare il testo RTF perché è un’immagine e a volte l’immagine risulta sgranata.
  2. Bisogna registrare una dll custom su SSRS2005 con eventuali problemi di deploy e di security.
  3. Ogni report che deve visualizzare testo RTF deve referenziare un dll esterna e deve avere del codice custom al suo interno, con tutte le problematiche di manutenibilità correlate.

Però come si dice in questi casi: sempre meglio che niente…

Allegato: richtextimager

Ti piace questo articolo? Condividilo:

Commenti (0)





RELATED SITES

adsl