红酒炖牛小排

把牛小排切块,在热铁锅里煎,每面6分钟。
煎好后取出牛排备用,倒掉一部分锅里的油脂剩两勺左右,炒洋葱丁胡萝卜丁芹菜丁(一个洋葱、两根胡萝卜、两根芹菜),炒6分钟,加入两勺番茄膏炒一分钟,倒入750ml红酒,烧开,煮至酒味蒸发约五六分钟,加入牛排、两片香叶,一些百里香,加入牛肉高汤两碗,进锅慢炖。或者高压锅,高火上气后45分钟。同时另一个锅里小火蒸法一整瓶波特酒约一个小时,直到糖稀状。肉炖好后取出包在锡纸里保温备用,肉汤过细筛,压碎汤中蔬菜挤出汁,将炖肉汁加入蒸法过的波特酒中继续蒸发,菜谱说约一个小时,直到浓稠能挂在勺子上。将肉放回酱汁锅中重新加热,调味摆盘。

我今天时间比较紧,最后没能把肉汁慢煮蒸发一个小时,大概煮了二十分钟最后用黄油水淀粉勾了个芡(要被西餐厨子揍了),确实这个菜精髓在酱里,做起来也颇费功夫。今天的这块肉质很不错,虽然有肥的部分但是并不腻。可以说跟有一些餐厅也差不多了。可以提升的大概是酒的质量,我的做饭用葡萄酒甜味有余丰富度不足,今天手头没有波特酒替换用了雪利酒(…可以这么替换吗),按照我的想象勾兑了一点蜂蜜酒,做出的酱汁偏甜,下次可以思考怎么弄一点酸味加进去。总之做的还挺成功的。最近做饭能力有点提升大概

Chicken Tikka Masala

系学生活动室里,关着灯就一个人,我饿坏了。终于吃到一碗Chicken Tikka Masala配米饭和蒜香大饼,许多味道一并涌上头来,似乎感官都敏锐了些。我发现活动室比记忆里的更晦暗许多,原来是新冠前重新装修时候加了木头格栅和屏风,淡黄色灯罩换了酒店样式的高级白,取下墙上系主任们的头换了两幅浮世绘,拆掉了装满旧书的木柜子换了封闭式玻璃展示柜,里面稀稀疏疏地用金色支架展示着教授们的著作,伴以多肉植物,一个个整整齐齐在六角形小瓷盆里。整个屋子弄成半亚洲半西洋的一派滑稽模样。一天天地透不过气来又站在几百个厚的“小波分析”边上,多肉植物也会有些打蔫,我越来越觉得不属于这里,不该在小波分析边上再带个一二三载了。

好在Tikka masala真的非常香,我吃了一碗又续了一碗(因为我买了一桶)。想起领外卖的时候路过一家旧书店,那是博一时常去光顾的地方,或是午饭后闲逛,或是周五下午一起去酒吧前在那里等人。那些旧书我也并不购买,就是一本一本翻直到看见熟悉的作者,叹一句“这本听说过”。那时候我其实不喜欢读书,人是靠惯性活着。那年,学长语重心长地通知我,导师永远离开学校的时候,也是在这间书店前,那天我翻到了一本卡夫卡。这竟已是四年多前的事情了,陪我一起吃午饭的几位同学,一半退了学,一半挣扎进更深的泥潭。唯有一人毕了业在岛国吃炸鱼薯条。

但是我堵塞的鼻子似乎放松了许多,浓厚的酱汁卷着米饭一勺一勺下肚,填饱了饥腹甚至还放松了神经。香料分子冲击下,更显得空气确乎是太闷了。我讨厌墙上的假浮世绘,它们并不比那些丑恶的系主任的头像柔和一点点。那些中式屏风和北欧吊灯又有什么意义呢,整个屋子还是一潭死水。唯一有趣的在于窗外一颗老树。校园里的樱花要开了。这让我久违地非常激动:虽然往年并不赏樱只是笑笑这些樱花吸引来的游客,今天我却感到兴奋,我快要加入他们了。等天气暖和,我就到外面去吃我的tikka masala,在水池边、大树下,离开小波分析和系主任的头像。等到花谢了,夏天就到了。夏日里,在日头重新变短之前,我大约可以毕业了。

芋饼

