Skip to content

Instantly share code, notes, and snippets.

View samvermette's full-sized avatar

Sam Vermette samvermette

  • Transit
  • Montréal
View GitHub Profile
@samvermette
samvermette / apn-server.php
Created December 30, 2010 07:40
Quickly send an Apple Push Notification using PHP
<?php
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsCert = 'apns-dev.pem';
$apnsPort = 2195;
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
@samvermette
samvermette / gist:1691280
Created January 27, 2012 22:27
MapKit callout bubble pop animation
self.view.layer.anchorPoint = CGPointMake(0.50, 1.0);
CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
bounceAnimation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.05],
[NSNumber numberWithFloat:1.08],
[NSNumber numberWithFloat:0.92],
[NSNumber numberWithFloat:1.0],
nil];
@samvermette
samvermette / apn-server.rb
Created December 30, 2010 07:34
Quickly send an Apple Push Notification
cert = File.read(File.join(RAILS_ROOT, 'config', 'apns-dev.pem'))
ctx = OpenSSL::SSL::SSLContext.new
ctx.key = OpenSSL::PKey::RSA.new(cert, '') #set passphrase here, if any
ctx.cert = OpenSSL::X509::Certificate.new(cert)
sock = TCPSocket.new('gateway.sandbox.push.apple.com', 2195) #development gateway
ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx)
ssl.connect
payload = {"aps" => {"alert" => "Oh hai!", "badge" => 1, "sound" => 'default'}}
[SVProgressHUD show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
for(id object in objects) {
// CPU heavy code
dispatch_async(dispatch_get_main_queue(), ^ {
[SVProgressHUD showProgress:x];
});
}
rescue_from Exception, :with => :mail_exception
def mail_exception(exception)
mail = Mail.new do
from 'Rescuer (domain.com) <rescuer@domain.com>'
to 'user@domain.com'
subject exception.inspect
body exception.backtrace[0..10].join("\n")
end
- (void)queryDidReceiveNotification:(NSNotification *)notification {
NSArray *results = [self.metadataQuery results];
for(NSMetadataItem *item in results) {
NSString *filename = [item valueForAttribute:NSMetadataItemDisplayNameKey];
NSNumber *filesize = [item valueForAttribute:NSMetadataItemFSSizeKey];
NSDate *updated = [item valueForAttribute:NSMetadataItemFSContentChangeDateKey];
NSLog(@"%@ (%@ bytes, updated %@)", filename, filesize, updated);
}
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(queryDidReceiveNotification:)
name:NSMetadataQueryDidUpdateNotification
object:self.metadataQuery];
self.metadataQuery = [[NSMetadataQuery alloc] init];
[metadataQuery setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE '*'", NSMetadataItemFSNameKey]];
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat maxY = scrollView.contentSize.height+scrollView.contentInset.bottom;
CGFloat botY = scrollView.contentOffset.y+scrollView.frame.size.height;
NSLog(@"y = %f, maxY = %f", botY, maxY);
if(botY >= maxY) {
// load next page
}
}
- (void)viewDidLoad {
self.currentPage = 0;
self.dataSource = [[NSMutableArray alloc] init];
}
- (void)fetchData {
[[SVHTTPClient sharedClient] GET:@"https://api.github.com/users/AndrewGertig/watched"
parameters:[NSDictionary dictionaryWithValue:[NSNumber numberWithInt:self.currentPage] forKey:@"page"]
completion:^(id response, NSError *error) {
[self.dataSource addObjectsFromArray:response];