SlideShare une entreprise Scribd logo
1  sur  129
Télécharger pour lire hors ligne
Beginning iCloud
development
Rocchi Cesare




    @_funkyboy   studiomagnolia.com
Outline


 What is iCloud?
 How does it work?
 Are there alternatives?
Who am I?
UX designer and developer
mnml
< is >
execution matters
lean approach
1000 details coming together
Giveaway
1 of the Wenderlich’s


                raywenderlich.com
ARC                     GameCenter API

           Storyboards

                            News Stand
  iCloud




Turn Based Gaming           OpenGL ES 2.0
twitter.com/_funkyboy
cesare@studiomagnolia.com
Giveaway
Giveaway
(yes, another)
www.icloudfordevelopers.com
UIDocument

                              Key-Value store
 Conflict
Resolution

                                       CoreData

  Custom
 Documents

         www.icloudfordevelopers.com
twitter.com/_funkyboy
cesare@studiomagnolia.com




     www.icloudfordevelopers.com
Who are you?
What is iCloud?
6028 Startown Rd, Maiden, NC
Stores and synchs stuff
It just works ...
... when it works
Seamlessness can be a limit
Pros (for devs)


 No server setup
 No costs
 No rumination on synch
Cons (for devs)


 Stick to a synch model
 No http API
 No control on upload
Pros and Cons for users



Expectation
Under the hood
Daemon


Monitors changes
Works on metadata
Shreds files
Special folder, synched
Synched when “appropriate”
Appropriate


Which OS?
Which connection?
Battery status?
Placeholders
Information Structure


 Document
 Key-value
 CoreData
UIDocument
UIDocument


NSFilePresenter
Non-blocking read/write
-(void) openWithCompletionHandler:^(BOOL success) { }
- (BOOL)loadFromContents:(id)contents
                  ofType:(NSString *)typeName
                   error:(NSError **)outError { }
@interface SMNote : UIDocument
@implementation SMNote

- (BOOL)loadFromContents:(id)contents
                  ofType:(NSString *)typeName
                   error:(NSError **)outError {


    if ([contents length] > 0) {
        self.myContent = [[NSString alloc]
                            initWithBytes:[contents bytes]
                            length:[contents length]
                            encoding:NSUTF8StringEncoding];
    } else {

        // Default content
        self.myContent = @"Empty";

    }

    return YES;

}
- (BOOL) saveToURL:(NSURL *)url
  forSaveOperation:UIDocumentSaveForOverwriting
 completionHandler:^(BOOL success) { }
- (id)contentsForType:(NSString *)typeName
                error:(NSError **)outError {}
- (id)contentsForType:(NSString *)typeName
                error:(NSError **)outError {


    return [NSData dataWithBytes:[self.myContent UTF8String]
                          length:[self.myContent length]];


}
Autosave


updateChangeCount:
use the methods of the undoManager
@implementation SMNote

@synthesize noteContent;

// Called whenever the application reads data
- (BOOL)loadFromContents:(id)contents
                  ofType:(NSString *)typeName
                   error:(NSError **)outError {

}

// Called whenever the application (auto)saves the content
- (id)contentsForType:(NSString *)typeName
                error:(NSError **)outError {


}
Opening a document
Opening a document


Build and run a query
Wait for results
Unfold results
#import "SMNote.h"

@interface SMAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) SMViewController *viewController;

@property (strong) SMNote *doc;
@property (strong) NSMetadataQuery *query;

- (void)loadDocument;

