#420 林觉民:与妻书

2020-08-25

全文

意映卿卿如晤:吾今以此书与汝永别矣!吾作此书时,尚是世中一人;汝看此书时,吾已成为阴间一鬼。吾作此书,泪珠和笔墨齐下,不能竟书而欲搁笔,又恐汝不察吾衷,谓吾忍舍汝而死,谓吾不知汝之不欲吾死也,故遂忍悲为汝言之。

吾至爱汝,即此爱汝一念,使吾勇于就死也。吾自遇汝以来,常愿天下有情人都成眷属;然遍地腥云,满街狼犬,称心快意,几家能彀?司马青衫,吾不能学太上之忘情也。语云:仁者 “老吾老,以及人之老;幼吾幼,以及人之幼”。吾充吾爱汝之心,助天下人爱其所爱,所以敢先汝而死,不顾汝也。汝体吾此心,于啼泣之余,亦以天下人为念,当亦乐牺牲吾身与汝身之福利,为天下人谋永福也。汝其勿悲!

汝忆否?四五年前某夕,吾尝语曰:“与使吾先死也,无宁汝先我而死。”汝初闻言而怒,后经吾婉解,虽不谓吾言为是,而亦无词相答。吾之意盖谓以汝之弱,必不能禁失吾之悲,吾先死,留苦与汝,吾心不忍,故宁请汝先死,吾担悲也。嗟夫!谁知吾卒先汝而死乎?

吾真真不能忘汝也!回忆后街之屋,入门穿廊,过前后厅,又三四折,有小厅,厅旁一室,为吾与汝双栖之所。初婚三四个月,适冬之望日前后,窗外疏梅筛月影,依稀掩映;吾与并肩携手,低低切切,何事不语?何情不诉?及今思之,空余泪痕。又回忆六七年前,吾之逃家复归也,汝泣告我:“望今后有远行,必以告妾,妾愿随君行。”吾亦既许汝矣。前十余日回家,即欲乘便以此行之事语汝,及与汝相对,又不能启口,且以汝之有身也,更恐不胜悲,故惟日日呼酒买醉。嗟夫!当时余心之悲,盖不能以寸管形容之。

吾诚愿与汝相守以死,第以今日事势观之,天灾可以死,盗贼可以死,瓜分之日可以死,奸官污吏虐民可以死,吾辈处今日之中国,国中无地无时不可以死。到那时使吾眼睁睁看汝死,或使汝眼睁睁看吾死,吾能之乎?抑汝能之乎?即可不死,而离散不相见,徒使两地眼成穿而骨化石,试问古来几曾见破镜能重圆?则较死为苦也,将奈之何?今日吾与汝幸双健。天下人不当死而死与不愿离而离者,不可数计,钟情如我辈者,能忍之乎?此吾所以敢率性就死不顾汝也。吾今死无余憾,国事成不成自有同志者在。依新已五岁,转眼成人,汝其善抚之,使之肖我。汝腹中之物,吾疑其女也,女必像汝,吾心甚慰。或又是男,则亦教其以父志为志,则吾死后尚有二意洞在也。幸甚,幸甚!吾家后日当甚贫,贫无所苦,清静过日而已。

吾今与汝无言矣。吾居九泉之下遥闻汝哭声,当哭相和也。吾平日不信有鬼,今则又望其真有。今是人又言心电感应有道,吾亦望其言是实,则吾之死,吾灵尚依依旁汝也,汝不必以无侣悲。

吾平生未尝以吾所志语汝,是吾不是处;然语之,又恐汝日日为吾担忧。吾牺牲百死而不辞,而使汝担忧,的的非吾所忍。吾爱汝至,所以为汝谋者惟恐未尽。汝幸而偶我,又何不幸而生今日中国!吾幸而得汝,又何不幸而生今日之中国!卒不忍独善其身。嗟夫!巾短情长,所未尽者,尚有万千,汝可以模拟得之。吾今不能见汝矣!汝不能舍吾,其时时于梦中得我乎?一恸。

辛未三月廿六夜四鼓,意洞手书。

