Passa ai contenuti principali

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!

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
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

Post popolari in questo blog

Notebook senza Sistema operativo qualcosa si muove :)

Ok in passato ho recensito con piacere diversi notebook a basso costo con linux a bordo, ma oggi a causa di un cliente che necessitava di 4 notebook con freebsd (al momento non divago ma ci tornerò a breve) ho setacciato il web alla ricerca di notebook "degnamente potenti" ad un costo accessibile ho un bugdet di 2000 euro installazione compresa gh:(.. Be' in passato ho parlato bene di syspack, unieuro, mediaworld e tecnologie creative oggi prendiamo in esame monclik, allora da questo ottimo rivenditore ho trovato un notebook msi molto molto carino: Dimensioni schermo 15.4 Widescreen Tipo processore Core 2 Duo (Centrino Duo) Velocità del processore 1.7 GHz Memoria RAM 1 GB Hard disk 120 GB Peso (Kg) 2,87 Sistema operativo Non Presente Connessioni Ethernet e wireless Unità ottiche Masterizzatore DVD±RW Double Layer Webcam Non integrata Scheda grafica Intel GMA X3100 Un bel 15 e passa pollici :), gma x3100 che ha un ottimo supporto e un bel processore core 2 duo a 1,7 ghz il

osx e chm rigorosamente opensource

Per citare wikipedia: " Microsoft Compressed HTML Help o CHM è un formato proprietario per file di aiuto in linea, sviluppato da Microsoft e rilasciato nel 1997 come successore di Microsoft WinHelp. È stato rilasciato per la prima volta con Windows 98 ed è ancora distribuito e supportato sulla piattaforma Windows XP. I file HTML Help sono creati con appositi strumenti. Microsoft distribuisce l'HTML Help Workshop con le versioni supportate di Windows e lo rende disponibile gratuitamente per il download. Ci sono anche divers strumenti di terze parti ." Spesso e volentieri, per lavoro e per piacere, ci troviamo a dover leggere libri o documentazione tecnica in chm, visto che ultimamente mi trovo spesso ad utilizzare osx come piattaforma desktop principale spero che questa piccola recensione di quattro software opensource per la visualizzazione di questo formato possa essere utile a quanti utilizzano il sistema operativo della mela :) il primo software che presento è il mio p

CSS Callout for Bootstrap

A small css for the box-type "callout" similar to those used in the documentation of twitter bootstrap. (Boostrap is required :-)) /* callout like bootstrap docs */ .bs-callout { margin: 20px 0; padding: 15px 30px 15px 15px; border: 1px solid #eee; border-left: 5px solid #eee; border-radius: 3px; } .bs-callout h4 { margin-top: 0; } .bs-callout p:last-child { margin-bottom: 0; } .bs-callout code, .bs-callout .highlight { background-color: #fff; } .bs-callout-danger { border-left: 5px solid #dFb5b4; } .bs-callout-danger h4 { color: #B94A48; } .bs-callout-warning { border-left: 5px solid #C09853; } .bs-callout-warning h4 { color: #f1e7bc; } .bs-callout-info { border-left: 5px solid #d0e3f0; } .bs-callout-info h4 { color: #3A87AD; } .bs-callout-primary { border-left: 5px solid #285e8e; } .bs-callout-primary h4 { color: #428bca; } .bs-callout-