安装 letsencrypt

apt-get install letsencrypt

创建 SSL 证书

certbot certonly --manual --preferred-challenges=dns --email 1005411480a@gmail.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.songzhigang.com -d *.zgang.me

接下来会要求你在 DNS 里面设置 txt 记录以验证你确实是域名持有者. 到您的域名服务商页面设置正确的 txt 记录之后, 即可生成证书, 证书有效期三个月.

Lua 手动实现了词法分析. Lexer 部分很简单, 就是获取输入字符流, 然后分析是那种 token, 最后返回给 yyac.
了解 lex 工具的人对这里涉及到的变量名字可能会比较熟悉

几个宏定义:

#define next() { current = input(); }
#define save(x) { *yytextLast++ = (x); }
#define save_and_next()  { save(current); next(); }

next 用于从输入中读取下一个字符. save 保存 x 到 lex token 输出缓存区.

lexer 的全局变量

static int current;
static char yytext[256];
static char *yytextLast;

static Input input;
Read More

JSON-C 使用 json_object 结构体来表示 json
对象, 可以使用 json_object_to_json_string_ext 函数来输出一个 json 对象.
json_object_to_json_string 函数是前一个函数的包装.

jsob_object *json_obj = json_object_new_object();

Json 对象有几种数据类型, 对应的 json-c 库有这几个基本类型的创建方法.

struct json_object * json_object_new_boolean(json_bool b);
json_bool json_object_get_boolean(struct json_object *obj);

struct json_object * json_object_new_int(int32_t i);
int32_t json_object_get_int(struct json_object *obj);

struct json_object * json_object_new_int64(int64_t i);
int64_t json_object_get_int64(struct json_object *obj);

struct json_object * json_object_new_double(double d);
struct json_object * json_object_new_double_s(double d, const char *ds);
double json_object_get_double(struct json_object *obj);

struct json_object * json_object_new_string(const char *s);
struct json_object * json_object_new_string_len(const char *s, int len);
const char * json_object_get_string(struct json_object *obj);
int json_object_get_string_len(struct json_object *obj);
Read More

形式 (Form)

人可以通过实践来学习一件事,这对于 Lisp 来说特别有效,因为 Lisp 是一门交互式的语言。任何 Lisp 系统都含有一个交互式的前端,叫做顶层(toplevel)。你在顶层输入 Lisp 表达式,而系统会显示它们的值。

Lisp 通常会打印一个提示符告诉你,它正在等待你的输入。许多 Common Lisp 的实现用 > 作为顶层提示符。本书也沿用这个符号。

一个最简单的 Lisp 表达式是整数。如果我们在提示符后面输入 1 ,

> 1
1
>
Read More

心血来潮, 想学下 Lisp 或者 Haskell, 正好发现了Build Your Own Lisp
这本书, 所以先从 Lisp 入手.

基本概念

表达式要用括号 () 括起来, 括号中第一项内容为操作符, 后面的是它的操作域(操作数). 这种便是方法称为前缀表示法, 也叫波兰表示法.

(+ 1 2)
(sqrt 16)

数学上, 函数用 f(x) 表示, 在 lisp 中, 也要使用前缀表示法表示:

Read More