Home  |   Chi siamo  |   Soluzioni  |   Consulenza  |   Formazione  |   Clienti  |   Blog  |   Contatti  |  
 
Home      Blog      Il blog 
 

Blog

  • Il blog
 

 

Cerca


Calendario

<<  settembre 2010  >>
dolumamegivesa
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789


Blog

Code Architects - Sottoscrivi il nostro rss feed  blog RSS

ottimizzare applicazioni WPF per sessioni remote

clock agosto 19, 2010 23.16 di author Giuseppe Dimauro
In questo praticissimo articolo vengono riassunti una serie di consigli pratici per "accelerare" e ottimizzare applicazioni WPF per sessioni remote basate su protocolli RDP (remote desktop protocol) di varie versioni. Cosa giá molto nota, Visual Studio 2010 é stato completamente riscritto in .NET ed usa Windows Presentation Foundation. Perció questi consigli sono assolutamente da tenere in considerazione per chi intende utilizzare Visual Studio 2010 attraverso servizi di terminali remoti e comunque per chi sviluppa applicazioni di nuova generazione usando WPF per la parte di presentazione in un ambiente consolidato basato su servizi di terminali remoti.


Error occurred in deployment step 'Recycle IIS Application Pool': Invalid namespace

clock agosto 4, 2010 23.05 di author Giuseppe Dimauro

 

 

Sul mio notebook con Windows 7 ho installato Sharepoint Foundation 2010 per lavorarci sopra seriamente. Ho abbastanza presto incontrato l'errore in oggetto e mi sono subito attrezzato per capire da cosa dipendesse. Dopo aver attivato attraverso apposita chiave di registry un trace completo degli errori nei tool di Sharepoint 2010 per Visual Studio 2010 ho capito che i tool usano WMI per operare con IIS e Sharepoint e che la causa era dovuto al fatto che é necessario attivare la feature "IIS 6 WMI Compatibility".

 

 

  Attivata tale feature il problema scompare ed è possibile lavorare, debuggare liberamente anche sotto Windows 7 com sistema operativo host con sharepoint foundation 2010.

 


Managed C++/CLI

clock luglio 13, 2010 03.53 di author Giuseppe Dimauro

Recentemente ho avuto bisogno di scrivere un gestore per .NET del protocollo SNMP completo. Dopo alcune riflessioni e forte della mia (ormai) piú che ventennale esperienza con il linguaggio C++ ho deciso di scriverlo con Managed C++ per fare prima. Ho fatto varie presentazioni, consulenze e lavori utilizzando la prima versione delle estensioni al C++ per il mondo managed. Per questa particolare occasione ho voluto peró un po' aggiornarmi sulle aggiunte fatte piú recentemente al linguaggio per il mondo .NET per avere un lavoro piú "pulito". In sostanza ciò mi ha permesso sostanzialmente di evitare l'uso del flag /oldsyntax e, soprattutto, un codice pulito (niente __gc * ecc. per intenderci) e al passo coi tempi. Oltre ad aver meravigliosamente presto chiuso questo task grazie alla straordinaria capacitá di questo dialetto di C++ per unire il mondo managed con quello unmanaged di piú basso livello ho potuto per qualche giorno usare macro (define) e altre comodities di questo straordinario e potente linguaggio di programmazione per scrivere, sostanzialmente, una serie di componenti .NET utliizzabili da C#, VB.NET direttamente e attraverso Windows Workflow Foundation ecc.. In questa occasione peró devo ammettere che le fonti di informazioni su Internet non sono state tantissime e risolutive come in molte altre situazioni in cui mi sono trovato con linguaggi come C#, VB.NET ecc. Grazie peró all'abbonamento Safari (books online) che mi ritrovo ho scoperto di poter consultare, sempre online, il libro Foundations of C++/CLI: The Visual C++ Language for .NET 3.5 di Gordon Hogenson edito da APress. Il libro é scritto molto bene e mi ha permesso grazie al formato elettronico (disponibile ovviamente anche in cartaceo) di attingere fulmineamente a tutto quello che mi serviva per completare il lavoro.



