My First DMCA Takedown

It’s been a while since last post, yet I haven’t been idle. As the title tells, this is a record for that first experience. Since DMCA is a US law, here I chose to write in English. I’m aware many have read my blog for just one reason: “Amazon OA 2022”. I shared quite a bit of information in that post which I consider would be useful for preparing the Amazon online assessment, and there have been some positive feedbacks....

11-25 · 3 min

我为什么开始用 Logseq

粗略估计,使用 Obsidian 也有两年了。最近试了下 Logseq,感觉很不错,说说自己的想法。 回顾过去,我是在工作后才开始注重记录的,也尝试过不少工具:有道云笔记,印象笔记,一个比较小众的软件 Leanote,甚至是实体笔记本。 过了一两年,被同事安利了 Notion(那时候小 No 还处于艰难的求生阶段),简单了解之后我觉得非常好,便开始全面使用。 到 2020 年,Roam Research 火了起来,同时炒热的还有双链、图谱等概念。建立一个高效的第二大脑相当吸引人,于是我对个人笔记的热情被再次点燃了。由于 RR 过于昂贵,我投向了 Obsidian 的怀抱,直到现在。 Before Obsidian 于我而言,Notion 之前的笔记软件基本可以归为一类,以印象笔记为代表。这类软件一般基于层级目录的结构,以分类和标签的方式聚合笔记,并配合以关键字为主的查询方式(印象笔记甚至支持搜索图片中的文字)。有段时间我一度沉迷于印象笔记推出的各类折扣。 Notion 的创新应该算是具有划时代的意义了,比如 Page 和 Block 的概念也在 Logseq 中沿用。在我的印象里,除了偶尔的网络问题,Notion 是很完美的,甚至因为功能过于复杂和强大,让我后来有些望而却步了。 With Obsidian 除了 Zettelkasten,本地存储是我切换到 Obsidian 的另外一个重要原因。Notion 对网络的依赖让我认识到本地数据的重要性,再加上云端同步,Markdown + Local files + Dropbox 成为了我的笔记标配。 可惜的是,虽然 Obsidian 非常先进、好用,但它本质上也只是个工具,错误的使用让我又走上了从入门到放弃的老路。 仔细想想,其实我一直把它当成一个加强型的 Markdown 编辑器来用。对于那些核心的 Feature,比如 Backlink,我都是默认关闭(可能是因为显示在右侧,觉得比较占地方吧),几乎没有看过;再比如 Graph view,虽然笔记积累了不少,但也没有从中产生过什么有用的联想;在多数时候,我只是输入关键词做全局查询,连标签都很少用到。 时间一长,我又失去了做笔记的热情。 With Logseq 初看 Logseq 让我觉得很有 Notion + Org-mode 的感觉(曾经试图研究过后者,最后算是弃坑了吧,不过无论 Org-mode 还是 Emacs 都非常了不起),但抛开工具本身,它的设计理念解答了我很久以来的困扰。 这里推荐 Randy 的 我是如何使用 Logseq 的 这个视频,把核心理念解释得很清楚。...

10-27 · 1 min

Python 中的异常

在 Python 中,EAFP 的风格很受青睐,这种写法能让代码更加简洁,还可以避免一些重复判断和多线程竞争的问题。为此,了解并熟练使用异常是很重要的。 异常类 首先来看一下 Python 内置的异常类(有省略): BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StopAsyncIteration +-- ArithmeticError +-- AssertionError +-- AttributeError +-- BufferError +-- EOFError +-- ImportError +-- LookupError +-- MemoryError +-- NameError +-- OSError +-- ReferenceError +-- RuntimeError +-- SyntaxError +-- SystemError +-- TypeError +-- ValueError +-- Warning BaseException 是所有异常的老祖宗,但很少会用到,通常我们只需要 Exception,比如自定义一个错误类型: # 命名习惯一般以 Error 结尾 class CustomError(Exception): def __init__(self, message, status): # 这里最好把参数都放进去,之后会统一存在 e....