家中诸母皆通文,有不解处,望请其指教,当尽吾意为幸。

相关信息

林觉民(1886年—1911年),字意洞,号抖飞,又号天外生。
福建闽县人。
十四岁进福建高等学堂,1907年日本留学,入庆应大学文科攻读哲学,后参加同盟会,从事革命活动。
1911年回国参加广州起义,4月27日,与方声洞等领先袭击总督衙门,负伤被捕,数日后从容就义。为黄花岗七十二烈士之一。

 

1911年5月3日(清宣统三年五月二日),林觉民在广州天字码头被枪杀,年仅24岁。

 

1911年,林觉民受同盟会第十四支部派遣回闽,联络革命党人,筹集经费,招募志士赴广州参加起义。
他依依不舍地告别家人,率第一批义士从马尾港上船赴香港。
广州起义(又称黄花岗起义)的前三天,即4月24日,林觉民与战友在香港滨江楼同宿。
待战友们入睡后,他想到自己的弱妻稚子,他和妻子的婚姻虽然是父母包办,但两人感情深厚、琴瑟和鸣。
对于即将到来的生死未卜,林觉民在一块白方巾上给妻子陈意映写下这封最后的家书。
在写《与妻书》的同时,林觉民还给他叔父林孝颖先生写了一封不到40字的信。
起义失败后,有人秘密将这两封信在半夜里塞进林觉民家门缝里,第二天清晨家人才发现这两封信。

林觉民的养父林孝颍是晚清名士。
写给叔父的信又被称之为《禀父书》:

不孝儿觉民叩禀:父亲大人,儿死矣,惟累大人吃苦,弟妹缺衣食耳。然大有补于全国同胞也。大罪乞恕之。

陈意映(1891—1913)比林觉民小 5 岁。

林觉民牺牲后,陈意映无法承受丧夫之痛的沉重打击,一度意欲轻生。在林觉民的父母跪求下,她才强忍悲伤、痛苦地活下来,但终因悲伤过度,在1913年病逝,年仅22岁。

其他:

  1. 北洋时期的政治家林长民是林觉民的堂兄。
    著名才女林徽因就是林长民的女儿。
  2. 林觉民有二子一女,长子林依新夭折,次子林仲新(1911-1983),女儿林暖苏(1908-2001)。
    1959 年,林仲新捐赠 “与妻书” 给福建博物馆

影视作品

  1. 百年情书》 台湾演员王柏杰
  2. 辛亥革命》 胡歌

参考资料与拓展阅读

#416 转载:五种常见的 PHP 设计模式

2020-08-06

注:这是我在很久以前收藏的一篇文章,来自 IBM Developer,整理资料的时候被翻出来,贴出来算了。
设计模式只是为 Java™ 架构师准备的 —— 至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非常有用?本文解释了这些问题。

#415 转载:邮件的 Return-Path 头是什么

2020-07-31

We can all agree that email communication is essential for successful businesses. However, for your emails to be successful and produce conversions, they have to land in the inbox. 
我们都同意电子邮件通信对于成功的企业至关重要。但是,要使您的电子邮件成功并产生转化,它们必须进入收件箱。

But what happens when emails don’t make it to the inbox? Where do they go when they bounce? How are they processed?
但是,当电子邮件没有进入收件箱时会发生什么?当它们反弹时,它们会去哪里?它们是如何处理的?

Enter return-path.
使用 Return-Path 。

Return-path is a hidden email header that indicates where and how bounced emails will be processed. This header, also referred to as a bounce address or reverse path, is an SMTP address that is separate from your original sending address, and is used specifically for collecting and processing bounced messages.
Return-Path 是一个隐藏的电子邮件标头,指示处理退回电子邮件的位置和方式。此标头(也称为退回地址或反向路径)是独立于原始发送地址的 SMTP 地址,专门用于收集和处理退回的邮件。

