Saturday, October 18, 2008

E-book free: Microsoft Robotics

. Saturday, October 18, 2008
0 commenti

ms_robotics Questo mese Microsoft Press mette a disposizione un altro e-book da poter scaricare gratuitamente previa registrazione.
Dopo Introducing Microsoft SQL Server 2008, questa volta è possibile leggere un overview su Microsoft Robotics.
Microsoft Roboticts Studio è un ambiente di sviluppo di software, basato su Windows, per applicazioni di robotica installabili su una vasta gamma di device.
Per chi è interessato all'e-book lo trovate qui.

Read More »»

Wednesday, October 15, 2008

Vicessitudini sul deployment web

. Wednesday, October 15, 2008
0 commenti

Chi sviluppa in Asp.Net 2.0 sa che è possibile lanciare una web application senza effettuare nessuna compilazione, in quanto di default ogni pagina viene compilata al "volo".
Premetto che in questo post non scriverò dei diversi svantaggi (di reali vantaggi sinceramente non sono ancora riuscito a trovarne) che presenta questa "metodologia" bensì di alcuni problemi con cui mi sono dovuto scontrare ultimamente.
Lo scenario è un grosso progetto web basato sull'architettura di DNN.
Per precompilare la parte web ho utilizzato l'add-in Web Deployment Project, il quale consente di compilare un sito web in uno ( alla Visual Studio .NET 2003) o più assembly.
Per avere una completa descrizione delle opzioni che offre questo add-in vi rimando al seguente articolo: Using Web Deployment Projects with Visual Studio 2005.
Inoltre per completezza è bene anche una lettura a VS 2005 Web Deployment Projects di Scott Guthrie.

Ho optato per un unico assembly, quindi ho lanciando il build.
Ho subito ottenuto un errore che di per sè non vuol dire praticamente nulla:
"aspnet_merge.exe" exited with code 1
Per avere un'informazione più utile bisogna modificare il livello di verbosity dell'output del MS-Build:
Tools > Options > Project and Solution > Build and Run
Dalla tendina MSBuild project build ouptut verbosity selezionate la voce Diagnostic o Detailed.
Ricordatevi di attivare la finestra di output:
View > Output
A questo punto è stato necessario modificare una serie di classi che presentavano namespace identici.
Questo provoca "collisioni" quando il tool cerca di generare un unico assembly
Primo consiglio quindi, è quello di definire sempre per le pagine un namespace in modo esplicito non facendo ricorso alla "tecnica" del copy & paste.

Il secondo passo è stato quello di copiare il progetto compilato nella web folder e lanciarlo, pensando di aver svolto il grosso del lavoro, ma invece ecco che spunta un altro errore:
Could not find a part of the Path XXX\App_GlogalResources\Locales.xml
Dopo una breve ricerca con "san google" trovo che una possibile soluzione consiste nel cancellare dalla root del progetto il file PrecompiledApp.config.
Erroneamente, senza pormi troppe domande, ho cancellato il suddetto file.

In effetti dopo questa semplice modifica si presenta un altro errore:
Could not find file 'c:\DotNetNuke.config'.
Debuggando è saltato fuori che alcune property dichiarate nell'assembly DotNetNuke non venivano settate.
Preciso che nel progetto queste property vengono settate nel file Global.asax, quindi mi sono chiesto perchè quest'ultimo non veniva in fase di esecuzione "analizzato".
Credo che il motivo sia collegato alla cancellazione del file PrecompiledApp.config.
Il file contiene il numero di versione del tool di precompilation ( 2 per Asp.Net 3.5) e se il sito è in grado di essere aggiornato:

   1: <precompiledApp version="2" updatable="true"/>

Tiene traccia delle opzioni di deploy dell'applicazione ed indica ad Asp.Net se deve compilare ogni file ad ogni richiesta:
Deploy
L'attributo updatable impostato a true è applicabile alle pagine .aspx, agli user control ( .ascx), master file ma non al file Global.asax che viene compilato ( bin\App_global.asax.compiled).

L'ultima cosa che mi rimaneva da risolvere era quella di consentire alla cartella App_GlobalResources di risiedere nella directory di distribuzione.
L'unico workaround che sono riuscito ad adottare è stato quello di modificare nel file Localization.vb dell'assembly DotNetNuke, situato in:
\Library\Components\Localization
la costante ApplicationResourceDirectory come segue:
   1: Public Const ApplicationResourceDirectory As String = "~/DNN_GlobalResources"
Come sempre la curiosità è la stessa, conoscere altre eventuali soluzioni da quelle appena descritte.

Read More »»

Monday, October 13, 2008

Link .Net #6

. Monday, October 13, 2008
0 commenti

Sesto appuntamento con Link .Net

Silverlight 2 RC0 + ADO.NET Data Service + Entity Framework

Pietro Brambati ci mostra come utilizzare gli ADO.NET Data Service e ADO.NET Entity Framework con Silverlight 2 RC0. it

Creating Workflows for Windows Sharepoint Services and MOSS2007

Un tutorial passo passo su come creare un flusso di lavoro di approvazione usando Workflow Foundation in Sharepoint 2007. en

