Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

novembre 2005 Blog Posts

Il mio primo ordine su mcpestore.com

Chi di voi è certificato, almeno MCP come me, sa che è possibile fare ordini sul sito mcpestore.com, che vende gadget, t-shirt, materiale d'ufficio e molto altro, tutto marcato dal logo MCP o dal più generico Microsoft. Beh, non ho resistito alla tentazione, come magari molti di voi a vostro tempo. La cosa interessante è che io ho fatto l'ordine sabato sera (verso le 23, più o meno), dopo aver passato il pomeriggio a sfogliare il catalogo online con mia mamma (ebbene sì, anche lei! ), mio fratello e la mia sorellina "adottiva" Sabrina. C'è stato solo il lunedì di mezzo. Ieri mattina...

posted @ mercoledì 30 novembre 2005 13:31 | Feedback (8) |

Migrazione a SQL Server 2005

Con l'avvento di SQL Server 2005, molti miei clienti hanno deciso di adottarlo come loro database aziendale, complice il fatto che come ben sappiamo esiste la versione Express Edition completamente gratuita. Ai tempi, avevo detto a tutti che c'era anche MSDE, ma chissà perchè sono sempre stati un po' riluttanti, forse per la mancanza di qualche tool grafico per rendere più comprensibile il lavoro. Adesso, con il 2005, le cose sono ben diverse. Oggi, quindi, mi ritrovo ad aver a che fare per la prima volta con Management Studio ed i nuovi DTS, che cadono sotto il nome di Integration Services....

posted @ martedì 29 novembre 2005 15:56 | Feedback (1) |

Un RSS-feed per sapere tutto sui RSS-feed

Per la serie "il cane che si mangia la coda", ho appena trovato questo sito che magari può essere utile a chi cerca le specifiche degli RSS-feed che si stanno sempre più diffondendo con l'avvento dei blog e dei podcasting. Il sito è http://www.rss-specifications.com. Ho passato il sabato sera in casa-casetta, con fuori che nevica. Ieri notte ho fatto le ore piccole, mi sento un po' il fuso orario che mi perseguita, allora eccomi qua. powered by IMHO 1.3

posted @ domenica 27 novembre 2005 00:55 | Feedback (2) |

Come è fatta la mia LAN a casa

Ho scaricato questo bel programma per disegnare reti. Si chiama Smart Draw e potete trovarlo qui. Purtroppo non è freeware, mi pare costi qualcosa come 147 dollari. Siccome a me non serve più di tanto, ho scaricato la demo e mi sono messo a disegnare la LAN che, nel corso degli anni, mi sono costruito a casa. Ci sono i miei PC desktop, i miei notebook, stampanti, palmari e cellulari. Il programma è davvero completo, ha un sacco di immagini vettoriali per molte periferiche, dall'informatica più classica ai ponti radio e cose del genere. Beh, che ne pensate? powered by...

posted @ sabato 26 novembre 2005 15:49 | Feedback (16) | Filed Under [ OT ]

Da oggi sono ufficialmente l'MCP #3502269!!

Ieri sera, con molta sorpresa, ho ricevuto il mio Welcome Kit per essere diventato MCP!  Sono molto contento, ho subito infilato la mia wallet card nel portafoglio e, giusto per fare il figo, la farò vedere a chiunque mi passi sotto il naso! So che molti di voi magari essere MCP non è nulla, però per me è fonte di soddisfazione. In attesa, quando le acque si saranno calmate, di ricominciare a studiare per sostenere gli altri esami. Continuo a ricevere tutt'oggi molti commenti sui miei post relativi ad MCAD scritti durante il periodo di preparazione. Volevo ringraziare pubblicamente, senza...

posted @ sabato 26 novembre 2005 13:25 | Feedback (3) | Filed Under [ MCAD ]

[OT] del venerdì (25)

Molti lo definiscono un problema serio. Anche io lo definisco un problema serio: quando ogni weekend muoiono un sacco di ragazzi e ragazze perchè vanno a sbattere contro un albero, finiscono fuori strada, si addormentano al volante, il problema deve essere per forza serio, non vi pare? Però, e questo io non lo capisco proprio, perchè deve essere risolto in modo così stupido parlando di velocità media? Cosa c'entra la velocità media? Quindi, praticamente, posso superare i 130km/h a patto che poi in un altro tratto di strada vado a 90km/h, oppure mi fermo in un autogrill per prendere un...

posted @ venerdì 25 novembre 2005 14:06 | Feedback (6) | Filed Under [ OT ]

Anche quest'anno sta arrivando il Linux Day 2005

UGIdotNET tratta prevalentemente di mondo Microsoft, di .NET ed affini, però nulla toglie all'altra faccia della medaglia, quella di open-source, di Linux, di mondo libero, insomma. Oddio, diciamocela tutta: anche se io non sono proprietario dei sorgenti di Windows, anche se non sono libero di vedere il codice di MSCOMCTL32.OCX, anche se non posso ricompilare il kernel alla release 7.8.2.3.49.00023.5133 beta 2, io così tanto prigioniero non mi sento. Tutto questo (folle) preambolo per dire che sabato 26 novembre è il Linux Day, evento che arriverà in quasi 100 città in tutta Italia. Mi fa piacere sapere che anche la mia...

