25 nov 2009

Bad English

Tra le tante vacanze che ho trascorso in Scozia, quella del 2004 resta una delle più belle ed intense, oltre che uno di quelle in cui mi sono divertito di più!

Potrei ricordarla grazie agli scatti di Ernesto, che anche se non eravamo gnocchi come le sue modelle seminude si è prodigato con gioia nel realizzare un meraviglioso album di ricordi fotografici.

O per il George, antico e caratteristico hotel di Invereray, con ben due bar al pian terreno, centinaia di varietà di whisky, e sette caminetti.

Per il kebabbaro di Fort Williams, che pur di fare un piacere a Loris siamo finiti al cinese, più pacchiano e di certo più velenoso ancora.

Per la verde Isle Of Skye con la vecchia finta decorativa di fianco al caminetto, per esserci persi nel cuore della notte nel bel mezzo del nulla (Loch Torridon = nulla), e per la festa a Garve degli anziani dai molti tatuaggi.

O per tutti i marciapiedi presi in pieno con la anteriore destra. E quando non era il marciapiede, era il cambio della Vauxhall Zafìra: prima, seconda, e terz... oops oh no, di nuovo la prima!

Grazie al Gary del Bar Bazza di Inverness per averci invitato al party, facendoci entrare dalla porta sul retro, oltre ad un ringraziamento sentito alla polizia per averci riportato Achille smarritosi, tra le strade impregnate di nebbia e fumi al profumo di torba, lungo la sponda errata del fiume Ness.

E la festa nella hall di un albergo a Pitlochry, dove gli scozzesi volevano tagliarci la testa? E le vecchiacce che ho inzuppato involontariamente con una pozzanghera?

Niente Aberdeen o Dundee quell'anno, poco Glasgow e poco river Clyde. Ma ci siamo immersi per un paio di giorni nella magica Edimburgh. Tra tutte quante, resta la mia città preferita. E non solo per la giovane dai capelli rossi che prendeva il sole lungo la riva del Firth Of Forth, capezzoli al vento.

Potrei ricordare il viaggio del 2004 per tutto questo, ma poiché questo è un blog culturale, preferisco non divagare e concentrarmi su di un po' di cultura!

Bad English 1
Finalmente a Biggar troviamo un ristorante serio. Niente haggis, fish and chips, thai o cineserie varie.
Finalmente Loris può ordinare un buon main course di quelli da uomini veri: un'ottima Fisherman's Pie con una buona pinta di Real Ale.

Poteva la cameriera fare finta di nulla? Lei ci stava provando per davvero.
Dovevamo io e Giovanni far notare che forse c'era qualche cosa di strano? No di certo, non volevamo infierire!
Poteva Tom starsene zitto?

Tom: "Loris, are you sure? Fisherman's pee? Oh... that's another story!"

Bad English 2
Capisco gli spaghetti alla bolognese: andare in Scozia per ordinare un piatto di spaghetti è certamente deprecabile, ma capisco.

I miei dubbi riguardano invece gli spaghetti alla milanese. Che siano spaghetti allo zafferano? Spaghetti col risotto? Spaghetti con la cotoletta?
Sono uno di quei nomi italiani messi lì così, tanto per gabbare qualche pence in più agli ignari avventori scozzesi, oppure esistono per davvero anche in Italia?
Questo è ciò che non capisco!

Nonostante questo mistero, il napoletano di South Bridge ad Edimbourgh era un mago del Fish and Chips.
Il suo Take Away Restaurant era il nostro faro in mezzo al buio per quando la notte si brancolava ubriachi uscendo dal Liquid Room. O ubriachi uscendo dall'Espionage.
O dopo quella volta che siamo tornati ubriachi dal Frankenstein Pub più Espionage più Liquid Room più Finnegans Wake, oltre a svariati pub di Market Street, una prosciutto funghi e ananas, diverse extra cold pints all'Hard Rock Cafè, e qualche passeggiata lungo le meravigliose Princess e Victoria Streets. Non necessariamente in questo preciso ordine.
But that's another story, ma friend.

