Qua

Reader

A list of all postings of all blogs on Qua where the author has configured the blog to publish on this page.

from 女狱花

#女狱花

话说沙雪梅、张柳娟、仇兰芷、吕中杰、施如曌、岳月君,六个女将,日夜组织革命的方法。未知能革得成否?这个问题,是看官急欲知道的。但革命成败的时候,在雪梅诸人,用尽脑血、心血、颈血的数年之后。而此数年间,尤有紧要的事呢。今故将雪梅诸人,按下不讲。

且说许平权那夜与雪梅口战后,次日起来看雪梅,则见房门双双关闭。叫他几声,也不答应,知他尚是睡着。心内想道:“前日我有信与文洞仁,约定后日到他家内相会。若此刻不动身,决要失约了。且我会过了他,还要赶紧出洋去呢。这个沙雪梅的人品,虽是矫矫不群、令人爱慕,但话语昨日也说完了,今朝不会他也不妨。”主意已定,即收拾物件起行。

过了两日,就到文家。洞仁接待的很是亲切。平权说出雪梅之事,并将自己一番议论同告诉他。洞仁赞叹不置(止)。 是夜,平权又说起出洋之事。洞仁道:“姊姊既要去游学,决不敢作儿女之情,阻君壮志。且隔壁董奇簧姊姊亦想出洋学习,今与姊姊同伴,实为两便。”说着,即嘱丫鬟请了(董奇簧)过来。三人谈了一夜。 次日,奇簧回家。(许平权)收拾行李,忙碌了几日,别了洞仁,同奇簧买舟而去。 那时正是深秋天气,满林枫叶红的如桃花一般,两岸芦花白的如柳絮一般。平权看了,忽感慨起来,对奇簧道:“这个情景,像煞是春天。妹妹几欲错认了他。难怪世上无知的人,每到中年时候,犹自为幼少,顽顽耍耍,不做一些正经事业。岂知再过几年,就要‘呜呼哀哉’呢?” 奇簧听了,亦是浩欢,说了好些“日月无情,人生难再”的话语。 不觉舟子已到通商码头。二人即带了行李上岸,在客寓中住下一宵。次日又到街上买了几种食物,乘了一只往长崎的轮船。

不多几日,到了该处,则见众山峨峨,远连云表。平权内心想道:“这个地方,前时我们的学士大夫,也误认为蓬莱岛,说甚么黄金铺地、碧玉为桥;人若到此,即能白日飞升。但在今日,即愚蠢无学之人,已无不知道是日本国了。可见列国交通,于智识上大有益处。譬如我前日住在内地,见几个租界即当作福地洞天,岂知这里住了几日,那租界已看不上眼。我若到西洋去,恐连这里也看不上眼的。可见游历亦是很要紧呢!” 平权正在思想,则听奇簧说道:“姊姊,我们赶紧收拾物件起身,火车将要开了。” 于是二人乘了火车,到了东京。平权入师范学校,奇簧入医学校。 光阴如箭,转眼数年,二人学问皆已毕业。惟内地著书醒世的文洞仁一病而亡。 那日噩耗传来,二人悲伤得了不得。究竟平权达观生死,壮志未灰,约定奇簧游历世界一遭。

于是二人复治装起行,一路上赏玩名胜、考察人情,不知不觉到了法国巴黎。坦坦大道,全体敷石;车轮行过,一些声息也没有;且常有人拿着香水,到处敷洒。 平权爱恋此地,即找了一间客栈住下。次日又同着奇簧到国民图书馆去,见他规模宏大, 所藏的书籍竟有三百万部之多。平权心内想道:“法国是自由发生的地方,果然与别国不同。”游玩了好几个时辰,才由旧道而回。路上又随手买了一张新闻纸,拿到客寓内观看。 奇簧见他看了一息,神色忽然发呆起来,叫他也不答应。又响响的叫了几声。 则见他将头摇了一摇,口中叹了一口气,对着奇簧说道:“你来看,你来看。” 奇簧走到平权身边,见报纸上已滴着许多泪珠。仔细将报一看,里面载着“女界革命党首领沙雪梅,因大事不成,同其友张柳娟等七十余人自焚而死。”奇簧看到这里,泪如泉涌。 平权对奇簧哭说道:“姊姊,你想我们女界,黑暗了二千余年。幸亏得文洞仁、沙雪梅、张柳娟诸人,或用笔墨,或用口舌,唤醒他们的迷梦,近来才有一线光明。不幸文洞仁去年病死,那时妹妹已感伤得很;姊姊虽竭力劝我,到了今日,犹是耿耿于怀。岂知沙雪梅、张柳娟诸人,今又罹此巨祸。你将女界前途一想,安得不令人悲伤么?咳,沙雪梅、张柳娟诸人,虽手段过于激烈,妹妹早逆料其不能成功;但此等人在内地运动运动,亦不可少。今既先后丧亡,恐女界又要黑暗了!妹妹此刻,已立定主意,即回国去,办些女学堂,启发他们的智识,造成真正革命的基础。不知姊姊还是同我回去,还是再游历一周呢?” 奇簧道:“妹妹听说美国医学极其讲究,意欲到那边考察考察。但我与姊姊,自洞仁处认识后,情同意合,姊妹花一般。到了东京,你住在师范学校,我住在医学校,每逢星期,仍聚首谈心。今一旦忽然分离,你到地球的这面去,我到地球的那面去,心中实是恋恋不舍。” 平权含泪答道:“姊姊既有志到美国去考察医学,何必作此儿女态度?你我日后自有相见之日。我们此刻就收拾物件,明日动身罢。你迟了一日,就迟了一日祖国的学问;我迟了一日,就迟了一日女界的文明呢!” 奇簧只得含泪答应。到了次日,二人一揖而别。

