读书

读了 《算法》 的 1.2.3 和 1.2.4 节,这部分主要是概念性的,一直在讲封装的概念。

将数据结构(或者更多现实中的实体)抽象成类,并暴露接口出来。接口和实现分离,这样我们修改实现时也更容易一些。

同时 Java 提供了重载的特性,可以相对容易地修改接口。

Tips

  1. 今天在 python3.10 下运行一些测试,出现了错误 AttributeError: module 'collections' has no attribute 'Callable',才发现 Python 测试库 nose 已经停止维护了。以后写测试,能用 pytest 就用 pytest 吧,这是活得最久的项目了。

  2. pip 不要使用 --extra-index-url。今天安装一个私有 pypi 和 pypi.org 上同时存在的包,我的 pip 配置是

1
2
3
[global]
index-url = https://private_pypi_domain/simple
extra_index_url = https://pypi.org/simple

发现 registry 是无法控制优先级的,交换 index-url 和 extra_index_url,也会安装 pypi.org 上的包。搜了一下,找到一个相关的问题,python-pip-priority-order-with-index-url-and-extra-index-url

pypi 从设计上来说,只支持通过 包名称+版本 唯一地定位一个包,它并没有考虑过 registry 之间的优先级。

所以最终建议是,pip 客户端永远只使用一个 registry 进行安装,不要使用 --extra-index-url 选项,私有 pypi 提供 fallback 功能,当包找不到时再去 pypi.org 中查找。

  1. hugo 模板中返回当前时间
1
{{ now.Format "2006-01-02" }}

now 是一个函数,返回 time.Time 对象,然后再调用它的 Format 方法返回代表日期的字符串。

see doc in: https://gohugo.io/functions/now/