30 maggio 2009

Schegge di costume e di....politica.

Era da un po' che non ne parlavo....di politica, intendo.
Oggi mi sono trovato a fare zapping su un po' di filmati spazzatura su youtube, passando per le penose liti di Sgarbi (ma questa con travaglio è godibilissima, e interessante anche quella contro Cecchi Paone) sono arrivato a un Capezzone Vs Travaglio a 8e30.
Questa sotto è la versione integrale:




Premesse:
1) Otto e mezzo, insieme a Omnibus, è una delle trasmissioni di approfondimento politico che preferisco in assoluto.
2) la7, dopo la cacciata di Luttazzi, mi sta un po' sui coglioni.
3) trovo Travaglio sempre interessante, ma anche troppo spesso viscido e ultimamente malato di protagonismo. In generale non sono un suo fan, e non lo ero già in tempi non sospetti, pur trovandolo un'ottima fonte di informazioni.

Detto questo, non voglio parlare di nessuno di questi fatti o di queste persone, ma dell'altro protagonista della trasmissione. Avevo lasciato Capezzone come leader radicale che abbandonava l'allora al potere centro-sinistra e ammiccava al cavaliere. Ignoravo, sino a poco fa, che fine avesse fatto. Vivevo forse meglio ignorandolo.
Lo ritrovo portavoce di Forza Italia.
Cavolo, bel salto...
A parte l'abbandono della politica attiva a favore del marketing per il pensiero altrui, che già mi pare un passaggio piuttosto bizzarro, trovarlo portavoce di un partito teoricamente avverso sino a pochi mesi fa, mi lascia colpito.

Perplessità.


Se posso rimarco il mio disprezzo per il personaggio, ma anche per il pensiero a cui aderisce e per l'incredibile capacità dei radicali di cambiare pelle, schieramento e quant'altro.

Qualcuno, anche fra gli amici, li auspica alleati del centro sinistra, che per altro è un fantasma con scarse prospettive, almeno a breve. Io continuo a ribadire che il loro liberismo a tutti i costi mi fa vomitare ed è più consono a FI di quanto la parte liberale sugli aspetti non economici non li avvicini al PD.

Chiusa la parentesi sul mio pensiero a proposito dei radicali, noto con dispiacere come basti vestire i panni di destra per diventare arroganti, strafottenti, tracotanti ed offensivi...

Questo paese sta diventando maleducato. Maleducato alle radici tanto quanto in cima, e soprattutto senza che sia chiaro se schiere di galletti impettiti abbiano votato i loro simili o se questi tracotanti idoli del rampantismo abbiano forgiato il loro elettorato.

Se non altro una nota positiva: un altro pezzo di schifezza è passato di là. Purtroppo è un disperato voler vedere il bicchiere mezzo pieno, invece che mezzo vuoto, disperato perché in realtà lo vedo pieno al 0,3% invece che vuoto al 99,7%.
Read more

26 maggio 2009

Voglia di musica

Ancora il vuoto per la scomparsa di last.fm come piazza virtuale per conoscere l'underground, e non, musicale e per condividere mille culture non si è placato. Ancora cerco alternative perché deezer è carino ma per me troppo scarno, per ora...

Nel mentre che girovago sono capitato su eventful ed è stata subito simpatia.
Uno strumento per chiedere agli artisti di venire un posto, indispensabile in un'epoca in cui gli acquisti calano a picco, ma restano i download, più o meno legali, a diffondere la musica, un'epoca in cui, per chi fa musica, la promozione live è rimasto quasi l'unico modo di fare cassa...posto che cassa si faccia, ma dove?
non essendoci più dati di vendita affidabili non ci sono più coordinate commerciali Per stabilire se e quanto un tour possa rientrare in un dato budget.
Allora, magari, farlo chiedere agli ascoltatori, che magari il disco non l'hanno mai comprato, scaricato illegalmente da qualche parte, ma al concerto ci verrebbero, a prendere una maglietta pure, e chissà magari anche a comprare un cd senza spese di spedizione....

