Skip to content

Instantly share code, notes, and snippets.

View garrydzeng's full-sized avatar

Octobrain garrydzeng

  • Xiamen, Fujian, China
  • 00:37 (UTC +08:00)
View GitHub Profile
@garrydzeng
garrydzeng / content-schema.md
Created February 21, 2022 19:00
A field parameter used to negotiate content schema (example: )

起因

内容协商 (Content Negotiation) 是 HTTP 协议重要的组成部分,它允许客户端与服务端协商内容的媒体类型 (MIME) 等信息,但不能拿来协商内容结构。日常开发当中,这个其实是刚需的功能:或许你还能记得客户端需要什么字段的时候,服务端就对应地修改返回的数据。反反复复的日子😂。为了解决这个问题,计划在 Accept 请求头当中 schema 参数用于协商数据结构

示例

POST /sessions
Accept: application/json; charset=utf-8; schema={id,user{name,id}}

这个例子里,客户端协商数据结构为 {id,user{name,id}} ,因此服务端自动地响应需要的自动为 JSON 格式

{
@garrydzeng
garrydzeng / getopt.js
Created October 13, 2017 01:52
Read command parameter (argument or option) from generator
function* getopt(argv) {
let cache = null
// ignore execution program & script filename by call to .slice() function.
for (let node of argv.slice(2)) {
const match = /^--([a-z][0-9a-z-]*)(?:=(.*))?$/i.exec(node)
// hanlde cache first...
{
"compilerOptions": {
"jsx": "react",
"moduleResolution": "node",
"module": "commonjs",
"experimentalDecorators": true,
"target": "es5",
"lib": [
"es5",
"scripthost",
@garrydzeng
garrydzeng / uefi.cmd
Created January 17, 2017 07:21
DiskPart Script: Recommended Configuration
rem == CreatePartitions-UEFI.txt ==
rem == These commands are used with DiskPart to
rem create five partitions
rem for a UEFI/GPT-based PC.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
convert gpt
rem == 1. Windows RE tools partition ===============
@garrydzeng
garrydzeng / JumpConsistentHash.cpp
Last active June 30, 2016 06:02
jump consistent hash
// http://arxiv.org/ftp/arxiv/papers/1406/1406.2294.pdf
int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {
int64_t b = -1, j = 0;
while (j < num_buckets) {
b = j;
key = key * 2862933555777941757ULL + 1;
j = (b + 1) * (double(1LL << 31) / double((key >> 33) + 1));
}
return b;
}
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uhv epel-release-latest-6.noarch.rpm
yum clean
@garrydzeng
garrydzeng / deploy
Last active June 22, 2016 07:47
checkout source code and publish to remote server via rsync
#!/bin/env bash
# deploy project script.
# make sure /usr/local/etc/deployment.key permissions is 600.
# this is required to open it.
set -e
build=
revision=HEAD
@garrydzeng
garrydzeng / CommandOption.cs
Last active December 20, 2015 07:17
CommandOption is a callback-based program option parser.
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security;
using System.Text.RegularExpressions;
using System.Linq;
// Stephen Toub
// stoub@microsoft.com
//
// ManagedThreadPool.cs
// ThreadPool written in 100% managed code. Mimics the core functionality of
// the System.Threading.ThreadPool class.
//
// HISTORY:
// v1.0.1 - Disposes of items remaining in queue when the queue is emptied
// - Catches errors thrown during execution of delegates
@garrydzeng
garrydzeng / database_factory.py
Last active August 29, 2015 14:03
Database factory for DBAPI 2.0
import configparser
class DatabaseFactory(object):
def __init__(self, filename, encoding=None):
"""instantiate with configuration filename"""
self._cache = dict()
self._servers = configparser.ConfigParser()
self._servers.read(filename, encoding)