阅读视图

发现新文章,点击刷新页面。

面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新)


chessly-lies-on-the-floor-upstairs-scaled 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) 宠物 照片 生活 视频

Chessly悠闲的躺在楼上的地板上,人来了也懒得挪动。

家里有两只猫 Chessly/Pyro,想着找个地方记录它们的生活,最后决定还是写在这里的博客。猫的一生很短,差不多也就二十年。

Chessly(黑白猫)是我加入微软剑桥研究院MSRC第一个月带回家的,过了两三个月,又把Pyro(橘猫)也接回了家。两只猫的名字是孩子们取的:Chessly因为黑白的像棋盘,加上“ly”听起来像个女孩的名字;而Pyro的意思是一团火(烟火),充满活力。

刚开始的时候,Chessly特别喜欢待在我的工作区域。她有时候趴在键盘上或旁边,有时候藏在显示器后面。偶尔还会绕到我身边“咕咕”地撒娇,等着我去摸她。有时更干脆跑到我腿上,舒舒服服地躺着。

不过,现在它们俩的体型都大了很多,躺在桌上就会挡住屏幕,真是“面向猫猫编程”(Cat Oriented Programming)的极致体验。

记录生活的点滴,也是一种珍惜,毕竟这二十年,我们会一起走过。

2024年

chessly-cat-on-piano-2024-11-08-17.28.14-scaled 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) 宠物 照片 生活 视频

娃在弹钢琴的时候,Chessly喜欢在边上听着。2024-11-08

2025年

chessly-in-front-of-a-monitor-2025-01-10-15.48.22-scaled 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) 宠物 照片 生活 视频

面向猫编程,上班的时候Chessly在我的显示器前躺着,有点碍事。2025-01-10

Ring视频:两猫日常就是打闹,Chessly追上Pyro想舔他,在猫的世界里,地位高的才能舔地位低的。

我家猫现在越来越胖,很喜欢在我工作的时候躺在显示器钱,很影响我的工作,不过这时候我就是会休息一下摸摸她,就当放松一下了。

Pyro在窗边喝水,这是个小的煮饭锅,现在不用了,就给猫当喝水的碗。Pyro很胆小,经常看到我就跑。没法跑就咕咕叫。

Chessly很喜欢陪我工作,然后她很好厅的盯着屏幕上的鼠标光标,真怕她把屏幕抓坏了。

chessly-looks-at-cursor-on-screen-2025-02-18-16.51.07-scaled 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) 宠物 照片 生活 视频

Chessly看着屏幕上的鼠标光标,感觉她好想去抓。

哥哥弹琴,弟弟唱歌,Chessly午睡,真是幸福啊,下辈子做只猫吧。

chessly-takes-a-nap-while-eric-plays-piano-2025-02-18-11.21.25-scaled 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) 宠物 照片 生活 视频

Chessly在沙发上午觉,感觉眼睛快闭上了,哥哥在弹钢琴,悠闲的下午

视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书

宠物猫:Chessly and Pyro

