accgraphsimMentre cercavo come utilizzare l’accellerometro del mio MacBook mi sono imbattuto in questo articolo che spiega come simulare l’accelerometro sul nostro IPhone Simulator visto che non c’è di default, senza l’ausilio di un vero device. Come spiega Karan Vasudeva, autore dell’articolo, bisogna scaricare UniMotion che legge l’SMS (Sudden Motion Sensor) del Mac e che ritorna i valori in vari formati. Poi bisogna scaricare un’altro software, scritto da Otto Chrons, e che trovate qui. Quest’ultimo software e diviso in due parti, uno va installato sul simulatore e l’altro va incluso nei vostri programmi sotto forma di libreria semplicemente inserendo un

#import "AccelerometerSimulation.h"

a questo punto, sempre Karan, usa il suo script python che lega i 2 software e passa il risultato di UniMotion all’IPhone Simulator attraverso il codice di Otto. Ma come funziona e cosa centro io? Allora il software di Otto, ACCSim, è diviso in 2 parti, un server e un client, il server sta in ascolto sulla porta 10552 in attesa di una stringa tipo:

ACC: , timestamp, x, y, z

questa stringa viene raccolta e passata dallo script di Karan ed a questo punto entro in gioco io, che grazie alla libreria python trovata, PyAppleSMS e di cui parlo nel post precedente, ho modificato lo script di Karan per utilizzare questo modulo in modo da rendere il tutto piu leggero e facile.
Per testare il tutto quindi scaricate il software di Otto, copiate ed incollate questo script python:

import sys, socket, time, traceback
import applesms

kCFAbsoluteTimeIntervalSince1970 = 978307200.0 # from CFDate.c

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',0))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

while 1:
    try:
        x, y, z = map(lambda x: -1 * x, applesms.coords())
        # change epoch to be compatible with CFAbsoluteTimeGetCurrent()
        currentTime = time.time() - kCFAbsoluteTimeIntervalSince1970

        accdata = ','.join(map(str,('ACC: 0',currentTime,x,y,z)))

        sock.sendto(accdata, ('', 10552))
        # print '% .2f % .2f % .2f' % (x, y, z)
    except (ValueError, KeyboardInterrupt):
        sock.close()
        sys.exit(-1)
    except applesms.error, e:
        print 'An error occurred in PyAppleSMS module: %s' % str(e)
        sys.exit(-1)
    except:
        traceback.print_exc()

che non è altro che lo script di Karan che però utilizza la libreria PyAppleSMS. Avviando AccelerometerGraph, un programma di esempio che trovate nella Knowledge Base di ADC e che vedete nell’immagine sopra, e lo script che trovate sopra vi accorgerete che funziona, non so quanta attendibilità può esserci nel formato fornito, ma so che funziona e legge i dati. Vi rimando alle pagine linkate quà e là per il post per le rispettve informazioni.
Spero di essere stato chiaro, se pero cosi non è stato sentitevi liberi di chiedere delucidazioni in merito i commenti esistono per questo.

– Fine –
Post scritto con KBlogo

untitled imageUna delle cose che mi piacciono di più del mio nuovo MacBook è proprio l’accelerometro (Sudden Motion Sensor) montato ormai su quasi tutti i modelli Mac e che servono a far bloccare le testine dell’hard disk in caso di caduta del portatile. Quello che ho cercato è come usare questo accessorio per qualche altro utilizzo. Cercando un po su Google sono arrivato su questa pagina, in italiano, dove questo ragazzo ha creato un modulo scritto in C per interrogare l’SMS con Python. Vi basta scaricare il modulo, PyAppleSMS, decomprimerlo e installarlo con un semplice

python setup.py install

una volta installato potete leggere i valori dell’SMS semplicemente importando il modulo e chiamare il metodo per leggere le coordinate. Un esempio lo trovate nell’archivio del modulo altrimenti bastano queste due righe di codice:

import applesms
(x, y, z) = applesms.coords()

Ora sta a voi farci qualcosa di utile, potete usarlo nelle vostre applicazioni o nei vostri giochi.
Buon lavoro a tutti!!!

– Fine –
Post scritto con KBlogo

