0%

这篇记录或许应该两年前写,或许应该一年前写,但是因为种种原因,直到现在才写。

两年前的十一月,刚拿到 Offer,然后回家,还惊魂未定,没有力气写。

一年前在苏州等待日本开放,前途未定,也没有心情写。

现在已经到日本两个月了,生活和工作也都安顿得差不多了,也很习惯了,所以是时候了。


关于「疫情元年」,到底是三十年后的 2019 年应该算是元年,还是后世一定会着重笔墨记载的 2020 年应该算作元年大概还没有定论。况且抛开疫情, 2019 年也很不得了。

这里我姑且把 2020 年当作元年。这一年真是不得了,有训诫,有万家宴,有封城,有歌功颂德,有赢,有双赢。

本来 2018 年就大概决定 2020 年要试着看看能不能去上日本,做好了大概的时间规划,2019 年 12 月考 N2,2020 年之后重新捡捡英语,然后五六月之后就准备走,但是刚一年初就来了个「武汉肺炎」,后来改名成「新冠肺炎」,于是我就走不了了。

但是四五月份的时候实在是呆不下去了,于是六月就裸辞了,当时日本还没有开放,也不知道什么时候开放。就一边学英语,一遍玩黑暗之魂3。七月去考了托业,然后一直无所事事到九月。

九月安倍下台之后短暂开放了几个月,我就在九月末十月初开始投简历。

找人内推了 Rakuten,简历就挂了。

投了 BizReach,因为日语说得太烂,挂了。

倒是我之前没抱太大希望觉得给面试就算赚的 PayPay 过了。

之后十一月中旬收到 Offer,开始进行各种手续,十一月末离开北京,走之前去天安门广场看了看,看看发生过很多事的这个广场。十一月末离开北京,十二月末收到在留,过了几天听说日本又要关闭入境。

去年夏天,在家里实在是憋得太闷了,就寻思去苏州租房住了。

今年二月末,日本终于开放入境了,三月十四号签证申请就提交到苏州外事中心了。

接着,据说是中国最国际化最文明的城市上海,封城了。当然大使馆也关了,也不知道大使们挨没挨饿。但是我觉得,就算别人挨饿,市长肯定不会挨饿,就算大街上的、市民家里的猫狗被打死被饿死,上海的大熊猫肯定也不会挨饿。

终于,六月拿到了护照和签证。之后公司给安排的机票是从上海到深圳,然后从深圳到成田。我说上海到深圳的不用订了,我自己从苏州去深圳。七月走之前和朋友在深圳聚了聚,然后就到了日本,到了现在。

来不了日本的时候就在想以后到了日本以后会是什么样,还能再看到秋叶原吗,还能再看到沼津吗,现在也都实现了。


最后放一下Timeline吧,其中包含和转职无关的杂事。

Time Event
2019/12/01 参加 JLPT N2 考试
2020/01/17 去日本参加ラブライブ!フェス
2020/01/20 回北京
2020/01/24 过年回家
2020/06/05 从 ByteDance 离职
2020/07/19 参加 TOEIC 考试
2020/09/25 向 Rakuten 投递简历
2020/09/30 Rakuten 简历被拒
2020/10/06 向 PayPay 投递简历
2020/10/12 向 BizReach 投递简历
2020/10/14 PayPay 笔试
2020/10/19 BizReach HR 面谈
2020/10/22 PayPay 一面
2020/10/27 BizReach 一面
2020/10/29 PayPay 二面
2020/11/06 PayPay 三面
2020/11/09 BizReach 二面
2020/11/13 收到 PayPay Offer
2020/11/16 PayPay Offer Meeting
2020/11/27 离开北京
2021/07/27 到苏州
2022/03/14 提交签证申请
2022/06/13 取护照
2022/07/08 去深圳
2022/07/11 抵达日本

护符

护符袋

  1. 击败「恶兆妖鬼」马尔基特掉落。
  2. 在击败两个符文持有者(前期的葛瑞克和满月女王)之后前往大赐福的圆桌厅堂右侧走道的老婆婆交谈获得。
  3. 击败「初始之王」葛孚雷掉落。

法杖

防具

灵药圣杯瓶

杂项

  • 匕首
  • 腰灯
  • 火把

武器

Grafted Blade Greatsword

Greatsword

Lordsworn's Greatsword

Great Turtle Shell

Buckler

强化素材

Upgrade Materials

黄金种子

【艾尔登法环Elden Ring】所有黄金种子位置全收集

Golden Seed

圣杯滴露

【艾尔登法环】圣杯滴露全收集位置(12个圣杯已完结)

Sacred Tear

灵药圣杯瓶

Flask of Wondrous Physick

战灰

忍耐

弹反

无战技

砥石刀

Iron Whetblade

帕奇

Patches

Use Java-WebSocket to implement a simple chat server.

Java codes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;

/**
* A simple WebSocketServer implementation. Keeps track of a "chatroom".
*/
public class ChatServer extends WebSocketServer {

public ChatServer(int port) {
super(new InetSocketAddress(port));
}

@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
conn.send("Welcome to the server!"); // This method sends a message to the new client
broadcast("new connection: " + handshake.getResourceDescriptor()); // This method sends a message to all clients connected
System.out.println(conn.getRemoteSocketAddress().getAddress().getHostAddress() + " entered the room!");
}

@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
broadcast(conn + " has left the room!");
System.out.println(conn + " has left the room!");
}

@Override
public void onMessage(WebSocket conn, String message) {
broadcast(message);
System.out.println(conn + ": " + message);
}

@Override
public void onError(WebSocket conn, Exception ex) {
ex.printStackTrace();
if (conn != null) {
// some errors like port binding failed may not be assignable to a specific websocket
}
}

@Override
public void onMessage(WebSocket conn, ByteBuffer message) {
broadcast(message.array());
System.out.println(conn + ": " + message);
}

public static void main(String[] args) throws InterruptedException, IOException {
ChatServer s = new ChatServer(8887);
s.start();

BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String in = sysin.readLine();
s.broadcast(in);
if (in.equals("exit")) {
s.stop(1000);
break;
}
}
}