Having a clear return-path system in place is incredibly important for your email program. It acts as a safeguard, protecting senders by providing a separate location for processing bounced emails. Your original sending inbox isn’t crowded by those “failed delivery” emails and that bounced messages are kept organized and together. Having a clear, organized return-path for bounced messages can also help your email deliverability and maintain your sending reputation.
拥有清晰的 Return-Path 系统对于您的电子邮件程序非常重要。它作为一种保护措施,通过提供单独的位置来处理退回的电子邮件来保护发件人。您的原始发送收件箱不会被那些“传递失败”的电子邮件所拥挤,并且退回的邮件保持井井有条并在一起。为退回的邮件提供清晰、有组织的 Return-Path 还有助于您的电子邮件送达率并保持您的发送声誉。

Why is return-path important?(为什么 Return-Path 很重要?)

Return-path is an important tool to have at your disposal, especially for mass email sends. Let’s say you’re sending an email blast about an offer your company is promoting to your entire email list. While we don’t want to see bounced emails, the reality is that messages can and do bounce for a variety of reasons. 
Return-Path 是您可以使用的重要工具,尤其是对于群发电子邮件。假设您正在向整个电子邮件列表发送一封关于您的公司正在推广的优惠的电子邮件爆炸。虽然我们不希望看到退回的电子邮件,但现实情况是,由于各种原因,邮件可以并且确实会退回。

When you’re sending to large groups, you can get tens, maybe even hundreds of bounced messages depending on the size and nature of your campaign. These “failed delivery” messages then come back to haunt and crowd your original sending inbox. Instead, by having an established return-path, those messages are processed and stored separately in their own specified inbox.
当您向大型群组发送邮件时,您可能会收到数十甚至数百封退回的邮件,具体取决于广告系列的规模和性质。然后,这些“传递失败”消息会再次困扰并挤占您原来的发送收件箱。相反,通过建立 Return-Path ,这些邮件将单独处理并存储在其自己指定的收件箱中。

Return-path also helps with your deliverability and sending reputation by helping to validate your identity as a sender (i.e. whether or not you’re sending spam). Because return-path is a SMTP address, it can be used by servers and inbox providers to decide how or if they want to filter your messages. Having a properly set-up return-path can help provide credibility for your messages and subsequently you, the sender, which in turn boosts your sending reputation.
Return-Path 还有助于验证您作为发件人的身份(即您是否发送垃圾邮件),从而帮助您提高送达率和发送信誉。由于 Return-Path 是 SMTP 地址,因此服务器和收件箱提供商可以使用它来决定如何或是否要过滤您的邮件。正确设置 Return-Path 有助于为您的消息提供可信度,进而为您(发件人)提供可信度,从而提高您的发送声誉。

How return-path works(Return-Path 的工作原理)

Return-path works by directing where bounced messages should go when they cannot be delivered. It is usually set up by a developer or email platform provider, but can be customized using the Domain Authentication doc in our Knowledge Center
Return-Path 的工作原理是指示退回的邮件在无法传递时应去哪里。它通常由开发人员或电子邮件平台提供商设置,但可以使用 我们知识中心的域身份验证文档进行自定义。

When a server or inbox provider receives your message, they validate your identity as a sender as well as your sending reputation before pushing you through to your intended recipients’ inboxes. 
当服务器或收件箱提供商收到您的邮件时,他们会验证您作为发件人的身份以及您的发送信誉,然后再将您推送到目标收件人的收件箱。

In this validation process, DMARC and return-path work together to get you through these filters. DMARC examines your message to confirm that the domain provided in the “sent from” field matches the domain provided in the return-path field, which helps to validate your identity as a sender. Once these domains have been confirmed and matched by DMARC, you’ll have an easier time getting through filters set by servers and inbox providers.
在此验证过程中,DMARC 和 Return-Path 协同工作,帮助您通过这些过滤器。DMARC 会检查您的邮件,以确认“发件人”字段中提供的域与 Return-Path 字段中提供的域匹配,这有助于验证您作为发件人的身份。一旦DMARC确认并匹配了这些域名,您就可以更轻松地通过服务器和收件箱提供商设置的过滤器。

