martedì 30 giugno 2015

Port forwarding su Cisco AS520

Il router Cisco AS520 e' una macchina vecchiotta che ha gia' raggiunto il tempo di fine vendita e tra un anno terminera' anche il supporto per gli upgrade firmware ma si trova ancora in ambiente di piccole attivita'.

Per effettuare il port forwarding di un servizio standard (per esempio di un web server sulla rete interna) si entra nel menu Firewall/IPv4 Rules/Add

A questo punto si imposta
From Zone : Insercure (WAN)
To Zone : LAN
Service : Http (e' un menu a tendina con alcuni valori preimpostati)
Action : Allow always (di default e' su Deny)
Source Hosts : Any
Internal IP Address : 10.x.x.x (indirizzo della macchina su rete interna che fa da web server)
External IP Address : Dedicated WAN

Nel caso si voglia fare port forwarding di un servizio non predefinito, per esempio un sistema di amministrazione remota come VNC NoMachine, si deve andare in Firewall/Services/Add Custom Service indicando un nome e la porta del servizio che si vuole forwardare



Fatto cio' si torna in Firewall/IPv4 Rules e si ripete la procedura vista per il web server con la differenza che adesso nel menu a tendina dei Services si trovera' quello da noi aggiunto



Congiunzione Venere Giove 30 giugno 2015


E' necessario ingrandire a piena risoluzione la fotografia per apprezzare la congiunzione tra Giove e Venere. Dal vivo ed ad occhio nudo la separazione tra i due pianeti e' assolutamente apprezzabile ma rimane sempre un bello spettacolo


martedì 23 giugno 2015

Raspberry Kiosk (read only mode)

Per una installazione di un monitor informativo (una semplice pagina web che si autoaggiorna) ho pernsato di installare una Raspberry in modo da avere un sistema economico e con poco consumo di corrente


Cio' che non avevo previsto e' che il luogo dell'installazione e' particolarmente soggetto a mancanza di corrente e nel giro di dieci giorni dalla messa in esercizion il sistema e' crollato perche' il filesystem sulla SD Card si e' corrotto

Un sistema che e' provato e' quello suggerito da questo link ma mi sono subito insospettito perche' viene disinstallato il server X. Facendo le prove infatti il filesystem va effettivamente in modalita' di sola scrittura ma X ha necessita' di scrivere dentro la directory /home e quindi la strada proposta non e' perseguibile perche' X Windows non si avvia (rimane uno schermo nero con un cursore che lampeggia beffardo)

L'altra soluzione e' quella di rendere il sistema a sola lettura in generale e di creare invece un filesystem virtuale in memoria per quelle directory in cui e' necessario scrivere come proposto da questo link
Vale comunque la pena di seguire il consiglio di disinstallare i sistemi di log

apt-get remove --purge wolfram-engine triggerhappy cron anacron logrotate  dphys-swapfile 
in sintesi si modifica /etc/fstab per mettere in sola scrittura il filesystem della schedina

/dev/mmcblk0p2 / ext4 defaults,noatime,ro 0 1
(io per essere sicuro ho messo in sola lettura anche la partizione di boot) e si mette la directory /tmp in memoria

tmpfs /tmp tmpfs defaults,size=30M 0 0
a questo punto si installa unionfuse, il sistema per creare il filesystem in memoria (il valore di 30M e' puramente indicativo, si puo' andare tranquillamente fino a 200M)

apt-get install unionfs-fuse

si spostano le directory /var e /home che saranno quelle ad essere realizzate in memoria

mkdir /ro 
mv /var /ro 
mv /home /ro 
 mkdir /var /home

e si aggiorna /etc/fstab

unionfs-fuse#/tmp=rw:/ro/var=ro /var fuse cow,allow_other,nonempty 
unionfs-fuse#/tmp=rw:/ro/home=ro /home fuse cow,allow_other

al succesivo riavvio si potra' scrivere in /home e /var (ma le modifiche saranno in memoria e quindi perse al successivo riavvio) mentre nel resto del file system sara' impossibile accedere in scrittura a meno di non digitare

mount / -o remount,rw

Questo sistema e' ottimo e funziona ma ovviamente si va ad occupare parte della ram con un disco virtuale quindi i processi che gireranno non dovranno essere esosi di ram

Per far partire il sistema direttamente in X conviene riconfigurare
sudo raspi-confige poi scegliere il menu "Enable Boot to Desktop" > select "Desktop Log in .."

per vari motivi puo' essere conveniente installare un browser come Chromium (piu' pesante di quello preinstallato ma con meno problemi nella visualizzazione dei siti)

per mandare in esecuzione automatica Chromium quando parte X si edita il file 
nano /etc/xdg/lxsession/LXDE-pi/autostart

aggiungendo la linea
@chromium --kiosk --ignore-certificate-errors --disable-restore-session-state "http://www.domain.com"

lunedì 22 giugno 2015

Fauna caldinese

E' tempo di lucciole ma anche di questi simpatici animaletti
Le chiavi danno un'idea delle dimensioni


Luna Giove e Venere 20 Giugno 2015

Tre in un colpo solo. Luna Giove e Venere cosi' luminosi da poter essere ripresi anche da cellulare (eravamo usciti per la manifestazione Occhi su Saturno ...)




Ingradire per vedere i dettagli del cielo

sabato 20 giugno 2015

Slow Php Redirect

Uso spesso il redirect verso una pagina html nei siti scritti in Php, piu' che altro per pagine di validazione di password, e non ho mai avuto problemi

basta indicare
<?php 
header("Location: www.google.com");
?>

e non effettuare nessuna operazione di scrittura (leggasi print od echo) e la cosa funziona

Ultimamente ho sviluppato una applicazione per Android/IOS che usa una WebView all'interno della quale c'e' una pagina (ospita su un server esterno) che usa la funzione di redirect ed ho notato un ritardo anche di 10 secondi tra quando viene effettuata la richiesta e quando la connessione viene reindirizzata

Il problema non era nella applicazione mobile. Riscrivendo il codice php in questo modo 

<?php 
header("Location: www.google.com",true,307);
echo "<html></html>";
flush();
ob_flush();
exit;
?>

il reindirizzamento e' immediato

venerdì 19 giugno 2015

Aggiungere directory raw in Android Studio


La directory /raw non e' creata di default da Android Studio.
Per includerla si deve cliccare destro sull'albero del progetto /New/Android resource directory



e poi selezionara rae dal secondo menu a tendina



Includere librerie aar in Android Studio

In questo post viene descritto come includere librerie Android in formato aar in un progetto di Android Studio. Per questo esempio viene indicato come installare Android Beacon Library

1) Esempio 1 : partendo dal file aar

