Archivi categoria: guide

Template in PHP, il più veloce tra preg_match, file_get_contents e strpos

Lavorando al sito di reecycle.it, il frecycling italiano per il riciclo degli oggetti, sto dedicando molta attenzione alla gestione del carico sul server Apache di Tophost, e quindi ho deciso di eseguire dei test per verificare quale fosse il metodo più veloce per caricare i template delle varie sezioni del sito (un template è un “modello” di pagina -o parte di pagina- in codice HTML, nel quale vengono inseriti i dati dinamici prodotti dall’engine del sito).

Tutti i template di reecycle.it sono stati inizialmente creati sottoforma di tanti file .html (uno per ogni template) con dei %tag% rimpiazzati tramite la funzione str_replace() prima dell’output, ma ho pensato che forse c’erano modi diversi e più rapidi per ottenere lo stesso risultato; infatti ogni pagina può contenere anche fino a 5 o più template diversi (il layout generale, quello del pannello di login e del modulo di ricerca semplice, il layout della tabella dei risultati di ricerca, e quello delle singole righe della tabella), e cioè richiedere ben 5 operazioni di accesso e lettura su altrettanti file diversi sull’hard disk (trascurando per ora la cache del disco); probabilmente è più rapido leggere una sola volta un unico file grande contenente tutti i template e caricarlo in memoria, e quindi estrarre di volta in volta le sezioni che ci interessano; questo ultimo passaggio può esser fatto in due modi diversi, ovvero con un paio di righe di codice “pulite” tramite la funzione preg_match() ed una espressione regolare, oppure con un “accrocco” meno elegante ma più grezzamente rapido come strpos() e substr() che richiede invece diverse righe di codice.

In pratica, dovevo scoprire quale fosse, tra i tre metodi (template in file separati, template su file unico con estrazione tramite regular expression, e template su file unico con estrazione tramite strpos/substr) quello più veloce. Ero già sicuro che strpos/substr avessero una performance migliore di preg_match, ma ho incluso tutti i metodi per completezza.

Questa è la routine che ho usato:

<?php
$creationstart=strtok(microtime()," ")+strtok(" ");

for ($i=0;$i<1000;$i++) {
 $text=file_get_contents("full.html");
 for ($n=1;$n<=8;$n++) {
 preg_match("/<!--{$n}\(-->(.*)<!--\){$n}-->/s",$text,$matches);
 $html[$n]=$matches[1];
 }
}

$creationend=strtok(microtime()," ")+strtok(" ");
$creationtime=number_format($creationend-$creationstart,4);
echo "preg_match: ".$creationtime."<br />";

/////////////////
$creationstart=strtok(microtime()," ")+strtok(" ");

for ($i=0;$i<1000;$i++) {
 $text=file_get_contents("full.html");
 for ($n=1;$n<=8;$n++) {
 $start=strpos($text,"<!--$n(-->")+strlen("<!--$n(-->");
 $ending=strpos($text,"<!--)$n-->");
 $html[$n]=substr($text,$start,($ending-$start));
 }
}

$creationend=strtok(microtime()," ")+strtok(" ");
$creationtime=number_format($creationend-$creationstart,4);
echo "strpos/substr: ".$creationtime."<br />";

////////////////////
$creationstart=strtok(microtime()," ")+strtok(" ");

for ($i=0;$i<1000;$i++) {
 for ($n=1;$n<=8;$n++) {
 $html[$n]=file_get_contents($n.".html");
 }
}

$creationend=strtok(microtime()," ")+strtok(" ");
$creationtime=number_format($creationend-$creationstart,4);
echo "file_get_contents: ".$creationtime."<br />";

dove full.html è il singolo file HTML contenente tutti i template (8 in tutto, consistenti in paragrafi del tipo lorem ipsum di varia lunghezza), identificati tramite <!--numerotemplate(--> e <!--)numerotemplate--> tra i quali era presente il codice da estrarre di ogni template, mentre i singoli template erano salvati come file nominati da 1.html a 8.html.

Quello che fa il codice è, per ogni metodo, ripetere 1000 iterazioni in cui vengono caricati tutti i singoli template, dall’1 all’8, e misurare il tempo impiegato. L’utilizzo non è del tutto realistico, siccome il codice del template è in realtà costituito da HTML su più linee, e non poche ma lunghe righe di testo, e i template non vengono mai caricati tutti assieme, ma ne servono solo alcuni per ogni pagina, nondimeno prestazioni migliori in questo test indicano anche prestazioni migliori con un utilizzo reale (SBAGLIATO! controllate in fondo per maggiori dettagli).

Ebbene, il risultato del test è stato il seguente:

preg_match: 1.8984
strpos/substr: 0.0681
file_get_contents: 0.1352

I tempi finali variavano ovviamente ad ogni refresh, da un minimo (per preg_match) di 1.4s fino ad un massimo di 3s, ma i rapporti tra i valori rimanevano sostanzialmente costanti, cioè la combinazione di strpos/strsub su singolo grande file è più veloce del doppio rispetto al metodo file_get_contents chiamato per ogni singolo file, ma quello che mi sorprende è come il metodo preg_match sia nientemeno che quasi 30 volte  più lento di strpos/strsub, e di rimando 15 volte più lento che costringere il server a leggere più volte singoli file (ma penso che qui ci sia lo zampino della cache del disco).

Menomale che il supporto tecnico di tophost mi aveva suggerito invece proprio di usare preg_match su un unico file piuttosto che file_get_contents su più file.