Quel pomeriggio eravamo ancora sobri e sinceri, mentre attendevamo con pazienza la friggitura nel grasso sintetico di pecora del nostro merluzzo con le patatine.
Una giovane scozzese, bionda oltre che carina più che mai, lega il suo cane ad un lampione e poi entra, guarda caso, proprio nel nostro take away.

Lino, viscido come una lumaca, riesce a vincere la massima onorificenza come corteggiatore nell'anno, ed ancora oggi è il detentore passato presente futuro di ogni titolo a riguardo.
Vero che di due di picche ne ho visti tanti (devo tristemente ammettere di essere un professionista in ciò) ma qui si tratta di un professionista più professionale ancora, da cui c'è solo da imparare.

Pochi secondi, ed è già un disastro. Lei esce dal locale, trascina via il suo cane, e sparisce nel mezzo della foschia lungo North Bridge. Spero ancora oggi che non si sia buttata giù di sotto.

Lino, detto Mr. Wood, si interroga: "Ma si è arrabbiata? Perché si è arrabbiata? Era una battuta simpatica, niente di che! Una cosa così, tanto per rompere il ghiaccio."

ehm... d'accordo...

"Le solo detto che il suo cane era fuggito via, così per scherzo!"

ehm... banale, ma efficace!

"Cosa ho detto di preciso? Le ho detto..."

ahia!

"YOU DOG GO HOME!"

Sorry Mr. Wood: forse BITCH era la parola che stavi cercando!

23 nov 2009

Copia dinamica su memoria USB

Recentemente ho avuto l'esigenza di effettuare in automatico il backup di alcuni dati su di una memoria USB.

Sembrerebbe semplicissimo, peccato però che il nome dell'unità USB non sia fisso, ma possa cambiare a seconda dell'ordine con cui eventuali apparati USB sono collegati al sistema. Con un po' di VBS si risolve però tutto:

On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives

Unita = ""

For Each objDrive in colDrives
  If objDrive.isReady Then
    If objDrive.DriveType = 1 Then
      Unita = objDrive.DriveLetter
    End If
  End If
Next

If Unita = "" Then
  Wscript.Echo "Memoria USB non rilevata! Impossibile Salvare"
  Wscript.Quit(1)
End If

Wscript.Echo "Salvataggio in corso in " & Unita & ":\Backup\"

