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
mercoledì 4 gennaio 2012
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
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
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
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
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
Iscriviti a:
Post (Atom)
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...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...