blog personale

Archivi di sprite category

Spesso è necessario scambiarsi files di dimensioni notevoli tra computer fisicamente distanti ma connessi tramite Internet.
Fondamentalmente gli approcci per risolvere il problema sono 2:

  1. In 2 tempi: prima caricate il file da qualche parte, poi dite all’amico destinatario dove prenderlo. Rientra in questa categoria l’invio tramite e-mail (soluzione accettabile solo per pochi Mb) o l’utilizzo di servizi tipo megaupload o rapidshare (limite sulla dimensione massima o necessità di spezzare il file in più parti). Metodo apparentemente semplice ma non troppo in alcuni casi.
    Problemi comuni: E’ necessario aspettare il tempo di caricamento prima che l’amico possa iniziare a scaricare: complessivamente cioè ci vuole molto tempo, considerato che la velocità in upload di una tradizione connessione ADSL è molto bassa.
  2. Connessione diretta: in pratica l’amico inizia a scaricare direttamente dal vostro PC. Trascurando il trasferimento con  Skype/Msn messenger (lento e con probabilità di timeout), ad esempio voi fate partire un FTP o HTTP server con il file disponibile, quindi date all’amico il vostro IP pubblico.
    Vantaggi: velocità di trasferimento complessiva massimizzata (l’amico inizia a scaricare subito alla vostra massima velocità in upload).
    Problemi:  Non semplice da configurare e non conveniente per utilizzarlo poche volte, inoltre l’impossibilità di configurare il router del mittente (o gli altri router intermedi) e aprire le porte del firewall rende impossibile la connessione diretta (a parte VPN o altri meccanismi non generalmente semplici).

In realtà esiste una soluzione che consente di trasferire i files direttamente (velocità massima), anche con uno o più router/firewall intermedi, senza installare nulla da ambo le parti e molto velocemente: Bittorrent !

E sufficiente creare il torrent dal file nel proprio pc, quindi inviarlo all’amico (pochi kb) tramite e-mail o client di messaggistica.

L’amico apre il torrent e inizia a scaricare subito. Potete anche traferire il file tra più amici, e i tempi diminuiranno ulterioremente (ogni amico scaricherà parti anche dagli altri amici), avendo in effetti una rete P2P tra di voi.

Potete anche decidere il limite di upload e settare altre opzioni dal programma torrent.

Questo metodo è stato testato con il gratuito, funzionale e no-install UTorrent. Ecco la semplice procedura: Dal menu “File” -> “Crea nuovo torrent”, scegliere il file, inviare il file “.torrent” creato all’amico, impostare la velocità di upload ed eventualmente forzare l’avvio col tasto destro (il torrent creato appare nel vostro elenco in “seeding”). Vedi screenshot (click per ingrandire).

 

Seeding con UTorrent

Seeding con UTorrent

 

grub ubuntu linux

grub ubuntu linux

Ennesimo post per smanettoni. Questa volta si parla di boot loader nei PC ovvero i programmi installati nell’MBR che caricano i Sistemi Operativi.

 

Per chi non lo sapesse: cosa sono i boot loader

L’installazione di un sistema operativo comporta l’installazione di un boot loader, che in genere aggiunge alle scelte iniziali i sistemi operativi precedenti. Closì se installate Windows poi ubuntu, o xp e poi Windows Seven vi trovate (problemi a parte) un bootloader che vi fa scegliere quale avviare.

Alcuni problemi

Può succedere che il boot loader non rilevi correttamente un sistema operativo, o una installazione/ripristino di un sistema operativo sovrascriva l’MBR e perdiate i dati d’avvio di un sistema operativo.

Personalmente mi è capitato che il ridimensionamento della prima partizione mi abbia compromesso il boot loader di Windows Seven, problema risolto con il relativo dvd in modalità ripristino . Quest’ultimo ha però riscritto il boot loader cancellando quello di grub (boot loader di ubuntu, installato per ultimo). Conoscendo Microsoft era quasi ovvio che non considerasse neanche l’eventualità di una presenza del concorrente s.o. open source.