posted @ giovedì 24 novembre 2005 17:14 | Feedback (3) |

Dopo aver girato il Web, dopo molti consigli, ho preso un Nokia 6630

Faccio parte di UGIdotNET, una bella community, devo dire. Vi avevo messo al corrente, poco tempo fa, che stavo per prendere un nuovo cellulare. Non intendendomene affatto, ho chiesto consiglio su forum, newsgroup e, appunto, sfruttando il mio blog di UGI. Ho ricevuto consigli spassionati ed aiuti dal mio ominimo Igor, da Eleonora, da colleghi e da altri amici. Ero partito dal voler prendere un Sony-Ericsson, ma alla fine mi sono convinto a voler prendere un Nokia 6630. L'ho preso lunedì sera e devo dire che mi trovo piuttosto bene. Ho già installato qualche software per Symbian 60 che ho trovato in giro...

posted @ giovedì 24 novembre 2005 12:50 | Feedback (4) | Filed Under [ OT ]

A metà strada tra realtà e Star Trek

Tratto da http://einsteinathome.org: "One way to visualize the importance of detecting gravitational waves is to think of the universe as a movie and gravity waves as sound. By studying the movie with light, we can see what happens. By studying the movie with sound, we can hear what happens. Although each of these methods gives us some information on the storyline, we can only really understand what is happening when we can see and hear the movie at the same time. This is why scientists are so excited about being able to study the universe with gravitational waves and light waves." La...

posted @ giovedì 24 novembre 2005 11:12 | Feedback (8) |

Visual Studio Add-Ins Every Developer Should Download Now

Un certo James Avery scrisse - a quanto pare un anno fa - un articolo intitolato ".NET Tools: Ten Must-Have Tools Every Developer Should Download Now". Devo aver letto qualche post qui su UGIdotNET, però ricordo di aver trovato NUnit ed altri tool. Stavo curiosando sulle pagine di MSDN Magazine di Dicembre 2005 e ho trovato questo secondo articolo, sempre dallo stesso autore, che ripropone lo stesso tema, aggiornando però il contenuto con quanto è possibile trovare oggi in Rete. L'articolo si intitola "Visual Studio Add-Ins Every Developer Should Download Now". Ci sono i classici tool per il debugging e per la generazione automatica del codice. Sembra...

posted @ mercoledì 23 novembre 2005 17:28 | Feedback (1) | Filed Under [ Sviluppo .NET ]

[Parte.2] Missione Sasser, attacco al potere

continua dal post precedente Sasser non era mai stato così sicuro come in questo momento. Sapeva che l'OS aveva già rilevato la sua presenza, ma nonostante questo era conscio e ben sicuro di quello che stava per fare. L'entità si trovava in un posto al sicuro all'interno della RAM del sistema: non che l'OS non potesse rilevarla, però la memoria era così vasta che c'era una minima probabilità che qualche scanner capitasse proprio in quel punto. Voleva agire alla svelta, perchè così voleva il suo codice interno. Un malicious code è un'entità semplice, elementare e nemmeno molto estesa in termini di...

posted @ mercoledì 23 novembre 2005 12:27 | Feedback (2) | Filed Under [ 010 .bytes. 010 ]

Google offline per qualche minuto...ve ne siete accorti?

Se per qualche minuto fa Google fosse irraggiungibile, la prima cosa che mi direi sarebbe: "Pazienza, mio troppo giovane Padawan!". Probabilmente la seconda cosa sarebbe: "Ma è un problema di Google oppure è la mia connessione?". Il tempo di pensare a come superare il problema, et voilà, il problema si risolverebbe da solo, proprio perchè non dipende da noi! Invece eri deve essere scoppiato il panico, perchè Google e tutti i suoi servizi sono stati irraggiungibili per un po' di tempo? Voi ve ne siete accorti? Io dico che può succedere, non capisco il motivo di tanto clamore! powered by IMHO...

posted @ martedì 22 novembre 2005 11:57 | Feedback (1) | Filed Under [ OT ]

HappySign, non mi sono dimenticato di te!

Chi segue il mio blog sa che sto preparando un freeware (HappySign) di cui ho già parlato sul mio sito ed in alcuni post, appunto, del mio blog. Per la serie "avrei voluto farlo tranquillamente nel tempo libero", ho dovuto rallentare un attimo. Di mezzo ci sono stati il compleanno di mio fratello (festeggiato in due serate diverse), quello di mio papà, qualche stress di troppo causato dal lavoro ed altri fattori che mi hanno fatto continuamente traslare, chiamiamola così, la data di uscita di HappySign. Non solo: ho avuto un po' di richieste e suggerimenti, prima fra tutte la possibilità di scrivere le...

posted @ martedì 22 novembre 2005 11:41 | Feedback (2) | Filed Under [ I miei freeware Sviluppo .NET ]

[OT] La guerra contro gli Stroggos è finita!

La delusione della SMAU di quest'anno è stata almeno parzialmente mitigata dall'acquisto di Quake 4, ultimo videogioco della mitica e mai dimenticata ID Software. Ieri sera, prima di andarmene a letto, ho sconfitto il Makron, distrutto il Nodo e salvato la Terra dalla minaccia aliena. Non so se ve ne rendete conto, ma questa mattina, dovete tutti ringraziarmi se siete ancora vivi, sani e salvi nelle vostre case, e se avete ancora un lavoro e una famiglia. A parte scherzi, ci ho messo un mesetto per finirlo, e devo dire che per un gioco d'azione è più che sufficiente. Utilizza lo stesso motore...