@end
NSMetadataQuery
- (void)loadDocument {

    NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
    _query = query;

    [query setSearchScopes:[NSArray arrayWithObject:
                     NSMetadataQueryUbiquitousDocumentsScope]];

}
- (void)loadDocument {

    NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
    _query = query;

    [query setSearchScopes:[NSArray arrayWithObject:
                     NSMetadataQueryUbiquitousDocumentsScope]];

    NSPredicate *pred = [NSPredicate predicateWithFormat:
                         @"%K == %@",
                         NSMetadataItemFSNameKey, kFILENAME];

    [query setPredicate:pred];

}
- (void)loadDocument {

    NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
    _query = query;

    [query setSearchScopes:[NSArray arrayWithObject:
                     NSMetadataQueryUbiquitousDocumentsScope]];

    NSPredicate *pred = [NSPredicate predicateWithFormat:
                         @"%K == %@",
                         NSMetadataItemFSNameKey, kFILENAME];

    [query setPredicate:pred];

    [[NSNotificationCenter defaultCenter]
      addObserver:self
         selector:@selector(queryDidFinish:)
              name:NSMetadataQueryDidFinishGatheringNotification
           object:query];

    [query startQuery];

}
NSPredicate *pred = [NSPredicate predicateWithFormat:
                                    @"%K like 'Note_*'",
                                    NSMetadataItemFSNameKey];
Asynchronous!
- (void)queryDidFinish:(NSNotification *)notification {

    NSMetadataQuery *query = [notification object];
    [query disableUpdates];
    [query stopQuery];

    [[NSNotificationCenter defaultCenter]
    removeObserver:self
              name:NSMetadataQueryDidFinishGatheringNotification
            object:query];

    _query = nil;

!   [self loadData:query];

}
- (void)loadData:(NSMetadataQuery *)query {

    if ([query resultCount] == 1) {

        NSMetadataItem *item = [query resultAtIndex:0];

        NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];

        SMNote *doc = [[SMNote alloc] initWithFileURL:url];

    }

}
- (void)loadData:(NSMetadataQuery *)query {

    if ([query resultCount] == 1) {

        NSMetadataItem *item = [query resultAtIndex:0];

        NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];

        self.doc = [[SMNote alloc] initWithFileURL:url];

        [self.doc openWithCompletionHandler:^(BOOL success) {

               if (success) {
                   NSLog(@"iCloud document opened");
               } else {
                   NSLog(@"failed opening document from iCloud");
               }
         }];

    }

}
else {

    NSURL *ubiq = [[NSFileManager defaultManager]
                    URLForUbiquityContainerIdentifier:nil];

    NSURL *ubiquitousPackage =
          [[ubiq URLByAppendingPathComponent: @"Documents"]
                    URLByAppendingPathComponent:kFILENAME];

    SMNote *doc = [[SMNote alloc]
                        initWithFileURL:ubiquitousPackage];
}
else {

     NSURL *ubiq = [[NSFileManager defaultManager]
                     URLForUbiquityContainerIdentifier:nil];

     NSURL *ubiquitousPackage =
           [[ubiq URLByAppendingPathComponent: @"Documents"]
                     URLByAppendingPathComponent:kFILENAME];

     SMNote *doc = [[SMNote alloc]
                         initWithFileURL:ubiquitousPackage];
     self.doc = doc;

   [doc saveToURL: [doc fileURL]
 forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success) {

        if (success) {
            [doc openWithCompletionHandler:^(BOOL success) {
                  NSLog(@"new document opened from iCloud");
             }];
          }
      }];

 }
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...
    [self.window makeKeyAndVisible];

    NSURL *ubiq = [[NSFileManager defaultManager]
                            URLForUbiquityContainerIdentifier:nil];

    if (ubiq) {

        NSLog(@"iCloud access at %@", ubiq);
        [self loadDocument];

    } else {

        NSLog(@"No iCloud access");

    }

    return YES;
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...
    [self.window makeKeyAndVisible];

    NSURL *ubiq = [[NSFileManager defaultManager]
                            URLForUbiquityContainerIdentifier:nil];

    if (ubiq) {

        NSLog(@"iCloud access at %@", ubiq);
        [self loadDocument];

    } else {

        NSLog(@"No iCloud access");

    }

    return YES;
}
- (void)viewDidLoad {

    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter]
                     addObserver:self
                        selector:@selector(dataReloaded:)
                            name:@"noteModified"
                          object:nil];
}