09-15 · 3 min

Python Import 源码阅读

浅析一下 Python 中的 Import 机制。代码版本:3.11.0 - 4dd8219。 Module & Package Import 的对象就是各种各样的模块,即 Module。如何定义呢?官方文档这样描述: A module is a file containing Python definitions and statements. 实际上,Module 可以是 Builtin,也可以是 C extension,但最常见的存在形式还是 *.py 文件。 一个 Module 同时也可能是 Package,此时它从文件升级为目录,就可以拥有 Submodule 了。Package 分为两种: Regular package:这类 Package 必须包含一个 __init__.py 文件,代表了这个 Module(Package) 本身。 Namespace package:如果不存在 __init__.py,Python 会将其创建为此类 Package。Namespace package 的特殊之处在于同名的 Package 可以出现在多个目录下,而 Import 完成之后又可以统一使用。 不管是哪一种 Package,都会有 __path__ 属性,指向目录的路径。属性值是个列表,这对于 Namespace package 尤为重要。除此之外,一个 Module 还有: __name__:模块名称。 __file__:文件位置。 __package__:主要是为了在 Relative import 时计算起点位置。 如果是 Package 则设置为 __name__。 如果非 Package 则设置为 Parent package 的名称(Top-level 的 Module 应为空字符串)。 如果以脚本执行,那么取值为 None。 How to Import 一般情况下 Import 都是通过 import 关键字完成的,可分为两大类:...

09-10 · 6 min

游大理