Silverlight profiling con Visual Studio 2010

clock giugno 6, 2010 21.44 di author Giuseppe Dimauro

Questo blog-entry é stato ricavato da una mail interna in cui spiegavo a dei colleghi di CA che stanno lavorando su Silverlight 4.0 come ho risolto un antipatico problema di prestazioni ed uso eccessivo del processore di una applicazione Silverlight 4.0. Ve la riporto pari pari Cool

.... Ciao, avete presente la shell silverlight sulla quale stiamo lavorando ? beh uno dei problemi era quello delle prestazioni e dello “strano” utilizzo elevato del processore anche quando non si faceva nulla. Dopo aver un po’ cercato su internet mi sono immediatamente imbattuto in due articoli che spiegano come abilitare il profiling per applicazioni Silverlight, cosa non supportata ufficialmente o “out of the box” apparentemente con vs2010. Oltre a leggere gli articoli ho dovuto smanettare veramente poco a causa del mio sistema a 64 bit.

Quindi ... grazie a questo articolo:

http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx

e questo per preparare il browser internet opportunamente per la gestione dei processi

http://blogs.msdn.com/mgoldin/archive/2010/04/26/vs2010-silverlight-4-profiling.aspx

ho beccato dopo una sessione di profile questo giro nell’applicazione aprendo il file di profiling direttamente dentro vs2010 con Open File (doppio click da shell/explorer non funziona):

 

Osservate cosa fa vstudio 2010 se cliccate sul link di cui sopra:

Apre il sorgente e aggiunge una carinissima icona che mostra il punto incriminato con un bel fuocherello:

 


L’istruzione di sincronizzazione della sezione critica é assolutamente incolpevole. Seguendo il call-stack scopro che la colpa é di chi la chiama in modo esagerato da un ciclo for-ever, causa reale del problema. Con un piccolo walk dello stack e grazie al profiler e le sue indicazioni sono arrivato nella funzione di cui sotto. Sostanzialmente la sleep per fare un po’ di “yielding” (termine inadatto: non é multiprogrammazione peró fa respirare gli altri processi lo stesso) é nel posto sbagliato !!!!!

... Commentandola (in rosso) e spostandola fuori dal blocco THEN (in giallo) dell’IF il problema é risolto in un attimo e l’applicazione passa dal 25% (sul mio quad-core !!!!) a 0% a beneficio delle animazioni ecc.

     /// <summary>
      /// Occurs when worker is runned.
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="Argument"></param>

      protected override void OnRun(AsyncWorker<object> sender, object Argument)
      {
         base.OnRun(sender, Argument);
         bool terminationCondition = false;

         lock (this.SyncForceTermination)
         {
            terminationCondition = this.ForceTermination;
         }

         while ( ! terminationCondition )
         {
            TTask task = default(TTask);
            lock (this.SyncTasks)
            {
               if (this.Taks.Count > 0)
               {
                  task = this.Taks.Dequeue();
               }
            }

            if (task != null)
            {
               TTaskManagerJob job = default(TTaskManagerJob);
               if (task.TaskType == TaskType.None)
               {
                  job = BuildJobContext(new Object[] { task });
               }
               else
               {
                  job = (TTaskManagerJob)BuildJobContext(this.GetTaskType(task), new Object[] { task });
               }

               job.OnTermination -= new EventHandler<WorkerJobEventArgs<TTask>>(Job_OnTermination);
               job.OnTermination += new EventHandler<WorkerJobEventArgs<TTask>>(Job_OnTermination);

               ThreadPool.QueueUserWorkItem(job.Execute);

               // Thread.Sleep(100); // =DG= rimosso per performance

               lock (this.SyncForceTermination)
               {
                  terminationCondition = this.ForceTermination;
              
}

            }

            Thread.Sleep(100); // =DG= aggiunto per performance

         }

      }

Giuseppe


Come migrare i propri dati locali su SQL Azure