@Override
public void onStart() {
System.out.println("Server started!");
setConnectionLostTimeout(0);
setConnectionLostTimeout(100);
}
}

JavaScript codes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ws = new WebSocket("ws://localhost:8887");

ws.onopen = function () {
ws.send('hello from client')
};

ws.onmessage = function (evt) {
var msg = evt.data
console.log(`received msg is ${msg}`)
}

ws.onclose = function () {
console.log("closed")
}

Run the code above in browser's snippets window.

Then run the code below in the console window.

1
2
3
ws.send('hello')
ws.send('world')
ws.send('8623')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

public class AppTest {

private static List<String> getGroups(Matcher m, int groups) {
List<String> result = new ArrayList<String>();
while (m.find()) {
for (int i = 0; i <= groups; i++) {
result.add(m.group(i));
}
}
return result;
}

@Test
public void testMain() {
// Returns only true if the WHOLE string can be matched.
assertTrue("".matches(""));
assertTrue("".matches("^$"));

assertTrue("abc".matches("abc"));
assertTrue("abc".matches("^abc$"));

assertTrue("abc".matches("\\babc"));
assertTrue("abc".matches("^\\babc$"));
assertFalse("abc".matches("^a\\bbc$"));

assertTrue("abc-112=112-abc".matches("^(\\w+)-(\\d+)=\\2-\\1$"));

assertTrue("He2LlO".matches("(?i)he\\dllo"));
assertFalse("He2LlO".matches("he\\dllo"));

assertTrue("abcabcabc".matches("^(abc)+$"));
assertEquals("2211-abc+=1145-bba", "abc2211+=bba1145".replaceAll("([a-z]+)(\\d+)", "$2-$1"));
assertEquals("2211-abc+=bba1145", "abc2211+=bba1145".replaceFirst("([a-z]+)(\\d+)", "$2-$1"));
assertEquals("abc2211-=bba1145", "abc2211+=bba1145".replace("+=", "-="));

assertArrayEquals(new String[] { "abcab", "wjio", "ksldm", "xf", "w", "000wefj" },
"abcabc1wjion2ksldmf3xfe9wf0000wefj".split("[a-z]\\d"));
assertArrayEquals(new String[] { "abc\nab", "\nwjio", " ksld m", "x\nf", "w", "0\n00wefj" },
"abc\nabc1\nwjion2 ksld mf3x\nfe9wf00\n00wefj".split("[a-z]\\d"));

Pattern p = Pattern.compile("(\\w+?)-(\\d+)");
Matcher m = p.matcher("123-123444-444gg-212=====bbbbb111-bb1111-bb-22");
assertArrayEquals(
new String[] { "123-123444", "123", "123444", "444gg-212", "444gg", "212", "bb-22", "bb", "22" },
getGroups(m, 2).toArray());

Pattern q = Pattern.compile("(\\w+?)-(\\d+?)");
Matcher n = q.matcher("123-123444-444gg-212=====bbbbb111-bb1111-bb-22");
assertArrayEquals(
new String[] { "123-1", "123", "1", "23444-4", "23444", "4", "44gg-2", "44gg", "2", "bb-2", "bb", "2" },
getGroups(n, 2).toArray());

Pattern r = Pattern.compile("\\d-\\d");
assertArrayEquals(new String[] { "2-3", "5-2", "1-3" },
getGroups(r.matcher("ab 2-3\n2343\r2 \t55-22\n\r3331-3\r\n-33"), 0).toArray());
}
}

最近又推了一遍白色相簿2,上一次推还是在2018年大学毕业之前,再上一次就是在2016年冬天了。

自己喜欢冬马多于雪菜,对冬马的共情也多于雪菜,对春希的共情程度则最低。对于冬马的动机和心理更加能理解,雪菜则次之,春希再次之。

首先需要讨论一些问题。

冬马是不是背叛者? 冬马是背叛者,虽然冬马与春希互相暗恋先于雪菜出现,但是在春希雪菜确定关系已成既成事实的情况下冬马和春希在IC的结尾无疑是背叛了雪菜,在CODA的浮气线和冬马TE中同样也背叛了雪菜。

雪菜是不是背叛者? 雪菜也是背叛者,在IC中雪菜明知春希冬马互相暗恋,却故意抢走春希,这应该看作背叛。

白色相簿2的IC和红楼梦一样,都是在开篇就剧透了结局。一个是说最后会发生背叛,一个是说最后会白茫茫大地真干净。所以在IC中,一开始就让你知道最后一定是春希和冬马背叛了雪菜,然后再让你去看春希和冬马的暗恋、春希和雪菜的交往和三人行。最后在CODA中,最早互相喜欢的两人却是最难在一起的,要付出巨大的惨烈的代价才能在一起。

一些笔记

冬马虽然经常上课迟到,但是总正好迟到5分钟。

雪菜说参加峰城附属小姐是朋友给她擅自报名的,这里的朋友是谁?

雪菜把春希和冬马带到自己家讨论同好会的事的时候,孝宏在门外偷听,跟母亲所因为姐姐抢了别人的男朋友,他们正在了断,她母亲说我没教过这么放荡的女儿啊。真是一语成谶。

雪菜对即使还不是交往状态的异性也会做出一些亲密的举动,比如去摸春希的刘海还有把食物移到春希的碗里。

在冬马家练习的春希睡过了终电冬马也没叫醒。

学园祭演出之后的那天,冬马是在等春希向她表白,她以为春希找她是要向她表白,然而等到的却是春希说向雪菜表白了。

雪菜明知道春希和冬马是互相喜欢的,却还抢先表白,然后还对冬马说如果她不在的话春希和冬马两个人就能加深羁绊了吧

我一直不知道雪菜的可爱是营业出来的还是不假思索的。

雪菜经常会说请你忘了之前的事吧,还会小声用别人也能听到的声音自言自语,别人听到了之后也是说让别人忘记。不知道雪菜是真的想让别人忘记还是记住,也不知道雪菜的自言自语让别人听到是刻意的还是无意的。如果是无意的,那雪菜也太粗心了吧。

雪菜在和春希表白的时候大概只和春希认识了一个月左右,雪菜为什么在认识这么短的时间内就表白,而且是在这么急的学园祭结束之后的早上?似乎有一些既快又违和。

