Skip to content

Instantly share code, notes, and snippets.

@yiding
yiding / osx-man-xcode.md
Last active October 29, 2022 18:20
Man pages on OSX + Xcode Developer tools

OSX's man utility has custom patches to allow finding man pages from installed Xcode SDKs.

#ifdef __APPLE__
	xcselect_manpaths *xcp;
	const char *path;
	unsigned i, count;

	// TODO: pass something for sdkname
	xcp = xcselect_get_manpaths(NULL);
@yiding
yiding / gist:1bfe9bbf5187a6ff6f34
Created June 30, 2014 19:03
WebRTC native, forcing ports to be allocated in a certain range.
class PortAllocatorFactoryWrapper : public PortAllocatorFactory {
public:
PortAllocatorFactoryWrapper(talk_base::Thread* worker_thread, int minPort, int maxPort)
: PortAllocatorFactory(worker_thread), minPort_(minPort), maxPort_(maxPort) {}
virtual cricket::PortAllocator *CreatePortAllocator(
const std::vector<StunConfiguration> &stun,
const std::vector<TurnConfiguration> &turn) override {
auto allocator = PortAllocatorFactory::CreatePortAllocator(stun, turn);
allocator->SetPortRange(minPort_, maxPort_);
@yiding
yiding / DGPHParser.hs
Last active May 21, 2021 08:56
Parsing xcode DGPH files. This one handles DGPH 1.04 (used in xcode 7.0, 7.1) Xcode DGPH files contains dependency graph information that lets Xcode do incremental builds.
{-# LANGUAGE OverloadedStrings #-}
module DGPHParser(parseDgph) where
import qualified Data.Attoparsec.ByteString as A
import qualified Data.ByteString as B
import Data.Bits
import Data.Foldable (foldl')
import qualified Data.ByteString as B
import qualified Data.Attoparsec.ByteString as A
@yiding
yiding / SLF0Parser.hs
Created July 10, 2014 22:33
Xcode SLF0 serialization format parser (used in xcactivitylog)
{-# LANGUAGE OverloadedStrings #-}
{-|
Tokenizer for SLF0 serialization format, used by Xcode to, at the very least,
encode some log files.
For example, `.xcactivitylog` logs are gzipped files of this format,
serializing some objc classes which represent the build log.
This class tokenizes the raw byte stream into a flat list of tokens. The actual
@yiding
yiding / main.rs
Created October 12, 2019 02:04
Split a file containing a large json array into a bunch of smaller files.
use clap::clap_app;
use memmap::MmapOptions;
use serde_json::value::RawValue;
use std::fs::File;
use std::io;
fn main() -> io::Result<()> {
let matches = clap_app!(myapp =>
(about: "Split file containing a top level json array into many files.")
@yiding
yiding / tasks.js
Created June 2, 2017 20:03
VSCode tasks.json for stack
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "stack",
"tasks": [
{
"taskName": "build",
"isBuildCommand": true
},
@yiding
yiding / args_with_clang.cpp
Created September 4, 2014 02:03
Trivially parsing clang command line args with clang itself.
#include <llvm/Option/ArgList.h>
#include <llvm/Option/Arg.h>
#include <clang/Driver/Options.h>
#include <llvm/Option/OptTable.h>
#include <llvm/Support/raw_ostream.h>
#include <memory>
using namespace llvm;
@yiding
yiding / imapfilter_phabricator.lua
Created June 25, 2014 00:17
Imapfilter function to move all notifications related to phabricator notifications to a different folder
function pruneCommittedDiffs(mailbox, dest_mailbox)
diff_set = mailbox:contain_subject('[Differential]')
committed_diff_set = diff_set:contain_field('X-Phabricator-Mail-Tags', '<differential-committed>')
for _, message in ipairs(committed_diff_set) do
mmbox, uid = table.unpack(message)
rev_key = string.gsub(mmbox[uid]:fetch_field('In-Reply-To'), 'In%-Reply%-To: ', '')
all_diff_msgs = diff_set:contain_field('In-Reply-To', rev_key) + diff_set:contain_field('Message-ID', rev_key)
all_diff_msgs:move_messages(dest_mailbox)
end
end
@yiding
yiding / flow.vim
Created March 23, 2015 22:15
syntastic checker for flow
" requires vim-flow: https://github.com/facebook/vim-flow/
" put this in a syntax_checkers/ directory, such as:
" .vim/bundle/flowtype/syntax_checkers/javascript/flow.vim
if exists("g:loaded_syntastic_javascript_flow_checker")
finish
endif
let g:loaded_syntastic_javascript_flow_checker = 1
let s:save_cpo = &cpo
@yiding
yiding / hoogle.sh
Created July 11, 2014 02:20
Generate local hoogle instance based on installed packages, uses ninja to build
#!/bin/bash
cd $(dirname $0)
OUTDIR=_out
mkdir -p $OUTDIR
OUTNINJA=$OUTDIR/build.ninja
cat << EOF > $OUTNINJA
rule ln