Skip to content

Instantly share code, notes, and snippets.

marcoarment / apns_jwt_token.php
Last active Jun 8, 2020
Generate ES256 JWT tokens for Apple Push Notification Service (APNS) in PHP
View apns_jwt_token.php
function base64url_encode($binary_data) { return strtr(rtrim(base64_encode($binary_data), '='), '+/', '-_'); }
function apns_jwt_token($team_id, $key_id, $private_key_pem_str)
if (! function_exists('openssl_get_md_methods') || ! in_array('sha256', openssl_get_md_methods())) throw new Exception('Requires openssl with sha256 support');
$private_key = openssl_pkey_get_private($private_key_pem_str);
if (! $private_key) throw new Exception('Cannot decode private key');
marcoarment / FCPrivateBatteryStatus.m
Created Jan 29, 2016
How to get raw battery info (mAh remaining, etc.) from iOS using private APIs. For internal testing only, NOT APP STORE DISTRIBUTION!
View FCPrivateBatteryStatus.m
#import <Foundation/Foundation.h>
#include <dlfcn.h>
NSDictionary *FCPrivateBatteryStatus()
static mach_port_t *s_kIOMasterPortDefault;
static kern_return_t (*s_IORegistryEntryCreateCFProperties)(mach_port_t entry, CFMutableDictionaryRef *properties, CFAllocatorRef allocator, UInt32 options);
static mach_port_t (*s_IOServiceGetMatchingService)(mach_port_t masterPort, CFDictionaryRef matching CF_RELEASES_ARGUMENT);
static CFMutableDictionaryRef (*s_IOServiceMatching)(const char *name);
marcoarment /
Created Feb 13, 2015
Encode a podcast with metadata using command-line LAME
# Encode a WAV to a finalized podcast MP3 with metadata, in the current directory
# Requires lame
# With Homebrew on Mac OS X: brew install lame
View gist:64ffc783d9e593ab62be
// ...
@property (nonatomic) NSMutableDictionary *downloadStateByURLString;
// ...
- (double)downloadProgressOfURLString:(NSString *)urlStr
return [self.downloadProgressByURLString[urlStr] doubleValue]; // SIGSEGV sometimes here
// Should I be doing this instead, or is ARC doing it for me and the problem lies elsewhere?
// NSNumber *progress = self.downloadProgressByURLString[urlStr];
View gist:dc89ccc29ae9d0a2c76f
//TODO get URL from parameters and authenticate it with an expiring hash/timestamp
$url = '';
// Forward these headers from original request
$requestHeaders = [];
if (isset($_SERVER['HTTP_USER_AGENT'])) $requestHeaders[] = 'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'];
if (isset($_SERVER['HTTP_RANGE'])) $requestHeaders[] = 'Range: ' . $_SERVER['HTTP_RANGE'];
marcoarment / gist:1105553afba6b4900c10
Created Oct 21, 2014
Variable-height UITableView tableHeaderView with autolayout
View gist:1105553afba6b4900c10
// in a UITableViewController (or any other view controller with a UITableView)
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, 0)];
header.translatesAutoresizingMaskIntoConstraints = NO;
// [add subviews and their constraints to header]
NSLayoutConstraint *headerWidthConstraint = [NSLayoutConstraint
marcoarment / .htaccess
Created Jul 15, 2014
Old source (omitting chorus includes)
View .htaccess
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_URI} ^\.htpasswd
RewriteRule .* - [L]
RewriteRule ^(.*/)?\.svn/ - [F,L]
ErrorDocument 404 "Not Found"
php_flag register_globals Off
php_flag magic_quotes_gpc Off
marcoarment / ATPLogoView.m
Created Apr 29, 2014
Source for the Accidental Tech Podcast (ATP) T-Shirt
View ATPLogoView.m
// Source for the Accidental Tech Podcast (ATP) T-Shirt:
// By Marco Arment, April 28, 2014. MIT license.
@implementation ATPLogoView
- (void)drawRect:(CGRect)rectIgnored
NSString *fontName = @"MyriadPro-Semibold";
View ApplePushNotification.php
This is part of the Reprise framework, not yet released publicly.
Copyright 2013 Marco Arment. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
marcoarment / feed-subscribers.php
Created Jul 10, 2013
Better RSS-subscribers script for the post-Google-Reader world.
View feed-subscribers.php
<?php /* With apologies to Dr. Drang and John Siracusa.
By Marco Arment.
Released into the public domain with no warranties and no restrictions.
Usage: Pipe an Apache access log into stdin, e.g.:
php -f feed-subscribers.php < /var/log/httpd/access_log
You can’t perform that action at this time.