Friday, 17 July 2009

La Toscana non è laggiù.


Visto che il post precedente sembra interessare diversi extracomunitari, perchè non proporlo anche in Italiano ? Nesià Tovà (per la vera Toscana, naturalmente) a tutti.

Su Usenet (ah, che miniera di notizie interessanti) è stato recentemente menzionato un curioso annuncio pubblicitario della 'pro loco' della Regione del Binyamin nei Territori Occupati. Byniamin deriva dal nome della tribù di Beniamino, che secondo il racconto biblico abitava nella zona - che è al di fuori dei confini di Israele, quelli stabiliti dall'ONU almeno.
Il testo in piccolo è abbastanza convenzionale, degustazione di vini, escursioni, come arrivare, eccetera. Quello che è sorprendente è il titolo e lo slogan. "La Toscana è qui" - "Non c'è bisogno di andare in Italia, il Binyamin è a portata di mano", si legge.

Ora, sono nato e cresciuto in Toscana, ci ho sempre vissuto e lavorato. Mio padre è nato in un piccolo borgo a nord di Firenze. La mia famiglia ha ancora un piccolo appezzamento di terra nel Chianti. Posso assicurare che la Toscana è qui, non è nel Binyamin. Un po' di foto di quel posto si possono visionare sullo stesso sito http://www.binyamin.org.il - avranno senzaltro dei vini ottimi, dei posti interessanti da vedere. Senza dubbio è più vicino ad Israele dell'Italia (per un israeliano, per un palestinese dipende dalla metrica utilizzata temo).

Ma non è la Toscana. Se qualche italkim mi legge dalla riva orientale del Mediterraneo mi dispiace, ma qui l'erba è più verde che nel Binyamin.

E nonostante qui i secoli passati siano stati tuttaltro che una pacifica siesta, in Toscana da più di un millennio nessun gruppo etnico religioso cerca di occupare forzatamente la terra di un altro gruppo. Guerre, dominatori imposti dallo straniero, quello sì ma la Toscana è sempre stata la terra dei Toscani. Credo che l'ultima volta che è successo, Paolo Diacono doveva ancora scrivere la Historia Langobardorum.




Way beyond Chutzpah


A very funny guy from London (allegedly not in London, at the moment) mentioned recently an amusing advertising for the Matte Binyamin Regional Council in the West Bank:
"Tuscany is here" - "There's no need to travel to Italy. Binyamin is at hand", reads the ad.

Now, you see - I was born and raised in Tuscany, and I have always lived and worked in Tuscany, Italy. My father was born in a small village north of Florence. We still own a small plot of land in the Chianti. I can assure you, Tuscany is not there, in the Binyamin region. I've seen the pictures on http://www.binyamin.org.il - I'm pretty sure that they have decent wines to be tasted , there are probably interesting places to see, it is without a doubt closer to Israel than Italy (for an Israeli at least).