Durante questo fine settimana mi sono un po concentrato sull’utilizzo di python per gestire uno dei database piu famosi al mondo, MySql. Avevo già scritto qualche cosa ma ho voluto creare una interfaccia visuale al semplice e potente client da riga di comando. Il programmino è scritto in python e QT come librerie grafiche, il perché non lo so, forse la settimana prossima faro un porting su GTK. Per il momento il programmino non fa altro che eseguire delle query e fornire i risultati. Ma vediamo velocemente come creare un piccolo script per eseguire delle query su un db Mysql. Per prima cosa abbiamo bisogno del modulo che permette a python di interagire con Mysql, il suo nome è python-MySqldb per installarlo su sistemi Debian based basta digitare, da amministratore:

# apt-get install python-MySqldb

a questo punto abbiamo tutto il necessario per iniziare . Per prima cosa apriamo il nostro nuovo file .py nel nostro editor preferito ed iniziamo con l’importare il modulo:

import MySQLdb

a questo punto non ci resta che creare una connessione con il DB:

 conn = MySQLdb.connect (host = "localhost",
                           user = "testuser",
                           passwd = "testpass",
                           db = "test")

ora abbiamo un oggetto connessione che punta ad un database all’indirizzo “localhost” con utente “testuser” e password “testpassword” ed abbiamo chiesto di utilizzare il database “test”. Una volta ottenuta la connessione abbiamo bisogno di qualcosa che ci indichi sempre come e dove comunicare con il DB quindi creiamo un oggetto cursore:

cursor = conn.cursor()

Fatto questo ora possiamo iniziare ad interrogare il nostro DB lanciando delle query semplicemente lanciandole attraverso il metodo appropriato:

cursor.execute ("SELECT * FROM testtable")

dove estraiamo tutto il contenuto della tabella “testtable” all’interno del DB “test” per vedere il risultato della query abbiamo bisogno di prendercelo:

   row = cursor.fetchone ()
   print row

Quindi avremo stamapato a schermo il risultato dell’interrogazione. Gli statement sopra non sono ilmassimo dato che potremmo avere piu righe e piu colonne per ogni riga quindi sarebbe meglio ciclare, magari con un for, sul risultato e poi utilizzarlo come meglio crediamo.
Possiamo fare tutte le interrogazioni che vogliamo l’importante è lanciarle con il metodo “execute” l’importante è che al termine di tutte le nostre operazioni chiudiamo la connessione con il DB eseguendo un:

   cursor.close()
   conn.close()

Sinceramente la chiusura del cursore al momento mi da errore ma non so non ho letto per bene la documentazione, quindi assicuratevi di chiudere almeno la connessione con il db. Questo e tutto non vi resta che mettervi e provare, per maggiori info potete visitare il sito del modulo su SourceForge.
Se invece volete usare il mio programmino, chiamato QSql potete scaricarlo dal link qui sotto. Ogni commento o critica è benvenuta, per qualsiasi chiarimento non vi resta che chiedere.

QSql v1.0 QSql v 1.0

– Fine –
Post scritto con KBlogo

Dato che ogni tanto mi metto a provare qualche idea che mi viene i mente oggi mi sono messo a giocherellare un po con il mod_python [1], ma sul mio server non era configurato quindi, se a qualcuno puo servire, metto qui i semplici passi per configurarlo.
Per prima cosa bisogna installarlo, io uso una Debian quindi un semplice:

sudo apt-get install libapache2-mod-python

Non ci rsta che configurare Apache per interpretare i nostri file Python. Esistono 2 modi per farlo, fargli interpretare file python puri, .py per intenderci, oppure file Python Server Pages , .psp, che permettono di integrare codice python direttamente nell’HTML. Io ho scelto la seconda, non conosco i vantaggi e solo perche ricordavo di aver fatto questa in precedenza e quindi l’ho usata.
passiamo quindi alla configurazione di apache quindi apriamo il file di configurazione di default dei virtual host di Apache, la posizione varia in base alla distribuzione e dipende se avete altre configurazioni di virtual host, richiamando il file in questo modo:

vi /etc/apache2/sites-available/default

e aggiungo le linee che mancano alla vostra configurazione:

[...]

                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
		## Queste linee abilitano l'interpretazione dei file .py
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
                PythonDebug On
		## fine

[...]

fatto questo salviamo e riavviamo il server Apache:

sudo /etc/init.d/apache2 restart

Ora bisogna testare se il tutto funziona, sempre che fino ad ora tutto sia andato liscio, lo facciamo creando due file, un semplice form in HTML, lo chiameremo test.html:

<html>
<head><title> Mod_python test form</title></head>
<body>
<form action=”form.py/processa” method=”POST”>
Inserisci il tuo nome:<br />
<input type=”text” name=”name”><br />
<input type=”submit”><br />
</form>
</body>
</html>

