Scambiare due variabili senza appoggio

Si tratta di un post inutile ma mi tocca scriverlo per potermi scrollare di dosso quella sensazione fredda che ti prende quando un ricordo magico e dimenticato torna a trovarti da sotto le dita quando meno te lo aspetti.

Il problema, risale ai primi anni novanta era semplice nella sua richiesta e suonava più o meno così:

Scambiare due variabili intere usando una terza variabile per contenere temporaneamente il valore di una delle due è banale. Come è possibile scambiare il contenuto delle due variabili senza utilizzarne una terza?

Se volete provare anche voi a risolverlo allora dovreste farlo adesso perché dopo il salto c’è la soluzione.

Continua a leggere “Scambiare due variabili senza appoggio”

ExtJs: le basi dell’applicazione

Questa è la seconda puntata dell’esperimento su extjs. Ovviamente già in ritardo, adoro dimostrarmi coerente anche su internet con la mia controparte reale. Purtroppo scirivere codice è pressochè immediato, lo è meno, per me, commentarne le caratteristiche in chiave didattica senza essere più che prolissi. Accetto quindi consigli ed osservazione che possano aiutarmi a migliorare l’esposizione (in caso contrario dovrete adattarvi ad uno stile molto distante da quello ottimale finché non riuscirò da solo a trovarne uno efficiente 🙂 )

Dobbiamo Assume che abbiate presente cosa sia un pastebin e passo direttamente al sodo.

Extjs ci permette di concentrare su una singola pagina web un’intero applicativo semplificando, per certi versi, lo sviluppo.

Vediamo come è composta la pagina web che ospiterà il nostro codice:

<html>
<head>
<title>PastE(xtjs)bin</title>
<link rel=”stylesheet” type=”text/css” href=”ext-2.2/resources/css/ext-all.css”>
<link rel=”stylesheet” type=”text/css” href=”pastebin.css”>
</head>
<body>
<script type=”text/javascript” src=”ext-2.2/adapter/ext/ext-base.js”></script>
<script type=”text/javascript” src=”ext-2.2/ext-all-debug.js”></script>

<script type=”text/javascript” src=”pastebin.js”></script>
</body>
</html>

Se pensate che la pagina sia scarna non avete tutti i torti. Solitamente si usa costruire la pagina in html e poi aggiungere la logica in javascript per poter garantire l’accesso anche a chi non ha javascript abilitato. Noi abbiamo due motivi che ci spingono a massimizzare l’uso di javascript: stiamo sviluppando un’applicativo di prova e vogliamo evitare per quanto possibile l’abuso da parte di spider della possibilità di incollare testi non controllati.
Continua a leggere “ExtJs: le basi dell’applicazione”

ExtJS: Imparare sperimentando

Be, non ce l’ho fatta ed ho deciso di partire con questo duplice esperimento: da una parte costruire una piccola applicazione utilizzando extjs, dall’altra annotare passo passo su questo blog i progressi ed i ripensamenti a cui andrò incontro nel progetto.

Si tratterà di un appuntamento settimanale, almeno nelle mie più rosee previsioni, in controtempo con quello sugli ebook a licenza libera, e quindi pubblicherò un post alla settimana nella notte tra martedì e mercoledì, magari poche righe, quando il programma sarà in stallo, ma spero così di riuscire ad esprimere la difficoltà intrinseca all’uso della libreria.

Ovviamente ogni critica o suggerimento saranno più che accetti, anzi graditi.

Evitiamo di perdere altro tempo, anche se si tratta di un’introduzione bisogna che mantenga un piglio operativo, e cerchiamo di stabilire le specifiche del progetto.
Continua a leggere “ExtJS: Imparare sperimentando”

Extjs vs Firebug

Da bravo sviluppatore web la mia cassetta degli attrezzi contiene, tra le altre cose firebug e la web developer bar. Potete immaginare il mio entusiasmo quando appena aperta la pagina degli esempi di etxjs mi sono trovato davanti al messaggio: Attenzione, firebug causa problemi di performance ad extJs.

Se poi considerate che la frase – causa problemi di performance – è un eufemismo, vi lascio immaginare la mia strabordante contentezza.

