生活日常回忆思考感悟

2024第一季度总结

按理来说,大家都会在年底的时候写一个年度总结,但是等我想起动笔的时候,现在已经4月份了,实在是有些晚了。2023年年度总结现在来做有些晚了,而且恐怕内容很多,写太多又耗费时间,写太少又会变成记流水账。不如写一篇季度总结,可以细致一些,又不会太耗费精神。 1月 我的思路是翻看自己两个手机上的照片,结果翻了两遍都没发现一月份有什么特别重要的事情。 不过也没什么问题,也许人生就是需要一段时间的蛰伏呢。(自嘲) 现在我的工作形成了每天固定的节奏还是不错的。每天下午6点钟,如果Roger在,他会和我讨论一些各个方面的他的观点。 之前他会给我提的问题,被我称为“婚房育”三连击。去年我结婚了,现在就是什么时候生孩子?什么时候买房?我家附近的房子跌了,要不要考虑入手一个? 当然他也提过很多其他引人深思的话题。比如,看我有时候在想如何赚钱,他提出让我去看国家的进口限制目录。这里的清单上面都是国家急需的产业,做起来肯定有政府政策支持。我说:这是我一个人该想的吗?那不是大企业、大制造业、大资本才会去考虑的问题吗?我一个人又没资本,又没这方面的本事,怎么做的来? 他后来又说,当今的社会,其实我们是可以成为内容生产者的。因为一个有不少粉丝的up主,照顾自己的基本盘,就可以温饱,养活自己的家庭。我说:你展开说说呢? 他说:凡事能在大城市立足的人,多少是有点本事在身上的。你考虑下自己最近三年内做过的,反复成功过三次以上的事情。这些都可以拿来做你的优势,来做你的内容。只要你找对了方向,大家喜闻乐见的优质内容生产者还是有很多机会的。 我想了好几次,也没想到这个自己最近三年反复成功过三次以上的事情是什么。很困扰。想来最近也没有很成功的事情。成功结婚?这个一辈子一次也就够了啊哈哈哈。 2月 相对来说,2月份的生活就丰富多了。因为在过年期间,有机会看了两部春节档电影,去了一次东营。 第一部看的是《飞驰人生2》。之前我也看过第一部,但是说实话已经不记得了,毕竟我脑子里不怎么记电影。在看2的时候不断的提醒,我才想起来一些。当时看完觉得还不错,有细节,故事过程和结局也设计得合情合理,不会让人觉得突兀。 然后一周我们就看了《第二十条》。哇,这个电影才是春节档的重磅作品吧!我想关于公平,基于社会真实状况的好电影永远要让人觉得震撼和共情吧!看完这个就想,嗨,这春节档三部电影看了两部 还真是给我看对了。(笑) 2月份在老家过年之后,就去了一趟东营,这是2011年夏天去东营之后,时隔13年,又去的东营。也许是时间太长了,也是当时是夏天去的东营。现在发现和我记忆里还是差别很大的。冬天的风有时候很大,大到我在姐姐家的小院子里抽烟都是风抽一半我抽一半。大风刮的院子里的帐篷呼啦啦的。而过了一天,风停了,这里却又像另一个地方了。在镇上溜达的时候,确实发现有的地方很熟悉。像是我们去的那个公园,是13年前我曾经溜达过的地方,但是说实话只是记起有这个地方,不记得具体的内容。小外甥女走了一半就累了,最后让她爸扛了一路扛回来的,可真是“坑爹”。 重返上海之后,和老婆去了一次KTV。这次在KTV意外发现了几首自己唱的还不错的歌。比如刘德华的《冰雨》、花儿乐队的《忘不了》、许巍的《蓝莲花》,还有一首什么来着?《向天再借五百年》?哈哈哈哈 这个月看了一本书《邻家的百万富翁》,写了几篇公众号文章,但是却太干货,没有什么自己的想法。现在看来总结,这本书推荐的一个方法就是,“省钱”。在有能存下钱的收入之后,就是把钱存下来才能致富。剩下的就是在各个方面考虑如何省钱,比如,不要把自己拥有的物品的当作自己的价值,人不会因为用更加昂贵的包,买更加昂贵的汽车而让自己更有钱。同样也包括对子女的教育,让他们财务独立而不是成为自己的拖油瓶。 3月 3月份的故事也不少,这个月有个周末我租了一辆车,带着老婆和老丈人在市内旅行。去了复旦的江湾校区溜达,中午吃完饭之后想去共青森林公园。结果在那附近转了几个圈也没发现停车的地方,各个地方都是要排队,在一条很窄的路上掉头的时候还撞上了路边的一个消防栓,给车头一个地方都撞成红色的了。后来想了想算了,就回家了。等我还车的时候才发现,右边车后门被刮了!与老婆聊了之后,才知道我取车之后去接他们的时候(11时)就已经刮了,可是提车的视频(店员摄于9时)却没有这个痕迹。最后因为买了保险,让一嗨租车他们去处理了。 这个月,看了《周处除三害》。看完之后觉得,这个才是吊打所有春节档的电影。要是春节档进来,岂不是杀疯了。。。如果非要说有什么缺点,也许是中间的部分节奏太长了,让人看到陈桂林在教堂入教的时候觉得怀疑人生,难道这个是宗教宣传片?等到后面小孩妈妈经历了同样的事情的时候,才让人恍然大悟,也该开始真正的复仇了。我想,关于公平,基于现实的好电影永远让人关注,那么关于复仇、关于英雄的电影也永远扣人心弦吧! 这个月关于学习的事情还是有一些的,半夜睡觉前,才想到BEC(商务英语)报名要截止了,和老婆说要不要报呢?还是再等下半年?最后决定掷个骰子,单数就报,双数睡觉。然后单数,于是爬起来重新打开电脑,报名了BEC Vantage。 这个时候我还没考完老板要求考的ASTQB,但是却提前给自己上了一个新目标,是不是有些不自量力了? 等到3月30日,自己考完ASTQB的时候,真的是松了一口气,让自己高兴了一个多星期。这提醒了我自己在学习那些不感兴趣,打心眼里觉得没有用的知识的时候,还是看不进去。考前那几天真的是人麻了,考完之后,发现好像也就是那么回事。 这个月最大的事情,当然是发现老婆怀孕了。这件事给我的是7分惊喜和3分忧虑。对于以后如何赚钱的想法,又开始浮现。