e un file python che processi i dati del form, lo chiameremo form.py:

def processa(req, name):
    if not name:
        return "Who are you?"
    else:
        return "Ciao %s!" % name

salviamo questi file nella directori radice di Apache, nel mio caso /var/www ed apriamo il nostro browser all’indirizzo, sempre nel mio caso, http://localhost/test.html apparirà un form molto semplice inserite il vostro nome o quello che vi pare e cliccate sul bottone. il risultato sara qualcosa tipo Ciao quellocheavetenserito. Se fino ad ora tutto non ha restituito errori ed ha funzionato allora potete iniziare a divertirvi a scriptare quanto volete, ma se invece qualcosa non funziona allora vi verrà segnalato.
Mod_python utilizza un oggetto request che possiamo utilizzare per processare i nostri dati alcune funzioni utili allo scopo possono essere req.write() e req.read() per scrivere e leggere sull’oggetto o si possono sollevare eccezzioni con apache.SERVER_ERROR. Questo dovrebbe essere tutto se avete problemi chiedete cerchero di rispondervi e chiarire i vostri dubbi.

[1] www.modpython.org

– Fine –
Post scritto con KBlogo

Posto qui una semplicissima funzione per generare un colore unico in base ad una stringa data. l’algoritmo e semplicissimo e non c’e nulla di cosi elaborato anzi… Spero possa servire a qualcuno?!?!

function generateColor($string) {

// Number to generate
$length = 3;
// Start position in md5 string
$start = 0;
// Value to increment in md5 string
$inc = 10;

$color = array();
$possible = md5($string);
$i = 0;

	while ($i < $length) {
		$char = substr($possible, $start, $length-1);
		//uncomment this to enable hex output
		//$color[$i]= $char;
		$color[$i]= hexdec($char);
		$i++;
		$start += $inc;
	}

return $color;

}

– Fine –
Post scritto con KBlogo

Java e LinuxIeri mi e capitato di dover compilare un file Java sulla mia Linux Box e quando sono andato lì per farlo da riga di comando mi diceva di non trovare il file allora mi sono messo a girellare e veramente non avevo nulla. Ma come? Se fino all’altro ieri usavo Eclipse come mai oggi non funziona. Allora ho scoperto che installando Eclipse con apt-get si tira giù si il JDK, ma li mette chissà dove e chissà in quale modo, infatti cercando nella macchina si trova qualche classe nelle cartelle di Eclipse che ricorda i file nel /bin che si usano per complire, debuggare o documentare.
Poche chiacchiere mi sono scaricato il file del JDK, che trovate a questo indirizzo, e l’ho installato richiamando il file da linea di comando:

$ chmod +x jdk-6u11-linux-i586.bin
$ ./jdk-6u11-linux-i586.bin

Otteniamo un lungo output, in pratica e la licenza con cui viene distribuita la piattaforma:

This is where you agree to their license. Press the space bar to scroll down in “More”.

alla fine della licenza ci sarà una domanda a cui noi risponderemo di si, è qui che daremo conferma per l’installazione

Do you agree the the above license terms? [yes or no]
yes

A questo punto ancora un lungo output scorrerà sul nostro schermo, la procedura di installazione durerà un po, dipende tutto dalla vostra macchina. Appena finito troverete i vostri file in /usr/share/java, se non sarà lì, ma sarà nella directory dove avete salvato il file non preoccupatevi, copiatelo senza problemi.
Fatto questo non resta che dire al vostro sistema dove trovare i file delle classi, i binari, ecc. di java, per farlo aprite il file .bash_profile nella vostra home directory ed inserite quanto segue:

PATH=/usr/java/jdk1.6.0_11/bin:$PATH:$HOME/bin:./
export PATH
export JAVA_HOME=/usr/java/jdk1.6.0_11export CLASSPATH=/usr/java/jdk1.6.0_11/lib/tools.jar:/usr/java/jdk1.6.0_11/jre/lib/rt.jar:./

appena fatto salvate e chiudete il file, ora non ci resta che testare il tutto. Per farlo ciserviamo del classico programma che si impara quando si inizia ad apprendere e studiare un nuovo linguaggio, Hello World, io ovviamente lo modifico sempre mettendo Hello Giasone, ma voi fate un po come volete. Quindi aprite un editor di testi e incollate il questo codice:

public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello Giasone");
}
}