objFSO.CreateFolder(Unita & ":\Backup\")
Err.Clear

objFSO.CopyFile "C:\Percorso\Origine.dat", Unita & ":\Backup\VaccinatiBAK.dat", True

If (Err.Number > 0) Then
  Wscript.Echo "Errore nella copia di backup: " & Err.Description
Else
  Wscript.Echo "Copia OK"
End If

objDrive.DriveType vale 1 per le unità di tipo Flash. Ricercando soltanto le unità con objDrive.isReady impostato a vero si escludono eventuali unità quali lettori di card flash, nel caso in cui una flash card non sia inserita, ovviamente.

In casi particolari, dove si utilizzano molte unità USB flash, non ci sono molte possibilità di indovinare l'unità giusta: allora non ci resta che assegnare un nome al disco USB ed effettuare un filtro sul campo objDrive.VolumeName.

9 nov 2009

Aprire Explorer o Finder dalla Console

In Windows sono abituato a lavorare frequentemente con la console, e spesso mi capita di dover aprire una finestra di Explorer sul percorso corrente. In questo caso, il comando start è indispensabile:
C:\Users\fede\AppData>start .
Per fare l'operazione inversa, ovvero aprire una console che punta al percorso di un file o di una cartella, si può utilizzare l'utility "Open Command Window Here" delle utility PowerToys per Windows XP, oppure con il file di registro cmdhere.reg (così si impara qualcosa su come funziona la chiave HKEY_CLASSES_ROOT oppure la HKEY_CURRENT_USER\Software\Classes).

Oppure con l'ottimo Total Commander è ancora più semplice!

Il comando start è utile anche per aprire un file in automatico con il programma associato:
C:\Users\fede\Documents\Web>start index.html
Se invece voglio aprire un file con un programma specifico devo assicurarmi che l'eseguibile sia presente nel PATH:
C:\Users\fede\Documents\Web>notepad++ index.html
tutto molto semplice. Ma per fare le stesse cose nel mondo Mac?

Il seguente comando apre una finestra del Finder nel percorso corrente:
macbook-pro-di-federico:~ federico$ open .
mentre per fare l'inverso, si può installare il programma OpenTerminal per Mac.

Per aprire un programma dalla console posso utilizzare il seguente comando:
macbook-pro-di-federico:~ federico$ open /Applications/TextEdit.app

15 ott 2009

Installare l'Agente di LANDesk da remoto

Per distribuire l'agente di LANDesk esistono numerose strategie che si possono trovare nel documento Best Practices for Agent Deployment.

Spesso mi capita di dover installare velocemente un agente su di un PC remoto, ed ho quindi predisposto il seguente script batch:

@echo off
echo Installazione remota Agent LANDesk

set /P nomepc=Nome computer^>
set /P passwd=Password^>

psexec \\%nomepc% -u Administrator -p %passwd% cmd /c (net use r: \\serverLD\ldlogon /user:serverLD\administrator password ^& r:\wscfg32.exe /noui /f /noreboot ^& net use r: /delete)

pause
Questo script richiede il nome del computer remoto (oppure l'indirizzo IP) e la password dell'amministratore locale! Attenzione: questa password verrà visualizzata in chiaro!

Questo script lancia sul computer remoto dei comandi multipli che installano l'agente di LANDesk tramite l'utility PSEXEC.

14 ott 2009

Ambiguità di alcune parole inglesi

Ambiguità di alcune parole inglesi.

Trecentottanta esempi di errori di traduzione, difficoltà, incomprensioni, sciocchezze e bizzarrie.

12 ott 2009

Bloccare gli aggiornamenti software

Disabilitare gli aggiornamenti del sistema operativo oppure del software applicativo è in genere una pratica da evitare: un sistema aggiornato è più stabile, e molto più sicuro!

Ad oggi le poche aziende che non hanno attivato un sistema di aggiornamento automatico per il sistema operativo Windows ne pagano le conseguenze (vedi ad esempio Conficker). Ed è curioso notare che, poiché un sistema Windows aggiornato e configurato adeguatamente offre sistemi di sicurezza avanzati e difficili da aggirare, si sta assistendo ad un cambio di tendenza e l'obiettivo principale degli attacchi del malware più recente si sta spostando dal sistema operativo agli applicativi utente installati sopra.

Applicazioni che girano in modalità utente quali Flash Player, Silverlight, Acrobat Reader, Internet Explorer, Firefox e relativi plugin, sono tutte ottime candidate.... i bug non mancano mai, e se ci riflettiamo un poco perché attaccare tutto il sistema? Dati sensibili, password e quant'altro si trovano proprio dal lato utente!

Naturalmente verso questo tipo di attacchi il famigerato UAC di Windows Vista e Windows 7 spesso non può fare molto... così come può fare ben poco la richiesta di password dei vari Linux, o MacOS: il sistema è protetto, e va bene, ma i dati degli utenti forse non troppo!

Perché quindi bloccare gli aggiornamenti del software applicativo?

Ci devono essere delle ottime ragioni, ed una di queste è che gli aggiornamenti spesso e volentieri sono progettati per funzionare su computer domestici, in cui l'utente ha accesso ad Internet completo ed accede al desktop con amministrativi.

In un'azienda non tutti i PC hanno accesso ad Internet, quelli che vi accedono probabilmente dispongono di un accesso filtrato, ed anche se riescono a scaricare gli aggiornamenti, propabilmente non riescono ad installarli poiché l'utente non dispone di diritti per aggiornare il software installato.

Normalmente il software applicativo presente nei computer aziendali non è lo stesso software che può scaricare l'utente finale: in genere è preferibile distribuire versioni amministrative o aziendali oppure versioni ripacchettizzate (es. Firefox, Flash Player, e Acrobat Reader si trovano anche in versione MSI, e nel caso in cui non si trovino, basta cercare per esempio sul sito www.appdeploy.com per trovare tutto quello di cui c'è bisogno).

E normalmente il software applicativo viene configurato per non aggiornarsi automaticamente: gli aggiornamenti sono disabilitati, perché è inutile disporre di decine di updater uno per ogni servizio, quando invece sono disponibili applicazioni apposite per la distribuzione di tutti gli aggiornamenti!

Cosa fare per tutto il software che invece è stato scaricato da una versione "tradizionale" e quindi con gli aggiornamenti attivati?

In genere le informazioni di configurazione sono sparsi in qualche chiave di registro, naturalmente nella HKLM. Abbiamo bisogno quindi di un buon script WSH da eseguire all'avvio della macchina da lanciare con privilegi amministrativi.

Creiamo una nuova policy, e su Computer Configuration - Windows Settings - Scripts aggiungiamo uno script di avvio simile al seguente:

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

On Error Resume Next

' disabilita aggiornamenti Adobe Acrobat

WshShell.RegWrite "HKLM\Software\Policies\Adobe\Acrobat Reader\8.0\FeatureLockdown\bUpdater", 0, "REG_DWORD"
WshShell.RegWrite "HKLM\SOFTWARE\Policies\Adobe\Acrobat Reader\9.0\FeatureLockdown\bUpdater", 0, "REG_DWORD"
WshShell.RegWrite "HKLM\SOFTWARE\Adobe\Acrobat Reader\9.0\AdobeViewer\EULA", 1, "REG_DWORD"
WshShell.RegWrite "HKLM\SOFTWARE\Adobe\Acrobat Reader\9.0\AdobeViewer\Launched", 1, "REG_DWORD"

' disabilita aggiornamenti Java

WshShell.RegWrite "HKLM\SOFTWARE\JavaSoft\Java Update\Policy\EnableJavaUpdate",  0, "REG_DWORD"
WshShell.RegWrite "HKLM\SOFTWARE\JavaSoft\Java Update\Policy\EnableAutoUpdateCheck", 0, "REG_DWORD"

Wscript.Quit

Questi sono i parametri che ho trovato in giro. Ovviamente possiamo personalizzare questo script a piacimento per supportare altri programmi oppure altre versioni. Naturalmente cerchiamo di farne buon uso!

Llo stesso identico procedimento può essere utilizzato per modificare all'avvio qualsiasi chiave di sistema oppure, se creiamo lo script lato utente, possiamo impostare le chiavi in HKEY_CURRENT_USER.

Molto utile quindi non solo per gli aggiornamenti, ma anche per poter preconfigurare ad ogni avvio una buona parte del software lato desktop.

7 ott 2009

Chi è l'utente .Default?

Sfogliando la chiave di registro HKEY_USERS possiamo osservare che sono presenti tutte le chiavi HKEY_CURRENT_USER, organizzate per SID, di tutti gli utenti attualmente connessi al sistema.

La HKEY_CURRENT_USER di ogni utente si trova nel file NTUSER.DAT all'interno di ogni profilo. Quando un utente effettua l'accesso al computer, il sistema operativo carica il file NTUSER.DAT nella HKEY_USERS assieme a tutti gli altri utenti, ed ogni utente nella HKEY_CURRENT_USER vede soltanto le sue chiavi.

Oltre ai SID degli utenti, possiamo osservare che è presente un utente .Default. Ma chi è l'utente .Default?

Naturalmente è ragionevole pensare che l'utente .Default sia utilizzato come profilo template per i nuovi utenti: modificando le impostazioni dell'utente .Default è logico aspettarsi che tutti i nuovi utenti creati nel sistema ereditino queste impostazioni.

In effetti la scelta del nome .Default è stata infelice, e le cose vanno diversamente. Le chiavi di registro dell'utente .Default appartengono all'utente Local System, mentre il template di default per i nuovi utenti di sistema non è generalmente caricato in memoria e si trova nel percorso C:\Users\Default\NTUSER.DAT per Vista o Seven, oppure in C:\Documents and Settings\Default User\NTUSER.DAT per XP.

Per modificare le impostazioni di default è possibile caricare manualmente questo Hive in memoria, modificarlo e salvarlo, anche se questo metodo non è ufficialmente supportato.

Conviene utilizzare il buon SysPrep... oppure ho risolto il problema con un meraviglioso script WSH all'avvio.

Per approfondire: The .Default user is not the default user.