Archivio

Archivio per la categoria ‘Coding’

Reset di un campo Select mediante jQuery

7 settembre 2009 Simone Nessun commento

Appunti per me, per google e per coloro che sapranno cosa farsene:

  • Reset alla prima option

$(‘#select_id’).val($(‘option:first’, this).val());

  • Reset ad opzione nulla

$(‘#select_id’).val(null);

Categorie:Coding, Javascript Tag:

Il meteo sul display della stampante

13 febbraio 2009 Simone 2 commenti

Ispirato da questo, ho fatto una modifica allo script proposto da Yaakov al fine di stampare i risultati nel caro, vecchio sistema metrico decimale e per importare i dati del METAR di Forlì.

4200wx

E’ necessario installare da CPAN le librerie

use LWP::Simple;
use IO::Socket;
use Geo::METAR;

e modificare l’indirizzo IP della stampante ed il codice ICAO che, nel caso di Forlì, è LIPK.

Lo script è stato testato su una HP4350, che ha un display 20×4. Your mileage may vary.

Prosegui la lettura…

Spammer FAIL

23 gennaio 2009 Simone Nessun commento
...

Date: Fri, 23 Jan 2009 12:09:48 +0900
From: [?var=TAGMAILFROM]
Subject: [?var=rx]

...

[?var=rx]

http://[?var=urlrx]

Ritenta, sarai più fortunato…

Categorie:Coding, Software, Sysadmin Tag:

Chrome Acid3 test

3 settembre 2008 Simone 1 commento

 

Chrome

Chrome

Safari

Safari


Onestamente mi aspettavo qualcosina di più da Webkit…

Google Chrome Javascript Benchmark

3 settembre 2008 Simone Nessun commento

A voi due miei cari lettori, ecco i dati tratti dal sito di Sunspider relativi al benchmark javascript che ho effettuato su tutti i browser che ho a disposizione, ordinati per performance ottenuta: minore il risultato, migliore la prestazione. (Less is better).

Google Chrome 0.2.149.27
	Total:                 1483.6ms +/- 0.7%
Mozilla Firefox 3.0.1
	Total:                 3435.0ms +/- 1.2%
Safari 3.1.2
	Total:                 3437.4ms +/- 1.1%
Opera 9.5.2
	Total:                 4003.6ms +/- 4.4%
Internet Explorer 7.0.5730.13
	Total:                 26231.8ms +/- 2.3%

Personal file sharing

7 agosto 2008 Simone 1 commento

Le premesse lasciamole a chi non ha nulla da dire: andiamo al sodo.

Il problema dello scambio di dati da 1 ad N persone su internet viene solitamente affrontato sulla base del valore di N:

  • una persona: email, IM
  • piccolo gruppo di persone: email, FTP
  • enorme gruppo di persone: bittorrent

con relativi svantaggi:

  • Email: limitazioni nella dimensione degli allegati
  • IM: costoso in termini di banda per chi invia
  • FTP: costoso in termini di banda, tipicamente non disponibile
  • bittorrent: privacy inesistente nel caso di pubblicazione su un tracker pubblico, difficile setup di un tracker privato

La soluzione bittorrent, pur con dei -risolubili?- problemi, appare immediatamente come quella tecnicamente più conveniente, scalando perfettamente da piccoli numeri (comunicazione 1-1) a numeri anche grandissimi (comunicazione 1-N).

Ho deciso di dedicarmi, come progetto a lungo termine, alla programmazione di un client IM basato su XMPP che implementi un tracker/client bittorrent e la relativa gestione dei download ristretta a gruppi di utenze.

Chiunque abbia suggerimenti, feature da proporre, voglia di dare una mano, può lasciare un commento qui.

Modificare una pagina web con una riga di Javascript

17 luglio 2008 Simone Nessun commento

Testato e funzionante su Firefox 3 ed Internet Explorer 7. Copiate la riga che segue nella barra dell’indirizzo, sostituendola con l’URL presente e premete invio.

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

Buon divertimento!

via blogstorm

Categorie:Javascript Tag:

InnerHTML su oggetto Select e Internet Explorer

17 luglio 2008 Simone Nessun commento

L’impostazione della proprietà innerHTML su un oggetto di tipo select

<select name="name" id="id">
 <option value="a">a</option>
</select>

tramite una chiamata Javascript come

document.getElementById('id').innerHTML='<option value="b">b</option>';

fallisce miseramente su Internet Explorer.

Il workaround è un wrap dell’oggetto select all’interno di un <div> così strutturato

<div id="div-id">
 <select name="name">
  <option value="a">a</option>
 </select>
</div>

e la riscrittura dell’intero contenuto del div mediante innerHTML come segue:

document.getElementById('div-id').innerHTML='<select name="name><option value="b">b</option></select>';

via support.microsoft.com

Evitare il re-submit dei dati di un form mediante refresh

27 giugno 2008 Simone 1 commento

Durante l’implementazione di un meccanismo di inserimento dati via web, mi sono imbattuto in un problema derivante dal comportamento atipico del pulsante “Refresh” del browser Mozilla Firefox.

Per evitare il re-submit accidentale dei dati del form mediante un refresh della pagina di destinazione (quella indicata nell’attributo “action” del tag “form”), ho creato un sistema, basato sull’impostazione dell’header “Location:” che redirige il browser dalla pagina che elabora gli input a quella che conferma l’avvenuto inserimento dei dati.

Il “percorso” realizzato durante la navigazione è dunque quello che segue:

  1. form.jsp : inserimento dati
  2. dataprocess.jsp : elaborazione dati, redirige senza alcun input sulla pagina seguente
  3. confirm.jsp : pagina statica di conferma dell’avvenuta ricezione dei dati inseriti.

In questo modo, pensavo, il refresh della pagina confirm.jsp non tenterebbe il resubmit dei dati, essendo quest’ultima differente dalla pagina indicata come action su -1-.
Questo è vero per i browser IE6, Safari 3, Opera 9.5, i quali, log del web server alla mano, effettuano solamente un GET di -3-.
Firefox 3, al contrario, esegue nuovamente un POST su -2- per poi finire come da copione su -3-.

Una soluzione possibile viene dal settaggio di un cookie impostato su -1-, che deve essere letto come prima operazione su -2- ed immediatamente distrutto. La presenza del cookie testimonia che il percorso effettuato per il submit dei dati è effettivamente un POST da -1- e non un refresh da -2- o -3- che sia.

Tag "option" ed evento "onClick" su Internet Explorer

26 giugno 2008 Simone 10 commenti

Sulla falsariga del post di ieri, continuo ad appuntarmi i problemi incontrati con JS su Internet Explorer, nella speranza che quanto scritto possa servire, prima o poi, a qualcuno.

Internet Explorer, perlomeno nella versione 6, non supporta la sintassi che segue:

<select id="do">
    <option onclick="do(this)" value="Do This"> Do This </option>
    <option onclick="do(this)" value="Do That"> Do That </option>
</select>

La soluzione viene dalla sintassi

<select id="do" onchange="do( this.value )">
    <option value="Do This"> Do This </option>
    <option value="Do That"> Do That </option>
</select>

ossia dallo spostamento dell’evento dal singolo elemento all’elemento select padre. La funzione dovrà essere ovviamente invocata non più utilizzando this come argomento, ma this.value, ovverosia l’attributo value dell’opzione selezionata. Tale funzione avrà una forma simile a quanto segue:

function do( optionValue )
{
	switch( optionValue )
	{
		case "Do This" :
			// SPECIFIC CODE HERE
		break;
		case "Do That" :
			// SPECIFIC CODE HERE
		break;
	}
}

via matthom