AGGIORNAMENTO:

Ho appena testato questo benchmark con i template reali di reecycle.it… quanto mi sbagliavo.

Ho creato una funzione su reecycle.it per recuperare i template, in modo che se il template richiesto non si trova nell’archivio a singolo file, viene caricato dal singolo file html, e in modo trasparente aggiunto in fondo all’archivio unico in modo da poter essere caricato da lì per le occorrenze future; alla fine ho ottenuto un file supertemplate.tpl di 37kb contenente (quasi) tutti i template di reecycle.it. Ho modificato la routine presentata sopra in modo che usasse i template reali (sia l’archivio a singolo file, sia i file separati per ogni template) escludento però il metodo con preg_match per ovvi motivi, ed i risultati si sono invertiti! Usare file_get_contents sui singoli template era veloce il doppio rispetto ad usare strpos/substr sull’archivio unico.

Do la colpa a due cose: il file è effettivamente grande, quindi le funzioni devono gestire un pacchetto dati molto più ampio, e specialmente i tag sono nel formato dei commenti HTML, quindi strpos viene confuso dai numerosi tag simili presenti nella stringa.

In effetti, dopo aver modificato l’archivio dei template in modo che i tag di delimitazione fossero tipo {tag(} and {)tag} invece che <!–…–>, i risultati sono tornati come quelli attesi, e la combinazione di strpos/substr era più performante di file_get_contents chiamato più volte, e maggiore era il numero di template richiesto, più aumentava la differenza di velocità tra i due metodi; riguardo a questo potete controllare i risultati del mio post successivo.

This article has been Digiproved

Tophost e variabile di sessione “user” riservata in PHP

Stavo allegramente imprecando stamattina contro il server FTP del nodo8 di tophost su cui è ospitato un progetto a cui lavoro, siccome non era utilizzabile a causa di impressionante lentezza nelle risposte.

Ho colto l’occasione per rivedere alcuni aspetti del codice PHP e riordinare la gestione delle sessioni utente per renderle più funzionali, al che ho deciso di caricare in un’unica variabile di sessione, $_SESSION["user"], un array contenente tutti i dati rilevanti dell’utente per potervi accedere rapidamente senza richiedere costantemente un accesso al database.

Ebbene, non sembrava che riuscissi a far funzionare nulla, eppure è tecnicamente possibile caricare un array all’interno di una variabile di sessione. L’array veniva caricato subito dopo il login (confermato da var_dump) ma alla pagina successiva era sostituito da una stringa, corrispondente allo username MySQL del sito. Ho messo in discussione il mio codice, cercando dove fosse il problema, e modificando alcune assegnazioni (il tutto perdendo minuti ad aspettare che il server FTP accettasse gli upload), fino a quando non ho provato a cambiare il nome della variabile a $_SESSION["visitor"], e magia, ha funzionato tutto correttamente. A quanto pare, siccome non ho trovato traccia di questo in manuali “ufficiali”, i server di tophost sono impostati per accedere al nome utente MySQL tramite la variable di sessione “user”… non so cosa pensare. Qual è la variabile di sessione contenente la password MySQL?

  This article has been Digiproved

UPS e batteria per auto, come potenziare la riserva d’emergenza

AGGIORNAMENTO: ho scritto un altro articolo che espande e potenzia questa idea, lo trovate qui.

E’ da un po’ che avevo un UPS accantonato in un angolo, perché la batteria interna non ne voleva sapere di reggere un pc neppure per un paio di secondi; ed era da un po’ che mi ero ripromesso di comprare prima o poi da ebay o altrove una batteria di ricambio, ma desistevo sempre visti i prezzi poco invitanti; intanto il mio piccolo server domestico continuava a spegnersi occasionalmente per blackout o cali di tensione.

L’altro giorno ho trovato una batteria da macchina buttata in un angolo; in casa abbiamo alcune batterie per auto ferme e inutilizzate anche se funzionanti, che teniamo come scorta in caso dovessero servire, e sono tutte di risulta, assolutamente non nuove, ma smontate da macchine vecchie e dismesse, quindi anche se non sono vergini, si trovano in condizioni di perfetta usabilità.

car battery
Quando ho visto questo macigno mi è venuto subito in mente di vedere se era carico e funzionante, e di collegarlo all'ups fermo ormai da anni

Teoricamente, la batteria per macchina è da 12V, si tratta pur sempre di un accumulatore al piombo, e quindi non dovrebbe esserci alcuna limitazione al suo uso in abbinamento ad un normale UPS per computer, ma mi sono documentato per sicurezza su diversi siti, ed ho visto che effettivamente controindicazioni non ne esistono (in realtà le batterie per auto sono fatte apposta per sostenere assorbimenti anche elevati ma occasionali e di breve durata, ed essere ricaricate molto spesso, e questo coincide quasi sempre con lo schema di uso di un UPS), ma potrebbe, in teoria, forse, esserci un minimo rischio di emissione di vapori tossici, correlato alla presenza di acido dentro la batteria; in altre parole non succede assolutamente nulla, ma sarebbe consigliabile che il sistema si trovasse in un locale non di soggiorno, e/o ben arieggiato; al massimo, si può tenere l’UPS vicino al pc, ed avere un cavo esterno abbastanza lungo per collocare la batteria in un ambiente diverso; nel mio caso il locale del server non è molto vissuto, e quindi non ci sono questi problemi.