In questo caso si scarica in locale il file aar dal sito del produttore


Dal progetto precedentemente create si clicca destro per New/Module


Selezionando Import Jar or Aar Package


Per selezionare il file si usa il quadratino all'estrema destra della prima casella di testo

Al termine si osserva che compare la nuova libreria nell'albero del progetto

Per includere la nuova libreria nella catena di compilazione di Gradle si deve editare il file build.gradle relativo al Modulo app (attenzione, esistono diversi file build.gradle all'interno di un progetto Android Studio) come indicato dalla riga evidenziata

-----------------------------------------------
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "luca_innocenti.nearbeewear"        minSdkVersion 21        targetSdkVersion 21        versionCode 1        versionName "1.0"    }
    buildTypes {
        release {
            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.support:wearable:1.2.0'    compile 'com.google.android.gms:play-services-wearable:7.5.0'    compile 'org.altbeacon:android-beacon-library:2+'}
-----------------------------------------------

1) Esempio 2 : usando un repository remoto

al posto di installare la libreria in locale si puo' richiederla al momento della compilazione da un server remoto. Per ottenere cio' basta indicare l'indirizzo del server remoto ed il nome della libreria che si vuole includere sempre nel file build.gradle del modulo dell'applicazione (vedi parti in giallo)
Per seguire questa strada e' necessario che la macchina di sviluppo sia sempre connessa con Internet

-----------------------------------------------
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "luca_innocenti.beacontrasmitter"        minSdkVersion 21        targetSdkVersion 21        versionCode 1        versionName "1.0"    }
    buildTypes {
        release {
            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }
    }
}
final def var = repositories {
    jcenter{
        url "http://jcenter.bintray.com/"    }
}
var

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.support:wearable:1.2.0'    compile 'com.google.android.gms:play-services-wearable:7.5.0'}dependencies {
    compile 'org.altbeacon:android-beacon-library:2+'}




Crash su sottomissione ad Apple Store


Oggi una sorpresa. Mandando in verifica una app su Apple Store con la stessa procedura che ho fatto solo un paio di giorni fa XCode ha crashato in modo non recuperabile


Chiudere ed aprire Xcode non serve a niente e nemmeno reinstallarlo

La soluzione arriva da questo link: si deve archiviare l'applicazione, lanciare Organizer, chiudere il progetto nella finestraa principale di XCode lasciando aperto Organizer e solo a questo punto si effettua l'upload su Apple Store

Ancora devo capire perche' continuo a pagare soldi per questo tipo di servizio....

giovedì 18 giugno 2015

Settare il tempo su Centos 7

Un piccolo promemoria su come settare il tempo su Centos
Per prima cosa si deve settare/modificare la propria timezone mediante il comando


timedatectl set-timezone Europe/Rome (Italia)
timedatectl set-timezone Etc/UTC (UTC)


per sincronizzare l'orologio con un servizio NTP si deve configurare il file /etc/ntp.conf con l'indirizzo di un timeserver ed aggiornare la regola del firewall

firewall-cmd --add-service=ntp --permanent 
firewall-cmd --reload
systemctl start ntpd

Disinstallare applicazioni da Android Wear

Per disinstallare applicazione da Android Wear non esiste un sistema integrato all'interno dell'orologio.




Se si ha l'applicazione/installer sul telefono basta agire sul telefono che la modifica si replica anche sull'orologio ma se si sta per esempio sviluppando una applicazione in proprio questa strada non risulta applicabile

