quei giorni un po’ così

capture_09022015_180917Ho davvero dormito poco, all’ultimo sono arrivati gli highlights da fare per una partita finalmente soddisfacente. Ma, stanchezza a parte, sono raggiante. Tutto funziona come dovrebbe. Ieri una splendida giornata al lago Maggiore, dove abbiamo assistito al “cimento”.

Un manipolo di temerari si è tuffato nel blu gelido del lago. Un ottimo pranzo a seguire. Oggi al lavoro, infine, sono stato incredibilmente produttivo. Lavoriamo senza staging, ma a volte capita di scrivere codice così. E va tutto bene al primo colpo. Così come per il poster frame, non più generico ma relativo alla partita appena concluca, che invita a completare il log-in per poter vedere la video sintesi.

Image Magick a manetta. Uso di Composite avanzato.

Ma oggi funziona così. E’ addirittura arrivato il treno in orario, e Leonardo si è svegliato al momento giusto.

conto alla rovescia col computo del fuso orario

Per il derby di domenica si è steso un accurato media plan che verte su twitter: Inter e Milan che a colpi di cinguettii si rilanciano souvenir del derby.

Se twitter ti dice che un post è stato visualizzato 30.000 volte devi crederci, anche senza sapere con quale livello di coscienza o attenzione questo si sia verificato nella TimeLine di ogni utente.

Nel suo piccolo anche il sito dell’inter è cambiato:  alcuni sfondi in rotazione nella home page e soprattutto un conto alla rovescia che mostra quanto manca al fischio iniziale.

Adesso che siamo più internazionali, come fare in modo che il conto alla rovescia si adeguasse al fuso orario del browser di chi sta visualizzando la pagina? Le 20:45 in italia saranno le 15:45 a miami, e le 2:45 di lunedì mattina a Jakarta… quase tutte le soluzioni si basano sul computo lato client. Ma come calcolare a che ora inizierà  il derby in giro per il mondo?

ecco come ho risolto:

– Il browser all’atto di caricare la pagina calcola lo spiazzamento in minuti rispetto all’ora di Greenwich (UTC): d.getTimezoneOffset();
– calcolato questo numero, positivo o negativo, viene fatto un post ajax su uno script server per adeguare lo spiazzamento della data del derby rispetto alla timezone del visitatore. Il default sono le 19:45, uno a Londra non avrà  spiazzamento e per lui il conto alla rovescia è limitato dalla ora corrente verso le 19:45 della domenica.

(Utilizzando ajax si aggirano i rischi di una risposta server ‘precotta’ (cached) rimbalzata da varnish senza fare davvero il computo)

– genero un javascript che il server spara al client con la data e ora attualizzata con questa query mysql SELECT DATE_FORMAT(DATE_ADD(‘2014-11-23 19:45:00’, INTERVAL (SELECT -1* $offset) MINUTE),  ‘%M %d, %Y %T’) 

 

 

capture_20112014_173319

 

perl response in utf-8

Mi sto dedicando sempre più intensamente a varie installazioni di wordpress:  academy, identità  visiva, inter forever e inter campus. Forse questo è davvero il futuro. Abbiamo scelto wordpress solo per una svendita di sicurezze tautologiche del parlamentare di turno, ma non stiamo parlando di  personalità  del calibro di Frank Underwood.

Il grosso dello scripting e delle applicazioni non è certo in php è non è nemmeno una paella come wordpress: stiamo parlando di Perl.

Una questione spinosa è la risposta in utf-8 di una serie di chiamate ajax, che talvolta non prelevano direttamente testi già  utf-8 da database (e quindi SET NAMES utf8 non basta).

Questa pagina ha chiarito molti dubbi.

Ecco come ho risolto la situazione dalla prima immagine alla seconda:

use Encode qw(encode decode);
use utf8;
my $enc = 'utf-8'; # 
...

    my $formhtml='ćžćšššé°à§à§à è';
     print "Content-type:text/plainnn";
     print encode($enc, $formhtml);

capture_29042014_114645