本文一共 825 个汉字, 你数一下对不对.
面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) 宠物 照片 生活 视频
The post 面向猫猫编程 Cat Oriented Programming (Chessly/Pyro这一生持续更新) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 个人网站Adsense广告申请通过: 需要最少15篇文章 我的个人网站 zhihua-lai.com 本月通过了 Adsense 审核,终于可以再次放置广告,赚些零花钱了。 其实,最初 Adsense 账户通过审核后就能直接放广告,但后来规则变得严格了。如果一个网站长时间没有放置任何 Adsense 广告代码,账户资格会被撤销。重新启用时,需要进行单独审核。如今,在 Google Adsense 中新增一个域名,也必须通过审核后才能投放广告。 为了让我的网站通过审核,我尝试了几次,但总是被拒,原因之一是必须要有足够的内容支持。例如,以前我做的工具网站 SlowAPI.com...
  2. 新的旅途 – 离别总是伤感的, 离开了一起创业的公司 2周前, 正式离开了一起创业的公司, 这公司是我博士毕业后的第一份正式工作, 待了8年多了, 离别总是伤感的. 我是9月初提的离职, 三个月 Notice Period, 最后的几周交接完工作确实没有什么压力了. 11月30号, 在公司最后一天, 公司有个习惯, 对于 Good...
  3. Minuet in C – 小步舞曲C Posted Youtube – 油管地址 孩子弹琴的时候最帅了. 我现在成了我儿子的粉丝了. Eric (Aged 6) is playing “Minuet in C” when...
  4. 上了年纪痛风脚崴了的惨痛经历(尿酸过高) 痛风是一种疼痛性关节炎, 当血液中的尿酸水平高, 导致晶体形成并积聚在关节内或关节周围, 就会发生痛风. 当人体分解一种叫做嘌呤的化学物质时, 就会产生尿酸. 嘌呤自然存在于您的身体中, 也存在于某些食物中. 尿酸通过尿液从体内排出. 上两周, 和媳妇吵架, 然后就自己一人睡, 有一天起床后脚踝就开始疼了, 然后明显比左脚肿了. 我刚开始就以为是睡觉的时候不小心姿势不对,...
  5. 今晚可能是英国倒数第三次冬令时时间调整 来英国生活过的人都知道 英国有一个很有意思的夏令时和冬令时时间调整. 夏令时是每年3月份的最后一个星期天凌晨会暴力的把时间往后调整1个小时, 也就是1点的时候很神奇的时间会自动变成2点. 冬令时是相反, 在每年的十月份最后一个周日凌晨暴力的把时间往前调整一个小时, 也就是2点神奇的变成1点. 现在大多数电子设备都能自动调整时间了, 比如你的智能手机和电脑. 但是传统的一些钟表, 还需要人为的调整时间. 夏令时 (Daylight Saving Time)调整的那一天,...
  6. 优衣库 感觉像炒作 这几天 这个在北京三里屯 ‘优衣库’ 试衣间自拍的视频真的很火, 男女主角均被人肉. 不可否认 这个效果还真的不错 因为我之前根本不知道 “优衣库” 是干嘛的 很刺激 在试衣间XXOO是多么爽的事情 女主角 95后妹子 长相甜美....
  7. 因为一个 try catch 好几天优秀点赞程序挂掉了我却以为是节点的问题 YY银行有四个点赞程序, 分别跑于四台服务器上, 它们是: 股东点赞(代理给 @justyy ) 自己的号 足球队 优秀作者(排名前30, 还有跟随点赞) 这几天我就发现, 有些赞没有给出, 我还以为是节点的原因, 因为查看记录, 发现是...
  8. 怎么样查看 STEEMSQL 是否数据同步完全? 尽管它已经转换为按月订阅模式, SteemSQL是由@arcange开发和维护的一个很好的服务(MSSQL). 其实对于这些中心化的数据库来说, 最重要的就是它要能够及时的从区块链上同步数据. 如果数据不全, 那么其实是没有多大用处的. STEEMSQL每隔8分钟就会从区块链上同步数据. 之前有过几回, STEEMSQL数据并不及时的同步, 如果你的程序很需要很及时的数据, 则STEEMSQL并不是很好的选择. 相反, 如果你只是想运行几个语句去查询以往的数据, 则STEEMSQL是个很好的方案, 毕竟从中心化关系型数据库取数据要比去区块链上取数据快得多....

《黑客与画家》中累加器引发的思考

本篇是关于《黑客与画家》中 Paul 用累加器作为例子营销 Lisp,第一次读他的书时,还看不太懂,多年后我大约能理解一点了。我想就此问题本身和此问题的外延讨论一番,当然,你也看到本文的成熟度为 3 / 5,说明随着我对技术的理解,后续会持续修订。

了解本篇探讨的内容时,需先了解一点背景。Paul Graham 因创办 Y Combinator (创业公司孵化器)而成为美国“创业教父”。在他的随笔集《黑客与画家》中举了一个例子,用 lisp 编写累加器来说明 lisp 语言能力。怎么理解这个累加器,其实每个人都见过,基本上可等于计算器上的那个 M+ 键在计算机软件中的实现。其次,Lisp 是一门如此久远而特别的编程语言,用 Paul Graham 《On Lisp》一书中的话来说,就是 lisp 是一种可编程的编程语言。

这里的可编程,也类似编程语言中的 Lambda(常以希腊字母 λ 表示)以及宏代表的元编程能力,Ruby 语言的作者特别描述了这块,Y Combinator Y 也许也有此意义。

累加器问题本身

Paul 提出一个类似编程问题:写一个函数,它能够生成累加器,即这个函数接受一个参数 n,然后返回另一个函数,后者接受参数 i,然后返回 n 增加了 i 后的值。就是说,写一个能生成函数的函数。

Common Lisp 的实现为:

(defun foo(n)
  (lambda (i) (incf n i)))

调用方式和结果可以是:

(setq acc (foo 2))
(print (funcall acc 6)) ; 8
(print (funcall acc 7)) ; 15

并且举出了 Ruby、Perl、Smarttalk、JavaScript 的实现,并列举了 Fortran、C、C++、Java、Visual Basic 似乎无法实现或优雅的实现。

特别的,Paul 强调了 Python 貌似比 Perl 优雅,但实现起来由于 lambda 支持的局限,也未能有类似实现。

从逻辑上,似乎是仅针对 Python 语言设计的一个偏好来对比它,未免显得不公。Python 的实现更函数式一点,也是表达了 Guido 对 Python 语言设计的取舍,弱化的 lambda。Lisp 其实算是函数式的鼻祖,但上面的累加函数反而不够满足,它对相同的输入,返回不同的值,因为它不够内聚,对外依赖初始值这个外部状态,不利于没有上下文时去理解程序,且 lambda 内部引用了 n 还修改了 n 的值,就好比你有一个钱包,当你第一次放了 10 块钱进去后,你发现它同时拿走了你上衣口袋的 8 块钱,第二次放了 10 块钱进去时,它又拿走了 7 块。(这个函数的实现上和学院教授的软件质量是对立的,这样的巧妙实现也许在内核级别或高度优化场景需要,但在应用软件上是完全不需要的。按现在软件质量看,它实现得非常野生,这样的能力只在能懂且能控制的人的设计中有用。对较大规模软件工程,就是灾难。)

如果某语言可以比较视觉优雅实现这个函数,则该语言函数须是一等公民(可以作为返回值),其次在闭包作用域实现上借鉴了 lisp。

让我来扩充现代语言的实现,比如 ES 的语法糖:

const foo = n => i => n + i;

Rust 显得格外严谨也显得强约束,其次整数类型 i32 还需要仔细斟酌:

fn foo(n: i32) -> Box<dyn Fn(i32) -> i32> {
    Box::new(move |i| n + i)
}

其实,能优雅实现的不只 lisp 和 lisp 方言、ruby 等,连前辈 tcl 都优雅:

proc foo {n} {
    return [lambda {i} {expr {$n} + $i}]
}

唯独 Python 的实现要丑陋一点,原因是 lambda 匿名函数的不支持 return,要不,支持象牙符后的 Python,以下代码也确实合理:

def foo(n):
    return lambda i : return (n := n + i)

但现在,较恰当的实现如下,nonlocal 在内部作用域捕获外部 n,也是合理的,从代码清晰性上说,python 更甚一筹:

def foo(n):
    def bar(i):
        nonlocal n
        return (n := n + i)
    return bar

第二个实现,属于老油条代码,这个程序员至少理解引用:

def foo(n):
    s = [n]
    def bar(i):
        s[0] += i
        return s[0]
    return bar

但这种属于一种 hack 方式绕过语法的不支持,不深入研究一下 Python 特性无法一下看懂。

累加器问题外延

累加器问题外延其实是技术竞争优势,对强抽象表达的编程语言带来的软件质量,这属于高智商的智力游戏。

事出一个精通 lisp 的人选择使用 lisp 开发商业应用,并利用 lisp 语言优势快速开发了 Web 程序。

这一切都是开创性的,我非常理解这个过程,这意味着没有轮子,大部分需要自己造。

所有的编程都是开拓性的,而不是使用已有的成熟方案,lisp 正是这种 10X 程序员的秘密武器。

然后,这个创业过程还胜出了,这其中发挥作用的,我看到的,是真正的批判性思维,和基于事实逻辑和编程实力。

它提到的 lisp 的表达和抽象能力能帮助他以更少的代码击败那些 java 公司。

或许在他那个时代是这样的吧,lisp 是他的秘密武器,人才市场中,lisp 看似人少,但创业团队 10 人以下就够,且懂 lisp 的都是精英,你在 lisp 圈子中很容易找到这 10 个懂 lisp 的人。

我非常喜欢“拒绝平庸”、“书呆子的复仇”两章,也喜欢 lisp,但这个语言放在国内用于创业,基本是失败了一半。

一是找不到真正理解 lisp 的精英用它来配合现有基础设施开发商业应用,二是这个年代开发技术,特别是编程语言技术的差异,已经无法构成竞争优势。

但没关系,这不妨碍它成为书呆子的快乐。

c++ 一直在,perl 之后 java 崛起了,然后 ror 颠覆了 web 领域编程范式,然后是 go,也许 rust 之后,再没有像样的颠覆者了,dojo 可认为只是在某领域的优化,尤其是看到 ror 在 rust 中的实现 loco 时,似乎编程语言走向了终结。