But it's no Tuscany. I am sorry if some guy from the east coast of the Mediterranean is reading this (some certainly do) but our grass is most definitely greener than yours.
The last 15-20 centuries have not been without a little turbulence here, in Tuscany, for sure, but (it's greener, much greener) there has not been a single case of a religious-ethnic group systematically entering and exploiting another ethnic group's territory, at least since the time of the Longobards.

Wednesday, 15 July 2009

"una piccola finestra mobile, sostanzialmente impercettibile per le persone"


Les jeux son faits, andremo in pensione a 75/80 anni... quando i governi (di dx e sx) fanno questi annunci così alla chetichella, balnearmente, significa che siamo veramente fottuti.

Breve guida alla creazione di servizi windows con Visual Studio

Questo post è una rielaborazione di una guida che ho preparato per dei colleghi: si tratta di indicazioni sulla creazione di servizi Windows usando Visual Studio e il framework .NET (2.0 e superiori). Niente di speciale rispetto a quanto già disponibile in rete, solo che è in italiano e risponde perlomeno pienamente alle ...mie esigenze.

Creazione di uno scheletro di servizio

Lanciare VS2005/2008 e creare una nuova soluzione C# o VBNET
di tipo “Windows service”

- viene creato uno scheletro di classe che eredita da ServiceBase

- il metodo OnStop viene chiamato allo stop del servizi

- il metodo OnStart all’avvio

- per cambiare nome al servizio modificare i vari riferimenti al namespace e ai nomi delle classi

- attenzione anche al codice nomeservizio.designer.cs per il nome passato poi all’eventuale event logger; il nome del servizio è definito in più punti.

Così com’è il servizio non è installabile. Andare in design mode sulla classe derivata da ServiceBase e fare tasto destro e sceglire “add installer”.

Viene aggiunta al progetto un’altra classe che deriva dall’oggetto Installer ed ha una direttiva di compilazione specifica, con due componenti serviceprocessinstaller e serviceinstaller. Modificarne le proprietà per cambiare nome, nome esteso, e account di default per l’installazione alservizio (ricordo che i servizi di windows hanno un nome sintetico usato ad esempio dai comand NET START o sc da prompt e un nome esteso visibile ad esempio in pannello di controllo servizi; l’account è l’utente con i permessi del quale è eseguito il servizio)

A questo punto si può installare il servizio in windows con
l’utility installutil.exe inserita nel dotnet framework (se non è nel path andare in c:\windows\Microsoft.net\Framework\ per trovarla.

Installutil.exe
nomeseguibile.exe
per installare

Installutil.exe
/u nomesegubile.exe
per disinstallare


E’ anche possibile aggiungere un progetto di installazione alla soluzione (solution = gruppo di progetti in VS.NET) ma è più laborioso, installutil inoltre è più adatto all’attività di sviluppo.

Debugging

Per quanto riguarda il debug: non si può debuggare direttamente un servizio come un normale programma. E’ necessario compilare, INSTALLARE, poi scegliere l’opzione ‘Attach process’ dal debugger di Visual Studio per agganciarsi al processo del servizio in esecuzione. Si tratta di settare uno o più breakpoint: una volta che il codice del servizio installato arriva, pur senza essere stato lanciato dal debugger, al punto del breakpoint, inizia l’esecuzione controllata. Dopo ogni modifica al sorgente bisogna disinstallare, reinstallare, far ripartire il servizio e rifare l’attach del processo. Per modifiche non sostanziali sembra possibile evitare di disinstallare e
reinstallare il servizio con InstallUtil. E’ comunque consigliabile testare prima il grosso del codice in un’applicazione convenzionale separata.

Comandi utili per controllare i servizi da prompt:

NET STOP nomesintetico

NET START nomesintetico

Sc stop nomesintetico

Sc start nomesintetico

Sc query nomesintetico

Sc query

L’ultimo comando lista tutti i servizi in esecuzione, il penultimo da informazioni solo sul servizio specificato.Il comando sc.exe è più recente del comando NET e consente di visualizzare più informazioni sul servizio, oltre a disporre di molte altre opzioni.

Note sulla programmazione dei servizi (in dotnet)

Non usare time di tipo System.Windows.Forms.Timer, ma timer di tipo System.Timer (sulla copia di Visual Studio che uso io questo tipo di timer non è presente di default sulla palette Components, però si può aggiungere facendo tasto destro Add.. sul titolo della palette stessa). I primi compilano senza problemi, ma non fanno mai scattare l’evento. Esistono anche timer di tipo System.Threading.Timer che non si possono aggiungere a design time e presentano altre problematiche.

All’avvio e all’arresto di un servizio viene generato automaticamente un evento in Visualizzatore Eventi/Applicazioni con il nome sintetico con cui è stato creato il servizio stesso. Anche eventuali eccezioni a runtime vengono loggate nella medesima destinazione. Per scrivere nel log
usare i normali componenti System.Diagnostics.EventLog settando la proprietà Log ad ‘Application’ e la proprietà Source al nome del servizio.

Per fermare il servizio dall’interno (p.es. per un errore trappato) usare this.Stop() dalla classe principale (equivale a chiamare ServiceBase.Stop() ). Verrà ovviamente eseguito il codice dell’evento OnStop

Interoperabilità col mondo COM/VB6

E’ possibile tranquillamente usare ADO (basta un riferimento a Microsoft ADO 2.x ) da un servizio dotnet. Viene creata in questo modo una dll chiamata Interop.ado.dll che deve sempre accompagnare l’eseguibile del servizio stesso.

E’ possibile usare dll visual basic da servizi dotnet sia in early che in late binding, non dovrebbero però interagire col destkop, così come del resto il servizio stesso.

I servizi in dotnet possono tranquillamente essere multithreaded – nella classe generata da VS esiste già del codice relativo da commentare, questo però è da evitare se si chiamano dll VB6/ActiveX (per il tipo di modello di threading usato da queste ultime le variabili globali – le c.d. variabili di modulo) rimangono in comune tra tutte le instanziazioni della dll stesa.

I servizi dotnet supportano la registration free COM, ovvero i file .manifest per gestire dll activex localmente, senza registrazione.


Friday, 10 July 2009

How to check for lower or upper case case in Transact-SQL

A colleague of mine needs to extract data from a table where one field has lower case characters (any lower case charcater). Logically this would be the obvious solution...

SELECT my_field FROM my_table where myfield <> UPPER(my_field)

But normally with T-SQL it never yelds results becasuse the default collation is case insensitive. But one can use the COLLATE keyword and use a suitable case sensitive collation order...

SELECT my_field FROM my_table where myfield <> UPPER(my_field) COLLATE Latin1_General_CS_AI

Use this to list the available collation tags..

SELECT * FROM fn_helpcollations()

Thursday, 9 July 2009

A simple WSH script to simulate ALT-TAB continuously


Set WshShell = WScript.CreateObject("WScript.Shell")
While true
WScript.Sleep 4000 ' 4000 ms = 4 seconds
WshShell.SendKeys "%{ESC}" ' "%{TAB} doesn't work well

Wend

In a Usenet newsgroup I've been asked to simulate the ALT-TAB (switching active windows) behaviour in Windows, without installing new software. This simple Vbs\WSH script (save as myscript.vbs and run with cscript.exe or wscript.exe accomplishes the task. I actually simulate the ALT-ESC behaviour instead of ALT-TAB (it's the %{ESC} thing) which doesn't seem to run right on WSH - ALT-ESC is the same, it's just in order of opening.

Also check out http://www.autohotkey.com/ - a free utility I've found very useful in the past.



Thursday, 2 July 2009

ALn 668 3160 - Sulle tracce del vero responsabile del disastro di Viareggio

Locale di Guida - VIETATO L'ACCESSO
L'altra sera sono stato tra i primi a venire a conoscenza tramite Internet del disastro ferroviario di Viareggio . Per un po' in mancaza di giornalisti sonnacchiosi le prime immagine riportate sono state quelle uploadate su youtube da privati cittadini. In questi giorni si dipanano le solite polemiche, i soliti scaricabarile, le solite geremiadi sullo stato delle nostre ferrovie, le immancabili invettive contro i relativi colpevoli.

Questa mattina recandomi in Valdelsa mi sono trovato - al posto del Minuetto che effettua di solito la corsa a quell'ora- una Automotrice leggera a nafta modello 668. Costruite dalla Fiat in diverse centinaia di esemplari queste littorine continuano a coprire buona parte del traffico locale italiano, pur con diversi decenni di vita sulle spalle. Le 668 su cui sono stato sono ancora relativamente dignitose: funziona quasi tutto, gli interni sono rinnovati, vengono ancora pulite.

Come (pare) dicesse un noto intellettuale francese però, le diable est dans les détails. Come si può essere talmente lassisti da scrivere con un pennarello indelebile 'locale di guida - vietato l'accesso' ? Con una calligrafia peggiore di quella di un piccolo vandalo di terz'ordine, e invece di spendere una manciata di minuti per un cartellino, anche artigianale ?

Le tragicommedie italiane nascono qui, al posto di guida della Automotrice leggera a nafta 668 3160.