奇簧在美洲游学了一年,乘船回国,开了大大的一个医学堂。我们医学进步,大半奇簧所造。这是后话,此书无暇细讲。 且说平权别了奇簧,坐在轮船上,长吁短叹,茶饭也无心进用。见旁有一个面庞极熟、洋装的中国少年,时时对他观看。 一日,那少年忽问道:“平权姊姊,你为着何事,这般伤怀?人生行乐耳,何学孤雁之哀鸣?” 平权听得此话,即正色答道:“看你的外貌很是文明,何以说话如此轻薄,一些道德心也没有?” 那少年忙陪笑说道:“我心中实爱惜姊姊,不欲幽闷伤人;忽听见船外雁声,故胡乱说出此话。姊姊,你在东京已住了三年;留学生会馆中,我与你又会过两次。你想我黄宗祥,岂是无赖荡子呢?” 平权听得此话,心内恍然:原来是高等学校卒业的宗祥,平日亦竭力唱(倡)导女学。二三月间,他游历欧美,近来想是回国,故在此处会见。亦堆下笑脸,说了几句“不是”的话。 (罗景仁批:“高等学校”二句写出宗祥实非无赖荡子。) 宗祥又问道:“姊姊端的为着何事,这般幽闷?”平权即将洞仁、雪梅、柳娟的事说了一遍,宗祥亦感伤起来。 二人结伴同行,每当平权愁闷的时候,宗祥又谭(谈)些学问,解解幽闷。平权很是佩服。宗祥敬重平权之心,更是十分浓厚,渐有欲联婚之意。未知平权肯应否,且听下回分解。

(罗景仁批:前数回中,既言沙雪梅磨刀霍霍,决意激烈革命矣。若不将他革命之事铺排一番,未免笔墨疎(疏)漏;然必叙他招罗女党几何,杀僇(戮)男子几何,则又成笨伯矣。作此回中一笔带过,却含着无数余缊(韵),何等神妙!吾不知作者此种笔墨从何处得来。)

 
阅读更多

from 女狱花

#女狱花

话说沙雪梅与许平权话不投机,忽忽地出了平权房门。走到自己床前,模(摸)出时辰表一看,已是三点零四十九分。就在床内和衣睡下,翻来覆去也睡不着。则听蚊市成雷,鸡声报晓,耐心片刻,朦胧睡去。 及至次日十一点半钟起来,即到隔房来看平权,那知平权已动身走了。只得回至房内,吃了饭食,会了钱钞,出了客栈。走了几步,心内想道:“前因贪玩野景,路上耽搁好几日。今野景大概已赏玩过,况此地至张柳娟处,又是一水之路,不如坐船为便。”漫漫的走到轮船局内,买了一张票儿,附轮而去。