- (void)dataReloaded:(NSNotification *)notification {

    self.doc = notification.object;
    self.noteView.text = self.doc.noteContent;

}
Switching on/off
- (NSURL *) localNotesURL {
    return [[[NSFileManager defaultManager]
             URLsForDirectory:NSDocumentDirectory
             inDomains:NSUserDomainMask] lastObject];
}



- (NSURL *) ubiquitousNotesURL {
    return [[[NSFileManager defaultManager]
             URLForUbiquityContainerIdentifier:nil]
            URLByAppendingPathComponent:@"Documents"];
}
- (void) setNoteUbiquity {

    NSURL *baseUrl = [self localNotesURL];

    if (_useiCloud)
        baseUrl = [self ubiquitousNotesURL];


    NSURL *destUrl = [baseUrl URLByAppendingPathComponent:
                          [note.fileURL lastPathComponent]];

    [[NSFileManager defaultManager] setUbiquitous:_useiCloud
                                        itemAtURL:note.fileURL
                                   destinationURL:destUrl
                                            error:NULL];

}


                             Don’t call it on the main thread!
- (void) startMigration {

    NSOperationQueue *iCloudQueue = [NSOperationQueue new];
    NSInvocationOperation *op =
       [[NSInvocationOperation alloc]
                     initWithTarget:self
                           selector:@selector(setNoteUbiquity)
                             object:nil];

    [iCloudQueue addOperation:op];

}
Custom documents
SMNotesDocument



  SMNote      SMNote   SMNote
                                ...
@interface SMNote : NSObject <NSCoding>

@property   (copy, nonatomic) NSString   *noteId;
@property   (copy, nonatomic) NSString   *noteContent;
@property   (strong, nonatomic) NSDate   *createdAt;
@property   (strong, nonatomic) NSDate   *updatedAt;

@end
#import "SMNote.h"

@interface SMNotesDocument : UIDocument

@property (nonatomic, strong) NSMutableArray *entries;
@property (nonatomic, strong) NSFileWrapper *fileWrapper;

@end
#import "SMNote.h"

@interface SMNotesDocument : UIDocument

@property (nonatomic, strong) NSMutableArray *entries;
@property (nonatomic, strong) NSFileWrapper *fileWrapper;

@end
- (id)contentsForType:(NSString *)typeName
                error:(NSError **)outError {

    NSMutableDictionary *w = [NSMutableDictionary dictionary];
    NSMutableData *data = [NSMutableData data];

    NSKeyedArchiver *arch = [[NSKeyedArchiver alloc]
                             initForWritingWithMutableData:data];
    [arch encodeObject:_entries forKey:@"entries"];
    [arch finishEncoding];

}
- (id)contentsForType:(NSString *)typeName
                error:(NSError **)outError {

    NSMutableDictionary *w = [NSMutableDictionary dictionary];
    NSMutableData *data = [NSMutableData data];

    NSKeyedArchiver *arch = [[NSKeyedArchiver alloc]
                             initForWritingWithMutableData:data];
    [arch encodeObject:_entries forKey:@"entries"];
    [arch finishEncoding];
    NSFileWrapper *entriesWrapper = [[NSFileWrapper alloc]
                               initRegularFileWithContents:data];

    [w setObject:entriesWrapper forKey:@"notes.dat"];
    // add other wrappers if you like

    NSFileWrapper *res = [[NSFileWrapper alloc]
                                initDirectoryWithFileWrappers:w];

    return res;

}
- (BOOL)loadFromContents:(id)contents
                  ofType:(NSString *)typeName
                   error:(NSError **)outError {

    NSFileWrapper *wrapper = (NSFileWrapper *)contents;
    NSDictionary *d = [wrapper fileWrappers];

    NSFileWrapper *entriesWrap = [d objectForKey:@"notes.dat"];

}
- (BOOL)loadFromContents:(id)contents
                  ofType:(NSString *)typeName
                   error:(NSError **)outError {

    NSFileWrapper *wrapper = (NSFileWrapper *)contents;
    NSDictionary *d = [wrapper fileWrappers];

    NSFileWrapper *entriesWrap = [d objectForKey:@"notes.dat"];
    NSData *data = [entriesWrap regularFileContents];

    NSKeyedUnarchiver *arch = [[NSKeyedUnarchiver alloc]
                                    initForReadingWithData:data];
    _entries = [arch decodeObjectForKey:@"entries"];

    // Notify the view

}
Uniform Type Identifier
Key-value
Key-value
   1Mb
