MaurizioFonte.it
Archivi
| Giugno 2009 (10) |
| Dicembre 2009 (4) |
| Maggio 2010 (1) |
| Ottobre 2010 (1) |
| Dicembre 2010 (1) |
| Maggio 2011 (2) |
Commenti
| Berflux in How To Unblock Facebook, Youtube and Myspace - Zerofilters.info, il 29.12.10 alle 11:36:18 |
| Berflux in How To Unblock Facebook, Youtube and Myspace - Zerofilters.info, il 29.12.10 alle 11:34:49 |
| Berflux in How To Unblock Facebook, Youtube and Myspace - Zerofilters.info, il 29.12.10 alle 11:34:40 |
| hexan in Installare Windows XP sull'eeePC - FlashEEE, il 16.07.10 alle 12:35:45 |
| Maurizio in Visualizzare siti bloccati a lavoro: senzafiltri.it, il 27.04.10 alle 13:31:24 |
| CArlo in Visualizzare siti bloccati a lavoro: senzafiltri.it, il 01.04.10 alle 10:37:33 |
| Giovanni Stragalappa in Visualizzare siti bloccati a lavoro: senzafiltri.it, il 21.01.10 alle 21:28:04 |
| Maurizio in 2gb di ram per l'eeePC!!, il 10.06.09 alle 15:19:26 |
| Francesco in 2gb di ram per l'eeePC!!, il 09.06.09 alle 15:03:27 |
Un buon sito si costruisce prima di tutto creandolo con funzionalità multilingua. Ovvero, sulla base dell'IP dell'utente, cercare di mandare in output il sito nel suo linguaggio senza troppi fronzoli tecnici.
Questo si traduce, nella pratica, nella creazione di un sito con una buona classe di traduzione delle stringhe on-the-fly, un pò come fa wordpress. Per esempio, wordpress fa uso dei file di traduzione *.po e *.mo.. Si definisce una stringa, con la sua "chiave primaria" nel linguaggio che si vuole, ad esempio:
A questo punto, aiutandovi con le funzioni di output buffering, e sulla base della geolocation dell'IP dell'utente che sta visualizzando il sito, potete mandare in output la traduzione corretta della stringa This is the main key for the string "this is the main key for the string"
In internet esistono svariate classi che permettono la geolocation. A me personalmente non piace fare le cose semplici, e mi piace avere la situazione sotto controllo. Quindi, mi sono documentato, e ho trovato un sito che permette il download di un file di mapping tra indirizzi IP e stati.
Avendo in mano un file del genere, è possibile creare un DB che abbia le referenziazioni tra IP e location, e così possiamo dare sfogo alla nostra creatività in termini di output da mandare all'utente ^^
Prima di tutto, prepariamo i DB che contengono i dati del DB IP-to-country
Adesso, passiamo alla parte divertente, cioè al parsing del file di mapping IP-country e al relativo salvataggio dei dati nelle nostre 2 tabelle mysql
Per avviare questo codice, avrete bisogno di 2 api key:
- Una api key del servizio http://www.ipinfodb.com/ - rimpiazza la stringa "la-chiave-api-del-sito-ipinfodb.com" all'interno del sorgente qui sopra con la tua api key
- Una api key del servizio Google Translate API - rimpiazza la stringa "la-tua-api-key-google.translate" all'interno del sorgente qui sopra con la tua api key
Una volta fatto tutto, potete schedulare questo script per l'esecuzione automatica con un cronjob. Anche una volta alla settimana va bene, non è necessario farlo partire ogni ora ^^
Ora, ti starai chiedendo: e come faccio a stabilire la geolocation dell'utente con questi due database? Bene, ecco le poche linee di codice per sfruttare le tabelle.
Con la country_id per un particolare IP, sarà vostro compito stabilire quale lingua mandare in output all'utente.
Ovviamente, questo database può avere tantissimi risvolti pratici. Un altro che mi viene in mente è la geolocalizzazione di server proxy, o la geolocalizzazione degli IP di una applicazione di tracciamento degli utenti.
Insomma, con le tabelle IP-to-country avrete a disposizione tantissime possibilità di sviluppo e soprattutto, avendo in mano i dati nel vostro DB, potrete generare i volumi di traffico che desiderate per quanto riguarda le geolocation calcolate per ora. Infatti, alcuni servizi online di geolocalizzazione, vi impediscono di fare più di un tot di query all'ora.
Se hai un sito qualsiasi, dove richiedi la registrazione per usufruire del sito, molto probabilmente non hai mai pensato che le email che gli utenti utilizzano per registrarsi possano diventare denaro..
L'argomento che andrò a trattare oggi è un pò scottante, lo ammetto: le email di spam, pubblicitarie, sono davvero fastidiose. Ma se abbiamo un sito, e stiamo richiedendo la verifica dell'email dopo la registrazione, quelle email valgono oro.
Il problema, però è il seguente: nessun advertiser accetterà mai delle liste di email nelle quali l'utente non abbia specificatamente dichiarato di voler ricevere delle email pubblicitarie.
Quindi, come facciamo a trasformare un semplice e scarno database di contatti email in un vero e proprio database di email DOUBLE OPT-IN?
Beh, lasciamo fare il lavoro sporco a PHP+mySQL. Per prima cosa, creiamo le tabelle del database per eseguire gli script che faranno funzionare il gioco:
Ovviamente, all'inizio, tutti i contatti dovranno essere inseriti dentro il database "email_marketing_contacts". Sarà vostro compito creare uno script che tenga aggiornato il database dei contatti, senza sovrascritture delle email o compagnia bella.
A questo punto, diamo un'occhiata agli script PHP per creare la nostra bella lista di email double opt-in. Servono:
- Uno script per la creazione di "newsletter" da mandare a tutti i contatti di "email_marketing_contacts"
- Uno script ( magari cronnato ) che invii le email, magari a scaglioni di 100 per volta, per evitare che i servizi di web hosting economici rompano le scatole se inviamo troppe email per volta
- Una pagina cliccabile nell'email che arriverà agli utenti, nella quale l'utente possa scegliere se iscriversi double opt-in oppure disiscriversi completamente
Codice 1: Creazione delle Email
Codice 2: Invio delle Email Effettivo
Codice 3: Pagina di Ponte da linkare nell'email, per fare in modo che l'utente faccia la sua scelta
Capito tutto? In pratica, creiamo delle email con lo script 1. Le email saranno inviate in doppia modalità testuale+html, per rendere le email un pò più professionali. Questo significa che dovrete creare un testo e un sorgente html per la vostra email. Quindi, darete in pasto questi 2 sorgenti a questo script, che creerà un oggetto "email_marketing_lists" con oggetto, parte html e parte testo del vostro messaggio.
Una volta creata questa riga nel DB, non vi resterà che settare con un cronjob lo script di invio delle email ( il mio consiglio è di settare il cronjob per eseguire lo script ogni ora ).
Poi, tutto il resto lo farà la pagina di settaggio delle opzioni delle email degli utentu (script 3). Sarà vostro compito inserire, all'interno dell'email ( sia in formato testo che html ) un link alla pagina di modifica opzioni in questo formato:
http://www.ilmiodominio.it/lamiacartella/unaltra/index.php?u=$$ID_UTENTE$$
Lo script di invio delle email rimpiazzerà automaticamente questo placeholder con l'id effettivo del DB dei contatti di quella email. Il risultato? L'utente andrà a cliccare su un link che lo porterà ad una pagina che è già impostata sul suo id, quindi modificherà i dati suoi.
Avete visto quant'è semplice creare una lista di email double opt-in partendo da una lista che non è stata pensata per questo? Qualsiasi email si può trasformare in un potenziale introito di denaro extra con le email pubblicitarie!
Quanti di voi non conoscono la libreria javascript jQuery? Penso pochi, se non nessuno. La potenza espressiva di questa libreria javascript permette una vastità quasi infinita di metodi di accesso agli elementi del DOM. La parte più interessante di questa libreria è senza dubbio la potenza del motore di selezione degli elementi, il Sizzle CSS Selector Engine.
Ora, quanti di voi programmatori PHP si saranno chiesti se questa potenza dei selettori sia applicabile anche a script PHP server-side che fungono da data crawler o data mining?
Penso parecchi.
Navigando in internet, ovviamente, la soluzione è già stata trovata ed il suo nome+link è PHPQuery Ecco un rapidissimo esempio di quello che questa classe può offrire: scarichiamo la index di google e troviamo i suoi link nel footer (Pubblicità, Soluzioni Aziendali, Tutto su Google, Google.com in English)
Non mi dinlugherò in altri esempi più complessi per mostrarvi la potenza della classe: la pagina ufficiale di PHPquery offre già un ottimo manuale con le spiegazioni dei "metodi" sfruttabili.
Buon Lavoro!Il problema della sicurezza è cruciale quando si sviluppa una applicazione in PHP. Se non vengono prese determinate precauzioni, un semplice script php come questo che sto per mostrarvi (una risposta xml, magari chiamata tramite ajax) può trasformarsi in un pericoloso buco per il vostro sito, e rendere possibile più o meno tutto a chi sta tentando di "lavorare" sopra lo script:
I problemi? Pessima programmazione: nessuna validazione dei dati, nessun controllo sul funzionamento della query, e in generale mancanza di occhio critico riguardo la sicurezza di uno script simile. Sarebbe aperto ad ogni tipologia di attacco.
Allora, come ovviamo a questo problema? In primis, programmando meglio. In secundis, facendoci aiutare da qualche classe che pulirà un pò i dati che vengono passati tramite GET e POST e che controlli un pò le impostazioni di sicurezza dell'environment (vedere register_globals per farsi un'idea)
Classe "Security PHP Class"
Classe vi validazione Server-Side "PHP Validation Class"
Non mi dilungherò molto nella spiegazione dell'utilizzo delle due classi, prendiamo sempre come esempio lo script errato che c'era ad inizio post e correggiamolo assieme, integrando queste due classi, e facendo un pò più attenzione :)
In questo esempio abbiamo istanziato la classe di sicurezza, abbiamo pulito la variabile superglobale $_GET per prevenire XSS, e abbiamo fatto una validazione in modo che l'unico parametro accettato sia un numero. Tutto il resto infatti può essere considerato un tentativo per bucare lo script :)
Ajax Calendar - Modulo Calendario in XML + Javascript
Quello che vedete sulla destra di questo sito è un calendario particolare, nel senso che è progettato per il funzionamento asincrono tramite ajax. In questa maniera si può facilmente integrare un modulo calendario in qualsiasi sito con pochissime modifiche e separando nettamente la parte "intelligente" del programma, cioè la creazione dei giorni a partire da un dato mese/anno, dalla parte "meno intelligente", quella di output verso il browser.
Ecco quindi spiegato il funzionamento, separato in:
- Script PHP Server-Side che crea l'xml con i dati del mese/anno
- Script client-side in Javascript per iniettare il markup del calendario verso il browser
- Un esempio di markup HTML per rendere funzionante il tutto
Codice PHP server-side (Creazione dell'xml della coppia mese/anno richiesta)
Codice Javascript per l'iniettamento del markup del calendario verso il browser
Esempio di markup HTML per rendere il tutto funzionante
Mischiare il tutto
Il codice PHP può essere salvato con un nome qualsiasi, solo bisogna ricordarsi di andare a modificare il file javascript e, sotto la parte di creazione della richiesta ajax, andare a modificare il nome della variabile che contiene le impostazioni della richiesta.
Ricordo che questo sistema implica forzatamente l'utilizzo della libreria jQuery per poter funzionare. E' chiaramente visibile nel terzo snippet di codice HTML, dove è specificato il richiamo del file jquery.js
La direzione che si sta cercando di seguire, parlando in termini di "standardizzazione" dei formati relativi alle pagine web, è quella di lasciar cadere piano piano l'utilizzo di Internet Explorer 6, che è rinomato per la sua non uniformazione agli standard odierni relativi ai fogli di stile CSS.
Questo fatto implica infatti un notevole impegno di tempo da parte degli sviluppatori web per cercare di "adattare" una pagina web - quindi un layout con un determinato foglio di stile - per il suo funzionamento pseudocorretto anche se viene visualizzata con Internet Explorer 6.
Gli strumenti che gli sviluppatori web hanno a dispozizione per far cessare l'utilizzo di Internet Explorer 6 sono molto pochi, e solo il tempo molto probabilmente consentirà un graduale abbandono di questo datato browser. E' altresì vero comunque che gli stessi sviluppatori web possono dare una mano nella velocizzazione di questo processo. Vediamo come.
Se avete sotto mano Internet Explorer 6, provate a visualizzare l'homepage di questo sito, ovvero mauriziofonte.it. In alto vi verrà mostrato un messaggio non invasivo che vi consiglierà l'aggiornamento del vostro browser. Nel caso specifico, nel messaggio presente in questo sito ho deciso di consigliare Mozilla Firefox, perchè personalmente lo ritengo un ottimo browser. Cliccando sul messaggio, verrete infatti reindirizzati alla pagina di scaricamento di Firefox, ovvero mozilla-europe.org/it/firefox/
Avere un messaggio del genere anche sul vostro sito è molto semplice, e servono pochissimi passaggi per creare questo effetto. Vediamo cosa serve per installarlo, nel dettaglio.
Il codice HTML del messaggio Il foglio di stile per il div del messaggioIl file immagine da me utilizzato che si chiama IE6alert.gif è disponibile per il download qui: IE6alert.gif
Il codice Javascript/Jquery che mostra e nasconde il divPer installarlo sulla vostra pagina, è sufficiente copiare il codice HTML del messaggio nel vostro template, è sufficiente aggiungere il codice CSS del div contenitore #ie6warning all'interno del CSS del vostro sito, e stessa cosa per il codice javascript. Dovrete avere però già abilitata e disponibile la libreria jQuery.
Così facendo, però, il messaggio sarà sempre visibile! Come fare quindi per mostrarlo SOLO nel caso in cui l'utente stia visualizzando la pagina con IE6??
Molto semplice. Basta fare un controllo lato server.
Per il mio caso specifico, mi sono basato su una classe di browser detection molto semplice ed intuitiva.
Una volta installata sul server, basterà inserire un codice php simile a questo all'interno delle routine di calcolo delle pagine:
Niente di particolarmente difficile. Pochi minuti per avere nel nostro sito un fantastico messaggio assolutamente non invasivo che consiglia l'aggiornamento del browser.
Per qualsiasi dubbio o chiarimento, non esitate a lasciare un commento.
Spesso le operazioni più basilari son quelle che richiedono un impegno notevole, in termini di mero tempo di programmazione.
Quante volte vi è infatti capitato di avere a che fare con operazioni con le immagini?
E' un problema in cui si incappa molto frequentemente se si ha a che fare con siti di un certo livello.
Girovagando per la rete, ho trovato una classe molto snella e facile da capire che permette basilari operazioni di ridimensionamento su ogni tipo di file immagine valido.
La classe è stata sviluppata dal sito white-hat-web-design.co.uk, e vi riporto in toto il codice con alcuni commenti in italiano per comprenderla meglio
Codice della classe SimpleImage.php
E adesso vediamo un codice di esempio di utilizzo pratico di questa classe, per effettuare le operazioni di ridimensionamento:Molto semplice ed immediato. In futuro proverò ad estendere la classe per abilitare operazioni come blur, crop, settaggio contrasto e luminosità , e magari anche watermarking.
Chi amministra un server web sa quanto è importante il discorso del salvataggio di quanto è stato creato, sia a livello di database sia a livello di file, di righe di codice scritte.
Per fortuna alcuni svegli programmatori di ngcoders.com hanno pensato a questo problema e hanno creato un piccolissimo script in grado di creare una copia di backup del filesystem e del database in una sola passata.
Sinceramente non ho trovato il nome di questo script, penso che lo chiamerò con un nome eloquente come 1-click filesystem and database backup tool
Il file .zip scaricato si compone di 3 file principali, scritti in php:
- backup.php : lo script principale da richiamare per avviare il processo di backup
- functions.php : le classi e le funzioni principali che creano fisicamente i backup
- config.php : il file di configurazione semplice nel quale specificare le opzioni del backup che vogliamo ottenere
Niente di più semplice e niente di più funzionale: uno di quei tool che un Web Developer dovrebbe sempre tenere sotto mano, una sorta di chiave inglese da 10 del programmatore php/mysql
Ecco il link per scaricare il programma: script per la creazione di backup di file e databaseBuon lavoro!
Caricamento...