Procedura per reinstallare il boot loader GRUB in linux ubuntu 8

  1. avviare il cd live di ubuntu (lo stesso usato per l’installazione)
  2. aprire la console (terminal) e avviare grub
    sudo grub
    vi si avvia la console di grub in cui digitate i comandi 
  3. cercare la partizione di avvio con
    find /boot/grub/stage1
    ceh vi risponderà ad esempio con (hd0,6 ), cioè linux si trova nella sesta partizione del primo disco
  4. installare il boot loader con 
    root (hd0,6)
  5. scrivere l’mbr con
    setup (hd0)
  6. chiudere con
    quit 
  7. riavviare tutto

Se non ci sono errori grub verrà installato nell’MBR e rileverà correttamente ogni altro sistema operativo installato (anche quelli MS !!).

Programmino utile con interfaccia grafica per modificare  le voci

Se riuscite ad avviare Vista o W7, potete usare anche il gratuito  easyBCD, che permette di modificare la lista dei sistemi operativi installati con un’interfaccia grafica intuitiva. La versione corrente 1.7 riconosce senza problemi i so microsoft installati, per linux prevede l’uso di neogrub che però non mi ha rilevato ubuntu esistente di cui sopra.

In alternativa al formato PDF, esiste un formato alternativo per leggere documenti formati da una sequenza di immagini (manuale o libro scannerizzato, ecc…).

Il formato è CBR (Comic Book Rar, usato più che altro per scambiarsi fumetti nelal rete ma utilizzabile anche per altri scopi) e non è altro che un archivio ZIP o RAR contentente SOLO i files JPG delle varie pagine (ordinati alfabeticamente).

Per leggere e navigare in tali files esiste un programma gratuito e molto funzionale, con funzioni simili ai comuni pdf reader (navigazione,  autoregolazione immagini, fit a schermo,rotazione, anteprima pagine, shortcuts da tastiera, filtri per resize): CDisplayEx  scaricabile a questo indirizzo:
http://sourceforge.net/projects/cdisplayex

Per creare files CBR partendo da immagini presenti, è sufficiente zipparli e cambiare l’estensione del file creato in CBR, in questo modo sarà immediatamente visualizzabile, senza dover convertire tutto in un pdf.

Molti pensano che per reinstallare il sistema operativo sia necessario formattare la partizione, Il che significa perdere giornate a salvare Gb di dati (documenti, posta, file di programma) su dischi esterni e dvd, rischiando sempre di perdere qualcosa.
Per reinstallare ad esempio Windows XP non c’è bisogno di formattare la partizione (di seguito la chiamo "C:") in cui è contenuto.

Consiglio una procedura veloce e sicura e testata più volte che :

  • consente di installare il sistema operativo senza cancellare nessun files (compresi quelli del sistema operativo precedente e programmi)
  • documento, files dei programmi, posta. ecc. si recuperano dopo con calma in qualsiasi momento
  • reversibile: permette di anche di  ripristinare in un attimo il vecchio sistema operativo.
  • permette di togliere di mezzo i virus, ovuque siano
  • permette di recuperare anche i drivers e impostazioni dal vecchio sistema operativo
  • le impostazioni di xp e programmi iniziali vengono resettate (come se la partizione fosse formattata)
  • recuperare anche alcuni programmi installati senza reinstallarli da cd / dvd

