mercoledì 15 marzo 2017

Mini web server con Intel Edison

Una piccola guida per installare un web server con PHP su Intel Edison


Si parte connettendo la Edison alla WiFi interagendo prima con la connessione seriale via USB
configure_edison --wifi

si impostano poi il nome e la password
configure_edison --password
configure_edison --name

Per prima cosa deve essere evidenziato che nell'installazione standard di Yocto e' presente un web server basato su Node.JS. (si puo' verificare con netstat -tnpl)
Si deve quindi disattivare il web server su porta 80 (che peraltro non funziona) modificando il file /usr/lib/edison_config_tools/edison-config-server.js
e commentando la riga
http.createServer(requestHandler).listen(80)

a questo punto per installare Apache si modificano i repository con le istruzioni a questo link
http://alextgalileo.altervista.org/edison-package-repo-configuration-instructions.html

modificando il file
nano /etc/opkg/base-feeds.conf
Dopo aver modificato i repository si puo' iniziare ad installa i pacchetti


opkg update
opkg install apache2
opkg start apache2
opkg enable apache2

opkg install php 

A questo punto Apache funziona ma non interpreta le pagine php. Bisogna editare il file httpd.conf  con le seguenti righe

LoadModule php5_module lib/apache2/modules/libphp5.so

Include /etc/apache2/modules.d/70_mod_php5.conf

<IfModule mime_module>
    TypesConfig /etc/apache2/mime.types

e poi si edita /etc/httpd/conf/mime.types:
application/x-httpd-php php

la directory dove inserire i file html e' 

/usr/share/apache2/htdocs

mentre i file di log sono

/var/apache2/logs

Per impostare la giusta timezone 

opkg install ntpdate
ntpdate -v ntp1.inrim.it
timedatectl set-timezone "Europe/Paris"

Per modificare il DNS server di edita /etc/resolv.conf

domain lan
nameserver 8.8.8.8

infine, per effettuare il port forwarding e' necessario impostare un IP statico editando /etc/wpa_supplicant/wpa_cli-actions.sh 

if [ "$CMD" = "CONNECTED" ]; then
    kill_daemon udhcpc /var/run/udhcpc-$IFNAME.pid
#   udhcpc -i $IFNAME -p /var/run/udhcpc-$IFNAME.pid -S
    ifconfig $IFNAME 192.168.1.250 netmask 255.255.255.0
    route add default gw 192.168.1.254
fi
La Edison ha un server SSH che supporta anche SFTP. L'unico problema e' che accetta di default connessioni dall'utente root (questo puo' diventare un problema di sicurezza su server di produzione)

Piccoli Akira Toriyama crescono

7 anni e nessun aiuto.. il piccolo cresce bene




martedì 14 marzo 2017

Meccanismo delle glaciazioni

Piu' o meno ogni geologo riesce ad identificare le forme del rilievo derivanti dalle glaciazioni ma e' molto meno chiaro il meccanismo che le innesca

Su Atmosfera: istruzioni per l'uso di P,Angela e L.Pinna  (Mondadori De Agostini 1994) ho trovato questa sintesi 


sono presenti tre cicli
1) ogni 100.000 anni variazioni dell'orbita terrestre intorno al Sole
2) ogni 40.000 anni variazioni dell'angolo di rotazione dell'asse terrestre sul piano dell'orbita
3) ogni 22.000 anni il movimento legato alla precessione degli equinozi

Questi cicli trovano riscontro nei log stratigrafici

Motorola M3688