clock giugno 6, 2010 20.30 di author Giuseppe Dimauro

Per migrare in modo assistito e comodo i propri dati da locale su SQL Azure é disponibile (anche in sorgente) il tool SQL Azure Migration Wizard che al momento in cui sto scrivendo é arrivato alla versione 3.3:

Giuseppe



Windows Azure BIDNOW Sample

clock giugno 6, 2010 12.23 di author Giuseppe Dimauro

Un ottimo esempio completo per Windows Azure. Mostra come utilizzare dati e BLOB storage con una ottima guida per installare e eseguire, testare e lanciare l'esempio sia localmente che online. 

 Architettura (documento consultabile nella cartella docs):

 

 Alcuni link:

http://code.msdn.microsoft.com/BidNowSample

http://code.msdn.microsoft.com/BidNowSample/Wiki/View.aspx?title=Getting%20Started%20with%20Bid%20Now&referringTitle=Home

http://code.msdn.microsoft.com/BidNowSample/Wiki/View.aspx?title=Demo%20Walkthrough&referringTitle=Home

http://code.msdn.microsoft.com/BidNowSample/Wiki/View.aspx?title=Deploy%20Bid%20Now%20to%20the%20cloud&referringTitle=Home

Giuseppe



Introduzione alla claims-based security

clock maggio 31, 2010 08.45 di author Admin

Alcune ottime risorse per iniziare con la claims-based security. Il libro elettronico scritto, fra gli altri, da Vittorio Bertocci e gli esempi scaricabili direttamente dal sito di Microsoft coprono i casi piú importanti come:

  1. Web Single Sign On
  2. Web Single Sign On su Azure
  3. Federazione
  4. Federazione con partner multipli e web service
    

Gli esempi del libro: http://www.microsoft.com/downloads/details.aspx?familyid=33829BCF-F5EA-4650-B807-57C63A753753&displaylang=en

Il libro elettronico:  http://www.microsoft.com/downloads/details.aspx?familyid=4C09FFE4-43DD-4FCC-BE35-C897C9BC4386&displaylang=en

 

Giuseppe



Effettuare debug di una template T4

clock maggio 28, 2010 21.30 di author Giuseppe Dimauro
Per chi come noi utilizza in Visual Studio template T4 per generare automaticamente codice sorgente e si ritrova a creare o modificare template giá pronte (nel nostro caso template oggetti Entity Framework POCO) ma ha bisogno di una mano nel debugging di complesse sequenze di codice T4 bastano poche accorteze per riuscirci. Basta cambiare la proprietá debug del prima riga del template da false a true per garantirsi la visione/ispezione dei sorgenti durante il debug:

<#@ template language="C#" debug="true" hostspecific="true"#>

il passo successivo è inserire una istruzione di Break del debugger nel punto interessato:

<#System.Diagnostics.Debugger.Break();#>

Prima di eseguire (anche solo salvando) il template è necessario effettuare un attach della sessione corrente di Visual Studio da un'altra istanza di Visual Studio. In caso contrario Visual Studio andrá in errore chiudendosi "malamente" costringendovi a ricaricarlo. Ovviamente risulterá essere particolarmente noioso se oltre al template al momento dell'errore avete altri sorgenti non salvati in sessione perché andranno irrimediabilmente perduti ...

Per evitare noie di questo tipo e per garantirsi che il BreakPoint venga raggiunto soltanto nel caso in cui Visual Studio sia stato effettivamente "agganciato" é possibile cambiare lo statement precedente nel seguente:

<# if(System.Diagnostics.Debugger.IsAttached) /*break only if attached =DG=*/ System.Diagnostics.Debugger.Break();#> 

Ho provato il tutto con VS2010 ma sono certo che vada bene anche con VS2008 

Giuseppe

 



 

© Code Architects S.r.l. P.Iva 05831090724
Home  |   Chi siamo  |   Soluzioni  |   Consulenza  |   Formazione  |   Clienti  |   Blog  |   Contatti