Key-value
    1Mb
 was 64Kb !
- (void) saveNoteAsCurrent {

    [[NSUbiquitousKeyValueStore defaultStore]
               setString:self.currentNote.noteId
                  forKey:@"com.studiomagnolia.currentNote"];

    [[NSUbiquitousKeyValueStore defaultStore] synchronize];

}
- (void) saveNoteAsCurrent {

      [[NSUbiquitousKeyValueStore defaultStore]
                 setString:self.currentNote.noteId
                    forKey:@"com.studiomagnolia.currentNote"];

      [[NSUbiquitousKeyValueStore defaultStore] synchronize];

}




    NSString *currentNoteId =
        [[NSUbiquitousKeyValueStore defaultStore] stringForKey:
         @"com.studiomagnolia.currentNote"];
NSUbiquitousKeyValueStore* store =
    [NSUbiquitousKeyValueStore defaultStore];

[[NSNotificationCenter defaultCenter]
 addObserver:self
    selector:@selector(updateCurrentNoteIfNeeded:)
        name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
        object:store];

[store synchronize];
Conflict Resolution
Conflict Resolution


Up to the dev
documentState
DocumentStates

UIDocumentStateNormal
UIDocumentStateClosed
UIDocumentStateInConflict
UIDocumentStateSavingError
UIDocumentStateEditingDisabled
UIDocumentStateChangedNotification
[[NSNotificationCenter defaultCenter]
                   addObserver:self
                      selector:@selector(noteHasChanged:)
                          name:UIDocumentStateChangedNotification
                        object:nil];
UIDocumentState s = [n documentState];

switch (s) {

    case UIDocumentStateNormal:
        NSLog(@"Everything is fine");
        break;

    case UIDocumentStateInConflict:
        NSLog(@"There is a conflict");
        break;

    ...

    default:
        NSLog(@"Unknown state");
        break;

}
UI conflict
      vs
iCloud conflict
Resolution policy


 last wins
 prompt user
 automatic merge
Resolution policy

 last wins
 prompt user
 automatic merge
 NSFileVersion
NSError *err;

NSURL *url = [[NSFileManager defaultManager]
   URLForPublishingUbiquitousItemAtURL:[self.currentNote fileURL]
                        expirationDate:&expirationInOneHourSinceNow
                                 error:&err];
Tips & Tricks
Patience!
Test on wireless & 3G
Regenerate provisioning
Delete previous data
Restart device
API throttle!
App policy


Be gentle with storage
<App_home>/tmp
<App_home>/Library/Caches/
App policy


Documents is backed up
mark files as “do not backup”
// iOS 5.0.1

#import <sys/xattr.h>

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {

    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue,
                          sizeof(attrValue), 0, 0);
    return result == 0;

}
// iOS 5.1

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {

    NSError *error = nil;

    BOOL success = [URL setResourceValue: [NSNumber numberWithBool:YES]
                                  forKey: NSURLIsExcludedFromBackupKey
                                   error: &error];
    if(!success){

        NSLog(@"Error excluding %@ from backup %@",
                           [URL lastPathComponent],
                           error);
    }

    return success;
}
“To iCloud or not to iCloud?”
Alternatives
Alternatives

 dropbox
 parse.com
 cloudmine
 stackmob
 custom
Dropbox


documents
authentication
no notifications
Dropbox