今天做了宝可梦阿尔宙斯里的芋饼,挺好吃的。做法特别简单。网上的攻略五花八门,有画的特精美的,还有这种cos的加上游戏音效bgm的,反正都是把土豆微波4分钟放凉碾碎加土豆淀粉(和一点奶)捏成团煎到两面金黄,之后用两勺糖+两勺味啉两勺酱油的汁烧热蒸发一下,烧煎好的饼就行了。

youtu.be/EDgnXu599p8

Provoke

今天读了一篇讲联合赤军和日本“政治的年代”里革命思想变化的文章。我想,虽然日本学者喜欢的宏大叙事不一定准确,但是断代叙事法描摹了一股清晰的思想变迁的过程和影响,就像冰川划过河谷留下的痕迹分辨出其走向。

而同时,中国的革命冰川实质上被搬空了,我从小的教育里,革命这个词变成了一种特有的、固定用法的、表演式的名词,是革命™,是一种样板戏。革命像是宗教物件一样,正确和错误都被束之高阁不许置评。公民运动被冠以各种各样的名字,也都试图剥离其斗争本质,暴动也好、散步也罢,都似乎是从动作来定义思想。这时候我意识到日本学者断代言“梦想的时代”的好处:套在时代思潮的框架下,剥去这些动作,可以试图感知人到底在想什么。隔离思想而独看行动,也是一种霸权的视角。遗憾的是很长一段时间里我们这么看香港、看欧美、看阿拉伯,却不敢看自己。

我对革命的直观冲击印象来自于2014年于芝加哥艺术馆的特展Provoke: between protest and performance photography in japan. 这是一览摄影展,Provoke是日本六七十年代短暂存在的进步杂志,用大量图片记录了一系列的社会斗争,比如成田机场问题和三里塚斗争,黑白图片影相是最有冲击力的。文字描述里总会提到学生思潮,这又是一个我感到陌生的事物。似乎从小的规训总是说,你想得不够周全,你的知识不够多,你需要无止境地学习,年轻时候是什么也不懂的。但也许其实挑战世界改变世界的角色并不一定需要想得明白 —— 这也是我后来看《少女革命》时候恍然大悟的,革命是一种与生俱来的直觉。精细的定义、耐心的操演、满怀热情的会议,只能保留下一个空空如也的壳子。最后,因为没有了语言,甚至无法思考。

你要死灭吗

今天洗澡的时候反刍社会政治新闻,脑子里冒出一句质问的话,“你要死灭吗?”。我想了许久没有想到出处,查阅才想起来是萧红《生死场》一章的标题,这一章里历经苦难的村民们决定置生死于不顾而投入抗日。标题并没有出现在文中对话里,而更像是作者对人物命运的质问,如果不这么做,你要死灭吗?读生死场的时候,我被这段时期东北农村的苦难深深地触动,但是对于民众参与救亡运动的言语觉悟一直感到一丝理想化的雕琢痕迹。但是后来单独拆开这一章读,结合其发表的时代背景,越来越理解这个标题的意味,命运是忙着生忙着死,而改变需要来自于这样的逼问。这让我想起另一处关于“死灭”的问题,是鲁迅的《呐喊》自序里铁房子的比喻,“不久要闷死了,然而是从昏睡入死灭,并不感到死的悲哀”。唉。

Wordle 提示器

心血来潮写的Wordle提示器,思路大概如下

  • 把谜题中已经暴露的信息转换为正则表达式
    • 绿色=固定字母,黄色=含有字母&位置错误,黑色=不含字母
  • 从词表(*)里筛选出符合规范的词,即所有的“可能答案”
  • 计算所有可能答案的mutual information,找到之中mutual information最大的(几个)词(**)
    • 这里使用了简单的计数法:绿色=2分,黄色=1分,黑色=0分

注:

词表:我用了github上的这个词表derekchuank/high-frequency-vocabulary。经嘟友@[email protected] 提醒,其实wordle有dump出的词表,词库大约2.3k,允许输入大约10.6k,来源自这个reddit讨论串 a_note_on_wordles_word_list/。可以自行替换。

答案表:reddit的讨论指出每期问题的答案是人工挑选的而非随机抽取,这意味着信息分布与默认的平均分布不符。Well,既然答案表有2.3k词,就算是人工挑选也足够多词了。

