桔子树又回黄转绿了

自从上次注意到后院的桔子树已经奄奄一息,我下定决心行动起来,拯救这棵树。毕竟这棵树是后院的重要成员,既为我们提供树荫,又为我们提供水果。我花了大量的时间清理树根下的垃圾、每天给它浇水,爬上爬下的修剪树枝,终于桔子树开始回黄转绿,老树发新枝了。特别是今年春天,这棵树的花期特别长,很长一段时间,每天早上起来都能够闻到桔树开花的淡淡香味,心里真是很开心。 树木葱葱郁郁 新生的绿叶真亮 桔花

Gmail Thread: Archive, Mute or Snooze?

公司里面最招人烦的一类邮件就是某人宣布一个什么事情,然后一大堆人轮番跑出来祝贺。每次看到有未读邮件的提醒,然后跑去一看结果是这类邮件,就会让人心头不忿:又白白浪费了自己的时间。 最近终于明白Gmail原来的“Mute”功能还在,只不过藏在了下拉菜单里。Mute 一个 Gmail Thread 以后,这个邮件就再也不会出现在 Inbox 里面了。如果 Mute 一个东西觉得太武断的话,Gmail 还提供了一个高级功能 “Snooze”,这个功能只是 Mute 一个邮件一段时间,只有等设定的时间(比如8小时后,或者下周一)过了以后,这个邮件才会重新出现在 Inbox里面。与 “Mute” 和 “Snooze”相比,最弱的功能就是 “Archive”,它把当前的 Gmail Thread 移出 Inbox,但是一旦这个 Thread 上有新消息,就会重新会到 Inbox。 啊,在垃圾邮件满天飞的情况下,“Mute”应该是最常用的功能了,为什么要把它藏起来呢?

《One, Two, Three, Infinity》读完了

《One, Two, Three, Infinity》这本科普著作是久闻大名了,疫情期间终于挤时间把它看完了,作者真是知识广博,想象大胆,文笔和插图也都非常好。看完以后有很多感想: 数学只是工具,物理才是世界的终极知识。四维空间里的时间说是负的就是负的,数学上看着很奇怪,但是物理实践就是如此。 统计学实在是太重要了,没有这方面的基础,根本不可能从微观的知识(原子、原子核)构建出宏观现象(热运动,固体,星系起源)的理论。 现代的物理理论虽然玄妙,但是都是一步步建立在坚实的实验证据上,就像地球是圆的,虽然违反人类数千年的直觉,但终于为坚固的事实所证明,并成为人类直觉的一部分。 自己以前觉得量子力学不可理解,现在反而觉得量子力学很正常,而对于把在宏观机械世界里得来的一些直觉经验推广到微观世界反而觉得靠不住了。 数学家和物理学家都是聪明人,即使不能和他们比肩,能够沿着他们的足迹领略大自然的风光,也是很美好的事情呀。

品葱和知乎

自己以前常常上知乎,觉得上面的有些话题回答很有深度。最近又阴差阳错发现了一个叫作品葱的网站,上面是主要是针对大陆目前政治形势不满而吐槽的人。在这两个地方花了相当多的时间之后,自己却开始渐渐不喜欢这两个网站了,最主要的原因如下: 知乎现在带节奏的话题层次实在是越来越低了,几乎是秀优越感的竞技场,诸如《有一个富二代的女朋友是什么感觉》这类问题除了给网站带来流量以外,纯粹是浪费所有人的时间。很多有意思的话题中某些人的回答也充满了优越感,一副睥睨天下舍我其谁的态度,只不过暴露了自己的浅薄无知罢了。 很多讨论缺乏对其他人的尊重。这一点我在品葱感受更深。即使大陆的政治体制有其落后之处,但是大陆的老百姓还是有自己的生存权。动辄就谈论《大陆这一代的年轻人是不是生存没有意义》这类随便决定别人生死的问题,让人对于提起话题和参与讨论的人自身的素质无语。 贝多芬说:“… 除了仁慈,我不承认还有其他优越的标记…”,我深以为然。一个小小的论坛,最多也就是大家交友聚会,分享知识的平台罢了,并不值得当做炫耀身份的小圈子。这样把自己搞的四不像,何苦来呢?

递归和循环(Recursive and Loop)

很久以前我就知道循环可以用递归来表达,但是在实践中我几乎从来没有这么做过。所有的编程语言都支持循环语句,为什么还要用更难懂的递归呢?直到最近我才遇到了一个不得不用递归来表达的例子。 在分配问题中,为了验证算法的正确性,我写了一个程序。这个程序先生成所有可能的分配方案,然后再按照特定的条件来过滤不合法的方案,最后计算剩下的方案总数。比如要把 本书发给 个人,可能的分配方案就是 种。怎么具体的生成这些备选的分配方案呢?最简单的办法就是使用一个多重循环,比如把10本书分给4个人,我们可以写: class Solution: def __init__(self, num_groups): # Groups in the solution. self.groups = [] for _ in range(num_groups): self.groups.append([]) # This implementation fixed the number of objects # (a.k.a. levels of the loop) # and is not useful in this program. def CreateCandidateSolutionsByLoop(): objects = list(range(10)) num_groups = 4 solutions = […]