Skip to content

Instantly share code, notes, and snippets.

$ cd /home/xiaochen.wxc/work/github-xiaochen/tengine-xiaochen
$ cat test_nginx.sh
TEST_NGINX="/home/xiaochen.wxc/work/github-xiaochen/tengine-xiaochen/tests/test-nginx/test-nginx"
export PATH=/home/xiaochen.wxc/work/github-xiaochen/tengine-xiaochen/objs:$PATH
prove -v -I $TEST_NGINX/inc -I $TEST_NGINX/lib \
tests/test-nginx/cases/footer.t \
tests/test-nginx/cases/proxy_no_buffering_chunked.t \
tests/test-nginx/cases/proxy_no_buffering.t \
@chobits
chobits / ffi.md
Created September 29, 2015 09:40
luajit source notes
1.
luaopen_ffi()
 -> lj_ctype_init(L)
   -> setmref(G(L)->ctype_state, cts)
 -> lj_clib_default(L) # init ffi.C (default libc.so loader)
   -> cl = clib_new()
      cl->handle = RTLD_DEFAULT   

ctype_cts(L)
@chobits
chobits / gist:1976145
Created March 5, 2012 02:41
basic vim regex
numbers:
:%s/[0-9]\+/<something>/gc
strings:
:%s/[a-zA-Z]\+/<something>/gc
parentheses:
:%s/[\[\]{}()<>]\+/<something>/gc
special characters:
@chobits
chobits / gist:2069014
Created March 18, 2012 04:57
python *args, **kwargs
>>> def test(a, b):
... print a, b
...
>>> test('hello', 'world')
hello world
>>> test(*('hello', 'world')) # tuple
hello world
>>> test(*iter(['hello', 'world'])) # iter
hello world
>>> test(*['hello', 'world']) # list
@chobits
chobits / gist:2205352
Created March 26, 2012 14:11
python: careful of swaping value
>>> class A():
... val = 0
...
>>> a = A()
>>> a.val, a = 1, a.val # right
>>> a = A()
>>> a, a.val = a.val, 1 # wrong
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'val'
@chobits
chobits / finalizer_garbage.py
Created April 5, 2012 12:32
Python: how to create finalizer garbage
import gc
class A():
# For Python, finalizers means instance objects with __del__ methods.
def __del__(self):
pass
print gc.garbage
# []
@chobits
chobits / nginx_kqueue_event.txt
Last active December 22, 2015 02:19
nginx source notes
The available and post_available field of structure ngx_event_t is only used by KQUEUE.
Other event modules (epoll, poll and etc) donest care about it.
For read event, available means size of data ready to read.
For read event(listening event), available means size of listen backlog.
post_avalibale is only used for multi-thread & KQUEUE.
multi_accept directive doesn't matter for kqueue. (see http://forum.nginx.org/read.php?2,3638,3661)
@chobits
chobits / spdy_zlib.py
Last active December 28, 2015 11:49
zlib wrapper for spdy v2/v3
# Used for python 3.3+
# API: decompress, compress
# zlib dictionary support for python: http://bugs.python.org/issue14684
#
# For test:
# $ python3 spdy_zlib.py
import zlib
spdy_v2_dict = b'''\
mail message modified:
Xiaochen Wang <wangxiaochen0@gmail.com>
11:07 AM (2 hours ago)
to web-07
hi mike,
We still have an issue, always crashed on first instruction of tracing generated machine code.
@chobits
chobits / test_log_alibaba_tengine_pull_1105.md
Last active December 20, 2018 11:23
test case for updating nginx-1.15.1 modules

Test Case:

  • Case failure:
    • sub_filter_slice.t: current tengine has its slice module, so this case is not run for nginx module.
    • limit_conn_complex.t: limit_req module is not updated.
    • index2.t: current tengine does not merge http://hg.nginx.org/nginx/rev/d91a8c4ac6bb.
    • userid.t: tengine refactor 404 page. It outputs URI in response, the URI has "expires" string, which makes case failed.