Archivio dei post taggati ‘how to’

Debug di uno script batch quando usato nel task scheduler.

Scritto il 20 febbraio 2012 alle 10:56

Problema: ho creato un file batch che ogni tot ore svuota delle cartelle su un drive di rete mappato sotto Windows 2003 Server. Se mandato in run manualmente lo script esegue il compito in maniera egregia, se invece lo si avvia tramite task scheduler qualcosa fallisce.

Il log dello scheduler non è sufficiente a risolvere il mistero (il batch viene lanciato correttamente quindi il file è accessibile e l’utente di riferimento ha tutti i diritti per eseguirlo) ma l’azione non viene compiuta (le cartelle rimangono piene).

Come uscire dal problema?

Create un ulteriore file batch (debug.bat) da avviare tramite schedulazione e scrivete al suo interno queste istruzioni:

echo [%date% - %time%] Log start > C:\log.txt
CALL "C:\my_real_script.bat" >> C:\log.txt 2>&1

Sostituite my_real_script.bat con lo script che non vi funziona ed eseguite tramite schedulazione debug.bat

In log.txt avrete sia l’elenco delle azioni eseguite (lette in my_real_script.bat) che le eventuali risposte di errore da parte del sistema operativo. Il trucco sta in quel 2>&1 che redireziona l’output sul file.

E adesso, se volete sapere perché il mio script non andava, la risposta è semplice: Windows non ha accesso ai drive mappati quando esegue un’azione chiamata dallo scheduler (vi ricordo che lo script funziona benone se lanciato manualmente) e risponde con “The system cannot find the path specified.” in quanto il mapping dei drive viene effettuato solo per l’utente corrente.
Per risolvere il mio problema, nello script batch, ho dovuto usare la path UNC del tipo \\ip-address\folder_name.

Emanuele

Invertire l’ordine delle parole di una stringa in PHP.

Scritto il 20 luglio 2011 alle 15:03

Qualche giorno fa avevo scritto, per gioco, una frase che iniziava dall’ultima parola. Come al solito però, prima di fare questi giochi stupidi penso “come potrebbe risolvere questo problema il computer?”. Invertire tre parole di una frase è molto semplice, invertire testi lunghi – a mano – inizia a diventare qualcosa di oneroso in termini di tempo.

Il problema si risolve in maniera molto semplice con un paio di funzioni. Per amore della pulizia non ho voluto usare alcun ciclo (potevo contare le parole e salvarle in un’altra variabile partendo dall’ultima). In PHP però esiste array_reverse, una funzione che accetta in ingresso un array e lo ordina in maniera opposta.

Così, in poche righe, ho trasformato la stringa in un array, l’ho ribaltata e l’ho ricomposta. :-)

1
2
3
4
5
6
7
// Codice PHP
$frase = "Questa stringa verrà ribaltata!";
$i = explode(' ', $frase);
$reverse = array_reverse($i);
$risultato = implode($reverse,' ');
echo $risultato;
// $risultato = ribaltata! verrà stringa Questa

Semplice, facile ed indolore. Anzi: indolore. ed facile, Semplice :-)

Emanuele

CSS Sprites (anche su questo blog).

Scritto il 24 giugno 2011 alle 11:13

CSS SpritesNell’ottica di limare sempre più i tempi di caricamento, da alcune settimane molte delle immagini presenti su queste pagine vengono visualizzate attraverso la tecnica dei CSS Sprites. Per farvi capire meglio di cosa si tratta, prendiamo in considerazione l’immagine a lato.

La colonna di sinistra riporta in un’unica immagine tutti gli elementi grafici che compongono le pagine di questo blog. Per visualizzare uno di quegli elementi basta richiamare via CSS l’immagine intera indicando le coordinate (offset orizzontale e verticale) dell’area dell’immagine da mostrare. Nell’esempio ho fatto scorrere l’immagine di 146 pixel prima di visualizzarla in un’area alta 15 pixel per far apparire l’antipixel relativo a Technorati. Tutto il resto, essendo al di fuori di quell’area è come se rimanesse “sotto il vestito”.

1
2
3
4
.sprite-technorati {
background:#fff url(csssprite.png) no-repeat top left;
background-position:0 -146px;
}

Qual è il vantaggio dovuto all’uso dei CSS Sprites?

  • Riunendo in un’unica immagine tutti gli elementi la dimensione totale (in kb) sarà inferiore a quella della somma del peso di ogni immagine (in quanto le intestazioni del formato JPG non sono ripetute n-volte).
  • Il browser di un visitatore non dovrà effettuare n-richieste HTTP per ottenere tutte le immagini: basterà un’unica richiesta per ricevere tutti gli elementi che incontrerà nella pagina. Effettuato il primo download tutte le altre volte che dovrà mostrare quel file si accorgerà di averlo già scaricato (csssprite.png sarà in cache) e potrà visualizzarlo immediatamente facendo slittare l’immagine in base a quanto indicato via CSS.