There are two types of bounced emails: hard bounces and soft bounces. Hard bounces occur when there are permanent issues with a recipient, including an invalid email address or typo in your mailing list. Soft bounces are more temporary and usually occur when there’s a problem with a recipient’s inbox, including file size or attachments issues or the possibility of a recipient having a full inbox. 
退回电子邮件有两种类型:硬退回邮件和软退回邮件。当收件人存在永久性问题(包括邮件列表中的电子邮件地址无效或拼写错误)时,就会发生硬退回。软退回邮件是临时性的,通常在收件人的收件箱出现问题时发生,包括文件大小或附件问题,或者收件人的收件箱可能已满。

When a message hard bounces, the general best practice is to check that there are no typos in the recipient’s address. If there are none, you should remove the address from your mailing list. Keeping email addresses that hard bounce can damage your reputation as a sender and affect your deliverability in the long run. 
当邮件被硬退回时,一般的最佳做法是检查收件人的地址中是否有拼写错误。如果没有,您应该从邮件列表中删除该地址。保留硬退回的电子邮件地址可能会损害您作为发件人的声誉,并从长远来看影响您的送达率。

When an email soft bounces, you have a little bit more wiggle room than with a hard bounce. Email addresses that soft bounce can be kept in your mailing list for future campaigns, but you’ll want to watch them to see if they bounce again. If they continue to bounce, they should be removed from your mailing list.
当电子邮件软退回时,与硬退回相比,您有更多的回旋余地。软退回的电子邮件地址可以保留在您的邮件列表中,以备将来的广告系列使用,但您需要观察它们,看看它们是否会再次退回。如果它们继续反弹,则应将其从您的邮件列表中删除。

#413 高效搜索日志

2020-07-22

即便上了 ELK,也不可能所有日志往里面塞,搜日志是程序员的日常工作之一。

grep log by time efficiently 为关键词搜到 SO 上的这个问题: What is the most efficient way to extract logs between two time stamps?

要求:

  1. 能够过滤出指定时间段日志
  2. 效率,保证即便是大日志也不至于等太久,减少对服务的不良影响

提问的人自己提出来的方案:

grep -a -A 1000000 "03/09" fileName.txt | grep -a -B 1000000 "03/10"

他认为不好,因为有点慢,而且有时会漏掉一些日志。
漏掉日志可能和他的日志格式有关,这倒应该问题不大,主要是这个方案看起来就确实效率不行。
PS:如果不用模式匹配,可以加上 -F,应该可以提高效率。

# 2020/07/22 10:00:00,100 INFO [main] com.example.LoggingApplication - Starting Application
awk '$2>="16:30:00"{s=1} s; $2>="17:00:00"{exit}' event.log

这个看起来很牛逼,主要是有一个 exit

#412 Shell 转义

2020-07-21

这篇文章不是要记录那些乱七八糟的转义规则,而是讲怎么借助工具避开它。

GitHub 上偶然看到一个仓库 chrissimpkins/shellescape,做了些实验之后,发现非常好用。
别看就几行代码,真的感觉世界都清静了。
PS:代码我没细看,人生短暂,我不想去记这些没用的知识点。

import re

_find_unsafe = re.compile(r'[^\w@%+=:,./-]').search

def quote(s):
    if not s:
        return "''"
    if _find_unsafe(s) is None:
        return s
    return "'" + s.replace("'", "'\"'\"'") + "'"

示例:

commands = """
grep -F '"userId": "1"' /tmp/test.log
grep 'aaa.bbb.$100.*' /tmp/test.log
""".strip().splitlines()
for command in commands:
    print(quote(command))

#411 Shell 小技巧

2020-07-20

快速输入上一行命令的最后一个参数

touch nihao.txt
code !$

创建目录并进入

take xxx # oh-my-zsh

mkdir xxx && cd $_

重命名

for i in {0..100}; do touch aaa_bbb_$i.jpg; done
rename 's/_bbb//' aaa_*.jpg

# for zsh
autoload zmv
zmv -n '(*)_(*).jpg' '$2_$1.jpg'