salvate il file con il nome Hello.java e provate ad eseguirlo. In Java i file sorgenti vanno prima “compilati” per tradurli in bytecode eseguibile dalla VM, per far ciò dalla riga di comando:

$ javac Hello.java

Vedremo che nella cartella apparirà il file Hello.class, questo è il file eseguibile proviamo quindi ad eseguirlo:

$ java Hello
Ciao Giasone

Ecco allora che tutto funziona!!! Qindi non vi resta che iniziare a giocherellare con il vostro codice. Per grandi progetti vi consiglio di utilizzare ambienti IDE più complessi che vi offrono molte facility in più ed utilizzare questo metodo solo per piccoli file o progetti semplici. Non mi resta che augurarvi un buon lavoro e Enjoy your Java Console.

P.S. Tutto questo e stato testato su una Debian e con il JDK 6 di java ma dovrebbe valere anche per le altre distro, per quelle distibuzioni che supportano i pacchetti rpm esiste anche una versione del JDK con estensione rpm che non ho però provato.

– Fine –
Post scritto con KBlogo

In alcuni casi abbiamo bisogno di un modo per inviare le email dal nostro web server locale attraverso la funzione PHP mail(), ma quando ci si scontra con Sendmail la cosa ci fà un po impallidire, Sicuramente sendmail è un software valido, potente e molto versatile, ma molto complesso sia per quanto riguarda il funzionamento sia per quanto riguarda la configurazione. Per ovviare al problema arriva in nostro soccorso un software veramente leggero e facile da configurare, sSMTP. Ma passiamo subito alla pratica:

  • Installare ssmtp e abbastanza semplice, se siamo in un ambiente Debian/Ubuntu e simili basta un apt-get install ssmtp ma lo stesso vale per Fedora e simili, sicuramente troverete il modo di farlo quindi andiamo avanti visto che questo non è oggetto del post.
  • Appena installato possiamo modificare con il nostro editor preferito, vi, il file di configurazione che troviamo in /etc/ssmtp/ssmtp.conf commentando o aggiungendo le righe come le troviamo all’interno del file che segue:
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#root=mioindirizzo@dominio.tld

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.mioserversmt.tld

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=www.altropiano.com

#UseSTARTTLS=YES
AuthUser=nomeutente
AuthPass=password

#AuthMethod=LOGIN

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
  • Una volta configurato ssmtp possiamo passare alla modifica del file di configurazione di php.ini, il file di configurazione di PHP che troviamo in /etc/php5/apache2/php.ini , se su sistemi debian-like cercando lla direttiva che troviamo di seguito inserendo il path di ssmtp:
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/ssmtp -t
  • Ora non ci resta che riavviare il server web apache in modo che il php.ini venga ricaricato;
/etc/init.d/apache2 restart
  • Arrivati a questo punto abbiamo finito quindi non ci resta che testare il funzionamento ad esempio inviando una mail di prova da riga di comando digitanto:
$ ssmtp emaildestinatario@dominio.tld
invio a vuoto
testo del messaggio ed invio
ctrl-d per finire;

oppure

$ mail -s "Oggetto del messaggio" emaildestinatario@dominio.tld
CC: emailincopia@dominio.tld
testo del messaggio
inserire un punto in una riga vuota e premere invio per finire;
  • E qui siamo veramente alla fine. Se volete fare un ulteriore test potete crearvi un file php ad hoc che implementi la funzione mail(). Se avete riscontrato qualche problema o trovate delle imprecisioni o volete solo dire la vostra sentitevi liberi di commentare.

– Fine –
Post scritto con KBlogo

Finalmente qualche giorno fa sono riuscito ad installare Linux sul mio palmare. Avevo iniziato qualche tempo fà ma poi non ricordo perche ho abbandonato, ma l’altro giorno riprovandoci, in pochi minuti, ci sono riuscito. Installato il sistema ho scelto come windows manager GPE che risulta essere molto leggero e stabile, requisiti fondamentali visto che l’ho installato su un Ipaq 3630. Subito è sorto il problema di come farlo connettere ad Internet visto che non ha ne bluetoooth ne wireless. Documentandomi ho visto che era anche possibile farlo usando una connessione USB ma la mia basetta (cradle) era seriale, sembravo essere perseguitasto dai problemi ma eBay è venuto in mio aiuto e alla modica cifra di 3 euro + 12 di spedizione (ladri) me ne sono procurato uno. Dato che non esiste nessuna guida in italiano ho deciso di postare qui la procedura sia per me che per gli altri. Vabbè iniziamo:

