mercoledì 4 gennaio 2012

Egroupware su Ubuntu

Un curioso comportamento di Egroupware su Ubuntu che avrebbe potuto mandarmi fuori di testa se avessi dovuto risolverlo da solo.

Il programma genera un errore
Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error
visualizzando alcune pagine in modo sostanzialmente casuale

fortunatamente si tratta di un fenomeno conosciuto e descritto qui a cui si risolve semplicemente disabilitando la cache APC di Php commentando l'unica riga contenuta nel file /etc/php5/apache2/conf.d/apc.ini e riavviando Apache

martedì 3 gennaio 2012

Backup incrementale con versioning su Linux

Uno dei problemi piu' comuni nel gestire un file server e' quello di realizzare un sistema affidabile di backup che sia incrementale e gestisca anche il versioning ovvero mantenga distinte le varie fasi di lavorazione di programma o file CAD che si voglia

la soluzione definitiva e' Rsnapshot

il programma si installa da
apt-get install rsnapshot

la configurazione si esegue da root editando il file /etc/rsnapshot.conf

modificando la voce snapshot_root si decide dove devono essere salvati i file di backup
al termine del file vengono configurate quali sono le directory da salvare riunendoli in gruppi
(nell'esempio localhost e' il gruppo)

La rotazione dei backup avviene semplicemente mediante crontab editando il file /etc/cron.d/rsnapshot


Una volta in esecuzione vengono generati i file con nomi che terminano con un numero; il numero 0 indica la versione piu' recente

Uno degli aspetti piu' fuorvianti e' che in tutte le directory ci sono gli stessi file e non e' immediato capire come viene gestito il versioning. Per risparmiare spazio disco i file che sono rimasti immutati dall'ultima esecuzione non vengono copiati ma viene creati un hard link visibile con il comando ls -l


Per eseguire un restore e' sufficiente copiare il file desiderato dal backup alla postazione originale. Da notare che il restore puo' essere eseguito solo da root in quando la directory di backup ha permessi 700


lunedì 2 gennaio 2012

GPS+Python+Android


Un esempio base per la gestione del GPS su Android via Python
(molto molto grezzo ma funzionante)

------------------------------------------------------------------------------------
import android, math
from time import sleep
droid = android.Android()
droid.startLocating()




title = ''
message = 'Acquisizione del punto'
droid.dialogCreateSpinnerProgress(title, message)
droid.dialogShow()
sleep(15)
droid.dialogDismiss()


location = droid.readLocation().result


if location == {}:
        location = droid.getLastKnownLocation().result


print location
print location['gps']
print location['network']
print location['network']['latitude']
print location['network']['longitude']
print location['network']['altitude']
print location['network']['accuracy']
print location['network']['speed']

Semplice esempio di SqlLite con Python per Android


nessuna pretesa...giusto una snippet
---------------------------------------------------------------------------
import sqlite3
import android


nome = ""
droid=android.Android()
# Connect to database file, create it if it does not exist
conn = sqlite3.connect('/sdcard/sqlitedemo.db')




# Get a cursor
cursor = conn.cursor()




# Create a table
cursor.execute("CREATE TABLE IF NOT EXISTS anagrafica (nome text)")




# Insert some data
while nome<>"exit":
     nome=droid.dialogGetInput("","Il nome prego").result
     sql_string = "INSERT INTO anagrafica VALUES ('"+str(nome)+"')"
     print sql_string
     cursor.execute(sql_string)
     conn.commit()




# Read the data back out
cursor.execute("SELECT * from anagrafica")
for row in cursor:
     print row

Client/Server in UDP tra Android e PC tutto con Python

per scambiare messaggi via rete tra il cellulare Android ed un PC la soluzione piu' semplice e' usare il protocollo UDP.
Di seguito una breve implementazione di prova tutta in Python

--------------------------------- SERVER su PC------------------------

# Server program

from socket import *

# Set the socket parameters
host = "192.168.1.98" #Importante - settare l'indirizzo reale della macchina SERVER
port = 21567
buf = 1024
addr = (host,port)

# Create socket and bind to address
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)

# Receive messages
while 1:
data,addr = UDPSock.recvfrom(buf)
if not data:
print "Client has exited!"
break
else:
print "\nReceived message '", data,"'"

# Close socket
UDPSock.close()
--------------------------------------------------------------------------------------

---------------------------- Client UDP su Android ---------------------------

import android
import socket
droid = android.Android();


hostname = "192.168.1.98"; # Hostname o IP del server
port = 21567;# Port
data = "";
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM);
s.connect((hostname,port));
print "Connected!";

data = "test"
exit = False;
while not exit:
    s.sendto(data,(hostname,port)); # Sending command  

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

s

Sensori su Android in Python

Un esempio di come leggere i sensori sul telefono mediante Python su Android

Attenzione : la lettura del sensore di luce, almeno per me, ha funzionato solo disattivando il gestore automatico dell'illuminazione dello schermo dal widget Risparmio energia
-------------------------------------------------------------------------------------------

import android, time
droid = android.Android()
droid.startSensingTimed(1,1000)
time.sleep(3)
for x in range(0,10):
#print "Accelorometro " + str(droid.sensorsReadAccelerometer().result)
print "Accelorometro asse X " + str(droid.sensorsReadAccelerometer().result[0])
print "Accelorometro asse Y " + str(droid.sensorsReadAccelerometer().result[1])
print "Accelorometro asse Z " + str(droid.sensorsReadAccelerometer().result[2])
#print "Magnetometro " + str(droid.sensorsReadMagnetometer().result)
print "Magnetometro asse X" + str(droid.sensorsReadMagnetometer().result[0])
print "Magnetometro asse Y" + str(droid.sensorsReadMagnetometer().result[1])
print "Magnetometro asse Z" + str(droid.sensorsReadMagnetometer().result[2])
#print "Orientazione "+ str(droid.sensorsReadOrientation().result)
print "Azinuth "+ str(droid.sensorsReadOrientation().result[0])
print "Pitch "+ str(droid.sensorsReadOrientation().result[1])
print "Roll "+ str(droid.sensorsReadOrientation().result[2])
# Azimuth e' l'orientazione rispetto al Nord come la bussola da 0 a 360 in senso orario
#Pitch e' l'inclinazione con la parte sinistra inclinata al massimo si ha +90, con la parte
#destra sollevata si ha -90
#Roll e' l'inclinazione del telefono in avanti ed indietro
print "Luce "+ str(droid.sensorsGetLight().result)
# Valore Luce
# 0 = luce stellare
# 1 = Luna piena
# 5 = scintillio
# 30 = luce da stanza
# 80 = corridoio
# 100 = giornata nuvolosa e coperta
# 400 = luce da ufficio
# 500 = Alba o tramonto
# 1000 =
# 25000 = pieno giorno non illuminato direttamente dal Sole
# 200000 = illuminazione diretta solare
print "Accuratezza "+ str(droid.sensorsGetAccuracy().result)
# 3 valore piu' alto di accuratezza

time.sleep(1)
droid.stopSensing()
---------------------------------------------------------------------------------

Orientamento degli assi




domenica 1 gennaio 2012

Utilizzare un client NTP

A volte, specialmente su hardware vecchio, il BIOS fa le bizze e si perdono le impostazioni di ora e data.
E' utile quindi utilizzare il servizio NTP per aggiornare l'ora via rete

Su Debian deve essere installato il pacchetto

apt-get install ntpdate

da utilizzare poi con il comando

ntpdate ntp1.ien.it

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...