martedì 8 luglio 2014

IBeacon ed aggiornamento IOS 7.1.2 su Iphone 4S


Sviluppando per beacon su IOS mi sono trovato di fronte ad una cosa piuttosto strana

Il medesimo codice che girava correttamente su un Iphone 5S si rifiutava di funzionare su Iphone 4S a parita' di IOS installato


Con l'uscita dell'aggiornamento ad IOS 7.1.2 tutto si e' risolto senza modificare nessuna parte del codice dell'applicazione

Libri obsoleti

Ho salvato dal macero un po' di archeologia informatica in formato cartaceo.
Come si vede andava di moda Fortran ma la lettura dei manuali Digital apre veramente un mondo su cosa erano i calcolatori negli anni 70





da osservare anche il livello di dettaglio tecnico presente nella documentazione



lunedì 7 luglio 2014

Beacon su IOS


A seguito delle prove effettuate in questo post ed in questo post (usando in entrambi i casi un telefono Moto G con Android e librerie Radius) mi sono convertito ad IOS ed ho ripetuto l'esperienza usando un IPhone 4S con le medesime antenne usate in precedenza e le API di IOS



non ho ancora capito bene il motivo ma sembra che il segnale risulta nettamente piu' stabile su IOS che su Android (hardware o software???)


da notare che al contrario di Android su IOS vengono segnalati come valori negativi le fallite acquisizioni

il codice impiegato per misurare il segnale e' riportato in seguito (ripreso da questo link dall'esempio Art Gallery)

#import "ViewController.h"

#define ESTIMOTE_PROXIMITY_UUID [[NSUUID alloc] initWithUUIDString:@"4506F9C7-00F9-C206-C12C-C2F9C702D3C3"]

int oldminor;

@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *beacons;
@property (nonatomic, strong) NSArray *paintings;
@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) CLBeaconRegion *beaconRegion;


@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
_beacons = [[NSMutableArray alloc] init];
    
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;
    
    _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID
                                                       identifier:@"lucainnoc.Ibeareader"];
}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)viewDidAppear:(BOOL)animated
{
    [_locationManager startRangingBeaconsInRegion:_beaconRegion];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [_locationManager stopRangingBeaconsInRegion:_beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
    if (beacons.count) {
        
        CLBeacon *closestBeacon;
        
        for (CLBeacon *beacon in beacons) {
         
            NSLog([NSString stringWithFormat:@"%f", beacon.accuracy]);
            
           
        }

    }
    
}



@end

Webview su IOS

Per poter implementare una WebView su IOS, dopo aver trascinato il componente WebView, si dichiara il nuovo componente come

@interface ViewController : UIViewController
{
    IBOutlet UIWebView *Vista;


}



In questo caso la web view si chiamera' Vista
Per modificare la URL a cui punta la webview si agisce con il seguente comando

[Vista loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];

Attenzione: di default la webview occupa tutto lo schermo per cui non sono visibile gli altri eventuali controlli (tipo pulsanti o label)

martedì 17 giugno 2014

SD Card su Macbook Pro A1286

Recentemente mi e' stato prestato un  MacBook Pro A1286 un po' datato (meta' 2009) ma sempre una bella macchina.
Non lo sapevo ma questo modello dispone di un lettore integrato di SD Card e dato che avevo da scaricare delle foto ho inserito la memoria nell'apposito slot


Con un certo disappunto non compariva il dispositivo nel Finder. Sulla prima ho pensato che il componente fosse rotto (data l'eta' del calcolatore) ma da una ricerca su Internet ho verificato che si tratta di un problema conosciuto. In pratica non si deve inserire la memoria fino in fondo ma, a tentativi, si deve trovare il punto in cui il lettore riesce a percepirla
Considerando che il computer era venduto da nuovo ad oltre 2200 dollari e che un lettore di SD Card e' un componente da meno di 5 euro e' una caduta di stile da non poco (fra parentesi i portatili IBM hanno un meccanismo a scatto e funzionano benissimo)


giovedì 5 giugno 2014

Kinect per paleontologia

Continuando la serie delle prove di Kinect come scanner 3D, e' stata provata una applicazione per paleontologia. L'oggetto scansionato e' un corno di cervo (piuttosto malridotto) parzialmente ancora inglobato in matrice argillosa



La scansione e' molto ravvicinata (circa 80 cm) e la scena e' stata tagliata per estrarre il solo dettaglio di interesse
Il colore blu indica le zone piu' vicine al sensore mentre il rosso/arancione sono le zone piu' lontane (ovvero il piano di appoggio)

Il file originale puo' essere scaricato a questo indirizzo

lunedì 26 maggio 2014

CC2540 vs CC2541

Il mio fornitore di beacon ha cambiato l'integrato passando da un CC2540 ad un CC2541 (entrambi Texas Instruments)



Ho fatto una breve prova per vedere se c'era una miglioramento sulla stabilita' del segnale
La prova (seppur con un numero modesto) e' stata fatta a geometria fissa evitando il piu' possibile di influenzare la misura

Alla fine e' emerso che il parametro Accuracy e' stato di 
CC 2540 : 6.79+/-5.23 
CC 2541 : 4.89+/-3.32

Con il 2540 la deviazione standard vale circa il 77% del valore medio mentre con il 2541 circa il 67%
Un miglioramento ma non certo sensibile



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...