Skip to Content

Claudio Cicali – Web Developer and Solution Architect

Annunci

Ultimi miei 3 articoli su Edit di HTML.it

Video della mia presentazione OpenID

Develer ha messo a disposizione sul sito della conferenza Better Software il video della presentazione mia e di Lorenzo Cassulo su OpenID. È possibile visualizzarlo direttamente dalla pagina del programma grazie a Viddler. La presentazione è rivolta ad un pubblico non tecnico che conosca poco o nulla OpenID.


Lisearch: un plugin jquery per una diversa usabilità delle form di ricerca

Ammetto che trovare il titolo mi è costato quasi di più che scrivere il plugin; comunque: questo plugin per jQuery permette di trasformare una form di ricerca (o qualsiasi altra form simile) in modo da renderla di più immediato ed agile utilizzo secondo un paradigma che, lo ammetto, mi sono un po’ inventato io.

Il sistema parte dal presupposto che una form da modificare sia composta da:

  • un campo di testo
  • una lista di opzioni entro le quali cercare (devono essere radio button)
  • un tasto di invio.

L’utente, normalmente, scrive il testo da cercare, seleziona tramite radio button dove vuole effettuare la ricerca (lo scope della stessa) e preme il pulsante. Questo plugin trasforma i radio button in una lista che apparirà direttamente sotto il campo di ricerca non appena il campo di input prenderà il focus. Una volta scritto il testo da cercare, l’utente potrà cliccare direttamente lo scope dentro la lista per effettuare la ricerca. Il plugin crea la lista in modo da essere anche navigabile da tastiera, tramite tab, in quanto tutti gli item sono costituiti da elementi A; così, per una massima velocità di utilizzo, si scrive il testo da cercare, si preme tab e poi invio.

Un paio di immagini dovrebbero chiarire meglio il concetto.

Questa è la form di “partenza”, senza il plugin attivo:

lisearch0Una volta attivato il plugin, la form viene “collassata” in questa:

lisearch1Una volta che il cursore di sia portato nel campo di ricerca, ecco cosa succederà:

lisearch2

I radio button sono stati trasformati in una pseudo select box a discesa, navigabile tramite tab o mouse (non sono attivi i tasti cursore, perché l’impegno necessario è forse troppo rispetto all’effettiva utilità del plugin).

La form di esempio è questa; si può osservare come si usa il plugin:

<html>
<head>
<title></title>
<link rel="stylesheet" href="lisearch.css">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="lisearch.js"></script>
<script type="text/javascript">
$(function() {
  $('.scopes').lisearch();
});
</script>
</head>
<body>
<form>
  <ul>
    <li>
      <label>Frase da cercare</label>
      <input type="text" id="q" name="q">
    </li>
    <li id="scopes" class="scopes">
      <input type="radio" name="scope" value="italia"><label>In italia</label>
      <input type="radio" name="scope" value="europa"><label>In europa</label>
      <input type="radio" name="scope" value="mondo"><label>Nel mondo</label>
    </li>
    <li><input type="submit" value="Cerca"></li>
  </ul>
</form>
</body>
</html>

Insieme al plugin viene fornito un file CSS minimale che può servire per capire meglio gli elementi che vengono creati e dunque per poterli stilare. Ovviamente niente può sostituire Firebug, in questo contesto.

I test di funzionamento sono stati effettuati con jQuery 1.3.2 (l’ultimissima versione al momento in cui scrivo), ma credo che possa funzionare anche con versioni più vecchie.

Scarica il plugin oppure prova una demo


Il mio nuovo progetto: appdate.it

Da ormai qualche settimana è online il mio nuovo progetto; il suo nome è appdate.it ed è un sistema di tracking dei rilasci dei software più famosi.

Il sistema è ovviamente rivolto a chi lavora con quegli applicativi e le informazioni raccolte sono quelle strettamente sufficienti a ottenere lo scopo primario del sito; non esiste, dunque, una “scheda informativa” del progetto, ma solo un link alla home page del progetto.

La lista dei progetti viene aggiornata continuamente e al momento sono raccolti i progetti che io personalmente uso o ritengo di particolare interesse (per cui, sono famosi per me) ;)

Le informazioni sono raccolte andandole a prendere direttamente dal sito del progetto… ognuno di essi ha dunque un suo specifico bot (scritto in Python) che ad intervalli regolari se ne va a fare scraping e ad estrarre le informazioni necessarie (versione corrente, data di rilascio, link al ChangeLog, link al download). Purtroppo questo è il punto debole di tutto il progetto; i bot non si adattano automaticamente ad una nuova versione del sito, e in tal caso, quando ci se ne accorge, occorre intervenire a mano; inoltre non esiste un minimo standard tramite il quale le informazioni che interessano possono essere prelevate; ogni sito, in pratica, è una storia a parte.

Ogni volta che viene rilasciata una nuova versione di uno dei progetti tracciati, questo apparirà in cima nella lista in home page del sito. Ovviamente il sistema fa ampio uso degli RSS; chiunque può iscriversi al feed RSS principale di Appdate e ricevere così gli aggiornamenti dei progetti tracciati (incluso, ovviamente, appdate stesso).

Appdate permette anche di crearsi un proprio feed RSS contenente soltanto i progetti a cui uno è interessato; non è necessaria nessuna registrazione: basta cliccare sul bottone nella colonna di destra e in questo modo si “aprirà” il proprio scaffale virtuale sul quale poter appoggiare i progetti selezionati tramite una spunta del relativo checkbox accanto al nome dello stesso. Togliendo la spunta, il progetto viene tolto immediatamente dallo scaffale.

Al momento sono tracciati 16 progetti.

Credo che l’idea, nella sua semplicità, possa essere abbastanza utile, sopratutto quando la base dei progetti sarà molto ampia.