Questo comporta un vantaggio sia per l’utente che navigherà sul sito più velocemente che per il gestore del sito web infatti minori richieste HTTP comportano un carico minore sul server che potrà, in questo modo, fronteggiare contemporaneamente alle richieste d’accesso di un numero maggiore di visitatori.

Inoltre sono sempre più convinto (ma dovrebbe essere prassi comune) che un “contenitoreleggero e scattante permette di destinare quei kb risparmiati ai contenuti (ad esempio le foto in un post). E’ come un ciclista che non usando una bicicletta di ferro può sfruttare quel peso per trasportare litri di acqua in più. :-)

Quando non conviene usare i CSS Sprites?

  • Come al solito ogni scelta tecnica che si intraprende va valutata in base alle situazioni. In linea di massima comunque non conviene quando si prevede che esistano pagine con un livello di traffico non indifferente che visualizzano meno del 50% degli elementi grafici inseriti nel nostro sprite.

La tecnica è talmente importante per l’ottimizzazione di un sito che anche colossi come Google o Facebook la sfruttano nelle loro pagine da anni (senza che ve ne siate mai accorti).

Emanuele

Come velocizzare il tuo blog in 5 mosse!

Scritto il 23 febbraio 2011 alle 18:29

Siccome son paranoico questo blog è un tavolo degli esperimenti, da qualche giorno queste pagine si aprono più velocemente che mai. Per la precisione la prima apertura ha guadagnato mezzo secondo mentre un qualsiasi reload sucessivo della pagina si è dimezzato: da poco più di tre secondi a circa un secondo e mezzo.

Come ho fatto? Vuoi velocizzare anche le tue pagine?

I passi necessari sono:

  1. Riunisci in un unico file i css e javascript presenti nelle pagine: se controlli sotto la gonna di questo blog vedrai che non vi sono più differenti css o javascript sparsi, oltre quelli caricati da domini esterni (ad esempio Google Analytics). Il motivo è semplice: il tuo browser scarica queste pagine “due pezzi per volta”, così se diminuisci il numero di file da recuperare, diminuisci il tempo di caricamento totale della pagina.
  2. Minimizza qualsiasi cosa possibile: javascript e css sicuramente possono esser sostituiti dalla loro versione compressa, cui son stati rimossi spazi e commenti ed han ricevuto un paio di ottimizzazioni. Per comprimerli ho usato JSCompress per i javascript e MinifyCSS per i fogli di stile. Il risparmio si quantifica in quasi 100kb in meno (moltiplicali per il numero di visitatori e conta il risparmio giornaliero). Ovviamente se hai immagini non ottimizzate puoi intervenire anche lì: non mettere online una foto a 2500×2500 se poi la visualizzi in un’area della pagina limitata a 300×400!
  3. Richiama dall’esterno i javascript comuni: framework come jQuery o prototype (se li usi), puoi richiamarli attraverso la loro versione (minificata) fornita da Google, questo alleggerisce il carico sul tuo server, parallelizza il download della pagina e molto probabilmente un visitatore avrà già scaricato il file navigando altrove.
  4. Imposta correttamente l’expire dei file. E’ inutile ricaricare le immagini che, su un blog, molto probabilmente non cambieranno mai: quando pubblico qualcosa è perché voglio rimanga lì. E allora ecco i codici da inserire nel file .htaccess del tuo blog:
  5. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    # Abilita l'expire dei contenuti
    <ifmodule mod_expires.c>
    ExpiresActive On
    # 1 anno per gli mp3, i video e i contenuti multimediali
    <filesmatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
    ExpiresDefault A9030400
    </filesmatch>
    # 1 mese per le immagini e i fogli di stile
    <filesmatch "\.(jpg|jpeg|png|gif|swf|css)$">
    ExpiresDefault A2592000
    </filesmatch>
    # 7 giorni per i javascript
    ExpiresByType application/x-javascript "access plus 7 days"
    </ifmodule>
  6. Rimuovi l’header ETag per ogni file. Questa te la spiego così: il browser ad ogni connessione interroga il server e controlla che ciò che già conosce (per via di una visita precedente) non sia cambiato. L’ETag è un codice univoco usato per il confronto. Perché rimuoverlo? Perché senza esso il browser fa totale affidamento su quanto gli hai detto sopra con l’expire dei file: una volta al mese aggiorna le immagini, per il resto non fa alcun controllo e si fida che sia rimasto tutto uguale. Ecco cos’altro inserire.
  7. 1
    2
    3
    4
    5
    
    # Rimuove il tag ETag dall'header per tutti i file
    <ifmodule mod_headers.c>
    Header unset ETag
    FileETag None
    </ifmodule>
  8. Si può fare di più (si può sempre fare di più!). Il prossimo passo sarà utilizzare i CSS Sprites per riunire le immagini statiche (non quelle dei post). Il motivo è  lo stesso del punto uno… ma lascio a te il compito di approfondire l’argomento! :-)

