Skip to content

Instantly share code, notes, and snippets.

View blacklee's full-sized avatar

Black Lee blacklee

  • Hangzhou, China
View GitHub Profile
@blacklee
blacklee / gist:9045300
Created February 17, 2014 05:41
performselectoronmainthread and get return value
// http://stackoverflow.com/a/3346157/490794
// call
NSMutableDictionary *myDict;
[object performSelectorOnMainThread:@selector(getElements:)
withObject:&myDict waitUntilDone:YES];
// define
- (void)getElements:(NSMutableDictionary **)objects;
@blacklee
blacklee / gist:11293269
Created April 25, 2014 15:18
create a "fat" libary
lipo -create libdevice.a libsimulator.a -output libcombined.a
set -e
set -x
input=$1
output=$2
input_cert=$(echo $input)-cert.p12
input_key=$(echo $input)-key.p12
input_file_not_exists=0
@blacklee
blacklee / ffmpeg-to-480p.sh
Created February 19, 2016 13:43
ffmpeg convert video to 480p
ffmpeg -i input.mp4 -s hd480 -c:v libx264 -crf 23 -c:a aac -strict -2 output.mp4
@blacklee
blacklee / AppDelegate.m
Created August 30, 2016 03:02
Using this partial codes to share test data across all simulators in your Mac.
- (void)setupSharedDirectoryForMacTest {
#ifndef DEBUG
return;
#endif
#ifndef TARGET_IPHONE_SIMULATOR
return;
#endif
NSLog(@"--------------------------------------------------------------------------------------------------------");
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
@blacklee
blacklee / SpeechVoiceFromLocaleLanguageCode.m
Created April 10, 2018 05:31
Get AVSpeechSynthesisVoice by [NSLocale preferredLanguages]
AVSpeechSynthesisVoice *SpeechVoiceFromLocaleLanguageCode(NSString *langCode) {
NSArray<NSString*> *langCodeParts = [[langCode stringByReplacingOccurrencesOfString:@"-" withString:@"_"] componentsSeparatedByString:@"_"];
NSArray<AVSpeechSynthesisVoice*> *availTTSVoices = [AVSpeechSynthesisVoice speechVoices];
NSMutableArray<AVSpeechSynthesisVoice*> *filteredVoices = [NSMutableArray array];
AVSpeechSynthesisVoice *selectedVoice = nil, *defaultVoice = nil;
// first round filter, uses prefix.
for (AVSpeechSynthesisVoice *voice in availTTSVoices) {
if (!defaultVoice && [voice.language isEqualToString:@"en-US"]) {
defaultVoice = voice;
}
@blacklee
blacklee / aqi.lua
Created April 9, 2019 07:27
Hammerspoon-AQI
local url = "https://api.waqi.info/feed/@UID/?token=Demo-Token"
-- fill your UID and token
local menubar = hs.menubar.new()
function getColor(aqi)
if aqi <= 50 then
return {red = 0, blue = 0, green = 1}
end
if aqi <= 100 then