capture_29042014_114854

the great world of interisti

Sabato notte ho festeggiato a dovere il CVI compleanno dell’inter con l’avvio della sezione ‘Interisti’:  una brillante community in cui inseriremo tante applicazioni divertenti. Sulla genesi, sullo sviluppo e sulla concretizzazione di questo progetto si potrebbe scrivere un romanzo. Fiction che illustrerebbe meglio di tanti trattati alcune dinamiche interne a FC Internazionale Milano

La complicazione era dovuta al connubio di diverse tecnologie:

  • chiamate ajax multiple per aggiornare il profilo di un iscritto a inter.it
  • applicazione multilingua scritta in PERL con pagine modulari template toolkit
  • mapping personalizzato con googlemaps (qui il demiurgo è corrado)
  • posizionamento della propria stella a seguito della scelta di un indirizzo sulla mappa globale

confronto ambivalente e ambiguo in perl

Sembra peculiare… il Perl semplifica molto il pattern matching ma ha una sintassi diversa per confrontare numeri (= !=) e stringhe (eq ne).
Se tu hai una funzione di servizio che riceve il campo chiave primaria di una tabella, non puoi sapere a priori se è un auto-increment (numerico) oppure, ad esempio
un campo stringa (un hash, ad esempio)
Ecco una funzione che aiuta.

 

#!/usr/local/bin/perl

use warnings;
use strict;

use Scalar::Util qw(looks_like_number);

my @exprs = qw(1 5.25 0.001 1.3e8 foo bar 1dd);

foreach my $expr (@exprs) {
    print "$expr is", looks_like_number($expr) ? '' : ' not', " a numbern";
}

commenti audio alle notizie

Un’aggiornamento al volo per il nostro CMS fatto in casa: la possibilita’ di mettere un clip audio/video a corredo di una notizia su inter.it.
Questa novita’ era pensata per un audio/video diario della trasferta di pechino, ma poi non abbiamo mai concretizzato il deploy. Per tutta una serie di motivi che tuttora non riesco a spiegarmi. Pero’ ieri si e’ verificata un’urgenza (mettere un’intervista al presidente) e mi sono subito industriato
Saltando da perl a php a html a jquery piu’ volte al giorno, riscontro ormai seri problemi di concentrazione. Per questo motivo e’ sempre una sofferenza riprendere in mano codice scritto anche pochi mesi fa. Ma sto migliorando: aumento i commenti, nomi delle variabili e delle funzioni significativi, checkpoint, sezioni commentate ante-deploy e cosi’ via.

Il risultato e’ questo. La soluzione con Google Player mi sembrava esteticamente piu’ elegante, ma con jwplayer c’e’ un pregio: funziona subito.

Starting MySQL….. ERROR! The server quit without updating PID file

la casa che sembra un campo nomadi, un adulto che rimbrotta, un bambino ipercinetico e vociante che ti tampina.
E poi una mano per tenerli a bada, quella che aveva due dita rotte. Dall’altra un paio di server che fanno le bizze.
Uno con la memoria piena di processi apache2 zombie, l’altro con mysql che non si riavvia. Esistono diverse soluzioni, ma la piu’ semplice e piu’ lineare e’ questa:

basta trovare un file proprietario di mysql e killarlo 🙂

kill -9 `ps aux |grep mysql |awk ‘{print $2}’`

da cellulare a sociale

grazie a fabio e agli access-token siamo riusciti a mettere in piedi un sistema che permette di postare direttamente un sms sui profili aziendali dei due piu’ diffusi social network.
la api di facebook ha una letteratura ponderosa, varrebbe la pena dedicare qualche giorno ad open graph

certo e’ che piu’ l’interfaccia per l’utente e’ banale, piu’ diventa ostico il tracking e monitoring dei bug. nonche’ il controllo delle credenziali di accesso. tutta da chiarire, invece, la portata editoriale della cosa… chissa’ quanti hanno effettivamente fame di contenuti se questi non sono appetibili. Risuona ancora l’eco dell’isola di second life.