跑步,椭圆机和膝伤
今年四、五月的时候,发现跑步几公里后,右膝刺痛。而且跑完后第二天走路时都还有轻微的痛感。以前从没出现过的,想说是不是跑的太多了,休息了两周,再跑,还是痛。隔了一个月再跑,还是一样。不行,赶紧去看医生,拍了片,医生说没发现啥问题,怀疑可能是膝盖软骨有些磨损,建议停止运动两三个月,再看看情况。
从大学时开始跑步,到现在十几年,自认为体重不算重,也踩着一双几百块钱的专业跑步鞋,跑量也不算非常多,怎么就膝盖中箭了呢?我百思不得其解。而且,从去年底入手椭圆机后,我跑步的次数减少了挺多的,而是坚持每周两次椭圆机,每次半小时。去年沉迷跑步的那段时间,经常都是每次8公里、10公里的,多的时候一周跑四五次,但都从来没出现过不适。
看完医生的那两三个月,我把跑步、椭圆机都停了。正好是夏天,周末时带雯雯到球场去玩,看着那晴空万里的天气,看着那熟悉的跑道,我那个心痒啊,第一次体会到想跑步但又没法跑的痛苦。甚至会担心,会不会我余生都没法跑步了(上网查了膝盖软骨磨损,可大可小)?心情懊恼不已。想到《REAL》,想到户川清春,才发现,确实,当你失去一样东西之后,才能体会到它的珍贵。
最后一次赛跑,在蓝得让人觉得痛的天空之下。 – 《REAL》
休息了两个多月后,在八月份,开始重新跑步。放慢速度,小心翼翼地试着跑了三、四公里,不会痛了!那一刻简直如获新生。
后面我想了想,到底之前是什么原因导致了膝伤呢?思来想去,只能是椭圆机了。我的椭圆机是迪卡侬的,9公斤飞轮,15档阻力调节,我一般是调到13档,踩半小时。踩椭圆机过程中并没什么不适,出一身汗,还挺舒服的。但之前我暂停跑步一个多月,但没停椭圆机,结果再次跑还是膝盖痛。而把椭圆机也停了之后两个月之后,膝盖的症状就消失了。所以,非要找个原因的话,我相信是踩椭圆机时阻力调的太大了,给膝盖的负担太重导致的。
网上总说椭圆机不伤膝,这次的经验再次验证了我的一个想法,理论和实践总是有一定距离的,很多事情,亲身去体验后,才能发现事实,才能发现适合自己的。
现在还是会坚持运动,但强度和时长都比较佛系就是了。跑步每周一次,每次五、六公里,配速尽量控制在六分半左右(有时还是不自觉地提了速,跑到六分钟内。。。)。椭圆机也还是试探性地踩着,每周一次,阻力8或者9,每次20分钟。慢慢来吧,要运动,更要健康。
那些年,玩过的炒鸡好玩的单机手游
住在郊区的一个成本就是上下班通勤时间太长了,从南沙到市区至少要一个小时,每天上下班来回,在地铁上的时间合计超过一个半小时。以前在地铁上比较多是看新闻、玩游戏、看漫画,近几年则是看 Kindle 比较多。回想智能手机刚兴起那会儿,有不少手游,虽然玩法简单,画质一般,也没啥社交功能,但是一次次陪我度过上班下班的时光,在忙碌的工作、生活中带来简单的快乐。谨以此文纪念一下吧。
这里列出来的,是一些相对冷门的、炒鸡好玩的单机游戏。有多好玩呢?这么说吧,以下任何一款游戏,每过一两年,我都有冲动拿出来重新通关(或者被虐),就这么好玩!另外一些比较热门的,例如纪念碑谷,地球人都知道,就不提了。
Abduction!
这款游戏实在太简单了,控制你的牛(或其它角色)向左或向右移动,一直往上跳,留意避开障碍、取得宝箱,跳的越高,分数越高,就这样,没了!没错这就是手机版的“是男人就上一百层”。但这么简单的一个游戏,也曾吸引我玩了一段时间,因为,它控制左右移动的方式是重!力!感!应!重力感应啊朋友们,在智能手机出来之前,谁曾想过居然还可以这样玩游戏!当年在我的 摩托罗拉 Milestone 上,这款游戏应该是我最早接触的手游之一了。
Unblock Me
类似华容道。类似的手游一大堆,但这款是我比较早接触到的,画面还算精致,各种难度都有。难度上去之后需要一定的推理、想像能力,消磨时间佳品!
Sudoku
数独游戏千千万,我却独爱这一款。这一款是我玩过的最好的数独游戏,没有之一!它的界面其实一般,不算很精美,但胜在功能强大,铅笔标注什么的都有,并且还关联了数独的解题方法教程!看了这个教程的一些文章,我才知道原来数独是有一些高阶解法的,真是带我走入了一个新世界!
静态方法,mock 还是不 mock,这是个问题
王者 Mockito
不知从何时开始,Mockito 成了 Java 的单元测试框架王者,目前(2019年7月)Github 上 star 数直逼 10K。看看其他的单元测试工具:PowerMock 2K(无疑是沾了 Mockito 的光),easymock 600,JMockit 300。跟 Mockito 一比,好可怜啊,一个能打的都没有。
Mockito 当然很好。我从2012年还是2013年开始用 Mockito,看着它从 1.0x 版本一路走来,今年晚些时候估计会正式发布 3.0 版本。应该有不少人都跟我有类似的体验,从 Mockito 开始接触 mock / stub,一边赞叹 Mockito 语法的简练,一边享受着 mock 带来的单元测试的便利性。总说单元测试应该要隔离外部依赖和实现,很难想象,如果没有 mock,怎么写单元测试呢?
public void test() {
when(userDao.update(any(User.class))).thenReturn(1);
int actual = userService.update(aUser);
Assert.assertTrue(acutal > 0);
verify(userDao).update(aUser);
}
看看上面这个 Mockito 的例子,when(…).thenReturn(…),verify(…).doSomething(),这代码就像人类语言,多么简明易懂!
但是(没错转折来了),已经2019年了,Mockito 依然不支持 mock 静态方法、构造方法等。你可以说,这是设计理念,Mockito 首页上一直写着一句话 “Don’t mock everything” ,认为说应该做好功能代码的设计,尽量避免静态方法等,尽量使你的代码易于测试。这个理念,在理论上没问题,但这么多年的开发经验告诉我,理想归理想,实际上要你去维护的遗留代码总是一箩筐一箩筐的,避无可避。
Static methods, to mock or not to mock, that is the question
单元测试中是否要 mock 静态方法,一直争论不休,网上有 一个 一个 又一个 的讨论,各种意见都有。
我的个人意见,跟 这个观点 一样,我认为测试工具不应该替用户决定什么是好、什么是不好,而应该尽量提供选择,让用户自行判断、采取合适的方案。理论很美好,但实际情况就是,google 搜 “mockito how to mock static methods”,有近15万条结果,可想而知,全世界的开发者在这个问题上浪费了多少时间。
真要用 Mockito 来 mock 静态方法,一般都是结合 PowerMock 使用。这两年 PowerMock 发展的怎么样我不太清楚,但14、15年那会儿我用过 PowerMock,感受就是,真他妈累啊!理论上来说是可以的,但实际做起来就总是各种问题,然后各种 google 、解决,然后又继续各种问题,排查的我都快怀疑人生了。最终我是放弃了 PowerMock 的,这么费力地去结合两个工具一起用,往后很难说还有多少坑。
Mockito、EasyMock 等工具不支持 mock 静态方法,原理上是因为它们都是基于 cglib 的,只能通过创建子类或实现接口的方式去 mock。那除了 cglib ,就没有其他的 mock 实现方法了吗?当然有,修改字节码呀!
近几年最难啃的书——《玫瑰的名字》
翁贝托·埃科
沈萼梅 / 刘锡荣 译
上海译文出版社,2010
周日午后,我坐在客厅沙发上,第四次翻开《玫瑰的名字》,暗下决心这次要读完它。然而,我心里并没底,隐约能预见到,我读了100页,然后合上书本放回书架,跟自己说不行实在读不下去了下次再来吧,一如之前的三次一样。所以,当两周之后我读完了这本书时,我的第一感觉就是,好神奇,竟然读完了!
一句话总结,《玫瑰的名字》是一本难读、让人感动、好看的发抖的书!
《玫瑰的名字》,绝对是我近几年读过的书中,最难读的一本。原因之一,是书中讲述了大量中世纪、宗教、历史相关的知识。威廉和其他人讨论宗教、信仰问题时,那大段大段的文字,看的人都快精神错乱了。有时我简直怀疑,埃科是不是故意写成这样的,毕竟,这可是写出《带著鲑鱼去旅行》的埃科!难读的另一个原因,是书中人物、关系、阵营、历史也复杂交错,还夹杂着各种文学、药学、符号、密码、建筑等等信息和理论,真是一锅大杂烩,让人难以理清思绪。
为什么我会找这样一本书来读呢?其实是在和菜头那里种了草,和菜头说,他读过太多故事了,以至于翻开任何一本书,总有一些熟悉的、重复的地方,但埃科不一样,总能给人惊喜。和菜头的话让我想到朴赞郁。作为一个喜欢看电影、观影量不小的人,不少电影在我看来都了无新意,但朴赞郁不同,从复仇三部曲到《蝙蝠》、《雪国列车》,他的电影和故事总是那么新奇。而读完《玫瑰的名字》,我完全认同和菜头的说法,埃科真是很有趣的一个人,而且上知天文下知地理,强大无比。
《玫瑰的名字》的结局,看得我几欲落泪。屹立数百年的修道院,最后在一场大火中付之一炬,僧侣们视之为宝藏、传承着文化和智慧的藏书馆,也轰然倒塌。一个辉煌的时代黯然落幕,僧侣们或死或伤、纷纷离去。多年后阿德索故地重游,满眼只见废墟、残垣断壁,一切都灰飞烟灭。近几年读过的让人这么感动的新书不多了,《看见》算一本,《金色梦乡》算一本,《江城》也算,就这几本,屈指可数。
这本书不止一次让我想到《浪客行》。《浪客行》中,武藏一人对战吉冈七十人之后,一次一次地思考“天下无双”的意义,然后泽庵和尚对武藏说,“过去、未来早就由上天完美的决定了,因此,那是种完全的自由”。《玫瑰的名字》中,阿德索第一次也是最后一次说出一个神学结论:“认定上帝绝对的万能,以及他对选择的绝对自由,不就等于表明上帝的不存在吗?”我觉得,井上和埃科想表达的,是同样的东西。我们是自由的,尽管去做就好。
在这本书里,我读到的是推理,是宗教,是历史,是预言,是真理,是符号,是隐喻,是思考,是灵与肉,是光与血。
很黄很暴力——《小城》
劳伦斯·布洛克
刘丽真 译
上海译文出版社,2017
第一本布洛克。在图书馆闲逛时,偶然看到这本书,然后发现劳伦斯·布洛克好像挺出名的,写了不少小说。于是就借回来看了。
读了开头100页,就觉得这书挺有意思的。同性恋、妓院、凶杀案、作家嫌疑犯,挺多元素在里面的,很生活化的描写,有种看美剧的感觉。接着读下去,多线推进,悬念重重,神经质的凶手,宝刀未老的前警察局长,天生一对的、都有些变态的男女主,慢慢被掰弯的直男等等。可以感受到布洛克的功力,比起钱德勒更有现代感、更生活化。对悬念的设置,案情的推动,凶手和侦探的心理描写都挺好的。有些神来之笔,例如酒保留下的那个酒杯。另外很关键的是,没有严重的 bug (除了凶手犯案过程太顺利了点)。最后,可以看出布洛克对纽约的感情,这份真挚和热爱,给本书增添了不少重量。
整本书有两点超乎我想像。第一是血腥的程度。奈斯博的《雪人》算挺血腥的了,但本书更甚,血手木匠完全就是“真·没有感情的杀手”,他的世界,在九一一那一天就死去了。之后,在他眼中,人,都不是人。
第二点超乎想象的,就是性描写。看的过程中,时不时总要提醒自己,这不是 porn ,这是侦探小说。然后又想,HBO 应该买下这书的版权呀,拍成美剧,肯定很精彩!有些片段,单单看文字都看的我脸红心跳的。不过说回来,书中对性的描写,以及苏珊这个角色的转变,感觉都有些刻意。性描写本身没问题,但没太理解这些描写在书中的意义。想了一下,结合911、暴力、性格扭曲的杀手、被掰弯的直男、慢慢变态的警察局长,这样看来,估计作者就是想表达一极端的环境下,被扭曲的人格吧。如此想来,也能理解。
有一点开阔了我的眼界,就是原来美国的畅销作家这么好赚的,一本书的版权费可以卖到300万美元!然后看看克雷顿一夜暴富、去到酒吧后受到的待遇,真是势利的社会啊。
会继续找布洛克来读,传说中的马修·斯卡德,貌似很有趣啊。
记一次线程挂死的排查过程(附 HttpClient 配置建议)
1、事发
我们有个视频处理程序,基于 SpringBoot,会启动几个线程来跑。要退出程序时,会发送一个信号给程序,每个线程收到信号后会平滑退出,等全部线程都退出后,整个进程再平滑退出。
整个程序平时运行都正常,然后有一天,我们发送了退出信号给程序后,发现程序无法自动退出了!肿么回事呢,grep 一下日志看到是这样的。
# grep 'receive exit signal' /PATH/TO/LOG
[2019-02-22 09:49:28,884][INFO ][Thread-75][n.p.j.e.l.l.PolyvQueueVideo:83] - receive exit signal ... exit current thread
[2019-02-22 09:49:56,271][INFO ][Thread-78][n.p.j.e.l.l.PolyvQueueVideo:83] - receive exit signal ... exit current thread
[2019-02-22 09:53:24,943][INFO ][Thread-74][n.p.j.e.l.l.PolyvQueueVideo:83] - receive exit signal ... exit current thread
[2019-02-22 09:55:23,317][INFO ][Thread-79][n.p.j.e.l.l.PolyvQueueVideo:83] - receive exit signal ... exit current thread
[2019-02-22 09:57:00,196][INFO ][Thread-77][n.p.j.e.l.l.PolyvQueueVideo:83] - receive exit signal ... exit current thread
这里的程序总共启动了6个线程的,但上面看到只有5个线程退出了,还有一个哪儿去了?不肯轻易就义么?好顽强的线程。。。
Life Release 2018
25 本书
《雪人》《一个叫欧维的男人决定去死》《与绝迹之鸟的短暂邂逅》《百年法》《刺杀骑士团长》《远山淡影》《一首小夜曲》《湖底女人》《OKR 工作法》《凶心人》《铁牛重临》《邮差总按两遍铃》《平原上的摩西》《来自新世界》《罗杰疑案》《希腊棺材之谜》《犹大之窗》《燃烧的法庭》《阿拉伯之夜杀人案》《斜屋犯罪》《在路上》《带着鲑鱼去旅行》《众病之王》《永恒的终结》《人件》
25本,量还行,但其中读了太多小说,太少科普类、专业类的书了,明年要加油(好像去年也这么说。。。)。
今年入了不少新的坑。其一是卡尔,一度沉迷,连读3本,我倒不是说特别喜欢密室,而是觉得卡尔对语言、节奏的把控很好,后面还会继续找来读。很喜欢年初读的奈斯博的《雪人》,阅读过程中时不时有看犯罪电影的感觉,好看的让人发抖!后面应该会补完哈利系列,这是挺大一个坑。雷蒙德·钱德勒也不错,读的第一本是《湖底女人》,就喜欢这种简洁有力的文字,不拖泥带水,估计会再读两三本。然后最近读了第一本阿西莫夫,《永恒的终结》,确实震撼,后续也应该会补上银河帝国系列,听说有15本,深坑啊!
有入坑,也有弃坑。第三本岛田庄司,《斜屋犯罪》,第二本奎因,《希腊棺材之谜》,这之后,应该跟这二位说拜拜了,前者太多水,后者太刻意。
做更难的事情,坚持做
今年趁着双十一,买了两件觊觎已久的东西。一件是椭圆机,迪卡侬 E-SHAPE+。一件是 4K 显示器,戴尔 P2415Q。
椭圆机
今年跑步挺多的,特别是在夏天,每个月跑100公里以上,湿湿碎。但从九月份开始,就跟每月100公里说拜拜了。原因之一是雯雯开始上幼儿园。每天6点40左右就得叫她起床,再晚的话就很难保证8点前送她到幼儿园、9点前我到公司了,起床后有一堆事情做——跟她刷牙、换衣服、扎头发、吃早餐等等。这种情况下我要早起跑步的话,得5点半起床,抱雯雯起来拉尿,然后换衣服、洗把脸、喝口水,热一下身然后出门,大概6点开始跑。由于时间关系没法像以前那样跑8公里了,只能跑半小时5公里,跑完回到家喝瓶脉动、拉伸、刷牙、洗澡,大概7点可以叫雯雯起床,还是比没跑步时稍晚一些,有时实在来不及,就只能让雯雯奶奶送她去幼儿园。
从8公里到5公里,从原来7、8月5点半天亮,到现在12月6点钟天都还是黑的,我坚持跑步。天还没亮就出发去跑,其实问题不大,顶着路灯和月光,我在文化宫的球场跑道上可以一圈一圈地顾自跑下去。但如果下雨,或者冬天降温到10度以下,就没法户外跑了。这就是我买椭圆机的第二个原因:天气。往年一到冬天,我的运动量就趋近于零。有了椭圆机之后,希望别再过囤积脂肪的冬天了。现在我一般是每周两次椭圆机,照样是早上5点半起床,每次踩椭圆机半小时左右,然后现在天还不太冷,周末可以一到两次户外跑,每次8到10公里,感觉挺好的。
这么坚持运动,看来我真的真的很喜欢跑步。之前读了《自控力》,还有看了连岳的一篇文章 《做难一点的事》,都很有启发,也成为我坚持跑步、坚持看书的动力。每天睡到七、八点起床,很舒服,但为何不试试更难一些的早起呢。每天在上下班的地铁上,刷手机、票圈、各种新闻八卦,很容易,但为何不试试更难一些的看看 Kindle 读读书呢。诚如连岳所说,我们绝大多数人不是天才,也没有很好的运气,想要出众,唯有努力。
戴尔 P2415Q
用戴尔 P2415Q 的感受,正如某些网友的评论,就是“MacBookPro 的绝配”!显示效果基本跟 Retina 屏幕一致。之前犹豫了一段时间,觉得 3K 软妹币不便宜啊。但除了做更难的事情之外,有时也要尝试做一些有代价但值得付出的事情,不是吗。