有趣的发现:

  • 从词表上来看,最好的“起始词”并不是adieu而是rates, aries, cares, lanes这几个,因为u这个原因出现次数其实不如辅音r和s高
  • 就算用词表作弊,也挺需要运气的,比如Wordle 243,最后需要从4个合法词里随机尝试,我的这个策略的步数期望值是4.

代码大概这样

import numpy as np
import re

# # create 5-letter word list
# with open("30k.txt") as file:
#     for line in file:
#     	w = line.rstrip()
#     	if len(w)==5:
#     		with open('5letterwords.txt', 'a') as fnew:
#     			fnew.write(w+'\n')


def info_score(target,current,matchscore=2,containscore=1):
	"""
    compute information score
    target: target word
    current: current try
    change the scores to optimize the searching process
    """
	s = 0
	for i in range(5):
		if current[i]==target[i]:
			s+=matchscore
		elif current[i] in target:
			s+=containscore
	return s



def main():
	# run hinter

	# get word list
	with open("5letterwords.txt") as f: 
		words=[line.strip() for line in f]

	# initialize masks
	letters_contain = []
	pattern = ["[^0]"]*5
	done = [False]*5

	while not all(done):

		# new inpt from user
		w = input("Please enter your first try word: ")
		m = input("Please enter your result (black=0,yellow=1,green=2): ")

		# loop through new input
		for i in range(5):
			if m[i]=='2':
				# correct, remove regax mask and mark as done
				pattern[i]=w[i]
				done[i]=True
			elif m[i]=='1':
				# semi-correct, add to contain list and mask this index
				letters_contain+=w[i]
				pattern[i]=pattern[i][:-1]+w[i]+']'
			elif m[i]=='0':
				# wrong guess, add to all regax mask
				for j in range(5):
					if not done[j]:
						pattern[j]=pattern[j][:-1]+w[i]+']'
		# exit if done
		if all(done): 
			print("You solved it. Bye.")
			exit()
		# apply regax and contain list
		words_new = [wd for wd in words if 
				re.match('^'+("").join(pattern)+'$',wd) 
				is not None and all([l in wd for l in letters_contain])]
		# exit if funny problem happened
		if not words_new:
			print("out of words, maybe something wrong?")
			exit()
		# compute similarity matrix
		sim_matrix =[[info_score(x,y) for y in words_new] for x in words_new]
		# zip and sort and print results
		mutural_info_sums = list(zip(words_new, [sum(x) for x in sim_matrix]))
		best_guess = [x[0] for x in sorted(mutural_info_sums, key=lambda x: x[1],
			reverse=True)[:5]]
		print("Best next guesses are "+(", ").join(best_guess)+".")


if __name__ == "__main__":
    main()

效果大概是这样

答案是robin

答案是slime:

答案是abbey:

答案是aloft: 很奇怪这个词不在30k list里

塞尔达传说-织梦岛

四舍五入我就是吕游

因为几个月前才打完众神的三角力量A link to the past(我知道英文翻译不重要但是我就是特别喜欢这个翻译),织梦岛这一作上手感觉很舒服且熟悉,地图和怪都很像。查了一下这一作本来是作为三角力量的掌机版在业余时间开发的,也难怪有这么多好玩的对话和搞笑的客串

我海拉鲁破坏王又回来了。不知道是不是因为刚打完三角力量,这作一开始两个地牢的boss都是基本上无损过的嘿嘿。目前感觉很好玩!

我发现我心中的林克形象就和游戏里一样地有点木木讷讷的,人形探险机器。这段之后和玛琳一起走的时候可以触发各种对话,我走了一圈忘了带她抓娃娃机,看了网上视频发现这段还挺逗的(玛琳是娃娃机达人)。就是我觉得我的林克好像也不太会想到去抓娃娃

想了想还是心里过意不去,读档回去继续带玛林转悠了。玛林对话都挺逗的,挺喜欢这个角色

通关了!一场美丽的梦,很喜欢这个有些meta的结局,最后风鱼的话就像对玩家说的,谢谢你和我们一起探险,希望这也成为了你的美好回忆。打通游戏之后有些失落的滋味,和林克一起共享了

还有一个很喜欢的地方是收集八种乐器,一起合奏风鱼之歌。这作游戏里,林克是彻头彻尾的外乡人,随波涛漂流到岛上,串联起世界的秘密的过程也其实是瓦解世界的冲突过程,风鱼之歌有一种古老的味道,像是给远去的旅人的呼唤……

……我应该把它设成手机闹铃!