Skip to content

Instantly share code, notes, and snippets.

View nanne007's full-sized avatar
🏠
Working from home

caojiafeng nanne007

🏠
Working from home
View GitHub Profile
@nanne007
nanne007 / gist:79366ea8ec5e0f85e415d99919d573bf
Created May 8, 2016 16:21 — forked from rygorous/gist:e0f055bfb74e3d5f0af20690759de5a7
A bit of background on compilers exploiting signed overflow
Why do compilers even bother with exploiting undefinedness signed overflow? And what are those
mysterious cases where it helps?
A lot of people (myself included) are against transforms that aggressively exploit undefined behavior, but
I think it's useful to know what compiler writers are accomplishing by this.
TL;DR: C doesn't work very well if int!=register width, but (for backwards compat) int is 32-bit on all
major 64-bit targets, and this causes quite hairy problems for code generation and optimization in some
fairly common cases. The signed overflow UB exploitation is an attempt to work around this.
@nanne007
nanne007 / process_pool.rb
Created July 8, 2016 07:31 — forked from choplin/process_pool.rb
Process Pool in Ruby
require 'msgpack'
require 'thread'
class ProcessPool
def initialize(num_process, args={})
queue_size, worker_class = parse_args([
:queue_size, nil,
:worker_class, Worker,
], args)
@nanne007
nanne007 / .rubocop.yml
Created July 14, 2016 07:48 — forked from jhass/.rubocop.yml
My preferred Rubocop config
AllCops:
RunRailsCops: true
# Commonly used screens these days easily fit more than 80 characters.
Metrics/LineLength:
Max: 120
# Too short methods lead to extraction of single-use methods, which can make
# the code easier to read (by naming things), but can also clutter the class
Metrics/MethodLength:
@nanne007
nanne007 / loop.ex
Created July 22, 2016 15:34
loop, while,break construct in elixir
defmodule Loop do
defmacro while(predicate, do: block) do
quote do
try do
for _ <- Stream.cycle([:ok]) do
if unquote(predicate) do
unquote(block)
else
throw :break
end
@nanne007
nanne007 / macro_def.ex
Last active July 27, 2016 12:03
strange behavior of elixir macro
defmodule FuncMacro do
defmacro func(name) do
quote do
def unquote(name)(args) do
Enum.join(args, "-")
end
end
end
defmacro func_with_body(name, do: body) do
@nanne007
nanne007 / benchmark-commands.txt
Created December 17, 2016 02:09 — forked from jkreps/benchmark-commands.txt
Kafka Benchmark Commands
Producer
Setup
bin/kafka-topics.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --create --topic test-rep-one --partitions 6 --replication-factor 1
bin/kafka-topics.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --create --topic test --partitions 6 --replication-factor 3
Single thread, no replication
bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test7 50000000 100 -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=8196
@nanne007
nanne007 / concurrent.js
Created July 19, 2017 15:02 — forked from matianfu/concurrent.js
A base class for writing concurrent processes, with abort, until, race and settle.
// licensed under public domain
// author: [email protected]
const EventEmitter = require('events')
// K combinator, not necessary, just for fun
const K = x => y => x
// this class is mainly for settle logic.
// the concrete class should emit a 'finish' event with err/data at the end of the process

Rust/Haskell: Higher-Kinded Types (HKT)

A higher kinded type is a concept that reifies a type constructor as an actual type.

A type constructor can be thought of in these analogies:

  • like a function in the type universe
  • as a type with a "hole" in it
version: "3.2"
services:
zero:
image: dgraph/dgraph:latest
volumes:
- type: volume
source: dgraph
target: /dgraph
volume:
nocopy: true