martedì 5 marzo 2013

Primi passi con GDX

La libreria GDX e' indirizzata allo sviluppo di giochi che permette di scrivere il codice una sola volta ed avere la propria applicazione funzionante in Java, Android, HTML5 e IOS (ovviamente per poter effettuare la compilazione e' necessario aver installato e funzionante l'SDK di ciascun ambiente che per HTML5 risulta essere Google WebToolkit)

Per iniziare ad usa la libreria si deve scaricare la libreria ed il file gdx-setup-gui.jar e poi digitare

java -jar gdx-setup-gui.jar
tale programma crea lo scheletro dell'applicazioni nei vari linguaggi di programmazione

Una volta lanciato il programma si apre la schermata sottostante nel quale si possono impostare i vari settaggi (nel caso si puo' scaricare la libreria GDX o si puo' indicare dove e' posto il file .zip)




Terminato si effettua il Launch


La directory selezionata sara' popolata dai nuovi file. A questo punto si puo' aprire Eclipse e si seleziona Importa progetto esistente (attenzione da non confondere con Importa progetto Android esistente!!)


Si seleziona la directory in cui e' stato creato lo scheletro del programma e ci si trova di fronte ad una schermata di questo tipo

Ancora avanti ed al termine si avra' il Package Explorer di Eclipse popolato come segue 


Puo' accadere che vi sia un errore nel progetto HTML5 e puo' essere risolto come indicato nella seconda schermata del comando java -jar gdx-setup-gui.jar

Di fatto si lavorera' solo nel primo ramo del progetto (non in android.desktop,html) in quanto gli altri rami saranno solo dei wrapper


Soft Lockup su Debian Testing

Oramai e' cosi' tanto tempo che uso Linux che pensavo di averle e passate un po' tutte ma e' arrivata pronta la smentita

Qualche giorno fa avevo spento un vecchio portatile in modo normale senza nessun sintomo di errore (o meglio lo avevo spento un po' frettosolosamente perche' la spina a cui lo avevo attaccato a ricaricare aveva un po' di dispersione di corrente...lo shutdown era stato comunque corretto)

oggi al momento di riaccenderlo mi sono trovato davanti la seguente schermata


In pratica la CPU0 (l'unica!!) e' rimasta disattiva per 23 secondi ed il kernel ha mollato il colpo

Facendo partire il sistema con la visualizzazione dei comandi di boot l'ultimo comando ad essere tentato e'

rtc_cmos rtc can wake from s4

al momento non ho soluzioni

HP33s

Comprata su un mercatino a 15 euro questa e' la sorella minore (e piu' giovane) della HP48GX
Non ha capacita' grafiche ed e' solo blandamente programmabile..in compenso ha la notazione polacca inversa e la sua custodia originale

In sintesi una buona e solida calcolatrice scientifica




Scheda wireless long range Realtek 8187

UPDATE:
In Debian Squeeze il supporto a questa scheda di rete non e' compreso nel kernel ma si deve scaricare
apt-get install firmware-realtek
---------------------------------

Mi sono comprato per un po' di buon sano wardriving una scheda wireless con antenna ad alto guadagno che riporta sul retro una sigla di modello AWUS036H. La scheda si connette via USB

All'interno e' presente un chipset della Realtek 8187 che viene riconosciuto senza nessun problema dalla mia Debian Testing





Francamente al momento dell'acquisto ero un po' scettico ma come si puo' vedere dallo screenshot l'antenna esterna ad alto guadagno riesce a vedere in fase di prova tre access point in piu' della scheda integrata nel portatile; per quello che vedono entrambe le schede la qualita' del segnale della scheda esterna e' decisamente piu' alto


Bluetooth in LXDE su Debian

La gestione del Bluetooth in LXDE sotto Debian non e' banalissima come in Gnome dato che non e' presente nessuna applet nella traybar ne' si puo' aggiungere direttamente

Volendo evitare l'utilizzo dei comandi da shell si puo' premere la combinazione ALT+F2 digitando in seguito

bluetooth-applet

si vedra' cosi' comparire nella tray il simbolo di BT cosi' come in Gnome



lunedì 4 marzo 2013

Sensore di prossimita' Bluetooth



Uno degli utilizzi del bluetooth e' quello di utilizzare una apparecchiatura come una chiave per permettere l'accesso ad un servizio, nel momento in cui l'apparecchio ed il suo proprietario si allontana si puo'  effettuare la disconnessione o lo spengimento

Questa modalita' e' definita come "sensore di prossimita'" e vi sono due modalita'

1) Modalita' con accoppiamento
In generale e' possibile ottenere la qualita' del segnale (RSSI) di un apparecchio BT (e quindi la sola lontananza/vicinanza) solamente quando e' stato effettuato l'accoppiamento (o connessione)

In modo manuale si puo' seguire la presente procedura il seguente script in cui deve essere inserito il MAC address Bluetooth del dispositivo da monitorare

--------------------------------------------------------

#!/bin/bash
#set -o verbose sh -v
# Copied from Steven on http://gentoo-wiki.com/Talk:TIP_Bluetooth_Proximity_Monitor

# These are the sections you'll need to edit

 # You'll need to use the MAC address of your phone here
DEVICE="1C:66:AA:76:72:18" 

# How often to check the distance between phone and computer in seconds
CHECK_INTERVAL=2

# The RSSI threshold at which a phone is considered far or near
THRESHOLD=-13

# The command to run when your phone gets too far away
FAR_CMD='echo lontano'

# The command to run when your phone is close again
NEAR_CMD='echo lontano'

HCITOOL="/usr/bin/hcitool"
STARTX_PID=0
DEBUG="/tmp/btproximity.log"

connected=0

function msg {
    echo "$1" #>> "$DEBUG"
}

function check_connection {
    connected=0;
    found=0
    for s in `$HCITOOL con`; do
        if [[ "$s" == "$DEVICE" ]]; then
            found=1;
        fi
    done
    if [[ $found == 1 ]]; then
        connected=1;
    else
       msg 'Attempting connection...'
        if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
            msg 'Connected.'
            connected=1;
        else
                if [ -z "`l2ping -c 2 $DEVICE 2>&1`" ]; then
                        if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
                            msg 'Connected.'
                            connected=1;
                        else
                        msg "ERROR: Could not connect to device $DEVICE."
                        connected=0;
                        fi
                fi
        fi
    fi
}

check_connection

while [[ $connected -eq 0 ]]; do
    check_connection
    sleep 3
done

name=`$HCITOOL name $DEVICE`
msg "Monitoring proximity of \"$name\" [$DEVICE]";

state="near"
while /bin/true; do

    check_connection

    if [[ $connected -eq 1 ]]; then
        rssi=$($HCITOOL rssi $DEVICE | sed -e 's/RSSI return value: //g')

        if [[ $rssi -le $THRESHOLD ]]; then
            if [[ "$state" == "near" ]]; then
                msg "*** Device \"$name\" [$DEVICE] has left proximity"
                state="far"
                $FAR_CMD > /dev/null 2>&1
            fi
        else
            if [[ "$state" == "far" && $rssi -ge $[$THRESHOLD+2] ]]; then
                msg "*** Device \"$name\" [$DEVICE] is within proximity"
                state="near"
                $NEAR_CMD > /dev/null 2>&1
                STARTX_PID=$(pgrep startx)
            fi
        fi
        msg "state = $state, RSSI = $rssi"
    fi

    sleep $CHECK_INTERVAL
done

--------------------------------------------------------

l'output e' di questo tipo
--------------------------------------------------------

Read RSSI failed: Input/output error
state = near, RSSI =
Attempting connection...
Connected.
state = near, RSSI = 0
state = near, RSSI = 0
Attempting connection...
Connected.
state = near, RSSI = 0
state = near, RSSI = -8
Attempting connection...
Connected.
state = near, RSSI = -11
*** Device "" [1C:66:AA:76:72:18] has left proximity
state = far, RSSI = -21
Attempting connection...
Connected.
state = far, RSSI = -23
state = far, RSSI = -24
Attempting connection...
state = far, RSSI = -20
state = far, RSSI = -22

-------------------------------------------------------

2) Modalita' senza accoppiamento
Negli esempi di PyBluez e' presente un esempio in examples/advanced denominato inquiry-with-rssi.py in cui e' possibile ottenere il valore di RSSI senza effettuare l'accoppiamento (ovviamente il dispositivo BT deve essere visibile)

