Technology Experience
.NET World

Dipendenze indesiderate in progetto per Compact Framework che utilizzi P/Invoke

Questa mattina vi voglio rendere partecipi di un problema che ho riscontrato durante la creazione di un setup project per smart device, soprattutto se il progetto richiede l’utilizzo di P/Invoke. Questo problema causa la comparsa di una dipendenza verso l’assembly mscorlib.dll del .NET Framework 2.0, e di conseguenza la creazione di un pacchetto di installazione (CAB) un po’ più grande del dovuto.

Andiamo con ordine. Supponiamo di avere una solution composta da due progetti separati:

  1. una normale Device Application per PPC/WM (che chiameremo TestForDeploy)
  2. un Smart Device CAB Project che si occupa di installare l’applicazione al punto 1 (che chiameremo Deploy)

Il template dell’applicazione generato da Visual Studio (sia 2005 che 2008) crea un’applicazione perfettamente funzionante. C’è solo una Windows Form che lui chiama Form1. Di conseguenza, le dipendenze richieste da entrambi i progetti sono puliti e sono il minimo indispensabile.

Ho volutamente espansi i nodi References e Detected Dependencies per mostrare l’elenco degli assembly richiesti dall’uno e dall’altro progetto.

Ora supponiamo che la nostra applicazione TestForDeploy debba utilizzare una COM Library scritta in C++. Per farlo dobbiamo far uso di una tecnologia chiamata P/Invoke: in pratica di tratta di creare una classe wrapper che mappa tutte le funzioni esposte dalla libreria natina. Questa classe wrapper viene creata on-demand da Visual Studio nel momento in cui la aggiungiamo ai riferimenti. Otteniamo lo stesso risultato utilizzando il tool da linea di comando tlbimp.exe, che crea un’assembly .NET partendo da una .dll in native code.

Ora, supponiamo di avere una libreria in D:Temp e che essa si chiami ComLibrary.dll.

Nel momento in cui la aggiungiamo alle References richieste da TestForDeploy, cambiano un bel po’ di cose, come si vede dallo screenshot qui sotto:

Ho tracciato delle linee rosse per nascondere la libreria, il cui nome rileva informazioni che preferisco non divulgare.

Osservate le Detected Dependencies rilevate dal progetto di setup: esso contiene l’assembly mscorlib due volte. Uno è l’mscorlib.dll del Compact Framework, mentre l’altro è l’mscorlib.DLL del .NET Framework per Desktop. Il resto dei files è corretto: viene inclusa la libreria in native code e viene incluso l’assembly che contiene la classe wrapper.

Se mantenessimo le cose così come sono, il file .CAB installerebbe su PPC/WM anche l’assembly mscorlib.DLL del .NET Framework. Onestamente, non so dire cosa accade: so solo che il .CAB raddoppia le sue dimensioni (da circa 3Mb passa a 6Mb – proprio a causa di quella dipendenza in più).

Di chi è la colpa? Googlando ho trovato diverse informazioni sui forum di Microsoft. Sui post si legge che la creazione della classe wrapper (e quindi l’uso più o meno esplicito di tlbimp.exe) prevede la dipendenza da mscorlib.DLL. Quindi sembra essere un problema di questo tool. Ho provato a lanciarlo da linea di comando per vederne i parametri (l’avevo studiato per qualche esame di certificazione, ma chi se lo ricordava più??). Esiste un parametro /reference che serve per indicare uno o più assembly che tlbimp.exe deve utilizzare per risolvere la definizione dei tipi, ma non è servito a nulla.

L’unico possibile workaround è quello di escludere quel mscorlib.DLL dal progetto di setup. Come? Semplicemente cliccandoci sopra col destro e selezionando Exclude dal menù contestuale, come si vede qua sotto:

Purtroppo l’informazione su quali files escludere non è persistita da nessuna parte da Visual Studio. Ciò significa che la volta successiva in cui aprirete l’IDE vi ritroverete nuovamente quel file incluso, e non c’è verso di fargli capire che non lo si vuole installare.

