2025-03-06 00:08:47
在某宝购物。收到的提示短信是“你有一个包裹被放在快递柜,点击XXXX链接激活隐私选项……”
这种带链接短信,直接无视。10小时后收到超时警告短信,再往回找那条被当成垃圾的短信,捏着鼻子点一下,不是病毒,却是手机某宝的安装链接。
装你奶奶个腿。拨打短信里的某通客服电话。客服说:“应该是买东西的时候不小心选了隐私号码,或者店家发货的时候选了隐私号码,您只要在手机某宝上关联一下隐私号码和真实号码,就能够收到短信了。”
我说:“没有手机某宝,但你可以告诉我,网页版在哪里设。”
客服说:“只能在手机上设,网页版没有。要不我帮您联系快递员吧。”
也不知道某通内部是怎么个流程,快递员给我打电话已经是3小时以后了。
快递小哥经常遇到这种事,直接问真实号码,然后发了取件码短信。
不过他多了句嘴:“你直接打短信上我的号码不就完了嘛,走公司转一大圈。”
我说:“哥们,难道你不知道,我收到的短信,把你的号码也保护了啊。”
春节后开发间爆发诡异病毒。现象是机器被拖得奇慢无比,编译一个exe需要一个半小时。而且这个诡异的病毒还挑人,包括我在内有8个人完全没中招。
部门领导如临大敌,全体断网杀毒。
然而根本杀不到什么毒。且只要网线一拔,症状立刻消失。
又找IT服务部查看路由配置,又用工具抓包,又比较中毒的和没中毒的,安装的软件和补丁有什么差异。
找到的病根有些令人无语:微软新更新了部分服务器,不在IT的白名单[1]范围内,而微软的傻叉Win10系统一直在死循环重试。解决办法更令人无语:工具栏上右键–【资讯与兴趣】–无效 即可。
所以我们8个并不是免疫病毒,只是对微软提供的兴趣不感兴趣。
Chrome的Feedbro不符合什么规范,被下架了。
思考了一分钟就想到了解决方案。换Firefox版Feedbro。两个版本对我来说本无所谓,之前FF上跑了太多的油猴脚本,不想再加载一个自动填充用户名的脚本而已。所以,加个脚本就好了,我才没有兴趣去找神马最佳替代品呢。
只是给自己提个醒,OPML的备份要更频繁一些。
客户那边去年10月进行结构调整,消费类部门被大量裁撤,人员分流到我们医疗类。
我们接口的上两级领导都换掉了,新领导完全不讲情面,直接把原项目经理送到后勤部门混吃等死。
消费类的这帮人之前没怎么跟中国人打过交道,这一颗颗蠢蠢欲动的心啊……
春节刚过,大S尸骨未寒,客户就一批一批组团过来了。
我们对应的客户全组出动。直接领导平田,平田的领导大冢,平田的两个小弟,铃木和奥田,以及我们日本分公司的陪同人员森,一下子来了5个日本人。
其实就是一个小组倾巢出动了,只留了两个外驻看家。
最后一天,客户希望跟我们全组一起吃饭。
但是。老宋父亲高血压眩晕住院了,离不开;小钱被客户带来的病毒干倒了,不能参加;陆老师二胎7个多月了,不能参加;小玲才招来不到一个月,怕被问,不能参加;死小孩中国话都说不明白,八竿子打不出一个屁,也不能参加。最终只有包括我在内的两个组员出席。
分给我的很艰巨,负责把日后的直接领导平田搞定。
跟平田的切入异常丝滑:大冢是个三国迷,先扯出话题,大家最喜欢的三国人物是谁?
桌上这群日本马屁精显然为了讨好领导,都是研究过三国演义的。竟然没一个给出头部人物:カク、ホントク、チョウコウ、カキン。
桌上几个日语好的中国人都凑半天只凑出个贾诩,看着频频点头的大冢,为了不给中国人丢人,我只能上了:“另外三个是庞德、张郃、华歆。”
几个中国人没有质疑我的听力,反而在质疑我的三国水平:“华歆是谁?”
华歆就是我们日本分公司那位买办答的,正常人读三国有喜欢华歆的啊,演义里华歆就是条狗啊!真他娘的什么人玩什么鸟。
大冢同时卖弄自己的魏晋知识和中文水平,给几个中国人普及了割席断交的典故。
平田恭维我一句,夸我日语没有之前自我介绍那么差。
我用手机打字翻译:“哪里哪里,我小时候学习假名全靠玩三国志游戏,所以对三国人名很熟悉,别的不行。”
平田也打字:“我也在PC98上玩过很长时间的三国志2啊。”
我:“PC98上有很多hentai game啊!”
平田看到hentai game两眼放光:“你也玩hentai game?同级生?”
我:“下级生、臭作、鬼作。”
这暗号立刻就对上了,推杯换盏,跟平田大哥讨论了一晚上ELF的兴衰史。
铃木是自己找过来的。第一个话题也很平常:“王さん对日本的哪些文化感兴趣啊?”
这不是有标准答案的嘛:“漫画、动画、电子游戏。”
铃木:“那么王さん最喜欢的漫画是哪部呢?”
这我要说个幽白龙珠三大民工什么的,多丢份啊!
铃木只比我小几个月,拼一把:“hojyo tsukasa, ANGLE HEART”
铃木当即把我引为知音。
跟铃木小弟讨论了一晚上漫画不止友情热血胜利。
我确实喜欢天使心,但更多的是看铃木的小辫子跟北条司的自画像神似。
介绍会上平田的客套话言犹在耳:“日语不好不要紧,C语言是程序员共通的语言。”
除了C语言,男人之间还有别的语言。
某同事小P,午饭后在公司楼下溜达消食。打游戏没认真看路,撞到了路边摊买苹果的大妈,撞掉了她的手机。捡起一看,屏碎了。大妈拉着小P,要¥2000。小P报警。警察大哥主持公道,拉着两人去附近一个店里修手机,花多少算多少。最后只花了¥200。警察大哥还用警车把小P送回了单位,把大妈送回了家。
小P觉得那家修手机技术还不错,周末跑去修一个旧手机。发现手机店主是警察大哥的表弟。
小P越想越气,找到城管电话,把苹果摊举报了。
注:夫=大姨夫。
2025-02-12 20:54:02
老婆大人说:“放那么多天假,咱们出去玩吧。”
老婆大人说:“哈尔滨人太多了,咱们去长春吧。”
闺女大人说:“对啊对啊,咱们去看冰溜子吧!”
我说:“我留在家里铲屎吧!”
老丈人说:“你们走吧,我来铲。”
我心说:“我谢谢您呐。”
年前,腊八的时候开了一次电视,给老丈人准备春晚。未雨绸缪还是对的,盒子上之前的APP果然又双叒叕被封了。连夜搜刮了一批,穷举法找到两三个能用的。
第二天回老妈那,自然提起这件事,老爸老妈都说还能用。心里还挺奇怪,自然归咎于网络供应商选择性封资源上。
除夕白天回家,见老爸没开电视,问了才说:“上次你走了第三天就没信号了。”
我说:“你怎么不告诉我啊?”
老爸说:“我不是琢磨现在抓的严,怕你不好整嘛。反正里屋的电视(用宽带送的盒子)也一样看,里屋还暖和。”
我说:“抓个屁啊,当年你弄个有线电视拿同轴线把家里接的跟监控室似的,又弄什么信号放大器的时候也没人管啊。找软件费点事,装软件又不费事。”
果然江湖越老,胆子越小。
初一回家,第一件事就是给老头儿装APP。
因为老丈人提出今年除夕不在我家待着,吃完晚饭就回自己家,所以今年我的安排格外地紧。白天回我爸妈那里,勉强吃个午饭(其实3点多才吃),然后急匆匆赶回自己家,吃过年夜饭之后亲自上阵包饺子。
老婆大人不知被什么邪门视频影响,非要包白底绿边的白菜型饺子。这就意味着饺子皮不能买现成的,而是得自己擀。
因为业务不熟练,从20:30到23:30,一时不停地和面、擀皮。
23:58才堪堪把饺子煮好,腰差点累断。
初二上午去看电影。她们娘俩选的《魔童闹海》。
我知道这片子质量会非常好,但我就是不喜欢。自己选了《唐探1900》,一般。
初三出发去长春。到达之后是下午13点多,两个短视频爱好者按照事先的攻略打车去找网红店吃午饭。因为过年,网红店A没有开,网红店B也没有开。
俩人冻怕了,也不知道再找一家会不会开门。最后还是回到了住处附近的大型Shopping Mall 【这有山】,找了家不排队的“江湖小牛”治饿病——这玩意儿哪不能吃!
下午去了“别掰冰溜子”视频源起的【世界雕塑公园】。公园很大,可玩性不高。网红冰溜子是个另外收费的园中园。她们娘俩进去了,我没进。15分钟出来,我的阅读器早已冻关机了。
然后是【南湖公园】,有冰雕雪雕,有拖拉机拉人转圈、冰上章鱼、电狗拉爬犁和冰上滑梯等付费项目。这些东东其实我们伊尔廷市也有,差别只是人工雪和天然冰而已。给臭宝租了个救生圈玩冰滑梯,半小时后力竭走人。
接下来是【桂林路】网红小吃街。失望透了。没有特色食品且贵。唯一比较新奇的食物是由辣条串成的糖葫芦。
初四上午的第一目标是网红早市。没开门。第二目标是网红小商品批发市场。没开门。10点左右,奔赴网红火锅店【元盛居】,排队2小时10分钟,非常非常普通。木炭铜锅子涮肉,没别的了。不值两小时。
下午的目标是此行的重头戏——【冰雪新天地】。坐车50分钟才能到达。地方很大。可玩性很低。1314米的空中漂流不额外收费,需要排队两个半小时以上。另付298块可以插队。520米的超级滑梯,也得排接近2小时,还不让体重90kg以上的坐。其余就是老朋友拖拉机、章鱼和电狗拉雪橇,需要额外付费,而且比第一天的南湖还要贵。
一个也没排。
园中还有很多冰雕,也许到晚上亮灯会很好看吧。我们也没等到晚上,随便转了一圈,就返回市内了。好在返程的大巴比去时快很多,差不多只要半小时。
长春最不爽的地方是一种当地特产:红旗的一款电动车,网约车有70%概率会约到。这车特别逼仄,每次坐进去就是受刑。你见过发酵了三天的面盆吗?活该你卖不到外地去啊。
初五早上6:20的火车去沈阳。下车以后又是直奔沈阳的网红【小河沿早市】。啥啥都排队。臭宝排了个心心念念的鸡肉夹饼,排了15分钟队,吃两口扔了,说还不如家门口美团点回来的好吃。
接下来是【中街】。20多年没来,几乎不认识了。
【大悦城】C座是此行唯一一个大人孩子都满意的所在。这里楼上差不多三层都是卖二次元周边的。跟闺女约好一个集合地点,我就坐着休息了。甚好。
晚上在【西塔】吃了一家网红烤肉。又排了两小时。也一般。也不值那么多时间。
下次再也不跟这俩短视频爱好者一起出门了。
我特别不喜欢走路吃东西。
我说有用吗?
P.S:都已经2502年了,再用“瘟都”这种带着错误的个体记忆的名字指代这座城市,有没事找事的嫌疑,所以从本篇开始,起个新名字:伊尔廷市。
伊尔廷市=自2012年就被按下暂停的城市。
2025-01-28 08:13:10
年度佳作:《太阳之下》、《浊水漂流》、《乡村里的中国》、《假如我是真的》、《被嫌弃的松子的一生》、《那山那人那狗》、《完美的日子》、《教父》、《走走停停》
年度抵制:《发财联盟》、《月光武士》、《非诚勿扰3》、《自由》、《扫黑行动》、《逆鳞》、《黑火》、《巫术面具》、《黑暗之屋》
年度惊喜:《飞驰人生2》、《轻松+愉快》
年度失望:《年会不能停!》、《夜色撩人》、《中国机长》、《燃情岁月》、《自画像》、《神偷奶爸4》、《九龙城寨之围城》、《天狗》
年度特别推荐:《乡村里的中国》
年度最佳导演:《走走停停》龙飞
年度最佳剧本:《假如我是真的》沙叶新、李守诚、姚明德
年度最佳男主角:《东京奏鸣曲》香川照之(饰佐佐木隆平)
年度最佳女主角:《歌厅》丽莎·明奈利(饰莎莉)
年度最佳男配角:《浊水漂流》谢君豪(饰老爷)、《教父》詹姆斯·肯恩(饰山米·柯里昂)
年度最佳女配角:《浊水漂流》李丽珍(饰陈妹)
年度最佳音乐:《教父》
年度最佳画面:《教父》
年度最佳续集或翻拍:《飞驰人生2》
年度最佳网大:《兴安岭猎人传说》
年度最佳镜头:《涉过愤怒的海》梦境中被吊死的黄渤。
年度最差导演:《月光武士》虹影
年度最差剧本:《非诚勿扰3》冯小刚、张耀之
年度最差男主角:《热烈》王一博(饰陈烁)
年度最差女主角:《没有一顿火锅解决不了的事》杨幂(饰幺鸡)
年度最差男配角:《好像也没那么热血沸腾》王子异(饰林栋)
年度最差女配角:《姨妈的后现代生活》赵薇(饰刘大凡)
年度最差续集或翻拍:《功夫熊猫4》
甲辰年是平年,全年353天。
今年观影192部,比癸卯年(去年)少了25部,减少11.5%。比壬寅年(前年)少了1部。考虑到闰年因素,这三年的刷片频率非常稳定,继续保持。并没有达成降量到185部的目标,毕竟还是受到了奥运会pee time的影响。乙巳年虽然没有大比赛,但闰六月,目标210部吧。
平均分4.94,比去年降了0.06,基本等于前年与去年之间的中间值,这三年的整体差距很小,比再往前三年的评价大为降低,可能跟疫情之后电影行业整体的摆烂有关。
从月份分布上看,全年都比较平均,最多的五月19部。应该是端午小长假跟“七一”前集中销有薪假共同作用的结果。奥运会期间的观影体验是最差的,连4分都不到,也是见鬼。
今年有1部满分作品。伟大的《教父》,无需赘述。
今年另有7部9分作品。
其中我评价最高的是(伪)纪录片《乡村里的中国》,虽然仍旧有些假,但已经很真了。我真正在意的并不是主角那个光说不练的主角小老头,或者夸夸其谈的村支书,而是镜头周边的乡村里的日常。对我来说,这些都很新鲜。今年的特别推荐的理由也正源于此。
其次是名作《那山那人那狗》,确实不负盛名。整片巴适得很,迄今为止看过最好的国产公山路片,只是邮资跟片头字幕的冲突有些恶心。
然后是2024的新片《走走停停》,片中幽默和煽情的比例刚好卡在我的舒适区,而且有精彩的结局。
接下来的《太阳之下》、《假如我是真的》,都是反映社会主义幸福生活的。
《完美的日子》是典型的日式温馨日常,拍得毫无问题,只是看多了稍微有些审美疲劳。
《被嫌弃的松子的一生》也不提了。
烂片方面,刨除网大后有3部0分作品:《自由》、《月光武士》和《扫黑行动》。《自由》有肉戏,但潦草,全片不知道讲啥。《月光武士》故事和表现手法都极其幼稚乏味。《扫黑行动》就是资方在侮辱观众的智商。
此外还有包括《非诚勿扰3》在内的5部片子只值一星,各有各烂,就不再多骂了。
年代分布上,25年春节来的早,元旦之后还没来得及刷新片。2024年当年的电影看的是最多的,达到36部,整体水平令人失望。除了《走走停停》外,包括《因果报应》、《姥姥的外孙》两部引进片在内的受关注作品都显得比较平庸。当然因为贫穷和时间的原因,还有一些口碑不错的作品(《里斯本丸沉没》、《破地狱》、《好东西》、《怪物》、《年少日记》……)没找到资源或者没来得及看,希望明年的这个时候2024出品的口碑能够反转。
2023年的片子比2024更差,2022又差于2023,这么看的话,反倒是电影行业有转好的趋势?未必,可能只是当年的好作品会被更早的点名罢了。
比较意外的是2001-2010这10年的口碑意外的好,其中有一小部分确实是冲着名声去的。
地区分布方面,内地片时隔5年之后重新夺回刷片量的榜首。日本片的数量第一次掉出前四,其绝对数量并未减少多少,但是今年看的中港台日以外的亚洲地区的片子确实是不少——坚挺的印度、异军突起的菲律宾和杀回来的泰国。明年不能再刷那么多菲律宾小电影了,又浪费时间又拉低分数。
按地区划分,分数最高的其实是台湾地区,只是片量离统计标准差了一丢丢。总的来说台湾片虽然仍旧有墨迹的毛病,但题材真是丰富多彩,又适合华语文化。
世界地图点亮了冰岛、哥伦比亚和塞内加尔。冰岛电影《金属党》开始很冲,过半之后忽然回归到无聊的亲子话题上;哥伦比亚是一部平平无奇的小成本惊悚片;塞内加尔电影《猎杀令》开头的黑道仇杀加部落巫术也挺有意思的,结尾10分钟忽然外星人降临,见鬼了。
片子类型里,成本最低的恐怖片和喜剧片最多。动作片依旧是评价最低,家庭类依旧评价最高。我的口味这辈子就这样了。
跟之前的两年一样,进了两次电影院。《猩球崛起:新世界》和《抓娃娃》,分别是老婆大人和孩子翻的牌子,与我无关。
片长方面,150分钟以上的作品只看了4部,确实控制了一点点,除了《教父》都是平庸的作品;短片里有一部台湾动画《夜车》,相当有趣。
今年刷了3部豆瓣250[2]和6部IMDB250。《教父》是两榜都有的作品。豆瓣榜上的《燃情岁月》和IMDB的榜上的《奥本海默》、《瞬息全宇宙》,看过后都有些失望。倒是非常推崇前苏联的《自己去看》,相当野蛮和残酷。
R级片比去年多看了5部,上涨了4个点;某瓣未记录电影看了10部,是去年的2.5倍。说明有的东西只要肯用心,还是能找到资源的。
系列电影只刷了3部《断魂小丑》,在血浆片这个类型里还算有点特色,总体看来不值一提。倒是搜集了一批“拍摄在大连”的电影来看。资料还没整理完,届时应该会有一篇长文总结。
今年的年度特别推荐属于纪录片《乡村里的中国》。摄制组在山东农村蹲了一年,很多人嘴上的田园生活并不美好:种了一年的苹果卖价的毫厘之差对于农民来说都是头等大事;乡亲之间动手之后一地鸡毛;树被砍了根本没地方说理……真实而又魔幻。
下面是影片的详细信息和三句话简评。右侧为本人评分,仅代表个人观点,拒绝客观公正。
评论皆原创。
2025-01-23 20:20:38
游戏有5个小游戏组成——
JOUST,是两个人各自手持一根包了头的木棒,站在平台上互捅,把对方捅到台下算赢;
HUMAN CANNONBALL,是一方荡绳子,撞击位于平台上的另一方,把对手撞下平台算赢,否则输;
POWERBALL,场地里有5个台子和3个防守者,玩家从上下两端每次取一个球,限定时间内放满5个台子算赢,防守者可以用身体阻止玩家,有点像美式橄榄球;
ASSAULT,对手坐着能横移的叉车向外扔子弹,玩家在掩体后面拿到武器后与对方对轰,三发命中后KO对手;
WALL,就是爬墙,躲避障碍物和从各个方向出现的敌人,碰到墙或者被敌人碰到都死。
前4个小游戏都不算难,但是最后一个爬墙游戏简直是变态——给角色提供动力的方式是交替按下AB两键,有障碍有敌人,怕被敌人追上要按的快,不碰障碍还要能做到及时刹车。而且还有时间限制。而且红白机游戏有个特点——当你的右手折腾的频率越高,左手的虎口就酸得越快,小臂也会很快发僵。
我并不是个跟难度死磕的人,像忍龙那样死活过不去的游戏,也很少放在心上。但这个游戏就很会搓火,其余四个很简单,就这个爬墙,好像眼瞅着能行了,却总差那么一点儿。一不注意就搓到手抽筋也一无所获。
2005年的时候,借助即时存档功能,我曾经把5个小游戏都打过了。当时想当然的以为自己跨过了这座山。而且本作的操作性实在不好,除了掉凳时的音效以外可谓一无是处,所以A开头的游戏也没选它。
今天偶然看到一段通关视频,我才知道25岁的我还是太年轻了。我那只是通关了LEVEL1。人家真正的设置是每周目难度逐级增加,直到打通LEVEL4,才会出现极为变态的附加关,通关附加关后才会出现真正的结局。
我现在的水平,打到二周目爬墙的时候,大脑里说你还可以的,右手拇指与左手手肘已经在同时抱怨:滚犊子!
讨论红白机最难游戏的时候,本作竟然连一个提名都不能获得,这不科学!也许太多人跟我一样以为这只是个无限循环没有结局的游戏了吧。
游戏还是那么难,水平甚至比当年还退步了很多,但它再也无法在我心中掀起波澜了。所以今后我可能会陆续把这些阴影都翻出来挑战一下。
这个游戏没能通关。下面是我从别的地方搞到的通关画面:
2025-01-14 22:48:19
年前项目组招人,作为技术考核人面试了近20位人选。
35岁以上的比比皆是,比我大的也有。一家美资的著名友企,9月份的时候就清场了,没想到这波面试大约1/3来自那里,其中又有4位几个月来一直待岗。
有位47岁的大哥给我留下的印象颇深:
他做车载是可以从底层驱动到云平台打通关的,说起项目管理也头头是道。只是最近几年没怎么用C++,答题分数不太高,但是看他的谈吐应该两个月就能捡起来的样子。
最主要这位大哥的精神状态,明显没有从忽然被裁的打击中恢复过来:12月10号还带着项目组加班到晚上9点多,12月11号通知项目没了裁员,12月18号就来我们这面试了。
PM跟我经过不怎么缜密的磋商,最终还是订了一位88年的小姐姐。明面上的理由是大哥日语不好,技术也脱离了一线。实际上的原因我们都没说。
如果我也出去面试,可能还不如那位大哥。
客户也觉得当前的小破项目负担个3人驻日的成本有点高。于是主动推进,要给我们买机器买板卡,恢复到以前的离岸外包的状态。给了开发机20000一台的预算。这种公家采购要一个正规,必须是某东上的品牌专业店才行。作为核心要求的那块要命的视频卡,需要两个8X的PIC-e插槽,这是个不变的刚需。本来我们这项目主要是跑视频采集卡,对CPU、显卡和内存的要求都不高,预算应该是够用了。但所谓品牌机有个特点,就是反木桶原理,一个高了,另外的配置也跟着高。多个PCI-e插槽的服务器,大多是为了上高档显卡,给AI运算准备的。找个价钱合适的服务器并写报告,就花了我两天时间。
我把报告交了就算完事,能不能跟各个网店谈判更改配置就与我无关了。但对于我们PM来说,这只是苦难的开始。
先是不能直接买,而是要把选好的型号发给采购部门审批。采购部门问,怎么没有XXX认证啊,就得跑去问客服。客服说不明白,又转达给采购部门,来回折腾。把客服发给采购部门让他们直接沟通,答曰不行,不符合规定。
然后是内部审批,年前流程走到部门长批完,转给集团法务。然后部门长年底离职,任务移交给了下一任部门长,但是邮件系统没有同时转移,法务过完年回复的时候,系统跟邮箱不同步,发不回来了。
又问,我们挺着急的,打回来重新走一遍流程行不行?法务和采购异口同声说不行。法务说要是能给你打回去早打了;采购说已经开始记成本了不能重来。
只能等不知哪个部分的所谓同事先修复部门长邮件变更的BUG。
WQNMGB的中字头央企。
臭宝终于把她姥爷给的破手机用到黑屏再也不亮了,心中窃喜之余,还是想做戏做全套,带着臭宝去手机店再最后挣扎一下。并且事先跟她说好,要是屏坏了就不修了。
店主瞅了一眼,说:“着急的话开盖10元,然后再说。”
臭宝着急啊,在一旁催促着:“开,开,开”,神情酷似山东版水浒里赌红眼了的李逵。
店主开了盖之后,把电池抠了下来,又装了回去,然后就把盖合上了。
嗯,别的毛病没有,只是死机了。
人家理由也很充分:“长按电源是解决不了的,如果你们等得起,放到没电就行了,但你们着急开盖啊!”
啊呸,就为了10块钱,你也干了。
支付宝最近的触碰付款在我们这个城市推广得很凶,公司旁边的早餐店的便利店脚前脚后都上了设备。
我也就比早餐店晚了一天就用上了。毕竟即使不算额外的优惠,我每顿早餐也能保底节省5分钱,这样只要上220天班,就能省出一顿早餐了呢,多划算!
只是有个小小的问题:别人NFC之后都不用确认,我开通了之后却还要再摁一次指纹才能确认支付。
2025年以前,我都以外为是我的手机系统安全级别高。
直到跨年夜,我那人工智障的物联网卡要求我跨月的时候重启一次。
支付宝NFC再也不要求我输入指纹了。竟然忘了重启治百病这条宇宙真理了。
某天,闲的,大概是因为凤还巢的老朋友S̆̈那里有IP归属地显示吧,忽然对被我删除的一些有IP归属显示和自动播放的RSS心生愧疚。
我完全可以在阅读器里本别建立【挂代理】和【摘耳机】两个分类啊。
说干就干,用SQL语句和正则,从历年的留言里抢救了近30个rss出来。
某在线服务大概识别出了我总是在单位挂代理上,要求我验证身份。验证方法是扫二维码或者给XXXXX发短信。
对于我来说,相当于只有发短信这一种方法。
打开手机,愣住了。我忽然发现,不算回复给10086那种,我可能有十几年没主动发出短信给某个号码了。现在的这部手机用了3年半,短信界面除了接码,我就没正经进过。
我想说的是,一时间我没分辨出哪个才是敲文字内容的框。当然,穷举法点几下就全明白了,但是你中间空那么大地方不能输入,这算个啥设计啊?
注:夫=大姨夫。
2025-01-13 10:44:40
最近项目升级开发环境,从visual stdio 2017升级到visual stdio 2022,出现奇怪的现象:同样的代码,2017编译出来风平浪静,2022编译出来一运行就是段错误。
我们的函数大概长这样:
class a { public: void DoThings(std::string str1, std::string str2, int idx){...}; void Do0(){...}; void OnInit() { std::string str1 = "FileName.txt"; std::string str2 = "X:\\Dest\\Path\"; int i = 0; std::thread thd = std::thread([&]{DoThings(str1, str2, i);}); thd.detach(); }; };
从debug表现来看,是调用线程函数的时候,传入了典型的野指针。但是啊,三个参数,两个是std::string,另外一个是int啊!string有问题可以理解,可int怎么还能错呢?
把参数改成传入前new,调用后delete,自然是解决了。但心里各种不爽,new一个int,脸往哪搁啊!
好在问题定位的范围比较小,只是起线程调用函数这一小块地方。
2017只支持到C++ 11,而2022是C++ 14,看来问题出在这里了。
去找lambda的说明:
For the entities that are captured by reference (with the capture-default [&] or when using the character &, e.g. [&a, &b, &c]), it is unspecified if additional data members are declared in the closure type, but any such additional members must satisfy.
人家说了,你用lambda进行引用捕获的时候,必须保证捕获的成员是安全的。
看到这里差不多明白了,是[&]的锅。[&]的意思是所有参数按照引用的方式捕获。而你的三个变量都是临时变量,传个毛线的引用啊!
如果不安全会怎么样?这玩意儿叫“未定义的行为”,爱咋样咋样。也就是说,我们的写法触发了这种未定义的右值引用行为,人家可以给你实装成保留地址,也可以转换成另外的指针进行实装。故而2017和2022都没错,错的是写代码的人。
继续写个例子验证一下:
#include "stdafx.h" #include <iostream> #include <thread> #include <mutex> using namespace std; std::mutex g_mtx; class CTester { public: CTester() { }; virtual ~CTester() { }; void Run() { for (int i = 100, j = 1, n = 0; n < 3; i += 100, j += 1, n++) { std::thread thd = std::thread([&] { Show(i, j, "std::thread([&] { Show(i, j); }): "); }); thd.detach(); thd = std::thread([&, i, j] { Show(i, j, "std::thread([&, i, j] { Show(i, j); }): "); }); thd.detach(); thd = std::thread([&, j] { Show(i, j, "std::thread([&, j] { Show(i, j); }): "); }); thd.detach(); thd = std::thread([=] { Show(i, j, "std::thread([=] { Show(i, j); }): "); }); thd.detach(); } } void Show(int x, int y, const char* pri) { std::lock_guard< std::mutex>lock(g_mtx); char szOut[128] = { 0 }; sprintf(szOut, "pri = %s x=%d y=%d\n", pri, x, y); std::cout << szOut; } }; int main() { std::cout << "Test Start" << '\n'; CTester t; t.Run(); _sleep(500); std::cout << "Test End" << '\n'; int c = getchar(); return 0; }
2017的运行结果:Test Start
pri = std::thread([&] { Show(i, j); }): x=100 y=1
pri = std::thread([&, i, j] { Show(i, j); }): x=100 y=1
pri = std::thread([&, j] { Show(i, j); }): x=100 y=1
pri = std::thread([=] { Show(i, j); }): x=100 y=1
pri = std::thread([&] { Show(i, j); }): x=200 y=2
pri = std::thread([&, i, j] { Show(i, j); }): x=200 y=2
pri = std::thread([&, j] { Show(i, j); }): x=200 y=2
pri = std::thread([=] { Show(i, j); }): x=200 y=2
pri = std::thread([&] { Show(i, j); }): x=300 y=3
pri = std::thread([&, i, j] { Show(i, j); }): x=300 y=3
pri = std::thread([&, j] { Show(i, j); }): x=300 y=3
pri = std::thread([=] { Show(i, j); }): x=300 y=3
Test End
2022的运行结果:Test Start
pri = std::thread([&] { Show(i, j); }): x=7599872 y=1992189472
pri = std::thread([=] { Show(i, j); }): x=100 y=1
pri = std::thread([&] { Show(i, j); }): x=7599872 y=1992189472
pri = std::thread([&, i, j] { Show(i, j); }): x=100 y=1
pri = std::thread([&, j] { Show(i, j); }): x=7599872 y=1
pri = std::thread([&, i, j] { Show(i, j); }): x=200 y=2
pri = std::thread([&, j] { Show(i, j); }): x=7599872 y=2
pri = std::thread([=] { Show(i, j); }): x=200 y=2
pri = std::thread([&] { Show(i, j); }): x=7599872 y=1992189472
pri = std::thread([&, j] { Show(i, j); }): x=7599872 y=3
pri = std::thread([&, i, j] { Show(i, j); }): x=300 y=3
pri = std::thread([=] { Show(i, j); }): x=300 y=3
Test End
很明显,只要敢给2022(C++ 14)传引用,它就敢给你乱引……
这部分代码是从厂商的例子里抄的。人家写的是
std::thread([&]{Do0();});
只是隐式地捕获一个this!当然写[&]就行了。
友军抄的时候根本不知道方括号是干什么的,只改了后面,才造成了这样的后果。
那么怎么解决呢?写[=]或者[&, str1, str2, i]吗?并不是。
lambda叫啥?“匿名函数”啊!你都要调用真正的函数了,就别整匿名函数那一套了。
正确的std::thread调用类函数的时候应该长这样:
std::thread thrd = std::thread(&a::DoThings, this, str1, str2, i); thrd.detach();
我是真心的不喜欢lambda。