总的感觉

即使 lisp 在语言能力上顶级的,但并不意味着 lisp 和商业成功之间有强关联性,而是使用 lisp 的背后的人的思维能力导致的。

用中国话说就是“艺高人胆大”,选择了少有人走到路,路还走通了,只不过这个艺,并不仅仅指 Paul 精通 lisp,而是指他习得的思维方式与精神。

思考方式和背后的精神;前者能给特立独行的创业者在混沌的商业环境之中获得优势分,后者确保思考方式。

至于技术能力和思考能力,那可以在事上练就。

关于工具和编程语言的思考

MagicGet

magicget

这是一段趣味回忆。

最近有人总问我会写爬虫吗?我去搜了搜 magicget,互联网依然还记得 20 年的软件。

最初一版,只是为了给晋江文学的一位写手写一抓文软件。

当时我刚毕业,只会 Pascal 与 C,而这两者写网络软件时有些力不从心。

接下去,我在闲暇间,自学了 C#,突然发现 WinForm 其实挺好写,这也是为啥 magicget 最初几个版本只有几十K大小的原因。

因为它依赖 .Net 运行时。

使用 WinForm,界面方面的问题解决了,为解决网络请求时主UI冻结的问题,我还学会了多线程。

但我依然只擅长写简短程序,且不知搜索开源库,以前并没有 Github,我常去 SourceForge、CodeProject 和 Google Code。

但我依然还不太会写大型软件。再然后,我个人对 .Net 的性能不满意了,而安装 .Net 1.1 运行时对用户来说,也是天然的使用门槛。

当时恰好出现了 Turbo Delphi 这种免费的东西,于是我想,何不我再用另外的新方法来实现呢。

于是,后来的版本,我主要使用 xml 技术来解析 xhtml 网页,最终,我学会了正则表达式,于是后续版本都改为了 Delphi 原生实现。

如果还有人问,我会不会写爬虫,我会把这张图发给他。

FeedTools

然后就是 20 年后,Vivaldi 浏览器我一直在用,有一天我把某站博客 100 多 Feed 一个个加进去,发现它居然不支持分组,也不支持导出。

后来我差不多花了一晚寻找这些 Feeds 到底在哪,一时心血来潮,又花了两晚,实现了一个导出 Vivaldi Feeds 的工具。

FeedTools

最初,我是准备使用 Lazarus,想着还可以兼容 macOS,但 Lazarus 的 json 就把我给唬住了,我很烦躁,并不想花太多时间去填坑,于是立即换上了 Delphi Community 版本来实现。

如果问我为啥不选其它,因为当时我存了一点私心,准备埋入一个 token 来支持导出 opml 时的支付。

后来我又改变了想法,决定还是免费提供 这个程序 ,或者在订阅中提供。

在多年后,我再次使用 Delphi 的过程中,发现它的发展非常缓慢,也依然没有完全修复稳定性的问题。

除了有些比如 Unicode 和跨平台数据组件的改进外,周边也都是停滞的。

其它不少地方,就像刚毕业的人的设计,可谓很难用,它的老本可真是厚啊。

同样类似的功能,还是 Python 好,差不多十几行就实现了一切。

编程语言的断舍离

虽然用过许多编程语言,但在未来新增的项目上,我将主要使用 Python、JavaScript、Rust 这三种,另 PHP 用于旧项目维护,其余编程语言的有关资料和书籍,我将全部断舍离。

工具的断舍离

如果你需要做一个工具的挑选,只能保留一种,你会怎么选:

一边是一套精美有美感且耐用的手动螺丝刀,另一边是一把普通的电动螺丝刀带有一套螺丝刀头?

两者间你会选什么?选易用有效率的工具,还是选有使用乐趣的工具?

这个问题对于不同性格的人来说,答案可能不一样。

而对于我来说,似乎就产生的选择困难症,很可能我非常难抉择,想要都保留。

到此,看似此问题只有三个选择,但还有一点考虑是,为啥你需要螺丝刀?(推翻问题本身)

这种思维模式我叫它 出家思维

然后,我发现其实大部分人都不需要螺丝刀,然后就会发现,选择一件让人心情愉快的工具陪在生命里,是一件很惬意的事。

如为了解决效率的问题,可以花钱解决。

依赖的容易固化,所以需要变革。

不要让拥有的东西(知识、身份、头衔)反成了诅咒。

❌