Ci viene quindi in aiuto adb ma si deve conoscere il nome reale del pacchetto installato (e non il nome dell'applicazione)

Per listare le applicazioni installazione sull'orologio si puo' digitare

adb shell
pm list packages

diciamo che il pacchetto che si vuole disinstallare luca_innocenti.soundwear si esce dalla shell e si digita

adb uninstall luca_innocenti.soundwear

queste istruzioni funzionano se l'orologio e' collegato via USB (ovvero se e' collegato sulla sua basetta). Se invece il debug e' avviato via bluetooth si deve procedere con


adb forward tcp: 4444 local abstract: / adb hub 
adb connect localhost: 4444 
adb devices a
db-s localhost: 4444 shell 
pm list packages 
adb -s localhost: 4444 uninstall luca_innocenti.soundwear

lunedì 15 giugno 2015

Android Wear con Eclipse


Ho un vecchio progetto (vecchio per modo di dire ... ma nell'informatica un anno ha una valenza un po' particolare) in Eclipse a cui volevo aggiungere il supporto ad Android Wear senza trasportare tutto in Android Studio

La procedura per impostare l'ambiente di sviluppo non e' molto lineare e deriva da quanto descritto a questo link

Per prima cosa da Sdk Manager deve essere aggiunto il Google Repository


Una volta terminato il download si deve andare nella directory del proprio SDK ed in particolare in

./extras/google/m2repository/com/google/android/support/wearable/1.0.0/wearable-1.0.0.aar
copiare il file .aar, rinominarlo in .zip e decomprimerlo (attenzione esiste anche un file wearable-1.0.0.jar da non usare)
Dopo lo scompattamento si entra nella cartella, si crea un directory libs e vi si copia il file classes.jar



Si apre quindi Eclipse e si importa la directory con File/New/Project/Android Project From Existing Code
Dopo l'importazione si clicca destro sulla directory wearable-1.0.0. /Properties/Android, si flagga IsLibrary, Apply, Ok e da questo punto in poi e' stato aggiunto il supporto di Android Wear ad Eclipse



Per aggiungere il supporto ad Android Wear ad un progetto si clicca sulle proprieta' del progetto/Android e si aggiunge la libreria wereable




giovedì 4 giugno 2015

ISS Spotting 1 giugno 2015

Grazie ad un passaggio quasi zenitale, l'assenza di nuvole ed un orario non impossibile (22:30) ho provato a riprendere la ISS (dopo i tentativi del 2013 e 2014)

Questa volta mi sono organizzato con una Pentax Mz con un tempo di apertura di 30 secondi e sensibilita' a 3200 ASA ed un Fuji Lumix DMC LS 5 in modalita' ripresa video (la prima montata su cavalletto la seconda semplicemente appoggiata per terra rivolta verso l'alto)

Pentax modificata aumentando il contrasto

video da Fuji (da vedere a tutto schermo alla massima qualita')

lunedì 1 giugno 2015

Mysql SSH Tunnel

In questo precedente post avevo indicato come mettere in ascolto un demone SSH su due schede di rete

Mi e' stato chiesto, sulla stessa macchina di poter interagire con il server Mysql, sia dalla scheda con indirizzo interno che da quella con indirizzo pubblico. Nonostante i vari tentativi di modificare il bind-address (impostandolo per esempio a 0.0.0.0 per il server SSH) non sono riuscito a mettere il server in ascolto.
A questo punto entra in gioco un piccolo trucco; visto che l'accesso SSH e' garantito si puo' creare un tunnel mysql over ssh, in pratica il traffico mysql viene instradato con canale SSH ed il client non si collega direttamente all'indirizzo remoto ma ad un propria porta locale

Il comando per fare cio' e' il seguente
ssh -fNg -L 3307:127.0.0.1:3306 luca@10.1.1.238

ci si collega dal client alla macchina remota (10.1.1.238) collegando la porta remota 3306 (Mysql) con una porta locale 3307

per collegarsi ed interrogare il database si puo' usare quindi la sintassi
mysql -h 127.0.0.1 -P 3307 -u luca 

(testato su Os X e Linux)

Planet Trails con uno smartphone

In attesa di riprendere la ISS al passaggio del 1° Giugno, ho provato a sostituire la digitale  reflex con il telefonino per riprendere Giove e Venere

Le fotografie sono state riprese dalle 21.47 alle 23.00 del 29/05/2015 con il programma Android Camera FV - 5 con una foto al minuto con un tempo di apertura di 10 secondi

Piu' in alto Giove, piu' luminoso ed in basso Venere

Le foto sono state unite mediante il programma StarTrail
Le tracce sono state registrate ma si vede chiaramente l'assenza delle stelle. Confrontando con il programma Stellarium, Giove e Venere erano gli unici oggetti ripresi con magnitudo negativa



Questa l'animazione (osservando attentamente si osserva anche il passaggio di un aereo)


Considerando che il passaggio della ISS e' previsto per 22:30 del 1° Giugno con una magnitudo -3.6 sara' possibile filmarla con il telefono ma ci si puo' scordare si fotografare oggetti con magntudo inferiore a -1 (quindi non si possono fotografare le stelle)