dasherize

i had to write a “dasherize” function to generate SEO friendly url and so i found the power of unicode normalization…

#!/usr/bin/perl

use warnings;
use strict;
use utf8;
use Unicode::Normalize;

my $string = 'accentate «àèìòù» e “euro” (¤ç) {¹²³} [prova]';
my $length = 200;

binmode(STDOUT, ":utf8");

print "$stringn";

$string = NFKD($string);
$string =~ s/pM//og;

$string =~ s/[^a-z0-9]+/-/gi;
$string =~ s/^(.{1,$length}).*/L$1/;
$string =~ s/-[^-]*?$//;

print "$stringn";

and here is the output:

fabio@gnu64:~/tmp$ ./dasherize
accentate «àèìòù» e “euro” (¤ç) {¹²³} [prova]
accentate-aeiou-e-euro-c-123-prova

Barcode 2D

Inzigato da dei marchettari ho dato un’occhiata al mondo dei codici a barre in 2D, in particolare alle possibili applicazioni di community che sembra vadano per la maggiore in giappone.

fabulus-qr

La prima cosa che ho scoperto è che esistono veramente una marea di codifiche ma le più usate sono Datamatrix e, soprattutto, QRcode. Da li a buttar giù due righe in perl il passo è stato breve.
(Il modulo perl è fatto bene ma non ho capito come mai durante l’init se il parametro di “versione” non è definito viene impostato ad 1 mentre più avanti viene invocata la procedura di calcolo automatico della versione solo se lo stesso non è definito… nel dubbio ho risolto togliendo un “|| 1” dall’init del modulo.)

A questo punto generare QRcode è banale, ad esempio con un cgi:


#!/usr/bin/perl 

use CGI;
use GD::Barcode;

my $q = new CGI;

my $str = 'Hello World!';

if ($q->param()) { $str = $q->param('s'); }

my $oGdBar = GD::Barcode->new('QRcode', "$str" , { Ecc => 'M', ModuleSize => 6 });

print "Content-type: image/pngnn";
binmode STDOUT;
print $oGdBar->plot()->png;

Per chi volesse approfondire sicuramente le pagine più interessanti che ho trovato wikipedia e la pagina di descrizione dei contenuti dei barcode dell’implementazione di google nelle sue Chart API. Molto interessanti anche le pagine descrittive di denso-wave detentore del marchio.