Hai altri consigli?

Emanuele

Come cambiare l’icona di Firefox (e nasconderlo ai colleghi).

Scritto il 3 febbraio 2011 alle 13:05

In particolari contesti (lavoro, biblioteca…) potreste aver bisogno di rendere meno visibile la vostra navigazione su internet, magari agli occhi dei passanti che di tanto in tanto si avvicinano a chiedervi qualcosa (qualcuno ha detto colleghi?).

Personalmente uso Firefox installato su una chiavetta USB, in modo da portare sempre con me i preferiti, le password e la cronologia ma – ovviamente – l’icona del browser è ben visibile nella barra delle applicazioni quand’è avviato, così, per evitare di doverlo chiudere sempre al volo, ho risolto con due piccoli accorgimenti.

  • Passo numero 1: Nascondere Firefox nella traybar.

La traybar è quell’area accanto all’orologio di Windows in cui si annidano alcune applicazioni avviate (ad esempio: il controller del volume, l’antivirus, etc.) e piuttosto che lasciare il solito tab in evidenza nella barra delle applicazioni, annidare il browser lì può essere un primo passo per rendere meno visibile la navigazione privata. Per far si che Firefox si posizioni lì quando ridotto ad icona basta installare il plugin MinimizeToTray Plus (ne esistono vari, io uso quello).

  • Passo numero 2: Cambiare l’icona di Firefox

Il passo numero 1 può esser sufficiente nella stragrande maggioranza di casi, ma se si vuol nascondere il browser in maniera migliore confondendo chi guarda il vostro desktop, è consigliabile togliere la nota volpe di fuoco da qualsiasi angolo dello schermo.

Per cambiare l’icona di Firefox sono necessari tre semplicissimi passi:

1. Cercare un’icona (un file .ico per Windows o .xpm per Linux) o sul proprio computer o direttamente sul web e rinominarla in main-window.ico

2. Creare – se non esistono già – le cartelle \icons\default sotto la cartella chrome (ad esempio: C:\Programmi\Mozilla Firefox\chrome\icons\default) e copiare in quest’ultima l’icona che abbiamo scelto.

3. Riavviare Firefox :-)

Icona Firefox ModificataQuesto metodo funziona tranquillamente con Firefox 3.6 e la volpe di fuoco, mascotte del noto browser, come potete vedere nell’immagine a sinistra è scomparsa lasciando posto all’icona a forma di obiettivo che ho scelto per l’occasione (l’icona – per chi fosse interessato – è quella di Aperture, un noto programma di fotoritocco per professionisti prodotto dalla Apple).

Firefox - Tray icon modificataSe avete installato anche il plugin per minimizzare Firefox nella traybar avrete, come potete vedere nell’immagine a destra, un browser ben nascosto anche all’occhio di un esperto. Ovviamente la soluzione non funziona se condividete il computer con qualcuno libero di gironzolare tra le vostre icone… :roll:

Emanuele

PS: io uso questo metodo per controllare la posta personale con un pizzico di privacy in più. :-)

Come calcolare la distanza di un temporale.

Scritto il 15 settembre 2010 alle 17:08

Si avvicina la stagione delle piogge e visto che l’altro giorno lo spiegavo ad un amico, leggete qui la guida da giovani marmotte per calcolare quanto dista un temporale dalla vostra testa! :-)

Gli elementi che dobbiamo considerare sono pochi e abbastanza vistosi: fulmine e tuono.

La fisica elementare ci insegna che luce e suono si diffondono nell’aria con velocità decisamente diverse. La prima percorre approssimativamente 300.000km/s, il secondo invece, ad una temperatura dell’aria di 10°C, è decisamente più lento con i suoi 337m/s (per confrontarlo con la luce, significa 0,337km/s).

Prese in considerazione queste due grandezze fisiche e considerato che l’altezza dei cumulonembi (le nuvole grosse che provocano i temporali) è di circa 3km dal suolo ci si rende conto che la luce raggiungerà i nostri occhi in un decimillesimo di secondo mentre il suono necessiterà di quasi 9 secondi (3km diviso 0,337km/s vale 8,90 secondi).

Questo ci spiega già perché il tuono si fa attendere sempre qualche istante dopo che il fulmine ha squarciato il cielo.