Se le performance possono non essere un problema, potrete facilmente figurarvi il mio sconforto alla scoperta che anche l’esecuzione passo passo è inutilizzabile. Dopo qualche tentativo ed esplorazione tra i forum di supporto, le invettive dei diversi sviluppatori che si trovano davanti al problema (si, non sono solo) capisco, almeno credo di capire, che il problema è dovuto alle dimensioni dello script extJs.

Le 34343 linee di codice per la libreria sono troppe per firebug che, sul mio sistema non riesce a tracciare l’esecuzione quando quest’ultima arriva al file ext-all-debug.js.

Piuttosto che procedere alla cieca sperando di arrivare all’errore senza troppi blocchi, o almeno senza troppe pause troppo lunghe per la mia quasi infinita pazienza, 😉 ho pensato di sezionare la libreria in più file.

L’espediente sembra funzionare e quindi non mi resta altro che riportare il piccolo script che seziona la libreria principale e sperare che la cosa possa essere di aiuto a qualcuno.

#!/bin/bash
# checksum md5 del file ext-all-debug.js
EXT21_MD5SUM='b854fc982dcec3781f1beb9653f33234'
MD5_PATH=`which md5sum`
INPUT_MD5=`$MD5_PATH $1  | cut -f 1 -d \ `

if [ "$2" = "" ]
then
    DIR='.'
else
    DIR=$2
fi

if [ "$EXT21_MD5SUM" = "$INPUT_MD5" ]
then
    head $1 --lines 2036 > $DIR/ext-all-debug-p01.js
    head $1 --lines 5679 | tail --lines 3643 > $DIR/ext-all-debug-p02.js
    head $1 --lines 8125 | tail --lines 2446 > $DIR/ext-all-debug-p03.js
    head $1 --lines 10897 | tail --lines 2771 > $DIR/ext-all-debug-p04.js
    head $1 --lines 13672 | tail --lines 2775 > $DIR/ext-all-debug-p05.js
    head $1 --lines 16309 | tail --lines 2636 > $DIR/ext-all-debug-p06.js
    head $1 --lines 19076 | tail --lines 2766 > $DIR/ext-all-debug-p07.js
    head $1 --lines 21817 | tail --lines 2741 > $DIR/ext-all-debug-p08.js
    head $1 --lines 24851 | tail --lines 3034 > $DIR/ext-all-debug-p09.js
    head $1 --lines 27420 | tail --lines 2569 > $DIR/ext-all-debug-p10.js
    head $1 --lines 31057 | tail --lines 3637 > $DIR/ext-all-debug-p11.js
    tail $1 --lines 3285 > $DIR/ext-all-debug-p12.js
else
    echo -e ' Questo script funziona solamente con la versione 2.1 di extjs\n' \
         'In particolare seziona il file ext-all-debug.js'
fi

Come primo parametro va il path della libreria, ext-all-degub.js, come secondo il path dove andare a salvare i vari spezzoni.

Includere i tag script corrispondenti, salare, mettere in forno e debuggare quanto basta. 🙂

bash: head tail VS tail head

In questi giorni ho dovuto selezionare delle stringhe all’interno di alcuni file in bash.

Sono sempre stato solito usare i comandi head e tail concatenati nel modo seguente:

head <nomefile> --lines <linea da selezionare> | tail 1

ma scartabellando in internet nel tentativo di trovare un comando simile mi sono trovato di fronte ad una versione diversa della mia solita pipe:

tail <nomefile> --lines +<linea da selezionare> | head 1

La domanda che mi sono posto è stata: quale delle due versioni è più efficiente?

Su Diecimila iterazioni su diecimila file diversi la media misurata con time su 50 prove è stata di 39,74 secondi a prova per la prima versioe e di 40,97 per la seconda versione.

Diecimila iterazioni del comando sullo stesso file, in modo da testare il comportamento anche con il supporto della cache ha mostrato uno scarto ancora più ridotto, 26,984 contro 27,183 secondi e quindi considererei le due versioni sostanzialmente equivalenti.

Un’altra valutazione da fare riguarda i tempi, paragonabili nel caso in cui la riga da selezionare si trovi in testa o in coda al file.
Mi sarei aspettato uno sbilanciamento a favore di una delle due soluzioni in un caso controbilanciato da una situazione contraria nel caso opposto ma così non è stato. Qualcuno ha idea del perché?

E questo, per ora, è tutto