回忆个人成长思考感悟

整理自己的笔记

整理自己的笔记时候发现了一首18年的“诗”。 雨中。却道是。 念去去,千里烟波 雨朦胧。佳人何在? 现在自己的心态完全不同,于是昨天续了下半段: 夜深。嗟叹乎。 笑呵呵,万古长宵 夜安详。意气风发! 哈哈哈哈哈哈哈!

生活日常思考感悟

闲日随笔

之所以闲是因为今天请了一天年假,懒散地度过了上午,然后去星巴克开始写demo。 写了一个基本又简单的demo之后发现好像自己的生产力也就那样。也许是在公司会被经常打断,但是实际上自己完全安静时候的产出似乎也没有很多。 想做的事情真的很多。 大多数的时候会感觉被推着走。工作日就是一成不变的工作推着走,而假期似乎也不能自由安排。 这个周末是五一假期了。 要去家博会看看家居相关的内容。 在星巴克看到对面桌的三个人说一些高大上的东西,什么供应链什么产业相关的。 他们怎么这么有空,还是说大多数人都这样,天天上班的才是少的? 似乎所有的事情要从一个起点开始,但是却没找到这个起点。 也许是创办一家公司开始? 也许以此为开始安排自己的生活,其他事情就都有意义了吗? 想找一个跨平台开发框架但是弄来弄去却没有感觉能够好用的。最后还是想要试试React Native。 又或者我要先做一个移动端应用还是先做一个小程序?Uni-App能用吗? 这家公司会是智能家居领域吗?抑或者是软件外包公司?(似乎太卷) 我应该怎么才能开始运作?

技术前端问题解决

Monaco Editor的一些问题记录