other platforms
no CR (revision #)
expectation
Parse
Parse


ORM approach
Recently released
No cost of infrastructure
Parse


Pay as you use
Limit of calls/mo
PFObject *note = [PFObject objectWithClassName:@"Note"];

[note setObject:@"Ciao"
         forKey:@"title"];

[note setObject:@"Note on Parse"
         forKey:@"content"];

[note save];
//[note saveInBackground];
//[note saveEventually];
[note saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
{
    if (error) {

          NSLog(@"Note not saved");

      } else {

          NSLog(@"Note saved successfully");

      }
}];
Parse

Other platforms
REST API
Push notifications
Object browser
curl -X POST 
-H "X-Parse-Application-Id: ${APPLICATION_ID}" 
-H "X-Parse-REST-API-Key: ${REST_API_KEY}" 
-H "Content-Type: application/json" 
-d '{"note": 001,
     "title": "Ciao",
     "content": “Note on parse” }' 
https://api.parse.com/1/classes/GameScore
PFObject *note = [PFObject objectWithClassName:@"Note"];

[note setObject:@"Ciao"
           forKey:@"title"];

[note setObject:@"Note on parse"
           forKey:@"content"];

PFObject *myTag = [PFObject objectWithClassName:@"Tag"];

[myTag setObject:@"important"
          forKey:@"tagName"];

// Add a relation
[note setObject:myTag forKey:@"tag"];

// Saves both
[note saveInBackground];
Recap


UIDocument
Key-Value store
Alternatives
“You can’t always get what
           you want
but if you try sometime, you
      just might find ...”
“You can’t always get what
           you want
but if you try sometime, you
      just might find ...”
                      Rolling Stones
Contact


twitter.com/_funkyboy
cesare@studiomagnolia.com
http://studiomagnolia.com

Contenu connexe

Tendances

iOSDevCamp 2011 Core Data
iOSDevCamp 2011 Core DataiOSDevCamp 2011 Core Data
iOSDevCamp 2011 Core DataChris Mar
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective CNeha Gupta
 
Javascript Application Architecture with Backbone.JS
Javascript Application Architecture with Backbone.JSJavascript Application Architecture with Backbone.JS
Javascript Application Architecture with Backbone.JSMin Ming Lo
 
Softshake - Offline applications
Softshake - Offline applicationsSoftshake - Offline applications
Softshake - Offline applicationsjeromevdl
 
Realm.io par Clement Sauvage
Realm.io par Clement SauvageRealm.io par Clement Sauvage
Realm.io par Clement SauvageCocoaHeads France
 
REST/JSON/CoreData Example Code - A Tour
REST/JSON/CoreData Example Code - A TourREST/JSON/CoreData Example Code - A Tour
REST/JSON/CoreData Example Code - A TourCarl Brown
 
Webinar: MongoDB Persistence with Java and Morphia
Webinar: MongoDB Persistence with Java and MorphiaWebinar: MongoDB Persistence with Java and Morphia
Webinar: MongoDB Persistence with Java and MorphiaMongoDB
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using RoomNelson Glauber Leal
 
Node js mongodriver
Node js mongodriverNode js mongodriver
Node js mongodriverchristkv
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRick Copeland
 
Zabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet MensZabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet MensNETWAYS
 
Getting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETGetting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETTomas Jansson
 
Realm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app databaseRealm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app databaseSergi Martínez
 

Tendances (20)

Objective C Memory Management
Objective C Memory ManagementObjective C Memory Management
Objective C Memory Management
 
iOSDevCamp 2011 Core Data
iOSDevCamp 2011 Core DataiOSDevCamp 2011 Core Data
iOSDevCamp 2011 Core Data
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective C
 
Javascript Application Architecture with Backbone.JS
Javascript Application Architecture with Backbone.JSJavascript Application Architecture with Backbone.JS
Javascript Application Architecture with Backbone.JS
 
Softshake - Offline applications
Softshake - Offline applicationsSoftshake - Offline applications
Softshake - Offline applications
 
