Skip to content

I segreti delle closures javascript

JavaScript is, I think, the most powerful language we have on the
market today. Forget (?…) C and C# and Perl and Ruby and whatever,
JavaScript can do everything and it can do it better and smaller and
cleaner that any other language there is. Stuart Langridge

FONTE: http://www.kryogenix.org/code/browser/secrets-of-javascript-closures/


Stuart Langridge: Secrets of JavaScript Closures, part 1 from Bachelor-ict.nl on Vimeo.


Stuart Langridge: Secrets of JavaScript Closures, part 2 from Bachelor-ict.nl on Vimeo.

Tagged ,

Gli svedesi odiano i finlandesi?

Gli uomini che odiano le donne
Gli uomini che odiano le donne mi è piaciuto. Devo dire molto. Appassionante dalla prima all’ultima pagina. Forse l’ultima fase del libro è un po’ appiccicata, giusto per legarsi con l’incipit e per poter permettere un sequel.

Ho solamente un appunto molto “stupido” da fare. L’esperto informatico che ha consigliato l’autore (immagino ce ne sia stato uno) e “attrezzato” la protagonista Lisbeth, poteva pensare che un vero hacker molto difficilmente userebbe un mac. Un vero hacker userebbe un vero sistema aperto basato su linux o su bsd.

Evidentemente gli svedesi odiano i finlandesi.

Young Beethoven

Oggi è morto Micheal Clexton, autore di questa foto.

chet

Real Video, Avi, Flv - conversioni

2 piccoli appunti per chi avesse come me il problema di convertire dei video real in altri formati su ubuntu (7.10)

 

 

Per leggere i video real ho seguito questa procedura:

https://help.ubuntu.com/community/Medibuntu


max@mubuntu:~$ sudo wget http://www.medibuntu.org/sources.list.d/gutsy.list -O /etc/apt/sources.list.d/medibuntu.list  

max@mubuntu:~$ sudo apt-get update && sudo apt-get install medibuntu-keyring && sudo apt-get update

max@mubuntu:~$ sudo apt-get install w32codecs non-free-codecs

 

 

Per la conversione in avi (in modo da poterlo ritagliare con avidemux facilmente)


max@mubuntu:~$ mencoder video.rv -ovc lavc -oac pcm -o video.avi

 

 

Per la conversione in flv devo aggiornare una serie di pacchetti “medibuntu”.


max@mubuntu:~$ sudo apt-get update ffmpeg libavformat1d libpostproc1d libswscale1d libavcodec1d libavformat1d libavutil1d libpostproc1d libswscale1d

 

 

Finalmente ora posso convertire in flv per avere il risultato finale pronto per il web


max@mubuntu:~$ ffmpeg -y -i video.avi -acodec mp3 -ar 22050 -f flv video.flv
Tagged , , , , ,

Scopri le differenze

L’ultimo lavoro di Bob Dylan è liberamente ascoltabile in rete.

Oggi vedo su repubblica.it (si, non merita nemmeno il link):

L’ultimo Dylan si ascolta su repubblica.it

Poco prima, il “claim” diceva che non era nemmeno necessaria la registrazione dell’utente. WOW! Addirittura!

Io non ci sono riuscito. Non sono riuscito ad ascoltare questo brano.

  1. E’ in streaming (ad occhio) e la mia rete aziendale non mi permette di andare oltre la navigazione web. E questo loro dovrebbero saperlo. Sono anche loro in una grande azienda. E le grandi aziende solitamente aprono la porta 80. Il resto solitamente rimane chiuso.
  2. E’ servito attraverso Windows Media Player che non è disponibile su tutte le piattaforme. Linux mai sentito nominare? ma vabbè!
  3. Non è disponibile un semplice download dell’mp3 … e no! non puoi scaricarlo, brutto pirata che non sei altro!

Una rapida ricerca in rete, autore + titolo del nuovo brano, mi è bastata per ascoltare e scaricare Dylan e apprezzare la pulizia del sito del Guardian (si questa volta linko, se lo meritano).

Giudicate voi!

Questa è la pagina di repubblica:

http://www.repubblica.it/dylan/audio.html

Questo è il guardian:

http://www.guardian.co.uk/music/audio/2008/sep/19/1

Tagged

google.it utilizza un certificato di sicurezza non valido

Son giorni brutti. Son sommerso di bugs. Ovunque.

Ne “posto” uno semplice semplice da correggere.



Nel menu in alto della GMail il link al reader punta a



https://www.google.it/reader/view/?tab=my

Il certificato di google è valido per il dominio .com non per il dominio .it



Cambiando in alto l’indirizzo da it a com non ho bisogno di aggiungere eccezioni di sicurezza al mio browser.



Allo staff di google direi di cambiare il puntamento del reader da it a com o di creare dei certificati validi per google.it