上周末开始老薛开始呼叫支援,他的项目里的monaco-editor在升级的时候遭遇问题,结果TypeScript编译过程报错了。 周末那天因为仓促接到需求,在node@18 + webpack@5 下面搭建了一次monaco-editor和monaco-languageclient。项目代码是能跑过编译的。就把项目代码post到GitHub上,算是草草交差了。 https://github.com/liushengxian/monaco-client-webpack-test 但是今天又接到消息。他测试后发现,node 12下也还是行不通的。node 18却根本不需要安装monaco-vscode-api都可以通过编译。 https://github.com/CraigMeng/monaco-webpack-node-12 于是乎,今天花了两小时一起debug。最终也没get到解决方案。但是发现了一些小区别: 比如:https://github.com/nodejs/node/pull/29978 node到13.2才开始支持条件式导出。 最后我们定位到的问题是,vscode/services找不到这个定义。然而这个定义是在一个虚假的vscode包里。因为我们用package.json里定义的vscode是 { "vscode": "npm:@codingame/monaco-vscode-api@^1.69.17", } 然而在我将node版本升级到13,14的时候,项目却依然报同样的错。甚至于升级到18的时候,dev-server直接挂掉了。最后没有办法,我们只能给monaco-languageclient提了一个issue: https://github.com/TypeFox/monaco-languageclient/issues/458 虽然可能于事无补,毕竟老薛这个repo的node版本已经太旧了。

生活日常回忆个人成长

博客重开暨2022年度总结

翻了翻自己blog,发现最近的一篇还是2020年11月的了。不得不叹息时光如梭,两年就这么过去了。 甚至连当时还挺火的这个Hugo的blog生成器都感觉快凉了。自己用的主题都没人维护了。(什么?让我自己去维护一个?哪有时间呀~) 2022年的最重要的事情就是找到老婆了~ 上半年的疫情袭击,在家封控了两个多月。 年中突发状况遭遇裁员。 塞翁失马,焉知非福。在待业期间遇到了女朋友。 后面的半年时间过的飞快。一转眼我们都在一起五个多月了。 今年希望能事事顺意!

技术问题解决工作

记录工作中遇到的两个bug