学园祭之后面对雪菜的表白,春希没有拒绝。我觉的如果你真的很喜欢冬马的话,难道不应该不管是否会被冬马拒绝都要拒绝雪菜然后向冬马表白吗?就算被拒绝然后既没跟冬马在一起也没跟雪菜在一起也要这样选择,不是吗?而春希在接受雪菜表白之后,只是把对冬马的喜欢压抑了。

雪菜一定要拉上冬马,说明年冬天还要在一起,一定要让喜欢她男朋友的人一直在他们面前看着,这是什么处刑呀?雪菜的三人行充满了刻意,不顾现实,说什么三个人在一起的时候春希和冬马都是朋友。但是,就算是故意不去提,刻意淡化,也无法否定春希雪菜在交往,春希和冬马互相暗恋的事实,所以IC中的三人行根本无法持续下去,这也是雪菜不愿意去想的。

IC中雪菜最后跟春希说了当初的告白动机,但是否如她所说只是不想被另外两人排挤才告白的也不得而知。春希和雪菜的爱情基础始终是我无法理解的,理解不了雪菜为什么会喜欢上春希。雪菜在和春希在一起之后又一直把春希往冬马那里推,一直想让春希和冬马接触,无论是一起出去玩还是毕业典礼之后,这也难以理解。

CC前中期两人的交往给我的感觉就是伪,是故意忽略事实的刻意建构,在圣诞节的时候更是到了极致。比如「就当作只有我们两个人。」「我们两个人reset吧。」「所以在我们的面前,已经不存在任何障碍了。只要把这理所当然的事情,理所当然地去做就好。」这好像是在强迫自己去相信一样。

在海边公园,春希说要reset,要当成只有他们两个人的故事,这又怎么可能?凡有接触,必有痕迹,去掩盖一个谎言又要创造出多少新的谎言?雪菜这时表现出来的违和感也是心口不一。

CC中圣诞节的时候雪菜拒绝了春希,然后依绪为什么说雪菜做的不对?

在CC中我能接受的结局只有雪菜TE,我觉得你们三人的事情还没有了结,是不能和别人再发生关系的。如果和雪菜以外的其他人发生关系,怎么面对以后可能会回来的冬马?

冬马TE非常惨烈和残酷,而要进入CODA必须要经过CC雪菜TE,要进入冬马TE则必须要经过大阪之夜。

在CODA开始见到冬马的时候其实是有一些陌生的,因为在CC里几乎一直都没有出现,而且自己也接受了春希和雪菜在一起。如果说雪菜的偷跑是错,那么CC中就是将错就错,况且在CODA开头春希就准备求婚了,自己已经不再希望看到有什么变故发生。

冬马在第一次音乐会的时候大概已经做好了告别的准备,如果春希能来的话,音乐会就是和春希的告别。

在大版之夜,春希送出的戒指令人恶心,我觉得这么重要的戒指不应该在这种状态下送吧。

冬马TE也令人恶心,十分刻意,春希要以照顾冬马的生活为由留在冬马身边,再加上曜子的白血病,春希要说服自己冬马除了钢琴以外其他方面都是废物,而冬马则要坐实废物这个角色,这样两人才能有一点合理性。但两人也知道,这都是借口,是在互相催眠,其实是两人选择了背叛雪菜,而不是因为什么客观原因非留在冬马身边不可。

冬马TE里,春希和冬马也只深入接触了两个月左右,做决定的时间只有两周以内,难道和雪菜在一起的两年都比不过这几十天,比不过双方幻想出的精神恋爱吗?

依绪说得好,「真是糟糕透顶的纯爱啊,我都想要吐了。」

雪菜为了不影响冬马的音乐会,连被车撞了也谁都没有告诉。

在离开日本的飞机上,两人看向窗外,从此雪菜在春希心中的位置会不会像五年前冬马在春希心中的位置一样呢?雪菜对于春希来说是不是变成了下一个「和纱」呢?

冬马TE真的是对冬马来说最好的结局吗?在我看来这只是一个春希选择了冬马的结局而已,而且代价极其惨烈。在这个结局中,冬马要一直扮演一个除了钢琴以外其他方面都不能自理的废物。

而我能接受的大概只有雪菜TE,虽然一开始在IC中不是很喜欢雪菜,但是在CC和CODA中却慢慢喜欢上雪菜了。对于雪菜来说冬马也获得幸福是雪菜获得幸福的必要条件之一。

雪菜TE真的很梦幻,冬马也成长了,虽然我更喜欢冬马但我也不希望看到冬马为了和春希在一起而把自己束缚在一个小空间中。最后听到時の魔法看到结尾的CG的时候真的很感动。

浮生着甚苦奔忙? 盛席华筵终散场。

悲喜千般同幻梦,古今一梦尽荒唐。

慢言红袖啼痕重,更有情痴抱恨长!

字字看来皆是血,十年辛苦不寻常。

悲剧性

《红楼梦》是什么?《红楼梦》是大悲剧。

《红楼梦》是什么样的悲剧?《红楼梦》是「怀金悼玉」的悲剧,是「一年三百六十日,风刀霜剑严相逼。明媚鲜艳能几时,一朝漂泊难寻觅。」这样的悲剧,是「千红一哭,万艳同悲」这样的悲剧。

在那样令人无可奈何的大染缸中,尤三姐失身时,浓妆艳抹,凌辱群凶,竟是她嫖了男人,并非男人淫了她。择夫后斩钉截铁,吃斋念佛。最后用鸳鸯剑断痴情,如此有气节,令须眉浊物们无地自容,是为悲剧。

被折磨到吞金自逝的尤二姐,清清白白却被撵出去的晴雯,有青云志却要听任婚姻安排的宝钗,被当作和亲工具远嫁的探春,她们的命运一样也是悲剧的。

众女子都决定不了自己的命运,是大悲剧。

为普天之下众女子鸣不平

第五回宝玉游太虚幻境,可知金陵十二钗、袭人、晴雯和香菱等都在薄命司,众女子的命运都很悲惨,而曹雪芹就是要为当时普天之下的众女子鸣不平。