不多几日,到得柳家,二人一见如故。(张柳娟)请雪梅至书房内吃酒,且与二位女友相见。一位姓吕名中杰,即前时送报纸与文洞仁的;一位姓仇名兰芷,即前时结夜亲,与夫不睦,到此来的。 四人传杯递盏,畅谈心曲。雪梅说起平权之事。 柳娟道:“这人我本认识,且其历史知之甚详。他的住处离此地不过二百里之遥,本是个书香人家。他父亲叫做许杰,亦是一个怪男儿,平生以三尺剑、万卷书为第二个性命,却不欢喜仕途。中年选择一位才女,做了妻房,生下一男一女。男的取名保国,女的取名平权。‘佛婢’乃是他(许平权)自己取的别号。” “当日许杰夫妻,抚弄子女,沉吟诗酒,极享家庭幸福。每当酒酣耳热的时候,常对妻子道:‘世人云“女子无才便是德”,又云“做女儿的时候,不可使其读书识字;若通了文理,就有什么楼头柳色、窗前蝶影,做出许多坏事”;不知做出坏事的女子,正因文理不通、不能看深奥的书,只能看浅近小说。我们现在的小说,大半无赖荡子,序些儿女私情,没有一点学问话头;就有几种为才子游戏笔墨,做女子的不能知其运笔构思,只见海市蜃楼,以为实有其事,所以闹出“东阁聆琴”“西厢待月”的笑话来了。咳,这些腐败的小说,实女子的大魔头。我已立志用些心血,将旧时的小说世界,洗涤一番,普救种种陷溺的女子。但我这个女儿,长大起来,要比儿子格出尽心教育,使他日后做些光明正大的事业,以塞老朽的嘴巴。’” “平权的母亲道:‘教育女儿,亦是父母的天职。我想世上无知的老头儿,生下一个儿子,欢欢喜喜,以为是我的后代;生下一个女儿,愁愁闷闷,以为是人的媳妇。所以贫苦人家,凑些铜钱,使儿子读两年书;富贵人家,儿子廿来岁时,还请着先生教育他。至于女孩儿,贫贱人家,没有一个读书的;富贵人家中,文理粗通的女子,亦好比晨星硕果。岂知人人不使女孩儿读书识字,日后我们娶来的媳妇亦木偶人一般,儿子大受其害。且西哲尝云:‘女子者,国民之母也。’假使身体羸弱,所产子女亦羸弱;思想呆滞,所产子女亦呆滞。照此看来,女孩儿不读书识字,卫生学不讲,身体自然是羸弱;世界事不知,思想自然是呆滞。羸弱、呆滞之母,安能产果敢、活泼之子呢?’所以平权父母,将他兄弟二人,一体教育。妹妹亦曾在该处读过好几年书呢。” 雪梅道:“你既同他认识,何不请他来此,同叙大义?” 柳娟答道:“你且不要性急,听我漫漫的讲下去。” 中杰与兰芷齐声说道:“我们且饮几钟(盅)再谈罢。” 四人各饮了好几杯。 柳娟又说道:“妹妹去读书的时候,保国只有八岁,平权只有六岁。他二人历史、地理的大略,都已知晓。妹妹初时很是惊讶,后知他呀呀学语之日,他的母亲将天文、地理各种歌,略教他学习;故到六七岁时,已明世界大势。光阴迅速,转瞬六年,平权的父亲一病而亡,母亲亦相继而逝;妹妹那时,仍与他兄妹二人,一堂研究学问,且与平权结为异姓姊妹。又过了两年,平权的哥哥保国,见我国政府与外国立了密约,知道组北东们地方已被他人骗去,心中很是愤恨,而又无计挽回,自刎而死。那时妹妹已开设这个女报馆了,听了这个凶信,即请平权到此地来同住;岂知平权自他父亲死后,性质忽然更变,日日夜夜看着大乘佛经,为人甚是冷淡,与妹妹的意恩(思)渐渐儿不合;故妹妹去叫,他一味推脱不来。到了去年,常因女权之事,与妹妹大起冲突。他的古怪话语,我也不欲尽说。你看前年这个包(报)上,‘女界普救主’的‘男女平等’论,并与妹妹论学书,就知道这人的性格了。”说至此,柳娟脸上含有怒意。 兰芷道:“平权的历史,雪梅姊姊想已知道。我们且饮罢。” 四人又饮酒了一会,下人拿了一封信来递与柳娟。柳娟看了,顿觉柳眉紧锁、杏眼低垂,颇有愁虑的意思。究竟是什么缘故?因这封书信从文洞仁处寄来,内有“近来忽患吐血毛病,所作《女界灯》小说,万不能届期交到”的话头。柳娟正为这月的报章将要付印,缺这一回小说,安得不着急呢? 许平权(录入者注:此处许平权并未在场,此为笔误。根据下文(第11回)推测,实际应为沙雪梅。)问明了缘故,即以另一部自任。柳娟方才开心饮酒。

过了两日,居然做成了数章。他的书名叫做《仇书》。柳娟看了,很是佩服。即印在报上了。 不多几日,又来了两位女友。一位姓施名如曌,一位姓岳名月君。二人亦是女界健将。从此六人日日夜夜织革命的方法。未知能革得成否,且听下回分解。