La feature di Detected Dependencies è propria dell’IDE di Visual Studio. Perchè dico questo? Perchè se avete rimosso il file come vi ho fatto vedere e utilizzare il tool msbuild.exe per rigenerare il file .CAB per la vostra installazione, quel file a tutti gli effetti sparisce dal vostro CAB.

Dovete solo ricordarvi di toglierlo ogni volta, prima di rigenerare il CAB. Ritengo comunque che se il problema fosse gestito a monte, all’interno della classe wrapper per intenderci, sarebbe molto meglio.

Send to Kindle
Software

Non è che crasha solo Internet Explorer!

Premetto che ormai da qualche mese navigo solo utilizzando FireFox 3.0.3. Non che i javisti anti-microsoftiani che mi circondano mi abbiano convinto in qualche modo. Semplicemente è l’unico browser che riesce a girare con 6/7 tab aperti; tab che comprendono webmail, Facebook, NetVibes, Repubblica.it e siti Web vari.

I motivi per cui IE generalmente viene odiato è la sua propensione a crashare nei momenti più critici. Nel mio caso IE non crasha, diventa solo terribilmente lento nel rendering delle pagine Web.

Nonostante FireFox 3.0.3 abbia la fame di essere più stabile ed efficiente di IE, crasha anche lui. Lasciandomi a piedi.

FireFox non è perfetto, come nessun software di questo mondo.

Send to Kindle
.NET World

Debuggare il .NET Framework: quanti l’han fatto?

Oggi pomeriggio, parlando davanti alla macchinetta del caffè con due colleghi, ho ricordato loro che con Visual Studio 2008 è possibile vedere e debuggare i sorgenti del .NET Framework.

Scrissi un post il 19 Gennaio di quest’anno dove dicevo questa cosa, probabilmente appena scaricato Visual Studio 2008 dal mio abbonamento MSDN.

Dopo molti mesi mi chiedo: quanti hanno davvero avuto questa necessità? Credo una piccolissima parte. Certo, ci saranno esperti e guru in tutto il mondo che grazie a questa feature hanno scoperto bug o capito determinati comportamenti behind-the-scenes del .NET Framework, ma credo proprio che al 99% degli sviluppatori non abbia fatto nè caldo nè freddo.

Però dire che Microsoft ha dato questa impronta open-source ha un suo fascino, no?

Send to Kindle
Software

AVG ed un falso positivo davvero pericoloso

AVG 8.0 segnala la presenza del virus PSW.Banker4.APSA nel file C:WindowsSystem32User32.dll. Questa segnalazione è errata, è un falso positivo. Il problema è che se date retta ad AVG e mettete il file in quarantena, Windows comincia ad avere problemi, come è logico che sia.

Maggiori informazioni? Googlate, di materiale sul Web ce n’è già molto.

Spesso la colpa viene data al sistema operativo, ma se certi software si facessero un po’ più i cavoli loro, sarebbe meglio!

Send to Kindle
My personal life

Citazioni tra film e videogiochi

Quotidianamente mi ritrovo a leggere il Muro di UGIdotNET e ho ormai capito che non sono l’unico malato che ogni tanto piazza nei post qualche citazione proveniente da film.

Ieri pomeriggio ho scoperto una cosa divertente. Causa noia della domenica pomeriggio, ho infilato il DVD di Aliens – Scontro Finale nel lettore del mio PC, ho alzato un pochino il volume del mio impianto THX (anche se avevo promesso al resto della famiglia che non l’avrei fatto) e me lo sono goduto. Non sto qui a raccontare la trama del film, affidatevi a Wikipedia per questo, io arrivo subito al dunque. Se non avete visto Aliens, allora chiudete il browser.

La squadra di Marines esplora i sublivelli della colonia sul pianeta LV426: lo scopo è quello di raggiungere i superstiti, che in realtà non ci sono. O meglio, ci sono eccome, ma sono umani imprigionati dagli xenomorfi in attesa di essere fecondati dall’embrione. I marines sono equipaggiati con armi di ogni tipo, compreso il solito mega-mitragliatore fantascientifico. Ad un certo punto, però, ecco il colpo di scena: non si può sparare là sotto, perchè il sublivello nel quale si trovano contiene dei reattori termici che, se colpiti con proiettili, farebbero saltare in aria tutto con una bella reazione termonucleare globale. Meglio evitarlo.

