Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sound Debugging- NSConference 2014

Sound Debugging- NSConference 2014

A public talk given at NSConference in Leicester on Tuesday, 18 March 2014.

You can find a related blog post at http://qnoid.com/2013/06/08/Sound-Debugging.html

A video of the of the talk is also available at https://www.youtube.com/watch?v=rMtGcLLYldw

Markos Charatzas

March 17, 2014
Tweet

More Decks by Markos Charatzas

Other Decks in Technology

Transcript

  1. dispatch_block_t frog = (^{ ! }) ! dispatch_block_t hero =

    (^{ ! }) ! dispatch_block_t ping = (^{ ! })
  2. How does a serial queue sound like? dispatch_queue_t queue =

    dispatch_queue_create(“com.qnoid.queue”, NULL);
  3. dispatch_time_t TIMEOUT = dispatch_time(DISPATCH_TIME_NOW, TWO_SECONDS);! dispatch_group_t group = dispatch_group_create();! dispatch_group_enter(group);!

    ! AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"https://api.foursquare.com/v2/"]];! NSURLRequest *request = [NSURLRequest requestWithURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"venues/search?ll=55.944493,-3.183833"]];! ! AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request! success:^(AFHTTPRequestOperation *operation, id responseObject) {! dispatch_group_leave(group);! }! failure:^(AFHTTPRequestOperation *operation, NSError *error) {! dispatch_group_leave(group);! }];! XCTAssertFalse(DID_TIMEOUT(dispatch_group_wait(group, TIMEOUT)), @"Timed out"); Can you tell what this code does?
  4. dispatch_time_t TIMEOUT = dispatch_time(DISPATCH_TIME_NOW, TWO_SECONDS);! dispatch_group_t group = dispatch_group_create();! dispatch_group_enter(group);!

    ! AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"https://api.foursquare.com/v2/"]];! NSURLRequest *request = [NSURLRequest requestWithURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"venues/search?ll=55.944493,-3.183833"]];! ! AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request! success:^(AFHTTPRequestOperation *operation, id responseObject) {! dispatch_group_leave(group);! }! failure:^(AFHTTPRequestOperation *operation, NSError *error) {! dispatch_group_leave(group);! }];! XCTAssertFalse(DID_TIMEOUT(dispatch_group_wait(group, TIMEOUT)), @"Timed out"); Debug
  5. dispatch_time_t TIMEOUT = dispatch_time(DISPATCH_TIME_NOW, TWO_SECONDS);! dispatch_group_t group = dispatch_group_create();! dispatch_group_enter(group);!

    ! AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"https://api.foursquare.com/v2/"]];! NSURLRequest *request = [NSURLRequest requestWithURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"venues/search?ll=55.944493,-3.183833"]];! ! AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request! success:^(AFHTTPRequestOperation *operation, id responseObject) {! dispatch_group_leave(group);! }! failure:^(AFHTTPRequestOperation *operation, NSError *error) {! dispatch_group_leave(group);! }];! ! ! ! ! XCTAssertFalse(DID_TIMEOUT(dispatch_group_wait(group, TIMEOUT)), @"Timed out"); It’s missing the call to start [operation start];
  6. dispatch_time_t TIMEOUT = dispatch_time(DISPATCH_TIME_NOW, TWO_SECONDS);! dispatch_group_t group = dispatch_group_create();! dispatch_group_enter(group);!

    ! AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"https://api.foursquare.com/v2/"]];! NSURLRequest *request = [NSURLRequest requestWithURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"venues/search?ll=55.944493,-3.183833"]];! ! AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request! success:^(AFHTTPRequestOperation *operation, id responseObject) {! dispatch_group_leave(group);! }! failure:^(AFHTTPRequestOperation *operation, NSError *error) {! dispatch_group_leave(group);! }];! ! ! ! [operation start]; XCTAssertFalse(DID_TIMEOUT(dispatch_group_wait(group, TIMEOUT)), @"Timed out"); Main queue is blocked operation.failureCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); operation.successCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
  7. dispatch_time_t TIMEOUT = dispatch_time(DISPATCH_TIME_NOW, TWO_SECONDS);! dispatch_group_t group = dispatch_group_create();! dispatch_group_enter(group);!

    ! AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"https://api.foursquare.com/v2/"]];! NSURLRequest *request = [NSURLRequest requestWithURL:! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [NSURL URLWithString:@"venues/search?ll=55.944493,-3.183833"]];! ! AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request! success:^(AFHTTPRequestOperation *operation, id responseObject) {! dispatch_group_leave(group);! }! failure:^(AFHTTPRequestOperation *operation, NSError *error) {! dispatch_group_leave(group);! }];! operation.failureCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); operation.successCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); ! [operation start];! XCTAssertFalse(DID_TIMEOUT(dispatch_group_wait(group, TIMEOUT)), @"Timed out"); Main queue is blocked
  8. ! • The sound of posting a photo on Instagram.

    ! • Can a soundwave be used as a hash for a code path? On functional testing
  9. • The sound of algorithms 1. How does binary search

    sound? 2. When does a hash table resize? • Understand performance (at a high level) On education