用Cython加速Python到“起飞”
注:这是2018年2月写的旧博文,转载到此。
事先声明,标题没有把“Python”错打成“Cython”,因为要讲的就是名为“Cython”的东西。
Cython是让Python脚本支持C语言扩展的编译器,Cython能够将Python+C混合编码的.pyx脚本转换为C代码,主要用于优化Python脚本性能或Python调用C函数库。由于Python固有的性能差的问题,用C扩展Python成为提高Python性能常用方法,Cython算是较为常见的一种扩展方式。
我们可以对比一下业界主流的几种Python扩展支持C语言的方案:
ctypes是Python标准库支持的方案,直接在Python脚本中导入C的.so库进行调用,简单直接。swig是一个通用的让高级脚本语言扩展支持C的工具,自然也是支持Python的。ctypes没玩过,不做评价。以c语言程序性能为基准的话,cython封装后下降20%,swig封装后下降70%。功能方面,swig对结构体和回调函数都要使用typemap进行手工编写转换规则,typemap规则写起来略复杂,体验不是很好。cython在结构体和回调上也要进行手工编码处理,不过比较简单。
图解Redis通信协议
注:这是2018年2月写的旧博文,转载到此。
Redis 协议
Redis客户端和服务端之间使用一种名为RESP(REdis Serialization Protocol)的二进制安全文本协议进行通信。RESP设计的十分精巧,下面是一张完备的协议描述图:
#举个栗子
用SET命令来举例说明RESP协议的格式。
1 | redis> SET mykey "Hello" |
实际发送的请求数据:
1 | *3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$5\r\nHello\r\n |
实际收到的响应数据:
1 | +OK\r\n |
每种命令对应的回复类型,可以查询Redis官网的命令列表Command reference。更详细的协议说明请参考Redis官方协议规范Redis Protocol specification。
参考
[1] 通信协议(protocol),http://redisdoc.com/topic/protocol.html
[2] Redis Protocol specification,https://redis.io/topics/protocol
版权声明:自由转载-非商用-非衍生-保持署名(创意共享4.0许可证)
极简 Anki 牌组结构
注:这是2020年1月写的旧博文,转载到此。
Anki是什么?
本文假定你是个Anki用户,并不会对Anki基础知识进行介绍。对Anki不熟悉的读者可以阅读Anki英文官网(Anki - powerful, intelligent flashcards),或Anki中国(Anki–近乎完美的记忆神器)的介绍内容。
正确使用牌组
“正确使用牌组”是官方 Anki 手册上对 Anki 牌组功能的使用建议,内容如下:
牌组被设计成将你的内容分成你想单独学习的大类,如英语、地理等等。 你可能会想创建许多小的牌组,以保持你的内容有条理,如“我的地理书第1章”,或“食品动词”,但这是不推荐的,有以下原因:
许多小牌组意味着你最终会以可识别的顺序复习卡片。 无论是因为你依次点击每一个牌组(这是缓慢的),或你在一个单一的父级牌组上增加了一些牌组,你最终会看到所有的“第1章”或“食物动词”卡片在一起。 这使得回答卡片更容易,因为你可以从上下文猜测他们,从而导致较弱的记忆。 当你需要回忆单词或Anki外的短语时,你不会有充足的可被证明的相关内容。
Anki不是设计来处理许多牌组(超过几十个),它会慢下来,当你添加更多的–尤其是如果你在一个移动客户端的情况下。一些额外的牌组不会产生明显的差异,但是如果你有许多牌组,延误将开始增加。
使用标签和/或字段来分类内容,替代创建许多小的牌组,这是一个更好的主意。 例如替代创建一个“食物动词”,你可以把这些卡片添加到你的主要语言学习牌组,并用“食物”和“动词”来标记卡片。每个卡片可以有多个标签,这意味着你可以做的事情,如寻找所有的动词,或所有与食品有关的词汇,或所有的动词与食品有关。
对于那些喜欢保持非常有条理的,您可以添加字段到您的笔记分类的内容,如“书”,“页”等。 Anki支持特定字段的搜索,这意味着你可以做一个“图书搜索:‘我的书’页码:63”马上找到你要找的。
Anki的定制学习和筛选牌组特点使其特别强大,因为你可以从搜索条件创建临时牌组。这允许您在大多数时间(最佳内存)中将内容混合在一个单独的牌组上,同时也需要在特定的材料上创建临时牌组,例如在测试之前。一般的规则是,如果你总是希望能够单独学习一些内容,它应该是在一个正常的牌组上,如果你只是偶尔需要能够单独学习(测试,有压力时,等),标签/字段和过滤牌组更好。
由上可知,官方的建议是不要创建许多小分类牌组,使用几个单独学习的大类牌组即可。强迫症患者可以使用标签或字段来细分类内容,替代创建许多小分类牌组。
极简牌组结构
How long does an adault speak english fluently by english learning applications ?
I used to learn english by Duolingo.
A guide to own a long-term chatgpt account in chinese mainland
Buy an overseas mobile phone physical card
Tailand mobile phone card, AIS green card, message card, 10 THB delay validity a month, no voice and network traffic:
https://xunihao.net/product/thailand-ais
Taobao guarantee transaction, buy the “fill price difference(补差价)” product:
https://item.taobao.com/item.htm?ft=t&id=709261038665
Purchase 30 products, comment “Tailand mobile phone card, AIS green card, message card(泰国电话卡AIS绿卡短信卡)” at order form, the shopkeeper will deliver the card to you by expressage.
When you receive the card, plugin it into your 4G mobile phone, then visit the WeChat public account “Franwell弗兰威尔” to charge the card balance. At least 10 THB each charge to delay validity a month.
Notice! Delay validity a month because of a charge operate, the AIS not deduct each month. You can charge 12 times to delay a year.