Nota: Queste istruzioni sono state testate su una Ubuntu 7.04 e Familiar 0.8.3

Queste operazioni vanno eseguite sulla macchina principale (pc, laptop)

  • Far caricare automaticamente all’avvio (o caricare manualmente) il modulo usbnet eseguendo questi comandi come root (sudo -i):
  • echo "usbnet" > /etc/modutils/usbnet
    update-modules
  • Aggiungere queste righe al file /etc/network/interfaces
    mapping hotplug
         script grep
         map usb0
         iface usb0
         inet static
         address 192.168.2.200
         netmask 255.255.255.0
         broadcast 192.168.2.255
         pre-up /etc/network/ipaq
  • Nota: attenzione agli indirizzi ip, se usate la stessa classe di indirizzi per la vostra connessione sentitevi liberi di cambiarli a vostro piacimento.
  • Creare lo script /etc/network/ipaq
     #!/bin/sh
     sleep 5
     exit 0
  • Assicurarsi che /etc/network/ipaq sia eseguibile altrimenti :
    sudo chmod a+x /etc/network/ipaq
  • Ora sul palmare settare /etc/network/interfaces

    iface usbf inet static
    address 192.168.2.202
    netmask 255.255.255.0
    network 192.168.2.0
    gateway 192.168.2.200
  • Inserire il palmare nella basetta (cradle) o collegare il cavo e avviare questo comando sul pc principale (pc, laptop), noterete che il palmare appena connesso si bloccherà, non preoccupatevi è normale e si sblocchera dopo l’esecuzione di questo comando:
    sudo ifup usb0
  • Ora aggingete questo sulla macchina principale al file /etc/hosts:
           192.168.2.202 ipaq
  • Provate a pingare il vostro palmare:
           ping ipaq
  • Se questo non dovesse funzionare (a me ha funzionato alla prima ma qualcuno non potrebbe essere cosi fortunato) provate a dare modprobe usb-eth sul Palmare oppure eseguire ifup usbf sempre sul palmare.
  • Ora utilizziamo Firestarter per abilitare il NAT (Internet Connection Sharing) per le connessioni locali (Local network) tramite “usb0″:
    1. Apri Firestarter.
    2. Clicca “Edit -> Preferences
    3. Clicca “Network Settings
    4. Sotto “Local network connected device“:
      1. Poi “Detected device(s):” seleziona “Unknown device (usb0)
      2. Spunta “Enable Internet connection sharing“.
    5. Clicca “Accept“.
  • Copia /etc/resolv.conf nel tuo palmare:
    sudo scp /etc/resolv.conf  ipaq:/etc
  • Prova a pingare www.google.it dal tuo iPAQ:
    ping google.it
  • —- Fine —-

    Questa sera ho avuto bisogno di uno script che mi aiutasse a ridimensionare dinamicamnte il testo contenuto in una pagina html, non volevo creare qualcosa di pesante e che rendesse la pagina troppo pesante, ma grazie ad AJAX ci sono riuscito. Vediamo ora come fare:

    1. Creiamo uno script contenente le funzioni che agiscono sul DOM:

    <script type="text/javascript">//<![CDATA[
    //funzione che diminuisce la dimensione del testo
    function piccolo(){
    document.body.style.fontSize = "1em";
    }
    //funzione che riporta alle dimensione di default del testo
    function normale (){
    document.body.style.fontSize = "0.5em";
    }
    //funzione che ingrandisce la dimensione del testo
    function grande(){
    document.body.style.fontSize = "1.5em";
    }//]]>
    </script>

    NOTA: Vi ricordo di settare la dimensione normale del testo uguale a quella che avete nel foglio di stile, i valori possono essere espressi in em, px, pt.

    Fatto questo non vi resta che inserire nel body i link (vuoti) per poter chiamare le funzioni:

    <a onclick="grande();" href="#" title="Ingrandisci il testo"> A+ </a>|
    <a onclick=normale(); href="#" title="Testo normale"> A </a>|
    <a onclick=piccolo(); href="#" title="Diminuisci il testo"> A- </a>

    Questo é tutto, ora siete liberi di modificarlo come meglio credete magari inserendo delle immagini al posto del testo. Buon lavoro…

    USB Flashlight – video powered by Metacafe

    Originale non vi sembra? Se riesco a trovare un cavo usb che non uso me la faccio, magari con un paio di led al posto della lampadina ;-)

    Non lo fa inserire nelle pagine quindi vi tocca solo il link….