posted @ lunedì 21 novembre 2005 11:12 | Feedback (5) | Filed Under [ OT Videogame ]

L'acquisto del mio nuovo cellulare! Quale?

Dopo il sondaggio indetto da Alessio e la sua nuova auto, aiutate anche me? Non me ne intendo di cellulari, lo confesso. Parlatemi di PC, di palmari, di lettori CD e DVD, persino di macchinette del caffè o lavatrici, ma lasciate stare con i cellulari. Purtroppo, oggi è quasi un oggetto indispensabile. Il mio buon vecchio Siemens M50, acquistato nell'estate 2002, mi sta lasciando: si spegne improvvisamente senza motivo, mi dà strani messaggi sul display, più altri malfunzionamenti non meglio precisati. Sono appena tornato da un po' di shopping per farmi un'idea. Ho bisogno di un cellulare che abbia le seguenti caratteristiche: ...

posted @ sabato 19 novembre 2005 17:34 | Feedback (13) | Filed Under [ OT ]

[OT] del venerdì (24)

Sono disgustato dal fatto che un certo Daniele Interrante, idolo delle ragazzine e di chissà quante persone, possa dire su Rai Uno, in prima serata, che 1/3 * 3 faccia 3, e non 1. Onestamente, sono anche disgustato dal fatto che la stessa persona creda che la Terra sia divisa in soli 2 fusi orari, e non 24 come è veramente.Sono disgustato dal fatto che la vincitrice dell'Isola dei Famosi, ex-star del mitico Drive-In, abbia dichiarato, subito dopo la vittoria: "Adesso, magari, mi rifaccio il seno!".Sono disgustato perchè in 3 spot in TV (una di un'automobile, una di una nota compagnia telefonica...

posted @ venerdì 18 novembre 2005 10:52 | Feedback (10) | Filed Under [ OT ]

Articolo su MSDN Magazine riguardo il deploy ClickOnce

Ho trovato questo articolo su MSDN Magazine. E' un articolo scritto da un certo Bryan Noyes , del maggio 2004, ma io l'ho trovato solo oggi: ci vuole abilità e capacità anche per questo, no??  A parte scherzi, evidenzia vantaggi & svantaggi nell'utilizzo di Click Once per il deploy delle applicazioni .NET. Dice espessamente, tra le altre cose, che le applicazioni distribuite attraverso Click Once vengono scaricate ed installate in una cache privata (questo già lo sapevo), allo scopo di rimanere isolate il più possibile dalle altre applicazioni già presenti sul PC....

posted @ giovedì 17 novembre 2005 18:34 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Debuggare XSLT con Visual Studio 2005

Nel periodo 2003-2004 ho lavorato presso una società a Milano che sviluppa software per la pubblica amministrazione, inteso come uffici comunali, asili, scuole elementari, ASL, etc. etc. Tra le altre cose, per un certo periodo mi ero occupato di esportare un file XML che potesse rappresentare lo stato anagrafico/sociale/economico/giuridico di una certa persona. In pratica, mi sono inventato di sana pianta uno schema XSD che mi aiutasse a generare il file XML, che mi permettesse la validazione e così via. Il file XML finale era un grande contenitore con: dati anagrafici (cognome, nome, nascita, eventuale morte) dati sul...

posted @ giovedì 17 novembre 2005 11:32 | Feedback (2) | Filed Under [ Sviluppo .NET ]

[OT] Qualche foto di camera mia

La mia macchina digitale funziona, ma quando si tratta di fare foto al chiuso, diventa orribile. Così, questa sera me la sono fatto prestare da un mio amico. Ho scattato, per puro divertimento, qualche foto di camera mia. Perchè non condividerle con i miei amici di UGIdotNET? Il mio letto invaso dai 6 film completi della saga, videogiochi. In alto a sinistra si intravedono 2 fumetti che ho preso a Lucca.C'è anche un C1P8 (o R2D2 che dir si voglia) ribaltato!! La mia scrivania (ho preferito cancellare un pezzo del calendario di Giorgia Palmas)Monitor da 19", in alto a sinistra si intravedono...

posted @ mercoledì 16 novembre 2005 23:22 | Feedback (9) | Filed Under [ OT ]

Global hook in .NET 2.0