Quindi, vengono alla squadra vengono sequestrate tutte le armi. Ma uno dei protagonisti, Hicks, estrae da non si sa bene dove un fucile a pompa, lo carica ed esclama: “Questo lo tengo per gli incontri ravvicinati”. E gli servirà eccome, povero Hicks.

Quella frase viene detta esattamente così com’è da Gaz, protagonista di Call Of Duty 4, durante la prima missione sulla nave nello stretto di Bering. La squadra SAS sta per fare irruzione nella nave, Gaz estrae il fucile a pompa e dice esattamente: “Questo lo tengo per gli incontri ravvicinati”, mimando chiaramente il tono di voce del film di James Cameron.

Che Gaz abbia visto Aliens – Scontro Finale prima di arruolarsi nell’SAS?

Send to Kindle
Community

Perchè Facebook potrebbe essere "scomodo" (e forse lo è davvero)

Non so da quanto ho attivato il mio account su Facebook. So solo che ho un gran numero di amici, la maggior parte dei quali conosco davvero di persona. Sono tanti, tanti davvero. Fra tutti gli amici di Facebook che ho ci sono amici, amici d’infanzia, amici veri, ex-colleghi e colleghi attuali, ex-capi e capi attuali, ex-ragazze, amici di community e via dicendo.

Facebook è troppo libero. Il mio modo di comportarmi e di atteggiarmi verso il prossimo dipende da chi ho davanti: ci sono persone come la mia amica Francy alle quali – anche in questo preciso momento – confesserei di tutto. Ci sono persone alle quali non direi nemmeno cosa ho mangiato ieri a pranzo. Facebook fa un grosso mischione, passatemi il termine, con il risultato che come Amici vengono inserite ogni tipo di nostri Conoscenti.

E tutti possono vedere e leggere tutto. Certo, c’è il modo di creare liste di amici di serie A e di serie B: questo l’ho scoperto un paio di settimane fa mentre facevo una breve consulenza da un cliente. Ma questo mi costringe a prendere la mia lista di amici e a catalogarli, a pensare razionalmente se A mi sta simpatico, se B è più o meno amico di C e così via. Non sia mai, che orrore.

Su Facebook salta fuori che ci sono amici sarcastici che mi fanno battute che mi fanno scompisciare dalle risate; ma queste battute possono essere lette da chiunque, da futuri capi o da persone che magari non hanno tutto questo atteggiamento irriverente. Penso che nel settore IT ci sia ormai l’abitudine a cercare le persone sul Web, per vedere cosa fanno e per saperne più di loro. E non sempre quello che si trova su Internet è completamente positivo.

E dopo quasi quattro anni di blogging, durante i quali mi sono anche e soprattutto preso in giro, e mi sono sputtanato rivelato, raccontando tutto quello che mi passava per la testa, oggi ho quasi davvero paura per il mantenimento della poca privacy che mi rimane.

Facebook è scomodo, è ingombrante, è pericoloso.
Ma è anche terribilmente divertente.

Send to Kindle
My personal life

Sto leggendo “Il librario di Kabul”

La mattina in cui sono partito per Bolzano, mercoledì scorso, ho acquistato in libreria a Famagosta il libro “Il libraio di Kabul”. L’autrice è norvegese, si chiama Asne SeierStad, ed è una giornalista/scrittirce/reporter di guerra.

Il libro racconta del suo inserimento in una famiglia afgana dopo l’11 Settembre 2001, entrandone nella quotidianità e raccontando nel dettaglio i rapporti fra i familiari, le tradizioni, il loro modo di vivere a metà strada tra il mantenimento di vecchie tradizioni islamiche e l’affacciarsi del mondo moderno. Il capostipite della famiglia è Sultan che, come dice il titolo del libro, è un libraio dalla mentalità molto aperta (per ammissione stessa dall’autrice, non rappresenta assolutamente la tipica famiglia afgana): vende volumi di ogni tipo, spesso vietati dal regime talebano (e subendone le conseguenze). Vende libri scolastici, di politica afgana/russa/americana/talebana, di poesie. Il suo deposito, a volte tenuto ben nascosto, conta 8.000-9.000 volumi. Conduce una vita benestante.