Realm.io par Clement Sauvage
Realm.io par Clement SauvageRealm.io par Clement Sauvage
Realm.io par Clement Sauvage
 
REST/JSON/CoreData Example Code - A Tour
REST/JSON/CoreData Example Code - A TourREST/JSON/CoreData Example Code - A Tour
REST/JSON/CoreData Example Code - A Tour
 
iOS Memory Management
iOS Memory ManagementiOS Memory Management
iOS Memory Management
 
Webinar: MongoDB Persistence with Java and Morphia
Webinar: MongoDB Persistence with Java and MorphiaWebinar: MongoDB Persistence with Java and Morphia
Webinar: MongoDB Persistence with Java and Morphia
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using Room
 
J query1
J query1J query1
J query1
 
J query
J queryJ query
J query
 
Node js mongodriver
Node js mongodriverNode js mongodriver
Node js mongodriver
 
Play!ng with scala
Play!ng with scalaPlay!ng with scala
Play!ng with scala
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
 
Zabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet MensZabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet Mens
 
Getting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETGetting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NET
 
Realm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app databaseRealm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app database
 
greenDAO
greenDAOgreenDAO
greenDAO
 
What's Parse
What's ParseWhat's Parse
What's Parse
 

Similaire à Beginning icloud development - Cesare Rocchi - WhyMCA

Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Satoshi Asano
 
Formacion en movilidad: Conceptos de desarrollo en iOS (IV)
Formacion en movilidad: Conceptos de desarrollo en iOS (IV) Formacion en movilidad: Conceptos de desarrollo en iOS (IV)
Formacion en movilidad: Conceptos de desarrollo en iOS (IV) Mobivery
 
Developing iOS REST Applications
Developing iOS REST ApplicationsDeveloping iOS REST Applications
Developing iOS REST Applicationslmrei
 
Parse London Meetup - Cloud Code Tips & Tricks
Parse London Meetup - Cloud Code Tips & TricksParse London Meetup - Cloud Code Tips & Tricks
Parse London Meetup - Cloud Code Tips & TricksHector Ramos
 
Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III) Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III) Mobivery
 
High Performance Core Data
High Performance Core DataHigh Performance Core Data
High Performance Core DataMatthew Morey
 
Your Second iPhone App - Code Listings
Your Second iPhone App - Code ListingsYour Second iPhone App - Code Listings
Your Second iPhone App - Code ListingsVu Tran Lam
 
Core Data with multiple managed object contexts
Core Data with multiple managed object contextsCore Data with multiple managed object contexts
Core Data with multiple managed object contextsMatthew Morey
 
iOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful BackendiOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful BackendStefano Zanetti
 
iPhone and Rails integration
iPhone and Rails integrationiPhone and Rails integration
iPhone and Rails integrationPaul Ardeleanu
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Sarp Erdag
 
MobileCity:Core Data
MobileCity:Core DataMobileCity:Core Data
MobileCity:Core DataAllan Davis
 
10 tips for a reusable architecture
10 tips for a reusable architecture10 tips for a reusable architecture
10 tips for a reusable architectureJorge Ortiz
 
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...smn-automate
 
RESTfull with RestKit
RESTfull with RestKitRESTfull with RestKit
RESTfull with RestKitTaras Kalapun
 

Similaire à Beginning icloud development - Cesare Rocchi - WhyMCA (20)

I os 13
I os 13I os 13
I os 13
 
Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Webエンジニアから見たiOS5
Webエンジニアから見たiOS5
 
Formacion en movilidad: Conceptos de desarrollo en iOS (IV)
Formacion en movilidad: Conceptos de desarrollo en iOS (IV) Formacion en movilidad: Conceptos de desarrollo en iOS (IV)
Formacion en movilidad: Conceptos de desarrollo en iOS (IV)
 
Developing iOS REST Applications
Developing iOS REST ApplicationsDeveloping iOS REST Applications
Developing iOS REST Applications
 
