Python

共 28 篇文章。

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

• Shared Chaos

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

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

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

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

历史 Movable Type 评论迁移到了 Remark42

• Blogging

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

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

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

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

重启手工记账

• Finance

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

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

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

字谜与解码

• Life

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

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

采用了基于 isso 的评论系统

• Cheatsheets

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

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

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

把 blog 从 Movable Type 迁移到了 Hugo

• Blogging

花了些时间把 blog 从 Movable Type 迁移到了 Hugo。

说起来 Movable Type 已经用了有十七年之久了,不过 Movable Type 商业化以后便基本没有更新了,由于它是 Perl 写的,因此我也没什么动力去持续维护。

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

gmpy/离散对数

• Security

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

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

p = mpz(13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171)

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

求逆元 x−1x^{-1}:invert(x, p)。例如, y = invert(x, p) 则 (x∗y)mod  p=1(x * y) \mod p = 1

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

网址缩短服务

• Development

前一段时间帮一个朋友做了一个非常简单的网址缩短服务,已经上线运行了一段时间,这里把当时设计的一些想法分享出来,等有时间我会把代码也发布出来,程序很简单,用 web.py 做的。

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

PlanetPlanet vs Python 2.6

• Development

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.

参与评论