E’ un libro che intriga parecchio. Non è vera e propria narrativa. Assomiglia di più ad un reality scritto, nel vero senso della parola: la vita giorno per giorno. Fare la spesa, i pranzi e le cene, i matrimoni in famiglia, il lavoro di Sultan, la condizione delle donne costrette ad indossare il burka, il pericolo di viaggiare da una città all’altra incontrando posti di blocco militari, la posizione dei governi che si sono alternati alla guida del paese (dai talebani a Karzai), la preghiera e le iniziative del Ministero della Repressione del Vizio e la Promozione della Virtù (secondo il quale non si può ascoltare musica e non si possono far volare aquiloni).

Questo libro è diventato la mia lettura serale, rilassante ed interessante al punto giusto, e che mi fa conoscere un mondo molto diverso e molto lontano dal mio.

Send to Kindle
.NET World

SQL Server Management Studio e SQL Server Mobile

SQL Server Management Studio permette di lavorare anche con database SQL Server Mobile. Quest’ultimo è un piccolo motore di database che gira su device Pocket PC e Windows Mobile, le cui capacità sono ovviamente ridotte rispetto al classico SQL Server che conosciamo. E’ comunque un’ottima soluzione per avere un database relazionale

I database SQL Server Mobile sono semplici files .sdf. Tramite SQL Server Management Studio possiamo aprire e lavorare questi files, indipendentemente dal fatto che essi si trovino sul nostro PC fisico, su un palmare o addirittura su un emulatore di palmare. Vediamo tutti e tre i casi, perchè ci sono alcuni aspetti che meritano di essere discussi.

Apertura di un database su un PC fisico
Nelle prime fasi di sviluppo è comodo cominciare a lavorare su un nuovo database, senza aver per forza un palmare fisico. Questo significa che possiamo creare un file .sdf sul PC di sviluppo, magari nella directory della solution. Con SQL Server Management Studio possiamo aprire il file dalla finestra Connect To Server e specificare il file con il suo path locale. Ricordiamoci di selezionare la voce SQL Server Mobile nella casella Server Type.

Nulla di che, giusto?

Apertura di un database su Pocket PC/Windows Mobile
Per aprire un file .sdf presente su un device mobile è necessario che quest’ultimo sia connesso via ActiveSync oppure via Windows Mobile Device Center (questo dipende dall’OS che usate: Windows XP oppure Windows Vista). Dalla finestra Connect To Server è necessario specificare il path che punti innanzitutto al device e poi via via specifichi il percorso corretto:

Nell’immagine qui sopra si vede che il path è Mobile DeviceSDMMC Diskdatabase.sdf. Se non conoscete il percorso giusto basta aprire la casella e cliccare su <Browse for more…>. Nel caso che ho preso io come esempio, il file .sdf è stato salvato sulla SD interna del palmare: questo chiaramente non è sempre così. Dipende dalla lingua e dal tipo di supporto che usate.

Apertura di un database su un emulatore
Il pacchetto Visual Studio 2005/2008 mette a disposizione un emulatore su cui possono girare sistemi operativi come Pocket PC e Windows Mobile. Se non avete esigenze particolari questo emulatore è l’ideale per cominciare a sviluppare qualcosa, soprattutto se non avete a disposizione un palmare reale.

Per aprire il manager degli emulatori basta andare sul menù Tools –> Device Emulator Manager di Visual Studio. Apparirà una finestra con l’elenco di tutte le immagini di palmari che avete installato. Cliccate con il destro su una qualsiasi voce e poi cliccate Connect: in pochi secondi verrà avviato sullo schermo un vero e proprio palmare, su cui potete fare tutte le installazioni che volete, come se fosse un palmare fisico vero e proprio.

A questo punto la domanda è: come faccio ad aprire un file .sdf che sta su un emulatore? Torniamo al passo precedente: abbiamo visto come SQL Server Management Studio possa collegarsi al dispositivo connesso via ActiveSync. E’ possibile collegare l’emulatore ad ActiveSync, così da far credere a quest’ultimo di aver a che fare con un vero palmare? Certamente sì! Cosa starei qui a parlare, se no?

