iOS, APIs, performance                     e sincronização de                            dados                            ...
WHO?                    • GUJeiro de raiz - 01/2005                    • Ruby, Objective-C, Java e Scala developer na     ...
Como entramos no                              mercado?                    • Aplicação pra iPad a época do lançamento      ...
Por que investir em iOS                        e Mac?sábado, 10 de setembro de 2011
A vida é injustasábado, 10 de setembro de 2011
Build a Mac app?sábado, 10 de setembro de 2011
Por investir em iOS e                               Mac?sábado, 10 de setembro de 2011
Em números                    • Primeiros dois meses da aplicação pra iPad,                           45% de crescimento e...
E tem mais?                    • A mídia americana (nosso mercado                           principal) adora Macs;        ...
Plataforma                    • Desenvolvimento usando XCode;                    • Em Objective-C, C e C++;               ...
Objective-C é difícil?sábado, 10 de setembro de 2011
Performance?sábado, 10 de setembro de 2011
Performance real e                  performance percebida                  são muito importantessábado, 10 de setembro de ...
Construir uma                    aplicação performática                    começa na construção                           ...
Dicas de performance                      de aplicações web                     também funcinonam                         ...
Se você usa um storage                    restrito, não faça                  redirect, faça proxying                     ...
Exemplo com S3                location ~* "^/s3_redirect/(.*)" {                  resolver 8.8.8.8;	                  inte...
Evite usar formatos                                  binários                                 Thrift e Prococol buffer? Tô...
Prefira JSON a XML                           como formato de                              mensagens                    E ev...
Procure enviar todos                        os dados necessários                          de cada chamada                {...
Dados relacionados,                           como fotos, devem                             sempre ter um                 ...
Mantenha um cache                              dos arquivos                              relacionados                     ...
Use SQLite pra gravar                    os dados relacionados,                    mas grave os arquivos                  ...
Crie uma Entity no                     Core Data com os                   atributos sourceType e                          ...
Buscar imagens     NSDate * date = [ NSDate date ];     NSManagedObjectContext * context = self.managedObjectContext;     ...
Y U NO                                 CONNECT TO SERVER?                        As redes são lentas e                    ...
Se falhar, guarde as                   informações pra tentar                          mais tarde                         ...
Não use alerts quando                      não há soluçãosábado, 10 de setembro de 2011
Apenas mostre se                                  falhou ou nãosábado, 10 de setembro de 2011
Sempre abra a aplicação                com alguma informaçãosábado, 10 de setembro de 2011
Trabalhos que                  demoram muito tempo                  pra serem executados?                   NSOperationQue...
Criando o                                 FactorialOperation   @implementation FactorialOperation   @synthesize source = _...
Executando as                                   operações         NSOperationQueue * queue = [[ NSOperationQueue alloc ] i...
Por que não usar                NSThread diretamente?                Por que o seu código pode fazer uso do Grand Central ...
Desenvolvimento de                    jogos com Cocos2D e                          Cocos3D                     Mate a sua ...
Dúvidas?sábado, 10 de setembro de 2011
Referências                    • ASIHttpRequest - http://allseeing-i.com/                           ASIHTTPRequest/       ...
Upcoming SlideShare
Loading in …5
×

iOS, APIs e sincronização de dados

1,918 views
1,851 views

Published on

Apresentaç˜

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,918
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
43
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

iOS, APIs e sincronização de dados

  1. 1. iOS, APIs, performance e sincronização de dados Maurício Linhares - @mauriciojr http://techbot.me/sábado, 10 de setembro de 2011
  2. 2. WHO? • GUJeiro de raiz - 01/2005 • Ruby, Objective-C, Java e Scala developer na http://officedrop.com/ • Nas horas vagas escreve no blog, grava screencasts e joga boardgames europeus;sábado, 10 de setembro de 2011
  3. 3. Como entramos no mercado? • Aplicação pra iPad a época do lançamento do primeiro iPad; • Aplicação pra Mac á época do lançamento da Mac App Store; • Aplicação pra iPhone (recente);sábado, 10 de setembro de 2011
  4. 4. Por que investir em iOS e Mac?sábado, 10 de setembro de 2011
  5. 5. A vida é injustasábado, 10 de setembro de 2011
  6. 6. Build a Mac app?sábado, 10 de setembro de 2011
  7. 7. Por investir em iOS e Mac?sábado, 10 de setembro de 2011
  8. 8. Em números • Primeiros dois meses da aplicação pra iPad, 45% de crescimento em sign ups a cada mes; • Primeiros dois meses do ScanDrop for the Mac, 13% de crescimento; • Primeiros dois meses de aplicação pra Android, 14% de crescimento; • Primeiros dois meses de lançamento da aplicação pra iPhone, 51% de crescimento;sábado, 10 de setembro de 2011
  9. 9. E tem mais? • A mídia americana (nosso mercado principal) adora Macs; • Todos os reviews das aplicações desktop pra Windows (temos duas) reclamavam da inexistência do Mac; • Se você tem versão pra Mac e iOS, as pessoas falam de você com mais facilidade;sábado, 10 de setembro de 2011
  10. 10. Plataforma • Desenvolvimento usando XCode; • Em Objective-C, C e C++; • Ambiente de desenvolvimento exclusivo para o Mac (mas é possível compilar no Linux);sábado, 10 de setembro de 2011
  11. 11. Objective-C é difícil?sábado, 10 de setembro de 2011
  12. 12. Performance?sábado, 10 de setembro de 2011
  13. 13. Performance real e performance percebida são muito importantessábado, 10 de setembro de 2011
  14. 14. Construir uma aplicação performática começa na construção da sua APIsábado, 10 de setembro de 2011
  15. 15. Dicas de performance de aplicações web também funcinonam aqui Far future expires header, caching, conditional get, etags mas o seu cliente deve suportar isso, como o ASIHttpRequestsábado, 10 de setembro de 2011
  16. 16. Se você usa um storage restrito, não faça redirect, faça proxying Como S3 com signed URLssábado, 10 de setembro de 2011
  17. 17. Exemplo com S3 location ~* "^/s3_redirect/(.*)" { resolver 8.8.8.8; internal; proxy_max_temp_file_size 0; proxy_set_header Authorization ; # Download the file and send it to client proxy_pass http://s3.amazonaws.com/$1?$args; }sábado, 10 de setembro de 2011
  18. 18. Evite usar formatos binários Thrift e Prococol buffer? Tô fora!sábado, 10 de setembro de 2011
  19. 19. Prefira JSON a XML como formato de mensagens E evolua a sua API com bem menos dores de cabeçasábado, 10 de setembro de 2011
  20. 20. Procure enviar todos os dados necessários de cada chamada { activity : { comment : “Objective-C is cool!”, user : { username : “cocoahead”, profile_picture : “/images/cocoahead.jpeg” } } }sábado, 10 de setembro de 2011
  21. 21. Dados relacionados, como fotos, devem sempre ter um updated_at { artist : { name : “John Doe”, cover_image : “/images/artists/john_doe.jpeg”, cover_updated_at : “2011-09-07T20:36:22Z” } }sábado, 10 de setembro de 2011
  22. 22. Mantenha um cache dos arquivos relacionados localmente NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory, NSUserDomainMask,YES );sábado, 10 de setembro de 2011
  23. 23. Use SQLite pra gravar os dados relacionados, mas grave os arquivos em discosábado, 10 de setembro de 2011
  24. 24. Crie uma Entity no Core Data com os atributos sourceType e sourceIdsábado, 10 de setembro de 2011
  25. 25. Buscar imagens NSDate * date = [ NSDate date ]; NSManagedObjectContext * context = self.managedObjectContext; NSPredicate * predicate = [NSPredicate predicateWithFormat: @"( sourceId == %@ ) AND ( sourceType == %@ )", 1, @"Album" ]; NSFetchRequest * request = [[ NSFetchRequest alloc ] init]; NSEntityDescription *entityDescription = [NSEntityDescription entityForName: @"Image" inManagedObjectContext: context]; request.entity = entityDescription; request.predicate = predicate; NSError * error; NSArray * images = [context executeFetchRequest: request error: &error ]; NSManagedObject * object = [images count] == 0 ? nil : [images objectAtIndex: 0]; NSDate * storedDate = [ object valueForKey: @"updatedAt" ]; if ( storedDate == nil || [storedDate compare: date ] == NSOrderedAscending) { // download file here } else { // no need to download } [request release];sábado, 10 de setembro de 2011
  26. 26. Y U NO CONNECT TO SERVER? As redes são lentas e não confiáveis Double submit, alguém?sábado, 10 de setembro de 2011
  27. 27. Se falhar, guarde as informações pra tentar mais tarde Mas avise ao usuário...sábado, 10 de setembro de 2011
  28. 28. Não use alerts quando não há soluçãosábado, 10 de setembro de 2011
  29. 29. Apenas mostre se falhou ou nãosábado, 10 de setembro de 2011
  30. 30. Sempre abra a aplicação com alguma informaçãosábado, 10 de setembro de 2011
  31. 31. Trabalhos que demoram muito tempo pra serem executados? NSOperationQueue and NSOperation to the rescue!sábado, 10 de setembro de 2011
  32. 32. Criando o FactorialOperation @implementation FactorialOperation @synthesize source = _source, result = _result; - (id) initWithSource:(NSInteger)source { self = [ self init ]; if ( self ) { self.source = source; } return self; } - (void) main { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; self.result = [ self factorialOf: self.source ]; [pool drain]; } - (NSInteger) factorialOf: ( NSInteger ) value { if ( value == 1) { return 1; } else { return value * [self factorialOf: value - 1 ] ; } } @endsábado, 10 de setembro de 2011
  33. 33. Executando as operações NSOperationQueue * queue = [[ NSOperationQueue alloc ] init]; FactorialOperation * operationOne = [[ FactorialOperation alloc ] initWithSource: 5 ]; FactorialOperation * operationTwo = [[ FactorialOperation alloc ] initWithSource: 6 ]; [operationOne setQueuePriority: NSOperationQueuePriorityVeryHigh ]; [queue addOperation: operationOne ]; [queue addOperation: operationTwo ]; [operationOne release]; [operationTwo release]; while ( [queue operationCount] != 0 ) { [NSThread sleepForTimeInterval: 1 ]; } [ queue release ];sábado, 10 de setembro de 2011
  34. 34. Por que não usar NSThread diretamente? Por que o seu código pode fazer uso do Grand Central Dispatch se ele estiver disponívelsábado, 10 de setembro de 2011
  35. 35. Desenvolvimento de jogos com Cocos2D e Cocos3D Mate a sua vontade de criar o próximo Angry Birdssábado, 10 de setembro de 2011
  36. 36. Dúvidas?sábado, 10 de setembro de 2011
  37. 37. Referências • ASIHttpRequest - http://allseeing-i.com/ ASIHTTPRequest/ • PullToRefresh - https://github.com/leah/ PullToRefresh • Cocos2D - http://cocos2d.org/sábado, 10 de setembro de 2011

×