Parse London Meetup - Cloud Code Tips & Tricks
Parse London Meetup - Cloud Code Tips & TricksParse London Meetup - Cloud Code Tips & Tricks
Parse London Meetup - Cloud Code Tips & Tricks
 
Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III) Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III)
 
High Performance Core Data
High Performance Core DataHigh Performance Core Data
High Performance Core Data
 
Your Second iPhone App - Code Listings
Your Second iPhone App - Code ListingsYour Second iPhone App - Code Listings
Your Second iPhone App - Code Listings
 
Moar tools for asynchrony!
Moar tools for asynchrony!Moar tools for asynchrony!
Moar tools for asynchrony!
 
UIWebView Tips
UIWebView TipsUIWebView Tips
UIWebView Tips
 
Core Data with multiple managed object contexts
Core Data with multiple managed object contextsCore Data with multiple managed object contexts
Core Data with multiple managed object contexts
 
iOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful BackendiOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful Backend
 
iPhone: Http Connection
iPhone: Http ConnectioniPhone: Http Connection
iPhone: Http Connection
 
занятие8
занятие8занятие8
занятие8
 
iPhone and Rails integration
iPhone and Rails integrationiPhone and Rails integration
iPhone and Rails integration
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
 
MobileCity:Core Data
MobileCity:Core DataMobileCity:Core Data
MobileCity:Core Data
 
10 tips for a reusable architecture
10 tips for a reusable architecture10 tips for a reusable architecture
10 tips for a reusable architecture
 
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
 
RESTfull with RestKit
RESTfull with RestKitRESTfull with RestKit
RESTfull with RestKit
 

Plus de Whymca

Dalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacce
Dalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacceDalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacce
Dalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacceWhymca
 
Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!
Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!
Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!Whymca
 
Internet of Things con .Net Micro Framework: un mondo di device interconnessi
Internet of Things con .Net Micro Framework: un mondo di device interconnessiInternet of Things con .Net Micro Framework: un mondo di device interconnessi
Internet of Things con .Net Micro Framework: un mondo di device interconnessiWhymca
 
Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012
Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012
Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012Whymca
 
Wanna go mobile game 3.0 - Andrea trento - WhyMCA
Wanna go mobile game 3.0 - Andrea trento - WhyMCAWanna go mobile game 3.0 - Andrea trento - WhyMCA
Wanna go mobile game 3.0 - Andrea trento - WhyMCAWhymca
 
Dal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCA
Dal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCADal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCA
Dal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCAWhymca
 
Physical computing: tutto intorno a te - Andrea Maietta, Paolo Aliverti
Physical computing: tutto intorno a te - Andrea Maietta, Paolo AlivertiPhysical computing: tutto intorno a te - Andrea Maietta, Paolo Aliverti
Physical computing: tutto intorno a te - Andrea Maietta, Paolo AlivertiWhymca
 
SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7
SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7
SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7Whymca
 
Gestire i pdf con IOS - Maurizio Moriconi - WhyMCA
Gestire i pdf con IOS - Maurizio Moriconi - WhyMCAGestire i pdf con IOS - Maurizio Moriconi - WhyMCA
Gestire i pdf con IOS - Maurizio Moriconi - WhyMCAWhymca
 
BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...
BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...
BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...Whymca
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
Crossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano ColosioCrossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano ColosioWhymca
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationWhymca
 
whymca Andrea Piovani Layar: la nuova frontiera della realtà aumentata
whymca Andrea Piovani Layar: la nuova frontiera della realtà aumentatawhymca Andrea Piovani Layar: la nuova frontiera della realtà aumentata
whymca Andrea Piovani Layar: la nuova frontiera della realtà aumentataWhymca
 
Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto
Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto
Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto Whymca
 
Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?
Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?
Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?Whymca
 
Whymca Vodafone Apps
Whymca Vodafone AppsWhymca Vodafone Apps
Whymca Vodafone AppsWhymca
 