...ed ecco eventful.
Non so se e quanto funzioni, ma mi pare una bella idea.
Come per Deezer per ora è inutile sperare nell'underground duro e puro, ma intanto un po' di artisti interessanti sono noti...e io parto con le mie prime richieste, eccole:



Demand Tenhi in Milan!
Tenhi in Milan - Learn more about this Eventful Demand

View all Milan events on Eventful





Demand Rosetta in Milan!
Rosetta in Milan - Learn more about this Eventful Demand

View all Milan events on Eventful
Read more

19 maggio 2009

Colpito

mentre smadonnavo contro alcuni bachi oscuri di NEOM, mi sono ascoltato la puntata di tertis di pochi giorni fa, di cui avevo sentito l'inizio e che mi aveva interessato.

la trasmissione non mi ha emozionato, ma in questo spezzone, al minuto 17e28 c'è una parte che mi ha colpito. riporto qui lo spezzone, si può tranquillamente saltare un bel pezzo saltando direttamente alla parte in questione:





Ora, ho sempre considerato Cossiga come un pessimo, e in generale il suo partito (quello storico di allora e poi quelli successivi) uno schifo.
non capisco se e quanto parli seriamente, mi pare cambiare tono in più parti, ma...sono colpito.
Certe cose me le aspetto, altre mi paiono veramente fuori dal mondo...


Io non so cosa ne pensate voi, ma io sono intristito da questa scontata violenza sotterranea.

Il mio cammino di allontanamento dalla politica è sempre più comodo e in discesa...


p.s.: nel mentre sono interessanti i dati riportati al minuto 14e35: 15k intercettati, mentre il numero stragonfiato che ci viene sempre proposto dai media è il numero di decreti, che moltiplica gli intercettati per le reiterazioni e i numeri intercettati per singolo intercettato
Read more

18 maggio 2009

Tradito

è un po' così che mi sento dall'ultima svolta di last.fm, che ha deciso di mettere a pagamento la radio per gli utenti che non si connettono da USA, UK o Germania.
Scelta economica forse dovuta a necessità di far cassa per pareggiare i costi, forse dovuta alla voglia di far cassa facendo perno su un buon predominio del mercato.
Non lo so e non posso saperlo, ma sicuramente di fare cassa si tratta.
Quello che invece so è che la questione della residenza (giustificata formalmente dal rendimento della pubblicità) è fastidiosa, anche perché spacca la UE. L'altra cosa che so è che 3 euro al mese per una radio, per quanto buona, mi sembrano difficilmente digeribili, visto che la radio è vista, almeno in italia, come uno servizio gratuito: pagato dallo stato se è un servizio, o dalle pubblicità e da servizi accessori se è un diletto.

Segno di un cambiamento? Segno della debolezza di un modello di mercato che vede servizi gratuiti a fronte di pubblicità e/o "acount plus" a pagamento per gli sfegatati? Può essere, io non ci credo, ma può essere. Io vedo più una variante de "l'occasione fa l'uomo ladro" o di "chi più ha più vorrebbe". Forse mi sbaglio, ma nella buona fede della gente credo poco, in quella dei colossi industriali anche meno....

Per ora non cancello l'account, però mi sono trasferito come "radio".
Attualmente sono su deezer.com, ma devo valutare anche la bontà di finetune.com. Non ci vuole molto per per percepire un calo qualitativo sensibile per chi, come me, viene da anni di last.fm, però tant'è, e comunque deezer offre anche degli spunti in più che last.fm non aveva e che potrebbero essere molto interessanti... Se a last.fm torneranno sui loro passi bene, se no...peccato.
Del resto loro non pagano me per i widget che uso in giro e gli fanno pubblicità o per i dati di mercato dei miei scrobbles, non vedo perchè io dovrei pagare loro per gli ascolti della radio, che sono nettamente minoritari nell'economia della mia esperienza sonora quotidiana.

Però, un po', mi sento tradito. Tradito da un sito che promuovevo con passione quando ancora non era così famoso come è oggi...
Read more

13 maggio 2009