Per farlo, avviate un emulatore qualsiasi dal Device Emulator Manager. Una volta che l’emulatore è partito, cliccateci sopra con il destro e cliccate sulla voce Cradle. Ricordatevi di aver selezionato la voce DMA nelle connessioni consentite da ActiveSync.

Se tutto è andato a buon fine, vedrete ActiveSync che rileva il dispositivo e si connette, esattamente come farebbe con un palmare vero. A questo punto, è sufficiente seguire la stessa procedura che abbiamo visto prima.

Send to Kindle
Hardware

Freecom Network Media Player 450 WLAN

In questo post vi avevo raccontato di questo hard-disk multimediale che mi stava interessando parecchio. Alla fine ci ho rinunciato, soprattutto perchè sui forum ufficiali del prodotto erano molto di più i commenti ed i post negativi che quelli positivi. Quello che volevo non era un ennesima fonte di problemi, volevo un hardware da utonto, una cosa da mettere in salotto, da accendere e da utilizzare in pochi minuti e senza troppe complicazioni.

Alla fine credo di aver raggiunto il mio scopo con il Freecom Network Media Player 450WLAN. Siccome mi piace parlarvi sempre dei prodotti che acquisto, lo faccio anche questa volta sperando di esservi utile nel caso siate interessati anche voi in aggeggi di questo tipo.

Le caratteristiche principali del prodotto sono le seguenti:

  1. Hard-disk SATA2 interno da 500GBytes
  2. Connessione via RJ45 o via WiFi alla vostra LAN preesistente
  3. Collegamento alla TV per vedere foto & video dall’HD interno
  4. Player di files mp3
  5. Browsing della LAN alla ricerca di folder condivisi da cui prendere materiale multimediale
  6. Collegamento ad Internet per l’ascolto di radio in streaming
  7. Telecomando per starvene comodamente sul salotto

Questo è in soldoni quello che fa il prodotto, e lo fa bene, seppur con qualche limitazione. Ad esempio, se esplorate uno share di rete alla ricerca di fotografie, lo vedrete tutte male: colori sballati, distorsioni ed altro. La cosa migliore le migliaia di fotografie digitali le ho copiate tutte sul suo HD interno e su questo non c’è problema. Lo slideshow delle fotografie avviene con una musica in background, e ciascuna fotografia viene mostrata con un particolare effetto di ingresso ed uscita (zoom in & out, fade in & out ed altri ancora). L’altra grossa limitazione è che non funge da NAS: il device esplora la vostra LAN per trovare gli shares di rete, ma non è in grado di condividere agli altri i propri folder locali. Questo non vi consente di raggiungere il device con un path tipo \MEDIASERVER. Potete copiare nuovi files dentro l’hard-disk collegandolo ad un PC via USB, oppure accedendo via ftp con un client qualsiasi. Ieri ho copiato un file DivX da 700Mb da uno dei miei PC all’hard-disk in circa 15 minuti: più che accettabile.

Tutto il resto va che è una bomba. Le foto ed i video si vedono davvero bene. Il player audio legge non solo mp3, ma anche playlist di Winamp. Il telecomando vi consente di controllare il player davvero in tutti i modi possibili ed immaginabili.

L’hard-disk ha un sacco di features aggiuntive: è possibile ad esempio ascoltare radio via Internet usando www.shoutcast.com. E’ possibile creare un folder ‘music’ con tutti gli mp3 da ascoltare durante lo slideshow delle fotografie. Ha uno screensaver incorporato, di cui non me ne faccio nulla.

Sono estremamente soddisfatto. Lo scopo era quello di rendere più fruibile tutto il materiale multimediale disponibile senza per forza utilizzare un PC. I miei genitori ad esempio il PC lo utilizzano, ma non sono così pratici da poter navigare su un NAS e di vedere le foto di famiglia: sono ancora convinti che sia necessario stamparle altrimenti nisba. Spero che cambino idea.

Io ve lo consiglio.

Send to Kindle