《葬花吟》和第五回的判词、曲文所定下的基调是一个并非为某几个人而悲的基调,而是为众女子悲。

通过《葬花吟》,通过书中种种从宝玉还有其他女子口中说出的话,通过对各个命运悲惨的女子的描写,会看到当时的女性的处境。

被禁锢的众生

丫鬟

富家的千金小时候被拐走当作奴婢卖,吃不起饭的穷苦人家为了粥米把女儿当作奴婢卖。 忽喇喇似大厦倾,机关算尽的贾府枭雄她的女儿被卖到烟花巷,昨日进宫待选的群芳之冠今日被当作奴婢卖,昔日买人卖人的家奴今日又反倒被卖。

那在不可一世的贾府当了丫鬟后又如何呢?要是觉得和主子平时玩得熟了,主子平时不摆主子姿态就忘了自己是丫鬟是万万不可的,说不定什么时候主子雨里等急了还给你来一记窝心脚。今天你还是主子最得意的大丫鬟,明天给你一巴掌然后说要把你赶走。纵使是曾带病夜补雀金裘,依然难逃被赶走的命运。更有为老不尊、好色荒淫的什么老爷要让你做妾,把你当作性工具。

那当了妾做了姨娘之后又如何呢?那也只是半个主子,比奴才高一点,但是在主子面前还是奴才,主子可以随意羞辱你,谈什么人格和尊严。甚至生的孩子却比自己的地位高,能羞辱自己,是个主子,所谓「庶出」。

封建礼教禁锢下的女子

在这个「礼仪之邦」中,有当代一些人向往的传统礼教,在那些礼教里有儒家大圣人的「夫为妻纲」、「七出」,更有恶臭不堪的「女子无才便是德」和《礼记·内则》1

在第五十九回中,宝玉说:「女孩儿未出嫁,是颗无价之宝珠;出了嫁,不知怎么就变出许多的不好的毛病来,虽是颗珠子,却没有光彩宝色,是颗死珠了;再老了,更变的不是珠子,竟是鱼眼睛了。分明一个人,怎么变出三样来?」

第七十七回中说:「奇怪,奇怪,怎么这些人只一嫁了汉子,染了男人的气味,就这样混账起来,比男人更可杀了!」

国立台湾大学中国文学系教授欧丽娟老师在她的《红楼梦》系列课程中讲过这个现象2。 她说我们传统的女性活在一个非常不公平的社会里面,要了解她们的悲剧,要了解她们为什么会变成那个样子,首先要知道制度和社会的运作法则,才能知道人活在那样的社会制度当中,有的时候久而久之,不知不觉就会变成鱼眼睛。鱼眼睛有一个非常重要的特征就是越老就越变的越把钱看得真,也就是越吝啬,越贪财。宝玉的描述并没有冤枉这些鱼眼睛,只不过就历史现实来说,我们认可它的客观性,但是这不妨碍我们可以去思考在女性身上会造成这样一个历史事实的历史原因。思考为什么女人结了婚后她会丧失光芒,然后丧失光芒久了之后整个人的性情就变的非常不可爱,我们需要看一下古代女性的处境。

首先明清时候特别张扬一种价值观叫做「女子无才便是德」,女性从小几乎就不受教育,一个人如果不受教育就不要太期望她能有什么钟灵毓秀的表现。这些女人们除非有很特殊的家庭背景,否则她们几乎没有受过教育,没有受过教育就很容易只是一般的平凡人,这样我们就不能过度苛求。这时这些平凡人所受到的社会的待遇又不一样的话,可能就会使得她们的性格或人性中比较不好的一面被强化出来而以至于变成鱼眼睛。

我们来看一下古代女人结婚之后会受到什么待遇。

第一,她会很辛苦,她要做人家的媳妇,《礼记》里面说做媳妇要对公公婆婆的话百依百顺,要打不还手骂不还口等等。这真是完全压抑自我的身份。

第二,要做人家的妻子,妻子要以夫为天,妻子之道要臣服于夫道之下。

第三,要做人家的母亲,做母亲很辛苦,还要养小孩,还有柴米油盐酱醋茶等等。所以女孩子一旦进入婚姻当中,她几乎是没有自我的。然后各种琐琐碎碎对她的性灵提升、知识提升和人格提升几乎完全没有关系,久而久之性灵更加耗损。

所以作为一个天真少女所拥有的自然清新当然就会丧失殆尽。可是如果还只是这样的话还不会变成鱼眼睛。会让她变成鱼眼睛的还有一个很重要的待遇,那就是这个婚姻对她也是没有保障的,比如有「七出」。这个「七出」给女性非常强烈的不安全感,她为一个婚姻完全付出自我,可是她获得什么?原来她所获得的东西背后还有那么多的很难达到的条件。

所谓「七出」者:

妇有七去:不顺父母去、无子去、淫去、妒去、有恶疾去、多言去、窃盗去。不顺父母去,为其逆德也;无子,为其绝世也;淫,为其乱族也;妒,为其乱家也;有恶疾,为其不可与共粢盛也;口多言,为其离亲也;盗窃,为其反义也。

这就是在合法的婚姻当中七个可以名正言顺把妻子休掉,赶出夫家的合乎法令,合乎舆论的理由。

「七出」的第一条就是无子,生女儿不算数,因为女儿是嫁出去的,不属于我们家的,不能继承香火。如果没有儿子的话,就要看夫家有没有情义,如果有情义就留着你,另外再纳妾,没有情没有义的就把你赶走。 现在我们有点科学知识的都知道生男还是生女并不取决于女方,也并不能说取决于男方,而是取决于最不废物的那个精子。所以这一条真的是非常荒谬。

第二条是淫佚,这一条不能只从字面去看,古代对女人的贞跟淫的标准非常含混,而且其实是很宽松的。尤其是在明清,如果一个女人竟然写诗写词,这就是不贞的行为。

宋代一位女词人朱淑贞的诗反映了这个问题:

女子弄文诚可罪,那堪咏月更吟风。

磨穿铁砚非吾事,绣折金针却有功。

