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

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.



Windows Azure private cloud in a box

clock luglio 12, 2010 08.12 di author Giuseppe Dimauro

E' arrivato il momento della disponibilitá di una "appliance" di Windows Azure prima per partner di eccellenza come Dell, HP, Fujitsu ... e successivamente anche per grandi clienti come EBay ecc.. Microsoft si occupera'della manutenzione a distanza e i clienti delle applicazioni ... per approfondimenti: http://www.zdnet.com/blog/microsoft/microsoft-launches-azure-private-cloud-in-a-box/6778



Developing Applications for Sharepoint 2010

clock luglio 9, 2010 03.21 di author Giuseppe Dimauro

per gli amanti del genere:

http://msdn.microsoft.com/en-us/library/ff770300.aspx

 



Team Foundation Server Scrum v1.0 BetaFree

clock luglio 4, 2010 07.24 di author Giuseppe Dimauro

Template SCRUM per team foundation server.

Per maggiori info, qui.

Giuseppe



The List Cannot be Displayed in Datasheet view.....

clock giugno 28, 2010 22.55 di author Giuseppe Dimauro

Problemi nel visualizzare gli ActiveX (griglia ecc) con Microsoft Sharepoint Foundation e MOSS. Su macchine a 64 bit con s.o. a 64 bit e office a 64 bit potreste incontrare il seguente errore (qui in inglese):

The list cannot be displayed in DataSheet view for one or more of the following reasons:

- A datasheet component compatible with Miicrosoft Sharepoint Foundation is not installed.
- Your web browser does not suport ActiveX controls
- A component is not propelry configured for 32- or 64-bit support.

Per ovviare a questo problema installate Office System Driver: Data Connectivity Components.

Ho provato sul mio windows 7 a 64 bit con office 2010 a 64 bit con Sharepoint Foundation in locale e MOSS in remoto con il browser internet a 32 bit e ha funzionato perfettamente.

Giuseppe



Come disabilitare le ottimizzazioni durante i debug

clock giugno 21, 2010 07.28 di author Giuseppe Dimauro

Se vi dovesse capitare di vedere un messaggio simile al seguente nel pannello delle variabili locali (locals) oppure durante l'ispezione di una variabile applicativa:

Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away.

é possibile disabilitare le ottimizzazioni aggiungendo nelle variabili di ambiente una variable di nome COMPLUS_ZapDisable con valore pari a 1. Dopo aver provveduto a quanto descritto é necessario riavviare Visual Studio perché prenda in considerazione la variabile di ambiente. É inoltre consigliabile (necessario) disabilitare il processo di host di debug di Visual Studio prima di lanciare l'applicazione da "debuggare".

per ulteriori info leggete qui.

Giuseppe



Anche la NASA usa Silverlight

clock giugno 14, 2010 21.28 di author Giuseppe Dimauro

date una occhiata qui:

http://mars.jpl.nasa.gov/msl/multimedia/interactives/photosynth/



Giuseppe


Silverlight + WCF debugging

clock giugno 10, 2010 10.10 di author Giuseppe Dimauro

Spesso accade di ricevere dei misteriosi e noiosi timeout utilizzando WCF lato silverlight per raggiungere i propri servizi sul server senza traccia alcuna di precise eccezioni .NET. Quasi sempre il problema è da ricercarsi nei file di configurazione. Altre volte nella tipologia di entità restituite dal server. Un modo per scovare i veri errori in queste situazioni misteriose è quello di utilizzare gli strumenti di diagnistica standard di Windows Communication Foundation. Sostanzialmente dopo aver opportunamente attiviato il tracciamento delle attività WCF ed eventualmente dei messaggi con l'apposito tool:

   

  i file prodotti con estensione ".svclog" possono essere aperti direttamente con un doppio click da Shell/Explorer provocando il caricamento del file di trace direttamente nell'apposito visualizzatore:

   

  WCF Trace Viewer:

 

      

Nella colonna sinistra e' possibile rintracciare le attivita' di comunicazione con errori selezionando le righe in rosso. Nei pannelli nella parte destra a partire dall'alto e' ancora possibile selezionare ed entrare nel dettaglio della intera comunicazioni in tutte le parti elementari che la costituiscono ed e' ancora possibile selezionare le righe rosse per ispezionare meglio trace di errori e altri messaggi essenziali per il debug nei pannelli subito sotto come mostrato nella grafica.

Infine, come suggeritomi da Juwal Lowy in una sua mail sul thread dei Regional Director MSDN di oggi un ulteriore modo e' descritto nel suo libro al capitolo 6:

http://www.amazon.com/Programming-WCF-Services-Juval-Lowy/dp/0596521308/ref=sr_1_1?ie=UTF8&s=books&qid=1226789196&sr=1-1

 

Giuseppe



Windows Azure ha superato i 10000 clienti ...

clock giugno 10, 2010 10.02 di author Giuseppe Dimauro

Stando a quanto riportato qui, Windows Azure ha superato la bellezza di 10000 clienti. Ovviamente ogni cliente con la sua o le sue applicazioni puó a sua volta avere 1 o piú utenti reali.

 Giuseppe



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


 

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