L'output e' di questo tipo
--------------------------------------------------------

current inquiry mode is 1
[1C:66:AA:76:72:18] RSSI: [-46]
[00:1B:EE:58:93:22] RSSI: [-44]
current inquiry mode is 1
[00:1B:EE:58:93:22] RSSI: [-47]
[1C:66:AA:76:72:18] RSSI: [-46]
[30:17:C8:C7:9A:A4] RSSI: [-82]
current inquiry mode is 1
[00:1B:EE:58:93:22] RSSI: [-76]
[1C:66:AA:76:72:18] RSSI: [-79]
current inquiry mode is 1
[1C:66:AA:76:72:18] RSSI: [-72]
[30:17:C8:C7:9A:A4] RSSI: [-81]
[00:1B:EE:58:93:22] RSSI: [-79]
current inquiry mode is 1
[30:17:C8:C7:9A:A4] RSSI: [-83]
[1C:66:AA:76:72:18] RSSI: [-73]
[00:1B:EE:58:93:22] RSSI: [-79]
current inquiry mode is 1
[30:17:C8:C7:9A:A4] RSSI: [-81]
[00:1B:EE:58:93:22] RSSI: [-78]
current inquiry mode is 1
[30:17:C8:C7:9A:A4] RSSI: [-79]
[1C:66:AA:76:72:18] RSSI: [-73]
-------------------------------------------------


Il problema generale e' che il valore di RSSI non e' solo funzione della distanza ma anche della presenza di interferenze come i muri e della potenza delle antenne di ogni singolo dispositivo. Inoltre il valore, tenendo fermo il dispositivo, e'ì piuttosto oscillante per cui deve essere preso un valore medio. Per terminare la scansione dei dispositivi BT e' piuttosto lenta


Screenshot in LXDE

Per ottenere uno screenshot in LXDE si deve prima installare

apt-get install scrot

dopo di cio' si deve editare il file ~/.config/openbox/lxde-rc.xml  inserendo le seguenti linee
--------------------------
<keybind key="Print"> 
<action name="Execute"> 
<command>scrot</command>
 </action> 
</keybind>--------------------------

i file saranno salvati in formato .png con nome l'ora e la data nella propria directory home

FigSpec FS-60CL

A lavoro mi hanno rifilato questo sensore iperspettrale cinese (pushbroom 400-1000 nm con larghezza di banda di 0.5 nm compatibile con DJI M...