Oh oh oh, il mio blog su WordPress

Ecco, alla fine ci sono passato anche io a WordPress.

Ho resistito molto ma infine eccolo qua: quello che era il vecchio claudio.cicali.org su un vetustissimo Textpattern adesso è claudio.cicali.name su WP 2.7.

Avendo notato che recentemente mi era tornata la voglia di scrivere ma che avevo troppi siti sparsi qua e là ho approfittato dell’anno nuovo per raccogliere tutto sotto un unico dominio;

WordPress lo conoscete tutti meglio di me, e sembra che piaccia a tutti. Come ho già avuto modo di dire, però, io sono un meccanico e giudico le macchine da quello che c’è sotto il cofano e non dal colore della carrozzeria. WordPress, sotto sotto (php level), fa un po’ ridere (era taaaanto tempo che non vedevo più un “header.php”), ma l’interfaccia è molto carina e potente (e bacata, vabbé, come tutti).

Per certi versi è l’esatto opposto di Drupal (che conosco assai meglio): WP è bello fuori (interfaccia utente) e brutto dentro (codice, sistema di temi e probabilmente altro ancora); Drupal è brutto fuori (ma migliora!) e bello dentro (molto, ma molto developer friendly). OK, sono strumenti diversi, ma dopo tutte ‘ste fanfare pensavo di trovare qualcosa di bello e scintillante, e invece… comunque mi è anche chiaro che, a causa del suo stesso successo, WP non si può permettere di cambiare completamente il motore.

I post dei vecchi blog li ho copiati tutti a manella, che tanto erano una cinquantina e così ho avuto anche modo di fare amicizia con questa bella interfaccia.

Su un blog (di cui, ahem, avevo addirittura perso la password di amministrazione), invece della data del post veniva visualizzato il numero di giorni passati. Ecco che una cosina così, direttamente da MySQL mi ha fatto tanto comodo:

select date_format(date_add(now(), interval -33 day), '%d/%m/%Y');

In questo modo ho visualizzato esattamente la data in formato italiano del post :)

Per il tema ho scelto Typography, che ho dovuto pesantemente modificare sia nei CSS che nell’HTML. Il lavoro non è ancora finito… sigh.

WordPress adora l’XHTML, maledetto; io ho usato comunque il DTD 4.01 ma qualche tag generato e non creato rimane XHTML. Pazienza.

Ho installato il plugin OpenId, che invito tutti ad installare sul proprio blog per permettere ai visitatori  di usarlo per commentare. Se non volete che vi appaia l’invito a fare login con OpenID quando si accede a wp-admin, allora occorre modificare il file login.php del plugin. Dato che io non accetto registrazioni dagli utenti, è sufficiente aggiungere:

if (!get_option('users_can_register') )
  return;

subito all’inizio della funzione openid_wp_login_form()

Il sito è mezzo in inglese e mezzo in italiano, così come sono le stringhe dell’interfaccia… penso proprio rimarrà così :)

Ah, la scritta in alto “Claudio’s Hideout” è volutamente “tagliata” :)

Un lavoretto interessante è stato quello di fare in modo che i vecchi url di claudio.cicali.org continuassero a funzionare in maniera corretta. Ho tenuto dunque traccia della mappa tra il vecchio e il nuovo url e poi nella document root di claudio.cicali.org ho messo questo script:

include("routes.php");
$url = "http://claudio.cicali.org" . $_SERVER['REQUEST_URI'];
if (isset($routes[$url])) {
  header("Location: " . $routes[$url], false, 301);
}
else {
  error_log($url . " non trovato");
  header("HTTP/1.0 404 Not Found");
  print "<h1>404 - Not Found</h1>";
}
exit;

ovviamente condito con questo paio di regoline

RewriteRule ^$ http://claudio.cicali.name [R=303,L]
RewriteRule . index.php [L]

A script to query SVN logs by SQL

Quite often I find myself lost trying to do things that should be simply but they are not: try to answer this question “Being in a SVN working directory, how do you find all the log messages for the revisions that has been committed by someusername in the last month?”

Not so simple.

For this and other reasons, I’d like to have the power of SQL under my fingers, while inspecting SVN logs. So, in an hour, I hacked up this script that will permit you to query the (local) SVN logs with a (very) sql like interface.

It uses Ruby and Sqlite3, via gem. Basically it loads the log (in memory) as XML, then parses it and store revision informations in a (in memory) sqlite database. It then offers you a prompt from which you’ll be able to run queries.

Some example queries are:

  • revision (lists all the revisions)
  • revision where author=’claudioc’ (lists all the revisions by claudioc)
  • count(*) where author=’claudioc’ (how many commits by claudioc?)
  • message where date between ‘2007-01-01’ and ‘2007-02-01’ order by revision desc’ (list the log messages in a 2 months window, and order the list by revision number)

You can download the script here

Some extra notes:

The script is released under a creative commons license and you’re then welcome to change or patch the program as you like (you may want to report back patches).

The program works in memory, so the bigger the log file, the bigger the memory usage. It could be much better if the temporary table would be filled WHILE reading the XML (and not after).

The program use the current directory of the working copy a the starting point to inspect log. If you want to query the WHOLE application log, then move yourself in the root directory of your wc.

Due to the lack of real data types in Sqllite, date range checks could fail… a better approach (using the Ruby extensibily of the Sqlite gem) should be applied.

As usual, HTH


I contenuti di questo sito sono distribuiti con una licenza Creative Commons 2.5 eccetto dove diversamente specificato. Tema WordPress sviluppato da Claudio Cicali; icone del set famfamfam silk e komodomedia. P.IVA: 01712500501

© 2005-2012
Claudio Cicali