Prima di iniziare: masterizzarsi xp su live cd - con bartpe (* vedi sotto)  -  o ubuntu live che comprendano n un compressore di files (per bartpe consiglio winrar).
La procedura consiste nell’installare una nuova copia di xp, nascondendo prima tutti i files della vecchia installazione (windows cerca altrimenti di recuperare impostazioni e files di programma).

  1. avviare il computer con il live cd
  2. dal file manager del live cd "(A43 file manager" in bartPE) creare una cartella "c:\old" e spostarci TUTTO il contenuto (files e cartelle) della partizione
  3. Per evitare che la nuova installazione rilevi la copia esistente: comprimere la cartella "c:\old\windows" (es: con winrar, presente sul disco o sul cd) (funziona anche senza installazione con i files eseguibili), poi cancellare la cartella
  4. installare xp sulla partizione e "lasciare intatto il file system corrente", così nessun file verrà cancellato.
  5. Se il punto 3 è stato eseguito, l’installazione non rileverà nessuna copia di xp e verranno create nuovi files in "c:" e nuove cartelle "windows", "c:\document and settings", "c:\programmi"
  6. Se erano presenti virus, si può installare virus aggiornato e scansionare "c:\old" (notare che "c:\old" non è letta in fase di installazione e i virus eventuali lì dentro rimangono isolati).
  7. se mancano alcuni drivers, (estrarre prima lo zip di windows creato al punto 3) dire a xp di cercarli in "c:\old\windows\inf" (se chiede qualche files specifico, darlo manualmente cercandolo in "c:\old")
  8. per recuperare i documenti, cercare in "c:\old". In "c:\old\document and setting\<nome>\" ci sono le cartelle con i files dei documenti e desktop
  9. i programmi vanno quasi tutti reinstallati. Notare che alcuni ex programmi potrebbero funzionare anche senza installazione, provarli da "c:\old\programmi". In tal caso basta spostarli in "c:\programmi" e ricreare i collegamenti.
    Consiglio in ogni caso di rimedarsi le versioni portabili  (vanno cioè senza installazione). c’è una versiona portabile di quasi ogni programma esistente, cercate su google.
  10. Se si vuole tornare indietro e ripristinare il vecchio xp: riavviare bartpe, creare cartella "c:\new", spostarci tutti i files della partizione (tranne "c:\old"), spostare i files in "c:\old" in  "c:\" (il vecchio xp torna a funzionare poichè i files di avvio sono gli stessi).

* Con bartpe è possibile creare un cd live di xp, ovvero un cd che avvia il computer con il sistema operativo su cd ignorando completamente il sistema operativo sulla partizione/disco e contiene un file manager che consente di salvare/spostare i dati. 


BACKUP DI XP

Con bartpe+winrar si può fare anche un backup di tutto il sistema operativo (come immagini della partizione con norton ghost o drive image).
BACKUP: avviare bartPE, quindi creare archivio winrar o zip (si può lasciare anche nella stessa partizione, es: "c:\backup.rar") con i files in "c:\" , "c:\programmi", "c:\documents and settings", "c:\windows" (programmi portabili, documenti e posta meglio spostarli, non servono per il sistema operativo). 
RIPRISTINO: avviare bartpe, quindi estrarre l’archivio (nel dubbio spostare prima tutto in "c:\old", poi estrarre).

Notare che il bootloader deve essere già installato (salvarlo con qualche programmino o utilizzando la console di ripristino di windows xp, comandi fixboot e fixmbr)

Per lanciare uno script nel browser bisogna lanciare il server, poi specificare la url in localhost al giusto path.
Propongo un batch in autoit che fa tutto questo con un click sul menu contestuale del file di script.
Idea:
se un file è presente in c:\www\sito1\file.php  bisogna lanciare http://localhost:8080/sito1/file.php.
quindi basta rimpiazzare i prefissi e sostituire gli slashes per ottenere la url del server localhost.

Ecco un codice funzionante (scarica anche da qui e ammetti di essere pigro ), da personalizzare con i propri path, poi compilare (tasto destro->compile) ed associare ai files di script.
vedi i commenti

$apacheDocumentRoot = "e:\" ; vedi DocumentRoot in httpd.conf
$apacheUrlRoot = "http://localhost:8080/"  ; oppure 127.0.0.1:<porta>
$nomeEseguibileServer = "EasyPHP.exe" ; anche xmapp o Apache.exe
$pathEseguibileServer = "E:\siti\easyphp\EasyPHP.exe"; vedi sopra
$testoTrayTipWindows = "lancio pagina php in locale"
$timeoutSecondiTrayTipWindows = 6
$pathBrowser = "E:\applicazioni\internet\Mozilla Firefox\firefox.exe"
$parametriBrowserAfterUrl = "-url" ; internet explorer non vuole parametri, usare ""