很久没有写blog了。这次在工作中遇到两个bug,更新一下。 生产环境与开发环境不一致的问题 在上线几个新功能之后,突然QA反馈线上的某个页面的switch按钮不见了。当然,因为程序具有默认行为,所以这几个按钮不见倒也没有太多的用户反馈。 因为可能在用户看来这个页面本来就是不能做更多控制的。所以我有足够的时间来找出问题的所在。 在尝试了多次改动之后,发现这个switch按钮在开发环境&测试环境都能看到。但是一到了beta环境或者线上生产环境之后,就还是莫名其妙的失踪了。在线上的console里面甚至看不到任何有用的报错信息。。只有一个奇怪的没有任何提示的红色Error。 用Chrome的console指针点击页面后,发现按钮组件的dom根本没有生成,而是一个类似于v-if=“false"情况下的 <!-- --> 我开始怀疑是否组件没有正确传入参数,并尝试了几次修改控制组件展示的变量,但是都没有成功,仍旧是在开发环境生龙活虎,在线上、beta消失不见。 在咨询浩洋哥之后,他提出可以让运维看一下是否发布了正确的版本。 但是我对比了自己push上去的代码的hash值与CI中build的hash值,却是一样的,说明发布环境没有什么问题。 就在我百思不得其解的时候,我在beta环境上看到了一个错误提示。应该也就是线上那个被过滤掉的错误提示信息。 大概意思是说,true不能作为值 赋值给onClick。 恍然大悟,想到自己在这个组件里看到的on={true}这个选项。意识到这里的on被某个插件(怀疑是升级过后的babel插件、或者typescript插件)自动识别成了onClick。然后将布尔值赋给onClick,自然会无法赋值成功,然后导致运行时错误,dom也就无法顺利渲染出来了。 将on这个属性改为switch之后,上beta,果然,问题解决了。 启发 首先这个坑是前面人留下来的,用on来作为一个标志记录组件的状态属实是有些问题的。一般朋友命名时应该都不会用这么简单的名称来写到dom属性上面去吧。 其次,对我的启发是,自己对代码打包过程的理解还是不足的。如果能够知道每个依赖都做了什么的话,也许在一开始从线上/线下环境不一致就应该考虑到是打包工具的问题。继而寻找代码中有哪些地方做的不够规范。 vue-router中replace方法失效的问题 第二个问题更加让人头疼。搞了一天才总算搞定。 当前负责的这个项目中,vue-router的replace方法莫名失效了。结果导致在很多机型上面,操作应用之后各种页面都push进history栈当中。在返回的时候,会有很多之前的页面,返回半天才能返回到应用的入口。 前面的项目负责人为了解决这个问题,在程序中用了hack的方法,监听页面左上角的返回按钮,在返回到首页的时候,点击返回按钮直接关闭应用。而我也做了一个优化,就是用客户端同事提供的sdk,监听了返回事件,进行页面的跳转。 但是这个方法也有其无法处理的问题。就是在iOS的机型上面,左滑返回上一页是不在返回事件控制的范畴之内的。导致在iOS上面左滑很多次都有奇怪的页面,很多次才能退出应用。当然一直使用push也会导致应用算占据的内存不断膨胀,也许在操作多次之后就会crash(未验证是否keep-alive会有助于解决这个情况) 所以我就着手开始解决这个问题。 其实问题一开始发现也是QA这边发现的,反馈的问题是我们上线新代码之后频繁出现了这个问题(这个问题QA同学一直有遇到过,但是这几次上线之后特别频繁,稳定复现)。 第一个发现的问题就是,在应用首页多个tab中,之前的开发使用了$router.replace()来记录首页多个tab的变化。当我把这个$router.replace()去掉之后,应用正常切换tab,且观察到浏览器当中的history栈不再增加。 理论上使用replace来做这种事情是没有问题的。但是在这个replace不生效,莫名变成push的情况下,就变得很糟糕。可以通过快速点击首页的tab实现生成爆炸长度的history。 当我搜索项目后,发现这个replace主要是提供了一个新的query,叫做tabIndex的值,给另外仅有的一个地方使用。这就让我很放心了,其实这种在app内的应用,完全可以不需要这种地址,反正每次进入都是首页,而且切换tab的事情完全可以放到vuex当中存储。没必要放到路由当中,如果实在不行,就把首页的这个replace撤掉,然后改写一下那仅有的一个地方好了。 但是问题没有那么简单,虽然这个tabIndex只有一个地方使用,但使用$router.replace()的地方可不止一处,而且很多地方都是不可替换的。 那么我们继续调查为什么这个router.replace()失败了呢。当我回归到vue-router的文档时,发现replace方法的第二个、第三个参数可以分别设置为replace成功与失败的回调。当然也可以不设置,这样replace返回的是一个promise,可以使用then,catch语句进行捕获结果/错误。 心想这样总可以找到问题了吧。然后用了回调&catch语句发现,的确是跳转路由失败了,但却没有返回值。(笔者用的vue-router版本不是最新的,最新的代码已经添加了这个报错信息) 返回的报错值是undefined,就很让人头大,不知道问题出在哪里。 尝试了一下replaceState方法,发现在使用这个方法的时候,能够正确地更新history历史。实在不行我就把所有的$router.replace()都替换成history.replaceState()吧。我这么想着。 回头去看vue-router的文档,发现有一个replace选项,甚至在网上查到尤大在0.x版本的github issue上面跟网友探讨是否replace的默认值设置为true会更好一些。抱着试一试的心态我给项目中所有replace方法添加了replace: true。 果不其然,没有任何用处。 没办法,只能硬着头皮去看vue-router的源码了。使用debugger开始单步调试,看了大半天,也没发现什么问题。看到不知道几层的代码逻辑之后,连自己也绕晕了。不想再读下去了。 心想,难道真的升级下vue-router的版本就可以了?于是自己抱着怀疑的态度,去随便搜索了一个公司内的其他项目,确认了代码中也使用了replace方法,然后发现不论是公司的脚手架,还是vue-router的版本,都是一样的。 果然,问题不出在vue-router或者脚手架的版本上面。前面已经翻过脚手架的CHANGELOG,根本没有发现有什么修复vue-router相关的问题。在网上搜索也找不到相同的情况。 只好无奈地继续翻vue-router的源码,单步调试看问题出在哪里。嗯,,vue-router最后会生成一个队列,然后把所有钩子函数都执行一遍,然后跳到了一个方法当中去,根据这个方法中的to.replace来看是需要使用push还是replace方法。等等。。?这个to是哪里来的?不是replace方法中的replace选项,那是哪里来的?看着单步调试中,栈在处理完队列的时候,history的长度又增加了1,就觉得莫名忧伤。 就在这时,我找不到原因的时候,又看到了自己之前尝试的replaceState()的代码,在浏览器中尝试,突然发现自己页面上面虽然能够跳转成功,但是页面的query中携带的用户信息&其他query都不见了。 这就让我想起之前看到的项目中,两年前项目开始的时候就已经添加上的那个写给vue的插件了。这个插件添加了一个beforeRoute钩子,在钩子中,保留了需要保存的query信息。我想如果要用replaceState来做的话,也要看下怎么兼容这个方案吧。 打开plugin的文件的时候,突然一道灵光闪过,我意识到问题所在了。 !!!!!! 就是这个plugin在它的钩子里使用next()方法修改url的时候,没有使用replace参数!导致每次$router.replace()都会新增一个页面到history栈当中去! 在给next方法添加了replace:true选项之后,反复试了几次,发现果然history在$router.replace()的时候不再增加了。 我解决了一个两年前的bug! 启发 谁也不曾想到,这个问题居然会是这样引起的。 反思自己一步步来debug的过程,可以看到自己对vue-router的原理一步步加深,但是还是没有完全吃透。 所以,还是努力把vue-router的源码搞清楚吧。这样再次遇到类似的问题时候,就会更快定位到问题所在。 再一个启发就是,vue-router已经经历了社区的验证,其实不需要花费过多时间在找它的问题上面,而应该将问题聚焦于自己的业务代码上面。毕竟其他使用vue-router的项目,都没有遇到这个奇葩的问题。所以问题更大可能性是出在我们自己的业务代码/项目自有的框架上面。 最后 晚安! 好好休息,保持好状态,不要过分熬夜!就算进度赶不上,也不要太过着急了!

