martedì 7 luglio 2015
Clonare SD card per Raspberry
Usando Raspberry puo' essere utile, una volta settato il sistema operativo, effettuare una copia in modo da poter eseguire con gli esperimenti sapendo di poter tornare in poco tempo ad una situazione stabile
Per fare cio' si parte da un sistema operativo configurato su una SD che si inserisce in altro computer (questa procedura non puo' essere eseguita sulla stessa Raspberry) con Linux
Guardando nei file di log si definisce su quale device e' stata montata la scheda SD (nel mio caso era /dev/sdb con le partizioni /dev/sdb1 di boot e /dev/sdb2 di sistema). Dopo di cio' si smontano le partizioni
umount /dev/sdb1
umount /dev/sdb2
e si inizia una copia raw mediante dd
dd if=/dev/sdb of=/home/luca/rasp.iso bs=4M
(la copia richiede una decina di minuti ma dipende molto dalla classe della SD)
a questo punto si inserisce la nuova scheda (che sia vuota, piena o formattata non ha interesse perche' si tratta di una copia raw) e si inverte il processo
dd if=/home/luca/rasp.iso of=/dev/sdb bs=4M
(per semplicita' ho usato due schedine dello stesso taglio, altrimenti in un secondo tempo avrei dovuto espandere il filesystem per usare tutto lo spazio disponibile)
la nuova schedina risulta avviabile e con tutte le configurazioni della precedente.
La procedura e' simile su OS X ma i device sono rinominati in modo differente (/dev/disk2s2 per esempio)
Missing Push Notification Entitlement e PhoneGap
Sto sviluppando una applicazione Android/IOS e per non perdere la testa su due versioni ho deciso di usare Phonegap per mantenerel lo sviluppo centralizzato anche se di fatto non uso le API di Phonegap
Al momento di effettuare il primo upload su Apple Store (dopo che tutte le verifiche di XCode erano state superate) ho ricevuto nel giro di un secondo la seguente mail
----------------------------------------
Al momento di effettuare il primo upload su Apple Store (dopo che tutte le verifiche di XCode erano state superate) ho ricevuto nel giro di un secondo la seguente mail
----------------------------------------
Dear developer,
We have discovered one or more issues with your recent delivery for "Abetone Trail Park". Your delivery was successful, but you may wish to correct the following issues in your next delivery:
Missing Push Notification Entitlement - Your app appears to include API used to register with the Apple Push Notification service, but the app signature's entitlements do not include the "aps-environment" entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the "aps-environment" entitlement. See "Provisioning and Development" in the Local and Push Notification Programming Guide for more information. If your app does not use the Apple Push Notification service, no action is required. You may remove the API from future submissions to stop this warning. If you use a third-party framework, you may need to contact the developer for information on removing the API.
After you’ve corrected the issues, you can use Xcode or Application Loader to upload a new binary to iTunes Connect.
Regards,
The App Store team
----------------------------------------
Di fatto non uso le notifiche sulla mia applicazione e quindi non riuscivo a capire il motivo dell'errore.
Guardando il codice sorgente di PhoneGap, piu' precisamente in AppDelegate.m, sono presenti due funzioni
----------------------------------------
- (void) application:(UIApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
// re-post ( broadcast )
NSString* token = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<" withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString:@" " withString:@""];
[[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token];
}
- (void) application:(UIApplication*)application
didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
// re-post ( broadcast )
[[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError object:error];
}
----------------------------------------
E' stato sufficiente commentare le due funzioni, ricompilare e rimandare a Apple Store per vedere scomparire il messaggio di errore
Cerca e copia da directory multiple
Un sistema rapido per copiare file con una medesima estensione (nell'esempio gif) sparsi in varie sottodirectory tutti in un sola cartella
find . -name '*.gif' -exec cp {} /home/luca/foto \;
funziona su Linux e OSX
find . -name '*.gif' -exec cp {} /home/luca/foto \;
funziona su Linux e OSX
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
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
mkdir /ro
unionfs-fuse#/tmp=rw:/ro/var=ro /var fuse cow,allow_other,nonempty
mount / -o remount,rw
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
mv /var /ro
mv /home /ro
mkdir /var /home
e si aggiorna /etc/fstab
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
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 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
Le chiavi danno un'idea delle dimensioni
Iscriviti a:
Post (Atom)
FigSpec FS-60CL
A lavoro mi hanno rifilato questo sensore iperspettrale cinese (pushbroom 400-1000 nm con larghezza di banda di 0.5 nm compatibile con DJI M...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
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...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...





