dicembre 22, 2011 0

Chrome, 3 estensioni in per chi lavora con REST e JSON

By in Informatica, Internet, Programmazione

Lentamente lo store il Chrome web store si sta popolando di estensioni interessanti e funzionali. In particolare per chi lavora pesantemente con servizi REST segnalo questi 3 strumenti:

  1. JSONView
  2. Advanced REST client Application
  3. REST Console

Must have ;)

Tags: , , ,

dicembre 21, 2011 0

Perché XCode 4 è così lento?

By in iLesson, Informatica, Programmazione

Già perché? Perché fa schifo, semplice. La dimostrazione è la quantità spropositata di forum e messaggi di aiuto che circolano in rete. In particolare XCode 4.2 è flemmatico e ottuso. Purtroppo la storia di questo IDE è costellata da tutta una serie di bug incredibili, di feature mancanti e addirittura di funzionalità rimosse senza spiegazione!

Una approccio ingiustificato da parte di Apple che nonostante tutto continua a trincerarsi dietro un silenzio assordante. Un pratica che io non comprendo e che aborro dal profondo. Questa incuria dei suoi developer che nonostante tutto sono di gran lunga i più fanatici sul globo. Una pratica che permea l’azienda di Cupertino fin dalle origini e che non accenna a diradarsi. L’uscita di iOS5 e XCode 4.2 ne è l’esempio lapalissiano.

Su questi aspetti avrò modo di ritornarci nei successivi post. Dicevamo XCode lento, che fare? Non molto purtroppo, a parte i soliti consigli da mentecatti come “compra più RAM” o “cambia mac” gli unici che mi sento di suggerire veramente sono:

  1. Limitare il numero di cocurrent build operation
  2. Disabilitare l’indexing del codice

Come si dice “di più ninzò” ;)

Qualche fonte:

 

Tags: , ,

dicembre 21, 2011 0

Emeli Sandé, Heaven

By in Musica

Tags:

dicembre 14, 2011 0

iPhone, precisione del ricevitore GPS

By in Hardware, Informatica

Purtroppo non ci sono dati ufficiali sulla precisione, in varie situazioni, del ricevitore GPS montato sull’iPhone 3gs e 4.

Dopo lunghe ricerche mi sono imbattuto su un forum dove sono riportate le seguenti specifiche non ufficiali:

  • 3G iPhone w/ A-GPS ~ 8m
  • 3G iPhone w/ wifi ~ 74 m
  • 3G iPhone w/ Cellular positioning ~ 600m
  • iPhone4 w/ A-GPS ~ 7m
Inoltre l’iPhone 4 sembra sia equipaggiato con il chip Broadcom BCM4750.

Qualche fonte:

Tags: ,

dicembre 13, 2011 0

Networking framework per iOS e Mac OS X

By in News, Programmazione

ASIHTTPrequest, per chi ancora non lo conoscesse, è uno dei migliori framework per gestire connessioni http con iOS e Mac OS. E’ diventato il mio framework di riferimento per tutti i progetti che richiedono una comunicazione client/server, tipicamente con servizi REST. ASIHTTPRequest porta con se una ricca dote di funzionalità e semplificazioni non indifferenti, soprattutto se paragonato al blando e scarno NSURLConnection.

Ultimamente sto valutando delle alternative più leggere e moderne. Dopo qualche ricerca mi sono imbattuto in due framework interessanti:

  1. AFNetworking – A delightful iOS and OS X networking framework
  2. MKNetworkKit - Full ARC based Networking Kit for iOS 4+ devices

Sicuramente da valutare.

Tags: , , , ,

novembre 18, 2011 0

iPhone Simulator Crash log

By in iOS tips&tricks

Quando crasha un’applicazione sull’iPhone Simulator viene generato un log con il dettaglio dell’errore, proprio come succede con il device fisico. Se il crash avviene quando non si è in debug con in XCode l’unica possibilità è recuperare questo file tramite il file system.

I crash log del simulatore sono posizionati in questa cartella:

~/Library/Logs/DiagnosticReports/

I file da considerare sono quelli con estensione .crash. Ovviamente ;)

Tags: , , , ,

novembre 17, 2011 0

iOS, bloccare lo scrolling di una UIWebView

By in iOS tips&tricks, Programmazione

Ecco un piccolo tip per bloccare lo scrolling di una web view in iOS 4.x. Infatti in tutte le versione dell’SDK fino alla 4.3.5 la UIScrollView presente all’interno della UIWebView non è esposta esternamente. Per poterla modificare è necessario cercarla all’interno delle subviews della web view.

for (id subview in self.webView.subviews)
{   
   if ([[subview class] isSubclassOfClass: [UIScrollView class]])   
   {       
      ((UIScrollView *)subview).scrollEnabled = NO;       
      break}
}
 
// oppure così (anche se è meno sicuro perché non è certo
// che la scroll view si trovi sempre nella prima posizione)
[[webView.subviews objectAtIndex:0] setScrollEnabled:NO];

E con iOS 5? beh le cose si semplificano di un pelo…

self.webView.scrollView.scrollEnabled = NO;

o no? ;-)

