Errore 0x52F in Microsoft Update

Durante l’utilizzo di Microsoft Update, il nuovo strumento per eseguire gli aggiornamenti di vari prodotti Microsoft, può succedere che gli aggiornamenti che riguardano Office 2003 non vengano installati, mentre quelli di Windows si concludano correttamente.

Osservando la cronologia degli aggiornamenti, è sempre riportato l’errore 0x52F per tutti gli aggiornamenti di Office 2003 che si è tentato di installare.

Il problema è causato dalla copia locale dell’installazione (LIS – Local Installation Source) che viene appositamente lasciata dal programma di setup di Office per consentire la riparazione e la modifica dell’installazione senza bisogno del CD o del percorso di installazione originale.

LIS consente a Microsoft Update di scaricare solo i file strettamente necessari, contenendo la dimensione del download. Tuttavia se LIS è danneggiata o non più disponibile, mancheranno dei componenti indispensabili senza i quali l’aggiornamento fallisce.

Per risolvere il problema è necessario disabilitare LIS e scaricare nuovamente gli aggiornamenti da Microsoft Update (che ora dovrebbero essere di dimensione maggiore). Microsoft mette a disposizione un tool che cancella e disabilita LIS. Probabilmente al primo tentativo di aggiornamento si otterrà nuovamente l’errore, in quanto Microsoft Update potrebbe conservare ancora in cache i file che richiedono LIS. In questo caso è sufficiente riavviare e scaricare nuovamente gli aggiornamenti.

Debugging con la funzione dump e la console di Mozilla Firefox

Il sistema più semplice e diffuso per effettuare il debug di una applicazione JavaScript, è quello di piazzare un alert nel mezzo del codice sorgente, al fine di controllare il contenuto di alcune variabili.

alert("Hello Firefox");

Questo approccio, sicuramente immediato, purtroppo non può essere utilizzato in tutte le situazioni. Il classico esempio sono le richieste XMLHttpRequest negli script: la comparsa della finestra pop-up interrompe lo script finché non si preme il pulsante OK, e tutti gli eventi che occorrono nel frattempo – quali readyStateChange – non vengono gestiti, causando effetti imprevisti.

Per ottenere un monitoraggio molto più attendibile, si può utilizzare la console di Firefox, una caratteristica non molto conosciuta del browser di casa Mozilla, che richiede però alcuni interventi per essere utilizzata.

Avvio della console di Firefox

Innanzitutto la console di Firefox non va assolutamente confusa con la console degli errori, già abilitata di default in tutte le installazioni, ed accessibile attraverso il menù Strumenti. Si tratta di una vera e propria console, molto simile ad un terminale, che può essere usata anche per interagire con le sessioni aperte ed inviare comandi al browser.

Console di Firefox

Per avviare la console di Firefox, è necessario controllare che tutte le sessioni correnti siano chiuse, quindi riavviare il browser con il parametro -console. In Windows, si può utilizzare il prompt dei comandi oppure la finestra “Esegui” del menu start, e digitare il comando.

"%programfiles%\Mozilla Firefox\firefox.exe" -console

Se la console non dovesse aprirsi, controllate che il processo di Firefox non sia ancora in esecuzione (in Windows tramite Task Manager) ed eventualmente forzatene la chiusura. Per il futuro, per facilitare l’avvio della console, consiglio di creare un collegamento sul desktop.

Abilitazione della funzione window.dump

Per scrivere nella console si utilizza la funzione dump, che di default non è abilitata. Nella barra degli indirizzi è necessario accedere ad about:config ed aggiungere un nuovo valore booleano oppure modificare il file user.js nel proprio profilo.

browser.dom.window.dump.enabled = true

Una volta effettuata la modifica alla configurazione, è necessario riavviare nuovamente Firefox affinché abbia effetto.

Utilizzo della funzione window.dump

La sintassi è molto semplice ed è molto simile agli alert.

dump("Hello Firefox\n");

Come si può notare, è stato usato un carattere newline (capo riga) alla fine della stringa. Consiglio di aggiungerlo sempre, per rendere maggiormente leggibili i log sullo schermo della console.

