WiX: Utilizzare Heast.exe nell’evento post build nei progetti di Visual Studio 2010

Buonasera,

Volevo condividere il modo in cui ho deciso di generare i frammenti di tipo wxs per i progetti di Setup creati con WiX utilizzando il tool Heat ottenendo al tempo stesso la compatibilità con Microsoft Team Foundation 2010 Build Service Host .

L’idea è che ogni progetto di libraria o di un eseguibile scritti in VB .NET o C# deve generare i propri frammenti wxs all’interno del proprio post build event.

Ad esempio il comando da utilizzare per generare il frammento wxs in grado di registrare una dll nella GAC è:

"$(WIX)bin\heat.exe"
file "$(TargetPath)"
-cg $(TargetFileName)
-gg
-var var.$(ProjectName).TargetDir
-srd
-dr INSTALLLOCATION
-t $(SolutionDir)HeatGAC.xslt
-out "$(SolutionDir)WiXSetup\Fragments\$(TargetFileName).wxs"

Oppure se volete registrare una TypeLibrary potete usare il comando:

"$(WIX)bin\heat.exe"
file "$(TargetDir)$(TargetName).tlb"
-cg $(TargetName).tlb
-gg
-var var.$(ProjectName).TargetDir
-srd
-dr INSTALLLOCATION
-out "$(SolutionDir)WiXSetup\Fragments\$(TargetName).tlb.wxs"

Se avete necessità di capire più in dettaglio la sintassi fatemi sapere.

Sperando vi sia utile,

Buonanotte!

Remote Open SQL

Un saluto a tutti,

da alcuni mesi ormai sto dedicando il mio tempo libero alla realizzazione di un nuovo prodotto software. Si chiama Remote Open SQL e si rivolge a coloro che per lavoro (difficilmente per divertimento… :) hanno la necessità di estrarre da SAP R/3 una gran mole di dati.

Come avrete già intuito l’argomento è tecnico ed avanzato per cui se fra di voi c’è chi vorrebbe sentire le ultime news sui miei viaggi lo invito a ripassare più tardi…

L’ora è tarda per cui vi lascio solo un breve accenno alle idee alla base del progetto.

Spesso mi capita di voler vedere i dati delle tabelle di SAP in Excel o in Access per poter rielaborare i dati. A questo scopo esistono diverse transazioni in SAP, SE11, SE16, SE16N, oppure si possono creare dei programmi che connettendosi a SAP via RFC possono richiamare il function module RFC_READ_TABLE (per vederla transazione SE37).

Questi metodi hanno tutti dei limiti, essenzialmente di velocità, di flessibilità e di scalabilità.

Il mio progetto si pone come obiettivo il superamento di tutti questi limiti e per raggiungere lo scopo ho dovuto mettere in campo tutto quello che ho imparato durante la mia, se pur breve, carriera lavorativa.

Originariamente volevo creare un software simile ad Everything che funzionasse con i file archiviati in SAP (ad esempio con quelli presenti nel KPRO) ma poi mi sono scontrato con problemi che via via mi hanno portato a concentrarmi sul primo passo necessario: la rapida estrazione di dati.

Recentemente poi ho deciso di pubblicare il mio progetto con licenza GPLv2 e quindi a breve pubblicherò il tutto in CodePlex.

Appena possibile aggiornerò questo articolo con tutti i riferimenti.

In breve quello che Remote Open SQL è in grado per ora di fare è quello di consentire all’utente di scrivere una query di tipo Open SQL e di eseguirla connettendosi a SAP via RFC.

Le sfide più grandi che ho dovuto affrontare sono state:

  1. La comprensione dei limiti del linguaggio Open SQL unito all’utilizzo delle funzioni RFC
  2. L’ottenimento della scalabilità in termini di dimensioni delle tabelle estratte (milioni di record).
  3. L’ottenimento di performance di estrazione elevate in termini assoluti (decine di milioni di record all’ora).
  4. Verificare le autorizzazioni dei singoli utenti in base alle tabelle oggetto delle query.
  5. Eliminare la possibilità di SQL injection.
  6. Ideare un sistema sufficientemente semplice per l’esecuzione delle query. Questa parte comunque è in continua evoluzione.
  7. Ridurre al minimo i passi per l’installazione.

Cosa manca? Moltissimo! Il mio è solo il primo passo per saggiare l’interesse del mercato. Ho deciso di rendere il progetto Open Source per favorirne il più possibile la diffusione e poter sperimentare personalmente le difficoltà che è necessario superare prima di poter offrire un prodotto affidabile. Inoltre mi interessa toccare tutti i passaggi della filiera: dall’ideazione, alla realizzazione prototipale (situazione odierna), alla pubblicazione, alla promozione, all’assistenza e chi lo sa … magari anche alla ricezione di qualche offerta :D

Se siete interessati al tema rimanete in contatto! Mancano pochi giorni alla prima pubblicazione di Remote Open SQL!