A volte riemergono dal passato...in questo caso da un contenitore per batterie esaurite (e per ironia e' stato trovato senza il pacco batterie)

Questo Motorola M3688 del 1999 e' stato recuperato in condizioni non funzionanti. Nonostante l'assenza del pacco batterie originale era possibile utilizzare 4 batterie standard AA ma i contatti con il tempo si sono ossidati ed appena ho provato a sfiorarli si sono troncati.
Francamente non vale la pena mettere mano al saldatore .... ma rimane comunque un bell'oggetto






Server casalingo con FastWeb

Una breve guida su come impostare un server casalingo affacciato su Internet usando una connessione FastWeb

In dotazione con il contratto FastWeb mi e' stato fornito un router Epicentro raggiungibile all'indirizzo 192.168.1.254.
Per entrare in amministrazione
username : Fastweb
password : [lasciare vuoto]



come si vede l'indirizzo e' di tipo pubblico ma dinamico


Il primo passo e' quello di impostare il DNS dinamico


Tra le varie opzioni quella piu' comoda (e gratuita) e' stata quella di usare no-ip.com
Per configurare il servizio e' sufficiente inserire username e password dopo aver impostato il nome sull'interfaccia di NoIp

Interfaccia Web di NoIp


Configurazione Dinamic DNS su router

fatto cio' si pasa al port forwarding (port mapping sulla configurazione del router)


la porta 22 (SSH) e' riservata e non si puo' fare il port forwarding. Non e' un problema perche' basta impostare una porta alternativa (tipo 2222)


non ci sono problemi invece con il port forwarding della porta 80 HTTP




lunedì 13 marzo 2017

Lineage OS su Moto E X1022 (Condor)

Il vecchio Moto E ha mostrato un serio problema con il sistema operativo (Process com.Motorola.process.system Forced Close) che non riuscivo a risolvere, invece di ripristinare il sistema ho provato ad installare LineageOS.
Non e' stato un percoroso indolore.


Per prima cosa si deve sbloccare il bootloader con 

fastboot oem get_unlock_data

e recuperando il codice da questo link https://motorola-global-portal.custhelp.com/app/standalone%2Fbootloader%2Funlock-your-device-b

a questo punto si deve installare la recovery TWRP scaricandola da https://twrp.me/devices/motorolamotoe.html. SI avvia il telefono nel bootloader con la combinazione tasti Power+Vol- (oppure adb reboot bootloader) e si digita

fastboot flash recovery twrp-3.1.0-0-condor.img
fastboot reboot

qui si deve fare attenzione .. non si deve far riavviare il sistema si deve di nuovo forzare il sistema ad andare in bootload con Power+Vol- altrimenti la TWRP non risulta installata 

A questo punto sono inziati i problemi. La Night Build di LineageOS lineage-14.1-20170306-nightly-condor-signed.zip ha creato problemi perche' gia' il wizard di configurazione risulta bacato (va in loop..peraltro era anche impossibile abilitare la modalita' developer). Ho provato a tornare indietro ed installare una CyanogenMod 14.1 (cm-14.0-20160911-UNOFFICIAL-condor) ma in questo caso non funzionava il sistema radio.

Ho letto che il problema di Lineage era derivato da una regressione del codice cosi' alla fine ho installato lineage-14.1-20170130-nightly-condor-signed e tutto finalmente ha iniziato a funzionare.
Ho installato il pacchetto delle GApps pico open_gapps-arm-7.1-pico-20170313 (con il solo PlayStore)

L'ultimo passaggio e' stato quello di abilitare i permessi di root. Prima si abilita la modalita' da sviluppatore e poi da Opzioni Sviluppatore si seleziona Accesso Root (Solo ADB)


Connettendosi via ADB con 

adb shell

ed elevandosi con

su

si osserva (whoami) di avere i privilegi di root.

Alla fine il telefono e' molto reattivo e sembra funzionare in tutte le sue funzionalita' (anche troppo perche' il led di notifica del telefono rimane sempre acceso)

Una piccola nota: essendo un sistema Android 7.1.1 la posizione del file degli SMS si trova in


/data/user_de/0/com.android.providers.telephony/databases

giovedì 9 marzo 2017

Vault 7: SublimeText vs CIA

SublimeText fara' mai causa alla CIA?? O a Wikileaks??
https://wikileaks.org/ciav7p1/cms/page_9535650.html


Giusto per la cronaca il codice e' effettivamente corretto e non c'e' limitazione alle 10 licenze indicate

mercoledì 8 marzo 2017

Data General Corporation Nova 4

Nel dipartimento dell'Universita' in cui ho studiato avevo sentito delle storie di un calcolatore utilizzato per ricerca quando ancora a Firenze c'erano ancora pochi computer (forse addirittura degli anni 60).
Di questa macchina, programmata a schede perforate, non ero riuscito a trovare fino ad oggi nessun reperto ne' fotografia per identificare il modello quando da un cassetto di un ricercatore e' saltato fuori la scheda sottostante



L'attuale proprietario della scheda mi ha confermata che e' stata tenuta come ricordo al momento della dismissione del computer. C'e' quindi da capire il computer di riferimento....
Per prima cosa e' chiaro, guardando l'elettronica, che non si tratta di un PC anni 60. La scritta del copyright 1978 e la ditta Data General Corporation collocano inoltre il computer tra il 1978 ed i primi anni 80 (periodo in cui ls DGC e' praticamente scomparsa)


Il modulo e' chiaramente una memoria data la dicitura DGC (Data General Corporation) BBU Memory


gli integrati piu' numerosi sono MB8116E, delle Ram MOS da 16384 bit (attenzione bit..non byte!!). Considerando che si sono 128 integrati la memoria e' da 256 Kbytes

Su Internet ci sono relativamente poche informazioni disponibili ...dagli indizi sembrano che il piu' probabile candidato sia un esotico Nova 4 (serie C???)
Sulla pagina pubblicitaria di un numero di ComputerWorld del 1981 compare la seguente locandina in cui e' riportato il prezzo di un Nova 4/C da 64 Kb ed un Nova 4/C da 64Kb con BBU (a prezzi anche accessibili per il periodo). Giusto come riferimento pochi anni dopo, nel 1983, usciva Olivetti M24 con 256 Kb di memoria base con un costo all'uscita di 6.000.000 di lire (1 floppy, no HD)



Queste invece erano delle schede perforate probabilmente legate al medesimo calcolatore (una intonsa, le altre con comandi Fortran)



lunedì 27 febbraio 2017

Debian in tasca : Nokia N810 e N900

Il Nokia 900 e' stato per tanto tempo un irraggiungibile terminale (piu' che altro per il prezzo) che mi ha interessato per la programmazione diretta in Qt

Anche ai nostri giorni su Ebay si trovano dei Nokia N900 a prezzo di circa 350 euro,,,frugando ed aspettando ho comunque avuto modo di mettere le mani su un paio di Nokia N810 e N900 ad una cirnquantina di euro


Sono entrambi dispositivi risalenti agli anni 2008 e 2009 ma si differenziano sostanzialmente, Il Nokia N810 e' praticamente un tablet ante litteram (solo connessione WiFi) mentre il Nokia N900 e' un vero e proprio smartphone (giusto per la cronaca nel 2009 era venduto a circa 500 dollari ed era a pari prezzo con i primi IPhone)


Scatola completa nel Nokia N900


Accessori N810

Il Nokia 810 ed il Nokia 900 erano basati su un sistema operativo Linux fortemente derivato da Debian con un kernel della serie 2.6 Linux Nokia-N810-43-7 2.6.21-omap1 Oct 14 2008 armv61 (piu' in dettaglio N810 monta Diablo mentre N900 monta Fremantle)

Si puo' usare questi dispositivi al giorno d'oggi....con un po' di pazienza si'.
Per prima cosa si devono aggiornare i repository perche' quelli originali di Nokia sono morti da tempo. Per fare cio' si deve prima installare rootsh per acquisire i privilegi di root (apt-get install rootsh)
si digita poi

sudo gainroot

e si edita il file in /etc/apt/sources.list.d/hildon-application-manager.list

visto che usare vi con la tastiera del telefono e' un dramma si fa prima a cancellare il file e poi a digitare

per N810
echo "deb http://repository.maemo.org/extras/ diablo free non-free" > hildon-application-manager.list

Per N900
echo "deb http://repository.maemo.org/extras/ fremantle free non-free" > hildon-application-manager.list

apt-get update ed ecco che si puo' configurare il dispositivo...ovviamente e' software datato..tanto per dare un'idea viene installato Python 2.5

Ma si puo' sviluppare al giorno d'oggi applicazioni per Nokia N900??

La via Linux (quella difficile)

E' possibile scaricare una immagine Ubuntu 9.04 dell'SDK ma una volta aperta ci si accorge che non c'e' software preinstallato ma solo degli script (che ovviamente non funzionano piu')

per prima cosa si deve aggiornare la sources.list per aggiornare i pacchetti. Essendo una distribuzione dismessa i pacchetti sono messi in http://old-releases.ubuntu.com/ubuntu/dists/

-------------------------------------------------
#deb cdrom:[Ubuntu 9.04 _Jaunty Jackalope_ - releases i386 (20090420.1)]/
jaunty main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted

## Major bug fix updates produced after the final releases of the
## distribution.
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://old-releases.ubuntu.com/ubuntu/ jaunty universe
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty universe
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates universe
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://old-releases.ubuntu.com/ubuntu/ jaunty multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-updates multiverse

## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main releases, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://old-releases.ubuntu.com/ubuntu/ jaunty-backports main
restricted universe multiverse
# deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-backports main
restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu jaunty partner
# deb-src http://archive.canonical.com/ubuntu jaunty partner

deb http://old-releases.ubuntu.com/ubuntu jaunty-security main restricted
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-security main restricted
deb http://old-releases.ubuntu.com/ubuntu jaunty-security universe
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-security universe
deb http://old-releases.ubuntu.com/ubuntu jaunty-security multiverse
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-security multiverse

deb http://scratchbox.org/debian/ stable main

deb http://repository.maemo.org/ fremantle/sdk free non-free
deb-src http://repository.maemo.org/ fremantle/sdk free

deb http://repository.maemo.org/ fremantle/tools free non-free
deb-src http://repository.maemo.org/ fremantle/tools free
-------------------------------------------------

poi si installano i seguenti pacchetti

sudo apt-get install scratchbox-core scratchbox-devkit-apt-https scratchbox-devkit-autotools-legacy scratchbox-devkit-debian-squeeze scratchbox-devkit-doctools scratchbox-devkit-git scratchbox-devkit-perl scratchbox-devkit-python-legacy scratchbox-devkit-qemu scratchbox-devkit-svn scratchbox-libs scratchbox-toolchain-cs2007q3-glibc2.5-arm7 scratchbox-toolchain-cs2007q3-glibc2.5-i486 scratchbox-toolchain-host-gcc


si scarica il file, lo si rende eseguibile e lo si esegue


c'e' un piccolo problema quando si deve accettare l'EULA di Nokia perche' non e' disponibile. Basta saltare..

a questo punto se tutto e' andato bene si puo' aprire la shell di scratchbox e si digitando i comandi


sb-conf select FREMANTLE_ARMEL

si edita il file /etc/apt/sources.list (non e' quello generale gia' modificato) aggiungendo la riga


deb http://repository.maemo.org/ fremantle/4bc37c7c77ebe90177c050b805a8dc79 nokia-binaries




si salva e si digita

apt-get update
fakeroot apt-get install nokia-binaries nokia-apps

si deve ripetere la procedura con 
sb-conf select FREMANTLE_X84
andando di nuovo a modificare il fi
le sources.list ed installando i pacchetti

quasi finito. Si esce da scratchhox (exit) e si apre una shell e digita

Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac &

mentre su un'altra shell si riapre scratchbox e si digita
export DISPLAY=:2
>af-sb-init.sh start

Si ha alla fine la finestra dell'emulatore funzionate


La via Windows (la via facile)
Si puo' utilizzare il pacchetto Nokia_Qt_SDK_Win_offline_v1_0_en per ottenere l'ambiente di sviluppo Qt e l'emulatore per Nokia N900 (piu' Symbian) senza sforzo

Lo sviluppo e' molto simile a quello di una normale applicazione Qt salvo per il target che deve essere selezionato come Mobile Qt Application




L'emulatore e' incluso nel pacchetto e si attiva automaticamente





il progetto compilato si mostra come un classico pacchetto Debian da installare sul dispositivo


Per i dettagli su come trasportare il pacchetto deb sul dispositivo reale si rimanda a questo link

venerdì 24 febbraio 2017

Firebase Test Lab

Un aspetto dello sviluppo Android che puo' mandare fuori di testa e' quello di avere segnalazioni di crash dagli utenti ma non riuscire a ripeterli. Un ottimo sistema per gestire il Crash Report e' gia' stato visto su Firebase ma la soluzione ideale e' quella di testare l'applicazione prima di rilasciarla

Su questo aspetto viene incontro Test Lab di Firebase. Con questo strumento si puo' testare su un certo numero di dispositivi fisici o virtuali l'applicazione in un contesto automatizzato.

Dipendentemente dal tipo di profilo (il mio e' quello gratuito) esistono un limite giornaliero di test di apk. Per prima cosa si carica il file


Poi si devono identificare le piattaforme di test (in alto i dispositivi fisici, in basso quelli virtuali)


Dopo circa 5 minuti sono riportati gli eventuali errori


con il dettaglio per il debug


Ho avuto modo di provarlo se un caso reale e si e' rivelato uno strumento molto utile ed affidabile

mercoledì 22 febbraio 2017

Android Notification

un breve codice per creare una notifica su Android che, una volta cliccata, riporti in primo piano l'applicazione che la ha generata

public static final int NOTIFICATION_ID = 1;
private NotificationManager notificationManager;

Codice per generare la notifica con l'icona ed il testo nella status bar. L'evento associato al clic sulla notifica e' quello di mettere in primo piano, nel caso fosse in background, l'applicazione
---------------------
public void sendNotification() {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setSmallIcon(R.drawable.ic_3);
    // resume on notification tap
    Intent intent = new Intent(getApplicationContext(),MainActivity.class );
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); builder.setContentTitle("Title"); builder.setContentText(""); builder.setSubText("Tap per aprire"); notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, builder.build()); }
---------------------

per rimuovere la notifica in uscita dall'applicazione
---------------------
@Overridepublic void onDestroy()
{
  if (notificationManager == null)
    notificationManager = (NotificationManager)  getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancelAll();
super.onDestroy();
}
---------------------

La cosa piu' difficile da creare e' l'icona da mettere nella traybar. Io ci sono riuscito dopo un giorno di prove e non riesco a ricostruire quale sia stato il giusto procedimento. In alcuni casi l'icona era visualizzata come un quadrato bianco, in altri casi completamente trasparente... la soluzione dovrebbe essere mettere i livelli di grigio come livello di trasparenza (Gimp ha un menu' apposito) ma non sono sicuro che sia stato questo il passo giusto

Crash Report con Firebase su Android

Sto sviluppando una applicazione, non destinata al PlayStore, da usare in un gruppo ristretto di persone. Al momento c'e' il problema e' che l'applicazione funziona perfettamente sul mio Nexus 5 con Android 6.0.1 ma crasha miseramente su un Samsung Galaxy A3 sempre con Android 6.0.1

Non potendo avere il telefono A3 a disposizione per le prove l'unica soluzione e' quella di usare una libreria di crash report. Il supporto di Firebase e' semplicemente fantastico e semplice da implementare

Esiste una procedura automatica interna ad Android Studio per aggiungere il crash reporting ad un progetto gia' esistente. Si parte dal menu' Tools e si seleziona Firebase



Si seleziona quindi crash reporting tra i vari servizi forniti. 


Si arriva quindi al menu della pagina sottostante


Cliccando sui due pulsanti (Connect to Firebase ed Add Crash....) il progetto viene configurato in modo automatico....i meglio dovrebbe. Seguendo la procedura automatica e tenendo la build del progetto viene generato l'errore Execution failed app:processDebugGoogleServices missing api_key/current..la soluzione e' quello di inserire a mano il file google-services.json a mano nella root del progetto.

Da qui in poi e' una passeggiata. Ogni volta che viene generato un errore, l'applicazione la notifichera' sulla consolle di Firebase con un ritardo massimo di un paio di minuti



venerdì 17 febbraio 2017

Ftp e Bash

un piccolo script, rubato su Internet non ricordo dove, per mandare in batch l'upload di un file

--------------
#!/bin/bash
HOST=ftp.xxxx.altervista.org
USER=xxxxx
PASS=xxxxx
ftp -inv $HOST << EOF
user $USER $PASS
cd SMSTracker
put test.txt
bye
EOF
---------------

Realtek 8188CUS su Debian

Premessa: puo' essere che non sia stato capace io....

E' da tempo che non trovavo un hardware non compatibile con la mia Debian..la cosa divertente e' che il dongle in foto e' stato ripreso da una Raspberry (Raspbian) su cui funzionava perfettamente. Iniziamo la storia



Il dispositivo con lsusb si presenta come
Bus 001 Device 002: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

su Debian il modulo che gestisce la Realtek 8188CUS e' gestito dal driver rtl8192cu e si installa facilmente mediante
apt-get install firmware-realtek

fino a qui niente di strano...il dispositivo viene montato e si mostra in ifconfig...sembra tutto funzionare..

root@debian:/home/luca# iwconfig
wlan0     IEEE 802.11bgn  ESSID:"AndroidAP"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 02:1A:11:FD:D2:1B   
          Bit Rate:72.2 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:****-****-****-****-****-****-****-****   Security mode:open
          Power Management:off
          Link Quality=100/100  Signal level=100/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

quando si cerca pero' di accoppiare con l'access point accade qualcosa di strano

wpa_supplicant -B -i wlan0 -c <(wpa_passphrase AndroidAP passwortd) 
Successfully initialized wpa_supplicant
nl80211: Driver does not support authentication/association or connect commands
wlan0: Failed to initialize driver interface

ok proviamo a modificare con wext

wpa_supplicant -B -i wlan0 -c <(wpa_passphrase AndroidAP Tmd1ccdUs) -D wext

a questo punto viene iniziata l'autenticazione con l'access point che non va mai a buon fine

cercando su Internet sembra che il problema sia relativo al kernel Linux e sono state apportate patch al pacchetto standard dei driver in particolare su https://github.com/pvaret/rtl8192cu-fixes. Ho seguito le istruzioni niente successo.

In conclusione ho preso una Ralink...



martedì 14 febbraio 2017

SMS Server su Android

Se con i vecchi Nokia era molto semplice creare un SMS server, con Android cio' non e' possibile perche' i dati sono contenuti in una sezione del disco non accessbile in modo immediato e non esiste la possibilita' di default di creare un backup.
Alcuni hanno sviluppati applicazioni Android che leggono il database degli SMS e li reinviano via mail ma la soluzione non e' molto elegante e flessibile...l'ideale e' accedere via ADB

Per prima cosa pero' e' necessario effettuare il root del dispositivo (nel mio caso un Moto E)



i dati degli SMS sono contenuti nel file  /data/data/com.android.providers.telephony/databases/mmssms.db 
(e' un database Sqlite) che risulta essere accessibile solo a root....il gioco e' quindi copiarlo in una porzione del disco raggiungibile via adb pull come /data/local/tmp (da creare a mano via adb shell una volta per tutte).

----------------------------------
adb shell "su -c 'rm /data/local/tmp/mmssms.db'"

adb shell "su -c 'cp /data/data/com.android.providers.telephony/databases/mmssms.db /data/local/tmp'"
adb shell "su -c 'chmod 755 /data/local/tmp/mmssms.db'"
adb pull /data/local/tmp/mmssms.db
----------------------------------

Una volta ottenuto il file sul proprio computer gran parte del lavoro e' fatto.
Usando DB Browser for SQLite (per comodita') si osservano tutte le tabelle


il mio interesse e' quello di avere in uscita in CSV dei soli dati degli SMS. 

A questo punto mi interessa estrarre solo i campi body e date_sent e si puo' fare con il seguente script bash

------------------
sqlite3 mmssms.db << EOF
.mode csv
.headers on
.separator ";"
.output sms2.csv
select body,datetime(date_sent/1000, 'unixepoch','localtime') from sms;
.exit
EOF
------------------




giovedì 9 febbraio 2017

Geological compass for Micro:bit (2)

In questo post viene aggiornato il programma Geocompass per Micro:Bit visto qui aggiungendo la possibilita' di salvare i dati sulla memoria non volatile di Micro:Bit



Geocompass in uso di campagna




E la bussola meccanica per confronto


prima di tutto per accedere al file system di Microbit e' necessario installare microfs mediante
pip install microfs

per listare il file si usa
ufs list

per copiare i file da Microbit al pc si usa
ufs get nomefile.ext

i dati di strike e dip vengono salvati in un file testo nel formato nr.progr strike/dip
2 197/32
3 116/41
4 17/34

5 153/26

e' presente anche un file last_data.txt che contiene il progressivo dell'ultima misura.

MicroPython ha alcune limitazione rispetto a Python normale.
Le piu' evidenti nella gestione dei file sono:

- non esiste l'append in scrittura file ..si deve quindi leggere tutto il file, metterlo in un buffer, aggiungere una stringa in coda al buffer e poi si riscrive sulla memoria non volatile. Il comando write semplicemente cancella il file se gia' presente

- per verificare su un file e' gia' presente non si puo' usare os.path.isfile(fname) ma si usa il costrutto try..except per la gestione delle ecccezioni

- non e' possibile scorrere un file di testo riga per riga con una sintassi classica
Attenzione : ogni volta che viene flashato il programma, i dati vengono cancellati

-----------------------
from microbit import display
import microbit
import math

display.scroll("GEOCOMPASS")

cc = 180/math.pi
teta = 0
dip = 0
buffer = ""
ls = 0  # contatore progressivo delle misure

# guarda se ci sono misure gia' presenti e prende l'ultimo 
# dato progressivo dal file nel variabile ls
try:
    with open("last_data.txt") as ll2:
        ls = int(ll2.read())
except:
    ls = 0
while True:
    if microbit.button_a.is_pressed():
        # if necessary calibrate the compass
        if not microbit.compass.is_calibrated():
            display.scroll("Calibrate compass")
            microbit.compass.calibrate()
            microbit.sleep(2500)
        gx = microbit.accelerometer.get_x()
        gy = microbit.accelerometer.get_y()
        gz = microbit.accelerometer.get_z()
        hd = microbit.compass.heading()
        # change the sign to uniform to Android
        gx = - gx
        gz = - gz
        pitch = math.atan2(gy, math.sqrt((gx*gx)+(gz*gz)))
        roll = math.atan2(-gx, gz)
        # from pitch/roll to strike/dip
        p2 = math.sin(pitch)*math.sin(pitch)
        r2 = math.sin(roll)*math.sin(roll)
        t1 = math.sqrt(p2+r2)
        # ---
        teta = (cc * math.asin(t1))
        sigma = math.asin(math.sin(roll)/t1)
        sigma = (cc * sigma)
        # -----
        # primo quadrante
        if ((gy <= 0) and (gx < 0)):
            sigma = sigma
        # secondo quadrante
        if ((gy > 0) and (gx < 0)):
            sigma = 180 - sigma
        # terzo quadrante
        if ((gy > 0) and (gx >= 0)):
            sigma = 180 - sigma
        # quarto quadrante
        if ((gy <= 0) and (gx >= 0)):
            sigma = 360 + sigma
        ss = (sigma + hd) % 360
        display.scroll("Str " + str(int(ss)) + "/Dip " + str(int(teta)), 300)
        # controlla se c'e' il file su disco
        try:
            with open("geodata.txt") as ll:
                buffer = ll.read()
        except:
            buffer = ""
        # scrive i dati sul disco ultima misura
        ls = ls + 1   # incrementa contatore
        with open("geodata.txt", 'w') as out:
            aa = str(ls) + " " + str(int(ss)) + "/" + str(int(teta)) + "\n"
            out.write(buffer + aa)
        with open("last_data.txt", "w") as out2:
            out2.write(str(ls))
        microbit.sleep(500)
    if microbit.button_b.is_pressed():
        # the B button repeat the last measure
        display.scroll("Str " + str(int(ss)) + "/Dip " + str(int(teta)), 300)

LLama3 Anita

A seguito di questo post ho provato a vedere ho provato a vedere cosa accadeva ad utilizzare un modello specifico per la lingua italiana in...