Installare WP-Cache su Windows e IIS

WP-Cache è un ottimo plug-in per velocizzare WordPress, effettuando la cache delle pagine già servite in precedenza. Purtroppo non è ben progettato per IIS: dopo averlo installato, la pagina di amministrazione risulterà bianca, quando invece dovrebbe auto-configurarsi e mostrare delle opzioni.

Per renderlo funzionante su Windows ed in particolare IIS, è necessario effettuare alcune modifiche ai sorgenti e successivamente procedere alla configurazione manuale.

Modifiche ai sorgenti

Nel file /wp-content/plugins/wp-cache/wp-cache.php, dalla riga 491, la funzione wp_cache_check_link utilizza dei link simbolici.

function wp_cache_check_link() {
global $wp_cache_link, $wp_cache_file;

if ( basename(@readlink($wp_cache_link)) != basename($wp_cache_file)) {
@unlink($wp_cache_link);
if (!@symlink ($wp_cache_file, $wp_cache_link)) {
echo "<code>advanced-cache.php</code> link does not exist<br />";
echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
return false;
}
}
return true;
}

I link simbolici non sono implementati in Windows, e vanno quindi rimosse le funzioni symlink e readlink. Consiglio di effettuare un semplice controllo sull’esistenza del file advanced-cache.php.

function wp_cache_check_link() {
global $wp_cache_link, $wp_cache_file;

if(!file_exists($wp_cache_link))
{
echo "<code>advanced-cache.php</code> link does not exist<br />";
echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
return false;
}
return true;
}

Sempre nello stesso file, si utilizza la costante __FILE__

add_options_page('WP-Cache Manager', 'WP-Cache', 5, __FILE__, 'wp_cache_manager');

Questo può causare alcuni problemi con le barre rovesce dei percorsi, per cui consiglio di fornire solo il nome del file, dato che WordPress è in grado di ricostruire comunque il percorso corretto del plug-in.

add_options_page('WP-Cache Manager', 'WP-Cache', 5, basename(__FILE__), 'wp_cache_manager');

Nel file /wp-content/plugins/wp-cache/wp-cache-phase1.php, alla riga 23, si fa uso della variabile $_SERVER['REQUEST_URI'] che purtroppo in Windows contiene solo parte del permalink.

$key = md5($_SERVER['SERVER_NAME'].preg_replace('/#.*$/', '', $_SERVER['REQUEST_URI']).wp_cache_get_cookies_values());

Il valore corretto lo otteniamo concatenando $_SERVER['SCRIPT_NAME'] e $_SERVER['PATH_INFO']

$key = md5($_SERVER['SERVER_NAME'].preg_replace('/#.*$/', '', $_SERVER['SCRIPT_NAME'].$_SERVER['PATH_INFO']).wp_cache_get_cookies_values());

Per lo stesso motivo è da sistemare il file /wp-content/plugins/wp-cache/wp-cache.php, sostituendo tutte le occorrenze di $_SERVER['REQUEST_URI'].

echo '

';

In questo caso utilizziamo una soluzione standard, usata anche in altri plug-in, per indicare la pagina corrente.

echo '

';

L’operazione deve essere ripetuta su tutto il file, alle righe 253, 272, 305, 329, 351, 556, 590, 605 e 613.

Configurazione manuale

Dopo aver eseguito le modifiche ai sorgenti, è possibile procedere alla configurazione del plug-in

  • Copiare rinominandolo il file /wp-content/plugins/wp-cache/wp-cache-phase1.php in /wp-content/advanced-cache.php
  • Creare la cartella /wp-content/plugins/cache
  • Concedere i diritti di scrittura a IIS alla cartella /wp-content. Dopo la configurazione, sono sufficienti i permessi per la cartella /wp-content/plugins/cache e /wp-content/plugins/wp-cache ed il file /wp-content/wp-cache-config.php.
  • Modificare il file wp-config.php aggiungendo una costante
    define('WP_CACHE', true);

