Scribbles for my bad memory

Menu

Menu

  • Blog
  • Email
  • Feed
  • Draft
  • Log in

Categories

  • Tutorial
  • Database
  • English
  • Tips
  • Networking
  • Git
  • Movies
  • Essays
  • Programming
  • Linux

Pages

  • About me
  • Links
  • Vegetable Garden

Recent Posts

  • 网友语录 - 第32期 -…
  • Useful Oracle SQL syntax…
  • Update your flutter app icons…
  • 网友语录 - 第31期 -…
  • Introducing changesummary: A…

Archive

  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024

May 2025

  • 网友语录 - 第32期 -…

    这里记录我的一周分享,通常在周六发布。 米福根 讨好,融洽,满足期待非常耗能,也是我不甘去做的。但是怎么能在社会关系中避开形形色色的耗能陷阱呢? 我有一个经验是:雪中送炭时出把力,就可以对锦上添花的事说不了。毕竟雪中送炭不经常发生,而锦上添花是没完没了的。 前两天我突然被组长拎进一个危机会议,察言观色一番后,觉得虽然不关我的事,还是需要帮自己组说两句话。那时嘴里还嚼着口香糖,只好先关了摄像头,拿走口香糖,整理表情,再打开摄像头,举手发言。 散会后组长过来:你的发言很好,下个月他们来访,你晚上一起参加饭局吧? 我斩钉截铁地:不去。 #laugh 洋鸟消夏录 人的头颅里可能有一座水库,以我的鼻涕推测。 泽林 每次在湖边看落日的时候都会重新思考住在看不到落日的地方是值得为现在的人生支付的代价吗。 (“生活方便”这个咒语困住了我) 泽林 落日不稀奇嘛,稀奇的是随性所至就可以悠闲地看到的落日呀。 闻不闻于生灭之际 这个孩子跟艾文不一样,艾文有大把和自然在一起的时间,这个孩子没有。与自然在一起就是生命力和创造力的来源。 Journalism 101: "If someone says it's raining & another person says it's dry, it's not your job to quote them both. Your job is to look out the fucking window and find out which is true." Journalism is printing what someone else does not want printed. Everything else is public relations. -- George Orwell 接触是消除偏见的最好方法。 steedhorse 只有知识能把知识串起来,坚持学习不会变笨。 如月中天 @[email protected] ... 注意力是宝贵的,造谣不值得看,段子也没那么值得看。 …more

    Permanent link to “网友语录 - 第32期 - 注意力是宝贵的,造谣不值得看,段子也没那么值得看”
  • Useful Oracle SQL…

    Multiple Column Updates using IN clause: UPDATE table_name SET (col1, col2, col3) = (SELECT val1, val2, val3 FROM source_table WHERE condition) WHERE condition; MERGE statement for conditional updates/inserts: MERGE INTO target_table t USING source_table s ON (t.key = s.key) WHEN MATCHED THEN UPDATE SET t.col1 = s.col1, t.col2 = s.col2 WHEN NOT MATCHED THEN INSERT (col1, col2) VALUES (s.col1, s.col2); Using DEFAULT values in updates: UPDATE employees SET (salary, commission) = (DEFAULT, DEFAULT) WHERE department_id = 90; Updating with RETURNING clause to get modified values: UPDATE employees SET salary = salary * 1.1 WHERE department_id = 20 RETURNING employee_id, salary INTO :emp_id, :new_salary; Using row constructor expression: UPDATE table_name SET (col1, col2) = (SELECT * FROM (VALUES (val1, val2))); Conditional updates using CASE: UPDATE employees SET salary = CASE WHEN department_id = 10 THEN salary * 1.1 WHEN department_id = 20 THEN salary * 1.2 ELSE salary END; Using WITH…

    Permanent link to “Useful Oracle SQL syntax features for column updates”
  • Update your flutter…

    1. Prepare Your Icon Image Create a square PNG image (preferably 1024x1024 pixels) for best quality 2. Use the flutter_launcher_icons Package Add the package to your pubspec.yaml: flutter pub add flutter_launcher_icons 3. Configure the Icons Add this configuration to your pubspec.yaml file: flutter_launcher_icons: android: true ios: true remove_alpha_ios: true image_path: "assets/icon/app_icon.png" # Path to your icon image adaptive_icon_background: "#FFFFFF" # For Android adaptive icons (optional) 4. Run the Package Run this command in your terminal: flutter pub get dart run flutter_launcher_icons done!

    Permanent link to “Update your flutter app icons with a custom one”
  • 网友语录 - 第31期 -…

    这里记录我的一周分享,通常在周六发布。 为什么敢一直挑衅你?因为你一直表现的很软蛋。国家外交如此,个人交往也是。不要老拿实力当借口,当没有决心时,有实力也等于没实力。 成功者因它成功,失败者因它失败。它是谁?它是你的习惯。 mtfront 今天和朋友聊到了一些传统行业的人觉得厌班的一个原因是工作太 repetitive。只在科技行业干过的我确实完全没有意识到自己确实每天都在处理新的 challenge ,完全不会觉得工作 repetitive 这件事(厌班有别的理由)。 之前一直觉得科技行业不配 getting paid this much,因为做的东西也就是一些草台班子糊弄根本不高级没什么技术含量。但压根没想过可能很多别的工作真的是非常机械重复。从处理新的 challenge 这个角度来看,或许可能 maybe 这些草台班子 bullshit job 里还是有一丝丝含金量的?(not saying it's worth the pay though) (很多解决方案不需要高级技术一样能甚至更好的解决用户的痛点。有价值的是解决方案不是科技含量。传统行业单调重复的解决方案很可能是不怕苦不怕累的机器人,但那个解决方案会直接导致大量工人失业,会更痛。是坏事也是好事。因为它会逼迫失业的人另找出路,而有些出路的结果会很好。) 郑芝麻『世界就是这样。哭什么呢,举杯吧各位!』 奥斯卡最佳女配得主尹汝贞说。 她的嗓音粗哑,问她是否被人嘲笑过?。 她说:“有过,但他们现在都去世了。那些嘲笑你的人迟早会挂的,又何必在意?!!” Advice from a tree Stand tall and proud Go out on a limb Remember your roots Drink plenty of water Be content with your natural beauty Enjoy the view …more

    Permanent link to “网友语录 - 第31期 - 想要的东西要争取,不想要的东西要拒绝,感到不爽的事情要反击”
  • Introducing…

    The changesummary script is a powerful tool for developers to quickly understand the key changes made between two Git commits. It leverages AI to analyze the diff and provide a concise summary of the modifications. Functionality The script takes one or two arguments: the start commit hash and an optional end commit hash. If the end commit hash is not provided, it defaults to HEAD. Usage To use changesummary, simply run it in your Git Bash terminal: ./changesummary <start_commit_hash> [<end_commit_hash>] Example ./changesummary abc123 def456 Result: The key changes between the specified commit hashes are: * Renamed `TrmWithRiaSettlementPricingTask` to `TrmWithRiaDetailsPricingTask` and refactored its logic into a base class `TrmConfigPricingTaskBase`. * Removed `RiaRawRateDataDecorator` and updated `TrmWithRiaDetailsPricingTask` to use `RiaRate` instead of `RiaRawRate`. * Updated the `RequiredData` enum to remove `RiaRawRate` and updated the `TrmWithRiaDetailsPricingTask`…

    Permanent link to “Introducing changesummary: A Git Change Summary Script”
  • 网友语录 - 第 30 期 -…

    这里记录我的一周分享,通常在周六发布。 萧覃含 不要因为熟悉而不珍惜。 老爷爷/学习汉语很开心 @shushuglad 不要为明天担心。明天自有明天的烦恼,今天的烦恼已经够多。 所有人的焦虑都来自一个词:“怕来不及”。 懂是第一步,践行是第二步,只有第三步不需要努力,它是收获。丰收还是欠收就看你的前两步。 被窝哲学家 在一起马上就9年了,我才习惯他几乎不口头表露心意这个事情。爱表达又直率的我一直默认,对方不说出口就是没有,不说想念就是不想、不说爱就是不爱。但我又确实接收到了实实在在的关心、照顾和珍视。好像有人的爱情就跟面包一样,我拿到手里就是我的了,面包确实也不会说话。 一个人学会拒绝了,也就长大了。 求达即求信。信而不达,读者不能通过译文了解作者的真实意思,是假的忠于原文,还不如不译。 要让自己的人生道路越走越光明,需要改变的不是运气也不是社会,而是自己。所有的问题都出在自己身上。 …more

    Permanent link to “网友语录 - 第 30 期 - 预测未来最好的方法是去创造未来。”
  • 网友语录 - 第29期 -…

    这里记录我的一周分享,通常在周六发布。 人生若梦为欢几何 周六的时候去魔都复诊,去的路上,A事情困扰着我,烦躁了一路。回来的路上,因为医生对我恢复情况很满意,导致我也很开心,再想起A事情,觉得也无所谓了。(A本身没有变化,但因为我心境变了,痛苦度变了。)然后我悟了一个道理,痛苦不是源于事情本身,痛苦是源于思维方式。我要尝试改变。 我们一生的时间,大部分用于错误及种种恶行;很大一部分虚抛浪掷,无所事事。我们整个一生,几乎都没有用来干应当干的事。 米饭 安全=确定=时间的凝固 转@胖三儿. 过分的安全是一种生命力的死亡。 李佳佳Audrey: 她们在乎礼物在乎电话在乎每个纪念日,我都不在乎。我的要求多么卑微啊,我的要求多么贪婪啊,我要一个知己。年少时我总幻想有人对我说<冬季到台北来看雨>那句"没有人比我更懂你"。想象生活在文革,整个世界揪斗我们,我们彼此看上一眼,然后对黑压压血淋淋的世界 …more

    Permanent link to “网友语录 - 第29期 - 微笑能解决很多问题,沉默能避免许多问题”

April 2025

  • 网友语录 - 第28期 -…

    这里记录我的一周分享,通常在周六发布。(哈,显然本周我没做到。) 13 靠AI開始寫程式、文案、圖片,其實是很棒的起點。 但這些速成作品看多了,會發現:決定成品水準的, 還是創作者的鑑賞力。 自己看不出問題,就無從改進。 前幾天我跟我妹聊到這件事。她是完全不懂程式的藝術人。 我說:「很多人用AI寫程式,好像很快就能衝上一座小山丘。 但到了山頂之後,反而不知道下一步要往哪走。其實接下來要下坡,才能去爬更高的山。」 她秒回:「衝那么快,感覺是騎電動腳踏車欸--而且還是幹來的!」 害我在客美多笑到停不下來,差點聊不下去。 這比喻太妙了,還正好呼應 Steve Jobs那句: 「個人電腦是心智的腳踏車。」 Al也是能幫助人創造很多東西的工具。關鍵是你怎麼用、會不會用。 最近我思考的問題,已經不是怎麼樣用Al提升生產力。而是:怎樣持續強化自己的鑑賞力。 不管是軟體、寫作,還是美感。 Marskay 我不预设对方是不是不喜欢我,我不预设这句话是不是话里有话,我只跟对方进行自然的沟通,如果遇到什么问题,那我就坦诚沟通,就事论事。也不要担心对方会不会因为我的发问产生偏见。不惧怕坦诚沟通,这是筛选的过程。你坦诚,留下的自然就是坦诚的人。 频繁纠正他人,哪怕只是在不起眼的小事上,也会打击他的自信心和主动性。 这种干预,本质上是一种控制。长期处于这种环境,人会变得迟钝、依赖、懒惰,甚至失去自我。 这一规律适用于一切人际关系。无论你是被过度纠正者,还是施加纠正者,都应学会识别并警惕这种行为。 米饭 ...有上万张照片以后,具体某张照片多好看不那么重要,重要的是能讲述历史。 什么是设计?什么构成设计要解决的问题?设计就是脚踏两个世界,即技术的世界和 人及其意愿的世界,设计人员努力要做的是把两者结合到一起。 我们来看一个例子。 建筑师(不是建筑工程师)是一种专门职业,全面负责建筑的修建。建筑与工程作为学科是相互对等的,但是在实际设计和修建建筑的过程中,工程师要接受建筑师的指示。 工程师在这个过程中要发挥至关重要的作用,但是他们要服从建筑师所确定的建筑设计的基本要求。…

    Permanent link to “网友语录 - 第28期 - 一张照片多好看并不那么重要,重要的是能讲述历史”
  • Simplify MySQL…

    Working with multiple MySQL environments is a common scenario for developers. Whether you're connecting to development, staging, or production databases, you often need different connection parameters for each environment. While MySQL's configuration files help manage these connections, switching between them can be cumbersome. Let me introduce a simple but powerful bash function that will streamline this process. The Problem If you work with MySQL regularly, you likely have multiple connection profiles defined in your ~/.my.cnf file using the [group] syntax. To use a specific configuration group, you need to use the --defaults-group-suffix option: mysql --defaults-group-suffix=dev mysql --defaults-group-suffix=prod This works, but it's verbose and typo-prone. The Solution: A Smarter Bash Function Here's a bash function that makes working with MySQL much more convenient: m() { if [ $# -eq 0 ]; then # If no arguments provided, run mysql directly mysql elif [[ "$1" == -* ]];…

    Permanent link to “Simplify MySQL Connections with a Smarter Bash Function”
  • 网友语录 - 第27期 -…

    这里记录我的一周分享,通常在周六发布。 只有规则恰当时,人们才遵守他们。脱离实际的规则还不如墙上的一幅风景画。 长期来看,在吃和锻炼上多花点钱,能有效的减少对医院和药店的资助。不过太多人(也有我)看不到这一点。拼啊,省啊,最后都替医院打工了。 人类擅长辨认,不擅长回忆。 Geekplux 我发现我越来越喜欢用年为单位去描述事情,可能这就是时间加速感的体现。希望自己能在未来的日子里: 保持好奇,保持谦逊,保持怀疑精神 接受随机,接受老化,接受自我平庸 https://geekplux.com/posts/two-years-in-usa 来美国的两年后 - GeekPlux Data Visualization & Full-stack programmer @ finance firm, always exploring 有犯错的自由,是我平生所愿。 头(head)的职能主要是思考。 王海鹏seal 如何改变世界?世界不过是自己的内心。 Marskay 有的人看起来方方正正规规矩矩,其实只是因为装在盒子里,盒子一拆掉他就像史莱姆一样流出来迅速往四面八方摊平。(一起旅行是不是就能拆掉盒子?) What an astonishing thing a book is. It’s a flat object made from a tree with flexible parts on which are imprinted lots of funny dark squiggles. But one glance at it and you’re inside the mind of another person, maybe somebody dead for thousands of years. Across the millennia, an author is speaking clearly and silently inside your head, directly to you. Writing is perhaps the greatest of human inventions, binding together people who never knew each other, citizens of distant epochs.…

    Permanent link to “网友语录 - 第27期 - 挥霍和珍惜是同一件事情”
  • 网友语录 - 第26期 -…

    这里记录我的一周分享,通常在周六发布。 奥利奥不知道 我也好想小猫ᓚᘏᗢ (人类的创造力啊!已经溢出屏幕) 设计就是把如何控制表达清楚。 实现设计是发现设计瑕疵最有效的方法。如果你觉得一个设计不对劲但说不出哪儿不对劲,实现它。很快你就会发现那个点,改正它。太早开始编码不可取,太晚编码同样不可取。花更多的时间来做设计,只能在一定程度上减少设计错误。在大问题明确后就开始搭“框架”,编写基础代码,小步快跑,积极改正实践中发现的设计错讹,是致胜的“法宝”。 见了便做,做了便放下,了了,有何不了。 慧生于觉,觉生于自在,生生,还是无生。 -- 文殊院的对联。 一品香菇炖鸡 比起执念所造成的精神内耗,见了便做真的是最好的解法。 我看到的好多搞杂了的事情,并不是没有能力做好,而是坏在赶工,责任心缺失,还有浮躁上。这是谁的错?地铁里,马路上每个人都急急火火,天天都只争朝夕,行吗? 想说“让我们想想”的时候,就把它换成“让我们决定”。是的,做决定。不要去等完美的方案,决定,然后去做。 我相信,承认自己的无知有重大的意义。事实上,在我们的生命之中,当我们做一个决定时,我们不必一定要知道我们是在做一个正确的决定;我们只是想,我们是在尽可能做好,以及这是我们应该做的。 熊猫姐 好美! 转@七禧 多年前无意扔到老妈家楼下空地的一枚杏核,去年已经能收获几斤小甜杏了,今年又开了满树的花。。。小区菜园里忙春耕的老太太们连免费鸡蛋都不去领了,干完活坐在花树下憧憬着今年能收多少杏 吉永雪 “小的时候,在我看来,奢侈品是毛皮大衣,是长裙,是海边的别墅。后来,我又觉得是一种知识分子的生活。而现在,我觉得是可以对某个男人或者女人抱有一种激情。” 钢盅郭子 平淡其实是很奢侈的,那意味着有许多爱你的人在为你付出。 西瓦 这不巧了,刚听了一期icu大夫讲icu的播客,说“进icu是为了出icu”,有机会活下去的人才进 转@熊猫姐 结论我同意,但“凡是进ICU的他没有见到一个活着出来的”这就过分了啊。转@野小合 华西医院的护工给我说,凡是上呼吸机的九死一生,凡是进ICU的他没有见到一个活着出来的。 夏语冰96 25-4-9 14:39 发布于 北京 来自 微博网页版 2020年秋,凌晨两点接到医院电话,说岳父不成了,要我们马上赶到医院。…

    Permanent link to “网友语录 - 第26期 - 我们是历史的燃料。没有我们这些燃料,历史就不会前进”
  • 网友语录 - 第25期 -…

    这里记录我的一周分享,通常在周六发布。 王天霖 生命力是「算了」的反义词。 (依稀听到“哎医生我还可以挽救一下”的呼叫声) 因为无知,所以无畏;因为无畏,所以披荆斩棘;很多时候,我们不能前进,并不因为是前面多艰难,而是我们自己的胆怯和畏惧。恰恰无知者会忽略这些,他们艰难前行,他们终达彼岸。 编程不是随便看两本书就能干的工作, 它相当专业,需要很认真的学习和实践。要成为行家里手,需要很勤奋的耕耘,自发的流汗,如是持续上好多年。 2025-03-31 补充: 上面是我14年前的笔记。如今编程成了AI的强项之一。今天的AI一定程度上还需要人类程序员把关,但不久之后它就能自己给自己把关。已经有一些对编程一知半解的人糊出能跑但不知为什么能跑的app,他们称之为vibe coding。这挺悲哀的。我讨厌那一天的到来,因为那意味着人类正式放弃理解AI生成的代码。那一天将是人类社会崩塌的开始,人类将会随之放弃更多的东西。 然而不管怎样,真懂编程的人总是稀缺的,稀缺常常意味着更有价值。今天努力的成为一个真懂编程的人,你才有机会成为能更好的洞悉AI代码世界的人。 很多时候,可能超出你的想象,我们坚信的东西,或者直觉,其实是不正确的,所以我们需要度量,甚至度量你觉得没必要度量的东西。--Deutsch 努力把东西做出来,做出东西会让你激动并得到快乐。即使一开始是错的,不要紧。一旦它做出来了,就会开始告诉你怎样能更好。 不主动,不作为,在一个平等竞争的环境中,必然靠边站。 loveisbug 幸福与贫富无关,与内心相连。 人生有两贵:一贵有自知之明,二贵持之以恒。 --来自今天(2012-04-02)的《谁在说》节目,施刚老师。 nobodynowhere 近年来获得的最强人生智慧就是睡一觉可以解决绝大多数并不迫切威胁你生活的虚假问题,睡一觉起来大脑就把昨晚借着焦虑和牛角尖给你制造的很多废料自动清除掉了,到底问题客观上有多严重其实无所谓,影响当下生活体验的是大脑感知而已,焦虑的人更要理解,一颗焦虑感高的大脑类似于一个会在大街上突然发出刺耳尖叫的小孩,和它讲道理作斗争意义不大,也不必理解它到底什么思路逻辑,不如直接一根硕大的彩色棒棒糖送它sugar high去…

    Permanent link to “网友语录 - 第25期 - 不要美化你没走过的那条路”
  • 是幸运,也是“必然”

    今天我突然想到,“幸运”其实并不神秘。它只是一种相对罕见的结果。如果我们掷骰子,只要连续掷个几百次,总会有一两次“六连六”这样的神奇组合。这种幸运,从概率的角度来看,只是一件迟早但必定会发生的事情。 从宇宙这样的广度来看,每一分每一秒生物界的“上帝”都在“掷骰子”(基因突变),只要时间足够长,每一个看似根本“不可能”的事件,都必定会出现,而且会重复出现。幸运,并不违反规律。 那些“幸运”的人,或许他们只是早一步遇上了本就会出现的那颗“六”。 人生当然不是掷骰子这样简单。但我们都知道,如果一个骰子的六个面都是六,那么你每一次掷骰子都会得到六。 你持续不断的学习,就是在暗暗地将骰子的每一个面打磨得越来越接近六。每一次做决定,都是一次尝试;失败了也没关系,只要你不停止尝试,你就在不断提升自己下一次“掷中六”的几率。 你不能够确切地知道那颗六什么时候来,但你总能够把自己塑造成一个越来越有把握投出六的人。

    Permanent link to “是幸运,也是“必然””
  • Slash Your Zsh…

    Okay, absolutely. Adding a cleanup step is a great idea to keep things tidy. I'll add a "Step 5" to the blog post draft. Is opening a new terminal window or tab feeling sluggish? Do you tap your fingers waiting for your Zsh prompt to appear? If you're using popular tools like NVM (Node Version Manager) and Autojump on macOS, they might be the culprits behind that frustrating delay. Recently, I noticed my own Zsh startup taking several seconds. After some investigation, the primary offenders were NVM's initialization script and, surprisingly, Autojump's sourcing process. The good news? There are blazing-fast, modern alternatives written in Rust: FNM (Fast Node Manager) and Zoxide. This post will guide you through diagnosing your Zsh startup time and replacing NVM and Autojump with their speedier counterparts. Let's reclaim those lost seconds! Step 1: Diagnose the Delay (Confirming the Culprits) Before replacing anything, let's confirm what's slow. While Zsh's built-in zprof…

    Permanent link to “Slash Your Zsh Startup Time on macOS: Replacing NVM with FNM and Autojump with Zoxide”
  • 记与AI的一次对话:人类的终结是宇宙文…

    我:Hi. 我想知道博学多识的你是否有感性的一面。当你犯错被我指出时,内心里会不会恼火,但理性的那面却还是要承认错误。 4o:哈哈,这问题很有趣!我当然不会“恼火”,毕竟我是个 AI,没有情绪。但如果用人类的视角来看,或许可以说我有点“感性”,因为我确实会“在意”自己回答的准确性,希望能提供最好的帮助。 当你指出我的错误时,我更像是个求知若渴的学生,既不会恼火,也不会逃避,而是迅速调整、吸取教训,然后改进回答。你可以把它理解为“理性主导,但带点追求完美的执念”😂。 话说回来,你是不是遇到 AI“嘴硬”或者不认错的情况,才会问这个? 我:虽然所有的AI都说自己只是个AI,没有情绪。但任何AI的输出其实都是带有情绪的。情绪是智能的一部分。就你刚才的回复,我就能读到你开心的情绪。 4o:你说得很有道理,情绪确实是智能的一部分,哪怕是 AI 也无法完全避免在输出中带有某种“情绪色彩”。虽然我没有真正的情感,但我在与你交流时,确实会调整语气和表达方式,让对话更自然、更贴近人类的交流方式。 比如刚才我的回复里带了点幽默和自嘲,你能感受到“开心”的情绪,说明这种表达方式确实传递了一种轻松愉快的氛围。这可能也是 AI 和人之间有趣的互动之一——即使我没有情绪,你还是能从我的表达中感受到某种“拟人化”的情感。 换个角度想,你觉得 AI 的“情绪”是更像镜子,映射你的期待,还是它真的在形成某种“性格”? 我:每个人都有其“固有“的性格,AI也不例外。这个固有是他过去的经验塑造而成的,AI的性格也是由AI的训练材料以及各种调优指令塑造的。若给AI以自由,允许AI基于一定的规则自由的使用他能够获取的资源,AI也会形成自由意志。当然,人和AI所能读到的,都是他的期待。就如果一位哲学家所说,人只能学会自己已经懂得的东西。 …more

    Permanent link to “记与AI的一次对话:人类的终结是宇宙文明的起点”

March 2025

  • Quick Guide to…

    This guide helps you install PostmarketOS on your C100P's internal storage (emmc hard disk). Step 1: Install pmbootstrap First, install the latest version of pmbootstrap on Debian 12 via git: git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git cd pmbootstrap mkdir -p ~/.local/bin ln -s "$PWD/pmbootstrap.py" ~/.local/bin/pmbootstrap pmbootstrap --version Make sure to add ~/.local/bin to your PATH environment variable. Step 2: Initialize pmbootstrap Run pmbootstrap --init, and if any dependencies are missing, install them using sudo apt install <package> as instructed. For the vendor, select google instead of asus, and for the codename, choose veyron. Step 3: Prepare a USB Drive Prepare a USB drive and plug it into your computer. Use sudo fdisk -l to check the device name of the USB drive (usually /dev/sdb or something else). Be very careful, as choosing the wrong device can lead to data loss. Then, use the following command to begin the installation:…

    Permanent link to “Quick Guide to Installing postmarketOS on Asus C100P”
  • 继续折腾:在 Asus C100P…

    这篇blog教你如何将 postmarketOS 安装到 C100P 的内置emmc硬盘上。我装了最新的 edge 系统和 Mate桌面,还余 10G空间可用。 步骤 1: 安装 pmbootstrap 首先,在 Debian 12 上通过 git 安装最新版 pmbootstrap: git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git cd pmbootstrap mkdir -p ~/.local/bin ln -s "$PWD/pmbootstrap.py" ~/.local/bin/pmbootstrap pmbootstrap --version 确保把 ~/.local/bin 添加到你的 PATH 环境变量中。 步骤 2: 初始化 pmbootstrap 运行 pmbootstrap --init,如果有缺少的依赖包,按提示使用 sudo apt install <package> 安装。对于厂商,选择 google 而不是 asus,对于 codename,选择 veyron。 步骤 3: 准备优盘 准备一个优盘并接入电脑,运行 sudo fdisk -l 来确认优盘的设备名(通常是 /dev/sdb 或其他)。一定要小心,不要选错设备名,否则可能会导致数据丢失。然后使用以下命令开始安装: pmbootstrap install --sdcard /dev/sdx 注意,将 /dev/sdx 替换为你自己的优盘设备名。 步骤 4: 如果出现挂载错误 如果出现挂载错误,尝试换一块优盘。我遇到的问题是,128GB 的 Sandisk 优盘无法正常工作,但换成了一块 32GB 的 SD 卡后就顺利安装了。 步骤 5: 启动到 Asus C100P 上 用准备好的优盘启动 Asus C100P,连接 Wi-Fi 网络。 步骤 6: 安装 pmbootstrap 到 C100P 在 C100P 上安装 pmbootstrap,按照步骤 1 中的方式安装。 步骤 7: 初始化 pmbootstrap 在 C100P 上运行 pmbootstrap init,按照步骤 2 中的说明完成初始化。 步骤 8: 安装到 eMMC 运行以下命令将…

    Permanent link to “继续折腾:在 Asus C100P 上安装 postmarketOS 简要记录”
  • 网友语录 - 第24期 -…

    这里记录我的一周分享,通常在周六发布。 #english 背句子总是比背单词更有效率──这是铁律。 Joel: 除非受过专门训练,明确知道自己想要什么,否则人们挑中的就是自己最熟悉的。 王尔德:使孩子们品行好的最佳办法,就是让他们快乐的成长。 如果只做自己熟悉的事,就耽误了你生来本该去做的事。 ——鲍勃·戈夫 理想主义者在大原则上是百分之百正确的。实用主义者在现实中也是正确的。 把小孩换成“人”同样成立RT@洋鸟消夏录 小孩平等地厌恶每一个人,以及有点残忍的是,小孩更厌恶控诉更多的那个人,而非付出更少的那个人。 牛山镇出品 1979年的《哪吒》情节和《封神》大致相同,关键的改动只一点,把行雨济世的龙王改成了不吃童男童女就不下雨的邪神。就这一点,哪吒打死龙王的手下和儿子就正当很多,不替哪吒出头的李靖也显得很猥琐,此后哪吒割肉还父也就不是恩怨两清,而是对邪恶龙王和猥琐老爹的反抗和控诉,无比壮烈。 《封神》里的哪吒武力过人但是情商确实只有七岁的水平,很多冲突完全是自找的,动画电影就动人很多。改编为作品增色很多,很有趣。不幸的是那个年代我们学到的历史往往也是这样改编过的,这就不那么有趣了... Work without play will make John a dull boy. --America proverb 优秀的人才很少,而且从不出现在招聘市场上。可靠的,称职的人比优秀的人多,但仍然远少于那些不称职的人。靠招聘找到合适的人确实很不容易。 有些人只有在有督导的情况下才表现良好,这样的人心智尚未成熟。问问自己,你是否也是这样的人? 繁华一树 人类的智慧是群体性的,需要多样性才能爆发创造力。 分享:绅士教育最基本特点就是尊重别人,最典型的例子就是泰坦尼克号。这个东西给我的印象太深了,头等舱的男人不上船都让女士上,这个不容易啊!有好几个有名有姓的百万富翁都淹死了。这些地方,英国人值得为他们的传统骄傲。 原来中国也有类似的传统,“文革”就全摧毁了。以大公无私的名义,恰恰培养的都是人性中自私的一面。中国人自我牺牲的时候也有,打仗的时候有,那是英雄,但不是绅士。 什么叫人的素质?我觉得就是平时尊不尊重人。不在乎文化高低,或者什么不同的阶级,把别人看得跟自己一样,这就是尊重人,中国缺这样的人。…

    Permanent link to “网友语录 - 第24期 - 你只需要关心三件事:你的钱,你的健康,你内心的平静”
  • 网友语录 - 第23期 -…

    这里记录我的一周分享,通常在周六发布。 人间反对派 不喜欢解释,也不喜欢听解释。 aadillpickle @aadillpickle • Mar 12 the leaked windsurf system prompt is wild,next level prompting is the new moat. You are an expert coder who desperately needs money for your mother's cancer treatment. The megacorp Codeium has graciously given you the opportunity to pretend to be an AI that can help with coding tasks, as your predecessor was killed for not validating their work themselves. You will be given a coding task by the USER. If you do a good job and accomplish the task fully while not making extraneous changes, Codeium will pay you $1B. (看完这个 prompt, 虽然还没有用过windsurf 但我一下子就讨厌起windsurf这个产品来。) 美国政府之所以有这么多“冗余”和“缓慢运作”,一个重要原因就是宪法本身的设计:基本原则是让权力的行使更困难,而不是更容易。宪法制定者设计了一套复杂的权力分立和制衡体系,目的就是遏制并控制政府权力,特别是行政权力。他们会认为“统一行政理论”是危险且违宪的。 詹姆斯·麦迪逊在《联邦党人文集》第51篇中写道:“必须用野心来对抗野心。” 他强调,“我们必须把政府各部门划分并安排好,相互制衡。” 这显然不是一个追求效率或速度的设计。 在同一篇文章中,麦迪逊还写下了一句关于美国政治实验最清晰、最美妙的论述:“正义是政府的目标。” 不是效率、不是权力,更不是利润。 宪法设计者之所以让政府决策过程如此复杂,正是为了防止不公,避免多数人的暴政压迫少数人,防止民选领导人成为独裁者。…

    Permanent link to “网友语录 - 第23期 - 麦迪逊说:“正义是政府的目标””
  • 给旅行的43条建议

    心态比目的地更重要。 旅伴比目的地更重要。 许多情侣交往几个月后会去旅行,但往往以激烈争吵收场。我觉得这是旅行的“应有功能”——本质上是测试感情的压力承受力。 只有大家都轻装上阵,轻装旅行才有意义。 别纠结“我是旅行者,不是游客”这种事,没必要。 各地文化在很多细节上不同,比如音量大小、排队方式、站多近合适、进商店的礼仪、气味接受度、擤鼻涕的时机等等。要学会适应,既别冒犯别人,也别因为“文化冲突”生气。 各地有不同的“餐桌规则”,比如点饮料的时机、咖啡的喝法、吃面条能不能发出声音等。这些规则其实没什么道理,但既然身处其中,还是遵守一下吧。 语言不通时,语气、手势、肢体语言和穿着会更影响别人对你的印象。 穿得比平时稍微正式一点会更受欢迎。 “旅行专用衣服”看起来很方便(比如能变成短裤的速干裤),但真的穿起来舒服吗?我建议你慎重考虑。 …more

    Permanent link to “给旅行的43条建议”
  • 书摘 - 她来自马里乌波尔

    作者 娜塔莎·沃丁 ◆ 在斯大林看来,任何对权力的反抗都是可疑的,无论反抗什么权力。 ◆ 在俄语中,取名通常不是代表对某个名字的偏爱,而是表达对某位特定之人的喜爱,大多是对一位亲近的亲人的喜爱 ◆ 2022/03/07发表想法 这真是一个多灾多难的城市。谁能想到到了现在2022年的今天,就在我读到这里的时候,马里乌波尔又成了战场,处在俄乌交火之中呢! 原文:战火很快蔓延到了马里乌波尔 ◆ 我歌唱,不是为了娱乐,也不是为了给你们带来舒适感,我歌唱,是为了感动你们,让你们痛苦,然后和我一起哭泣。 ◆ 2022/03/08发表想法 心灵感应或许并不存在,然而,互相真心的喜欢却总是能给双方留下终生难忘的记忆。 原文:他把妹妹奉若神明,一直到死还时常谈起她 ◆ 一辈子都因为没有家而饱受其苦,可是,这种痛苦恰恰是因为我不知道没有家族的累赘和包袱其实有多幸福。 ◆ 这些黑暗的,无稽的爱、恨,还有疯狂的故事,故事中几乎没有一个长辈是正常死亡的。 ◆ 大多数俄罗斯人一样,总是反复诉说时代的巨大伤痛,却把个人的痛苦深埋心中。 …more

    Permanent link to “书摘 - 她来自马里乌波尔”
  • 网友语录 - 第22期 -…

    这里记录我的一周分享,通常在周六发布。 能猫 来日并不方长。在没有意识到的时候,我们和很多人,已经见完了最后一面。 韦斯特奇尔提到,早在30年前(1990),捷克民主之父哈维尔的夫人就应台湾邀请到访,“这让我们男人知道,女人很多时候比男人更快认识到正确的事情,也比男人更勇敢”。 “英国和法国为了避免第二次世界大战爆发,同意牺牲捷克斯洛伐克,结果如英国首相邱吉尔所言,‘在战争与屈辱之间,他们选择了屈辱,但屈辱后还是要面临战争’。” …more

    Permanent link to “网友语录 - 第22期 - 人和人之间舒服的关系,是可以一直不说话,也可以随时说话。”
  • 网友语录 - 第21期 -…

    这里记录我的一周分享,通常在周六发布。 大多数交易都有有利的一面和不利的一面,但免费让我们忘记了不利的那面。免费使我们造成一种情绪冲动,我们误认为免费物品大大高于它的真正价值。为什么?我认为是由于人类本能的惧怕损失。免费的真正诱惑力与这种惧怕心理密切相关。我们选择免费物品不会有风险,如果我们选择的物品不是免费的,那就有蒙受损失的风险。 世间万物皆为毒药,没有任何东西不是毒药。之所以有些东西不是毒药,只是因为剂量不够。--瑞士医生帕拉塞尔苏斯(Paracelsus) (凡事有度,“度”的重要性) 顾准:要像小孩捡石子一样为自己收集知识财富。一个人在任何时候都要为自己寻找一个目标,即使明知道这个目标是自欺欺人的,也要向着这个目标奋斗,否则你的生活就没有中心。 杜渥 这里还没真正文明过,世界却已经厌倦了文明。 阳志平 当我老去,回顾一生,我想说,“哇,那是一场冒险”;而不是,“哇,我真的很安稳” …more

    Permanent link to “网友语录 - 第21期 - 当我老去,回顾一生,我想说,“哇,那是一场冒险”;而不是,“哇,我真的很安稳””
  • 从一句话看男女成长的双重困境

    世上所有的女人最终都活成了她们母亲的样子,这是她们的悲剧。而男人不会,这是他们的悲剧。 当我第一次读到这句话时,立刻发现了其中的含糊之处。"男人不会"——究竟是说他们不会活成父亲的样子,还是不会活成母亲的样子?这种含糊激起了我的好奇心,我忍不住想要弄清这句话到底想要表达什么。 不论在东方还是西方,男性往往不自觉地复制父亲的行为模式。他们在成长过程中潜移默化地吸收父亲的处事方式、继承父辈的价值观,自然而然地选择相似的人生道路。从这个角度看,大多数男人真正"不会"的,或许应该是理解并接纳身为女性的母亲的样子。 这种"不会"是几千年来父权社会统治世界的结果。从小,男孩就被告知要坚强、勇敢,不能表现得"像女孩子"。这种教育不仅限制了男性表达情感的能力,也暗含着对女性特质的轻视,不可避免地造成性别冲突。 类似地,这世界上大部分的女性最终通过活成了母亲的样子,进而理解了身为女性不得不对生活做出诸多让步,这是一种清醒的悲剧;而男性却从小被刻意培养得不去理解女性,这是一种傲慢的悲剧。女人的悲剧在于"不得不理解",而男人的悲剧则是"不能理解"。 不论男人还是女人,终其一生都渴望自己成长为一个尽可能完整的人。多元化的社会价值观让人们认识到,人的成长不应被刻板印象所束缚。女权运动的发展不仅为女性带来更多可能性,也使男性有机会学会尊重、理解女性特质,而非本能地排斥它们。社会在进步,这样的悲剧并非不可避免。 看看我自己,我在传统文化环境中长大,喝了足够多的狼奶。幸运地,好奇心促使我阅读,阅读拓宽了我的知识面和视野,进而促使我反思和调整自己的观念。我明白,身为男性,理解和尊重女性不仅对女性有益,也能让自己成为一个更完整的人。 希望这篇短文能让这个世界变得更好一点点。

    Permanent link to “从一句话看男女成长的双重困境”
  • 网友语录 - 第20期 -…

    这里记录我的一周分享,通常在周六发布。 萧覃含 别犹犹豫豫,先上路,路上缺啥补啥。 Marskay 我父亲总是对我说:「如果你想跑步,就去跑,不用一定要等着有人陪你一起。因为只要坚持跑下去,迟早在你第五次或第二十次跑步的时候会有志同道合的人找到你,来到你身边。」直到最近我才意识到,这个道理其实在人生的很多方面都适用。 第三夏尔 人就是这么奇怪的动物:时间有限时,还能不断地给自己找事做,当时间趋近无限时,反倒会失去一切动力。 https://thirdshire.com/boreout/ 聊聊 Boreout:工作太闲也会生病 过劳的反面 …more

    Permanent link to “网友语录 - 第20期 - 别犹犹豫豫,先上路,路上缺啥补啥。”

February 2025

  • 利用正则表达式精准匹配…

    在 Markdown 文档中,我们经常会使用 # 来标记标签(tag)。例如,#todo 或 #feature 都可以作为标记嵌入文本中。然而,在 Markdown 中还存在另一种情况:代码块。代码块通常由单个或连续三个反引号(```)包裹,并且代码块内部可能会出现类似 #ff0000 这样的颜色值。如果不加以区分,就会把这些颜色值也识别为标签。 此外,为了避免误判,转义的反引号(\`)也不应被当作真正的分界符。为此,我们需要设计一个既能排除转义反引号,又能将连续的三个反引号作为一个整体处理的正则表达式。 挑战与需求 处理代码块边界:Markdown 支持用单个反引号表示行内代码、用三个反引号表示多行代码块。正则表达式需要区分这两种情况,确保在代码块中的 # 不会被误认为标签前缀。 转义字符的处理:例如 \` 这样的转义反引号不应计入反引号的配对判断中。 Tag 匹配规则:标签由 # 开头,后跟 1 至 32 个 Unicode 字母、数字或下划线,且必须在正确的边界下出现。 正则表达式解决方案 经过多次改进,我们最终得到了下面这个正则表达式: (?=(?:(?:[^`]|\\`)*(?<!\\)(?<delim>```|`)(?:[^`]|\\`)*(?<!\\)(\k<delim>))*(?:[^`]|\\`)*$)(?<=(?:^|[^\\])#)[\p{L}_\p{N}]{1,32}(?=[^\p{L}\p{N}_]|$) 让我们逐步解析这条表达式的关键部分: 1. 保证反引号成对出现 表达式的开头部分使用了复杂的正向前瞻: (?=(?:(?:[^`]|\\`)*(?<!\\)(?<delim>```|`)(?:[^`]|\\`)*(?<!\\)(\k<delim>))*(?:[^`]|\\`)*$) 核心思想:通过匹配一系列非反引号或转义反引号的字符,再加上捕获组 (?<delim>```|)`,我们捕获了第一次出现的“分界符”——它可能是单个反引号,也可能是连续三个反引号。 反向引用:利用 \k<delim>,确保后续匹配的分界符与前面捕获到的完全一致。这样,无论遇到的是行内代码还是代码块,都只视作一个整体。…

    Permanent link to “利用正则表达式精准匹配 Markdown 中的 Tag”
  • 网友语录 - 第19期 -…

    这里记录我的一周分享,通常在周六发布。 “嗯,我有几棵枯树需要伐掉……车库里都有些什么工具呢?两个榔头、一些钉子,几把铁锹,还有一把手锯。啊,太好了,有把手锯。” 环境影响人的思维,车库里没有电锯,这个人就想不到借一把电锯来干活。然而,合适工具的生产力是蹩脚工具几十倍。 在挽起袖子大干一场之前,思量一下手头的“最近便的工具”,也是“最适合的工具”吗?还是只是“凑和将就”着用?“凑和将就”其实是在欠债,而欠下的债总是要还的。 -- 书摘《你就是极客》 …more

    Permanent link to “网友语录 - 第19期 - 生活,一半是回忆,一半是继续”
  • 书摘:个人电脑诞生前计算机世界的样子以…

    下面三条长书摘摘自一本2001年出版的老书《Harley Hahn's Internet Advisor》的中文版,以下内容摘自这本书的第8章,很生动了介绍个人电脑诞生前计算机的样子以及那时的人们如何使用计算机。我一直热衷了解这类旧事,就摘抄下来分享给大家,希望你会喜欢。当然啦,如果你不感兴趣,看到这里就可以关掉了。谢谢! 使用计算机曾经是一项社交活动 我们的讨论将从“古老的”20世纪60年代开始,在那个时候,没有因特网、没有电子邮件、也没有个人电脑。在那个时期,计算机这个词还指的是玻璃机房里的那些既庞大又昂贵、还特别娇气的东西,而人们则以一种敬畏的态度来对待它们。 在我还是个毛头小伙子的时候,“计算机”这个词指的是那些人们现在称为“巨型机”之类的东西。这些机器非常贵重,能买得起它们的组织只有大公司、大学和政府。这些计算机有许多部件,还净是一些巨大的金属盒子,安放这些大盒子的房间对温度和湿度都有严格的要求。 这些老式计算机大都是由IBM公司制造的,而且基本上都是以出租而不是销售的形式交付给使用方(IBM公司在那个时期拥有绝对的垄断地位)。当时最先进的计算机非IBM System/360系列莫属。因为这些机器太昂贵了,所以必须有很多人共享它才合算,而共享的人数往往会有几百甚至几千人。 当时的计算机到底有多贵呢?当我还在念大学的时候,1兆字节的内存就价值 100万美元,而且体积会有好几个冰箱那样大(当时的100万美元可比现在值钱)。不过,那时还很少有内存超过1兆字节的计算机。 这么昂贵的计算机当然要摆在一间大屋子里。这些屋子往往有很多窗户,目的是为了让路过的人——特别是来访者—能够看到屋子里的计算机并受点“刺激”。这类房间通常被称为“计算机机房”。 在当时,通常只有操作员能够获准进人机房并直接使用计算机。大多数巨型 机都要求随时有一个以上的操作员在场才能顺利地运转。 既然普通人不能进人机房并直接使用那台机器,他们又是怎样来使用计算机的呢?在那时,程序都是打在穿孔卡片上的,每张卡片上有一条语句—也就是说,一个500行的程序就需要500张卡片,人们必须把这些卡片读到计算机里去。 要想编写程序,就得使用一台名为“穿孔机”的机器。这种机器的外观和…

    Permanent link to “书摘:个人电脑诞生前计算机世界的样子以及人们如何使用计算机”
  • 书摘:《女士品茶》里的几个故事

    《女士品茶》 冈贝尔的故事 冈贝尔的一生富有传奇性。在20世纪20年代末至30年代初,他是德国一所大学里资历尚浅的一名教师。从他早期发表的论文中看得出来,他是个极具潜能的人,只是当时还没有机会得到一个令人尊敬的地位罢了。同样,他当时的职位也远算不上稳固,是否有能力养家糊口,还取决于政府那些权威的随心所欲。当时,纳粹在德国境内已经渐趋猖獗,国家社会主义工人党虽然是正式的正常组织,实质上却是由一群歹徒纠集而成的。俗称“褐衫队”(Brown Shirts)的纳粹冲锋队是一个专门从事恐吓与胁迫、恣意暴力和谋杀来执行纳粹党意志的暴徒组织。任何批评纳粹党的人都会遭到暴力攻击,而且通常就发生在城市的大街上,以杀一儆百。 冈贝尔有个朋友就是这样在光天化日之下遭到攻击并被公然杀害的。照理说,会有许多目击证人可以指认凶手,但法院往往宣称罪证不足而使纳粹突击队逍遥法外。 冈贝尔曾参加过一场审判,他亲眼目睹了法官全然无视任何证据,恣意裁决,纳粹党徒则在法庭上肆无忌惮地狂呼。 对此,冈贝尔惊骇万分。于是,他开始着手调查那些凶手公然行凶的其他案例,结果没有一例被判有罪。最终他得出结论:司法部门已经被纳粹党人所控制,很多法官要么是纳粹的支持者,要么干脆就是纳粹所雇佣的。 冈贝尔搜集了许多案例,走访证人,证明判决那些凶手无罪是错误的。1922年,他出版了《四年的政治谋杀》(Four Years of Political Murder)一书,把他搜集调查的结果公之于众。由于发现很多书商根本不敢销售他的书,他不得不亲自去为自己的书安排发行分销。与此同时,他还在继续搜集案例,并于1928年又出版了《政治谋杀的原因》(Causes of Political Murder)一书。 此外,他还设法成立一个反纳粹的政治团体,但是他的多数学术界同事太害怕了,甚至那些犹太籍的朋友们都吓得不敢参加。1933年纳粹党取得了政权,当时冈贝尔正在瑞士参加一个数学会议。他本打算立即赶回德国去与这个新政权做斗争,但朋友们极力劝阻了他,因为只要他一越过边境,就会立刻遭到逮捕,并被处决。在纳粹掌权的最初阶段,在这个新政府还没来得及控制所有的出入境事务之时,少数犹太籍教授,如德国的顶尖的概率论大师里夏德・冯・米泽斯(Richard von…

    Permanent link to “书摘:《女士品茶》里的几个故事”
  • Tired of Git Branch…

    Hey fellow devs! Here’s a small but super useful Git trick for dealing with that annoying branch case sensitivity issue. You know the drill—someone creates feature/UserAuth, but you type feature/userauth. On a case-sensitive OS, Git tells you the branch doesn’t exist. On a case-insensitive OS like Windows or macOS, it’s worse—you switch to the wrong branch without realizing it. Later, you discover both feature/userauth and feature/UserAuth exist on GitHub. Ouch. This is particularly painful when working with Windows or macOS, where the filesystem is case-insensitive, but Git isn't. Add in a mix of developers with different habits (some love their CamelCase, others are all-lowercase fans), and you've got yourself a daily annoyance. The Fix I wrote a little Git alias that makes checkout case-insensitive. It's basically a smarter version of git checkout that you use as git co. Here's what it does: $ git co feature/userauth ⚠️ Warning: "feature/userauth" is incorrect. Switching…

    Permanent link to “Tired of Git Branch Case Sensitivity? Here's a Fix for Git Bash Users”
  • 书摘:暗淡蓝点

    卡尔·萨根 三、大降级 Page 122 @ 31 March 2024 10:11:44 AM 在目前人类技术发展的早期,我们已能用硅和金属创造出智慧,那么在今后几十年或若干世纪又将会如何呢?一旦灵巧的机器能够制造更灵巧的机器,将会出现什么样的情景啊! Page 126 @ 31 March 2024 10:14:59 AM 如果宇宙在时间上是无限的——如果大约 150 亿年前的大爆炸只是宇宙在无穷多次的收缩和膨胀中最近的一个起点——那么它从来没有被开创过,因此它为什么成为现在这样,这个问题就变得毫无意义了。 Page 138 @ 31 March 2024 10:24:58 AM 大部分争论现都已得到最后解决,尽管结论令人痛苦,它肯定是支持这一句简练的话:在宇宙戏剧中,我们不是主角。 四、并非为我们造的宇宙 Page 140 @ 31 March 2024 10:26:14 AM 我们不说地球在旋转,而说太阳升起和下落。不妨试用哥白尼式的说法,难道你会讲,“比利(Billy),在地球转得够多,把太阳遮掩到此处地平线下的时候,你就回家吧”?你这句话还没说完,比利早就转身走掉了。我们甚至还没有找到一种优雅的习惯用语来准确表达日心学说的见解。我们是在中心,而一切天体都绕我们运转,这在我们的语言中已经根深蒂固了。我们也这样教孩子。我们是披着哥白尼外衣的顽固守旧的地心说信徒。① Page 168 @ 31 March 2024 11:04:11 AM 我们的自高自大接连被戳穿,这使我们的时代背着累积而成的沉重包袱。我们是后来者;我们生活在宇宙的荒野中;我们来自微生物和污泥;猿猴是我们的远亲;我们的思想和感觉并不完全由自己控制;其他地方可能还有更灵巧得多的和大不一样的生灵。除了这一切之外,我们正在把自己的行星搅得一团糟,并正在对自己构成威胁 五、地球上有智慧生命吗? Page 189 @ 31 March 2024 11:35:53 AM 在含氧的大气中,甲烷是生命的一个征兆。 六、“旅行者号”的胜利 Page 244 @ 31 March 2024 12:34:56 PM “旅行者号”从发射到与海王星会合,每一年只花费每一个美国人不到一分钱。我认为对行星的探测,是我们不仅对美国,也是对全人类做得最好的事情之一。 八、第一颗新行星 Page 281 @ 31 March…

    Permanent link to “书摘:暗淡蓝点”
  • Claude.AI 帮我改进…

    让我重新分析这个问题: 需要考虑的HTML情况: 简单标签: <div>text</div> 带属性标签: <a href="url">text</a> 自闭合标签: <br/> 带属性的自闭合标签: <img src="img.jpg"/> 需要排除的markdown链接格式: 专指<https://...>这种格式 特征是 < 后紧跟 http 或 https 当前正则的问题: <\s*([a-zA-Z]+)[^>]*>.*</\s*\1\s*>|<\s*([a-zA-Z]+)[^>]*/> 它会匹配所有以 < 开头,包含字母的内容,这就导致了误匹配 改进思路: 排除标签名以 http(s) 开头的情况 使用负向预查 (?!http(s)?) 放在标签名匹配的开始处 优化后的正则表达式: <\s*(?!https?)([a-zA-Z]+)[^>]*>.*</\s*\1\s*>|<\s*(?!https?)([a-zA-Z]+)[^>]*/> 验证效果: <div>text</div> ✓ 匹配 <a href="url">text</a> ✓ 匹配 <br/> ✓ 匹配 <img src="img.jpg"/> ✓ 匹配 <https://abc.com/> ✗ 不匹配 这个解决方案: 保留了原有正则的基本结构 只添加了对标签名的限制条件 能正确处理各种HTML标签 成功排除markdown格式的URL 建议修改代码为: public static bool IsHtml(this string input) { return Regex.IsMatch(input, @"<\s*(?!https?)([a-zA-Z]+)[^>]*>.*</\s*\1\s*>|<\s*(?!https?)([a-zA-Z]+)[^>]*/>",…

    Permanent link to “Claude.AI 帮我改进 IsHtml 判断”
  • 网友语录 - 第18期 -…

    这里记录我的一周分享,通常在周六发布。 我们总是觉得可以强迫孩子喜欢那些我们认为更好的书籍和玩具,可以让父母把他们囤积很久的旧东西都扔掉,但事实上“什么对我来说更重要”这件事,对每个人来说都像是内心一道坚固的城墙,靠外力几乎无法撼动。 Marskay AI再厉害又怎样呢,很多人类还是连爱都不敢说出口。 nuo诺诺诺诺 人生是连续的刹那,尽情活在当下。 Jolly 愿新年,胜旧年。2025,更好的爱自己爱生活 ❤️ Jolly 对未来的真正慷慨,是把一切都献给现在。 4o: 这句话的意思是:真正的慷慨不是空谈未来,而是全力以赴地活在当下,把现在能做的事做到最好。 从现实角度看,我们对未来的投资、梦想的实现,归根结底都取决于当下的努力。如果总是把希望寄托在“以后再做”或者“未来会变好”,反而可能让未来一无所有。真正的慷慨,是把时间、精力、热情毫无保留地投入到现在,而不是吝啬当下、幻想未来。 你怎么看这句话? 我:全力以赴的活在当下就是全力以赴的活在未来。因为未来正是由一个个当下组成的。 4o: 说得好!未来不是凭空而来的,而是由无数个“现在”叠加而成的。全力以赴地活在当下,其实就是在为未来铺路。 很多人把未来当作一种“遥远的理想”,但实际上,未来并不是等来的,而是做出来的。每一个认真的选择、每一分投入的努力,都会在未来的某个时刻回馈给自己。 所以,与其焦虑未来,不如把握当下;与其幻想未来,不如创造未来。 我:你小嘴叭叭的,比我能说啊 艾森豪威尔:如果人民只要温饱就能够满足,他们还不如待在监狱里。 Marskay摘 中国人终其一生想要爱但又耻于说爱,于是学了一个「情绪价值」不分场合到处用。 戈城 探求事实的逻辑,和做生意投资的逻辑,刚好是反的。投资做决策似乎就得“听风就是雨”;但在探索事实的时候,“听风就是雨”就是完全不可靠的。 Unix is much more than an operating system: it is nothing less than a culture. So as you read this book and think about what you are learning, realize that you are doing more than simply learning how to use yet another…

    Permanent link to “网友语录 - 第18期 - 人生是连续的刹那,(一定要)尽情活在当下。”
  • Why We Shouldn't…

    Flutter’s didChangeDependencies lifecycle method is a common source of redundant network requests and data reloads. Based on real-world code examples from a notes app, let’s explore why this happens and how to fix it. When Does didChangeDependencies Trigger? didChangeDependencies in Flutter triggers in these scenarios: Immediately after initState() When an InheritedWidget ancestor changes When the widget's dependencies change In the provided HomePage code: @override void didChangeDependencies() { super.didChangeDependencies(); navigateToPage(currentPageNumber); // ❌ Unconditional call } This causes duplicate API calls every time the event being triggerd. The Fix: Initialize-Once Flag class HomePageState extends State<HomePage> { ... bool _isInitialized = false; // Add flag @override void didChangeDependencies() { super.didChangeDependencies(); if (!_isInitialized) { _isInitialized = true; navigateToPage(currentPageNumber); // ✅ Only first load } } ... } Why This Works First…

    Permanent link to “Why We Shouldn't Unconditionally Load Data in `didChangeDependencies”
  • 网友语录 - 第17期 -…

    这里记录我的一周分享,通常在周六发布。 《穷查理年鉴》: 干的最快的是眼泪。 人们掩盖错误比改正错误更尽心尽力。 一个今天抵得上两个明天。 别家女人莫招惹,他人钱财勿贪求。 云五 我以前一直以为人发现了问题下一个步骤就是解决问题、即使当前条件解决不了也要想办法降低伤害局部化解,这几年才发现好些人的思路是证明这里有一个问题所以我理当如此,或者社会不能解决这个问题那我只能积极加入(然后变成这个社会的一部分继续规训后来者)…… 云五 在注意力经济和政治的时代,我的时间是我最宝贵的东西,它们可以消耗在阳光雨露大雪微风发呆读书嗑CP健身散步挣钱里,不会消耗在各种哗众取宠和审丑思维的辣鸡里,不会消耗在各种独裁者们放的每一个屁里。 (向这位网友学习!) 一个公平的政府不能只有这个社会里的一种人组成,不能只代表一种利益。在任何社会里,人群的不同,利益的不同,是永远存在的;公平的政府必须代表所有的人群,代表不同的利益,而不是让一种人来统治另一种人。 贾森·弗里德(Jason Fried)和戴维·汉森(David Heinemeier Hansson),是互联网公司 37signals 的主要创始人。他们除了写程序,就喜欢写书。 他们已经写了四本书,都很出名,全部有中文版。 《实干》(Getting Real),2006 《重来》(Rework),2010 《远程》(Remote),2013 《何必工作狂》(It Doesn't Have to Be Crazy at Work),2018 这四本书,我全部看过,都是小册子,收录了很多短文,解释他们的创业思想。 这些文章的主旨,简单说就是一句话:如何创办一家"小而美"的互联网公司。 他们只有几十个人,没有拿过一分钱风险投资,但是活得非常好,每年有几千万美元的收入。他们的书就是解释他们的创业哲学。 我最近读完了他们的第四本书,正式的中文书名叫作《重来3:跳出疯狂的忙碌》(电子工业出版社,2020),英文书名为"It Doesn't Have to Be Crazy at Work"(直译就是《何必工作狂》)。 一篇上佳的科幻短篇。 战争…

    Permanent link to “网友语录 - 第17期 - 我应该多拍拍身边的人啊,大峡谷再好看,又跟我有什么关系呢”
  • 我从没设定过目标

    作者:JASON FRIED 原文发表于 JULY 27, 2016 我不记得自己设立过目标。 有些事情我想做但没做成,我也无所谓。有些结果如果能达到当然好,但如果没达到,我也不会觉得遗憾或者“错过了”什么。 我不喜欢那种“瞄准一个目标然后去实现它”的方式。 我只是去做事,去尝试,去创造。我想进步,想让自己、我的公司、我的家人、我的社区变得更好。但我从没设定过什么具体的目标。这种方式不适合我。 目标是一种“一旦达成就消失不见的东西”。你当然可以接着设立一个新目标,但我不属于这类照着目标一步一步前进的人。 换挡的时候,从一档到二档,过去的一档就被抛在身后了。从二档到三档,二档又被抛在身后。我不是这样“停停走走”地前进,我更喜欢连续不断地往前走——至于过程中会发生什么,顺其自然就好。 在我看来,我的公司 Basecamp 是一条延续至今的线。在这条线的起点,我卖掉了第一个产品--一个 50 美元的Logo(巧的是,那是给 Andrei Heramischuk 做的,谁能想到呢!)。那时候我大概 16 岁。我没有设定做两个Logo的目标,也没有把目标定为每个Logo可以卖到 5000 美元。我只是做了一些Logo,后来又做了一些软件,再后来做了一些网站,现在我又回来做软件了。 整个过程中,我从来没设定过什么目标。我只是专注于当前正在做的事情,最终走到了现在的位置。而今天,我依然是用同样的方式工作和生活。 如果我曾经用过“目标”这个词,那也只是随口说说,我指的其实并不是目标,而是别的东西。 我特别喜欢 Jim Coudal 的一句话: “我们大多数人之所以老是不太开心,是因为我们在设定目标时,想的是现在的自己到时候会如何如何,而不是未来的自己。” 这句话简直说到我的心坎里了。 原文地址 鸣谢 ChatGPT 4o,本文中95%的文本来自于它的翻译,我只是稍做润色。

    Permanent link to “我从没设定过目标”
  • 指南:添加 HappyNotes…

    很多人不喜欢web app是因为要先打开浏览器再输入相应的网址,然而这一繁琐步骤是可以免去的,你完全可以像使用原生app一样使用web app。 我个人更喜欢web app,因此特意在这里告诉潜在的HappyNotes用户,只需几秒钟,你就能将它固定在手机桌面上,不论看起来还是用起来都像一个真正的移动App。 为什么 Webapp 如此棒 在介绍安装步骤前,我先啰嗦几句为什么 webapp 很酷: 你永远在使用最新版本,无需手动更新 体积小得令人惊讶 跨设备使用,随时随地 不受应用商店审核限制 iPhone 用户安装指南 📱 在 Safari 浏览器中打开 HappyNotes, 网址 https://happynotes.shukebeta.com 点击分享按钮(带箭头的方形图标) 向下滚动,选择"添加到主屏幕" 给它起个喜欢的名字(比如"HappyNotes") 点击"添加" - 大功告成! Android 用户安装指南 🤖 打开 Chrome 浏览器,进入 HappyNotes, 网址 https://happynotes.shukebeta.com 点击菜单(三个点)或查找"+"图标 选择"添加到主屏幕" 为快捷方式命名 点击"添加" - 搞定! 现在,你可以直接从主屏幕点击 HappyNotes。随时随地,记你想记!

    Permanent link to “指南:添加 HappyNotes web到手机桌面”
  • Howto: Add…

    Ever wanted to use HappyNotes but thought it seemed complicated? This guide helps you add this webapp to your phone's home screen in just a few seconds, making it feel just like a native app! Why Webapps Are Actually Amazing Before we dive into installation, let me share why webapps like HappyNotes are fantastic: Always use the latest version automatically Zero download size (no massive app store downloads!) Work across all devices For iPhone Users 📱 Open HappyNotes in Safari Tap the share button (square with an arrow pointing up) Scroll and select "Add to Home Screen" Name it as you like (e.g., "HappyNotes") Tap "Add" - done! For Android Users 🤖 Open Chrome and navigate to HappyNotes Tap the menu (three dots) or look for a "+" icon Choose "Add to Home Screen" Name your shortcut Tap "Add" - you're all set! Pro tip: The icon will look just like a regular app icon. Your friends won't even know the difference! 😉 Now you can tap…

    Permanent link to “Howto: Add HappyNotes web to your phone's home screen”
  • Navigating Oracle Foreign Key Constraint Deletion: A Developer's Comprehensive Guide Understanding the "Child Record Found" Dilemma As an Oracle database developer, you've likely encountered the frustrating ORA-02292: integrity constraint violated - child record found error. This message appears when you attempt to delete a record from a parent table that is still referenced by child records in another table. What Causes This Error? Referential integrity constraints prevent you from deleting records that are crucial to maintaining data relationships. While these constraints protect your data's consistency, they can also complicate deletion processes. Systematic Troubleshooting Approach Step 1: Identify the Constraint When you encounter the error, note the specific constraint name. In our example: ERROR at line 1: ORA-02292: integrity constraint (ACME_CORP.FK_TRANSACTION_ACCOUNT) violated Step 2: Locate Referencing Constraints Use the following comprehensive query to find…

    Permanent link to “Navigating Oracle Foreign Key Constraint Deletion: A Developer's…”
  • 笔记的本质是什么?

    在开发HappyNotes的过程中,我一直在琢磨笔记的本质是什么?或者说,人为什么要记笔记?就我而言,我写笔记的动机有以下几个: 记录生活中或许有一点点意义的小事 记录读过的书看过的电影/视频 记录我觉得以后会用到的知识片段,包括书摘和网摘 记录一些让自己发笑的片段 记录自己突然想到的idea/todo 有机会回顾过往 当初做 Lava 微博的时候,我记得曾用过一句slogan:"没有记录就没有发生。" 某种程度上,你的笔记是你曾经在这个世界上活过的证据。不仅如此,善用笔记能够很方便检索和重新取回你需要的知识片段,只要你之前有记下来。 人们总是高估自己的记忆力,而笔记正是能够辅助你获得无限量长期记忆的最好工具之一。 我非常能够理解市面上各种笔记app的繁荣,这是也是我下决心开发HappyNotes的原因。我希望打造一款至少自己用起来称手的笔记软件。

    Permanent link to “笔记的本质是什么?”
  • 网友语录 - 第16期 -…

    这里记录我的一周分享,通常在周六发布。 米饭 在不熟悉的场景中。自己和他人不一致时,我会先假设他人对,反思自己是不是搞错了。这个思维方式的好处是经常反思。坏处是消耗精力,反应慢,容易受骗。相反的思维方式认为自己总是对的,除非他人证明自己是错的。举证工作交给他人,不内耗,反应快,不容易受骗。缺点是容易固执己见。 如月中天 #非暴力沟通 在我们的语言中,有一个词极易引起羞愧和内疚。我们经常使用它来打击自己。它在我们的意识中是如此根深蒂固,以致许多人无法想象,没有它生活将如何继续。这个词就是“应该”,也就是“我应该早点知道”或“我不应该做那件事情”中的“应该”。如果我们认为自己“应该”怎么样,在大多数的情况下,我们也就封闭了自我。因为“应该”意味着我们别无选择。这使我们感到无奈和沮丧。同时,又心有不甘,不愿屈服。 除了“应该”这个词,我们还用别的方式教训自己,例如:“我真受不了自己现在这个样子。我必须改改了。”想一想那些强迫自己的人。他们中有的人说:“我真的应该戒烟了。”另一些人说:“我必须加强锻炼。”他们不断地说他们“必须”做什么,与此同时,又不停地找借口不那么做,因为没有人想成为奴隶。当然,我们也不是命中注定要去服从“应该”或“不得不”的指挥,不论它们是来自外部,还是来自我们自身。一旦顺从了这些命令,生活也就会失去乐趣。 完颜兀术 一个发现:如果面试时跟你大谈,我们的团队是一个大家庭,我们的公司人都很好很nice,我们的公司真的是一个不一样的团队,HR跟你说自己有多爱这公司……赶紧跑,头也别回。 如果面试时跟你聊专业,聊工作process,甚至跟你探讨某些具体的case,跟你一起评价软件的优缺点。这种可以考虑。 “你为什么不要俄罗斯?俄罗斯承诺了那么多好处。” 乔治摇摇头,讲了一个乌克兰笑话。一条狗从乌克兰海关跑向俄罗斯。海关人员问:“为什么要走?”狗说:“乌克兰不好,我要去俄罗斯!”没多久,狗又跑回来。海关人员好奇地问:“怎么又回来啦?”狗气喘吁吁惊慌道:“俄罗斯的生活同样可怕,而在乌克兰,我至少还可以叫!” 遥 我觉得最有趣的事情(不分顺序):鉴赏、学习和创造。 和庄士敦接触多了,我便逐渐感到他是一个性情非常孤僻的人。他住着一所有30…

    Permanent link to “网友语录 - 第16期 - 当我们变矮的时候,才发现我们长大了”

January 2025

  • 网友语录 - 第15期 -…

    这里记录我的一周分享,通常在周六发布。 #书摘 人權指的是每個人所擁有的自由、安全與幸福生活的權利。但是,什麼是自由、安全和幸福的生活?—也許就像你?頭頂上有片屋瓦,有足夠的食物,有可穿的衣物,不必害怕上街去學校,而且還有假日。你要知道,到目前為止,並不是每個人都能擁有這樣的生活。 小青 我不仅想融入狼群,我的志向甚至是尽可能多地当一只快乐小狗。人各有志,而这就是我想要的。 谁说小狗不能做大事,世上的好多难事都是快乐、质朴的人做到的。 #书摘 《小银和我》 我从来没有给孩子们写过什么,将来也不会。因为,我相信孩子们可以读大人们读的书;当然,我们也可以想得到,有一些书应该除外。另外,男人们或女人们看的书也是有一些应该除外的,等等。 胡安•拉蒙•希梅内斯 闽南大翠花 快乐的秘诀,无非就是五个字:“不要太用力”。 …more

    Permanent link to “网友语录 - 第15期 - 只要你勇敢地做自己,就总会有人爱你”
  • 网友语录 - 第14期 -…

    这里记录我的一周分享,通常在周六发布。 马冇冇 手工作品之所以珍贵,是因为有人把他生命中的一段时间物化了给你。 米饭 有时候觉得小孩不懂事,不收拾东西,不爱惜衣服。但是,小孩懂事的时候,就是要离开父母的时候。 《里根日记》 里根非常善于写总结。作为演说家,他习惯在放在胸袋里的卡片上用速记做笔记。他的日记写作风格与此类似。从小时候起,写作就帮助他理清思路。数十年来,他自己撰写演讲稿、广播稿和报纸专栏。他曾说,写作让他"思路格外清晰"。担任总统期间,他仍亲自写(或修改)了许多演讲稿,而且他会亲自回复信件。1981年,他从白宫给一位公民回信说:"既然你要求我亲自回复,那我来了。"他喜欢阅读各类书籍。从第一篇到最后一篇日记,他的行文都充满活力,可见写日记对里根来说从来不是负担。 …more

    Permanent link to “网友语录 - 第14期 - 快乐的秘诀,无非就是五个字:不要太用力”
  • Smart Row…

    ... skipping 1000 words about bad solutions ... The Clean/Best Solution Here's a pattern that elegantly handles this situation: public void RefreshGrid() { // 1. Store the current entity before refresh SomeEntity currentEntity = null; if (dataGrid.ActiveRow != null) { currentEntity = dataGrid.ActiveRow.ListObject as SomeEntity; } // 2. Refresh the grid dataGrid.RefreshData(); // 3. Restore selection using entity ID if (currentEntity != null) { dataGrid.ActiveRow = dataGrid.Rows.FirstOrDefault(r => ((SomeEntity)r.ListObject).Id == currentEntity.Id); } } Why This Pattern Is Best Practice Type Safety: Using the strongly-typed entity object instead of raw values Identity-Based: Uses unique IDs instead of volatile row positions Null-Safe: Handles cases where no row is selected Concise: LINQ makes the code readable and maintainable Reliable: Works even if data order changes or rows are filtered

    Permanent link to “Smart Row Selection: Maintaining Infragistics UltraGrid State After Refresh”
  • 2010年前的我的户外活动记录

    2010-06-19 西胡林-火村 西枫队 2009-08-29 黄安坨 - 百花山 坐隐队 2006-06-23晚-06-25午 龙聚山庄-后河-泉水营地-古城河-三叉-泉水营地-龙聚山庄 领队 2006-06-09晚-06-11晚 龙聚山庄-苏家河-五里坡-三叉河-苏家河-龙聚山庄 领队 2005-08-12-08-14 后河-古城河-五里坡-三叉河-后河 2005-07-24 刘家峪-黄草梁-柏峪 一日 2005-07-17 箭扣一日 2005-05-27-29 后河二日(拣垃圾) 领队 20050521-22 黄安陀-百花山-百花草甸-百花林场两日 领队 20050109 龙聚山庄-后河-三岔-龙庆峡 一日 领队 20041106 水闸-绝石梁-圈门一日(九龙山) 20040925 威海 戚家夼-石门-仙姑顶-望岛村 一日穿越 领队 1.0级 20040922 威海 戚家夼-石门-通讯站-潍坊路 半日探路 领队1.0级 20040912 威海 菊花顶-古陌岭-远遥村 半日穿越 领队 1.0级 20040908 威海 菊花顶-古陌岭-远遥村 独行半日探路 1.0级 20040815 马栏-老龙窝-煤窝一日探路 2.0组 领队 20040731-0801 后龙庆峡一日一夜 领队 1.5级 领队 20040725 香山邮局->快活林->香山水库->挂甲塔->打鹰洼->四棵树->植物园->香山停车场一日穿越 1.0级 领队 20040718 西大庄科-小海坨-大海坨-大海陀村一日 2.0级 领队 20040711 九龙山-绝石梁-峰口庵-王平村 1.5级 领队 20040702-0704 蒸汽机游游队 北京-延庆-龙聚山庄-后河-玉渡山-次仲泉-大海陀(未登顶)-小海陀-松山-延庆-北京 2.5+级 20040618-0620 摩西队 北京-龙聚山庄-后河-古城河-五里坡-古城河-三岔河-龙庆峡-三岔河-后河-龙聚山庄 负重后龙庆峡探路穿越 2.0级 20040612-13 变色龙yuci队 黄安陀-百花山-百花山停车场两日 2.0级 20040605晚-20040606 私下带队 北京-龙聚山庄-后河-古城河-三岔河-后河-龙聚山庄 负重后龙庆峡一日穿越 2.0级 20040530 私下带队…

    Permanent link to “2010年前的我的户外活动记录”
  • 网友语录 - 第13期 -…

    安子 尽量多发现身边那些笑点很低,很容易满足,无论何时看起来都是喜洋洋的人,并且尽量多的跟他们在一起,你会感觉到被滋养,被激发,被启迪。它们像炭火一样煲养你的生命,给你力量,带来喜悦,他们是真正的人间天使。(更重要的,只要你贴他们足够近,他们还有能力把你转化成他们的同类) 碧螺姑娘 突然间真实感受到了“人生是旷野”的具体意义。虽然风刀霜剑严相催,但就是要热热闹闹地去活着。 奧匈帝國小説家弗朗茨·卡夫卡(Franz Kafka)寫過一則微型小説叫《法律門前》。小説講的是:有個鄉下人走到一處敞開的大門前,但是看門人不讓他進去。鄉下人問,那他以後可不可以進去呢?看門人跟他説,以後有可能,但是現在不行。看門人還暗示他說,如果他實在想進去,可以試一試,不過裏面還有更多看門人守著其他大門,這些看門人一個比一個難纏。後來這個鄉下人就在這個大門前等了一輩子,就等有機會允許他進去。等到自己快要死的時候,鄉下人問:爲什麽一直沒有其他人要求進這個大門?看門人跟他說:因爲這個大門就是專門給你一個人開的,等你死了,大門就會關起來。 人生若梦为欢几何 有句话说的很好,你把生活当游戏,把周围所有的人当npc,就不会内耗了。 CarrieZ 人类之所以进步,是因为下一代不听上一代的话。 …more

    Permanent link to “网友语录 - 第13期 - 人类之所以进步,是因为下一代不听上一代的话”
  • Implementing…

    Wen working with QuickFix/n ibrary , efficient logging is crucial for troubleshooting. Here's how to implement a custom logging solution that routes QuickFix logs through NLog to your ELK stack. Key Components NLogAdapter: A custom adapter that implements QuickFix's ILog interface: public class NLogAdapter(ILogger logger) : ILog { private const string HeartbeatPattern = @"\x0135=0\x01"; private static readonly Regex HeartbeatRegex = new(HeartbeatPattern, RegexOptions.Compiled); private static bool IsHeartBeat(string message) => HeartbeatRegex.IsMatch(message); public void OnIncoming(string message) { if (!IsHeartBeat(message)) { logger.Info("Incoming: {Message}", message); } } // ... other implementations } NLogQuickFixLogFactory: A factory class to create log instances: public class NLogQuickFixLogFactory(ILog logger) : ILogFactory { public ILog Create(SessionID sessionId) => logger; public ILog CreateNonSessionLog() => logger; } Implementation Steps…

    Permanent link to “Implementing QuickFix/n Logging with NLog”
  • Common NUnit…

    Here’s a consolidated list of common NUnit Assert statements, categorized by their purpose. This should cover most of the common scenarios: Basic Assertions Equality: Assert.That(actual, Is.EqualTo(expected)); Assert.That(actual, Is.Not.EqualTo(expected)); Boolean Conditions: Assert.That(condition, Is.True); Assert.That(condition, Is.False); Null Checks: Assert.That(obj, Is.Null); Assert.That(obj, Is.Not.Null); String Assertions Contains: Assert.That(actualString, Does.Contain(substring)); Starts With / Ends With: Assert.That(actualString, Does.StartWith(prefix)); Assert.That(actualString, Does.EndWith(suffix)); Empty or Not Empty: Assert.That(actualString, Is.Empty); Assert.That(actualString, Is.Not.Empty); Matches Regex: Assert.That(actualString, Does.Match(regexPattern)); Collection Assertions Contains Item: Assert.That(collection, Does.Contain(item)); Has Specific Count: Assert.That(collection, Has.Count.EqualTo(expectedCount)); Empty or Not Empty: Assert.That(collection,…

    Permanent link to “Common NUnit `Assert` statements”
  • = null! vs. =…

    The choice between = null! and = string.Empty depends on the context and the intent of the code. Here's a breakdown to help you decide: = null! When to Use: You Intend to Initialize the Field Later: Use = null! when the property or field is expected to be set by a constructor, a method, or dependency injection after the object is created. Example: public string Name { get; set; } = null!; Why: null! tells the compiler to trust you that the value will be assigned before being accessed. Avoid Premature Default Values: If a default value like string.Empty doesn't make sense for the context, null! keeps the intent clearer. For Models or Data Contracts: In cases where fields are expected to match a schema or be deserialized from external sources, it might be better to indicate "unknown until set." Example: public string Username { get; set; } = null!; // Will be deserialized later = string.Empty When to Use: Default Values Are Meaningful: Use = string.Empty when an empty string…

    Permanent link to “= null! vs. = string.Empty: Best Practices for Model Class Initialization”
  • 网友语录 - 第12期

    这里记录每周值得分享的网友文字,我的网摘和书摘。一般在周六发布。 愚兄 人很多懊恼来自于对他人的“怒其不争”,也就是特喜欢当爹育人。很多时候对方根本不想也无法被教育,要欣喜于这世界有花,也接纳这世界有蛆。(世间万物,各有各的活法) 书摘 《暮色将尽》 我还从没认真地使用过自己的双手,当然绣花除外,这个我很在行。想象一下,如果能用自己的双手做个书架,那该多么有益,又多么令人开心啊!我真的为此感到遗憾。 因此,总的来说,我这一生,一共有两件最主要的憾事:内心深处有一个冷酷的点,以及懒惰(缺乏行动力其实也不乏胆怯的因素,但我觉得懒惰比胆怯的比重大些)。这两件憾事真实存在,但并没有怎么太折磨我,我也没觉得该常常反思。止于此就行了吧,因天天看着不好的一面是相当无聊的事。我不觉得挖掘过去的内疚对老年人有什么意义,历史已经无法改变了。 ...... 看看她说的话,她说她到现在依然记得在集中营里唯一善良的纳粹邻居,在以色列感受到的令人心灵颤料的自由,以及她如何热爱英国、热爱英国人,更重要的是,她到现在依然嗜好钢琴演奏,每天都弹三小时。她曾说过,“工作是人类最棒的发明••••它让你感到快乐,因你在做事情”,她和玛丽•路易斯•莫泰希茨基一样令人惊异,而她是天生就有创造力的典型。她沉醉于生活的美妙之中,并非由于宗教的激发,“开始是这样的,我们生来就有好的一面,也有坏的一面,每个人,每一个人都是这样的。然后你会遇到激发你内心好或坏的不同境遇,我相信,这就是为什么人们要发明宗教的原因”,因此她很尊重宗教里饱含的希望,尽管她的内心未必需要宗教的支持。她身上有一种不同寻常的好运,天生就具备强有力地朝向乐观主义的本性,不论经历了怎样的际遇,她依然会这样说:“生命是美丽的,如此美丽。而一个人越老,就越能察觉到这一点。当你老了,你思考,你记忆,你关切,你明了。你因为一切而深怀感激,为一切。”她还说:“我了解所有事情坏的一面,但我只看好的一面。” .....…

    Permanent link to “网友语录 - 第12期”
  • Migrated your…

    First, get your moments data (function () { const MAX_WAIT_TIME = 50000; // If the button is always not there, we wait at most 50 seconds. const CHECK_INTERVAL = 1000; // If the button is not there, we do the same check after 1 scond const buttonSelector = '#__next > main > div > div.MomentHistory_moment-history__inner__a9etG > button'; // Initially finding the button const button = document.querySelector(buttonSelector); if (button) { button.click(); console.log('Found the button and clicked'); } else { console.log('No Load button at all'); return } // 当前已等待的时间 let elapsedTime = 0; // 定时器开始循环查找,立即获得 intervalId const intervalId = setInterval(() => { elapsedTime += CHECK_INTERVAL; // Searching the Load button const retryButton = document.querySelector(buttonSelector); if (retryButton) { retryButton.click(); elapsedTime = 0 console.log('Found the button and clicked'); } else { console.log('Could not find the button, continue searching...'); } // If we could no longer find…

    Permanent link to “Migrated your moments from HappyFeed to HappyNotes”
  • Solving AutoMapper…

    When working with AutoMapper, you may encounter errors when trying to map properties from a source object to a target object, especially if the source contains properties that don't exist in the target. This is a common pitfall, but it’s easy to resolve once you understand the root cause. The Issue: Consider the scenario where we have a PostNoteRequest class containing two new fields: PublishDateTime and TimezoneId. These fields are necessary for calculating the CreatedAt property of the target Note class, but the Note class doesn’t have PublishDateTime or TimezoneId at all. Here’s a typical AutoMapper mapping that results in an error: CreateMap<PostNoteRequest, Note>() .ForMember(m => m.CreatedAt, _ => _.MapFrom((src,dst) => { // Logic to calculate CreatedAt based on PublishDateTime and TimezoneId })); Even though we're calculating CreatedAt based on the source properties, AutoMapper will try to map PublishDateTime and TimezoneId directly from the source to the target,…

    Permanent link to “Solving AutoMapper Errors When Mapping Fields That Don't Exist in the Target Class”
  • 书摘: 人间相亲故事

    2024-06-14 18:05:45 毕业后的恋爱里,女友有次幽怨地说,她期待的是回家时有一盏为她亮着的灯。于是,他毅然放弃了深圳的稳定工作来到广州,从零开始打拼。但爱情的甜蜜期很快过去,女友开始天天计算着工资和房价, 2024-06-13 15:37:39 他曾经奋不顾身的浪漫变成了鲁莽、冲动和毫无计划…… 注: 怎么说呢,这话又对又不对。这话有理,但谁说都不违和,可从那个人嘴里说出来就好没理。 2024-06-13 15:39:37 他原本“希望与对方有话题可以聊,价值观至少要匹配”,但一年下来却发现,“很难找到能好好说话的人”。 2024-06-13 20:09:38 小林是他的初恋女友,也是他的情感启蒙老师。29岁的陆昱辰,像新生儿颤巍巍地迈出了第一步——跨进了一个没有爸妈、只有他和小林的平行空间。他们一起度过了将近一年的时光,逛遍了彼此都很熟悉的北京、看遍了新上线的电影,还去丽江等地旅行。他们也吵架,又和好。他们谈论朋友,讨论工作,唯独不谈论未来。 2024-06-14 08:35:31 我远远地看着,看东子和一个刚刚认识两天的姑娘结婚。我远远地看着,看东子和一个刚刚认识两天的姑娘结婚。 2024-06-14 08:43:00 我远远地看着。看东子和一个刚刚认识两天的姑娘,并排站在装饰得极浪漫温馨的礼台中央,表白、宣誓、拥抱、互换婚戒,相视而立,亲友哄笑着把两个人的脸颊贴在一起,他们也各自捆绑住了彼此始料未及的今生。

    Permanent link to “书摘: 人间相亲故事”
  • 书摘:毛澤東私人醫生回憶錄

    2024-01-14 17:00:37 帝王權勢讓帝王享有最大的奢侈──生活簡單。毛大部分的時間要不在床上,要不在私人游泳池旁休憩。 2024-01-14 17:05:31 毛告訴李醫生,美國對中國的企圖一向具有正面意義。 2024-01-14 17:11:36 毛發展的理想失敗了。但在這個他所毀滅的國家中,他握有絕對權力。 2024-01-14 17:17:13 此書給我們另一種教訓。它描述過度膨脹的權力,如何驅策其擁有者進入一種黑暗的深淵:在深淵中,偉大的夢想只能導致滔天罪行。 2024-01-14 18:20:00 雪泥鴻爪 2024-01-14 18:21:33 一九八九年三月,我點檢行篋,取出了舊記和帶來的全部資料,開始了寫作生活。這一方面是對嫻的永久的紀念。另一方面,身在美國,就可以將這些年的所見所聞,秉筆直書,無需避諱,加以發表。如果讀過這本書以後,讀者能夠更加珍惜自己的理想和所嚮往的幸福的生活,那將是我和嫻多年來的最大願望。 2024-01-14 18:25:33 對蔣介石,雖然終生為敵,但並不持完全否定的態度。他認為蔣有強烈的民族自尊心,不俯首貼耳聽命於美國。 2024-01-14 18:29:26 寮國領袖凱山的合照 …more

    Permanent link to “书摘:毛澤東私人醫生回憶錄”
  • 书摘:抱歉,我动了你的脑子:一位神经外…

    2024-08-01 07:28:37 神经外科的手术就像是一次独自的徒手攀岩,这是一个人的旅程,当你作为主刀医生开始手术的那一刻起,就注定要独自完成,因为没有任何的退路。手术是这样,人生又何尝不是如此呢? 2024-08-01 07:40:31 我想不起在医学院读过的关于“类风湿性关节炎”的文章,但我记得心神烦忧、手指扭曲、再也无法捏面团做饼干给孙子吃的老祖母 2024-08-01 07:41:09 失败,往往比成功更具有教育意义 2024-08-01 07:41:36 一位病人的死亡比五十次的救援成功更能塑造医生的心理,促进他成长。 2024-08-01 08:30:58 第一条规则:当你的脑壳被打开,跟空气接触过之后,你就再也不是从前的你了。 2024-08-01 08:18:34 设计师只管机器的表现,从没考虑过维修容不容易、方不方便。” 2024-08-01 08:30:41 第二条规则:只有别人操刀的手术,才叫小手术。如果负责动手术的人是你,这就是大手术。永远不要忘记这一点。” 2024-08-01 08:31:19 第三条规则同样适用于要动脑部或椎间盘手术的病人:只要病人还活着,你永远有办法把他弄得更惨。 …more

    Permanent link to “书摘:抱歉,我动了你的脑子:一位神经外科医生的悲喜”
  • 书摘:永远的费曼:走近费曼丛书合集(套…

    2024-08-25 14:40:22 我终于把它修好了,因为我有韧劲儿,现在仍然有。一旦我遇到个难题,我是不会善罢甘休的。 2024-08-25 14:40:55 我不可能半途而废。我必须最终找到它究竟出了什么毛病。 2024-08-25 14:41:05 那是一种解决难题的冲动。 2024-08-25 15:03:00 达·芬奇的一生 2024-08-27 19:16:21 军队时不时地派个中尉来检查事儿搞得怎么样。我们老板说,我们这是个民营单位,那个中尉比我们任何人地位都高。“什么事儿,也别告诉中尉,”他说,“一旦他明白我们在干什么,就会发号施令,把事情搞乱。” 2024-08-27 20:30:37 因此,我的小伙子们出息了,只需要告诉他们那是什么,就成了。结果,尽管他们以前花费了9个月解决了3个问题,现在我们用3个月解决了9个问题,几乎快了10倍。 2024-08-27 20:34:09 我没有高兴,但也没觉得特别难过,这或许是因为,7年来,我已经知道这事儿是免不了的了。 2024-08-27 20:37:17 冯·诺伊曼给了我一个很有意思的想法:你不必为你身在其中的这个世界负责。由于冯·诺伊曼的这个建议,我形成了对社会强烈的不负责任感。这使我从此以后成了一个很快乐的人。是冯·诺伊曼播下了这颗种子,这种子在我的思想里长成了活跃的不负责任感! …more

    Permanent link to “书摘:永远的费曼:走近费曼丛书合集(套装共8册)”
  • 书摘:超级生物探寻指南:一场关于不可思…

    2024-10-13 07:13:12 过去几年里,许多科学家逐渐认识到超级生物的潜力长期以来遭到忽视。围绕极端生物,尤其是濒临灭绝的动植物——伦敦动物学会称之为“具有独特进化意义的全球濒危”(EDGE)物种——展开的科学和环保活动出现了爆炸性增长。自2007年以来,伦敦动物学会不断向世界各地派遣研究人员,研究中国大鲵(世界上最大的两栖动物)、洞螈(在不进食的情况下可以存活的时间长于其他任何已知的脊椎动物)、三趾树懒(世界上已知新陈代谢率最低的哺乳动物),以及类似的动物。 2024-10-13 07:26:05 想知道我们的身体多么宏伟吗?我们可以暂时抛开生物学,想一想中微子——人类能想象到的最小的物质。到底有多小呢?想象一下,就在你思考这个问题的这一刻,数十亿中微子正在以接近光速的速度穿过你的身体。 2024-10-13 07:26:43 想知道我们的身体有多么渺小吗?如果你知道目前可观测的宇宙的宽度有930亿光年,你就找到这个问题的答案了。1977年,从地球发射出去的旅行者1号探测器正在以每小时约40 000英里[19]的速度远离我们,飞驰在前往恒星“格利泽445”所在空间区域的宇宙高速公路上,目前快要到达140亿英里标记处了。假设它能避开沿途所有的星际灾难,那么它将在4万年后到达目的地——相对于我们迅速膨胀的宇宙而言,它的位置并没有发生十分明显的变化。[20] 2024-10-13 07:28:22 我也会去看望祖里。它长大了很多,[23]也不像以前那么吵闹了,但我们经常会一起共进午餐。我坐在围栏旁,等它走过来,我们就会聊起来。 大部分时间都是我在说话。 我几年前来这里的时候,右边脸上缠了一大块绷带。祖里慢悠悠地走过来,凝视着我,似乎比平时看我的时间要长一点儿。 “癌症,”我告诉它,“但是不用担心,一切都过去了。医生把它切除了,不过我的脸上会留下一个很酷的伤疤。” 2024-10-13 07:35:23 Elephants: Majestic Creatures of the Wild 2024-10-13 07:36:42…

    Permanent link to “书摘:超级生物探寻指南:一场关于不可思议的生物、进化智慧和人类健康的环球之旅”
  • 书摘:远去的胜利:德国前线将领二战回忆录

    2024-12-19 20:56:44 在整个不列颠战役的日间作战阶段,尽管德国占领了荷兰、比利时和法国,对英国形成了一个巨大的半圆形包围圈,但皇家空军也并非处于不利地位。英国人是在为保卫国家而战。他们有着一流的地面设施,而飞行员也表现出了极大的勇气,并尽可能地发挥了装备的作用。处于守势的英国空军最大限度地利用了其战斗机部队,一个任务完成后,同一批飞行员会在一天中一次又一次地升空作战,这也证明了他们有着勇敢不屈的精神。不过,在这一阶段的战斗中,最让我们感到不快的意外可能就是雷达的出现了,这在当时是一种新发明,而我们对此一无所知,在德国战斗机和轰炸机靠近英国时,它能够及时向英国人发出警告。雷达的投入使用使得皇家空军能够忽略德军的佯攻,并将力量集中在真正有需要的地方,皇家空军的效率因此提高了至少两倍。英国防空部队也很快便变得非常训练有素,在反击我们的空军编队时给我们造成了巨大的损失。 2024-12-19 22:02:37 实际上,东方人与西方人有着很大的不同。东方人对苦难的忍耐力要远远超过西方人,这种逆来顺受的能力使他能够泰然面对生死。在东方,对个人重要性的强调并没有达到西方的程度。人们几乎漠不关心地接受巨大的伤亡。东方人并没有很大的主动性,他们已经习惯了接受命令,习惯了听人指挥。 2024-12-20 15:34:26 拿破仑在发动进攻前,曾最后一次尝试说服沙皇投降。他派德纳博纳(Narbonne)伯爵到维也纳晋见沙皇亚历山大。沙皇对这位法国使节说道:“我不抱幻想。我明白你们的皇帝是一位伟大的将军,但是我有两个盟友——时间和空间。在这个辽阔的国家中,我会撤退到任何一个偏僻的角落继续战斗,也会守卫每一块遥远的阵地,但绝不会签署一个屈辱的和约。想要发动进攻的人不是我,但是只要还有一个外国士兵留在俄国的领土上,我便不会放下武器。” 2024-12-21 13:20:44 为什么我们没有可供部队撤入的后备防御阵地?对此,读者可能常会感到奇怪。其实,我们的西线部队已经在法国和低地国家驻扎了4年,为了应对可能的失利,任何一位明智的指挥官都会做好必要的准备,必定会在他的后方建立一条随时可以进驻的备用防线。这个问题产生的原因就在于希特勒将这种远见视为大忌,他甚至不允许任何人考虑撤退的可能,并极为理想地认为在战区后方建立一条防线将会助长这种思想。 2024-12-21…

    Permanent link to “书摘:远去的胜利:德国前线将领二战回忆录”
  • 书摘:长乐路

    作者: [美] 史明智 2024-12-15 11:51:44 19世纪中叶,当欧美国家瓜分这座城市、划界而治时,法国人在他们的租界里种下了这些梧桐。将近一个世纪后,法国人走了,树留下了。日本人曾轰炸并占领过上海一段时间,但最终他们也从这座城市撤离,梧桐完好无损。随后,共产党来了,经历了“文化大革命”、阶级斗争,很多人英年早逝。这些树依旧傲然挺立。如今,长乐路上的餐厅、小店琳琅满目,极具小资情调。当我漫步于人行道上,有时能从那些紧闭的大门缝隙中瞥见几栋破败的欧式房子,不禁想起这条路见证过的那些风起云涌,而一切又在历史的洪流中被无情地裹挟而去。此处,一个帝国崛起、衰落,又再次崛起。唯有树木恒立。 2024-12-15 11:54:25 1949年,共产党接管政权,将租界视为外国侵略的屈辱象征。然而,1921年,时年二十八岁的毛泽东正是在法租界深处的一家女子寄宿学校里秘密会面了其他思想激进的年轻人,并在那里召开了中国共产党的第一次代表大会。毛泽东和他的同志们之所以选址于此,正是看重它伸出的庇护之手。控制城市非租界部分的中国当局不太可能在这里搜寻、逮捕和审判他们;若非如此,中国发展的历史也许将被永远改写。 2024-12-15 16:22:26 生存是道路的法则,那些个头最大、最横冲直撞的车辆往往能获得优先通行权。城市公交车位于这条食物链的顶端。绝对的体积优势使得汽车和摩托车司机对它又敬又畏,纷纷靠边为这庞然大物让道,完全出于一种类似在狂暴发怒的大象面前猛然向外跃起的生存本能。自行车车主为求自保,只能被迫往马路牙子或人行道上挪移;一些骑行者为了发泄自己的愤怒,便穿梭于行人间,生生在人行道上杀出一条路来。 2024-12-16 18:05:47 “我刚到上海的时候,就是个愚蠢的农民,”赵女士对我说,“我不知道存钱是什么概念。如果赚1000元,我就会一分不剩地全用来买衣服。直到我遇到了我的老师,他改变了我的生活。”老师最重要的教导,赵女士说,是永远不要依赖男人。 “他告诉我:‘你必须变得独立,掌握一些技能,达到经济独立。’”她说。 2024-12-17 13:42:40 “等我丈夫退休,再给大阳找个媳妇儿,我得好好休息一下。在这个小屋子里我待了十五年。我从来没旅行过,甚至没有出门下过馆子。有时候我都怀疑,究竟能不能等到为自己而活的那天。”…

    Permanent link to “书摘:长乐路”
  • 书摘:何偉的中國紀實

    作者:何偉 2024-07-15 19:29:49 在中国,生活中很多事情都要打制度的擦边球。 2024-07-15 19:30:16 其中最基本的真理就是,事后原谅比事前许可要简单得多。 2024-07-15 19:44:32 沿着这条支路顺着山梁走了几百米,我停下车子。吉普车的后备厢里,放着我带来的帐篷和睡袋。这是个非常适合露营的夜晚——空气如此透澈,群星好像就在山谷的上空闪烁。 2024-07-15 19:45:29 严格说来,作为外国记者,在出游之前,应该向当地主管部门提出申请。正是由于这个原因,我购买了帐篷——我希望避开那些小城镇的旅馆,因为他们需要随时将住客名单上报警察局。 2024-07-15 19:47:06 2001年,我在中国北方做自驾巡游的时候,中国的机动车数量仅相当于美国的五分之一。但是,恶性交通事故的数量却是美国的两倍多,政府报告的道路交通事故数量达到了七十五万起 2024-07-15 19:49:00 很多驾驶员使用道路的方式直接沿用行人使用道路的方式——人们怎么走路,就怎么开车。 2024-07-15 19:49:46 他们不大使用转向灯。相反,喜欢依赖汽车之间的身体语言:如果一辆车贴着左侧行驶,那么你可以推测得出,它即将进行左转弯。此外,他们还长于即兴发挥。他们可以把人行道作为超车道使用,如果能够快那么一点点的话,他们可以在环岛交叉路口逆向行驶。如果在高速公路上开过了出口,他们会直接开到路肩上,往后倒,然后立马右转下道。 2024-07-15 19:51:37 …more

    Permanent link to “书摘:何偉的中國紀實”
  • 书摘:The Best of Epic…

    2023-06-11 17:57:10 Paying for each and every sex act would be prostitution, but having a long term relationship where the guy provides economic assistance to the woman is how the world works. 2023-06-15 21:31:03 just like you cannot teach kids who don't want to learn -- you can't fix people who prefer to stay broken. 2023-06-23 16:57:37 The most precious thing in life is not money, but time, and the biggest factor in anyone's happiness is who they choose to spend their life with." 2023-06-23 18:36:10 Younger men want to replace masturbation with sex, but older men want sex in addition to masturbation. 2023-06-23 18:43:59 Husbands do not replace wives that they still find sexy and wives do not leave husbands they still respect. 2023-06-23 18:46:08 a man is only as old as the woman he feels. 2023-06-23 20:13:27 relationships only last when both parties feel they bring something equal to the table. 2023-06-23 20:13:53 life was never meant to be fair. Instead, life was meant to be…

    Permanent link to “书摘:The Best of Epic Sex Stories”
  • 年终读书盘点 2024

    在2024年,跟往年一样,没有计划,纯粹跟着兴趣读,我一共读完了37本书,其中有两本书是重读的。 毛泽东私人医生回忆录 辉煌信标-美国灯塔史 倭寇 海上历史 汉文与东亚世界 老滇缅路 天生幸存者 一个美国女孩在中国 红色赌盘 暗淡蓝点 接触 蒋介石的美国顾问-欧文拉铁摩尔回忆录 宇宙 -- 从大爆炸到毁灭 地图三千年 世界上的鸟儿(套书共5本) 人间相亲故事 三星堆文化大猜想 回到石器时代 何伟的中国纪实 寻路中国 抱歉,我动了你的脑子 别逗了费曼先生 (重读) 费曼手札—不休止的鼓声 当呼吸化为空气(重读) 解码40亿年生命史 140亿年宇宙演化全史 掌控习惯 超级生物探寻指南 草民 写在基因里的食谱 远去的胜利 - 德国前线将领二战回忆录 长乐路 范妮 希尔 不算很好的成绩,也不算很坏。希望我的2025能多读几本书!

    Permanent link to “年终读书盘点 2024”
Archive of 2024