Aggiornamento!

Il progetto è online! Ecco il link: http://remoteopensql.codeplex.com/

Process And Port Analyzer

Slave a tutti,

vi segnalo questo programma che ho trovato molto utile: Process And Port Analyzer.

Ve lo segnalo per due motivi: il primo è che l’ho trovato utile per analizzare il traffico di rete in entrata ed uscita dal mio PC e capire quindi se qualche programma fosse fuori controllo, il secondo è che ho il sospetto che sia causa di alcuni dump del sistema operativo (schermate blu) che ho subito tempo fa.

Non sono certo che ne sia la causa ma dopo averlo disinstallato il problema non si è più ripresentato.

Continue reading

SmartIce

<Attualmente la sezione riguardante questo programma è in fase di creazione>

SmartIce è un programma sviluppato con lo scopo di agevolare il Gelatiere nella sua professione di inventore di nuove sensazioni; la potenza di questo applicativo sta nell’ aver azzerato il tempo necessario per bilanciare e gestire qualsiasi ricetta.

E’ possibile scaricare il setup dell’ultima versione disponibile:

SmartIce 4.1 2005-02-11.exe

Per installare SmartIce è sufficiente scaricare il file di installazione in una cartella qualsiasi ed eseguirlo. Se la protezione dai virus macro è attivata, comparirà un messaggio che chiederà di disabilitare le macro. Per poter installare SmartIce premere il bottone Attiva Macro e proseguire con il programma di installazione. Il programma provvederà ad installare i file nella cartella scelta dall’utente ed una volta terminato sarà possibile utilizzare le funzionalità di SmartIce.

Ecco come appare una ricetta tipica visualizzata in Excel:

Ricetta dimostrativa - Gelato di pesca al latte

Ricetta dimostrativa - Gelato di pesca al latte

Malefico HTTP 500 internal server error

Salve a tutti,

oggi volevo raccontarvi di come essere consulente, sviluppatore, architetto e sistemista possa portare alla quasi pazzia un povero essere umano.

Venerdì dovevo compilare dei rapportini per un cliente e, come da un paio di mesi a questa parte, non riuscivo più a connettermi al suo portale web.

Il messaggio che ricevevo ancora prima di poter fare il login era:

HTTP 500 internal server error

Nulla di più, un semplice e criptico messaggio di errore che faceva presumere che vi fosse un errore sul server a cui mi connettevo.

Purtroppo utilizzando un altro PC riuscivo a connettermi e quindi non potevo nemmeno sollevare il problema, essendo evidente che fosse il mio PC la causa dell’errore.

Dopo svariati tentativi trovo finalmente un santo che mi aiuta, Luciani Massimiliano, che nell’articolo ASP: HTTP 500 internal server error mi permette di scoprire un’opzione avanza di Internet Explorer, Mostra messaggi di errore HTTP brevi, che provvedo subito a disabilitare.

Finalmente vedo una piccola luce ed il messaggio diventa:

Microsoft Cursor Engine error ’80040e21′

Multiple-step operation generated errors. Check each status value.

/LM/W3SVC/1/Root/Rapportini/global.asa, line 72

Nulla di più chiaro no?

Ora inizia la caccia, prendo ogni parola di questo messaggio e mi tuffo in Google alla spasmodica ricerca della soluzione…

Alla fine nulla o quasi nulla…

Riesco solo a capire che sul server il codice sta cercando di aggiornare un campo sul database e probabilmente sta inserendo un dato troppo lungo. Ma quale dato? Cosa succede nella semplice chiamata che Internet Explorer deve fare per riuscire a generare un errore così criptico?

Capisco che la rete non mi può più aiutare, devo far ricorso alla mia anima di sviluppatore e di analista, così cambio strategia e decido: si debugga la chiamata HTTP.

Così con un po’ di pazienza trovo un tool per tracciare le chiamate HTTP, prendo lo stream di uscita dal mio PC e quello di uscita dal PC di controllo, quello funzionante.

Cosa scopro? L’unico dato differente, quindi l’unica informazione che in qualche modo può fare la differenza è il dato User-Agent !!!

Quello del mio PC era:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;  Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; FDM; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)

Insomma, una stringa da 340 caratteri che risultava ingestibile dal server al quale chiedevo di connettermi.

Allora mi attivo e cancello subito le chiavi del registro di Windows in modo da riportare la stringa a dimensioni ragionevoli e finalmente posso compilare senza problemi i miei rapportini.

Cosa era accaduto? Che il progetto al quale sto lavorando richiedeva l’installazione di molto software, tale installazione ha allungato la stringa User-Agent del mio browser in modo eccessivo e questo mi impediva di compilare i rapportini. Come dire che il cliente senza volerlo mi stava facendo lavorare… gratis!!!

Questo vi fa capire quanto sia dura la vita del consulente :)