A questo punto, per far entrare in funzione il plug-in, non resta che accedere alla pagina di amministrazione, dove dovrebbero essere comparse tutte le opzioni di configurazione, ed attivare la cache con l’apposito pulsante.

Fonti di riferimento

Rinominare gli utenti in Windows XP Home Edition

In Windows XP Home Edition è particolarmente ostico rinominare un account utente, in quanto utilizzando la funzione di rinomina in “Account utente” del pannello di controllo in realtà si cambia solo il valore il nome completo (Full Name). Inoltre non è presente lo snap-in “Utenti e gruppi” (lusrmgr.msc), presente nella versione Professional, che consente di amministrare tutti gli utenti. Continue reading

Accedere come Administrator in Windows XP

In Windows XP è stata introdotta una nuova schermata iniziale di accesso, dove vengono mostrati gli account presenti sul computer e dove viene richiesta l’eventuale password.

Schermata iniziale di Windows XP

In tale schermata viene sempre nascosto l’utente Administrator, a meno che Windows sia in esecuzione in modalità provvisoria oppure non esistano altri utenti con privilegi di amministratore (membri del gruppo Administrators).

In caso di emergenza, può essere necessario accedere temporaneamente con tale utente che, oltre ai normali diritti di amministratore, possiede ulteriori privilegi.

  • Tenere premuti i tasti CTRL e ALT
  • Premere il tasto CANC e rilasciarlo
  • Premere nuovamente il tasto CANC
  • Rilasciare tutti i tasti

Effettuando questa sequenza dovrebbe comparire la classica schermata di accesso, presente di default in Windows 2000 e nei computer facenti parte di un dominio, nella quale è possibile digitare il nome utente a piacere. La sequenza non funziona nel cambio rapido utente.

Backyp

Backyp è uno script in Python per eseguire la copia di una o più directory.

  • Esegue la copia solo dei file modificati (backup differenziale)
  • Elimina i file obsoleti dalla destinazione
  • Ignora alcuni file/percorsi grazie ai filtri basati su espressioni regolari (RegEx)
  • Supporta i percorsi UNC delle reti Windows
  • Esegue il dump dei database MySQL (richiede mysqldump)
  • Comprime opzionalmente i dump di MySQL (richiede libreria zlib)
  • Esegue i log su schermo, file e posta elettronica
  • Si configura con un semplice file INI

La corrente versione stabile è 1.1.3, rilasciato sotto licenza GNU GPL.

DownloadRequisitiUtilizzoConfigurazioneChangelog

Requisiti

Lo script è stato provato con Python 2.5.1 su sistemi operativi Windows, compreso Vista. Non si esclude che sia funzionante anche su versioni precedenti di Python o altri sistemi operativi.

Utilizzo

backyp.py configfile

Lo script necessita di un solo parametro configfile, che indica il percorso del file INI di configurazione. Il parametro è obbligatorio. In Windows, nel caso in cui la directory di Python non sia presente nella variabile d’ambiente %PATH%, è necessario specificare il percorso dell’eseguibile.

C:\python25\python.exe backyp.py configfile

Configurazione

Per personalizzare lo script si utilizza un file configurazione INI. Il file deve rispettare lo standard RFC 822.

[sources]
path1: C:\sourcedir > renamedir
path2: \\server\sourcedir
mysql: localhost root password > mysql.zip

La sezione sources indica le origini di cui effettuare il salvataggio. Siccome non possono esistere più origini con lo stesso nome, l’origine deve iniziare con l’ID risorsa (obbligatorio) ed è normalmente seguita da un progressivo. Se la risorsa viene usata una sola volta, si può omettere il progressivo. Le risorse attualmente supportate solo le seguenti:

  • path = Percorso di una cartella (directory) da copiare nella destinazione. In Windows sono supportati i percorsi di rete UNC. Facoltativamente è possibile specificare un nuovo nome da usare nel salvataggio (output redirection). Se due cartelle risulteranno avere lo stesso nome, lo script aggiunge automaticamente un progressivo al nome della cartella. Se esiste già una cartella nella destinazione, lo script ne aggiorna il contenuto copiando solo i file modificati dall’ultima esecuzione (backup differenziale).
  • mysql = Host database di MySQL (richiede mysqldump). L’unico parametro obbligatorio è il nome host o l’indirizzo IP del server di MySQL. È possibile specificare nome utente e password per l’autenticazione separati da spazi – in mancanza viene usato l’utente root con password vuota. Facoltativamente è possibile indicare il nome del file (output redirection) al posto del predefinito mysql.sql. Se sono presenti più backup verso lo stesso file, lo script aggiunge automaticamente un progressivo al nome del file. Se ha estensione zip, viene automaticamente compresso (richiede la libreria zlib).