创作诗词这种无关现实,无助于夫家,不能促进这个家族的现实利益的这种喜好就「诚可罪」。古人有一个很奇怪的观念,他们觉得一个女人如果受太多的教育反而会影响到她做一个贤妻良母。在明清的文人眼中,如果竟然还去弄那些风花雪月的诗词,那么这个女人就是红杏出墙的几率最高的一种人,因为他们觉得没有谨守妇道和闺门的限度。古代还有所谓「男女授受不亲」,甚至一个女子不小心跟一个男子碰到了,就有可能被认为是淫佚。这里面的「七出」是要用一种非常宽的方式去认定的。

第三条是妒忌,你要和别人同时分享一个你所爱的人,谁会不妒忌呢?可是为了要维护父权的利益,所以请你们压抑你们天然的人性。

第四条是窃盗,窃盗也要很宽松地看。一个女人嫁到夫家,她的一切都属于夫家所有,如果她竟然藏私房钱就属于窃盗,因为她把夫家的东西据为己有。

第五条是口舌,就是说口才太好,太爱讲话。口才太好,滔滔不绝,结果你的丈夫跟你一辩论竟然还输了你,夫为妻子之天,你竟然让天这样地丢脸,不守妇道!

第六条是不事舅姑,就是没有好好侍奉你的公婆。反正娶她进来有一个重要的目的就是帮助丈夫来孝顺他的父母。

第七条是恶疾。

可见「七出」中的说法都是在把女人当成工具,体现的都是工具价值。女人不是被当作一个独立自主的人,完全是为了服务男性而存在的。它犹如尚方宝剑,就是说我可以不拿出来休掉你,但是我一拿出来你必死无疑。所以古代的女性活在了一个充满了不安全感、不平等的处境中。她最后可以依靠的只是生儿子,可是未必能有儿子。如果能有儿子,她就要好好保护这个儿子,因为这是她将来地位的唯一的依靠。如果没有儿子,那么她的唯一的依靠当然就是钱。所以那些鱼眼睛们就会越老越把钱看得真,也不能完全归罪于她们。

以上是对欧丽娟老师的讲义的整理。


我们还会看到那个时代受到剥削的女性反而会参与剥削其他的女性。

贾赦的妻子邢夫人反而会给自己的丈夫找妾。在贾赦看上鸳鸯之后,邢夫人居然对鸳鸯说:「过一年半载,生下个一男半女,你就和我并肩了。」言外之意是你得生孩子,才能体现更多的价值,你给老爷造个人,别人就又要高看你一眼了。

再来看探春。

在探春身上我们可以发现一个现象,探春是老爷和妾生的,即庶出。但即使是庶出的探春也比她母亲地位高,她母亲依然是奴才身份,反过来她确实主子身份,还可以训她娘。这里就引出一个问题,为什么半个主子身份的姨娘能生出一个主子身份的小姐?看来女人在这个意义上只被当作生育工具,是为了男方的家庭延续血脉用的,而后代的阶级却取决于参与生育的男方。

第五十五回探春说:「我但凡是个男人,可以出得去,我必早走了,立一番事业,那时自有我一番道理。偏我是女孩儿家,一句多话也没有我乱说的。」 探春是这么一个有能力,果断的女子,王熙凤病倒后她主政,操刀改革。探春看得透,拿得定,说得出,办得来,是有才干者。最后她却只能被打了败仗的朝廷当作和亲的工具远嫁,令人无限惋惜。

宝黛爱情的悲剧

儒家五伦中有「夫妻」,但这说的不是爱情,说的是伦理原则,规定的是一系列价值标准。儒家把夫妻关系作为一种实体的伦理关系确定下来,这样就排除了主观性。

如果爱情要有一个什么需要依据的纲领来规定什么该做,什么不该做,什么是爱,什么是不爱,那就谈不上是爱情。

中国传统的婚礼大多是在两个家族的面前举行的,这是中国人让这份关系摆脱个别性、主观性从而达到伦理实体的一种方式。这是两个家族之间的联系,这两个个人的婚姻要由家族决定。

宝玉和黛玉等一众公子小姐们,周围几乎一直都是一堆丫鬟,到哪几乎都会有人跟着,出个家门还要有人陪同,几乎没有隐私和自由可言。而在那个婚姻由双方家庭决定的社会,你居然在家庭给决定终身大事之前有自己的私情,成何体统?

所以在第五十七回「慧紫鹃情辞试宝玉」中有黛玉的内心想法:「幸喜众人都知宝玉原有些呆气,自幼是他二人亲密,如今紫鹃之戏语亦是常情,宝玉之病亦非罕事,因不疑到别事去。」 他们两人不能自己公开心意,只能等家庭决定,最终黛玉泪尽魂归离恨天,宝玉洒泪相思地,酿成悲剧。

黑格尔说:「在不太尊重女性的那些民族中,父母对于婚事总是按照他们的任意来指定,而从不询问当事人的意见。······相反地,在现时代,主观的出发点即爱恋被看作唯一重要的因素。」3

对钗黛的看法

据第四十二回脂批有:

钗、玉名虽二个,人却一身,此幻笔也。

这回中宝钗还对黛玉说:「我们家也算是个读书人家,祖父手里也爱藏书。······他们是偷背着我们看,我们却也偷背着他们看。」 注意这个「也」字,可知宝钗自幼可能也像黛玉一样读了很多书。我认为宝钗未必诗词文采不如黛玉,黛玉也未必不知世故。 钗黛的不同大概就是她们人生追求与安身立命之地的不同,大概一个入世一些,一个出世一些,追求的境界不同。

第六十四回宝钗对黛玉说:「自古道『女子无才便是德』,总以贞静为主,女工还是第二件。其馀诗词,不过是闺中游戏,原可以会可以不会,咱们这样人家的姑娘,倒不要这些才华的名誉。」

第七十回大家以柳絮为题作诗,宝钗说:「我想,柳絮原是一件轻薄无根无绊的东西,然依我的主意,偏要把他说好了,才不落套。」

诗的最后一句:

韶华休笑本无根,好风频借力,送我上青云!