Con molta umiltà vista la qualità ineguagliabile del loro software.

PS: se vedete il mio sito in bianco e nero e le immagini in miniatura… beh non è un bug, è che voi usate un bug per navigare e io di fare programmi intorno ai bachi son stanco :)

Tagged

sshfs - ubuntu 7.10 (Gutsy)

Un piccolo appunto su sshfs.

1: Installo sshfs.


max@mubuntu:~$ sudo aptitude install sshfs
[...]
I seguenti pacchetti NUOVI (NEW) saranno installati:
  sshfs
Spacchetto sshfs (da …/sshfs_1.7-2.1_i386.deb) …
Configuro sshfs (1.7-2.1) …

2: creo il punto di mount


max@mubuntu:~$ sudo mkdir /media/sshfs
max@mubuntu:~$ sudo chown max /media/sshfs/

3: mi aggiungo al gruppo fuse e setto qualche permesso (?)


max@mubuntu:~$ sudo adduser max fuse
max@mubuntu:~$ sudo chgrp fuse /dev/fuse
max@mubuntu:~$ sudo chmod o+rw /etc/fuse.conf
max@mubuntu:~$ sudo chmod o+rw /dev/fuse
max@mubuntu:~$ sudo chmod o+x /bin/fusermount

4:monto il disco


max@mubuntu:~$ sshfs labwassk01@diogene:/home/apps/labwassk01/skedul/php/newsfarm /media/sshfs
labwassk01@diogene's password:

max@mubuntu:~$ mount
[...]
sshfs#labwassk01@diogene:/home/apps/labwassk01/skedul/php/newsfarm on /media/sshfs type fuse (rw,nosuid,nodev,max_read=65536,user=max)
Tagged , , , , ,

Imparare jQuery - 9 - jPaging - Step 5 : closure contesti e visibilità

Cerchiamo prima di proseguire di fare chiarezza sull’ambito delle variabili, e sulla visibilità delle variabili esterne alle closure degli eventi.

Assegno fuori dal contesto degli eventi una variabile


var _context = _page;

La userò solamente in questo esempio. Nei successivi post non ci sarà traccia di questo codice.

All’interno degli eventi di tutti i tasti
subito dopo questo:


var _id = parseInt(jQuery(this).text()) - 1;

inserisco questo piccolo snippet di codice:


alert("Prima del click : " + _context);
_context = (_id + 1);
alert("Dopo il click : " + _context);

Le variabili dichiarate fuori dall’evento sono visibili e possono essere modificate all’interno degli eventi.

DEMO
SORGENTE

Ora pulendo il nostro codice incapperemo in un particolare bug da evitare quando lavoriamo all’interno delle closure.

Abbiamo la variabile _page. Usiamo direttamente quella.
Cancellando ogni riferimento a _context. Lo snippet diventa


var _page = 1;
//[...]
jQuery(”.jp-handler”)
.click(function(){
//[...]
    var _id = parseInt(jQuery(this).text()) - 1;
    alert(”Prima del click : ” + _page);
    _page = (_id + 1);
    alert(”Dopo il click : ” + _page);

    jQuery(”.jp-toolbar”)
    .eq(0)
    .find(”.jp-handler”)
    .eq(_id)
    .addClass(”jp-active”);

    jQuery(”.jp-toolbar”)
    .eq(1)
    .find(”.jp-handler”)
    .eq(_id)
    .addClass(”jp-active”);

    _jpages.eq(_id).show();

    var _page = _id + 1;
    if(_page != 1)
        jQuery(”.prev”).show();
    else
        jQuery(”.prev”).hide();

    if(_page != _pages)
        jQuery(”.next”).show();
    else
        jQuery(”.next”).hide();

    return false;
});

BUG
SORGENTE

Eseguendo il codice al click su uno dei tasti vedrete che _page risponde “undefined” negando in pratica quanto visto precendentemente con _context.

Questo perchè subito dopo dichiaro nell’ambito della closure var _page.

Se io voglio leggere/scrivere una variabile fuori ambito posso farlo fintanto che nello stesso ambito non venga definita una variabile con lo stesso nome.

Come vedrete a parte il primo alert non ci sono effetti perversi. La paginazione funziona.
Per evitare comunque effetti perversi difficili da scovare correggiamo il codice.


Morale (o buona pratica) : all’interno delle closure non dichiarare variabili con lo stesso nome del ambito esterno.
Questo “mascheramento” infatti può produrre effetti perversi.

A questo punto, visto il funzionamento delle variabili fuori dalle closure, e visto il bug correggiamo il codice e cancelliamo l’inutile variabile _context del primo esempio, questa volta in maniera corretta eliminando il bug.

CORREZIONE
SORGENTE

All’interno delle closure tolgo


