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.

I messaggi di Outlook Express rimangono sempre in “Posta in Uscita”

Quando i messaggi che abbiamo inviato tramite Outlook Express rimangono sempre in coda nella cartella “Posta in Uscita”, nonostante sia già stato ricevuto dal destinatario, ed ogni volta che facciamo “Invio/Ricevi” Outlook Express ne tenta nuovamente l’invio, significa che il programma non riesce a spostare i messaggi nella cartella “Posta Inviata”.

Il problema è causato dal file “Posta Inviata.dbx” danneggiato: purtroppo questi database si rovinano facilmente, soprattutto quando raggiungono una dimensione attorno ai 500MB. Al contrario di Office Outlook, purtroppo non è fornito alcun strumento per la riparazione degli archivi: l’unica funzione offerta è la compattazione, per recuperare lo spazio occupato dai messaggi cancellati (operazione da eseguire con cautela e scollegati da Internet).

L’unico modo per ripristinare il corretto funzionamento, senza ricorrere a programmi di terze parti in genere a pagamento, è quello di far ricreare ad Outlook Express un nuovo file DBX.

  • Posizionarsi con Esplora Risorse nella cartella contenente i file DBX della posta, il percorso è ottenibile da Strumenti > Opzioni > Manutenzione > Archivia cartella
  • Chiudere Outlook Express
  • Rinominare il file “Posta inviata.dbx” a piacere
  • Riavviare Outlook Express

Un nuovo file “Posta inviata.dbx” verrà automaticamente creato nel quale verranno salvati tutti i messaggi della posta in uscita, questa volta si spera con maggior successo. 😉

Se il database non è eccessivamente danneggiato, con un piccolo trucco è possibile tentare il recupero dello storico dei messaggi.

  • In Outlook Express creare una nuova cartella dal nome “Archivio”
  • Posizionarsi nuovamente nella cartella contenente i file DBX della posta
  • Chiudere Outlook Express
  • Cancellare il file “Archivio.dbx”
  • Rinominare il vecchio file della posta inviata in “Archivio.dbx”
  • Riavviare Outlook Express

Ora tutta la vecchia posta inviata dovrebbe essere presente nella cartella “Archivio”. Consiglio di non spostare i messaggi nella nuova “Posta Inviata” e di tenere questo archivio solo per ricercare e consultare i vecchi messaggi inviati.

Per prevenire del tutto il problema, consiglio di passare ad un client di posta più evoluto, quale Thunderbird, che salva i messaggi nel formato standard mbox, più facilmente recuperabili.

Passaggio di parametri dal server al client JavaScript

Molto spesso nello sviluppo di un sito Internet può capitare di dove inviare alcune informazioni salvate nel database ad uno script che andrà eseguito nel client dal browser.

Il metodo più semplice e diffuso è quello di passare i parametri direttamente in un blocco di codice JavaScript in linea, assieme al codice del documento HTML.

<?php
myText = "Testo che proviene dal server";
myURL = "http://url-letto-dal-server.com";
?>
alert("<?php echo myText ?>");
location.href = "<?php echo myURL ?>";

Per mantenere il codice maggiormente pulito, sarebbe ideale inserire tutti gli script JS e i fogli di stile CSS in file esterni, in modo da separare parte dinamica e la formattazione dai contenuti del documento HTML. In questo modo il nostro sito diventa più semantico, oltre che più accessibile. Si pone però il problema di far avere dei parametri agli script esterni senza richiamare ulteriori script lato server e consumare risorse.

Prima di HTML5

I tag META, nella sezione HEAD, sono da sempre usati per aggiungere informazioni al documento, normalmente per fornire l’autore, la data di modifica ed altre informazioni agli spider dei motori di ricerca. Le raccomandazioni del w3c non definiscono e non limitano quali siano le informazioni che possano essere trasmesse, quindi nessuno ci impedisce di creare dei meta-dati personalizzati. La soluzione che propongo è di inserire i valori di cui abbiamo bisogno in nostri tag META ed accedervi da JavaScript utilizzando le funzioni del DOM. Se il dato da trasmettere è un URI, le raccomandazioni del w3c consigliano di usare il tag LINK.

<meta name="myText" id="myText" value="<?php echo myText ?>" />
<link rel="myURL" id="myURL" href="<?php echo myText ?>" />
alert(document.getElementById("myText").value);
location.href = document.getElementById("myURL").href;

Il codice dello script ora può essere comodamente inserito in un file esterno con estensione JS da collegare al documento. Gli script del server dovranno generare un’unica pagina HTML, utilizzando le stesse risorse di calcolo della soluzione classica, ma sia la manutenzione del codice javascript che la sua leggibilità sono notevolmente migliorate.

Soluzione attuale per HTML 5

La soluzione precente, seppur perfettamente funzionante anche con HTML5, ha un problema: durante la convalida del codice con il validatore W3c causerà degli errori. Questo perché HTML5 non consente l’uso di meta e link tag personalizzati.