来云南前只想好了去腾冲,并没有决定之后的行程,这样随性的旅行让我觉得自由。 至于其他的城市,小时候跟着家里去过大理和丽江,所以并不打算重游故地。不过,在腾冲结识的一位大叔极力推荐洱海的美景,还热情地拿出照片证明,于是我改变主意,既然不想这么快回家,大理又离得不远,就把它作为下一站吧。 落脚 大理的车站不比昆明,这本没什么,不太方便的是出来找不到厕所。一番折腾后,才在马路对面的巷子里找到了公厕。 打个车来到了预订的住处,与其说酒店,更像是高层的公寓被改造成了统一装修的房间,不过环境尚可。 住宿的位置在下关镇。后来才发现,这是个错误的决定,因为离景区太远了,更明智的选择是古城里面或周边的民宿。 地理位置大致如下(图里的大理镇就是古城): 图片来自豆瓣 - 在大理旅居的日子 简单收拾下,便去城里转了转。不得不说,这趟短行令人失望,街道两边满是小吃店,人声喧闹,让我觉得格格不入。浮躁、商业化是时隔近二十年后大理古城给我的初印象。 洱海 第二天到了下午才出门,一个重要原因是防晒。 之前在腾冲顶着大太阳走,一天下来发现小臂和鼻子都晒伤了,这才意识到云南紫外线的厉害。 虽然擦防晒很管用,但需要配合卸妆油冲洗。在网上看到还有喷雾类的产品,不知道可不可以省去这种麻烦。 前一天在京东下了单,上午便收到了,除了防晒,还买了个 U 盘。之所以买它是因为升级操作系统时不小心搞坏了 Grub,必须要 Live boot 修复。这也让我意识到作为 Linux 用户,随身携带 Live media 的重要性。 下关的风很大(大理有苍山雪,洱海月,上关花,下关风的说法),到了洱海边便风平浪静了。进入生态廊道后,有很多自行车可以租骑,路程很长,所以骑行观赏是个不错的选择。 这次的海边之行,让我真正领略到洱海之美,也动了留在大理的心思。 爸爸和女儿的对话很有爱 小哥的背影完美融合 美丽的洱海 云海笼罩的苍山 一路向前,天色渐晚,我又来到了古城。肚子有些饿,正好看到一位慈祥的老奶奶在摆摊,便决定尝尝。视频里的烤乳扇是大理特色的奶酪制品,加热烤软后再裹上玫瑰酱,甜香又有嚼头。 老人家一边做东西一边亲切地给我介绍大理的小吃,让我深深地感受到了当地人的热情。 佛乐 第三天依然过得很慵懒,虽然知道有很多美景未去,但游玩并不是我的目标。就在这天,我得到了一些期望的慰藉。 之前在豆瓣上联系了家月租的客栈,在古城内,所以下午又来到了这里。客栈的位置很好,紧挨着人民路,小间在一楼,价格便宜,800 一个月,包水电网。我对居住条件没有太高要求,所以觉得还不错,但因为无法就此留下,所以只是答应对方考虑一下。开店的是一对夫妇,大哥告诉我他们定居大理已经四年有余,给我讲了很多当地的风土人情,还说许多人来这里都是为了疗伤,有些选择离开,有些留了下来。最后聊到了饭辙,他们很少做饭,因为附近吃饭很方便,旁边有家本素拾堂,专做素食。我一听便来了兴致,正好晚饭没有着落。 大哥带我来到餐店门口,打了两句招呼,便扭头回去了。我按着看店大姐说的,拿起饭盒打了饭菜,津津有味地吃了起来。 虽然都是素菜,味道却不错。我看其中一道满是青椒,顺嘴问了句会不会很辣。有些出乎意料地,除了大姐,还有个在一旁吃饭的姑娘也加入回答我的问题,对话很是自然。这感觉很舒服,我便开了话匣子,问到店里播放的诵乐,说听得自己想哭。这好像触动了大姐,她提到很少人会有如此感觉,也许是我有缘,还建议我不妨尝试自然地让眼泪流出来。我深知自己是无法在旁人面前落泪的,连忙摆手婉拒。大姐很是理解,没再多说什么,我便自顾自地开始吃剩下的菜。 而后在城内转了转,之前的感觉犹在,仿佛心里打开了一道缺口,有些积压许久的东西缓缓流淌出来,让我在悲伤之中又有些许畅快。 大概是缘分牵引,我又回到了那个小店,打算问问住宿,其实是心里想再听听那诵经声。大姐见我回来,也没有过多诧异,我们便随意攀谈起来。说话之间又聊到了那首曲子,她说是佛乐,网上找不到,我也无意强求什么,只想再多听一会儿。大姐见状也不再打扰,为我泡了壶茶,径自收拾厨房去了。 云滇红,味道清香 这乐曲为女声吟唱,似乎只有一句,听来却不觉得枯燥。说实话,它让我感到久违的疲累,这反倒是件好事,因为我正苦于不知如何放下一些沉重的念头。不用装模作样,不用秉持信念,不用时刻准备战斗。如果能不那么执着,就像电影里说的,把手松开,是不是就可以拥有一切了。 如此一夜过去。那些反覆的杂念,无法消散的呓语,挥之不去的思绪,好像都随着昨日的乐声离去了。或许只是暂时的沉淀,未来还会再度泛起,我不能确定,但心确实有一点放空,还变得有些轻松。 最后一天要赶飞机,夜里难眠,莫名又想起了金刚经里写的: 过去心不可得,现在心不可得,未来心不可得。 好像更理解之前为什么不能放下了,总是在想,过去为何糟糕,未来会不会好。不管是否拥有,一旦想要把握,便会开始失去。心不可得,也就是心一直在变化,不会停留,就像时间一样。 如同在心流中,如果能抛下执念,做任何事情都会变得轻松和满足,也感受不到时光的流逝了。 是为合一的状态?我不知道,也许只需要,一件事一件事地去做就好了。 因为暂时没有做好留在这里的准备,所以还是要离开的。不过我想,待到时机成熟,一定要再来大理居住些日子。到时候,想要认识些有意思的人,多看看苍山雪与洱海月,再次享受这份独一无二的自由。

08-30 · 1 min