var _page = _id + 1;

che non ha senso. Usiamo direttamente la variabile fuori closure che tanto deve valere l’indice _id + 1.

Tolta questa dichiarazione il nostro script funziona senza effetti perversi.

Abbiamo due contesti.

Il contesto del “main” che comunque non ha ambito globale essendo a sua volta all’interno della closure legata all’evento ready del documento.

E il contesto degli eventi sui tasti.

Il contesto dei tasti usa e scrive la variabile di ambito superiore del programma stesso (quello che ho chiamato il rozzo “main”).

Ora non ci rimane che creare un vero e proprio plugin jQuery.

[... continua]

Tagged , , , ,

Imparare jQuery - 8 - jPaging - Step 4 : Eventi

Aggiungiamo gli eventi.

Nei precedenti post abbiamo aggiunto la toolbar. Ora non ci rimane che aggiungere i comportamenti ai tasti della toolbar.

Partiamo dai tasti di pagina. Poi vedremo il tasto avanti e indietro.


jQuery(".jp-handler")
.click(function(){
//qui il codice dell'evento
});

Per associare ad un link (usare sempre i link, saranno accessibili anche via tastiera) un evento usiamo la classe (jp-handler) che abbiamo inserito per interrogare facilmente il DOM, e il metodo jQuery click, wrapper dell’evento nativo onclick. Il metodo click della libreria jQuery accetta come argomento una funzione (closure).

All’interno dell’evento procediamo al nascondimento di tutte le pagine:


_jpages.hide();

NB: _jpages è visibile all’interno della closure dell’evento.Vedremo dopo uno dei primi pericoli dovuti alle closure. L’ambito e il nome delle variabile. In questo evento infatti c’è un possibile bug.


jQuery(".jp-toolbar").find(".jp-active").removeClass("jp-active");

Rimuoviamo la classe attivo. Usiamo il metodo find che è forse il metodo più semplice e potente per ottenere nodi da un certo punto di partenza (.jp-toolbar). Il risultato di find è l’elemento/i trovato. Quindi in catena rimuovo la classe all’elemento.

NB: imparate ad usare la chinability. A volte si parte da un “soggetto” e il soggetto rimane sempre quello nella catena. A volte il soggetto cambia come in questo caso: prima .jp-toolbar, dopo il metodo find, .jp-active.


var _id = parseInt(jQuery(this).text()) - 1;

L’id della “pagina” da mostrare è il testo del link -1.

NB: in questo caso per la prima volta uso la parola this. this è la parola chiave del linguaggio che indica l’istanza di un oggetto in un determinato momento. In javascript bisogna fare molta attenzione ai contesti perchè this cambia a seconda del contesto..

All’interno di un evento this vale sempre l’elemento a cui sto attaccando l’evento. Quindi sempre una reference di un nodo HTML.


jQuery(".jp-toolbar")
.eq(0)
.find(".jp-handler")
.eq(_id)
.addClass("jp-active");

Le toolbar sono due. Prendo la prima


eq(0)

Trovo i “tasti pagina”, Prendo l’elemento con indice _id e aggiungo la classe css “attivo” (jp-active).


jQuery(".jp-toolbar")
.eq(1)
.find(".jp-handler")
.eq(_id)
.addClass("jp-active");

Ora prendo la seconda toolbar e faccio la stessa cosa.
La capacità di navigare i nodi di un documento è sicuramente la principale ragione di successo di jQuery.


_jpages.eq(_id).show();

Mostro la pagina con indice _id.


var _page = _id + 1;
if(_page != 1)
    jQuery(".prev").show();
else
    jQuery(".prev").hide();

if(_page != _pages)
    jQuery(".next").show();
else
    jQuery(".next").hide();

Creo una variabile locale (_page) all’ambito con il valore dell’indice maggiorato di 1 (gli array partono da 0).

Faccio due banali e brutti if per vedere se devo nascondere o meno i tasti prev e next.

Creo gli eventi per i tasti next e prev


jQuery(".prev")
.click(function(){
//code
});

jQuery(".next")
.click(function(){
//code
});

All’interno degli eventi dei tasti next e prev il mio _id lo recupero dall’html:


var _id = (parseInt(jQuery(".jp-toolbar").find(".jp-active").eq(0).text()) - 1);

A seconda che sia prev o next subito dopo incremento o decremento questo valore


_id--;

Tutti gli eventi terminano con un return false per evitare che il link visiti effettivamente il target dell’attributo href.

DEMO

[... continua]

Tagged , , , ,

Vacanze 2008

Ljubljana

Ljubljana

Zagreb

Zagreb

Split

Split

Brač

Brač

Mostar

Mostar

Sarajevo

Sarajevo

Dubrovnik

Dubrovnik

Bari

Bari

Salento

Tagged ,