Le origini che iniziano per un ID risorsa non supportato viene ignorato.
[destinations]
path1: C:\dest

La sezione destinations indica le destinazioni dove effettuare il salvataggio. Siccome non possono esistere più destinazioni con lo stesso nome, la destinazione deve iniziare con un ID risorsa (obbligatorio) ed è normalmente seguita da un progressivo. Se la risorsa viene usata una sola volta, si può omettere il progressivo. Le risorse attualmente supportate solo le seguenti:

  • path = Percorso di una cartella (directory) dove copiare le orgini. Se non esiste, viene tentata la creazione. In Windows, sono supportati i percorsi di rete UNC.

[exceptions]
regex1: ^C:\\sourcedir\\exclude\\

La sezione exceptions indica i filtri basati su espressioni regolari. Quando l’espressione combacia, il file o la directory non viene copiata (la destinazione non viene intaccata). Notare che nell’esempio la barra rovescia è specificata doppia in quanto, come in tutte le espressioni regolari, è un carattere di escape. La sezione viene ignorata durante i dump dei database MySQL.

[logging]
screen: 2
file: 2
mail: 0

La sezione logging permette di configurare l’accuratezza dei log e su quale output mostrarli

  • screen = Mostra l’output su video
  • file = Salva un file di log
  • mail = Invia una mail
  • 0 = Nessun log
  • 1 = Log di base, principalmente errori ed anomalie
  • 2 = Log completo

[config]
logpath: backyp.log
mailfrom: backyp@localhost
mailto: backyp@localhost
mailattachment: logfile.txt
smtpserver: localhost

La sezione config permette di specificare alcuni parametri generali per lo script. Questi parametri non sono obbligatori.

  • mysqldump = Percorso del tool mysqldump, fornito assieme a MySQL. Se non viene specificato, lo script tenta di trovarlo nei percorsi più comuni.
  • logpath = Percorso dove salvare i log su file. Il percorso può indicare sia un file, al quale viene accodato il log, che una directory nella quale viene creato un file nella forma aaaa-mm-gg.log. Se vengono eseguiti più script nello stesso giorno, vengono accodati. Default: backyp.log
  • mailfrom = Indirizzo da usare come mittente delle e-mail. Default: backyp@localhost
  • mailto = Indirizzo di destinazione delle e-mail. Default: backyp@localhost
  • mailattachment = Nome del file in allegato alle e-mail. Se ha estensione zip, viene compresso (richiede libreria zlib). Default: logfile.txt
  • smtpserver = Server SMTP da usare per il recapito delle e-mail. Default: localhost

Changelog

  • Versione 1.0.1. Prima release
  • Versione 1.1.1. Aggiunto mysqldump e allegati compressi, corretto diversi bug sulla lettura file INI, aggiunta controlli e gestione eccezioni generate in caso di accesso negato.
  • Versione 1.1.2. Aggiunto 1 secondo di scarto durante il controllo aggiornamento della destinazione per compatibilità con alcuni filesystem
  • Versione 1.1.3. Risolto bug nelle variabili LogFile e LogMail che in alcune situazioni risultano non dichiarate

Aggiungi ai segnalibri/preferiti

Può essere interessante e utile fornire un link all’interno del proprio sito web in cui si propone di aggiungere la pagina nei segnalibri o nei favoriti di Internet Explorer.

Esistono notevoli differenze tra i vari browser per implementare questa funzione, che hanno favorito l’abuso di JavaScript e rendendo tali link completamente inaccessibili. Fortunatamente Opera ha proposto una soluzione semplice, basata su puro HTML.