Wow, passata l'apocalisse chiamata "compleanno della bimba Gaia".
giornata difficile, nottata difficile.
La Fofi è tornata al nido dopo 4 gg di assenza e in tempo quasi 0 (alle 12 circa, 3 ore dopo il suo ingresso) ce l'hanno rimandata a casa perché aveva la febbre. Sbatti.
La Gaia si è divertita un sacco, e al ritorno abbiamo giocato insieme. Le ho dedicato tutto il tempo che potevo, lei ha apprezzato, pare, ma io sono distrutto, perché di anni non ne ho più 3! E da parecchio ormai!
Arrivati all'ora di cena le bimbe erano così stanche che hanno attaccato la modalità "capriccio da stanchezza" che, escludendo la violenza sui minori, non ha soluzioni, se non la nanna che però richiede il consenso del cucciolo.
Per fortuna di anni io non ne ho più 3, e da un pezzo; quindi rigirarmi una bimba di 3 anni per convincerla a venire a letto mi riesce ancora, anche perché non lo faccio abbastanza spesso da averle insegnato i trucchi più facili ;)
E così tutti a letto presto a fare la nanna, ma la notte è stata tormentata dall'agitazione della grande (dovuta forse all'eccitazione del giorno, forse chissà) e da un po' di urla della piccola, tormentata anche lei (forse da qualche dente che fa male mentre esce, forse chissà).

Bien, risultato netto che il post di buon compleanno va al giorno dopo, ma poco conta, tanto lei non lo legge e resta più che altro come diario di bordo per tempi remoti, forse...

In sintesi: buon compleanno Bimba Gaia!
Read more

11 maggio 2009

in una giornata un po' noiosa...

...questa canzone mi ha colpito:



... e soprattutto questo video mi ha fatto sorridere:

Read more

8 maggio 2009

Contenitore in javascript

Come si costuisce una tabella in javascript per contenere dei dati? Quelle canoniche tabelle con una paccata di dati estratti da una query? E come si dà un modo comodo all'utente di navigarla?
Intendo per esempio la possibilità di ordinare i risultati in base a qualche attributo, piuttosto che paginare il risultato per non dover vedere 5000 righe di tabella in un colpo solo?

La soluzione canonica è usare PHP (o qualunque altro linguaggio lato server) per strutturare la tabella, aggiungere un po' di campi nascosti di una forma che vengono popolati da un po' di click in giro per la pagina e usati per inviare una richiesta al server per ottenere un altro ordinamento dei dati, piuttosto che l'accesso ad un altro subset di dati. 

È una soluzione, effettivamente. È una buona soluzione, anzi, che presenta alcuni notevoli vantaggi rispetto a quella che sto per descrivere, ma anche qualche svantaggio. Ma non è l'unica: si possono fare quasi tutte queste operazioni anche lato client, con un po' di sano Javascript, l'aiuto di DHTML e un approccio meno “old-style” al problema.

Prima di esaminare una possibile soluzione alternativa facciamo un attimo il gioco dei pro e dei contro delle due soluzioni, tanto per allenare la mente e confermarci, se mai ce ne fosse bisogno, che non esiste una soluzione sempre migliore, dipende quasi sempre tutto dal contesto.

Soluzione lato Server.

Pro:
- è tradizionale, un sacco di gente lo fa, si può eveitare di spremere il cervello.
- In caso di paginazione si possono inviare via rete pochi dati, relativi alla sola pagina visualizzata
- In caso di ordinamento è facile che il server abbia algoritmi più performanti di quelli di javascript