Modifying Data with the ListView's EditItemTemplate

Matt Berseth ci mostra come usare l'eccezionale controllo ListView introdotto in ASP.NET 3.5. en

Geocoding with the Virtual Earth Web Service

Tutorial su come utilizzare i Web Services di Virtual Earth. en

Read More »»

Tuesday, October 7, 2008

Facebook e PowerShell

. Tuesday, October 7, 2008
0 commenti

Leggendo il titolo può risultare un pò strano il connubio, ma aspettate il resto del post per capire come ciò sia possibile. 
Il merito è di Facebook Organizer con cui è possibile connettersi a Facebook usando PowerShell e quindi visualizzare amici, gruppi, foto ecc.
Prima di procedere con l'importazione del Facebook pack verificate di aver installato sul sistema Windows PowerShell V2 (CTP2).
Nel caso sia presente una versione precedente allora sarà necessario avviare la procedura di disinstallazione:
pannello di controllo>installazione applicazione>checkare la voce mostra aggiornamenti
A questo punto potete munirvi dell'ultima versione di PowerGUI.
Dopo aver scaricato Facebook.dll e FacebookOrganizer.powerpack, lanciate PowerGUI in modalità STA (Single-threaded Apartment) tramite il comando -sta:
C:\Programmi\PowerGUI\Quest.PowerGUI.exe -sta
Adesso si può importare il pack.
Lanciando lo script del nodo connect situato nella cartella Facebook viene sollevata un'eccezione, ossia che l'assembly Facebook deve risiedere nella directory:
C:\Program Files\Coding4Fun\Facebook\Binaries\
Potete, a questo punto, creare il percorso sopra indicato oppure modificare lo script specificando un percorso differente.
Dopo avere effettuato l'autenticazione verranno creati i seguenti nodi figli:
FacebookPowerShell 

  • My Friends
  • My Albums
  • My Groups
  • My Events

Ora siete pronti ad interrogare Facebook tramite PowerShell.

Read More »»

Sunday, October 5, 2008

Tema per Activity

. Sunday, October 5, 2008
0 commenti

Quando si crea un custom activity è possibile implementare un tema che definisca l'aspetto grafico all'interno del visual designer modificando stili di background, di foreground, font, icone.
I passi da seguire sono essenzialmente tre.
Creare una classe che implementa il nuovo tema:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4: using System.Resources;
   5: using System.Reflection;
   6:  
   7: using System.Drawing;
   8: using System.Drawing.Drawing2D;
   9: using System.Workflow.ComponentModel.Design;
  10:  
  11: namespace SeqWF
  12: {
  13:   public class MyActivityTheme : ActivityDesignerTheme
  14:   {
  15:     public MyActivityTheme(WorkflowTheme theme)
  16:            : base(theme)
  17:     {
  18:       this.BackgroundStyle = LinearGradientMode.Vertical;
  19:       this.BackColorStart = Color.Orange;
  20:       this.BackColorEnd = Color.White;
  21:  
  22:       this.BorderColor = Color.Black;
  23:       this.BorderStyle = DashStyle.Solid;
  24:  
  25:       this.ForeColor = Color.Black;
  26:  
  27:       ResourceManager rm = new ResourceManager( "SeqWF.MyResource",
  28:                            Assembly.GetExecutingAssembly());
  29:       this.DesignerImagePath = rm.GetString("IconeSave");
  30:     }
  31:   }
  32: }

Implementare un nuovo designer per l'activity:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4:  
   5: using System.Workflow.ComponentModel;
   6: using System.Workflow.ComponentModel.Design;
   7:  
   8: namespace SeqWF
   9: {
  10:   [ActivityDesignerTheme(typeof(MyActivityTheme))]
  11:   public class MyActivityDesigner : ActivityDesigner
  12:   {
  13:   }
  14: }

Attribuire il nuovo designer al custom activity:

   1: using System;
   2: using System.Workflow.ComponentModel;
   3: using System.Workflow.ComponentModel.Design;
   4:  
   5: namespace SeqWF
   6: {    
   7:   [Designer(typeof( MyActivityDesigner))]
   8:   public partial class PersistActivity: Activity
   9:   {
  10:   }
  11: }

Ed ecco il risultato finale:
themeActivity 
La classe base di tutti i designer è ActivityDesigner, ma Workflow Foundation presenta altre classi di designer specifiche per particolari tipi di activity, per esempio CompositeActivityDesigner dalla quale ereditano le classi ParallelActivityDesigner e SequentialActivityDesigner.
Nel caso di un custom activity di tipo composite la classe che si occuperà di definire il tema dovrà ereditare da CompositeDesignerTheme.
Quest'ultima presenta diverse property in più rispetto alla classe ActivityDesignerTheme come per esempio poter indicare informazioni circa lo stile del connector tramite ConnectorStartCap  e ConnectorEndCap.
Per concludere un suggerimento:

nel caso in cui il designer non venga aggiornato con il tema creato allora potete provare a cliccare tasto destro sull'activity, selezionare la voce "Select Custom Theme" e cliccare su "OK":

themeActivity1

Read More »»