Lo stesso HTML5 però ha previsto la possibilità di utilizzare degli attributi aggiuntivi personalizzati, da inserire a piacere in qualsiasi tag, che non causeranno errori di convalida. Questi attributi devo iniziare con il suffisso data-.

<body data-myText="<?php echo myText ?>" data-myURL="<?php echo myURL ?>">
alert(document.body.getAttribute("myText"));
location.href = document.body.getAttribute("myURL");

.

Video e contenuti multimediali con il tag OBJECT

Nei browser basati su Gecko, quali Mozilla Firefox, è pienamente supportata la capacità di inserire video, animazioni e contenuti multimediali utilizzando il nuovo tag OBJECT, secondo quanto previsto dalle raccomandazioni W3C.

Anche se è ancora possibile utilizzare il tag EMBED per il medesimo scopo, è sconsigliato il suo utilizzo in quanto si tratta di un tag deprecato e che in futuro probabilmente verrà abolito.

Esistono tuttavia dei problemi di compatibilità con Internet Explorer: i browser Gecko – ed in genere tutti i browser che si attengono alle raccomandazioni W3C – richiedono di identificare il contenuto specificando il tipo MIME dell’oggetto da includere, mentre Internet Explorer richiede quale plug-in/ActiveX usare tramite il suo codice GUID univoco. Bisogna prestare molta attenzione alla sintassi dei tag OBJECT, affinché i browser Gecko li accettino senza comprometterne la compatibilità.

In questa pagina raccogliamo la sintassi cross-browser e standard-compliant del tag OBJECT per i formati più comuni.

Shockwave Flash (Adobe Macromedia)

Tipo MIME: application/x-shockwave-flash
Estensione: SWF
Sito web: http://www.adobe.com/shockwave/
Requisiti del client: Flash Player
Compatibilità: Mozilla Firefox1.0+ Mozilla Suite1.0+ Seamonkey1.0+ Camino1.0+ Netscape Navigator8.0+ Microsoft Internet Explorer5.0+ Opera8.0+ Konqueror3.0+



Esempio

Applet Java (Sun Microsystems)

Tipo MIME: application/x-java-applet
Estensione: CLASS, JAR, JNPL
Sito web: http://java.sun.com/
Requisiti del client: Java Runtime Environment
Compatibilità: Mozilla Firefox1.0+ Mozilla Suite1.0+ Seamonkey1.0+ Camino1.0+ Netscape Navigator8.0+ Microsoft Internet Explorer6.0+ Opera8.0+ Safari2.0+ Konqueror3.0+






Esempio

WMV – Windows Media Video (Microsoft Corporation)

Tipo MIME: video/x-ms-wmv
Estensione: WMV
Sito web: http://www.microsoft.com/windows/windowsmedia/
Requisiti del client: Windows Media Player, MPlayer
Compatibilità: Mozilla Firefox1.0+ Mozilla Suite1.0+ Seamonkey1.0+ Netscape Navigator8.0+ Microsoft Internet Explorer5.0+ Opera8.0+ Konqueror3.0+



Esempio

WMA – Windows Media Audio (Microsoft Corporation)

Tipo MIME: audio/x-ms-wma
Estensione: WMA

Vedi guida per WMV

ASF – Advanced Streaming Format (Microsoft Corporation)

Tipo MIME: application/asx, video/x-ms-asf
Estensione: ASF, ASX

Vedi guida per WMV

QuickTime (Apple Computer)

Tipo MIME: video/quicktime
Estensione: MOV
Sito web: http://www.apple.com/quicktime/
Requisiti del client: QuickTime Player, QuickTime Alternative, MPlayer
Compatibilità: Mozilla Firefox1.0+ Mozilla Suite1.0+ Seamonkey1.0+ Camino1.0+ Netscape Navigator8.0+ Microsoft Internet Explorer6.0+ Opera8.0+ Konqueror3.0+






Esempio

RealMedia (Real Networks)

Tipo MIME: audio/x-pn-realaudio-plugin
Estensione: RM, RA, RV, RPM
Sito web: http://www.real.com/
Requisiti del client: Real Player, Real Alternative, MPlayer
Compatibilità: Mozilla Firefox1.0+ Mozilla Suite1.0+ Seamonkey1.0+ Camino1.0+ Netscape Navigator8.0+ Microsoft Internet Explorer6.0+


Esempio

SVG – Scalable Vector Graphics (W3C)

Tipo MIME: image/svg+xml
Estensione: SVG
Sito web: http://www.w3.org/Graphics/SVG/
Requisiti del client: Gecko 1.8+ (supporto nativo), Adobe SVG Viewer
Compatibilità: Mozilla Firefox1.5+ Seamonkey1.0+ Camino1.0+ Netscape Navigator8.0+ Microsoft Internet Explorer6.0+ Opera8.0+ Konqueror3.0+