mercoledì 30 luglio 2014

Powerbook 150

Ho aspettato 7 anni prima di poter aggiungere questo calcolatore alla mia collezione ma ne e' valsa la pena.
La macchina e' completamente funzionante (per quanto lo possa essere una macchina vecchia 20 anni) e monta un glorioso System 7.1.1 con ben 4 Mb di ram





Insieme al computer mi e' stata donata anche la scheda di conversione Ethernet




martedì 29 luglio 2014

Eclipse ADT su Mac Os X 10.9

Mi sono trovato a dover spostare parte dello sviluppo su una macchina Mac ed ho provato ad installare Eclipse ADT per la parte Android

Al momento di aprire i progetti (gia' funzionanti su altra macchina) mi sono trovato un segno esclamativo su ogni progetto con l'errore

JRE System Library, I can't find the 1.7 (there is only option for it : JavaSE-1.7 (unbound)

Dopo un po' di ricerche ho visto che oltre ad installare la JRE si deve andare in Preferenze (Mela+virgola), Preferenze (Properties), Java, Installed JRE ed inserire il path

/Library/Java/JavaVirtualMachines/jdk1.7.0_65.jdk/Contents/Home



giovedì 24 luglio 2014

Actionbar su Android

Agli albori di Android era presente un tasto fisico di menu assieme agli attuali tre pulsante in fondo allo schermo. Dalla versione 3 questo e' stato superato dalla ActionBar, una sorta di menu che si trova nella parte alta dello schermo in prossimita' del nome dell'applicazione (indicata dai tre quadratini sovrapposti)






per popolare questo componente si edita il file xml che ha lo stesso nome della Activity e che si trova nelle risorse del progetto (normalmente e' /res/menu/main.xml)

per generare l'esempio mostrato nella figura soprastante
--------------------------------------------------------------------------------
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.luca.innocenti.ibea2.MainActivity" >
    <item android:id="@+id/it" android:title="@string/it" android:checked="true" android:checkable="true"></item>
    <item android:id="@+id/uk" android:title="@string/uk" android:checked="false" android:checkable="true"></item>
</menu>
--------------------------------------------------------------------------------

Per rendere interattivo il menu si agisce sulla funzione onOptionItemSelected
In questo caso si eliminano prima tutti i segni di spunta, poi viene settata la variabile della lingua, aggiunge il segno di spunta al menu premuto e si mostra un toast
--------------------------------------------------------------------------------
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
menu.getItem(0).setChecked(false);
menu.getItem(1).setChecked(false);

switch(id){
case R.id.it:
lingua  = 1;
Toast.makeText(getApplicationContext(), "Adesso impostato in italiano", Toast.LENGTH_SHORT).show();
 if(item.isCheckable()) {
           item.setChecked(!item.isChecked());
       }
break;
case R.id.uk:
lingua = 2;
Toast.makeText(getApplicationContext(), "Now Set in english", Toast.LENGTH_SHORT).show();
 if(item.isCheckable()) {
           item.setChecked(!item.isChecked());
       }
   
break;
}
return super.onOptionsItemSelected(item);
}
--------------------------------------------------------------------------------

Di seguito un breve filmato per vedere come funziona il menu appena impostato



mercoledì 23 luglio 2014

A volte ritornano (Clone S4)

A volte ritornano e non sono proprio sani....

Avevo gia' avuto per le mani questo clone di Samsung S4 ed adesso mi e' stato regalato. Il motivo e' chiaramente spiegato dalla foto sottostante


a dispetto delle condizioni del vetro il telefono funziona diciamo al 95% delle proprie possibilita'
L'unica cosa che e' veramente impossibile da fare e' trascinare in quanto si incontra quasi sempre qualche cricca del vetro e il digitizer interpreta come se si sia staccato il dito


Debian su Promox all'interno di Virtualbox

Prima di passare ad una macchina vera (un bare metal da 16 Giga di ram e 4 processori) ho voluto provare Proxmox su VirtualBox (su un MacBook con 8 Giga di Ram installati)

Le specifiche per Virtualbox sono
1) mettere la scheda virtuale in bridge
2) massimizzare la ram alla macchina virtuale Proxmox
3) massimizzare i processori alla macchina virtuale
4) fregarsene del video ovvero impostazioni minime