Adesso però vogliamo capire quanto siamo distanti noi dal luogo in cui è esploso il fulmine e per questo dobbiamo chiamare in causa Pitagora. :-)

Triangolo rettangolo - Teorema di PitagoraIl teorema di pitagora ci spiega che se il fulmine è avvenuto nel punto B del cielo e noi ci troviamo nel punto A (magari con l’ombrello già aperto), siamo distanti una misura b da C che rappresenta il centro del temporale a terra.

La distanza b si misura, semplicemente calcolando: b=√(c²-a²).

Riprendendo un po’ i nostri dati avremo che se il suono per percorrere il lato c impiegherà 10 secondi, la distanza b varrà: √[(0,337*10)²-3000²]=1535,22 metri.

In pratica, ogni 10 secondi d’attesa tra fulmine e tuono saremo distanti 1,5km dalla perpendicolare del temporale quando l’altezza delle nuvole è di 3km.

Se invece ci interessa – semplicemente – capire quanto siamo distanti noi dalle nuvole, basterà calcolare quanto tempo impiega il suono a percorrere la distanza c.

Abbiamo detto prima che per ogni secondo d’attesa il tuono percorre 337 metri, così basterà moltiplicare questa velocità per i secondi.

Dopo il fulmine attendiamo 5 secondi prima di sentire il tuono? Le nuvole sono a 337*5 = 1685 metri da noi.

In linea di massima basta ricordarsi che tre secondi d’attesa equivalgono a circa 1km così se effettuiamo un po’ di rilevazioni possiamo verificare in maniera abbastanza sicura se il temporale si sta avvicinando o allontanando da noi. :-)

Emanuele

PS: e se siete curiosi vi spiego come sentire il suono di un tuono due volte… :-)

Devo imparare a fare le bolle di sapone giganti!

Scritto il 31 agosto 2010 alle 17:26

Ecco un’altra cosa che devo assolutamente saper fare dopo che saprò andare sufficientemente bene sul mio monociclo: le bolle di sapone giganti…! :joy:

Ricordo che da piccolo, andavo da mia zia, mi mettevo in terrazza con una bacinella pienda d’acqua, sapone per piatti e zucchero e con una bella cannuccia bastava soffiare dentro per vedere esplodere da quel liquido centinaia di bolle di sapone che finivano per staccarsi e volare via… :-)

Ormai però sono cresciuto… e così… beh, così non significa che dovrò smetter di pensare a queste cose ma, al contrario, posso benissimo imparare a fare le bolle di sapone giganti anche perché tra monociclo e bolle sarà uno spasso portare il nipotino fuori tra qualche anno…! :joy:

Il materiale occorrente per fare le bolle di sapone è semplicissimo:

  • Acqua demineralizzata (tipo quella per il ferro da stiro per intenderci)
  • Sapone concentrato (meglio quello con poco profumo o alcool perché poi le bolle non riescono)
  • Glicerina (è una specie di grasso)

Per ogni litro d’acqua demineralizzata servono 100 millilitri di sapone e mezzo litro di glicerina!

Leggevo in giro che il composto, una volta rimescolato a dovere, va lasciato sedimentare per alcune ore (o una notte intera) in modo che tutto possa amalgamarsi per benino.

Il giorno dopo scegliete un posto non troppo al sole e con un po’ di vento e armati di cordino andatevi a divertire… :roll:

Emanuele

PS: potrei avere – un giorno – la sana pazzia di fare le bolle di sapone dal balcone di casa a Milano, in modo da riempire di un po’ di magia quella fredda città… :eeeh:

Metti le stelline su iTunes con I love Stars!

Scritto il 25 febbraio 2010 alle 9:06

Qualsiasi mac user con una bella playlist su iTunes potrà comprendere la mia difficoltà nell’assegnare le stelline di gradimento ad ogni singolo brano. Attualmente il mio iTunes conta oltre 45GB di musica suddivisi in oltre 8000 brani (cosa che, in effetti, mi impressiona non poco…).

A Settembre dell’anno scorso mi ero già lamentato del problema e, pazientemente, mentre lavoravo cercavo di ricordarmi di controllare se l’mp3 in riproduzione in quell’istante fosse già stato classificato o meno.

La strada verso il completamento è ancora distantissima però da qualche giorno, con I love Stars ho velocizzato l’operazione.

I love Stars - Software per iTunes

Il software in questione aggiunge alla barra di sistema di Mac OS X una piccola area in cui selezionare al volo le stelle di gradimento del brano! Cliccando col tasto destro, inoltre, è possibile vedere titolo e autore del brano e impostare un paio di preferenze.

Semplice, leggero e funzionale. :-)

Emanuele