sabato 7 gennaio 2012

servizio di shorturl scritto in 12h!

Per un mio studio sui microframework (studio orizzontale da css a js, da sql a php), ho deciso di fare un piccolo tour de force e realizzare un servizio di rimpicciolimento degli url utilizzando slim microframework come base (come middle-end diciamo), utilizzare framework css e js sul front-end e volevo utilizzare notorm.php per accedere ai dati, ma le query erano talmente semplici che mi è venuto più naturale scrivere l'sql quindi ho optato per utilizzare PDO e buona notte... (magari in una futura versione passo a notorm).
Torniamo al lato client, invece di utilizzare jquery ho optato per ender una libreria no-library che permette di costruirsi la propria versione in maniera modulare... be a me serviva fondamentalmente manipolazione del dom, ajax ed eventi, ho ottenuto un 19k minified gzipped contro i 31k di jquery minified gzipped (ho risparmiato 12k perché come dice gozzilla size matter)
perchì fosse interessato il mio build di ender per questo progetto è:
ender build domready qwery bean bonzo reqwest
(per installare ender servono node e npm)
Per i css essendo io un non-designer (cioè sono capace di buttare giù layout in css ci mancherebbe ma ci metto giusto giusto quei 6-7 giorni, meglio fare altro no?) avevo testato bootstrap di twitter ma visto che avevo già rotto le scatole abbastanza a fat per richieste su ender ho optato per toast.
Infine ho usato un semplice sqlite3. (magari in una prossima versione valuto altri db, comunque con pdo alla fine è solo una stringa di configurazione)
L'algoritmo per la generazione degli hash degli url accorciati è la cosa più stupida che mi è venuta in mente è utilizzare semplicemente un indice progressivo in base 36 che utilizza quindi numeri e lettere in maniera case insensitive, quindi facilitare la vita a chi vuole scrivere magari tutto maiuscolo o minuscolo senza problemi.
è una buona idea? nzomm' in base di 62 ci si guandagnava na cifra..
Comunque anche in base 36 già con 4 lettere si gestisce:
36*36*36*36-1 => 1.679.615 redirezioni visto che non voglio andare a competere con goo.gl diciamo che ci posso stare.
Il codice grazie ai microframework che semplificano la vita è molto semplice mappo 3 azioni: index, /:hash, /short/ (rispettivamente in get,get e post) sulle funzioni: servi il modulo, recupera _link_per_hash_da_db_e_ridirigi e genera_hash_da_url.
Un po di ajax un pò di css e zack il gioco è fatto.
Ho messo tutto su github, è una versione preliminare ed essendo scritta in tuor de force spero non ci sian castronerie.
https://github.com/micheg/piqo
Ah oh dimenticavo c'è pure: una demo qui.
Aggiunta dell'ultimora:
Mi han fatto notare che un servizio di short url a cui serve il www davanti è inutile... ok bè lo so, ho lavorato sui dns vediamo quanto ci mette a propagarsi la modifica!

2 commenti:

evilripper ha detto...

se clicco due volte sul bookmarklet si forma
http://piqo.it/goo/?url=http://www.piqo.it/goo/?url=http://www.piqo.it/

e tophost restituisce errore 406 :-D

cmq mi pare un ottimo lavoro!
Volevo chiederti ma slim framework ha anche un layer per connettersi ai database? thanks

ciao

michelangelo giacomelli ha detto...

No slim non ha un layer di connessione hai database ma ci sono dei microframework ottimi per l'accesso hai db:
* notorm
e poi miei preferiti (e che vanno a braccetto)
* idiorm e paris
http://j4mie.github.com/idiormandparis/
e scusa per la risposta tardiva