可以看到宝钗和黛玉的人生态度不同,宝钗是有青云志的女子,有抱负,如果结婚的话大概也会是贤妻良母,会和丈夫一同追求功名,成就一番事业,似乎更加入世一些。 但宝钗好像没有为自己活过,各个事情总是要采取一个中庸的姿态,似乎外面有一层儒家理想女子的外壳,这个外壳会指示她各个事情应该如何处理,但她的真实想法却很难被人知道。

宝钗似乎一直在压抑自我,给我一种在听『別の人の彼女になったよ』时歌中女子的既视感,像是歌里唱的人:

夢や希望とかを 語ることを嫌って

讨厌谈论梦与希望

ちゃんと現実をね 見つめていて

要好好看看现实

正しいことだけしか 言わないから

只说正确的言论

ずっとさらけ出せず おとなしくしてるの

不再显露本性 老实成熟

而最后宝钗也没能决定自己的命运,被家庭牵连,进宫选拔的进路被断,被家里安排和自己从没爱过也从没爱过自己的宝玉结婚,两个人的路不同,大概没有办法有灵魂上的交流。 嫁给跟自己根本就不适合的宝玉,这又何尝不是悲剧?

空对着,山中高士晶莹雪;终不忘,世外仙姝寂寞林。

而黛玉是一位浪漫主义的诗人,虽然她总主观感觉自己是寄人篱下,「风刀霜剑严相逼」,但是在贾府她是可以跟宝玉比肩的宠儿。 不喜欢宝钗的人觉得她心机太重,太老成,太世故;不喜欢黛玉的人觉得她太尖酸刻薄,太爱哭,太麻烦,太任性。 但是我觉得她们两个首先人生态度不同,每个人有适合自己的人生态度。 黛玉虽然一直在流泪,但是她留下了很多绝唱的诗词,她还在的时候是唯美的,最后泪尽,在最美的时候红消香断。 虽然有人觉得她就是总这么多愁善感,所以才会走得那么早。 但是人真的要活那么久吗?樱花开放的时候非常梦幻,但是转眼间花谢花飞花满天。 黛玉大概代表了纯粹的不掺杂质的美,是质本洁来还洁去。 她只为她的追求和知己而生。

虽然黛玉也有各种各样的不足,而且棱角分明,但和宝钗相比自己还是更喜欢黛玉,当然宝钗也很喜欢。

《葬花吟》

我认为黛玉的《葬花吟》不仅仅是把自己主观感受到的处境投射到花中,更多的是和转眼间就凋谢飘落的花的共鸣,是对转瞬即逝的美的惋惜,在共鸣中可以看到花的命运,继而看到红颜的命运,继而看到自己的命运。

下面引用两段叔本华的话:

如果说对于所有这些人里面的任何一个,都好象是在自己的我和别人的我之间横亘着巨大差别似的,那么,对于我们想象中这位崇高的人则相反,对于他,人我之分就不是那么重要了,个体化原理,现象的形式就不再是那么严密地局限他了,而是他在别人身上看到的痛苦几乎和他自己的痛苦一样使他难受。4

如果我们不是由于自己的而是由于别人的痛苦所激动,以至于哭,那么,我们哭是因为我们在生动的想象中为痛苦的人设身处地,或者因为我们在这个人的命运中看到全人类的命运,从而首先是看到自己的命运;所以,通过老远的绕道总还是为了自己而哭,总还是对我们自己感到同情。5

关于爱情和婚姻

有人认为宝黛之间的爱情是由于一见钟情,诚然,他们初见时互相都有似曾相识的感觉,但他们的爱情的基础恐怕还是日久生情。

第五回开头有:

便是宝玉和黛玉二人之亲密友爱处,亦自较别个不同,日则同行同坐,夜则同息同止,真是言和意顺,略无参商。

注意上文中的「友爱」二字。

第五十七回紫鹃对黛玉说:「我们这里就算好人家,别的都容易,最难得的是从小儿一处长大,脾气性情都彼此知道的了。」

一见钟情其实很令人怀疑,如果「一见」是用来否定的话,那倒还好,但要是「钟情」了,恐怕就有些麻烦了。 只一见,又怎么能知道对方的秉性、风格和想法呢,说不定两人的价值取向和偏好等并不合适,导致两人很难有共鸣,很难有深入交流。 更有可能是自己心中有了一个理想中的对象的理念,这个理念是形而上的,就像是所谓的柏拉图的理念一样,而在现实中遇到了一个令自己一见钟情的对象后,就把自己心目中的理想的对象的特质都投射到现实中一见钟情的对象身上,对现实中的这个对象有了不切实际的期待,最后无疾而终。

所以所谓一见钟情生的是什么样的情也值得讨论。

第六十六回的脂批有:

余叹世人不识情字,常把淫字当作情字;殊不知淫里无情,情里无淫,淫必伤情,情必戒淫,情断处淫生,淫断处情生。

而两个人交往了以后,关于长久还有可以讨论的问题。 我认为有长久打算的交往和没有长久打算的交往是不同的。 有长久打算的交往不管最后是否长久,它都是在想要长久这个前提下进行的,它里面包含着长久这样一个期待,而最终长久的可能性则不光取决于个人的意志,还取决于诸多其他因素。 而没有长久打算的交往,当站在未来的时间点看时有两种可能,一种是居然长久了,更有可能是果然分开了。 而站在现在的时间点看未来,如果要开始一次大概率会分开的交往,那么该怎样看待呢?是不去想以后,有着此时此刻的当下,此时此刻有这样一份感情就可以了吗? 而分开以后有如何看代之前的那一段感情呢?它之后只会在回忆中出现,曾经的当下如今变成回忆,是只要有当时的那样一个当下就可以了吗?

再来看婚姻。

虽然结婚被形容为大喜,但依我看大喜的可能只是少数,大悲才是平常。 婚后不和比比皆是,更有出轨、嫖娼等,身边不乏这些例子。

如果婚姻是作为爱情的延续倒还好,这时婚姻本就是两个人的事,甚至不需要仪式和所谓证婚人的证明,难道属于两个人的关系非要双方以外的什么人或双方的家庭承认吗? 而婚姻如果作为手段是被双方家庭安排的,或者是出于政治和利益等目的,那么不得不说,在这场婚姻中成婚的双方牺牲了个人的独立性。

87版《红楼梦》

