Python

【公告】关于 woodpecker.org.cn 网站已经停止维护的说明

(最后修改: Shared Chaos #Woodpecker #Community #Announcement

转载自 khsing 今天在 python-cn 发表的公告。

我本人早年也曾经参与过啄木鸟社区的维护,在此特别声明,我与现在的这个 woodpecker.org.cn 没有任何关系。

除此之外,本人之前在啄木鸟社区发表的内容采用的是 CC BY-NC-SA 1.0 许可,从未授权商业使用, 本人保留在法律许可范围内向目前域名的所有者,以及在美国境内为其提供网络服务的供应商进行追索的权力。

阅读全文… ( 本文约 539 字,阅读大致需要 2 分钟 )

历史 Movable Type 评论迁移到了 Remark42

(最后修改: Blogging #remark42 #Movable Type #Migration

上回书 说到留言板的问题时提到留言板当时没有解决, 在文内的模板中可以看到我当时是采用了一种非常对付的方法: 直接将之前的评论直接作为文章内容输出出来。这导致了页面不太美观。

趁着周末我把之前 Movable Type 的数据库重新捋了一下,把其中的 2256 条留言用类似 isso 迁移时的方法转换成了 json,然后就可以在 remark42 中导入了。 中国有句俗话叫三搬一火,意思是搬三次家大约等于失一次火, 这次留言内容搬家我也丢掉了一些东西:Remark42 的一项设计理念便是尽量不保存可以追踪用户的数据,例如用户的 E-mail 在 Remark42 中只会保存一个与之对应的 SHA1,对于网站的主人来说, 这意味着他们不能直接从这些保存的数据中获得用户的 E-mail 地址(当然, 实际情况中,这类单向函数并不能阻止他们在知道这些信息的情况下验证某个 SHA1 是不是某个 E-mail 地址,但总归这要比把数据存在数据库里安全得多), 因此这个迁移过程也就意味着所有相关的明文数据消失了。除此之外,Movable Type 还保存了许多类似于用户网站地址这样的信息,我在转换时考虑了一下,由于许多人的网站都已经不在了, 迁移的意义不太大,因此最终决定不迁移这些数据了。

考虑到现在还在用 Movable Type 的人应该已经没有几个了, 我感觉我的方法可能对其他人没有太大的参考意义,这里只是简单做个记录。 代码写的比较乱,就不拿出来丢人了。

阅读全文… ( 本文约 1522 字,阅读大致需要 4 分钟 )

重启手工记账

(最后修改: Life Finance #Beancount #理财 #Accounting

上回用 beancount 来手工记账是 2018 年的事,当时想要这么做的原因是贵厂的 Waze Carpool 项目当时并没有提供非常方便理解的记账系统,因此结合每月的对账单和 Waze 记录的数据来统计一下相关的数据,同时也把手中的现金一类没有对账单的小额资金给管起来。 后来又逐渐加入了一些其他的类似 PayPal 之类的付款记录,但是随着疫情的发展,到 2020 年初的时候已经不再有新的记录,慢慢也就把记账的事情给搁置下来了。

今年出于计算个税的需要,我又重新开始了记账。最初的想法是只把工资单的自动导入做好, 但后来想到既然 #来都来了 索性就把相关的解析全都做了好了。

阅读全文… ( 本文约 1342 字,阅读大致需要 3 分钟 )

字谜与解码

(最后修改: Life #wordle #decoding #Mojibake

最近一段时间 Twitter 上开始流行了一个字谜游戏 Wordle, 与此同时也出现了许多与之类似的游戏比如 拼音猜成语 等等。 基本上,这类游戏要求玩家根据一些有限的信息(目前的这些实现通常是会告诉他们是否有字母猜对了,或是字母存在但位置不对等等) 来推测可能的结论。

阅读全文… ( 本文约 1051 字,阅读大致需要 3 分钟 )

采用了基于 isso 的评论系统

(最后修改: Cheatsheets #isso #Hugo #Cheatsheet

上回书 说到从 Movable Type 搬到 Hugo 上之后, 就彻底失去了评论和 pingback 的功能。 因为现时正经写 blog 的人已经越来越少, 因此 pingback 似乎意义不太大了,但是能够收集评论反馈还是有一些意义的。

早前,Movable Type 实现的评论系统与其自身的账户系统有集成,并且还支持包括 Facebook、 Google 在内的一系列其他 OpenID 的系统。这个功能的一个好处是对于经常访问的人来说比较友好, 例如站主可以将某个 ID 设置为受信任的 ID,从而避免先审后发。

阅读全文… ( 本文约 1073 字,阅读大致需要 3 分钟 )

gmpy/离散对数

(最后修改: Security #gmpy #Python #discrete logarithm

前几天做一个解离散对数的题用到了 gmpy,它是 GMP 的 Python 封装,用来算大数。

这里记两笔。首先是大整数需要用 mpz 对象,例如:

p = mpz(13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171)

判断大数是否是质数:is_prime(p) (求离散对数其实用不着)

求逆元 x1x^{-1}invert(x, p)。例如, y = invert(x, p)(xy)modp=1(x * y) \mod p = 1

阅读全文… ( 本文约 690 字,阅读大致需要 2 分钟 )

PlanetPlanet vs Python 2.6

(最后修改: Development #compatiblity #feed parser #PlanetPlanet

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.

参与评论

Python的浮点数 __str__ 方法的小问题

(最后修改: Development #double precision #FreeBSD #Python

今天 康神 发现一个浮点数的问题,一个 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 具体的实现。

参与评论