Whymca Peoplesound
Whymca PeoplesoundWhymca Peoplesound
Whymca PeoplesoundWhymca
 
Whymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile Messaging
Whymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile MessagingWhymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile Messaging
Whymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile MessagingWhymca
 
Whymca Italo Vignoli Demografia Dei Social Media
Whymca Italo Vignoli Demografia Dei Social MediaWhymca Italo Vignoli Demografia Dei Social Media
Whymca Italo Vignoli Demografia Dei Social MediaWhymca
 

Plus de Whymca (20)

Dalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacce
Dalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacceDalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacce
Dalla natura morta allo spime. Riflessioni sparse su futuring, cose e interfacce
 
Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!
Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!
Tutto quello che volete sapere sullo sviluppo per Windows 8 e Windows Phone!
 
Internet of Things con .Net Micro Framework: un mondo di device interconnessi
Internet of Things con .Net Micro Framework: un mondo di device interconnessiInternet of Things con .Net Micro Framework: un mondo di device interconnessi
Internet of Things con .Net Micro Framework: un mondo di device interconnessi
 
Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012
Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012
Windows phone 7 deep dive again and more - roberto freato WhyMCA 2012
 
Wanna go mobile game 3.0 - Andrea trento - WhyMCA
Wanna go mobile game 3.0 - Andrea trento - WhyMCAWanna go mobile game 3.0 - Andrea trento - WhyMCA
Wanna go mobile game 3.0 - Andrea trento - WhyMCA
 
Dal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCA
Dal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCADal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCA
Dal web a Windows 8: costruire app Metro immersiv - Daniele Bochiccio - whyMCA
 
Physical computing: tutto intorno a te - Andrea Maietta, Paolo Aliverti
Physical computing: tutto intorno a te - Andrea Maietta, Paolo AlivertiPhysical computing: tutto intorno a te - Andrea Maietta, Paolo Aliverti
Physical computing: tutto intorno a te - Andrea Maietta, Paolo Aliverti
 
SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7
SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7
SCONTRO TRA UI -AKA- COSA DOVREMMO IMPARARE DA IOS, ANDROID E WP7
 
Gestire i pdf con IOS - Maurizio Moriconi - WhyMCA
Gestire i pdf con IOS - Maurizio Moriconi - WhyMCAGestire i pdf con IOS - Maurizio Moriconi - WhyMCA
Gestire i pdf con IOS - Maurizio Moriconi - WhyMCA
 
BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...
BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...
BEST PRACTICES PER LA SCRITTURA DI APPLICAZIONI TITANIUM APPCELERATOR - Aless...
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
Crossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano ColosioCrossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano Colosio
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentation
 
whymca Andrea Piovani Layar: la nuova frontiera della realtà aumentata
whymca Andrea Piovani Layar: la nuova frontiera della realtà aumentatawhymca Andrea Piovani Layar: la nuova frontiera della realtà aumentata
whymca Andrea Piovani Layar: la nuova frontiera della realtà aumentata
 
Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto
Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto
Whymca Riccardo Bosio Servizi Mobile e Applicazioni: la rivoluzione in atto
 
Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?
Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?
Whymca Filippo Renga Mobile Revolution Quali opportunità dalle applicazioni?
 
Whymca Vodafone Apps
Whymca Vodafone AppsWhymca Vodafone Apps
Whymca Vodafone Apps
 
Whymca Peoplesound
Whymca PeoplesoundWhymca Peoplesound
Whymca Peoplesound
 
Whymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile Messaging
Whymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile MessagingWhymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile Messaging
Whymca Mobyt Strumenti Open Source Per Infrastrutture Dimobile Messaging
 
Whymca Italo Vignoli Demografia Dei Social Media
Whymca Italo Vignoli Demografia Dei Social MediaWhymca Italo Vignoli Demografia Dei Social Media
Whymca Italo Vignoli Demografia Dei Social Media
 

Dernier

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Dernier (20)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

Beginning icloud development - Cesare Rocchi - WhyMCA