(罗景仁批:此回书中,据《水浒传》等笔法论之,理应许平权出场。但使烈烈轰轰之惊天女子变为冷冷清清之退院老僧,读者未免扫兴。然此回犹只叙沙雪梅,不叙许平权,亦未免喧宾夺主。作者手写甲处,眼注乙处,其笔墨真出乎天、入乎人矣。)

补充资料: 【东阁聆琴】或指卓文君事。 【西厢待月】指《西厢记》,情节为深闺女子与人私奔。可参阅《红楼梦》中贾母批判“才子佳人”一节(第五十四回、五十五回)

录入者注:仇兰芷谐音“仇男子”。施如曌,是如曌,曌指武则天(武曌)。 三层引号的处理办法跟三层书名号的处理办法相同。即当双引号内再有引号时,用单引号;单引号里又有引号时,用双引号。

 
阅读更多

from MrBlog....

I get a lot of DMARC reports because I host mail for a couple of domains. Most of these mails require no attention as they are just notifications that others use one of our domains. I want to separate these mails from my normal mail workflow and auto archive them if I haven't looked at them within, say, 2 weeks.

Doing this with sieve server-side has my preference, but apparently it's not trivial to determine the age of a message, which is the core logic needed here. Also, the processing of sieve rules is normally only during reception of messages, not ad-hoc or on some other event, although dovecot and pigeonhole have some options for this, among others the sieve-filter tool.

I really only found one implemenation online which roughly solves the same problem I was having, but this involved more than needed I think.

My solution consists of 3 parts:

  1. the sieve script that handles DMARC reports on reception and age-ing;
  2. use of an extension that calls an external program to evaluate expressions to determine age;
  3. a daily job that runs the sieve script in the scope of the designated folder.

Here's the sieve script which deals with DMARC reports both in the normal INBOX flow and a special treatment after 14 days. The latter part is not automatic by dovecot on reception of emails, but triggered by a run of the sieve-filter program.

require ["date","fileinto","relational","variables","environment","imap4flags",
         "vnd.dovecot.execute", "vnd.dovecot.environment"];

# Parameters
set "dmarc_folder" "Folder.for.dmarc-reports";
set "purge_days" "14";

# Move DMARC notifications when received
if environment :is "vnd.dovecot.default-mailbox" "INBOX" {
  if anyof (
    header :contains "From" "dmarcreport@microsoft.com",
    header :contains "From" "noreply-dmarc-support@google.com",
    header :contains "From" "opendmarc@mail.arctype.co",
    header :contains "From" "opendmarc@box.euandre.org"  )
  {
    addflag "\\Seen";
    fileinto "${dmarc_folder}";
    stop;
  }
}

# When running in the dmarc_folder, archive when age is <purge_days>
if environment :is "vnd.dovecot.default-mailbox" "${dmarc_folder}"
{
  if currentdate :matches "julian" "*"
  {
    # Run a simple bc expresssion to get <purge_days> ago from todays julian day
    execute :output "fourteen_days_ago" "bc" "${1} - ${purge_days}";

    # Compare this with Date header and archive when age reached
    if date :value "le" "Date" "julian" "${fourteen_days_ago}"
    {
      fileinto "Trash";
      stop;
    }
  }
}

The first part of the sieve script just moves the mails into the dmarc-reports folder and is a normal sieve processing rule. The second part runs if the default folder is the dmarc-reports folder. If so, it uses the ext_program extension of the sieve interpreter to let the bc program evaluate the expression for the age of the message.

This uses a tiny script in the configured sieve execute bin directory of the ext_programs extension

#!/bin/sh
echo ${1} | /usr/bin/bc

which just pipes the input given by the sieve line into the bc program. On returning, stdout is put into the fourteen_days_ago variable. I'm using execute because I do not need to pipe the whole message into the external program, but specify input specifically.

With the above configuration I can set a cron job in the crontab of the vmail user to run

sieve-filter -We -u <mymailaccount> \
             /path/to/vmail/mymailaccount/sieve/dmarc-archiver.sieve \
             Folder.for.dmarc-reports

which executes the sieve script mentioned above in the IMAP folder <dmarc_folder> only.

I'm not sure why sieve makes it so difficult to get the age of an email (unless I'm missing something). Protonmail solves this by having a custom extension 'vnd.proton.eval' which does something similar like the above, but in the scope of the sieve language itself without having to shell out to an external program explicitly. (I think; I have not seen their implementation)

My approach above obviously has some drawbacks:

  • the bc external program is called for every mail that matches, fine for 10 or 20 I guess, but rather inefficient if the amount of matched messages is big. For now, not a problem.
  • unsure what sort of security consequences this has, the execution scope and environment is very limited, but we're still giving control to a script calling other programs.
 
Read more...