87版《红楼梦》没有按照程高本拍结尾真是太好了。曹雪芹「字字看来皆是血」用血泪写成的书难道就是用血泪写二女争婚和掉包计吗?太庸俗了!红楼梦的格局是「千红一哭,万艳同悲」的格局,是《葬花吟》的格局,是要反映当时社会的普遍性的格局。

宝玉从来只爱黛玉,黛玉也只爱宝玉,贾府几乎从上到下都能看出两人的心意,而且贾母更是维护两个人,所以如果突然写宝玉或者贾母会变心就显得特别违和。

最后的一点思考

人终会死,而若已经决定使自己不再成为轮回的中介,又为谁起高楼,为谁建大厦?或明天死,或明年死。

「尔今死去侬收葬,未卜侬身何日丧。」

多少年后,世界是否依然存在尚未可知。

「悲喜千般同幻梦,古今一梦尽荒唐。」

叔本华认为人生就是痛苦,所有的欲求都是无目的的盲目冲动,认为人生只不过是被推迟了的死亡。如果我们先不去评判叔本华的价值判断,只就事实判断来说,人生确实是被推迟了的死亡。

如果人总会老死,那么生病的时候为什么要治呢,治病也无非是推迟死亡。因为在这个当下不治则痛苦。

但是这个当下终究也会不在,转眼间变成为过去,为什么还要在乎这个当下呢。

从消极的角度来看,是因为没有选择不推迟死亡,是因为有某种执念所以一定非要怎样怎样不可,这就像是叔本华说的欲求。

积极一点来看,存在主义认为世界、人生什么的本来就没有预先被设定好的意义和目的,什么是有价值的,什么是有意义的都是人定的。所以就算红颜弹指老,至少在这个当下也要娇花照水,虽然薄命,也要在潇湘馆作诗,流泪。


陋室空堂,当年笏满床;衰草枯杨,曾为歌舞场。

蛛丝儿结满雕梁,绿纱今又糊在蓬窗上。说什么脂正浓,粉正香,如何两鬓又成霜?

昨日黄土陇头送白骨,今宵红灯帐底卧鸳鸯。

金满箱,银满箱,转眼乞丐人皆谤。

正叹他人命不长,那知自己归来丧!

训有方,保不定日后作强梁。择膏粱,谁承望流落在烟花巷!

因嫌纱帽小,致使锁枷扛,昨怜破袄寒,今嫌紫蟒长。

乱烘烘你方唱罢我登场,反认他乡是故乡。甚荒唐,到头来都是为他人作嫁衣裳!


  1. 《礼记·内则》↩︎

  2. 紅樓夢 07. 讖語式的表達策略 I : 讖謠、詩讖 (一)↩︎

  3. 黑格尔.黑格尔著作集 第7卷 法哲学原理.人民出版社.304↩︎

  4. 叔本华.作为意志和表象的世界.商务印书馆.1982年11月第1版.511↩︎

  5. 叔本华.作为意志和表象的世界.商务印书馆.1982年11月第1版.517↩︎

转换GIF

1
$ ffmpeg -ss {start_time} -to {end_time} -i {input_file} -r {frame_rate} -vf scale=-2:{height} {output_name}.gif

For example:

1
$ ffmpeg -ss 01:30:02 -to 01:30:12 -i '227 ELEVEN.mp4' -r 15 -vf scale=-2:240 cut.gif

截取视频

1
$ ffmpeg -ss {start_time} -to {end_time} -i {input_file} -preset {preset} -c:v {encoding} {output_file}

For example:

1
$ ffmpeg -ss 00:30:01 -to 00:30:11 -i '227 ELEVEN.mp4' -preset veryslow -c:v libx264 cut.mkv

Start Kafka

1
2
3
4
$ ./bin/zookeeper-server-start.sh ./config/zookeeper.properties
$ ./bin/kafka-server-start.sh ./config/server.properties
$ ./bin/kafka-topics.sh --create --topic test-topic --replication-factor 1 --partitions 1 --zookeeper localhost:2181
$ ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic test-topic --partitions 10

Create New Project

Run:

1
$ mvn archetype:generate -DgroupId=org.torapture.test -DartifactId=kafka-test -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

To use the producer and consumer, you can use the following maven dependency:

1
2
3
4
5
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.7.0</version>
</dependency>

After modified, the file structure is:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ tree kafka-test
kafka-test
├── kafka-test.iml
├── pom.xml
└── src
├── main
│   └── java
│   └── org
│   └── torapture
│   └── test
│   ├── Consumer.java
│   └── Producer.java
└── test
└── java
└── org
└── torapture
└── test
└── AppTest.java

Producer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package org.torapture.test;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

import java.util.Properties;

public class Producer {
public static void onCompletion(RecordMetadata meta, Exception e) {
if (e != null) {
e.printStackTrace();
} else {
System.out.printf("offset: %d, partition: %d, topic: %s%n", meta.offset(), meta.partition(), meta.topic());
}
}

public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

KafkaProducer<String, String> producer = new KafkaProducer<>(props);

for (int i = 0; i < 10; i++) {
String key = String.valueOf(i);
String value = String.format("value is %d", i);
ProducerRecord<String, String> record = new ProducerRecord<>("test-topic", key, value);
producer.send(record, Producer::onCompletion);
}
producer.close();
}
}

Consumer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package org.torapture.test;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.errors.WakeupException;

import java.util.Collections;
import java.util.Properties;

class Wakeup<K, V> implements Runnable {
KafkaConsumer<K, V> consumer;

Wakeup(KafkaConsumer<K, V> consumer) {
this.consumer = consumer;
}

@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
consumer.wakeup();
}
}

public class Consumer {
public static void main(String[] args) throws InterruptedException {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("group.id", "test-group");
props.put("auto.offset.reset", "earliest");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("test-topic"));

Thread wakeup = new Thread(new Wakeup<>(consumer));
wakeup.start();

try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
System.out.printf("topic = %s, partition = %d, offset = %d, key = %s, value = %s%n",
record.topic(), record.partition(), record.offset(), record.key(), record.value());
}
}
} catch (WakeupException e) {

} catch (Exception e) {
e.printStackTrace();
} finally {
consumer.close();
}