Dopo aver rimosso i morsetti dalla batteria semimorta, ho collegato due cavi (meglio se sufficientemente spessi) ai morsetti stessi, ed isolato il tutto con una pistola per colla a caldo (la migliore amica dell'uomo)
ups battery cables outlet
Ho deciso di far uscire i cavi della batteria dal pannello frontale, siccome quello posteriore era già sovraffollato di prese a 220V, quindi ho fatto un buco con un dremel e bloccato con colla a caldo
car battery homemade contacts
Ho usato una piccola staffa metallica per ricavare due molle ad anello collegate ai cavi, isolati con colla a caldo, per essere agganciate poi sui poli della batteria, il risultato non sarà bellissimo ma è perfettamente funzionale
ups car battery setup
Questo è l'aspetto finito, la larghezza della batteria è pressappoco pari a quella dell'UPS, quindi si accoppiano abbastanza bene assieme; avrei potuto trovare dei cavi più lunghi (vanno benissimo anche quelli per l'impianto della 220V), per posizionare la batteria in un altro ambiene più sicuro, o al massimo anche fuori casa

Il sistema funziona perfettamente: laddove con la vecchia batteria, appena staccata la corrente il pc si spegneva immediatamente, con questo accrocco avviene correttamente il passaggio all’alimentazione a batteria; non ho testato l’autonomia totale, siccome francamente non mi interessa (e non voglio stressare inutilmente la batteria riducendone la vita residua), visto che i blackout sono al massimo di qualche minuto, ma stimo che dovrebbe poter durare tra i 30 ed i 60 minuti.

Un dettaglio degno di nota: appena collegata la batteria nella fase di test, anche se era completamente carica, l’UPS non voleva accendersi, e pensavo che ci fosse un problema nel sistema, ma nulla di più falso, infatti semplicemente il mio UPS non si accende “a freddo”, cioè deve essere collegato ad una tensione funzionante di 220V per avviarsi per la prima volta (una cosa piuttosto sciocca a mio parere), ma se il vostro ha lo stesso problema, semplicemente provate a collegarlo alla 220V per avviarlo, prima di darvi per vinti.

This article has been Digiproved

Come si usa la vernice elettroconduttiva a base di argento

Scrivo questo articolo anche per riferimento personale: la vernice elettro-conduttiva all’argento è costosa (mi dicono che quella al rame è più economica), pagata 10 euro per 3cc, un furto a mio parere, ma considerando il valore della cosa che dovevo aggiustare (una pista stampata su un foglio di acetato per degli interruttori lavabili, attaccati ad un aggeggio da più di 100 euro, il cui ricambio ci avrebbe impiegato almeno un mesetto per arrivare, ammesso che fosse stato possibile trovarlo, e chissà quanto sarebbe costato), insomma, come dicevo tutto considerato ne è valsa la pena, ed ora ho un intero tubettino che potrebbe tornare utile un domani per altre cose.

Ora, il problema con la vernice conduttiva è che ad un primo utilizzo potrebbe sembrare di essere stati raggirati da chi ve l’ha venduta, e farvi venire voglia di tornare in negozio sbattendogliela sul bancone e pretendendo un rimborso. Infatti, fino a quando non vi sarà andata bene, la vernice elettroconduttiva NON CONDUCE. Diamine, anche immergendo i puntali di un tester direttamente all’interno del barattoletto non viene misurata alcuna continuità elettrica, persino dopo aver agitato con veemenza.

Comunque ho scoperto che esiste anche lo zen della vernice all’argento, ed ecco le direttive da seguire:

  1. Agitare bene
  2. Agitare ancora bene
  3. Continuare ad agitare bene fino a quando il gomito non è dolorante
  4. Ho già detto che il tubetto va agitato bene prima di aprirlo per la prima volta?
  5. Pulire bene la superficie da trattare con alcool, eventualmente raschiare appena le parti da connettere se ossidate, anche per renderle più ruvide in modo che la vernice si attacchi meglio
  6. In base alla dimensione della pista da creare scegliere lo strumento più adatto, anche se in generale io non userei mai il pennellino gigantesco in dotazione; nel mio caso ho preso un punteruolo, e dopo aver agitato un’ultima volta il barattolino l’ho inclinato per far avvicinare al bordo la vernice, ed ho bagnato la punta con la preziosa miscela argentea
  7. Stendere con mano fermissima la pista tra le due estremità da collegare, meglio se coinvolgendo almeno 2mm di lunghezza dei capi da connettere; creare prima un “filo” di vernice che connette le due estremità, e continuare a stenderlo passando la punta dello strumento da una parte all’altra, con delicatezza, anche allargando la pista un po’
  8. Soffiare delicatamente e a lungo fino a quando la superficie non diventa più opaca e di aspetto meno liquido, e di consistenza gommosa
  9. Ripetere i due passaggi precedenti stratificando almeno altre due volte e asciugando
  10. Dopo qualche minuto da quando l’ultimo strato è diventato gommoso è possibile usare un tester toccando gli estremi che si sono uniti assieme con la vernice (non posare i puntali del tester direttamente sulla vernice) e dovreste notare un valore misurabile di resistenza
  11. Vi conviene a questo punto lasciare l’intruglio all’aria per un giorno in modo da farlo asciugare bene e fargli fare presa in modo più solido

  This article has been Digiproved

Tasto windows + Ubuntu, wow! Scorciatoie da tastiera in Maverick Meerkat

Forse non sto scrivendo nulla di nuovo, ed in questo caso chiedo venia. Anzi no.

Questo è il mio sito e ci scrivo quello che mi pare.

Comunque ho appena completato l’aggiornamento a Maverick Meerkat sul mio portatile, e stavo cercando di tornare al desktop con Ctrl-Alt-D, ma non funzionava. Ho martellato su quei tasti almeno una decina di volte per accertarmene, ma niente. Fino a quando il mio pensiero laterale non mi ha suggerito di usare il tasto Windows+D (la prima cosa che ho provato quando iniziai ad usare Ubuntu un paio di anni fa), e pensa un po’, ha funzionato.

Quindi mi sono messo a testare tutte le combinazioni possibili col tasto WinKey, ed ecco quello che ho trovato:

WinKey+W, WinKey+A

Mostra tutte le finestre in una griglia dinamica

WinKey+D

Torna al desktop

WinKey+Tab

Una versione molto migliorata di Alt-Tab

ma ecco le scoperte veramente interessanti:

WinKey+RotellinaSu/Giù

Zoom avanti e indietro dell’intero schermo, spostare il puntatore sposta anche il quadro, e…

WinKey+ClickRotellina

Ingrandisce al massimo lo schermo

WinKey+M, WinKey+N

Colori negativi! Inutile per gli usi pratici, comunque con N si rende negativa solo la finestra attualmente aperta, mentre con M vengono invertiti tutti i colori di tutto lo schermo.

  This article has been Digiproved

Costruire un caricatore a pannello solare con batteria di riserva e porta USB

Che bella l’energia solare, ti dà la piacevole sensazione di risparmiare salvando l’ambiente.

Il mio HD2, il telefono HTC che sto usando adesso, ha la sua riserva di ben quattro batterie che posso scambiare se mi trovo fuori senza prese di corrente sottomano, ma mi mancava una fonte di energia rinnovabile, cioè un buon pannello solare; diciamocelo, i caricatori solari che si trovano su eBay fanno pena, sono costruiti attorno a cellette solari che è grasso che cola se arrivano a 40mA di uscita, ed in realtà fanno fare tutto il lavoro alla batteria interna, che si suppone venga caricata prima di uscire da casa, e che se dovesse essere caricata dal pannelletto solare impiegherebbe almeno due giorni alla luce diretta; quando invece un caricatore solare degno di questo nome dovrebbe avere una uscita di energia sufficiente a sostenere il dispositivo acceso, caricare la batteria del dispositivo, e anche la batteria di backup interna, così che durante la notte le due batterie cariche siano sufficienti a mantenere l’operatività. Il mio primo caricatore solare era costruito con un pannello da 1W (5V e 200mA), che aveva le stesse identiche dimensioni del mio HD2, anche se non era sufficiente, siccome guardare filmati richiede già da solo più di 200mA, e non rimaneva potenza sufficiente a ricaricare la batteria. Per cui ho abbandonato la prima versione (che è in vendita, se vi interessa), e dopo aver trovato questo modello di pannello solare che arrivava ad una uscita di 700mA, ho deciso di acquistarlo; ovviamente è più grande, ma aveva una capacità sufficiente a gestire anche una batteria di backup interna. Questa pagina vuole essere una cronistoria della mia esperienza, e quindi una guida a come costruire da soli un caricabatterie a pannello solare, con tanto di batteria di riserva interna. Per prima cosa, la lista degli ingredienti:

  1. Tester/multimetro digitale, per controllare il funzionamento del progetto mano a mano che procede, evitando di portarsi dietro degli sbagli fino a quando non sarà tardi per correggerli
  2. Saldatore a stagno per lavoretti elettrici
  3. Pistola per colla a caldo (la migliore amica dell’uomo dopo i biscotti al cioccolato)
  4. Pannello solare (ovviamente), più grande è e meglio è. Avete bisogno di una uscita a 5V (voltaggi più elevati vanno bene solo se usate un circuito per ridurre la differenza di potenziale, che non è coperto da questa guida), e dovete cercare quello con l’uscita di corrente maggiore possibile, il mio da 700mA è notevole di per sé, ma forse ne esistono di più potenti; come dicevo nella prefazione, va bene anche un pannello più piccolo, ma poi sarebbe inutile aggiungere la batteria interna di riserva, siccome non basterebbe a ricaricare tutto
  5. Una porta  USB-A che potete smontare da una vecchia scheda madre o da un hub non funzionanti
  6. Cavi elettrici, è più carino se usate quelli rosso e nero, ma i colori non cambiano nulla, come vedete nelle foto ho usato verde e bianco, basta ricordare le polarità (nel mio caso il bianco era il positivo)
  7. Due diodi Schottky (per impedire il reflusso di corrente all’interno del pannello, e dal pannello direttamente nella batteria; non dovete comprarli, potete dissaldarli da una vecchia scheda madre o da un vecchio caricabatterie per cellulari
  8. Una batteria agli ioni di litio da 3.7V, io ho comprato una 18650 “Ultrafire” da 3000mAh, ma qualunque tipo di batteria va bene purché abbia una capacità sostanziosa
  9. Un circuito di ricarica protetta, che accetta voltaggi in entrata in un range variabile, e restituisce una tensione fissa in uscita di 4.2V, impedendo anche i reflusso di corrente ed il sovraccarico della batteria; io ho preso il mio da un vecchio caricabatterie da tavolo per un cellulare Nokia; in alternativa, potete comprare direttamente una batteria UltraFire protetta, con un circuito di protezione incluso che quindi fa due cose in una; in questo caso vi servirà un solo diodo.

Questi sono i passaggi fotografici:

pannello solare monocristallino 700mA 5V
Questo è il pannello solare che ho acquistato, largo circa 16x16cm, ma potente
18650 ultrafire 3000mAh
La batteria usata in questo progetto, una 18650 stilo, da 3000mAh, più del doppio della batteria del mio telefono
circuito di ricarica protetto Li-Ion
Superficie superiore del circuito di ricarica Li-Ion che ho smontato da un caricatore da tavolo
retro del circuito di ricarica protetto li-ion
Superficie inferiore del circuito stampato; ho aggiunto i miei cavi per l'ingresso della tensione di alimentazione, ma è comunque presente lo spinotto piccolo Nokia che posso ancora usare; più tardi ho sostituito anche i cavi della batteria
porta connettore USB-A femmina
La polarità della porta USB-A; per farla riconoscere come caricabatterie dovrete mandare in corto i poli centrali dei dati stagnandoli assieme
solar panel charger backup battery scheme
Lo schema elettrico del progetto disegnato a mano; dopo averlo disegnato per questa guida, mi sono reso conto che avrei potuto evitare di aggiungere il diodo del circuito di ricarica, quello evidenziato in rosso; AGGIORNAMENTO: c'è un diodo che esce dal polo positivo della batteria, serve a evitare l'entata diretta della corrente nella batteria dal pannello solare, in modo da accertarsi che la batteria sia caricata unicamente dal circuito di protezione. Se invece usate una 18650 protetta, la batteria andrà collegata direttamente in parallelo al pannello senza alcun diodo di protezione.
retro pannello solare con diodo e porta usb
Questa è la versione di base del caricatore solare, semplicemente con diodo di protezione e porta usb di uscita, che funziona solo in presenza di luce solare, non avendo una batteria accumulatrice
diodo di protezione del pannello solare
Si può vedere attraverso la colla a caldo il diodo di protezione del pannello solare, con la riga bianca sul verso opposto rispetto al polo positivo del pannello
due diodi sul pannello solare
Qui ho aggiunto un secondo diodo pensando fosse necessario per impedire il reflusso di corrente al circuito di ricarica (che avviene se la corrente dalla batteria rientra nel caricatore, in un tentativo impossibile della batteria di ricaricarsi da sola); in realtà con questi collegamenti è sufficiente il solo diodo di protezione del pannello solare; so già che la saldatura è orribile.
polo negativo 18650 stagnato
Sono riuscito a saldare il cavo al polo negativo della 18650, non è un legame forte ma un po' di colla a caldo ha aiutato
colla a caldo sul polo negativo della 18650
Un monticciolo di colla a caldo isola e tiene in posizione i cavi sul polo negativo della batteria
molla per polo positivo della 18650
Ho sprecato almeno mezz'ora tentando di stagnare il polo positivo della batteria, ma non teneva qualunque cosa facessi; quindi alla fine mi sono inventato una molla attaccata al cavo...
polo positivo della 18650 con molla
...e l'ho messa a contatto col polo positivo della batteria tenendola ferma con la solita colla a caldo
caricabatterie a pannello solare con batteria di backup, vista retro
Dopo aver fissato tutte le parti al retro del pannello con la mitica colla a caldo (ho usato più di una barretta di colla per tutto) questo è l'aspetto finale dell'archibugio
caricabatterie pannello solare fronte
Aspetto frontale del tutto... non si nota nulla, a parte a malapena il led e la porta USB in cima
dettaglio led e porta USB caricatore pannello solare
Particolare della porta USB e del led
caricatore solare con batteria di riserva in azione
La ricompensa per il duro lavoro: il pannello alla luce del sole (non diretta, ma sufficiente); potete vedere negli ingrandimenti sia il led del circuito di ricarica (illuminato di verde, il che significa che il pannello sta alimentando il circuito, e la batteria a valle è già carica, altrimenti il led sarebbe rosso), ed il led arancione di ricarica del mio HD2.

AGGIORNAMENTO (29/9/11): diversi visitatori mi hanno chiesto cosa va cambiato se si vuole costruire un caricabatterie solare semplice, senza batteria di riserva; facile: prendete lo schemino del circuito, ed eliminate completamente la parte relativa a batteria, circuito di controllo della carica, e cavi che entrano ed escono da questi ultimi.

AGGIORNAMENTO (4/11/11): mpigio nei commenti mi ha fatto notare una notevole leggerezza commessa nel progettare lo schema del circuito, praticamente la protezione di ricarica veniva bypassata perché la batteria era direttamente in parallelo col pannello solare; ho modificato il tutto aggiungendo un diodo in uscita dalla batteria per prevenire questo difetto.
Su una nota aggiuntiva, invece di impazzire nel cercare un circuito di protezione di ricarica, come altri mi han fatto notare nei commenti, forse vi conviene acquistare direttamente una 18650 protetta, ovvero con circuito di protezione già integrato.

AGGIORNAMENTO (9/11/11): scrivo qui qualcosa che ho dovuto specificare più volte nei commenti. Ovviamente, quando non c’è sole, è la batteria di riserva che fornisce il voltaggio in uscita: questo non sarà 5V come una normale porta USB, ma al massimo 4.2V, ed a scendere fino a 3.7V, o un po’ meno. Molti dispositivi dovrebbero considerare questa tensione come sufficiente per la ricarica (come il mio HD2), anche se per ragioni tecniche non si caricheranno fino al 100%, ma nei commenti è stato riportato che non bastava per un navigatore GPS, che non considerava sufficiente neppure i 4.8V forniti da quattro batterie AA ricaricabili d 1.2V collegate in serie; in questi casi è necessario un regolatore di tensione (del tipo “boost” o “step-up”) che può ricevere in ingresso tensioni inferiori e variabili, e fornire in uscita sempre 5V, e che potete quindi collegare alla porta USB. Questo componente è sicuro da collegare come ultimo e unico prima della porta USB in uscita, in modo che sia il pannello solare che la batteria convergano verso di esso, e solo una tensione regolata e costante di 5V venge fornita dal vostro caricatore solare.

 

Morale della favola, con questo aggeggio potete ricaricare qualunque cosa che abbia un cavetto di ricarica USB, che sia iphone, ipod, ipad, qualunque cellulare HTC, lettori mp3… potete anche collegarci un hub USB e ricaricare più dispositivi in contemporanea, se il pannello è di potenza sufficiente. In questo caso, siccome la schedina di ricarica ha il suo spinotto femmina piccolo Nokia, posso anche usare un qualunque caricabatterie per ricaricare la batteria di riserva interna.

  This article has been Digiproved

 

Centrare le immagini con didascalia non centrate nei post WordPress

Mi ero stancato di come le immagini nei post non venivano centrate, ma invece erano tutte allineate sulla sinistra anche se le avevo impostate per essere allineate al centro, ed erano visualizzate bene nell’editor WYSIWYG di WordPress.

Su questo sito uso il tema Arclite, che permette di aggiungere definizioni CSS personalizzate dalle impostazioni, ma immagino che voi abbiate altri metodi per farlo, o possiate aggiungerle manualmente se proprio necessario.

Quello che ho aggiunto al foglio CSS è:

.aligncenter {margin-left:auto;margin-right:auto;}

che apparentemente funziona, siccome l’ho appena fatto ed ora le immagini sono centrate in firefox. Non mi sono dato la pena di testarlo in IE.

  This article has been Digiproved

Dual sim per HD2, guida, e disattivazione setup automatico della rete

HD2, bel telefono davvero. Peccato che non sia dualsim, non mi sorprende che diverse persone vogliano farlo funzionare con due numeri diversi. La stessa cosa volevo fare io, e questa guida è un riassunto della mia esperienza, grazie soprattutto alle informazioni fornite da mannyy dei forum di XDA.

Prima di tutto evitate di acquistare i costosissimi adattatori che trovate su internet, sarebbe semplicemente sciocco spendere una settantina di euro per un pezzetto di plastica, quando un intero cinafonino dualsim con fotocamera, radio, TV e Bluetooth costa meno di quella cifra.

Esistono fondamentalmente due tipi di adattatori dual-sim, indipendentemente dalla marca, quelli “no cut” e quelli “cut”, cioè che richiedono, o meno, di ritagliare il chip dalla sim per inserirlo nell’adattatore. La schedina che ho acquistato io è del tipo no cut (presa da ebay, anche se ora per motivi ignoti ai più, ebay ha deciso di bandire quell’inserzione), e si chiama Magicsim “iphone 3G dualsim”, ma ne possiedo anche un’altra, la Magicsim 23th-A, che richiede il taglio delle SIM, e che mannyy su XDA riporta essere anch’essa funzionante con l’HD2; la 26th dovrebbe funzionare anch’essa.

magicsim 26th
Questa è la Magicsim "iphone 3G dualsim", ho speso poco meno di 7 euro spedizione compresa per farmela arrivare dalla Cina
magicsim 26th hd2
Tolta la copertura dalla fascetta adesiva, ho applicato entrambe le SIM nell'adattatore, e questo è come appare una volta inserito nell'HD2
HD2 back metal cover
Interno della cover metallica posteriore dell'HD2; ho segnato con un pennarello le zone dove la seconda SIM ed il chip si sovrappongono ai bordi rilevati, impedendo la chiusura corretta; sarà necessaria una fresa diamantata montata su un dremel, o attrezzatura equivalente, per grattare via il metallo in quella zona

Come è evidente, non ho grattato via il metallo dalla cover… in effetti, alla fine ho deciso di non usare più l’adattatore dual sim, perché anche se perfettamente funzionante, una volta effettuato il passaggio alla seconda SIM, la prima risulta “spenta”, e non ho nessuna intenzione di perdere importanti telefonate di lavoro per effettuare chiamate personali usando lo stesso telefono, per ora continuerò ad usare un secondo cellulare. Potevo pensarci prima direte, eh lo so. Ma almeno ora ho lo spunto per scrivere questa guida che conto tornerà utile a qualcuno.

Ora passiamo alla parte operativa.

dualsim hd2 menu1
Menu principale della dual sim che rimpiazza il menu standard della scheda SIM; per cambiare scheda basta toccare SIM1 o SIM2; quella con l'asterisco davanti è la scheda attualmente connessa
Dualsim hd2 menu 2
Questo è il sotto-menu di "Dual Mode"; accertatevi che sia selezionato "STK mode", e assolutamente non attivate "007 mode"

ATTENZIONE: NON attivate 007 mode dal menu Dual Mode!!

La modalità 007 è molto utile, siccome da una parte conserva il menu standard della SIM, e dall’altra permette di cambiare più rapidamente da una scheda all’altra, perché basta chiamare i numeri 001 o 002 e subito riattaccare per effettuare il passaggio, che è ovviamente più veloce rispetto all’aprire ogni volta il menu. Per disattivare la modalità 007 bisogna chiamare 007 e riattaccare. Piccolo problema, l’HD2 non supporta la modalità 007 e non potrete né passare da una scheda all’altra né usare il numero 007 per disattivarla, quindi la dualsim diventa praticamente inutile. Unico modo con cui io sono riuscito a disattivare il 007 mode, è mettendo l’adattatore in un altro telefono: su un Nokia 3310 non ha funzionato, ma su un Nokia 7210 ho chiamato 007 e riattaccato, ed è stato riattivato finalmente il modo STK. Ho anche scritto una mail al supporto Magicsim, e mi ha risposto Cindy (chissà perché tutti i cinesi addetti agli helpdesk hanno nomi americani) allegando un file doc, in cui era scritto di provare a creare un nuovo contatto nella rubrica del telefono, con nome e numero uguale a 007, e salvarlo sulla SIM (NON nella memoria del telefono), in quel modo verrebbe disattivata la modalità 007.

Un altro metodo contenuto nel doc era quello di disattivare la connessione 3g e passare al GSM semplice, quindi riavviare il telefono, ma nel mio caso il 3g era già disattivato.

Dualsim hd2 menu 3
Assicuratevi che "Not Connected" nel menu "NO.Hide" sia disattivato, come in questa immagine

Un altro dettaglio da tenere presente: non ho alcun abbonamento dati sulle mie SIM, quindi ho sempre il 3g disattivato per risparmiare batteria, e non so se la considerazione seguente è valida anche per chi ha il 3g attivato. Comunque, nel menu “NO. Hide” è presente l’opzione “Not Connected”: questa deve essere disattivata, cioè senza asterisco, in altre parole deve esserci scritto “Not Connected” e non “*Not Connected”. Se questa opzione è attivata, il passaggio da una scheda all’altra non funziona, e dopo un po’ il telefono riporta che la SIM è mancante, ed a questo punto è necessario riavviare il telefono, o più rapidamente attivare e subito disattivare il “Modo aeroplano” per riavviare solo la radio. Se invece non c’è alcun asterisco in quella opzione, il passaggio dopo 30 secondi circa va a buon fine.

Disattivare il setup automatico della connessione di rete

Il secondo problema più noioso, almeno per me, è che ogni volta che si effettua il passaggio da una SIM all’altra, il telefono avvia la procedura automatica di configurazione per usare la connessione internet del vostro servizio mobile; non avendo io alcun abbonamento dati, questa è una cosa da evitare, e prima mi bastava andare,  una volta sola ad ogni flash di una nuova ROM, in:

Impostazioni Manila > Controlli Wireless > Menu > Connessioni > Scheda Avanzata > Selezione reti

quindi accertarmi che entrambe le voci fossero su “Rete ufficio”, evitando quindi che il telefono utilizzasse una connessione 3g/Edge.

Comunque, cambiando SIM regolarmente, ogni volta viene riavviata la procedura automatica, ed oltre ad essere un insulto per gli occhi, bisogna costantemente tornare nelle impostazioni wireless a disattivare la connessione. Non se ne parla proprio. Meglio disattivare alla radice la procedura di configurazione automatica.

MODIFICA (28 Sett 2010): potete ignorare l’ultimo paragrafo di questa guida, ho un po’ esagerato; l’utente xlr8me di XDA ha trovato il “metodo facile”, cioè dalle impostazioni di Manila, aprite Controlli Wireless, quindi Connessioni dati, e dal pulsante Menu disattivate la voce “configurazione automatica”.

L’applicazione che configura la connessione di rete è /Windows/ConnectionSetupAuto.exe, che si trova nella ROM, quindi non può essere né cancellato né rinominato, per cui bisogna semplicemente evitare che quel file venga eseguito. Un repulisti del registro è quello che ha funzionato nel mio caso: ho usato l’editor di registro di Advanced Task Manager di DotFred, ho cercato l’INTERO registro per valori contenenti la stringa connectionsetupauto e non ho fatto altro che cancellare completamente le cartelle che contenevano le chiavi con quel valore, ASSIEME a tutte le altre chiavi contenute nella stessa cartella; sicuramente grossolano come metodo, ma per me ha funzionato e quindi non me ne pento. Un altro metodo più conservativo sarebbe modificare manualmente i valori delle stringhe che puntano al percorso del file eseguibile, aggiungendo per esempio alla fine .off, ma  non sono sicuro che una cosa del genere funzionerebbe, non avendola testata.

This article has been Digiproved

Sacrifice, ultimo livello: come sconfiggere Marduk senza cheat

Sacrifice è stato il primo gioco “decente” a cui ho giocato sul mio primo PC “decente” 10 anni fa or sono. Ultimamente l’ho installato con Wine e Ubuntu sul mio portatile Satellite, per riportare in auge questo vecchio, intramontabile e geniale classico.

Ho seguito tutte le missioni di Stratos, ricordavo che era quello più subdolamente malvagio del gruppo (mentre la prima volta ho giocato con un mix di Persephone, James, Stratos, Charnel e forse anche Pyro, volevo provarli tutti), e ricordo che la prima volta che giocai dovetti ricorrere ai cheats negli ultimi due livelli siccome non riuscivo proprio a completarli. Nel frattempo però, avendo raccolto una certa esperienza negli RTS, ed avendo completato il nono livello senza grandi impedimenti, ho deciso di provare a battere Marduk senza trucchetti, anche se quello che mi spaventava maggiormente è la sua capacità di rubare le anime senza convertirle con i sac doctors.

La strategia generica che ha funzionato durante tutto il gioco è stata:

  1. costruire manalith immediatamente vicino all’altare
  2. evocare il maggior numero possibile di creature per farle guardiane dei manalith
  3. scalfire poco alla volta il numero di anime del nemico fino a quando non si è in grado di lanciare i propri attacchi

Gli arcieri di Stratos sono le Sylph, che ho trovato essere utilissime in ogni tipo di situazione, al punto tale da utilizzare praticamente solo loro, in gruppi da 12, in quasi tutte le missioni: veloci, precise, e danneggiano significativamente il nemico ancora prima che si avvicini; ho avuto bisogno di creature più potenti solo per assaltare gli altari nelle ultime missioni. Le Sylph poste a guardia dei manalith mi sono state molto utili fino all’inizio del nono livello, finché non avevo anime a sufficienza per evocare Silverback, anche se contro le enormi ondate di nemici di Marduk non hanno alcun effetto, e lasciano troppe anime sparpagliate quando muoiono per poterle recuperare prima che vengano rubate.

Quindi, contro Marduk, ho evocato e fatto guardiano di ogni altare un Silverback, e con le ultime due anime ho evocato uno Storm Giant su uno degli altari; con questo gruppetto, assieme all’uso di Tornato e Cloud Kill, ho rubato molto lentamente le anime di Marduk, fin quando non ne aveva più a disposizione per lanciare i suoi attacchi, ed ha smesso completamente di “far visita” al mio altare.

A quel punto sapevo di poter lanciare le mie forze, e quindi ho iniziato ad evocare Silverback per quanto mi rendevano possibile le mie anime, e distruggere un altare alla volta; la tattica è sempre la stessa, ad una debita distanza dagli altari basta lanciare Tornado, e poco dopo Cloud Kill, ed una volta esauriti i fulmini di Cloud Kill iniziare l’attacco con le proprie creature; le anime dei primi altari possono essere convertire senza che Marduk neppure si affacci per recuperarle, ed alla fine sono giunto ad avere un piccolo esercito di 11 Silverback a guardarmi le spalle.

Sono rimasto sorpreso di quanto è semplice questa tattica, e l’unico enorme problema è riuscire a sopravvivere ai primissimi attacchi, in cui è di fondamentale importanza riuscire a rubare le anime di Marduk senza che lui si avvicini per impossessarsi delle vostre.

  This article has been Digiproved

Guida alla registrazione completa delle telefonate sull’HTC HD2

Non discuterò in questo articolo dei motivi per cui registrare le telefonate entranti o uscenti dal vostro cellulare, né di come in alcuni paesi questo è illegale o solo parzialmente legale.

Ci sono due problemi con la registrazione delle telefonate sull’HTC HD2:

  1. la voce dell’altra persona ha un volume molto basso, ed è completamente inudibile se ci si trova in ambienti rumorosi
  2. la registrazione cessa dopo il primo minuto di telefonata o poco oltre

E le ragioni di questo sono le seguenti

  1. l’audio relativo alla terza persona non viene registrato direttamente, ma è solo quel poco che arriva al microfono dall’altoparlante
  2. il dispositivo entra in modalità di risparmio energetico dopo un certo intervallo, e tutto ciò che non riguarda il segnale radio viene spento

Il problema principale è sempre stato il primo, siccome il secondo era già risolto tramite alcuni hack di registro rilasciati da non so chi (il membro di XDA shinobi_uk ha rilasciato un CAB contenente le chiavi di registro in questione, anche se non è l’autore di queste ultime); questa storia infinita (che ha spinto alcuni a sostenere che il problema dell’audio fosse una limitazione hardware, mentre io ho sempre creduto all’ipotesi dell’interruttore software nascosto) è stata risolta (secondo quanto sostiene il membro di XDA che ha pubblicato la soluzione) dal membro di 4pda.ru RekGRpth; gli hack di registro precedentemente rilasciati dal membro di XDA mskip (se non vado errato) che indirizzavano e risolvevano il problema audio nei modelli precedenti di HTC sono ancora necessari, anche se da soli non bastano ad attivare la registrazione piena di entrambe le parti sull’HD2.

Quindi, per arrivare al nocciolo, queste sono tutte le chiavi di registro necessarie ad attivare la registrazione di entrambi i canali audio sull’HD2:

[HKLM > Drivers > BuiltIn > WaveDev]
"MixModeRecord"=dword:00000001

[HKLM > Drivers > BuiltIn > RIL]
"BatteryTimeoutInCall"=dword:00000000
"BattSuspendTimeoutInCall"=dword:00000000
"EnableFastDormantDisplayDuringCall"=dword:00000000

[HKCU > ControlPanel > Phone]
"Sleep"=dword:00000000

[HKCU > ControlPanel > BackLight]
"LightSensorPollingEnable"=dword:0

[HKLM > System > AudioRecording]
"Enabled"=dword:00000001

[HKLM > Software > Microsoft > Voice]
"EnableCallRecordMenuItem"=dword:00000001
"AllowInCallRecording"=dword:00000001

Una volta aggiunte, non è ancora finita, siccome avrete bisogno di un programma che effettua la registrazione vera e propria; io uso il semplicissimo ed efficacissimo ACR programmato dal membro di XDA slothie.

This article has been Digiproved