Aggiungi ai segnalibri

Il segreto di questo link è l’attributo rel="sidebar" che indica al browser una relazione con i segnalibri. Recentemente è stato implementato anche in Firefox e negli altri software basati su Gecko. Internet Explorer e le versioni precedenti di Gecko (in particolare Mozilla Suite) ignorano completamente l’attributo e lo considerano un normale collegamento ipertestuale. Per risolvere non c’è altra soluzione che aggiungere un semplice JavaScript.

function addbookmark_click( )
{
if(self.external)
{
self.external.AddFavorite(this.href, this.title);
return false;
}
else if(self.sidebar)
{
self.sidebar.addPanel(this.title, this.href, "");
return false;
}
else return true;
}

function body_load( )
{
if(document.getElementById)
var link_addbookmark = document.getElementById("addbookmark");
else if(document.all)
var link_addbookmark = document.all["addbookmark"];

if(link_addbookmark)
link_addbookmark.onclick = addbookmark_click;
}

if(typeof self.addEventListener != "undefined")
self.addEventListener("load", body_load, false);
else if(typeof self.attachEvent != "undefined")
self.attachEvent("onload", body_load);

Il vantaggio di questa soluzione è di essere trasparente nei confronti di tutti gli User Agent che non supportano JavaScript, siano essi browser o lettori vocali.

Disabilitare le linee analogiche della borchia ISDN NT1 plus

La borchia NT1 plus (NT1+), utilizzata da Telecom Italia nella maggioranza delle installazioni ISDN, a differenza della normale borchia NT1, integra un Terminal Adapter (TA) con due uscite analogiche al quale possono essere collegati due telefoni BCA o centralini analogici.

I frequenti casi di blocco della borchia Telecom NT1 plus con centralini ISDN è molto spesso dovuto ad interferenze col Terminal Adapter. È consigliato in questi casi disabilitare il TA in entrata, in modo da lasciare il completo controllo delle chiamate in arrivo al centralino ISDN.

  • Collegare un telefono BCA con tastiera a toni in una qualsiasi delle uscite analogiche
  • Sollevare il ricevitore ed attendere il tono di urbana
  • Digitare #*##*# per entrare in programmazione ed attendere il tono di conferma
  • Digitare *19*0# per disabilitare la prima uscita ed attendere la voce di conferma “Configurazione accettata”
  • Digitare *29*0# per disabilitare la seconda uscita ed attendere la voce di conferma “Configurazione accettata”
  • Riagganciare il ricevitore e scollegare il telefono

Le linee analogiche ora sono disattivate in ingresso ed un eventuale telefono BCA collegato non suonerà al ricevimento di una chiamata. È possibile continuare ad utilizzare le linee analogiche per telefonate in uscita. Per riabilitare le linee analogiche in ingresso, ripetere la procedura utilizzando i codici *19*1# e *29*1#. Se dovessero permanere problemi con la borchia, consiglio di richiedere la sostituzione della NT1 plus con la più semplice NT1.

URL “simpatici” in IIS

In Apache, il noto server web open-source, è presente una funzionalità molto amata dai SEO, coloro che ottimizzano i siti per i motori di ricerca. Si tratta della possibilità di riscrivere gli URL (URL rewrite), ovvero redirigere in modo trasparente le richieste verso un’altra pagina anziché restituire l’errore 404 (non trovato). Questo permette di creare URL più semplici da leggere e con parole chiave apprezzate dai motori di ricerca e, contemporaneamente, permette di scrivere un solo script CGI che si occupa di gestire le richieste ed interrogare il database.

Gli utenti di IIS purtroppo non hanno questa funzionalità in modo nativo. È possibile emularla installando dei filtri ISAPI aggiuntivi, quasi tutti a pagamento, da aggiungere nella configurazione del sito web oppure creando un pagina di errore personalizzata. Consiglio la seconda possibilità, in quanto più semplice da realizzare e da manutenere.

Errore 404 personalizzato in IIS

