一个简单的 Telegram Bot 开发实践

Acknowledge A huge thank to @BennyThink . He helps me solved a lot of problems. https://blog.nfz.moe/archives/how-to-write-beautiful-github-readme.html https://github.com/BennyThink/ExpressBot http://drakeet.me/create-telegram-bot-with-python/ https://www.stackoverflow.com Thanks for those experts. https://www.liaoxuefeng.com Thanks for his tutorials. Very useful for green hands. https://github.com/eternnoir/pyTelegramBotAPI Thanks for dependencies. https://github.com/coderfox/Kuaidi100API Thanks for dependencies. https://fast.v2ex.com/member/showfom and his https://ip.sb https://sm.ms https://u.nu https://core.telegram.org/bots/api Start up from Lifehacker Originally, when I... » read more

Systemd-nSpawn 容器初体验 – Arch Inside Ubuntu

Reference 放在最前,权威参考毕竟更实在: https://wiki.archlinux.org/index.php/Systemd-nspawn https://blog.felixc.at/2019/04/nspawn-org-simple-container-for-systemd-distributions/ https://gist.github.com/artizirk/0d800be97bcdb35fb7bfd9755208e0e8 https://github.com/systemd/systemd/issues/1968 慎重使用: http://www.jinbuguo.com/systemd/systemd-nspawn.html 写在最前 受这篇 为实验室建立公用 GPU 服务器 的启发,加之最近 Arch 群里开始掀起一股推广 底裤d-nSpawn 容器(2017 年就开始开发了耶) 的热潮,配合上我对 Ubuntu 16.04 (迫于应用环境,无法升级)的 Canonical 魔改的厌恶 Ubuntu 你尽管用,内部不错算我输.jpg ,和 OpenVAS 9 老旧、各种玄学 Bug 的问题。我尝试在 Ubuntu 16.04 上开启 systemd-nspawn 容器启用 Arch Linux 进行错误查找。因而有了这篇文章。 环境说明 Systemd 229, Linux Kernel 4.4.0-146, Ubuntu 16.04.6 LTS, Xen 虚拟化架构的 Huawei Fusion-Compute-Based VM... » read more

在 Debian 8 上给 SSH 添加两步认证机制

Preparation Debian-based system Two conneced SSH sessions at the same machine to prevent from failure** This machine should have a configured publickey auth method. ** A Phone with 2FA app installed (recommend Authy) A safe place to save recovery code Usage Installation Configuration of Authenticator Follow the screen notification to input and save your recovery... » read more

Python 3 中对递归函数及其经典示例的思考

递归 与 尾递归 递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。 递归算法的应用 递归算法,在很大程度上减少了代码量,尽可能减少了使用循环时重复判定带来的逻辑不清与出现错误的可能性,可以帮助程序员更专注于思维和程序功能的实验,而并非冗杂的语法逻辑转换。尾递归则在递归算法的基础上进一步优化,在返回时不再涉及运算式,尽可能能地调用原函数代码,利用这个特性,可以提高堆栈利用率,减少出现堆栈溢出的可能。 以Python3为例,下同,我们定义一个阶乘函数。 当你输入fact1(100)可能不会有差别,然而当你输入fact1(998)的时候,你就会得到下面的提示(Python本身的限制是1000,这个溢出的界限取决于机器,我的服务器就可以执行fact1(999),我的笔记本就不行): 实际上,我们可以通过写成尾递归的形式对其进行优化: 解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。 尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 上面的fact(n)函数由于return n * fact(n – 1)引入了乘法表达式,所以就不是尾递归了。要改成尾递归方式,需要多一点代码,主要是要把每一步的乘积传入到递归函数中。 然而,不幸的是,仅有少部分高级语言的解释器对尾递归进行了优化,对于Python3和绝大多数语言解释器而言,尾递归是没有任何优化的。 尽管如此,为了使你的代码具有更高的资源利用率,我还是建议你写成尾递归的形式。

Hexo 与 Travis CI 的八字不合

第一次查错 最近的 Travis CI Status Page 显示所有 sudo:required 的 build 均统一出现异常,没有太过在意。 联系 Travis CI 客服之后客服让我把 sudo:required 去掉,以便重新把我的 build 引流到 container-based 的另一个基础设施上。 后面短时间内的几个 build 均正常,可过了一段时间之后又回到了前面提到的状况当中。 第二次查错 客服的反馈是可能是环境变量和 npm 包的安装问题,建议我自查之后尝试把安装 hexo-cli 的参数从 -g --save 变成 --save 或 空。 查询 Hexo 官网 之后得知不能去掉 -g,尝试去掉或按照客服建议均无法成功,提示 bash: hexo not found. 继续邮件反馈给客服,3 天后收到了回信。 第三次查错 这一次回复的客服从 Customer Service Specialist 变成了 Travis Builder。她尝试... » read more

Git 进阶用法

Git PR Specific Single Commit $ git fetch –all $ git checkout -b my-single-change upstream/master $ git cherry-pick b50b2e7 $ git push -u origin my-single-change Git Single Commit Patch git checkout git format-patch -1 HEAD > ./ patch -p1 < ./ Git Merge Conflict Solve https://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git http://www.cnblogs.com/sinojelly/archive/2011/08/07/2130172.html