Tags: , , , , ,

novembre 16, 2011 0

Mac OSX, abilitare l’auto completamento e i colori di Git

By in Internet, MacOSX tips&tricks, Programmazione

Utilizzo quotidianamente git da molti mesi e fin dall’inizio ho sentito l’esigenza di migliorare l’esperienza d’uso di questo strumento. Quello che non tutti sanno è che la versione installata su Mac OSX è configurata in modo essenziale  e questo vuol dire che:

  1. non ci sono colori nel comando status
  2. non c’è l’auto completamento dei comandi di git
  3. non ci sono nel prompt delle indicazioni sul branch in uso
In pratica se entriamo in un progetto e digitiamo git status quello che otteniamo è una listato uniforme e molto confuso (figura 1)
Andiamo con ordine. Per prima cosa abilitiamo i colori di git con questo semplice comando:
$ git config color.ui true
Se ora digitiamo il comando git status otteniamo
Decisamente meglio. Next step: attivare l’auto completamento dei comandi git. Per farlo è necessario scaricare i file che servono dal repository ufficiale in questo modo:
$ mkdir /tmp # se non esiste già
$ cd /tmp
$ git clone git://git.kernel.org/pub/scm/git/git.git
$ cd git
$ git checkout v`git --version | awk '{print $3}'`
$ cp contrib/completion/git-completion.bash ~/.git-completion.bash
$ cd ~
$ rm -rf /tmp/git
$ echo -e ">> .profile
In particolare quest’ultimo comando creerà il file .profile nello home directory dell’utente se non esiste. Se tutto è andato a buon fine l’auto complemtamento dei comandi git dovrebbe essere attivo. Quindi digitando per esempio:
$ git stat[tab]
Il comando dovrebbe auto-completarsi. Andiamo oltre, attiviamo anche la visualizzazione sul prompt dei comandi il nome del branch attivo e il suo stato. Per farlo basta modificare il file .profile, sulla home directory dell’utente, e aggiungere il seguente codice:
GIT_PS1_SHOWDIRTYSTATE=true
 
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi
 
PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
Già che ci siamo diamo anche un tocco di colore alla shell in generale aggiungendo due righe in testa al file (se non sono già presenti):
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
Riavviamo il Terminale, entriamo in un progetto git e digitiamo git status quello che otteniamo è mostrato nella figura seguente.
Beh che dire, tutta un’altra storia!!! ;)

Tags: , , ,

ottobre 13, 2011 2

iOS, altezza dinamica di una UITableViewCell

By in iOS tips&tricks

Il metodo tableView:heightForRowAtIndexPath:indexPath del protocol UITableViewDelegate permette di ridefinire a runtime l’altezza delle celle. Se in una UITableView abbiamo celle di altezze diverse (e magari non note a priori) possiamo sfruttare questo metodo in modo intelligente:

1
2
3
4
5
6
7
#pragma mark - UITableViewDelegate Methods
 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;
}

In pratica ricaviamo la cella corrente dal data source e recuperiamo la sua altezza effettiva. Attenzione a non cadere nel subdolo tranello di richiedere la cella corrente direttamente alla tableView (o a self.table) in questo modo:

1
2
3
4
5
6
7
8
#pragma mark - UITableViewDelegate Methods
 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // errore!
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;
}

Facendo così si manderà il programma loop! Questo perché la cella non è ancora presente nella tableView ma solo nel datasource. Se si tenta di recuperare la cella direttamente dalla tableView questa, essendone priva, ne richiederà una nuova al data source che a sua volta richiamerà tableView:heightForRowAtIndexPath:indexPath per ottere l’altezza e così via in un circolo senza fine. Anzi no con una fine: EXC_BAD_ACCESS!

Per finire piccola nota sulle performance:
in effetti questo metodo non è molto efficiente in quanto ogni singola cella viene creata due volte, la prima per misurare l’altezza e la seconda volta per  poter essere aggiunta alla tabella. E’ chiaro che ci sono ampi margini di miglioramento. Magari li vediamo in un prossimo articolo ;)

Tags: , , ,

ottobre 10, 2011 0

iOS, personalizzare la funzione NSLog

By in iOS tips&tricks, Programmazione

La funzione NSLog presente nel Foundation Kit è molto comoda in fase di debug di un’applicazione. NSLog non fa altro che stampare a console la stringa passata come argomento. Possiamo rendere NSLog “parlante” aggiungendo delle informazioni interessanti, come il nome del metodo e il numero di linea, ogni volta che viene chiamata.

Per farlo è necessario definire una propria funzione “MYLog” in un header comune o nel file .pch in questo modo:

1
# define MYLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

__PRETTY_FUNCTION__ e __LINE__ sono due macro che hanno proprio lo scopo di visualizzare il nome del metodo e la linea. Ci sono anche altre macro che si posso utilizzare ad ognuno la sua scelta.

Se invece vogliamo fare in modo che queste informazioni siano stampate solo in DEBUG basta aggiungere un if in questo modo:

1
2
3
4
5
#ifdef DEBUG
#   define MYLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define MYLog(...)
#endif

Niente di più semplice e funzionale.

Tags: , ,