A questo punto si lancia l'installazione che inizia con l'EULA

installazione del sistema

Alla fine dell'installazione la macchina e' raggingibile in https sulla porta 8006
ma ovviamente si ha anche un accesso di shell

A questo punto punto si puo' iniziare a montare una nuova macchina virutale con il pulsante Create VM

Internet WayBack Machine


Ho lavorato per circa quattro mesi al sito www.geo.unifi.it nel 2003 e pansavo di aver perso tutto il lavoro quando il nuovo sistemista e' passato ad una nuova piattaforma ed ha rimosso tutte le precedenti pagine

con un po' di sorpresa tramite il sito archive.org/web e' possibile riavere delle fotografie di vari
Anche questo blog e' stato registrato un paio di volte.
Ancora una volta la rete nasconde ma non cancella

martedì 22 luglio 2014

R cannot be resolved in Eclipse

Passando all'ultima versione di ADT mi sono aumentati i mal di testa. E' un paio di giorni che passo il tempo a cercare di risolvere gli errori di Eclipse piuttosto che a programmare

Creando una nuovo progetto su una installazione pulita di ADT Bundle su Windows e' saltato fuori questo messaggio

R Cannot Be Resolved

Frugando sui blog la soluzione e' stata quella di togliere di mettere la spunta su Android 4.4.2 in Java Build Path


Dopo aver fatto un Clean Project l'errore e' scomparso
La cosa divertente e' che ritogliendo la spunta non viene piu' generato l'errore
Rinuncio a capire

Android KitKat 4.4.4 su Moto G

.Un paio di giorni fa e' arrivato l'aggiornamento per KitKat 4.4.4 su Moto G (poco dopo quello per Nexus 7 che invece di passare da 4.4.2 ha avuto un aggiornamento intermedio a 4.4.3)

Non ci sono particolari modifiche (a parte la schermata di selezione delle telefonate)


Facendo un po' di prove sembra sparito il bug che metteva in conflitto il Bluetooth con il WiFI ma il benchmark AnTuTu (stranamente) e' sceso da 17533 punti a 17100 punti

AndroidIBeaconLibrary e' morta??

Un po' di tempo fa avevo indicato come sviluppare applicazione IBeacon su Android mediante l'utilizzo della libreria AndroidIBeaconLibrary di Radius

In questi giorni avevo bisogno di rimettere mano alla libreria e con mia grande sorpresa il progetto e' scomparso dal sito di Radius Network e la pagina GitHub mostra un laconico messaggio

Per avere un po' di idee sul motivo di una cosi' repentina rimozione si puo' leggere questo post

Ma e' veramente morta questa libreria??
La cosa divertente e' che su GitHub sono presenti ancora tutti i commit per cui e' sufficiente effettuare un fork del progetto (legale in base alla licenza Apache) mediante l'apposito pulsante



per copiare tutta la storia di commit nella propria pagina GitHub.
A questo punto si puo' cliccare il pulsante Clone On Desktop per copiare tutta la storia dei commit anche sul proprio client


con il comando Revert si puo' quindi generare una qualsiasi release della libreria
Ancora piu' semplice, visto che la rete nasconde ma difficilmente cancella, sui server di Amazon sono disponibili ancora i file tar.gz della versione per Eclipse
Per rendere le cose ancora piu' semplici ho copiato le ultime tre versioni sul mio Google Drive (tutte per uso con Eclipse)



Eclipse : Failed to create the Java Virtual Machine

A seguito del post precedente, ho reinstallato tutto l'ADT Bundle su Windows ed e' comparso il seguente errore