If ($CmdLine[0]==0) Then MsgBox(0,"errore","passare lo script a linea di comando") Exit EndIf
$url = $CmdLine[1]
$url = StringReplace($url, $apacheDocumentRoot, $apacheUrlRoot)
$url = StringReplace($url,"\","/")
TrayTip ( $testoTrayTipWindows , $url, $timeoutSecondiTrayTipWindows , 1 )

If NOT ProcessExists($nomeEseguibileServer) Then
    Run($pathEseguibileServer)
    Sleep(5000)
EndIf

Run(""""&$pathBrowser &"""" & " " &$parametriBrowserAfterUrl &  " " &  """" &$url & """")

Premesso che per fare piccole modifiche veloci a scripts PHP ci sono molti editor personalizzabili, ho recentemente cercato un ambiente di sviluppo IDE per PHP gratuito, da usare per progettare applicazioni + complesse su Windows.
Il primo che ho provato è Netbeans for PHP. Netbeans lo ritengo uno tra i più completi IDE per Java, a molti non piace per la sua pesantezza, e in effetti è pesante, ma è il prezzo da pagare per avere il massimo delle funzionalità. E quando si ha a che fare con progetto complessi, le funzionalità aiutano eccome. Da precisare che ci vuole molto tempo ad avviare l’IDE, poi si lavora con fluidità sui progetti aperti.
Dallo screencast  vedo già che supporta le classiche funzioni Netbeans per Java, refactoring, evidenziazione codice, autocompletamento (anche di metodi importati da classi create dall’utente e incluse in qualsiasi modo), debugging,  templates e abbreviazioni. L’ide installato occupa meno di 90 Mb e non interferisce con altre installazioni di Netbeans.
Interessante è anche l’editor HTML (ovviamente non WYSIWYG) che segnala errori di tag non corrispondenti e ha una piccola palette dei tag,  oltre a fornire - in autocompletamento - l’elenco degli attributi disponibili per il tag corrente con tanto di documentazione onscreen.
Molto interessante anche l’editor Javascript che evidenzia sintassi ed errori del codice, autocompleta funzioni degli oggetti javascript, refactoring di variabili e funzioni ecc..
Stessa cosa per CSS: evidenziazione, autocompletamento selettori e attributi, con tanto di palette per selezionare caratteri, colori, bordi, posizioni.
Utile anche la funzione di download/upload FTP dei files che avviene sui corrispondenti path remoti nel server.
Sono rimasto invece deluso da Eclipse PDT dato che molti optano per eclipse piuttosto che netbeans. I tempi di avvio sono simili a quelli di Netbeans PHP. Non è possibile facilmente creare un progetto da files esistenti. la visibilità su metodi e funzioni incluse non ha funzionato bene in alcuni casi, il refactoring delle funzioni e metodi non ha funzionato. Il resto delle funzionalità (autocompletamento e altro anche per CSS e javascript) mi sono invece sembrate ottime e paragonabili a quelle di Netbeans.
So ora dell’esistenza di Dev PHP, quindi forse lo proverò sperando di poterlo usare come alternativa leggera.
Tempo fa ho provato Zend Studio (5.5 mi pare) e immagino che adesso sia almeno all’altezza dei 2 sopra, peccato che sia pagamento.
Sono curioso dei vostri commenti e di sapere cosa voi usate.

Ho appena scoperto una utility molto interessante per chi usa molto Gmail, che consente di effettuare il backup di tutta la posta gmail sul pc. Il programmino in questione si chiama Gmail Backup e lo trovate a questo indirizzo:
http://www.gmail-backup.com/
Disponibile per Windows e Linux,  licenza: gratuito !!

Perchè effettuare un backup ? i server di gmail sono sicuramente più affidabili dei nostri cd/dvd e hd, ma tenete in considerazione non tanto del fatto che il servizio gmail - che funziona benissimo - sia in versione beta, ma più che altro dell’eventualità di altri problemi (furto di identità, congelamento casella per inattività o disposizioni legali). Se non siete abbastanza geek e non vi bastano questi motivi, sul sito del programmino potete leggerne altri .

Come funziona
basta attivare IMAP nei settaggi di gmail, poi avviare il programma e inserire (oltre alle credenziali), la directory del pc dove scaricare le e-mail. E’ possibile specificare anche un intervallo di tempo (verranno scaricate solo le mail inviate e ricevute in tale periodo) o di scaricare solo le nuove mail. La procedura di backup mostra indicatore di avanzamento e crea nella cartella files EML (gli stessi salvati e leggibili da outlook ma anche da un editor di testo/html qualsiasi essendo memorizzati in ascii, ovviamente contengono anche gli allegati grazie a MIME) nel formato YYYYMMDD - <ID>.eml che consente ordinare e classificare per data. Sotto uno screenshot della procedura di avanzamento.

Linux: splittare files

Per spezzare un file in più parti dalla shell linux:
split –bytes=80m –verbose file.tar pezzo_file
(spezza file.tar in pezzi da 80 Mb: pezzo_fileaa, pezzo_fileab, … ecc)

Per ricreare l’originale basta concatenare la lista dei pezzi e redirigere l’ouput sul file da ricreare:
cat pezzo_file* > file.tar

Ecco la seconda sfida geek/nerd, solo per smanettoni !
Stavolta ho due hosting linux (supporto php, niente ssh) e voglio trasferire il contenuto da uno all’altro.
Il server di destinazione ha svariati Gb di files, da replicare esattamente nella directory dell’hosting di destinazione con la stessa struttura.
Scaricare e uploadare tutto è una soluzione da scartare (troppo tempo e timeout ftp).

Mia soluzione
caricamento di uno script php (in entrambi gli hosting), che permette di eseguire comandi shell (istruzione system di php).
Hosting sorgente: compressione del contenuto tramite comandi tar e gz.
Hosting destinazione: wget (scaricamento del file da server a server), quindi decompressione del file tar.
Problema: sull’hosting sorgente lo script php va in timeout prima di comprimere tutto e devo ripetere la procedura a gruppi di files.
Altre proposte ?

Uno svantaggio di una applicazione locale php rispetto a una applicazione eseguibile (visual basic, java ecc..) è che sulla macchina bisogna installare il webserver e l’interprete, poi fare lanciare il browser alla url locale corretta.
A breve dovrò distribuire un’applicazione creata con php da installare su computer locale windows. Requisiti: sorgenti ofuscati, facilità di installazione (procedura guidata per installazione, creazione collegamenti su desktop e menu).

Come fare in modo elegante ?
La soluzione che proverò sarà di crea un installer per

  • easyphp o xmapp con php5 (db sqlite, no mysql)
  • scripts php ofuscati con bcompiler
  • launcher che controlla che sia avviato il webserver e lo fa in modo invisibile se non avviato, quindi lancia il browser su http://localhost:porta/cartella

Altre idee ?

testo dinamico flashNon tutti sanno che il testo inserito nei file flash (animazioni vettoriali per pagine web visualizzabili con plugin del browser, estensione file SWF) è possibile cambiarlo dinamicamente con un parametro del codice html che include il plugin.

Esempio: menu di navigazione multilingua

Nel codice di inclusione del file flash, modificare la url di inclusione del swf aggiungendo i parametri (scritti dinamicamente lato server, in questo caso con php)
<embed src="menu.swf?lang=<?=$lang?>" …>
($lang è la variabile php che contiene le "it" o "en" o "fr" per le 3 lingue)
Come creare il file flash:

  • Creare le caselle di testo, testo centrato (per menu orizzontali, il testo cambia !), inizialmente riempiti con la lingua italiana
  • associare le caselle di testo a delle variabili
    swishmax: casella di testo -> proprietà -> testo dinamico -> variabile
    macromedia flash: procedura simile (variabili associate)
    In questo esempio: pulsanti "azienda", "servizi", "contatti" associati a variabili azie,serv,cont.
  • nel frame 0 inserire uno script di questo tipo:
    if (_root.lang=="en") {
            azie = "OUR COMPANY";
            serv = "SERVICES";
            cont = "CONTACTS";
           
        } else if (_root.lang=="fr") {
            versione.text = "version francaise";
           
            azie = "L’ENTREPRISE";
            serv = "NOS SERVICES";
            cont = "CONTACTS";
           
        }
     

Se chiamate il file flash impostando la $lang, conterrà il testo nella relativa lingua per i pulsanti
Capito qualcosa ?

Ho realizzato un progetto in C, che con alcuni input impiega diversi minuti prima di restituire risultati.
Mi sono chiesto se compilando lo stesso codice con compilatori diversi, i tempi di esecuzione degli eseguibili risultanti fossero diversi. Per il momento ho testato solo su win Xp visual studio 6, visual studio 2005, il gratuito Dev-C++  (compilatore GCC, opzioni di ottimizzazione attivate).
Ecco il grafico risultati, più o meno quelli che mi aspettavo, continuerò ad usare Visual studio 6.
Appena riesco testerò anche con Linux e Gcc.

Posto un trucchetto che mi è venuto in mente per avere semplice form anti-spam in una pagina web, senza controlli complicati captcha.

L’idea è che lo spam attraverso i form deriva da robots (ovvero programmi automatici) che analizzano le pagine web, e quando vedono un <form>, effettuano una chiamata alla pagina indicata nella action riempendo gli input con spam e postando.

Si può effettuare un semplice controllo antispam facendo una domanda del tipo ‘quanto fa 4-5 ?’ chiedendo di riempire il campo (quindi accettare il form solo se tale campo ha valore 9), oppure una soluzione tramite javascript/php che all’utente non chiede nulla:

client:

  • inserire campo aggiuntivo hidden
     <input type="hidden" name="conferma" value="" />
  • non mettere un tasto submit, ma un tasto button che (onclick) setta il campo hidden e poi effettua il submit
    <input type="button" name="Submit" style="font-weight:bold" value="Invia" onclick="this.form.conferma.value=’<?=time()?>’; this.form.submit()" />

server:

  • effettuare un controllo sul valore del campo conferma. Qualora il valore sia troppo diverso (e quindi probabilmente derivante da un robot o proveniente da un’altra pagina), scartare la richiesta.
    if (abs($_POST['conferma'] - time()) > 3600) exit("spam !!");
     

Controllo eventuale aggiuntivo: controllare il $_SERVER['HTTP_REFERER'] che sia quello della pagina che invia il form.

Per ovviare ai clients che non supportano javascript, si potrebbe scrivere il form html con il campo conferma di tipo text (scrivendo accanto che cosa s) e il pulsante submit di tipo submit

Mysql offre una interessante funzionalità : la ricerca fulltext, con la quale è possibile creare un indice su più campi, quindi cercare velocemente i record che contengono le parole cercate nei records della tabella.

Esempio:
tabella prodotti di un negozio

creare indice con
ALTER TABLE prodotti ADD FULLTEXT(`nome`, `marca`,`descrizione`)

quindi eseguire le query così: (parola cercata: dolci)
SELECT *,MATCH(`nome`, `marca`,`descrizione`) AGAINST(’dolci’) as pmatch
FROM prodotti
WHERE MATCH(`nome`, `marca`,`descrizione`) AGAINST(’dolci’) > 0
ORDER BY pmatch DESC

Il risultato è una tabella con una colonna in più "pmatc", che contiene un numero indicante la pertinenza (più alto => più record che contenevano la parola).
In pratica MATCH(`nome`, `marca`,`descrizione`) AGAINST(’dolci’) restituisce un punteggio della parola rispetto ai campi del relativo record. E’ necessario ripeterla due volte nella query per problemi di visibilità della clausola where dentro la query.
Indicativamente la pertinenza corrisponde al numero di volte che la parola viene trovata nei campi dell’indice.
Attenzione: l’indice considera el parole per intero, quindi "dolci" o "dolc" NON trova nessun record che contiene "dolce", a differenza di una LIKE ‘%dolc%’

debug con php

continuo lo spam php-tecnologico.
PHP gestisce a meraviglia gli array, da una funzione è addiruttura possibile vedere tutte le variabili utilizzate (comprese quelle passate in get, post, sessioni, cookie e ambiente). Allora perchè non fare una funzioncina da includere a fondo di ogni pagina quando il sito è ancora in fase di sviluppo per debuggare il codice ?
Sfruttando al print_r (stampa strutturata dell’array n-dimensionale), suggerisco di stampare il contenuto di $_GET, $_POST $_SESSION e infine $_GLOBALS

include "debug.php";   //da commentare per il deploy

debug.php
function f() //stampo vars in textarea
{
  print 
"<textarea rows=20 cols=100>";
  print 
"\$_POST = ";  print_r($_POST);
  print 
"\n\$_SESSION = "print_r($_SESSION);
  print 
"\n\$_GET = "print_r($_GET);
  print 
"\n\$GLOBALS = "print_r($GLOBALS);
  print 
"</textarea>";
}
f();

Screenshot:



 

Ultimi post

About Me

Blog tecnico/geek di Elvis. Chi sono ? studente & web developer freelance. Vedi la pagina "about me" per altre info.

scontiPHP