首先来分析一下博客的访问量数据。在 2023 年,总共有约 2000 名用户访问博客,并且来自世界的各个地方。当我看到有来自印度,巴西,加拿大的访客时,我是很吃惊的。稍微深究一下后发现,来自大中华区域的访客会访问具体的文章页面,而来自其他区域的访客(日本、阿根廷等)则是只会访问首页。不排除是因为这些地方的用户看不懂中文,我感觉是爬虫请求的概率很大。
2023 年博客访问量
2023 年用户地域来源
大概有 40% 的访客是源自一个刷访问量的网站,我不知道是谁给我放上去了还是怎么样的。为网站引流的大户是搜索引擎没跑了,剩余的就是来自友链的贡献了。比较有趣的是我在 referral 里面看到了一个 Google 的反代…
2023 年用户来源
然后来看看访问最多的几篇文章。首当其冲的是安装电车 GO 的教程(写于 21 年),然后是 wireguard 异地组网的教程(写于 22 年),接下来是关于 Android captive login 的文章(也是写于 21 年)。虽然我 23 年确实没写多少文章,前 10 里面一篇也没上榜还是有点逆天了。可能影评真的没人看吧。
2023 年浏览最多的文章
来说说项目吧,这一年做的东西还是挺多元的。
暑假的时候几个人二开了一个文件管理系统,基本上除了基础架构都重新写了一遍。前前后后一共产生了 60k 行屎山。这个项目好像具体内容不能说,就放个代码行数统计吧。
这个项目我主要是做的运维和比较小的代码改动。凭借这个项目也让我豪横的尝试了一下购买 4 台 hetzner 的 5950X 服务器的感觉。很可惜,这个项目具体的技术细节也不能说。
这个是学校的一个作业,用的 Vue2 + Nodejs 做前端。写出来的东西纯纯屎山,果然 typescript 的出现不是没有道理的啊,JS 写起来太坐牢了。借着这个项目,也算是彻底的玩了一遍 Azure Function App 和 GCP App Engine,最后用下来的感受就是免费的东西限制真 nm 多。因为代码写的实在是太屎山了,成品就不放出来了。
这个是我的毕设,别看标题这么长,说白了就是把 sixxs 的服务端实现一遍。当初和导师聊的时候,他信誓旦旦的和我说,他们(sixxs)的服务端一直都没开源,我找他们要了代码他们还不给我。你要是能把他们的服务端重现的话,够做个毕设了。然后等我中期报告都写完了,在整理 reference 的时候,发现 sixxs 在项目结束的一年之后把源代码给放出来了…
这个博客 23 年还算是过的不错吧,吸引到了访客也不妄失它存在的初衷了。24 年继续尽力更新,希望可以增加访客的停留时间。要是友链可以接着丰富一下就好了。
那么 2023 的年终总结就到这里啦,祝读到这里的你 2024 年顺利。
中规中矩的电影,没有可圈可点的地方,也没什么大短板。我个人不是特别喜欢超级英雄类的电影,这部海王没踩我的雷,给我的观感比漫威最近几部自己操手的电影要好。给个 7 吧,真的没啥能拿来说的,就是我期待中好莱坞电影的标准水平。
我是看了它的预告片种草的,等看到媒体评分出来,我没想到能这么低(6.6)。我不信邪,还是去看了,但是这个片子开始没几分钟我就想跑了。之前看《长安三万里》,有一个影评,大意是 “看到这部片中对女性的描述,(笔者)不免对大唐时期的女性地位感到悲哀。”相对比之下,《拿破仑》中对于女性角色(拿破仑第一任老婆)的塑造能让你背过气去。如果你看到一位女性坐在椅子上,双腿打开撩起裙子,说 “If you look down now, you will get what you want” 的时候我相信你也觉得离谱。
这部影片对拿破仑的形象塑造也很有失偏颇。不过一想到这片子是全英语独白,由英国人执导,并且英国佬看片子的时候乐得那是一个开心的时候,似乎也就合理了。
西语电影 The Invisible Guest 的翻拍。这种悬疑电影还真就是只能看一遍。我看原版的时候没觉得尬与牵强,反而觉得牛逼。但是看瞒天过海因为知道后面会发生什么,只会觉得尴尬。这部我看了开头就看不下去了,也没法过多评价了。
这部宣称是宫崎骏最后一舞的作品,也是极具宫崎骏个人特色的一部电影,有别去其之前的作品。都说吉卜力的电影受众其实是大人,这一部也不例外。在刨析具体原因之前,还是先说一下电影的节奏。从节奏和故事走向上来讲,这是一部非常经典的吉卜力宫崎骏作品,少年/少女的生活因为突发的事情而改变,在旅途中他们遇到了伙伴,要和伙伴一起打败坏人回家。前期节奏非常舒缓,甚至可以说是有点过于缓慢。入活铺垫让这部电影的前半个小时很容易犯困。与之对比之下,新海诚的叙事风格虽然也是偏于前期舒缓的,它会偏向于开头来一个大的,便于入活。相比之下,这部电影的剧情反而更让我着迷。可以说,它阐述了宫崎骏的个人故事,也包含了对于吉卜力工作室的担忧,更蕴含着对于日本二战的无奈。它的剧情真的很有意思,细细品味能得到不同的味道,这是我很喜欢的。因为剧情的缘故,主观上我可以给出 8 分。但是考虑到前期节奏和剧本中功能性的情节,这部作品大概只能达到 7.5。
这是第一部由韩国拍摄的韩国双十二政变的电影。个人感觉这是一部拍的很好的电影。人物形象的塑造,剧情氛围的渲染还有对观众感情的调动是很到位的。节奏上也不拖拉。不同于我之前看过的韩国偏政治类电影,首尔之春的叙事没有让我感觉到压抑,也没有让我感觉到无聊。它虽然不是纪录片,但能够以一个心平气和的过来人的身份讲那时的故事向你娓娓道来。我觉得这部作品对于现实事件(还是 BE 的)改编电影的处理做的很好,有原始时间的内涵,也有出于电影娱乐本质的保证。这才能算是一门艺术。
NHK 的收音效果算是变好了吧,但是今年的舞台摄影效果让人十分一言难尽啊,特别是 seventeen 的过曝。今年红白 k-pop 的成分十分明显的变高了。无论是韩团数量,还是歌曲的 style 都有在韩化的趋势。
这篇博客从 2023 年写到了 2024,还没包括圣诞档的电影。主要也是因为好莱坞罢工导致圣诞档就一个 wonka 和海王;wonka 还没什么好写的。下一次再发影评可能要等到我看完沙丘 2 之后了。
]]>为什么不用 JFreeChart?
太丑了。
ALevel 数学老师已经教过,Histogram 和 Bar chart 在外观的区别在于 bar 之间有没有间隔(histogram 的 bar 之间没有间隔),以及 Y 轴代表的是 frequency(histogram) 还是具体的数值(bar chart)。XYCharts 允许我们设置 Bar 和 Category 的间隔,这就好说了。
BarChart histogram = new BarChart<>(xAxis, yAxis);histogram.setBarGap(0);histogram.setCategoryGap(0);
下一个问题就是统计正确的数据。我们可以用一个简单的 enhanced for loop 来统计不同 bin 的 frequency. 直接上代码:
double binCap = binSize; // 这是 bin 的大小(间隔)。比如 0.2double binBottom = 0; // 最小的 bin 的起始点,这里设置的是 0.double frequency = 0; // 初始化 frequencyXYChart.Series<String, Double> series = new XYChart.Series<>();double[] data = new double[]{1,2,3,4,5,6,6,7}// 源数据。需要从小到大排列。for (double i : data) { if (i <= binCap) { // 这个值在当前 bin 的范围内。增加 frequency. frequency++; } else { // 这个值比当前 bin 大了。把当前 bin 的 frequency 信息及 interval 加入到 series 里面。 series.getData().add(new XYChart.Data<>(binBottom + " - " + binCap,frequency)); while (i > binCap) { // 更新 bin 的 interval,跳过空的 bin binBottom = binCap; binCap += binSize; if (i > binCap) { series.getData().add(new XYChart.Data<>(binBottom + " - " + binCap, 0.0)); } } frequency = 1; // 重新开始计算 frequency. }}// 把最后一个 bin 的相关数据加入 seriesseries.getData().add(new XYChart.Data<>(binBottom + " - " + binCap,frequency));histogram.getData().clear(); // 防止 histogram 里面已经存了数据,清空一下histogram.getData().add(series);
为什么不直接操作 XYChart.Series?
简单来说,只有在读取一个 Series 的内容的时候,这个 Series 的内容才会被生成。所以当我们还在往 Series 里面存入数据的同时要读取里面的内容是做不到的。
Win
+ R
键打开“运行”对话框。inetcpl.cpl
,回车。傻逼 Windows,傻逼微软。
]]>你有信心去挑战死亡吗?
这部动画的动物外观塑造我很喜欢,不是疯狂动物城那种每一根毛都渲染的清清楚楚的,而应该是刻意做了模糊处理。Dreamwork 把这带 Puss in boots 的身体比例做了些调整,和它的前作对比起来,1 当中的主角更像一只猫,这部中的主角则更像人了。变得更加真实的不仅有 Puss in boots, 影片里的配角,Kitty,棕熊一家,Perrito 做的都很上心。总体来说做的很好的动画风格。
这部电影的打斗场面很符合我的喜好,他们没有追求画面的连贯和丝滑,和阿凡达 2 一样。反其道而行之,采用抽帧效果。看起来有那么一点定格动画的感觉。场景的搭建,配乐的感情渲染做的很到位。
这做的剧本写的就没什么新意了。一个坏到想要毁灭全世界而必须被除掉的反派,一个想要“真正的家”的不够坏的反派,一个需要主角克服的心底的恐惧,喜欢主角但是被主角背叛过后封闭内心的猫,和童年经历十分凄惨却仍乐观的想要治愈别人的小狗。他们凑到一起,想要获得一个能实现他们愿望的东西。剧情大体的走向基本上都能猜出来,没讲什么大道理,就打打亲情牌,友情牌和爱情牌。因为片长在这里,不包含毫无必要的转折,反水等等剧情。很治愈的一部片子,能吸引小朋友的眼球,又蕴含着只有长大以后才能看懂的情感。
电影里面融入了很多童话元素:Excalibur,阿拉伯飞毯等等。让我还是蛮怀念的。就是不知道看熊出没,小猪佩奇,汪汪队立大功这种动漫长大的小朋友能不能 get 到了。
我心中的贺岁片
算是今年看的第二部香港法律片了。不过这不算是严格意义上的法律片,更像一个贺岁喜剧片。所以关于片种涉及到的各种法律专业相关问题就不在我的考虑范畴内了。电影的节奏控制很好,看黄子华怼人也很爽很解气。
电影的剧情围绕着 “正义” 展开,男主(黄律师)从给有钱人擦屁股,转变成了会不计收益的给穷人打官司。这种剧情还是挺搏大众喜欢的。这部电影和《正义回廊》一起,算是给我掀开了香港法庭、法律的一角。两部电影放在一起看还是蛮有趣的。
献给女权的片子
奥斯卡最佳改编剧本得者。影片讲述的是一群在殖民地内的妇女,面临着来自男人的压迫和性骚扰,企图改变自我命运的故事。这也是我对它的小评是 “送给女权的片子” 的原因。如果你反感这个 tag 的话,就别看了。电影的构图不错,有些画面很有表现力。它的颜色调的特别阴间,全片都是灰蒙蒙的,有一种用彩色电影冒充黑白电影的感觉。
影片的绝大部分时间都被花在了谈话上。不同的人提出不同的观点,有的被驳回,有的被认同。当大家似乎陷入僵局的时候,也会有人出来调节气氛;尝试寻找别的思路。能看出来导演和编剧尝试了让影片不至于太过无聊,但是因为这片子的性质,观影还是挺煎熬的。我看这部片子的时候,还发生了个小插曲。影厅里有两个中国女生,其中一个在观影过程中经常看手机,被一个老白男喊了 “Turn your phone off”.
这部电影有一处值得耐人深思。电影开始的时候,有一行字幕提醒:“以下情节是妇女们的想象”。所以片中他们讨论出来的结果是不是真的被执行;她们讨论的过程是否如期进行;甚至讨论是否真实发生了,我们都不得而知。
坏女人是如何毁掉一个人的
金马奖最佳原创电影音乐奖得主。我没听出它的配乐有哪里出众。影片剧本逻辑上其实不太自洽。影片的背景是疫情时代下的香港,我本来以为这是个讲述疫情对普通人生活的电影,但是我没看出来。在我看来,导演就想告诉我,不要因为坏女人毁掉你的生活,也不要一直太正直做老实人。
这篇本来也是想在二月份发的,但是一直没写完。拖着拖着就到了四月了。还有几部看了的电影没写,就把他们放到四月份的影评里面吧,如果他们能如期而至的话(笑)。
]]>快节奏的工业电影。
流浪地球 2(后面简称为球)针对一个连续的事件,以两种视角(基层,和决策层)展开进行描述。讲故事的方法很好,条理清晰。虽然设定是流浪地球 1 的前作,但是剧情上的关联不是很大。只要知道流浪地球 1 讲的是要把地球推走满太空跑就行。我是没有看过流浪地球 1 的,这对我理解这部续作的剧情没有影响。本作的特效效果是拉满了,几千万的投资已经赶上两三亿美元的特效水平了。
在不错的特效的同时,球的剧本就有些瑕疵了。尽管电影的叙事能力可以,但是这没法遮盖它剧本太过复杂的事实。影片全长 2 小时 55 分钟,这还是在它剧情发展很快的前提下做到的。影片前半部分发生的剧情和后半部分发生的剧情除了在时间线上存在先后顺序外,好像并没有什么联系,甚至逻辑关联都没有。全片可以以推月计划发动机点火成功为分割点,非常完美的分成上下两部。在球剧情里面发生的对人类的挑战,例如要用地球全部核弹引爆月球,似乎就是随机事件,确又死死掐着人类命运的喉咙,迫使人类走最艰辛的那条路,完成 流浪地球计划。这部影片似乎在暗示,这些突发事件和 数字生命(一个影片里的概念) 有关,却又没有进行解释。这条线索就好像剧情里面数字生命的结局一样戛然而止。这样反而把所遇到的危机营造的非常刻意。面临这些危机的决策者和基层人员互相从未见面,但是决策者深深相信这自己国家的基层人员。基层人员也竭尽全力、不顾牺牲自己的生命也要完成使命。这铺面而来的集体主义味道十分浓烈。
在别的科幻片侧重丰富世界线的时候,流浪地球在很努力的想要让我们哭出来。很多的煽情场面让我决得这并不符合一个春节档上映的电影的风格,也不是我想从科幻电影里看到的。
献身于梦想的人都是孤独的。
一部讲述导演 Steven Spielberg 家庭故事的电影。中文译名 造梦之家 可以说是十分贴切。有关剧情的刨析可以看看 这篇豆瓣影评,我觉得是写的很不错的。这部电影我是和球在同一天看的。它的叙事是娓娓道来的,没有球的那种急促。整体风格很轻快。电影讲的是导演自己的故事,看起来有一种亲切的感觉。男主一家人,各有各的梦想,各有各的理念。在男主还小的时候,一个在好莱坞工作过的长辈就警告他,要想走上艺术的殿堂,要牺牲的,是和家人在一起快乐生活的权利。影片后面也有剧情应证了这句话。有一句话是 A wise man does not fall in love, but a foolish trapped by his feelings.。不过你更熟悉的可能是他前半句的中文译本:智者不入爱河。在这部电影里面,主角一家称不上智者,他们只是很明确的认识到了自己想要的是什么,也就是自己的梦想。在实现自己的梦想的途中,他们也不可救药的爱上了别人。可是他们没有被自己的情感限制住,他们可以为了实现梦想,忽视至亲的人的情感,或是抛弃对于情感的需要。这有些强硬,也有些无情。但是幸运的是,他们还是能够互相理解的,也尊重对方想要走上的道路,没有被心中的不甘与失望而反目成仇。把造梦者逼迫到孤独的地步的,是他们的梦想。而支撑着他们走下去的,也是他们的梦想。
不了解爱尔兰独立战争的话看不懂
这片子的名字也太难记了。。。影片讲的是爱尔兰内战,被奥斯卡提名最佳影片了。去年讲爱尔兰独立战争的电影 Belfast 也获得了奥斯卡提名。整部影片是压抑的、阴暗的。它对于爱尔兰内战的全部描述,是开头提了一句主岛(爱尔兰本岛)在打仗,结尾提了一句本岛的战争结束了。全片都在讲男主和他的好哥们的友情破裂后发生的事情。这部电影有非常多的对话剧情,打光和镜头的设置别具心机。非常有趣的是:除了在结尾,好像没有人一同出现在阳光下。
我对爱尔兰独立战争并不了解,所以影片里映射的很多内容都品不出来。所以抛去影片在讽刺的含义,在我看来这就是一部拍的不错的 文艺 谜语片。演员所塑造出来的角色真的很好。男主和男配对戏很妙,他们演出了爱尔兰人的那种固执,以及不愿抛弃家乡的情怀。甚至略有些偏激,倒也不会让人厌恶。从他们二人身上,我看到的是表演的深度。这部电影名字里面提到的报丧女妖,是爱尔兰迷信传统文化的一部分。在这部电影里是作为一个推动剧情发展而存在的角色,也算是增加了些爱尔兰特色吧。不过关于报丧女妖这个成分,导演好像没想把她圆回来,就让她作为神话故事里面那样神秘的存在。我觉得这是个遗憾。
伊尼舍林的报丧女妖很成功的激发了我了解爱尔兰内战的兴趣。对于它来说,也算起到了导演希望的作用吧。
情怀电影
剧情虽说无功无过。而我不能接受的是,同一个电影里面人物的画风有三种风格。有一段的人像是完全崩掉了。很难想象 A1 在做什么,不知道的还以为他们今年大楼也着火了。
这部电影让现在的我来看,是欣赏不来了。如果让年轻五岁的我来看这部电影的话,我可能会很喜欢。只不过现在已经过了那个年纪了。我会想要看一些更有内涵的剧情。
烂片别看。
我去看这个片单纯是因为有两个小时的空窗期没地方去。这电影剧情感觉就是瞎凑。电影里男主(好吧我也不知道是不是男主,因为电影里主角团是一对 gay 加他们领养的女儿。我觉得他是男主是因为他话多。)被要求牺牲自己挚爱的人,以换取全世界所有人的平安,否则就要和对象,女儿三个人一起在世界上痛苦的活着。诚然,每个人的选择会不一样。非常经典的电影大英雄的做法可能会是想要出手改变这个情况。成败也好,他努力了。他抵抗了这个世界给他的使命。他对象能不能活下去就看编剧想怎么写了。但是电影里的男主不一样。他非常坚定的认为这一切都是巧合,或者是计划好的骗局。并且要求自己的老公也相信,这一切都是骗人的。当这个世界有些事情变得不正常,证据开始一点点的摆在男主面前,他还在非常坚定的否认摆在他面前的责任。这或许就是一个像我们一样的普通人,可是这不是我去看电影的理由。当影片里一直充斥着一个软弱的人在推脱,在辩解的言论时,这让我感到厌烦。尽管这是很真实的反应。主线剧情中插入的过往回忆显得十分生硬。我也不认为这部电影成功塑造了哪个角色。除了男主,塑造成了让我很厌烦的一个角色。
抛去满目苍夷的剧情,这部电影的环境氛围渲染做的十分出色。介绍人物入场,悬疑场景和 “天谴” 的场景镜头搭配上配乐效果是很棒的。如果不带脑子看的话,应该体验会好些。
我觉得 under-rated 的爱情电影。
这部电影在豆瓣评分 6.3,imdb 评分 6.2。想见你很符合我对一部爱情电影的预期的:因为恰到好处的机遇,两个人无可救药爱上了彼此。有人说演技尴尬,我其实觉得还好。配合主题曲的插入,氛围渲染的不错,让人很容易入戏。这部电影的剪辑,剧情的发展节奏,反转的安排我认为都是做得很好的。它所渲染,表达出来的情感很立体,让人感觉很真实。让我给的话我能给个 7.3
影评本来就是个很主观的东西,白菜萝卜各有所爱。写这些东西,说实在的我也不知道为啥,费力不讨好。但是我就是觉得,看了一部电影,那这部电影就值得我去点评一下。谈不上什么抛砖引玉,要是能凭借这些认识些新朋友的话,我都很高兴了。
二月底应该还攒够一篇影评,到时候见了。
这一部 Avatar 音轨有 IMAX 12 Tracks, Dolby Atmos 和 IMAX 6 Tracks 等等。画面上 IMAX 3D 是 2K@48fps, 1.90:1 的格式。Dolby 3D 则是 4k@48fps, 1.85:1. 不过不是全片 48fps, 只有部分镜头是 48fps 的。
这一次 Avatar 的 CG 制作技术是十分可圈可点的。能体现出这一成就的就是对于水的渲染。在过去的 CG 电影中对于水面的渲染基本上以宏观居多,很少有做到给局部水面的特写,因为没办法渲染的很真实。但是在 The way of water 中,他们对于渲染水的把控提升到了另一个量级。其中一个就是在预告片中已经出现的一个局部的水面镜头。
这样真是和成片和国产 CG 动画制作扛把子 - 追光最新出品的的杨戬一堆比起来,就显得降维打击了。
这次电影对于镜头的把控,可以说很大程度上都是为了制作 3D 而设计的。从成片的效果来看,卡梅伦没有辜负我的期待。这是一部把近些年 3D 技术的发展成果非常成功的展现出来的答卷。特别是配合 BFI IMAX 的超大屏幕,体验极佳。这部片子也证明了在影院看电影的重要性. 它所表达出来的那种沉浸感是无法在流媒体上领略到的。从 BFI IMAX 的能充满整个视野的超级大屏,缩水到 Dolby Cinema 的屏幕就能让我感觉有些出戏,就更不用说不同影厅的小屏和手机、电脑了。
这一部阿凡达正片全场 3 小时 12 分钟,我愿称之为影院厕所杀手。我在 BFI IMAX 影院看完之后,它的厕所里人挤爆了。连男厕所都排队排了好长,最后我是跑到旁边的 Waterloo Station 上的厕所。造成这个时长的原因,是缓慢的叙事结构,以及让人有点摸不到头脑的剧本,再加上过多的角色。在这一部阿凡达中,主角一共有 4 个孩子外加一个和他们一起玩的小孩。另外还有他们去令一个部落后,那个部落酋长的一堆孩子(不过细分多的就两个)。加上两个部落的酋长和他们的老婆们,这已经是 11 个人物了,甚至还没有算反派。尽管有这么多的角色,卡梅隆还是在尝试让观众了解到每一个角色的设定。事实证明,这样做的效果并不好。第一遍看下来之后,没有哪个正派角色给我留下了很深的印象。我甚至在结束的时候都忘了男主他大儿子长啥样了。我感觉 James 为了突出部分角色,加入了更多的角色和戏份。这就导致拍了很多对剧情没什么推进力的戏份。他甚至还有时间挖坑给续作。
我觉得更搞笑的是,我看到第二遍才意识到这次人类入侵潘多拉是为了什么。在我看第一遍的时候他解释完了,后面剧情一出我就给忘了。导致第一次看完后,我和我的朋友们以为是因为要赚钱才来潘多拉的。这让我觉得,Cameron 的这一部阿凡达在剧情设定上十分的唐突,经不起琢磨。影片结束之后我发现,卡梅伦好像什么都没讲。这是一部剧情上很失败的作品。
坐落在 London Waterloo Station 旁边的 BFI IMAX, 唯一的一个影厅拥有着目前英国最大的电影荧幕(约 400 多平方米,1.43:1)。他们今年刚换了新幕和 IMAX Laser 映射机,并且升级了音响系统为 IMAX 12-Tracks Digital Sound. 他们之前还有 IMAX 70mm 激光胶片放映机,应该是有保留的,毕竟他们有一盘电影胶片是华纳直接提供的母带(我忘了是哪部了),如果撤了就没法放了。12 Tracks 的音轨绝对是提供了更好的声音体验。这次去他们正好有在放映 Oppenheimer 的预告片,效果很棒。放映厅的座椅也和之前有所变动:VIP 区域的椅子更软了,腿部空间也更大了。之前是腿在前面刚刚好的空间,升级之后前面放个包还能很轻松的过人,可以想象空间有多宽裕。Standard 和 Premium 就不知道了,没去坐。VIP 一张票 27£,Premium 26,Standard 23. 在大屏的特效影厅里,这是非常有性价比的一个选择了。
Odeon Luxe West End 坐落在 Leicester Square,是 Odeon 在伦敦两个 Dolby Cinema 中的一个(另一个是 Odeon Luxe Leicester Square, 就在他旁边)。West End 有两个影厅,只有 1 号厅是 Dolby Cinema. 虽然荧幕比 BFI IMAX 小了不少,但是有 Dolby Cinema 的加持也是很能打的。就这部阿凡达来看,它的 Dolby Atmos 展现出来电影里很多音效的细节,以及发音源的精准定位 - 这些细节是没有办法被 12 Tracks 所展现出来的。它的荧幕给我感觉比 BFI IMAX 要亮(也有可能是因为这次我坐的考前),低音效果还要足。它的座椅是电动可调节的,靠背可以往后,有腿托可以升起。但这个椅子有点傻逼,它的问题在于,如果腿托不完全生气,靠背是没法往后靠的。初始位置的靠背是比较直的,并不舒服。可是如果腿托升到最高位,时间长了放在上面的腿会不舒服。座椅的空间也没有 BFI IMAX 大。如果不考虑观看 3D 电影和 IMAX 独占篇幅的影片的话,综合来讲我其实是更喜欢 West End 的。
]]>买的 Soundbar HDMI 输出最高到 60hz, 可是我是 165hz 的显示器。打游戏的时候可就出大问题了,要么忍受 60hz 惨痛体验,那我买 165hz 的显示器干啥呢;要么每次打游戏都手动插线拔线调整。解决方案是有的,但是需要 Soundbar 有 HDMI IN + OUT 两个输出,外加显示器有两个信号输入(可以是 DP + HDMI)。我的电脑使用的是 Windows 10,Windows 11 不知道会不会有效。
我打赌有人看到这个标题,绝对会说 “为什么不用 Digital Optical Cable?”。答案很简单:受限于带宽,它不支持多 channel 的 LPCM 协议。比如 Dolby Digital Plus, Dolby Atmos, DTS Master, DTS:X 等等。我觉得要是输出 Stereo PCM 到 soundbar 的话的话,还不如去买个音响连 3.5,完全避免这种烦恼。
我现在是 DP 传输画面,HDMI 传输声音。理论上来说两个 HDMI 分别传输画面和声音也是可以的,但是我懒得试了。我的实现步骤如下:
这个时候还没有完。如果你打开 Windows 显示设置的话,你会发现 Windows 设置里面是双显示器的一个操作。
这是因为 Nvidia 显卡只有检测到它的一个输出端口连接到了一个显示器才会传输数据。所以如果只连接 soundbar 的话会因为没有可以输出的设备导致不输出声音. 至于为什么拔掉那条连接 soundbar 和显示器的线之后它还认为自己连着个显示器,我就不知道了。
话说回来,我们的出发点是要打游戏的时候能打到 165hz。你以为这就完美了?把你的鼠标往显示器的边缘使劲拉,然后再尝试来回来试试。虽然我们没有两台显示器,但是 Windows 认为我们有两台显示器。所以当鼠标被挪到了一台显示器的边缘的时候,Windows 会判断它被移动到了另一台显示器的显示领域。虽然我们压根没有第二台显示器。
这个行为会导致在例如 CSGO 等游戏中,如果往一个方向快速拉枪,你的鼠标会被判断飞出这个显示器。然后恭喜你,你在 CSGO 中站着不动了。等待接受队友的压力吧。
解决方法其实也很简单,装个叫 Dual Monitor Tools 的软件,限制鼠标区域在当前显示器就可以了。
adb shell pm disable-user com.sonymobile.uiccdetection
迫真热插拔 feature 就实现了
]]>HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID
路劲CLSID
,选择 新建 -> Key,并命名其为 {86ca1aa0-34aa-4e8b-a509-50c905bae2a2}
InprocServer32
InprocServer32
这个 key, 双击点击名称为 (Default) 的条目。会弹出一个新的窗口,直接点击确定即可。其 Data 字段应从 (value not set) 变成空白整合包需要放到一个可以直链获取的地方,比如 transfer.sh 这里假设你打的是 tar
包,如果是 zip
, 7z
啥的需要单独装解压软件。如果是 tar.gz
的话也可以,下面的参数改一下就好。alphine 默认装的是 busybox tar, 支持的指令不全。
确保你的压缩包里,服务器 jar 文件名为 server.jar
且在根目录。压缩包名称不要包含除字母外的内容。
先导入这个我摘出来的用来打底的 egg. 点进入这个,然后到 install script 那里,修改下面的内容然后复制上去。
#!/bin/ash## Server Files: /mnt/servercd /mnt/serverwget -O server.tar https://[整合包直链]tar -xvf server.tar
一个 egg 只能对应一个整合包,要加多个整合包的话就需要创建多个 egg. 记得给 egg 重命名,意以免忘了哪个是哪个了。
在 WHMCS 的系统设置 -> 可选配置选项 中新建一个分组。创建一个新的选项,option name 是 egg_id
. 觉得不好看的话可以写成 egg_id|整合包
,这样显示出来的就是整合包。下面的 option 写创建好的 egg 的 id. 可以用 egg id|显示名称
的格式让表单能被人理解。
这里只是简单介绍一下 gnuplot 的一些基础概念,以能画出一个 graph 来作为胜利条件。适用于没听说过 gnuplot 的玩家。如果你是想对 gnuplot 有更深的了解的话,你来错地了。
我是在 linux 上用的 gnuplot, 直接从软件仓库拉下来的。如果在用 ssh 连接到 Linux 然后从用 cli 来调教 gnuplot 时遇到了连接不上 display 的报错,在 sshd 里把 X11-Forward
改成 no.
为了方便解释,下面是我们要用到的 dummy 数据,其保存在文件 data
中。其格式为 [国家名] [日期] [数据]
数据之间的空格表示他们不是一列的。为什么有奇怪的空格,我会在后面解释。我们的目标是把 cases 画到 y 轴,x 轴是对应的时间。不同的国家用不同颜色的线表示出来。
Bulgaria 07/03/2020 0Bulgaria 08/03/2020 0Bulgaria 09/03/2020 1Bulgaria 10/03/2020 1France 07/03/2020 2France 08/03/2020 5France 09/03/2020 10France 10/03/2020 10
set terminal pdfcairo transparent enhanced font "Clear Sans, 16" linewidth 2 rounded dashedset grid layerdefault lt 0 linecolor 0 linewidth 0.500, lt 0 linecolor 0 linewidth 0.500set key bmargin center horizontal autotitle columnhead noboxset xtics nomirror rotate autojustifyset ytics nomirror font ",8"
set output 'graph.png'set term png
timefmt
. 如果你的数据里有不同的时间格式的话(比如 DD-MM-YY 和 MM/DD/YYYY),可以在处理完一类时间后重新定义 timefmt
来解决。xrange
用来设定 x 轴的区间format x
允许设定的时间格式和画在图上的时间格式并不一样(比如设定的是 DD-MM-YYYY, 显示为 MM/DD/YY). 对于规定时间格式的代表符,可以参考附录。set title "Cases by country"set xlabel "Countries"set ylabel "Cases"set xdata timeset timefmt "%d/%m/%Y"set xrange ["07/03/2020":"10/03/2020"]set format x "%d/%m/%y"
set style line 1 linecolor rgb '#d32f2f'set style line 2 linecolor rgb '#afb42b'
using
是用来规定 x 轴数据值和 y 轴数据值的。其格式为 [列 1]:[列 2]
,列从 1 开始数(第一列为 1,第 2 列为 2)。linestyle
是我们之前设置的线的颜色。title
是这条线的图例。这里不支持从文件中获取,必须为设置好的指。如果需要批量获取,可以用一个 bash 脚本生成 gnuplot 的设置,生成的同时传入这个数据。lines
绘制出来的是折线图。如果要画别的图的话,可以参考 gnuplot 的 demo 来改。plot 'data' index 0 using 2:3 with lines linestyle 1 title "Bulgaria", \'' index 1 using 2:3 with lines linestyle 2 title "France", \
fr
, 一个名为 ba
的话,应该是这样的plot 'fr' using 2:3 with lines linestyle 1 title "Bulgaria", \'ba' using 2:3 with lines linestyle 2 title "France", \
unset output
格式 | 解释 |
---|---|
%a | 星期几的缩写 |
%A | 星期几的全称 |
%b(%h) | 月份的缩写 |
%B | 月份的全称 |
%d | 月里的第一天(1-31) |
%D | “%m/%d/%y” 的缩写 |
%k | 小时(0-23, 1 或 2 位数字) |
%H | 小时(00-23, 2 位数字) |
%l | 小时(1-12, 1 或 2 位数字) |
%I | 小时(01-12, 2 位数字) |
%j | 年里的第几天(1-366) |
%m | 月份(1-12) |
%M | 分钟(0-60) |
%p | “am” 或 “pm” |
%r | “%I:%M:%S %p” 的缩写 |
%R | “%H:%M” 的缩写 |
%U | 年里的第几周(周日为每周第一天) |
%w | 星期几(0-6, 周日为 0) |
%W | 年里的第几周(周一为每周第一天) |
%y | 年(0-99, 1 或 2 位数字) |
%Y | 年 (4 位数字) |
不被用来监听的监听耳机评测
这是之前进货的一个耳机,用了也有一段时间了。作为一个 1991 年的耳机,现在亚马逊上打折后售价仍然还有 84£,比森海塞尔的 M40x(折后 79.34£) 还要贵些。作为一个电子产品来说,保持这个价格竞争力是非常的罕见了。不过本文不会从一个监听耳机的角度出发,而是从游戏以及实用性上来评价。
MDR-7506 的外观不能说一般了,只能说很复古。如果你想要一个看起来比较现代比较酷的耳机,你可以换一个考虑了。
这个塑皮的头带包裹已经让我开始担心它过多久会掉皮了。整体来看让人觉得有些笨重。类似老式电话线一般的线材也是缺点之一,这个线的缺点体现在两点:
我一直吐槽,夏天不能带包耳耳机,因为时间长了会捂得很热。这个可以说是个通病没法避免。好处就是提供了一定程度的被动降噪。我戴这耳机,会把外廓塞到耳机套里面去,这样不会被压着还能好受些。但是时间长了还是会觉得压得疼,会难受。得摘下来缓缓不能一直戴着。7506 的头带做的不错,不会把我头顶的头发压出一条印来。摘得时候要小心点,别大力出奇迹直接往下硬拽。会把耳机拽散架。
听歌看电影打游戏全都要?监听耳机也不是不可以。我之前试过 HyperX Cloud II 7.1 那个游戏耳机,这游戏耳机只能用来打游戏。低音很重并且听起来怪怪的。和他家的云雀不是一个调教风格。给我的感觉是只能用来打游戏,干别的白瞎。
能想出来用监听耳机打游戏的我也不是第一个,woomai 干这事好久了,我也算追他个风。我感觉 7506 配 Windows Sonic for headphones 就能把脚步展现的特别明显。相对比来说 Dolby atmos for headpones 的 game 模式就要温柔很多了。我用管了 Dolby 就还是用他,感觉也很好。在 CSGO 里我是可以很清楚的分辨出来人的方向的。我觉得这也是包耳式耳机在打游戏方面比入耳式耳机强的一点。它可以帮你屏蔽一定外界环境声。
哦不过这个耳机不含麦克风哦,可以去淘宝上随便买个 300 块钱的电容麦玩,USB 输入的那种。别看他们长得差不多,你可能能随机抽到一个内置了很牛逼的声卡的麦克风。作为非专业设备我觉得已经很好了,盲听可以和 Blue Yeti 对冲。毕竟现在游戏内语音和 discord 等连麦平台对音频压缩都挺狠,Blue Yeti 这种级别的设备发挥不出来水平。还不如买个便宜货玩。坏了也不心疼(我的 Zoom H1 你死的好惨呜呜呜)
我觉得 7506 的中频人声处理的不错,会听的很清楚。我现在被 Dolby Cinema, IMAX 12 Track 和 Soundbar 的 100w 低音炮有点惯坏了,这个耳机的低音不是很强,但是效果很好。能分出来层次而且很细腻。云雀就很平淡了。我对 7506 的空间定位和声场很满意,可以展现出歌曲、影片的很多细节。这是我比较喜欢的效果。
算是一个不注重外表的实力派。
]]>这学期有个大作业,是写一个有点类似于消消乐的游戏。写这篇文章算是为了庆祝一下我将近 60 个小时的工作。大概是因为担心查重检测等问题,不允许我们把代码发布到公共的代码仓库,那这里就放个视频吧。 评完分了应该就可以公开 代码 了吧.
写 JavaFX 还算是踩了点坑,这里记录下吧。
JavaFX 的 API Document 是非常好的一个地方,每个方法的描述都比较详细。如果想找为了实现某个功能要用到哪个方法,或者是单纯的想要知道这个方法是干什么的话可以选择先翻看这个,能比直接 Google 还省事的。
这个东西算是我一开始最头疼的东西了。其实上课的时候就不是特别理解,靠着看笔记和照葫芦画瓢算是理解了点皮毛。这里说的 Listener 不是一个 property 带有的 listener(比如 setOnChangeListener
), 而是我们自定的,用于在不同的 component 之间进行沟通的。Listener 其实就是以 anonymous class 的形式实现了一个 interface 的 method, 然后把实现出来的这个类注入到了我们要监听的类里面去。我们在被监听类里适宜时 call 被注入进去的 listener.
举个例子来说明下。假设我们有一个 IM,从 WebSocket
这个 class 中 获取到消息。消息分为两类:一类是普通消息,就是单纯的聊天消息;还有一种是指令消息,会对我们 IM 的运行状态进行控制,比如要求在 AppUI
中进行处理后,决定是直接显示在 UI 上,还是交给 AppCore
进行处理。interface NewMsgListener
是我的 listener, 它来负责 AppCore
和 Websocket
的交互,所以这两个 class 不需要依赖对方。
NewMsgListener.java
> /**> * 这是我的 Listener. 它就是单纯的一个 interface, 有且仅有一个方法。> * 我们可以稍后使用 lambda expression 初始化它. > * 当然你可以定义更多方法,但是没啥必要。而且在那种情况下完全可以再创建一个 Listener> */> public interface NewMsgListener {> public void setOnNewMsg(String msg);> }>
WebSocket.java
> /**> * 这个类负责连接到 ws 服务器获取信息> */> public class WebSocket {> private ArrayList<NewMsgListener> listeners;> > public WebSocket() {}> public void connect() {}> > public void addMsgListener(NewMsgListener listenr) {> this.listeners.add(listener);> }> > public void msgReceived() {> // 设定 `msg` 作为收到的信息> for (int i = 0; i < this.listeners.size(); i ++) {> this.listeners.setOnNewMsg();> }> }> }>
AppUI.java
> /**> * 这个类负责连接到 ws 服务器获取信息> */> public class AppUI {> private final WebSocket ws;> public AppUI() {> this.ws = new WebSocket();> this.ws.connect();>> this.ws.addMsgListener((msg) -> {> if (msg.starts("MSG")) {> // Do Something > }> })> }> }>
我一开始用 GirdPane
的时候不太理解怎么用它来布置布局。我们创建的 GirdPane
一开始都是没有 row 和 column 的限制。往一个 GridPane 里面增加新的 Node 时可以指定它的位置(通过传入这个 Node 的 row 和 column),也可选的限定这个 Node 可以扩展多少 row 和 column(不设定的话默认为 1). 我们也可以通过创建 ColumnConstrains
/RowConstrains
然后加入 GridPane 的方式来调账每一行、列的大小。
// 这是我比较喜欢使用的两个增加 node 的方法newGridPane.add(Node child, int columnIndex, int rowIndex);newGridPane.add(Node child, int columnIndex, int rowIndex, int colspan, int rowspan);// 这样来限制每个 column 的宽度ColumnConstraints column1 = new ColumnConstraints();column1.setPercentWidth(50);ColumnConstraints column2 = new ColumnConstraints();column2.setPercentWidth(50);newGridPane.getColumnConstraints().addAll(column1, column2); // each get 50% of width
在上面这个例子里,我们创建了两个 ColumnConstrains
,并且每个都占比 50%. 这样情况下,我们得到的结果就会是只有在 column 0 和 1 的 Node 会被显示出来。我们可以把他们的占比分别调整为 10% 和 20%, 这样还有 70% 的空间留给剩下的 column, 并且不需要创建第三个占比为 70% 的 ColumnConstrains
并增加进去(当然,你让 column 2 占比 70% 的话除外). JavaFX 会自动帮我们分配。
就我目前使用到的功能来讲,他们的区别在于,当给 ListProperty
注入 setOnChange
listener 后,只要这个 ListProperty 里包含的 child 发生了变动,listener 就会被调用。而这个功能在 ObservableList
中实现,需要整个 list 都被重新赋值。
这个是可以通过 for-loop 来实现的。可以先使用针对 Color
的 instance color
使用 .darker
方法得到一个比 color
暗一点的颜色,再用 for-loop 画以这个颜色画出对应的梯形/弧形来。因为怕代码查重的问题,这里就不放例子了。
暂时想不起来别的坑了,日后如果再遇到一些问题,或者是想起来别的值得记录的问题的话,就再加进去。虽然以我的记性,不要指望太多就是了。
]]>Assignment:
var-name=$(command)tmp=$(echo "hello world"); echo $tmp
Basic syntax:
for var in directory/*; do [code to run]; done
Also, nested for loop:
for i in {A..Z}; do for j in {1..5}; do touch $i$j.dat; done; done
This time, take standard output of cat
as an input:
cat fileName | while read var; do [code]; done
A program searches input that match a paritular pattern or regular expression.
cat fileName | grep 'Something'
A text stream editor.
sed [options] command [file...]
Example:
echo Hello World | sed "s/Hello/Hi/l"# substitute the first Hello with Hi. flag l specifies case sensitive modecat smallfile.csv | sed 's/,/\t/g'# subsitute every , with \t. flag g allows substitute globally, not just the first instance of match.
Inserts line following detection of pattern:
sed '/pattern/a\line-to-append' input
Deletes from line number n to end of file:
sed 'n,$d' input# where $ indicates the last line, and d specifies operation mode to delete.
When we have two patterns:
sed -e '/pattern/a\line-to-append' -e 'n,$d'
A ultility for processing structured text files. It regards each line in a file as a record and broken into fields. Good to parse tables.
Usage: pattern {action}
awk 'BEGIN'{print "File\tOwner"} {print $9, "\t", $3} END{print "done"}'
Note:
BEGIN
and END
forms some sort of loop.
Use (
and )
for selection.FNR
refers to the record number(the line number)NR
refers to the total record number
When working across file, FNR resets back to 1 but NR keeps increasing.
- any character zero or more times
? any single character
[] a range of characters
{hello, world} exactly one word
Wilcard can be combined.
]]>Bilibili 直播有限制推流和在网页上点开播按钮的 IP 都需要是大陆的,不然不给开。为了解除这个限制,我打算用家里的机器和几台国内外的机器用 wireguard(wg) 起 tunnel 组网,然后再用 Nginx 反代 rtmp. 本文将包含 wireguard 的使用,Nginx 的配置。
本文想要实现的网络架构是这样的。国内 NAT 和国外机器之间使用 IPv6 连接,本地到国外机器,国内 NAT 到 home 则使用 IPv4. 这么做一个是因为国内 NAT 的商家不让 IPv4 走大流量,还有就是为了优化整个网络的速率。我在使用这套架构之前只用了一台到大陆走的 CN2 机器作为中间节点,可无奈没办法达到要求速率才出此下策。一般情况下来讲,中继节点越多,从起源机器到目标机器所需延迟则越长。但这里为了业务需求只能牺牲一下延迟了。
wireguard 咋装这里就不赘述了,官网写的挺清楚的。
先生成一个私钥用于 wg 加密数据,记录一下等下要用到. 这个步骤每台机器都要执行。
wg genkey > private
如果要查看私钥对应的公钥,可以使用 cat private | wg pubkey
.
编辑 /etc/wireguard/wg0.conf
, 简单写入配置
下面是 home 节点的示例配置。中继节点(在我的架构中:国内 NAT 和国外机器)的配置和这个大同小异,就不单独贴了。
[Interface]Address = 172.17.87.86/24SaveConfig = falseMTU =1300PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -j MASQUERADEPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -j MASQUERADEListenPort = 51787PrivateKey = # 刚刚生成的私钥填在这[Peers]Endpoint = # 对端 IP:ListenPortAllowedIPs = 172.17.87.93/32PublicKey = # 对端公钥
简单说明一下。wg 是没有明确的客户端和服务端一说的。被链接的两端中的一端有了需求就会去连接另一端。但是两端中有一端需要有公网 IP,或者能被公网访问到的端口。这个端口应该被定义为 ListenPort
.[Interface]
是对本机端口的定义,[Peers]
是针对远端的定义。PortsUp
和 PortsDown
分别是启动和停止 wg 时执行的命令。这里是把 NAT 做上了,以方便进行 IP 转发。Endpoint
不是必选的,但是就如上面说的,两台对端之间必须要有一台配置上 Endpoint
。两个黑瞎子没法找到对方,总有一个得带盏灯:Endpoint
.AllowedIPs
是走隧道的 IP, 加进去了之后 wg 会自动做好路由。如果需要走隧道的 IP 不加到这里,就算做好了路由也是没办法走隧道的。MTU
设成 1300 解君愁,管他底层 MTU 是多少,IPv4 还是 IPv6, 跑就完事了。
要注意,需要走代理的 IP 都要加入 AllowedIPs
. 就比如我本机的配置是
AllowedIPs = 172.17.87.86/32, 172.17.87.92/32, 172.17.87.93/32
别忘了启用 IP forward
echo 1 > /proc/sys/net/ipv4/ip_forward
如果还是不行的话,有可能是 NAT 规则的问题。清除重做一下。不过如果你还有别的 NAT 规则别这么玩啊。
iptables -t nat -Fiptables -t nat -A POSTROUTING -j MASQUERADE
rtmp 代理我选择用 Nginx 来做。Nginx 需要装一个叫 nginx-rtmp-module 的模块。安装默认是不装的。这里记录下如果用 oneinstack 安装环境的话要怎么弄(我也不太清楚我当初为什么光装一个 nginx 也要用 oneinstack). 编译安装的方法就不记录了。
按照 说明 将文件下载下来后,先别着急运行 install.sh
. 找个目录运行
git clone https://github.com/arut/nginx-rtmp-module
这会把我们要用的模块下载下来。如果网络不好你想下压缩包再传到机器上解压也可以,记住路径。编辑 oneinstack 文件夹里的 options.conf
,找到 nginx_modules_options=''
, 改成
nginx_modules_options='--add-module=/Path/To/The/Model'
然后再安装的 Nginx 就包含我们要用的模块了。
在 nginx.conf
中添加
rtmp { server { listen31451; chunk_size 4096; include /usr/local/nginx/conf/stream-enabled/*; }}
这个要加到最顶层,和 http
块同级。然后放行下端口 31451.
然后创建目录 /usr/local/nginx/conf/stream-enabled
, 编辑 default.conf
。加入如下内容
application restream {live on;record off;push rtmp://live-push.bilivideo.com/live-bvc/Your_Key;}
记得把 Your_Key
换成你 B 站的直播密钥。
然后用 obs 推流到 rtmp://内网 IP:31451/restream
就可以了。
感谢 eq, woomai, 老咸鱼和 kirito对我折腾过程中的帮助。下一部的计划是用 ros 来实现这个架构,抛弃 wireguard.
]]>ipset -N cnip hash:netwget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zonefor i in $(cat cn.zone ); do ipset -A cnip $i; doneiptables -I INPUT -p tcp --dport 需要屏蔽访问的端口 -m set --match-set cnip src -j DROP
来自 IPdeny:
如果觉得 IP 段不够新的话也可以去用别家的记录,把 for
那里的文件名改一下就行。如果规则格式不是 IP:/CIDR
的话,还需要考虑一下转换问题。
出国前,过年在我心里其实是一件不那么重要的事情。只不过是一群人又因为一个特定的日子聚在了一起,吃吃饭喝喝酒,唠唠大人们小时候的事,扯扯家庭这个概念。说到底,创造了一个理由,让其实本来没啥关系的人聚一次。毕竟频率一年一次,乏味可陈。
什么是年味?
是大年三十那天,从南天门堵到北天门的车;
还是路灯上挂的大红灯笼;
还是商场里所有人抢着买东西的感觉;
还是年三十的一桌丰盛饭菜;
还是商场里一直放的好运来?
对于我,环境的装饰是很容易被复制的,只要精心打理,家里每天都可以是过年的气氛。可是人情就不一样。一个房子装饰得再得体,少了人在里面,那它也只是一间房子罢了。因为人,而让我对这间房子产生了共鸣,留下了愉快的记忆。这样的,才是我喜欢的年。所以说,年味是那些能让人感觉自己和他人连结起来了的事情。就比如我和姐姐曾一起被赵本山逗乐,在房间里斗地主,隔着窗户看烟花。可以说是因为年促使我们产生了共鸣,而让我们怀念年。所以每当我说想过年了,具体怀念的不是年里墨守成规要做的那些事情,而是一起做那些事情的人。每个人对年最深的记忆,一定是和身边的人一起,而不是一个人吧?
年味变淡,是我听父辈讲的很频繁的事情。对于他们来说也很可以理解,小时候家里面一大家子人在一起,过年那叫一个其乐融融。可是,时代变了。他们有了自己的生活,小时候身边的人也是。而又赶上了老一代人的离去,对于他们来说过年肯定不是一件容易的事情。本来能让一家人团聚在一起的年,却因为越来越忙的人,而逐渐变了味。我很敬佩他们的内心,特别是我爸爸。从步入社会开始,就要承担来自各处的压力,同事之间的。结婚之后还要成为全家的依靠。而对于他来说,这些压力大部分都被一个人消化掉了。可能一开始还能和老一辈念叨几句,但随着变老,一是没法开口,而是更不敢让老一辈担心了。我不知道他们是要怎么挺过老一辈的离去的,但这就是命运啊,终究是要失去的。能平稳的放下那么爱的人,可也太难了。
要想放下,对老一辈也是如此。不知道他们每次过年,看着自己身边的孩子,会不会想起曾经的日子,想起已经不能团聚的兄弟姐妹们,想起送他们步入社会的长大成人的父母。在年三十鞭炮中独自入睡的老人会在深夜 emo 吗?还是因为他们已经经历了太多的悲欢离合,麻木的都接受了呢?
说到底,我对年的怀念,都是那快乐的记忆。我不是真正的喜欢过年的。我不喜欢串门,不喜欢去形式化的酒局,特别是在酒局上敬酒。啊,和家里人的酒局真的是我的一大痛苦,很多次我都因为心理承受不住中途退场,那种感觉真的是太糟糕了。现在的春节最让我怀念的属于是烟花了。我喜欢烟花,我也觉得很多人都喜欢烟花。不然怎么会有 “生起的花火,是从正面看还是从侧面看?” 这种说法。一颗礼花弹打上天空,它伴随着 “嗖” 的声音升上天空,然后 bang 的一下爆开。露出几条非常讨喜的色带。有的高级的烟花还会有像闪烁着的首饰一样的背景,劈里啪啦的。单独一处放烟花是一种感觉,但如果有个小湖,并且湖两边有两大家子比着放烟花,那是更热闹不过的了。这么比着放烧钱是确认的,不过对于围在一旁看的人来说实在是太爽了。
在烟花禁燃令还没实施之前,大年初一的早上出去闻到的全是火药味,地上也都是展示过自己雄威的鞭炮纸。晚上放鞭炮扰民,影响环境。可是把燃放烟花禁止掉之后,仿佛就更少了些过年的感觉。
每个人对于过年的记忆肯定是不一样的。不得不承认,过年给我带来了很多快乐的记忆。对于在异乡打工的人来说,过年在他们的心里应该分量更重些:这是他们几乎唯一能回家的日子。说到底,我喜欢过年,就好像喜欢上世纪 80 年代的英国一样:喜欢的是那个时代的开放、建筑风格、音乐风格等等,而绝对不是混乱的“娱乐圈”、男女地位。在我脑海中让我留恋的,只是那个抽象的年。
]]>扒鸡现在已经来到了英国并且入读了 University of Southampton(以下简称南安). 受拜与最后终于发挥出来了的数学,以及南安的补录机会,再加上南安自己的努力,我成功进入了一所全球前 100 的大学(学校官网这么写的,每次看见我都觉得跟广告一样)。来到这里已经两个月了,那就在这篇博文分享一下我这两个月的故事吧。
因为扒鸡是补录进的大学,所以宿舍的申请是最后才申的。学校给我承诺说一定有我的宿舍,但没想到最后发下来是共享厕所和厨房的。看到这个房型的时候我有那么一点抑郁。但还好到最后是 4 个人的 flat,有一个室友是中国人,以及包了部分餐食。我的室友们(是的,包括外国人)都有表示食堂的晚餐过于难吃,我倒是完全能接受。
宿舍房间大概有 24 平大,一张书桌一个衣柜一个床。
出国上大学嘛,学习还是主要的。我觉得就目前来讲感受到的环境,对我还是很友善得。毕竟没人想在一个可能会有人挑刺的环境下呆着。同学们还有学校里的人都是很 nice 的,也很友好。这段时间下来我最想感叹的是在大学的自由度。因为我没在国内大学上过,所以只能拿我的国际高中做对比了。我去实验室上实验课,会有老师问一下确保我来对地方了,但是完全不管我用了多长时间做,有没有在摸鱼。提前做完了实验也可以一声不说就走掉,没有人盘问。在大学生活的这短短两个月里,我还没遇到有人问我在做什么或者再找什么(虽然在我迷路的时候我还是很希望有人问我一下的)。
南安是一个很小的城市,市中心只有一条街是比较密集的店铺和一个三层的购物中心。整个市中心大概半天也就逛下来了。除去市中心外,就和乡村一样了:独栋或者联排房子。在类似于镇中心这种等级的地方,会有一些饭店、便利店之类的。有一个叫 Portswood 的地方算是一个比较大的社区,那里有的饭店,咖啡店也会比别的小的社区(比如我在的 Swaythling)多. Portswood 还有一个大超市,类似于家乐福那种。很让人羡慕。
说实在的,我觉得南安能做的事情不是很多。分为以下几种:
这一类包括赌场,夜店,bar 这种。但我会愿意去清吧吃东西或者来上一杯酒。这边的赌场的数量,对我这种在国内没怎么见过的人来说,是特别的多。大大小小我见过的就有四五家。因为这些地方人流复杂,加上本来我就不感冒,所以我不去。
或者说是我不愿意花钱去的。更具体地说,是我不愿意花钱周周去的。比如泰坦尼克博物馆。去看一次还行,但是让我常去那我肯定吃不消。
我最常去的,就是 Odeon 电影院了。一个月花 13 磅买个月卡,然后电影随便看。这大概是我最喜欢的娱乐活动了,虽然我在国内不怎么看电影。
比如密室逃脱,虽然我觉得一次价格也不便宜,但是一两个人玩还是没意思。然后就又找不到更多人;再比如说学校的体育馆,一个月 20 磅就可以不限次数去游泳,预约打羽毛球的场地什么的。还是因为没人一起,我是真的不想自己一个人运动。
暂时就想起来这么多,bar 和 pub 也没怎么去过(就去过一个 pub 吃了个简餐晚饭)。等玩的多了再接着写吧。
]]>