La soluzione per risolvere l'errore e' modificare il file eclipse.ini diminuendo la memoria a disposizione di Eclipse (nel mio caso portandola a 128 Mb)


Eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807
-product
com.android.ide.eclipse.adt.package.adtproduct
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=128m
-Xms512m
-Xmx1024m

lunedì 21 luglio 2014

Aggiornamento ADT 23 ed errore DDMS

Dopo il recente aggiornamento di ADT Bundle Eclipse richiede degli aggiornamenti (23.0.0) ma non scarica niente dato che la dipendenza e' gia' soddisfatta



Tentando di compilare viene generato l'errore
DDMS files not found

La soluzione rapida e' quella di reinstallare ADT Bundle :<<<<

Registrare lo schermo di Android

Alcune volte puo' essere utile realizzare una registrazione dello schermo per esempio per spiegare come funziona una applicazione ad un utente
Con Android 4.4 esiste un modo integrato per fare cio' mediante l'utilizzo del comando adb

Una volta collegato il telefono al PC si puo' digitare il seguente comando

adb shell screenrecord --time-limit 30 /sdcard/kitkat.mp4

per registrare un video di 30 secondi e salvarlo sul file kitkat.mp4
Di seguito un breve esempio in cui si evidenzia la fluidita' del video prodotto


lunedì 14 luglio 2014

Collezione processori


Un po' di tempo fa, quando i desktop erano i computer principali e si cambiavano al ritmo di uno ogni paio di anni, era facile trovare abbandonati al cassonetto dei case completi di processori. Questo ha alimentato la mia collezione di processori (principalmente X86 e principalmente Intel, i processori Apple sono rimasti montati nei calcolatori completi) almeno fino a quando ho fatto come lavoro anche il tecnico informatico


Attualmente la collezione ha oltre 200 processori unici (i doppioni non sono conteggiati) con alcune chicche come un processore di una Alpha
I processori sono rimasti a lungo (almeno fino a quando non mi sono sposato) appesi a due poster che riporto di seguito ad alta definizione per riconoscere il tipo di processore


Fauna Caldinese - Egretta Garzetta

Dal ponte di Caldine


Da Sim a MicroSim

Ho regalato a mia moglie un telefono dual sim "moderno" che e' passata da un NGM ad un MotoE
Avevo sottovalutato il fatto che nel primo telefono erano presenti delle SIM mentre nel MotoE sono necessarie le microSim
Ho letto un po' a giro se era fattibile farlo in casa ma in generale era sconsigliato e si trovano in giro degli apparecchi che fanno il taglio (tipo questo)

Ho trovato per casa una sagoma di microsim ed ho provato a farlo da solo


sovrapposte la sim e la sagoma ho disegnato il profilo con un pennarello indelebile. Si vede che parte del taglio ricade sulla parte del chip e cio' mi ha messo un po' in allarme ma alla fine ho tagliato con delle normali forbici seguendo il bordo esterno del profilo nero


Tutto ha funzionato alla prima per entrambe le sim. Sono state blocccate perfettamente dal meccanismo di aggancio e sono state riconosciute dal software. Tanto rumore per nulla

mercoledì 9 luglio 2014

Associare IPhone ad XCode

Per poter provare le applicazione IOS direttamente dentro ad un telefono reale (e non il simulatore) oltre a pagare Apple per registrarsi come developer si deve anche registrare il dispositivo all'interno del proprio profilo (c'e' un limite di 100 dispositivi per sviluppatore)

Per prima cosa si deve aprire XCode (con l'IPhone collegato ed aprire Window/Devices)
L'identificativo del dispositivo e' una stringa di 40 caratteri


a questo punto si va sul proprio profilo sviluppatore sul sito Apple e si inserisce il codice copiato in precedenza


Fatto cio' e' possibile testare le applicazioni sul proprio IPhone






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)