Python
【公告】关于 woodpecker.org.cn 网站已经停止维护的说明
转载自 khsing 今天在 python-cn 发表的公告。
我本人早年也曾经参与过啄木鸟社区的维护,在此特别声明,我与现在的这个 woodpecker.org.cn 没有任何关系。
除此之外,本人之前在啄木鸟社区发表的内容采用的是 CC BY-NC-SA 1.0 许可,从未授权商业使用, 本人保留在法律许可范围内向目前域名的所有者,以及在美国境内为其提供网络服务的供应商进行追索的权力。
阅读全文…历史 Movable Type 评论迁移到了 Remark42
上回书 说到留言板的问题时提到留言板当时没有解决, 在文内的模板中可以看到我当时是采用了一种非常对付的方法: 直接将之前的评论直接作为文章内容输出出来。这导致了页面不太美观。
趁着周末我把之前 Movable Type 的数据库重新捋了一下,把其中的 2256 条留言用类似 isso 迁移时的方法转换成了 json,然后就可以在 remark42 中导入了。 中国有句俗话叫三搬一火,意思是搬三次家大约等于失一次火, 这次留言内容搬家我也丢掉了一些东西:Remark42 的一项设计理念便是尽量不保存可以追踪用户的数据,例如用户的 E-mail 在 Remark42 中只会保存一个与之对应的 SHA1,对于网站的主人来说, 这意味着他们不能直接从这些保存的数据中获得用户的 E-mail 地址(当然, 实际情况中,这类单向函数并不能阻止他们在知道这些信息的情况下验证某个 SHA1 是不是某个 E-mail 地址,但总归这要比把数据存在数据库里安全得多), 因此这个迁移过程也就意味着所有相关的明文数据消失了。除此之外,Movable Type 还保存了许多类似于用户网站地址这样的信息,我在转换时考虑了一下,由于许多人的网站都已经不在了, 迁移的意义不太大,因此最终决定不迁移这些数据了。
考虑到现在还在用 Movable Type 的人应该已经没有几个了, 我感觉我的方法可能对其他人没有太大的参考意义,这里只是简单做个记录。 代码写的比较乱,就不拿出来丢人了。
阅读全文…重启手工记账
上回用 beancount 来手工记账是 2018 年的事,当时想要这么做的原因是贵厂的 Waze Carpool 项目当时并没有提供非常方便理解的记账系统,因此结合每月的对账单和 Waze 记录的数据来统计一下相关的数据,同时也把手中的现金一类没有对账单的小额资金给管起来。 后来又逐渐加入了一些其他的类似 PayPal 之类的付款记录,但是随着疫情的发展,到 2020 年初的时候已经不再有新的记录,慢慢也就把记账的事情给搁置下来了。
今年出于计算个税的需要,我又重新开始了记账。最初的想法是只把工资单的自动导入做好, 但后来想到既然 #来都来了 索性就把相关的解析全都做了好了。
阅读全文…字谜与解码
最近一段时间 Twitter 上开始流行了一个字谜游戏 Wordle, 与此同时也出现了许多与之类似的游戏比如 拼音猜成语 等等。 基本上,这类游戏要求玩家根据一些有限的信息(目前的这些实现通常是会告诉他们是否有字母猜对了,或是字母存在但位置不对等等) 来推测可能的结论。
阅读全文…采用了基于 isso 的评论系统
上回书 说到从 Movable Type 搬到 Hugo 上之后, 就彻底失去了评论和 pingback 的功能。 因为现时正经写 blog 的人已经越来越少, 因此 pingback 似乎意义不太大了,但是能够收集评论反馈还是有一些意义的。
早前,Movable Type 实现的评论系统与其自身的账户系统有集成,并且还支持包括 Facebook、 Google 在内的一系列其他 OpenID 的系统。这个功能的一个好处是对于经常访问的人来说比较友好, 例如站主可以将某个 ID 设置为受信任的 ID,从而避免先审后发。
阅读全文…把 blog 从 Movable Type 迁移到了 Hugo
花了些时间把 blog 从 Movable Type 迁移到了 Hugo。
说起来 Movable Type 已经用了有十七年之久了,不过 Movable Type 商业化以后便基本没有更新了, 由于它是 Perl 写的,因此我也没什么动力去持续维护。
阅读全文…gmpy/离散对数
前几天做一个解离散对数的题用到了 gmpy,它是 GMP 的 Python 封装,用来算大数。
这里记两笔。首先是大整数需要用 mpz 对象,例如:
p = mpz(13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171)判断大数是否是质数:is_prime(p) (求离散对数其实用不着)
求逆元 :invert(x, p)。例如, y = invert(x, p) 则
PlanetPlanet vs Python 2.6
On Python 2.6 we have a new ‘hashlib’ module, which superseded older ‘md5’ ‘sha1’ modules.
Therefore, importing ‘md5’ would give the following warnings:
DeprecationWarning: the md5 module is deprecated; use hashlib instead
This is quite annoying if you run PlanetPlanet in a cron(8) job and receive e-mail reports. In order to solve that, we can do some simple sed(1) replace over PlanetPlanet’s __init__.py:
s/import md5/import hashlib/g
s/md5\.new/hashlib.md5/g
That’s it! And PlanetPlanet will now happily work with Python 2.6.
参与评论该写点什么了
有人给我写信说我的blog快要长草了。随便写点吧。
今天是五一RSS认知日,A董发来了一个有意思的活动,我也贴一下:
http://rssday.org/ 当时的题图是 http://rssday.org/banners/rssday125.gif。 2021年1月31日发现该网站已在历史的漩涡中消失了。
阅读全文…Python的浮点数 __str__ 方法的小问题
今天 康神 发现一个浮点数的问题,一个 class 里面有两个浮点(double) 成员 x、y,然后用 return (self.x, self.y).__str__() 返回时,发现输出是 (39.210279999999997, 116.34528) 而不是希望的 (116.345280, 39.210280)。
查了一下,改成 return “(%f, %f)” % (self.x, self.y) 解决。C里面printf的 %f 默认显示小数点后面6位,但是 __str__ 似乎自己对于浮点数精度有些想法?没看 Python 具体的实现。
参与评论