mercoledì 16 giugno 2010

Non fate come Urgo!

Primo post di bricolage!

Dovevo riempire uno spazio vuoto tra il termosifone e il muro, quindi ho pensato di metterci uno scaffale. Non trovandone di misura adeguata ho pensato: "Me lo faccio da me!".

 Non fate come Urgo!
Usate il legno per qualcosa di utile!

Ecco cosa serve:

  • una tavola di abete 40x100 (o meglio 20x200, anche se è più scomoda da trasportare vi risparmiate un po' di taglio)
  • un trapano/avvitatore
  • un seghetto alternativo (o altro tipo di sega)
  • 12 viti da legno di lunghezza adeguata
  • carta abrasiva
L'abete è un legno tenero, facile da lavorare, anche se si scheggia facilmente, quindi attenzione!

 Non fate come Urgo!
Usate gli occhialini di protezione!

Io ho usato un pannello 40x100, quindi per prima cosa l'ho tagliato per la lunghezza in modo da ottenere due pezzi del genere:


Dopo aver tagliato i due pezzi suddetti in tre "sottopezzi" ho preso quelli da 71 centimetri (i lati dello scaffale) e ho praticato 6 + 6 fori, così:


Passiamo ora ai ripiani.

Ho forato i bordi dei due ripiani "interi" (4 fori per pezzo):


E infine i bordi dei due ripiani piccoli, che vengono appesi da un lato solo (2 fori per pezzo):


Non resta che levigare tutti i pezzi con carta abrasiva (può andare a grana 120)
e assemblare il tutto con le viti.

Ed ecco a voi il risultato finale!


Alla prossima impresa!

Disclaimer: Non fate come Urgo!

lunedì 7 giugno 2010

Comunicazione tra Flex, JavaScript e Applet Java

A volte può essere conveniente far comunicare un'applicazone Flex con del codice JavaScript, o con un'applet Java, magari per sfruttare il multithreading.

Sembra una cosa complicata, ma non è così.
Supponiamo di voler chiamare il metodo work della nostra applet, e di passargli una stringa come argomento.
Basta una riga di codice ActionScript:

ExternalInterface.call("document.workerApplet.work", arg);

Perché il metodo sia visibile deve essere dichiarato pubblico:

public void work(String arg) {
    /* ... */
}

Se la computazione è pesante ricordatevi di avviarla in un thread separato, altrimenti l'esecuzione si bloccherà finché il metodo non ritorna.

Naturalmente l'applet deve essere inclusa nello stesso wrapper HTML:

<APPLET id="workerApplet"
    code="WorkerApplet.class" codebase="." align="baseline"
    width="0" height="0" MAYSCRIPT="true" />


Passiamo ora alla comunicazione da un'applet java a un'applicazione Flex.

In questo caso le cose si complicano un po'.
Prima di tutto è necessario includere il parametro MAYSCRIPT nel tag APPLET.
Poi bisogna registrare il metodo ActionScript in modo che sia accessibile tramite JavaScript:

// registration
private function registerCallback():void {
    ExternalInterface.addCallback(
        "externalComputationComplete",
        externalComputationComplete);
}
// callback
public function externalComputationComplete(s:String):void {
        Alert.show("Applet returned: " + s);
}

Ora si costruisce una funzione JavaScript che chiama il metodo registrato come "externalComputationComplete":

<SCRIPT LANGUAGE="JavaScript">
    function callFlexApp(s) {
        var flexApp = document.getElementById("flexApp");
        flexApp.externalComputationComplete(s);
    }
</SCRIPT>

Da quanto ho sperimentato questa funzione deve essere dichiarata dopo il tag APPLET affinché sia visibile al codice java.

È ora possibile chiamare callFlexApp da Java:

netscape.javascript.JSObject.getWindow(this)
    .call("callFlexApp", new Object[] {"done"});

Come si vede gli eventuali argomenti alla funzione JavaScript vanno passati in un array.

Inoltre per usare JSObject bisogna includere nel classpath il JAR $JAVA_HOME/jre/lib/plugin.jar

Ulteriori informazioni sulla comunicazione tra Flex e JavaScript si possono trovare al seguente link:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7f17.html
Per la comunicazione Java - JavaScript si veda:
https://jdk6.dev.java.net/plugin2/liveconnect/
Mentre per una panoramica sui metodi di JSObject il javadoc si trova all'indirizzo:
http://java.sun.com/javase/6/webnotes/6u10/plugin2/liveconnect/jsobject-javadoc/netscape/javascript/JSObject.html

È tutto, buona programmazione!