思考感悟影评

《无双》观后感

昨天跟果果一起约好了小聚一下,翻了翻最近档期的电影,发现只有《无双》的评分还是蛮高的,于是下午就一起欣赏了一波。 可以说,这是一部高智商犯罪片。作为男主角的“画家”(也即李问),以及作为女主角的秀清,可以说都是智商超高的人物。让我想起的另一个角色就是《越狱》里的Micheal Scofield。画家有着制造伪钞的技术,搞清楚了所有的技术难点,有着超强的记忆力和绘画水平,以及超一流的编剧、表演水平。想想自己的水平,高智商犯罪,算了还是好好当老实人吧。真的存在这样的人的话,那可真是我完全没法想象的生活。 P.S. 当时怎么自己没有选择印钞相关的专业呢。 讲故事一开始的时候我就在想,这大概是第二代或者第三代华人吧?要是刚搬过去的留学生,大概率家里条件不会这么差,而且学艺术的话,我觉得在西方应该大概率都是富有阶级才能够去做的事情。至少在中国,上一代从饥饿的时代过来,不会去冒险做这种事。(果然,全是李问编的) 片子中场的时候,我想到,这都回忆了快一个小时了。怎么还没去抓呢?到五点钟就散场了,还不到一小时,要是去抓画家,时间也太紧凑了吧? 所以让人惊喜的,真的在最后二十分钟,故事剧情峰回路转。我们发现之前的很多都是李问假造或者改造的故事。 难道李问就这么跑了?戏耍了日常没用的警察,然后保释成功出来了?不行,这不符合社会主义核心价值观。所以最后,还是有那么一出爆炸。 这却也是人物性格的悲剧。就算从卑微的人物成为叱咤风云的伪钞罪犯。自身的那些缺点却从来没有改变过。最后几个送命题,耿直的回答,真的是让李问送了命。站在男人角度想,千万不要KY(读不懂氛围),尤其是那些关键时刻。但是从秀清的角度来想,有这么样的回答,也真是绝望。最后的选择,也真是最好的结局。 到最后,警察到大西北找到真正的阮文的时候。一句,“他是我那个时候的邻居”,让人觉得辛酸不已。作为一个有过类似心理感受的人而言,可以说是秒懂了李问的心思。却不得不说,这种偏执,我是做不到的。回忆里一直对他吼着,要做一百万个人里的主角的那个“发哥”,其实只是自己被压抑、被鑫叔说只能做小角色的反抗。“放弃爱情的男人,什么事情都做不成。”我从心底里是佩服这句话的。但是到最后,其实阮文根本没有认识过这个男人。这是多么卑微的爱慕啊。如果换做是我,也许,不,我一定会放弃这个。所谓“重温旧梦就是破坏旧梦”,不如就让那美好的想象一直存在于自己的心里好了,甚至是忘掉。 而李问的绰号为什么叫画家?李问从来不是一个画家,而阮文是。 让我觉得好奇的是,是什么让他追逐成为主角?那种偏执,在我身上可以说是没有。那种在球场上追求胜利、在技术上追求极致的精神,也是被我舍弃掉了。我没有这种偏执,却十分能理解他们。这是李问之所以能成为李问的关键要素,却也是他始终不能放下,好好享受生活的根源。 我想,能够成为这样的英雄,也不错了。 而我的朋友们,我们还是好好珍惜眼下的幸福,一起欢笑,一起潇潇洒洒地生活吧。