Gli “errori personalizzati” in IIS servono per restituire al client una pagina alternativa al classico “Impossibile visualizzare la pagina”. È possibile specificare sia un file statico, che può risiedere in qualsiasi punto del server, sia una URL che deve risiedere nel sito web corrente. Nel nostro caso bisogna gestire l’errore 404 che si verifica quando il server riceve una richiesta riguardo un file che non esiste.

GET http://www.flyonthenet.com/file-che-non-esiste.html

Per modificare il valore, basta accedere alla console di amministrazione di IIS e nella maschera delle proprietà del sito web, cliccare su “Errori personalizzati”, quindi clic su “Modifica proprietà”, infine su “Tipo messaggio” selezionamo “URL” ed indichiamo sulla casella sottostante il nostro script, ad esempio in PHP. Questo verrà chiamato da IIS aggiungendo alcuni parametri, utili per ricostruire l’URL originariamente richiesto dal client.

GET http://www.flyonthenet.com/wp-404.php?404;http://www.flyonthenet.com/file-che-non-esiste.html

A questo punto non resta che creare lo script e gestire la richiesta. Normalmente si interroga un database per cercare un riscontro: se viene trovato qualcosa, si risponde con 200 OK e si genera la pagina, altrimenti si restituisce lo status 404 Not Found. È importante alla fine impostare correttamente lo status nelle intestazioni di risposta HTTP. L’errore più comune è quello di restuituire sempre lo status 200 anche se non si trova la risorsa nel database (soft 404): alcuni motori di ricerca lo considerano un errore e penalizzano il ranking del sito.

//In questo esempio $record dovrebbe contenere del codice HTML estratto da un database
if($record)
{
header('HTTP/1.1 200 OK');
header('Status: 200 OK');
echo $record;
}
else
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
echo 'HTTP 404 Not Found

HTTP 404 Not Found

';
}

Se si utilizza la piattaforma WordPress, lo script diventa molto semplice, in quanto WordPress stesso si occupa di restituire i corretti codici di stato HTTP, nel caso in cui venga richiesto un articolo inesistente.


//Indirizzo del sito di WordPress
$siteurl = 'http://' . $_SERVER['SERVER_NAME'];

//Wordpress usa PATH_INFO coi permalinks, ma per compatibilità con alcuni plug-in conviene modificare anche REQUEST_URI
$_SERVER['PATH_INFO'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], $siteurl) + strlen($siteurl));
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];

//La querystring potrebbe contenere 2 punti di domanda, che crea confusione nell'array $_GET
foreach($_GET as $get_key=>$get_value)
if(strpos($get_key, '?') !== FALSE)
$_GET[substr(strstr($get_key, '?'), 1)] = $get_value;

//Pulizia variabili
unset($siteurl);

//Include il file index.php di WordPress, dando per scontato che si trovi nella stessa directory
include('index.php');

Per gestire correttamente le richieste POST, è opportuno specificare uno script anche per l’errore 405 (Risorsa non consentita), che in alcuni casi viene generato al posto di 404.

Impossibile avviare il lavoro di stampa in Acrobat

Durante la stampa di un documento PDF tramite il programma Adobe Reader (storicamente noto come Acrobat Reader), può comparire il messaggio “Impossibile avviare il lavoro di stampa: La stampante è disponibile?”. Il problema è localizzato solo in alcune pagine: le restanti si stampano correttamente, e a nulla serve cambiare la stampante di destinazione o stampare il documento come immagine.

Il problema è apparentemente causato dalle marcature, ovvero delle correzioni del testo inserite in fase di revisione del documento, che teoricamente dovrebbero essere rimosse nella pubblicazione definitiva. Le marcature sono visibili in Adobe Reader solo se nel PDF ci vengono assegnati i diritti di utilizzo aggiuntivi.

Per stampare il documento, nella finestra di dialogo di stampa, bisogna selezionare “Documento” nella lista di selezione “Commenti e moduli”. L’opzione predefinita è “Documento e marcature”.

Acrobat - Stampa - Commenti e moduli

La soluzione è stata provata in Acrobat Reader 8.1 su Windows Vista Business.