Avevo scritto sul mio blog qualche tempo fa un post dove segnalavo qualche problema nel creare un hook usando il nuovo framework 2.0. Avevo scritto qualcosa anche sul newsgroup di UGI proprio per questo problema: purtroppo non ricordo chi, ma mi avevano detto che usavo dichiarazione API non corrette, oppure che c'era qualche altro problema nel codice. Mi fa piacere sapere che non sono l'unico al mondo a non essere riuscito, o che comunque ha trovato qualche differenza tra FW1.1 e FW2.0. Proprio adesso ho letto un post sul blog di MSDN (di un certo Srivatsn, dai...su....ditemi che conoscete anche lui...

posted @ mercoledì 16 novembre 2005 18:18 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Tratto da "Application Architecture for .NET: Designing Applications and Services"

The term service is used to indicate any external software component that provides business services. This includes, but is not limited to, XML Web Services. Services expose a service interface to which all inbound messages are sent. The definition of the set of messages that must be exchanged with a service in order for the service to perform a specific business task constitutes a contract. powered by IMHO 1.2

posted @ mercoledì 16 novembre 2005 14:16 | Feedback (1) | Filed Under [ Frasi sagge ]

[OT] Se il buongiorno si vede dal mattino...

Ore 6:55, mi sollevo dal letto e mi butto sotto la docciaOre 7:10, faccio colazione (latte + biscotti)Ore 7:32, mi siedo in macchinaOre 7:35, raggiungo il mio amico con cui condivido l'auto davanti a casa suaOre 7:44, Centro Commerciale Bennet, Pieve Fissiraga (LO), per fare benzina al self-serviceOre 7:45, ci accorgiamo che l'impianto è fuori usoOre 7:45, proclamo: "Dai, entriamo in autostrada e faccio benzina all'Autogrill"Ore 7:49, raggiungiamo l'Autogrill sulla A1, San Zenone al LambroOre 7:51, mi posiziono con l'auto alla pompa di benzina ServitoOre 7:59, NON HO ancora fatto benzina...che fine ha fatto l'omino?????Ore 8:05, mi posiziono con l'auto alla...

posted @ mercoledì 16 novembre 2005 11:12 | Feedback (5) | Filed Under [ OT ]

DRM, rootkit....la mia sul caso della Sony

E' di questi giorni la notizia che Sony ha inserito in alcuni CD musicali un rootkit, un software/driver che viene installato automaticamente quando si fa il play del CD. Ho trovato questi due articoli scritti da un certo Mark che a quanto pare è quello che ha fatto scatenare il putiferio in tutto il globo. Gli articoli sono questi:More on Sony: Dangerous Decloaking Patch, EULAs and Phoning HomeSony’s Rootkit: First 4 Internet Responds Vi consiglio la lettura, perchè oltre a parlare di EULA e di aspetti legali, fa vedere chiaramente alcuni dettagli tecnici che dimostrano come Sony non si sia fatta veramente scrupoli...

posted @ martedì 15 novembre 2005 13:33 | Feedback (12) |

[Parte.1] Missione Sasser, attacco al potere

Il bus a 32 bit era minaccioso, oscuro e silenzioso, illuminato a tratti da lampi blu e da sequenze di dati che lo percorrevano in tutta la sua lunghezza. Nonostante si trovasse in un ambiente ostile e che percepiva come nemico, il byte sapeva esattamente quello che doveva fare in quel sistema esterno. Non si trovava lì per caso, e quella per lui non era certo una vacanza-premio o chissà cosa. La missione che gli era stata affidata dal suo OS era chiara e ben definita. Non aveva alcuna intenzione di deluderlo, nè soprattutto di deludere se stesso. Aveva preso parte a...

posted @ martedì 15 novembre 2005 10:46 | Feedback (3) | Filed Under [ 010 .bytes. 010 ]

La vera sicurezza

La vera sicurezza è la nostra intelligenza, accompagnata dal buonsenso. Tutto il resto è limitazione. powered by IMHO 1.2

posted @ lunedì 14 novembre 2005 11:05 | Feedback (4) | Filed Under [ Frasi sagge ]

Interfacciarsi con Windows Media Player tramite C#

Sto facendo esperimenti con C# per l'interfacciamento con WMP per cercare di capire come ottenere informazioni sul file che si sta playando. Non è affatto complicato, anzi, come al solito è molto divertente. Bisogna innanzitutto aggiungere nei references il file wmp.dll, parte integrante di WMP. A questo punto abbiamo a disposizione tutto l'object model con cui possiamo veramente fare di tutto: fare il play di un file, enumerare le playlist, crearne di nuove, controllare il lettore con i semplici play/stop/pause, skinnare l'applicativo e via dicendo. Ad esempio, se volessimo sapere quante playlist sono state definite... player = new WMPLib.WindowsMediaPlayer();WMPLib.IWMPPlaylist lista;WMPLib.IWMPPlaylistCollection coll = player.playlistCollection;WMPLib.IWMPPlaylistArray arr = coll.getAll();int howmany = arr.count;for(int i=0;i<howmany;i++){    lista = arr.Item(i);    Debug.WriteLine(lista.name + " : " + lista.count);} Dichiaro un...

posted @ venerdì 11 novembre 2005 16:26 | Feedback (7) | Filed Under [ I miei freeware Sviluppo .NET ]

[OT] del venerdì (23)

Proposte cinematografiche per questo weekend (tratte direttamente da http://www.multiplexarcadia.com, l'unico cinema che per me ha senso di esistere): Flightplan - Mistero in volo Elizabethtown I Fratelli Grimm e L’Incantevole Strega In her shoes La Sposa Cadavere Texas Mio fratello questa sera vuole passare una serata a vedersi un bel film, ma francamente non saprei cosa consigliare. Mi hanno detto che "La Sposa Cadavere" è bello, ma non mi ha mai ispirato, perciò fate voi. Conoscendo il debole che ha mio fratello per Cameron Diaz, probabilmente ci butteremo su "In her shoes", classica commedia americana che...

posted @ venerdì 11 novembre 2005 11:42 | Feedback (3) | Filed Under [ OT ]

Come tornare da Thunderbird a Outlook Express

In un mio vecchio post parlavo di come avessi adottato Thunderbird come [mail-news-blog] reader. Lo ritengo comodo e molto funzionale. Una cosa di cui mi sono accorto durante l'utilizzo reale, sul campo, è che Thunderbird memorizza le configurazioni sui filtri nelle cartelle dedicate ai propri account, e non in altri posti strani e pericolosi (leggesi registro, per esempio). Risultato? Che se per caso formattate il PC, ve lo ritrovate tutte belle già configurate quando reimpostate TB facendolo puntare alle cartelle pre-esistenti. Io, per esempio, mi sono creato un filtro che preleva tutte le e-mail in ingresso che iniziano con la...

posted @ venerdì 11 novembre 2005 10:32 | Feedback (3) |

Come serializzare seriamente (gioco di parole) con .NET

Premetto che questo è il mio post numero 200....EVVIVA!!! Nel mio ultimo post ho parlato di un metodo spartano, brutale e poco consigliabile per generare un file XML in cui salvare le impostazioni di una qualsiasi nostra applicazione. Il metodo che ho scritto, sebbene funzioni, ha suscitato qualche reazione negativa, perchè come giustamente è stato osservato non è assolutamente il modo migliore per serializzare su XML. In questo post, dopo averci ragionato su per circa 24 ore, propongo il metodo più politically-correct, quello migliore ed adatto a sfruttare meglio le capacità del framework. Ovvero, sfruttare i namespace...

posted @ giovedì 10 novembre 2005 18:11 | Feedback (38) | Filed Under [ I miei freeware Sviluppo .NET ]

Microsoft Technical Conference 2005 - notizie & news in diretta

Come ho detto, io non ci sono. Però ho mandato in rappresentanza mio fratello Omar, anche lui UGIdotNET. Mi dice che l'ambiente è molto bello - io purtroppo non ci sono mai stato...mi ha descritto stand di UGIdotNET (e ci mancherebbe altro! ), Edizioni Master, ObjectWay. 2500 presenze contate, alle 16:30 - se ho ben capito - verranno distribuite copie di Visual Studio 2005 e SQL Server 2005. Le presenze sono un po' di più di quello che ci si aspettava, quindi penso sarà dura avere una copia: ordino a mio fratello di non spingere, di comportarsi bene, di non provocare...

posted @ giovedì 10 novembre 2005 15:34 | Feedback (0) |

Microsoft Technical Conference 2005 - annullamento

Qualche minuto fa, ho annullato la mia iscrizione alla giornata di domani. Questa settimana, da domenica scorsa ad oggi, è proprio da dimenticare. Prima il mio cagnolino, poi .NET che mi fa impazzire, poi il lavoro che mi fa correre. Quindi, da qualche minuto c'è un posto in più per chi si vuole registrare in extremis. Che tristezza! powered by IMHO 1.2

posted @ mercoledì 9 novembre 2005 19:09 | Feedback (5) |

La mia classe Settings, finalmente

Una citazione da un grandissimo film degli anni '80 diceva:"Strano gioco. L'unica mossa vincente è non giocare."Chi indovina, vince un premio - non ho ancora deciso cos'è! Mi è venuto in mente anche un buon mio amico/nostro collega, che invece di usare librerie pre-esistenti, preferiva cominciare da zero e farsele da sè. E' esattamente quello che alla fine ho deciso io per il mio problema riguardante i settings della mia applicazione HappySign. Ho creato una classe Settings che espone tutta una serie di membri che sono poi i settings che voglio usare nella mia applicazione. Ecco un piccolo estratto di...

posted @ mercoledì 9 novembre 2005 14:29 | Feedback (13) |

Configuration Application Block per HappySign

Vedo che ho ricevuto un sacco di proteste per la mia voglia di usare app.config per leggere e salvare le applicazioni di HappySign. Sappiate che lotterò duramente e con tutte le mie forze: posso anche avere torto, ma non me ne importa nulla, l'importante è credere in quello che si dice. Non capisco perchè .NET metta un bel tappeto rosso a chiunque voglia leggere i settings dal file app.config, ma poi attui la politica "lì ci puoi solo leggere", "l'utente non ha i permessi di scrittura su C:\Programmi\<nomeapp>", "non è il posto giusto", bla bla bla. Mi sembra un po' quello...

posted @ martedì 8 novembre 2005 18:43 | Feedback (6) |

Prima serata di test "serio" per HappySign

Ieri mattina, prima che succedesse il fattaccio che ha scombussolato il tranquillo tran-tran familiare , ho portato HappySign a buon punto. Sabato mattina, di buon'ora, ho messo a punto la possibilità di creare le famigerate firme dinamiche, che funzionano davvero bene. Con qualche colpo di codice .NET (rigorosamente in VB.NET) ho creato un paio di firme dinamiche simpatiche e divertenti. La prima va a leggere il file XML dell'RSS-feed ...

posted @ lunedì 7 novembre 2005 17:42 | Feedback (7) |

Il byte che un giorno decise di andarsene

Dedicato a Jolly, il cane che è stato il miglior amico della mia famiglia dall'estate 1990.Oggi, stanco, ha deciso di lasciarci. Il byte ne aveva passate di cotte e di crude.Pensò a quella volta che si imbattè per la prima volta in un firewall: il software firewall voleva respingerlo, eliminarlo perchè lo considerava un byte pericoloso. Lui riuscì ad aggirarlo: aggregandosi con altri bytes, formò un costrutto di codice e ad oltrepassare le regole imposte e ad entrare nel sistema.Pensò a quando correva veloce, lungo i bus di sistema, portando informazioni da una parte all'altra del sistema senza perdere un colpo.Pensò...

posted @ lunedì 7 novembre 2005 01:02 | Feedback (6) | Filed Under [ 010 .bytes. 010 ]

Dettagli tecnici su HappySign...le firme dinamiche

Inganno il tempo che mi rimane qui al lavoro per illustrare un attimo come ho intenzione di implementare la feature di firma dinamica nel mio HappySign. La classe Sign è il fulcro di tutto: essa contiene proprietà come Name, Author, Category, Dynamic e Code (oltre a diverse altre che adesso non interessano).Quella che ci riguarda è proprio quest'ultima, Code. Se Dynamic = false, allora Code contiene banalmente una string. Questa string è quella che viene trascinata o incollata. Niente di più semplice. Già testato. Se Dynamic = true, le cose si fanno più complesse. Se la firma è dinamica, devo associargli una classe contenente codice .NET...

posted @ venerdì 4 novembre 2005 18:35 | Feedback (3) |

[OT] del venerdì (22)

Ecco uno dei rari weekend che si preannuncia vuoto e desolato di eventi. Non so quello che farò, cosa combinerò, quale parte del mondo mi vedrà protagonista. Lo so, soffro di manie di grandezza.  Probabilmente, improvviserò qualcosa con gli amici. Magari alla fine questi sono i weekend migliori, non ci si aspetta nulla di particolare, e allora vengono fuori le cose migliori. Mi sa che dovrò incontrarmi con Flavio & Stefania ("chi sono?" - vi chiedete voi - "affari miei!" - rispondo io ): a Lucca, la settimana scorsa, ho acquistato per conto suo un volumetto intitolato "Thor e i Nuovi Vendicatori"...

posted @ venerdì 4 novembre 2005 14:10 | Feedback (3) | Filed Under [ OT ]

Creare un hook sulla tastiera con il framework 2.0

Ieri sera mi sono messo davanti al codice del mio HappySign che pian piano sta vedendo la luce. Tra le varie migliorie, ho intenzione di aggiungere una funzionalità che permette di associare una certa combinazione di tasti ad una certa firma. Per esempio, sto scrivendo un'e-mail con Outlook Express, premo CTRL+F6 e lui mi aggiunge automaticamente la firma "Asta la vista, baby...". Per farlo, occorre ovviamente implementare e gestire un hook sulla tastiera a livello di sistema. In Rete ho trovato tanti esempi e tanto codice. Io mi sono fissato ad utilizzare la classe UserActivityHook riportata qui sotto: using System;using System.Runtime.InteropServices;using System.Reflection;using System.Threading;using System.Windows.Forms;namespace HappySign  {        /// <summary>    /// This class allows you to tap keyboard and mouse and / or to detect their activity even when an     /// application runes in background or does not have any user interface at all. This class raises     /// common .NET events with KeyEventArgs and MouseEventArgs so you can easily retrive any information you need.    /// </summary>    /// <remarks>    ///     created by - Georgi    ///     created on - 22.05.2004 13:08:01    /// </remarks>    public class UserActivityHook : object {                /// <summary>        /// Default constructor - starts hooks automatically        /// </summary>        public UserActivityHook() {            Start();        }                ~UserActivityHook() {             Stop();        }         public event MouseEventHandler OnMouseActivity;        public event KeyEventHandler KeyDown;        public event KeyPressEventHandler KeyPress;        public event KeyEventHandler KeyUp;        public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);        static int hMouseHook = 0; //Declare mouse hook handle as int.        static int hKeyboardHook = 0; //Declare keyboard hook handle as int.        //values from Winuser.h in Microsoft SDK.        public const int WH_MOUSE_LL     = 14;    //mouse hook constant        public const int WH_KEYBOARD_LL = 13;    //keyboard hook constant            HookProc MouseHookProcedure; //Declare MouseHookProcedure as HookProc type.        HookProc KeyboardHookProcedure; //Declare KeyboardHookProcedure as HookProc type.                    //Declare wrapper managed POINT class.        [StructLayout(LayoutKind.Sequential)]        public class POINT         {            public int x;            public int y;        }        //Declare wrapper managed MouseHookStruct class.        [StructLayout(LayoutKind.Sequential)]        public class MouseHookStruct         {            public POINT pt;            public int hwnd;            public int wHitTestCode;            public int dwExtraInfo;        }        //Declare wrapper managed KeyboardHookStruct class.        [StructLayout(LayoutKind.Sequential)]        public class KeyboardHookStruct        {            public int vkCode;    //Specifies a virtual-key code. The code must be a value in the range 1 to 254.             public int scanCode; // Specifies a hardware scan code for the key.             public int flags;  // Specifies the extended-key flag, event-injected flag, context code, and transition-state flag.            public int time; // Specifies the time stamp for this message.            public int dwExtraInfo; // Specifies extra information associated with the message.         }        //Import for SetWindowsHookEx function.        //Use this function to install a hook.        [DllImport("user32.dll",CharSet=CharSet.Auto,            CallingConvention=CallingConvention.StdCall)]        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,             IntPtr hInstance, int threadId);        //Import for UnhookWindowsHookEx.        //Call this function to uninstall the hook.        [DllImport("user32.dll",CharSet=CharSet.Auto,             CallingConvention=CallingConvention.StdCall)]        public static extern bool UnhookWindowsHookEx(int idHook);                //Import for CallNextHookEx.        //Use this function to pass the hook information to next hook procedure in chain.        [DllImport("user32.dll",CharSet=CharSet.Auto,             CallingConvention=CallingConvention.StdCall)]        public static extern int CallNextHookEx(int idHook, int nCode,             Int32 wParam, IntPtr lParam);          public void Start()        {            // install Mouse hook             if(hMouseHook == 0)            {                // Create an instance of HookProc.                MouseHookProcedure = new HookProc(MouseHookProc);                hMouseHook = SetWindowsHookEx( WH_MOUSE_LL,                    MouseHookProcedure,                     Marshal.GetHINSTANCE(                        Assembly.GetExecutingAssembly().GetModules()[0]),                    0);                //If SetWindowsHookEx fails.                if(hMouseHook == 0 )    {                    Stop();                    throw new Exception("SetWindowsHookEx failed.");                }            }                        // install Keyboard hook             if(hKeyboardHook == 0)            {                KeyboardHookProcedure = new HookProc(KeyboardHookProc);                hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL,                    KeyboardHookProcedure,                     Marshal.GetHINSTANCE(                    Assembly.GetExecutingAssembly().GetModules()[0]),                    0);                //If SetWindowsHookEx fails.                if(hKeyboardHook == 0 )    {                    Stop();                    throw new Exception("SetWindowsHookEx ist failed.");                }            }        }        public void Stop()        {            bool retMouse =true;            bool retKeyboard = true;            if(hMouseHook != 0)            {                retMouse = UnhookWindowsHookEx(hMouseHook);                hMouseHook = 0;            }                         if(hKeyboardHook != 0)            {                retKeyboard = UnhookWindowsHookEx(hKeyboardHook);                hKeyboardHook = 0;            }                         //If UnhookWindowsHookEx fails.            if (!(retMouse && retKeyboard)) throw new Exception("UnhookWindowsHookEx failed.");        }          private const int WM_MOUSEMOVE = 0x200;          private const int WM_LBUTTONDOWN = 0x201;          private const int WM_RBUTTONDOWN = 0x204;          private const int WM_MBUTTONDOWN = 0x207;          private const int WM_LBUTTONUP = 0x202;          private const int WM_RBUTTONUP = 0x205;          private const int WM_MBUTTONUP = 0x208;          private const int WM_LBUTTONDBLCLK = 0x203;          private const int WM_RBUTTONDBLCLK = 0x206;        private const int WM_MBUTTONDBLCLK = 0x209;        private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam)        {            // if ok and someone listens to our events            if ((nCode >= 0) && (OnMouseActivity!=null)) {                                MouseButtons button=MouseButtons.None;                switch (wParam)                {                    case WM_LBUTTONDOWN:                     //case WM_LBUTTONUP:                     //case WM_LBUTTONDBLCLK:                         button=MouseButtons.Left;                         break;                    case WM_RBUTTONDOWN:                     //case WM_RBUTTONUP:                     //case WM_RBUTTONDBLCLK:                         button=MouseButtons.Right;                         break;                }                int clickCount=0;                if (button!=MouseButtons.None)                    if (wParam==WM_LBUTTONDBLCLK || wParam==WM_RBUTTONDBLCLK) clickCount=2;                    else clickCount=1;                                //Marshall the data from callback.                MouseHookStruct MyMouseHookStruct = (MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));                MouseEventArgs e=new MouseEventArgs(                                                    button,                                                     clickCount,                                                     MyMouseHookStruct.pt.x,                                                     MyMouseHookStruct.pt.y,                                                     0 );                OnMouseActivity(this, e);            }            return CallNextHookEx(hMouseHook, nCode, wParam, lParam);         }        //The ToAscii function translates the specified virtual-key code and keyboard state to the corresponding character or characters. The function translates the code using the input language and physical keyboard layout identified by the keyboard layout handle.        [DllImport("user32")]         public static extern int ToAscii(int uVirtKey, //[in] Specifies the virtual-key code to be translated.                                          int uScanCode, // [in] Specifies the hardware scan code of the key to be translated. The high-order bit of this value is set if the key is up (not pressed).                                          byte[] lpbKeyState, // [in] Pointer to a 256-byte array that contains the current keyboard state. Each element (byte) in the array contains the state of one key. If the high-order bit of a byte is set, the key is down (pressed). The low bit, if set, indicates that the key is toggled on. In this function, only the toggle bit of the CAPS LOCK key is relevant. The toggle state of the NUM LOCK and SCROLL LOCK keys is ignored.                                         byte[] lpwTransKey, // [out] Pointer to the buffer that receives the translated character or characters.                                          int fuState); // [in] Specifies whether a menu is active. This parameter must be 1 if a menu is active, or 0 otherwise.         //The GetKeyboardState function copies the status of the 256 virtual keys to the specified buffer.         [DllImport("user32")]         public static extern int GetKeyboardState(byte[] pbKeyState);        private const int WM_KEYDOWN         = 0x100;        private const int WM_KEYUP             = 0x101;        private const int WM_SYSKEYDOWN     = 0x104;        private const int WM_SYSKEYUP         = 0x105;        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)        {            // it was ok and someone listens to events            if ((nCode >= 0) && (KeyDown!=null || KeyUp!=null || KeyPress!=null))            {                KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));                // raise KeyDown                if ( KeyDown!=null && ( wParam ==WM_KEYDOWN || wParam==WM_SYSKEYDOWN ))                {                    Keys keyData=(Keys)MyKeyboardHookStruct.vkCode;                    KeyEventArgs e = new KeyEventArgs(keyData);                    KeyDown(this, e);                }                                // raise KeyPress                if ( KeyPress!=null &&  wParam ==WM_KEYDOWN )                {                    byte[] keyState = new byte[256];                    GetKeyboardState(keyState);                    byte[] inBuffer= new byte[2];                    if (ToAscii(MyKeyboardHookStruct.vkCode,                            MyKeyboardHookStruct.scanCode,                            keyState,                            inBuffer,                            MyKeyboardHookStruct.flags)==1)                             {                                KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]);                                KeyPress(this, e);                            }                }                                // raise KeyUp                if ( KeyUp!=null && ( wParam ==WM_KEYUP || wParam==WM_SYSKEYUP ))                {                    Keys keyData=(Keys)MyKeyboardHookStruct.vkCode;                    KeyEventArgs e = new KeyEventArgs(keyData);                    KeyUp(this, e);                }            }            return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);         }    }} Con il framework 1.1...

posted @ giovedì 3 novembre 2005 11:32 | Feedback (7) |

Datemi una settimana circa...prima release di HappySign

Durante il weekend ho migrato il mio freeware HappySign (HS) dal framework 1.1 al nuovo framework 2.0, usando gia' alcuni controllo nuovi di zecca (come - se ricordo bene - il MenuStrip). Le caratteristiche di base ci sono gia' tutte. Al posto di parlare di firme, ho preferito usare il termine decorazioni per firme. L'idea e' questa: voi impostate nel vostro mail-reader la firma classica, che riporta nome, cognome, indirizzo e-mail, URL del vostro blog e via dicendo. Poi usate il mio HS per decorare la firma, aggiungendo qualche frase che vi piace. Come dicevo, le caratteristiche base sono gia' (quasi tutte)...

posted @ mercoledì 2 novembre 2005 18:45 | Feedback (2) |

Il byte che cominciò i download di VS2005

27 Ottobre 2005, ore 18:45 UTCIn uno dei tanti Server Web Microsoft.... Il servizio IIS girava tranquillamente da qualche settimana. Ben bilanciato ed ottimizzato, IIS riceveva un'enorme quantità di bytes in ingresso, e una quantità ancora più grande era formata dai files che il servizio aveva restituito ai driver di rete per poter essere inviati al client. L'interno del server era tutto sommato piuttosto tranquillo, in questo momento: l'80% delle informazioni richieste erano già state tutte inserite nella cache di sistema. L'hard-disk, inserito in un sistema RAID, era fermo e quasi completamente inutilizzato. In uno dei tanti bus di sistema in RAM,...

posted @ martedì 1 novembre 2005 19:58 | Feedback (28) | Filed Under [ 010 .bytes. 010 ]

Non me lo ricordo, come si chiama? ClickOnce Deployment !!!

Mi sono improvvisamente ricordato di una certa tecnologia presente in Visual Studio 2005 che aveva fatto vedere - se ricordo bene - Corrado nella sua sessione all'ultimo SMAU. Mi stavo rivedendo il suo webcast per dare un'occhiata alle slide e per ascoltare quello che diceva per cercare di ricordarmi il nome. Ecco infatti che nella slide delle novità di Visual Basic 2005 compare una voce: ClickOnce Deployment. Data la parola chiave, ecco che tutto si fa più chiaro. Ho trovato questi articoli che spiegano come usare ClickOnce per distribuire un'applicazione e per mantenerla aggiornata. powered by IMHO 1.3

posted @ martedì 1 novembre 2005 10:12 | Feedback (1) |

Debuggare con Visual Studio 2005

All'epoca in cui programmavo con Visual Basic 6.0 provenivo da vecchi Microsoft Access 2.0 e dalle versioni più vecchie di VB. Ho sempre considerato l'IDE di Visual Basic 6.0 una manna dal cielo: l'Intellisense era semplicemente strepitoso e il tooltip che compare quando ci si sofferma su una variabile durante il debug era veramente utile, comodo e soprattutto produttivo. Tutto questo impallidisce di fronte a questo gioiello che risponda al nome di Visual Studio 2005. Avevo già provato la beta 2 in passato, ma avere la versione finale installata sul mio PC è gratificante.  Fare debug con VS2005 è strepitoso. Il tooltip...

posted @ martedì 1 novembre 2005 09:49 | Feedback (2) |

Powered by:
Powered By Subtext Powered By ASP.NET