Contro:
- senza la paginazione, ma con ordinamento, a ogni ordinamento si passano tutti i dati, potenzialmente parecchi
- anche se la paginazione lato client è meno performante come algoritmo, è nulla rispetto alla latenza di una chiamata e risposta al server, quindi il risultato è quasi sempre molto più brillante
- il server diventa un collo di bottiglia. Con o senza paginazione rischia o di dover estrarre in continuazione i dati e inviarli o di doverli tenere in cache per ogni utente, con uno sforzo mostruoso (e una conseguente spesa non indifferente per dimensionare l'hardware...)

Soluzione lato Client:

Pro:
- è un po' più trendy, più web 2.0, come dicono le persone alla moda (soprattutto quelle che non sanno di cosa parlano)
- permette di cambiare impostazioni e interagire in modo molto più rapido
- usa le risorse del client, spesso più libero nel contesto di naviazione web, e occupa il server solo nel caricamento iniziale

Contro:
- i dati vengono trasferiti tutti subito, quindi il primo caricamento potrebbe essere più lento
- si usano le risorse del client, quindi la navigazione con un catorcio risulta poco agile
- le differenze prestazionali fra browser sono notevolissime, quindi una soluzione che appare ottima per prestazioni ed aspetto con opera o firefox potrebbe (beh, dai, il condizionale lo uso anche se il periodo ipotetico è purtroppo della realtà) risultare pessima con IE.


Insomma si sposta il peso di alcune operazioni. Cosa si meglio dipende dallo stile di navigazione degli utenti, ma anche, e soprattutto, dal tipo e dalla mole di dati presentati.

Detto questo presento un piccolo “widget”, se così vogliamo chiamarlo, per ora prototipale, che mi sono realizzato per studio e per comodità di riutilizzo. 
La mia soluzione è sviluppata in 3 classi ed è basata su jQuery, che permette una veloce e buona manipolazione del DHTML senza dover inseguire le differenze fra browser e ha delle API molto comode.
La prima classe che introduco è il contenitore dei dati, che con grande fantasia ho chiamato Container. Vediamolo:





Se non sapete nulla sulle classi in javascript, può essere utile prima approfondire questo argomento (ma per i nostri scopi basta dire, in modo improprio, che una funzione può essere il costruttore di un oggetto e che a quella funzione si possono agganciare dei metodi tramite la definizione di prototipi), altrimenti passiamo subito all'analisi del contenitore.

Quello che un contenitore deve fare è mostrare una serie di righe contenenti i risultati, permettere di ordinare per alcune (potenzialmente tutte, ma dipende dal contesto, e a volte nessuna) colonne, e spezzare il risultato in più pagine quando ci sono troppi dati.

Per costruire un nuovo Container necessitiamo di questi parametri:
htmlcontainerid: id dell'elemento html in cui vogliamo posizionare il contenitore. Tipicamente sarà un div, ma può essere quello che serve che sia.
myid: id del contenitore stesso. Non è in realtà poi così importante ai nostri fini, serve per ritrovarlo con i canonici metodi uasti da altri script nella pagina.
obja: array degli elementi contenuti. I contenuti sono oggetti di una classe, che vedremo più avanti.
colnames: array con i nomi delle colonne da mostrare.


Facciamo ora una veloce carrellata dei metodi utili in questo contenitore:
SetRowNumColumn: Questo metodo serve per impostare il nome della colonna che indica il numero di riga. Se viene impostato ad undefined o a qualunque cosa che in javascript dia False, elimina la colonna con il numero di riga.
SetPager: imposta il paginatore. Non l'abbiamo ancora visto, ma il paginatore è una classe usata dal contenitore per alcune operazioni. Se si passa undefined si elimina il paginatore.
SetSortList: richiede l'elenco delle colonne per cui si può ordinare, come elenco di numeri, senza contare quella opzionale dei numeri di riga. Il parametro depth al momento non è usato (ma deve comunque essere maggiore di 0), mentre i 2 successivi parametri sono le immagini (o quel che si vuole) da usare come frecce sulla colonna per cui si ordina.
DrawAll: non dovrebbe mai essere necessario chimarlo se non dopo l'impostazione del comportamento desiderato, ma è comunque sempre accessibile per forzare un ridisegno del contenitore.
SetColNames: imposta il nome delle colonne. Dopo che sono state impostate il contenitore non si ridisegna automaticamente, quindi il cambio al volo di questi nomi potrebbe essere un caso di necessità di utilizzo della DrawAll.
SetClassName: imposta il nome della classe da usare per il contenitore, ai meri fini di creazione di un foglio di stile consono.

Niente allarmi, è tutto piuttosto semplice, in realtà!
Passiamo dunque a vedere l'oggetto contenuto, eccolo:



Anche se fornisce una implementazione minima, l'ho comunque chiamato IContained, perchè vorrebbe essere, più che altro, una interfaccia.

C'è anche un costruttore super ridotto che permette l'utilizzo vero e proprio di questa classe. Questi i suoi argomenti:
uid: questo è un id (univoco?) dell'elemento, previsto perchè è assai probabile che i vari oggetti esposti abbiano un identificativo con cui riconoscersi, utile speciamente nelle eventuali successive chiamate al server.
va: array di valori, per le singole colonne.


Ecco i suoi pochi metodi utili, li descrivo perchè sono quelli di cui più facilmente si farà override in classi derivate:
DrawAsRow: viene chiamato dal Container per dire all'oggetto di restituire la sua rappresentazione sulla riga. In questa versione l'oggetto suppone di dover scrivere i contenuti dell'argomento va del costruttore in ordine come li ha ricevuti, uno per colonna, senza manipolazioni. 
GetValueByPos: chiamato dal Container in fase di ordinamento, richiede all'elemento di restituire il valore di una certa colonna (argomento). L'implementazione di base restituisce quello che l'oggetto stamperebbe in quella colonna, nulla vieta di modificare il comportamento per restituire un altro valore magari più performante per l'ordinamento o semplicemente diverso.

Come si vede è una classe minimale, con pochi fronzoli, ma abbastanza sostanza da stare in piedi.

Passiamo dunque all'ultima classe, il paginatore, GPager. Eccolo:



Il costruttore vuole questi paramentri:
uid: questa volta è verametne univoco...o così dovrebbe essere. Usato per poterlo ritrovare nella pagina per altri script.
container: riferimento al conenitore, viene usato quando cambia qualcosa nel pager e questo ha effetti sul contenuto da mostrare, per esempio quando si cambia pagina.
itemsperpage: numero di righe per pagina. Più propriamente numero di elementi, visto che potenzialmente potrebbero anche disegnarsi su più righe.
showpagesatedge: quante pagine mostrare vicino ai bordi? Il canonico far sempre vedere la prim e l'ultima, o le prime 3 e le ultime 3...canonici parametri di navigazione.
showpagesatposition: quante pagine mostrare nel pager adiacenti a quella attuale? Quella prima e quella dopo o le 3 prima e le 3 dopo? Altro canonico parametro di navigazione.


Non ci sono metodi utili da chiamare dall'esterno, mentre magari come estenderlo lo vediamo in una puntata successiva. Ci sono invece du parametri direttamente accessibili che posono essere cambiati e sono prevsymbol e nextsymbol che sono i simboli usati per fare previous e next page, altra caratteristica standard di navigazione


Come accennato, anche questa classe può essere specializzata per apparire più bella o per avere un comportamento più evoluto.



Per provare il pager con dei contenuti bisogna salvare le 3 classi in uno o più file (in ho usato un unico file chiato “Icontainer.js”) e scaricare e mettere in un posto accessibile anche una versione non preistorica di jQuery (io ho usato la 1.2.6). Modificate come necessario i link a questi file.

Ed ora ecco la paginetta per provare il comporamento del pager con dei contenuti:



ah, quasi dimenticavo....i link rotti ad immagini che vedete è perchè uso 'uparr.gif' e 'dwarr.gif' come freccia in su e freccia in giù. Scegliete su internet delle frecce che vi piacciano e cambiate i riferimenti come preferite (possono essere anche degli url remoti).

Come ultima note, se vedete che IE ci mette circa 1 minuto a ordinare 10000 elementi, laddove opera ci mette pochi secondi e FF è istanteneo, non scappate...pensate solo che è il caso di cambiare browser...e per stare sul sicuro si può sempre lasciare l'ordinamento al server ;)

Come rendere il tutto più presentabile lo vediamo in una prossima puntata con un po' di css!

Read more

7 maggio 2009

prova di embedding

già che sono qui, vediamo come va.











Read more

cambio casa

..informatica intendo.

yahoo 360° mi resta nel cuore, ma l'impossibilità di embeddare quasi qualunque cosa unita a un po' di bachi che a fasi alterne si fagocitano dei miei articoli la trovo....fastidiosa.

quindi ecocmi qui....sperando che qui vada meglio...

nel mentre, per i nostalgici, la storia rimane accessibile qui.

Read more