wakeup.join();
}
}

Produce and Consume

Build the project first by:

1
mvn package

Then:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
$ mvn exec:java -Dexec.mainClass=org.torapture.test.Producer                                        
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< org.torapture.test:kafka-test >--------------------
[INFO] Building kafka-test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ kafka-test ---
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
offset: 0, partition: 3, topic: test-topic
offset: 1, partition: 3, topic: test-topic
offset: 2, partition: 3, topic: test-topic
offset: 0, partition: 0, topic: test-topic
offset: 0, partition: 8, topic: test-topic
offset: 1, partition: 8, topic: test-topic
offset: 0, partition: 9, topic: test-topic
offset: 1, partition: 9, topic: test-topic
offset: 0, partition: 6, topic: test-topic
offset: 0, partition: 7, topic: test-topic
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.848 s
[INFO] Finished at: 2021-01-11T18:56:03+08:00
[INFO] ------------------------------------------------------------------------


$ mvn exec:java -Dexec.mainClass=org.torapture.test.Consumer
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< org.torapture.test:kafka-test >--------------------
[INFO] Building kafka-test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ kafka-test ---
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
topic = test-topic, partition = 3, offset = 0, key = 3, value = value is 3
topic = test-topic, partition = 3, offset = 1, key = 4, value = value is 4
topic = test-topic, partition = 3, offset = 2, key = 9, value = value is 9
topic = test-topic, partition = 0, offset = 0, key = 5, value = value is 5
topic = test-topic, partition = 8, offset = 0, key = 2, value = value is 2
topic = test-topic, partition = 8, offset = 1, key = 6, value = value is 6
topic = test-topic, partition = 9, offset = 0, key = 1, value = value is 1
topic = test-topic, partition = 9, offset = 1, key = 7, value = value is 7
topic = test-topic, partition = 6, offset = 0, key = 0, value = value is 0
topic = test-topic, partition = 7, offset = 0, key = 8, value = value is 8
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.663 s
[INFO] Finished at: 2021-01-11T18:56:17+08:00
[INFO] ------------------------------------------------------------------------

物品

元素碎片

  • 传火祭祀场 房梁
  • 洛斯里克的高墙 小偷钥匙房间
  • 不死聚落 着火大树
  • 磔罚森林 火堆处十字架疯子敌人附近可跳下位置
  • 净身小教会 四活尸拜碑处
  • 法兰要塞 篝火#1之后,灭火处之前,斜插圆顶建筑下方
  • 恶魔遗迹 老王门厅篝火附近隐藏墙壁
  • 亚诺尔隆德 正门左侧宝箱
  • 伊鲁席尔地下监牢 下方通向外面的门的路上的一个宝箱怪
  • 妖王庭院 电梯夹层右侧
  • 大书库 三个羽翼骑士附近的平台

不死人遗骨

  • 不死聚落 白桦树附近
  • 幽邃教堂 白桦树附近石碑
  • 法兰要塞 要塞遗迹篝火下方右侧塔内蛞蝓堆
  • 卡萨斯地下墓地 第一个大球
  • 恶魔遗迹 恶魔遗迹篝火下楼梯后再下第一个楼梯,到达一个大房间后左转直走
  • 熏烟湖 沙虫
  • 冷冽谷的伊鲁席尔 幽尔希卡教堂下去后墓碑后面
  • 罪业之都 篝火处
  • 洛斯里克城 龙训练场喷火桥远处滚下
  • 大书库 通往室外三人组之前的看书尸体

装备

  • 100%物防战技盾:洛斯里克的高墙小偷钥匙房间上方宝箱
  • 护手套:不死聚落下水道需要钥匙的门附近
  • 小皮盾:不死聚落篝火#1进门后
  • 火把:购买
  • 亡命骑士套装:磔罚森林跳楼NPC门口附近大树

武器

  • 阔剑:洛斯里克的高墙枪兵洛骑之前的房间
  • 黑暗之手:12000购买

戒指

  • 贪婪银蛇戒指:传火祭祀场房梁隐藏门后面
  • 绿花戒指:不死聚落和洋葱骑士打完火焰恶魔后高塔跳下
  • 元素戒指:传火祭祀场塔底
  • 教宗左眼:冷冽谷的玻尔多灵魂换取
  • 蓝泪石戒指:洛斯里克的高墙救小偷

楔形石碎片

  • 传火祭祀场 灰烬审判者古达之前
  • 洛斯里克的高墙 篝火#1附近人之脓
  • 洛斯里克的高墙 篝火#2附近
  • 洛斯里克的高墙 篝火#2后面人之脓
  • 洛斯里克的高墙 枪兵洛骑之前的房间
  • 洛斯里克的高墙 小偷钥匙房间
  • 不死聚落 太阳骑士誓约路线之前室外
  • 不死聚落 颓旧桥边篝火之前
  • 不死聚落 颓旧桥边篝火之前导师位置
  • 不死聚落 悬崖地下室篝火附近
  • 不死聚落 桥下
  • 不死聚落 桥下

楔形石大碎片

  • 洛斯里克城 篝火#1用洛骑刷12个

楔形石块

  • 传火祭祀场 鸟巢黑火焰壶换取
  • 洛斯里克城 篝火直走右转之前
  • 洛斯里克城 龙训练场之前 * 3
  • 洛斯里克城 喷火桥近处右侧跳下 * 3
  • 妖王庭院 电梯夹层左侧
  • 妖王庭院 霍克伍德白符左侧
  • 妖王庭院 霍克伍德白符右侧
  • 妖王庭院 捷径门附近

黑火焰壶

  • 洛斯里克的高墙 篝火#2下梯子被射箭附近的房顶

火焰宝石

  • 陪葬品

骨灰

  • 埋葬者骨灰:不死聚落白桦树附近

重要流程

  1. 不死聚落带回巡礼者,找巡礼者升5级
  2. 探索活祭品之路,获得亡命骑士套装
  3. 探索法兰要塞,不打BOSS
  4. 黑暗之手,打冷冽谷的舞娘
  5. 探索洛斯里克城妖王庭院无主墓地,打英雄古达
  6. 巨人尤姆之后再打艾尔德利奇