技术问题解决教程

拯救你的ubuntu

在给大金鱼的ubuntu添加gulp相关的环境变量时候,因为看了不正确的教程。把/opt/profile里的内容修改了,导致无法进入系统。登录界面输入正确密码反复卡在登录界面。 折腾了许久,发现了解决方案: 在启动系统的时候长按shift,进入Linux的Recovery Mode,但是,这个mode下面却无法修改文件。在grub选择Recovery Mode的时候按E,编辑启动文件来修改启动方式。 将 ro recovery nomodeset 改为 rw single init=/bin/bash 参考资料:recovery mode

回忆思考感悟心情

再见我的2017年

通常来说,都认为人在本命年会过得比较坎坷一些。(至少某人是这么认为的吧。) 再见我的2017 甚至有些平淡地不够真实。 我想我的问题还是在于有的时候没有去考虑,不自觉地在逃避某些东西。 有些东西,其实自己知道应该要做什么。但是当有时间的时候,却麻木————或者,我也找不到太好的词————不太想做事情。 每个人都有自己的苦恼。 恐惧 仔细思考下,觉得自己仿佛一直都只是在原地徘徊。从大二下挂科开始,之后虽然自己再也没有挂科,可是却再也没有进入状态。那种巅峰体验,退潮了。我已经很久没有体验过了。其实在玩游戏的时候偶尔有体验过。 有时候很害怕,因为自己的未来。假使自己是努力,尽力还是不能达到某种程度。那好像。。好像也是另一种伤心。但是,目前对我来说,比现在给我带来的这种体验,也许会好一些吧? 做得好 细数自己做的好的方面,好像都没有什么。就拿游戏方面来说,我好像玩的蛮多的,但是都没有那么好。LOL,也就黄金守门员的水平。DNF,早就弃坑了。炉石传说,冲冲钱在20级虐虐小朋友,传说,不存在的,竞技场更是经常2-3胜出局。王者荣耀倒是,玩了快400把终于上了个钻石。这个游戏钻石水分很大就不用说了。射击类游戏,玩的蛮多的,就不用多说了,玩不了。那些氪或者肝的,对不起,玩不起。什么崩坏2,舰N。LoveLive的,也就刷刷hard难度的,当一条咸鱼了。 完 这边文章写的时候心里有点潮湿,但是写着写着也觉得释然了。文章没有写完,但是到现在,已经没有要继续这个话题写下去的想法了。说完了。 关于生病 最近我养的猴子生病了。已经歇了三天。