MoreRSS

site iconEST修改

EST = Extrospect, Sein & Tao ,后端工程师。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

EST的 RSS 预览

原研哉《棍子和碗》

2025-06-18 13:55:00

之前看到个 棍子和碗 的说法,印象很深,觉得很扯,总觉得哪里不对,但是没想明白。查了下居然是 原研哉 说的。也就是传说中200w给小米logo倒了个圆角的日本设计师。

日本设计家原研哉有一个说法,他说,这个世界上,我们用的所有东西只有两样,一个是碗,一个是棍子。什么意思?
碗,就是用它围合起来的那个内部空间。比如水缸、冰箱、液化气罐、汽车、房子、手机,本质上都是碗。它内部装了什么,决定它是什么。
而棍子呢?就是用它去作用于其他东西。比如弓箭、螺丝刀、枪炮、键盘,本质上都是棍子。它作用于什么,才决定它是什么。
其实,我们中国人在文化中也有类似的分类法。我们经常说一个词“器具”。所谓“器”,就是装东西的,就是原研哉说的“碗”;而“具”呢,就是作用于其他东西的,就是原研哉说的“棍子”。这两样东西合起来就是“器具”,也就是人类造出来的所有东西的统称了。
之所以提这个分类方法,是想说,我们观察任何东西,都有两个角度,一个是看它内部装的是什么,就是它作为一只“碗”的特质。还有一个,就是看它作用于什么,就是它作为一支“棍子”的特质。
比如说,我们了解一个人,当然可以把它看成一只碗,看他身体内部的状况,给他做体检,和他谈心,看他的所思所想,这是了解一个人的方法。但是我们也可以把他看成是一根棍子,在他周边的社会关系中进行访谈,看他干了什么,成就了谁,又祸害了谁,他在自己的社交网络里面填补了什么空白,他的每一个行动是在应对什么挑战。

刚中午小憩的时候,突然想通了,这个二元论分类太内涵,太隐晦了。我不妨帮日本人把这个分类说得更直白一些:

  • 棍子就是 JJ
  • 碗就是 子宫

A single Python function for both async/sync

2025-05-14 14:35:00

Scenario: I often need to write Python functions like:

  1. take some parameters and format them
  2. call an API with the formatted parameters
  3. parse the result and return chosen values

There's a huge problem in step #2.

In today's Python world, troubles arise because async/await are "infectious", In practice this function is splitted - like in Python stdlib, where a vanilla method and its async counterpart amethod often come in pairs. Package authors scramble to provide sync transport and another async transport. I discovered this ugly fact while reading the source code ofredis-py, httpx and elasticsearch-py. Duplicate and lookalike code was always written twice. All it takes is some random async IOs in one place and your code would be forced to change forever.

Is there a way to write the function in one place, but callable both with async and without?

I pondered this question for ages, and today I stumbled upon something interesting:


  def s1():
    return asyncio.sleep(1)

  async def s2():
    return await async.sleep(1)

There's virtually no difference when calling await s1() and await s2()

I vaguely remembered how Python’s coroutines were designed, and after some tinkering, I came up with this snippet:


import asyncio, types, functools

def aa(f):
    """
    make a function both awaitable and sync
    idk how to property name this. anti-asyncio (aa) maybe?
    """
    @functools.wraps(f)
    def wrapper(func, *args, **kwargs):
        if asyncio.iscoroutinefunction(func):
            return types.coroutine(f)(func, *args, **kwargs)
        else:
            async def afunc(*a, **kw):
                return func(*a, **kw)
            g = types.coroutine(f)(afunc, *args, **kwargs)
            try:
                while True: next(g)
            except StopIteration as ex:
                return ex.value
    return wrapper


@aa
def my_func(func, *args, **kwargs):
    # prepare args, kwargs here
    # add a prefix `yield from` everywhere, for either sync/async
    result = yield from func(*args, **kwargs)
    # handle the result here
    return result


import httpx

# async
async def main():
    # the same as `await httpx.AsyncClient(timeout=3).get('https://est.im')`
    print(await my_func(httpx.AsyncClient(timeout=3).get, 'https://est.im/'))
asyncio.run(main())


# sync
print(my_func(httpx.get, 'https://est.im'))
# works the same as httpx.get('https://est.im')

The above shows a single function called my_func, dependency injection of an HTTP get call of either sync/async, allows for customizable pre- and post-processing logic, and returns the result with clean syntax.

The only mental tax: inside my_func, you have to replace all await keyword with `yield from.

Update 2025-05-16: The only mental tax: add a yield from prefix for every funccalls for IO or API, either sync or async.

It solves all problems for my scenario and I’ve yet to find a simpler solution. If you have a good name for the @aa decorator please comment!

A sidenote, I am not sure if this method affects async schedulers and blocks something maybe? Like the while True might be a new kind of GIL. Also i haven't looked at problems with contextvars.

听 彭罗斯 吹了90分钟波函数的坍塌

2025-04-30 16:31:00

https://www.youtube.com/watch?v=sGm505TFMbU

Roger Penrose: I don't believe it is consciousness that collapses the wave function, instead it's the collapse of the wave functions that produces consciousness

这句话很美妙啊。一下子把唯物和唯心给联系起来了。

我一直觉得,人的意识,就是因果律的推演。这个推演明显是一个离散的,有清晰步骤的,quantized 的和决定论的。

人的潜意识和直觉可能是概率的。

看完这个 90分钟的访谈,我大概明白为啥 量子力学 和 神棍 经常联系在一起了。一切都源于这个薛定谔方程 和 “观察者”

观察者不是一个真实存在的定义。你甚至无法严格定义 观察。欧美神棍一般喜欢往三位一体,意识,灵性上面靠。感觉物理世界是混沌的,一下子有了光,状态就坍缩了。哈哈哈。

国内的话 遇事不决,量子力学。民科重灾区。甚至还有量子佛学这种离谱的。

他还写了一本书,Fashion , Faith and Fantacy,fashion就是弦论,faith 就是量子力学。fantacy是宇宙膨胀理论。哈!

光 的本质是什么?

2025-04-29 14:20:00

来自 Curt Jaimungal

Guy:什么是光?
Chap:嗯,光是使物体可见的东西……
Bloke:其实,光也可以是不可见光谱的一部分,比如紫外线和红外线……
Lass:其实,光是光子,是电磁场中的一种波动……
Dude:其实,光子是电磁场中量子化的波动……
Fellow:其实,光子是与狄拉克方程的 U(1) 对称性相关的规范玻色子……
Guy:其实,光子是与狄拉克方程的局域 U(1) 对称性相关联的规范玻色子……
Fellow:其实,光子场来源于 SU(2)ʟ × U(1)ʏ 的一个子群——该子群保持希格斯真空态不变……
Chap:其实,光子一种导数……
Guy:其实,光子是为了使导数具有规范不变性而进行的修改,和刚才那位说的一样……
Lass:其实,光子是庞加莱群的一个表示……
Dude:其实,光子是庞加莱群的一个不可约表示……
Fellow:其实,光子是庞加莱群不可约表示的一个基底元素……
Guy:其实,光子是一个四维时空中无质量、自旋为 1 的粒子……
Chap:其实,庞加莱群本来就在四维时空中,所以这是多余的细节……
Bloke:其实,庞加莱群可以推广为任意维度 d 下的 ISO(1,d−1) 群……
Lass:其实,d 必须大于 2,否则系统会出现简并结构……
Dude:你才简并呢……哦不好意思……我是说,其实,光子是从超图的底层更新规则中涌现出来的一种现象……
Fellow:其实,光子是统一规范势 ϖ 中与结构群 Spin(4) 子群相关的一个特定分量,而这些规范分量是通过观测嵌入被拉回到我们 4D 时空中的……
Guy:其实,我们原本是在谈“光“这个词,它源自古英语 lēoht,意思是“亮度“……
Chap:其实,它是原始日耳曼语 leuhtam,也表示亮度——所以你这次总算说对一件事……
Dude:其实,词源更早是原始印欧语 leuk-,意为“光、亮“,同源词有拉丁语 lux、希腊语 leukos(意为“明亮、白“)……
Lass:其实,还可以追溯到梵语 rochis,意思也是“亮度“……
Dude:其实,你不该说“其实“,你破坏了节奏……
Fellow:其实,词源顺序是:古英语 → 拉丁语 → 原始日耳曼语 → 希腊语 → 梵语 → 原始印欧语……
Guy:其实,光是黑暗的缺失,而黑暗的定义是邪恶……
Chap:其实,“邪恶“可以在扭量空间中建模为全纯对象……
Bloke:其实,我们回到光子的问题,它在弦论中是 H¹(T, O(−2)) 的一个上同调类,其中 T 是扭量空间,O(−2) 是一个全纯线丛,用于编码自旋为 1 的无质量场的螺旋度……
Lass:其实,光子是共形场论中的边界激发……
Dude:其实,光子是电子-正电子对自纠缠形成的涡旋结构,可能包含 T4G 框架下的虫洞子结构……
Bloke:其实,光子是由弦局域场表示的,属于庞加莱群下零质量、无限自旋的表示……
Fellow:其实,光子是一个沿零测地线传播的无质量粒子……
Guy:其实,引力子和其他假设粒子也可以是无质量的,并沿零测地线传播,所以……
Chap:其实,光子是光中微子的超对称伴粒子……
Bloke:其实,在弦论中,光子是开放弦的第一个激发态,通常出现在 Neveu–Schwarz 扇区……
Lass:其实,你们已经这样说了五十年……
Dude:其实,我没说五十年,不然我一直在呼气早就不能呼吸了……
Fellow:其实,你太咬文嚼字了……
Dude:其实,我只是在追求表达的精确性……
Chap:其实,你表现出对“其实”准确性的过度执着,并在越来越细微的细节上纠缠,以至于忽视了整体,这正是咬文嚼字的体现……
Bloke:其实,你的指责本身是主观观点,而不是“其实”判断……
Dude:好吧,这有点失控了。
Chap:其实没有,一切都在掌控之中。
Fellow:你是个傻子。
Guy:而你没有动用你整个大脑。
Fellow:这没关系,因为人类本来也只使用了 10% 的大脑……
Bloke:……
(众人互望)
(沉默十秒)
Fellow:……
Guy:(看着 Dude)还是别说这个了——
Dude:其实……

Curt Jaimungal 的视频看着真过瘾。我是从他 youtube 频道 Theories of Everything 最近一期喷真理元素 (Veritasium) 了解这个人物的。北美何教授。

Windows 自动设置开机锁屏壁纸 V3

2025-04-25 23:49:00

之前也写过,Windows下自动设置墙纸 V1V2,今天发现两种方法都失效了。

于是一气之下搞了个 Bing Image of the Day 版本的。

保存为 change_wallpaper.bat 双击执行。加入自启动或者定时触发。

@if (@X)==(@Y) @end /* set Win10 wallpaper to Bing Image of The Day. By est.im
@echo off
cscript //Nologo //U //E:JScript "%~F0"
exit /b %errorlevel%
*/

function http_get(url){
  var xhr = new ActiveXObject("MSXML2.XMLHTTP")
  xhr.open("GET", url, false)
  xhr.setRequestHeader("Accept-Encoding", "identity")
  xhr.send()
  return xhr
}

var rss_req = http_get('https://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US')
// WScript.Echo(rss_req.getAllResponseHeaders())
var img_url = 'https://www.bing.com' + rss_req.responseXML.selectSingleNode("//rss/channel/item/link").text
WScript.echo(img_url)
var fso = new ActiveXObject("Scripting.FileSystemObject")  // shit cant handle binary data
var stream = new ActiveXObject("ADODB.Stream")
var img_path = fso.GetSpecialFolder(2)+"\\bing_iotd.jpg"
WScript.echo(img_path)
stream.Open()
stream.Type = 1
var img_req = http_get(img_url)
stream.Write(img_req.responseBody)
stream.SaveToFile(img_path, 2)
stream.Close()

var WshShell = new ActiveXObject("WScript.Shell")  
WshShell.RegWrite("HKEY_CURRENT_USER\\Control Panel\\Desktop\\Wallpaper", img_path, "REG_SZ")
WshShell.Run("RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters")

其中 format=rss 可以改成 =js 或者 =xml 本来想解析 json 但是发现老的 IE6 引擎不能支持双引号这种JSON,而且只能用 eval() 就放弃了。还好有 xpath 还挺方便。

要用 .bat 套一层是因为 win10 貌似禁止 .js 或者 .vbs 双击执行了。病毒木马太多了。这种一份源码同时被两种语言解析还有点技巧可以参考下。

很久没写 .jscript 了用了 ChatGPT 这个 vibe coding 真爽。

语言,逆差

2025-04-15 05:54:00

又睡不着,琢磨一段话

多戲超人 @DoubleFakeCute: 文字很容易传播仇恨,但很难传递感动。
@yetone: 是的,换句话说文字传播感动是需要功底的,但是传播仇恨不用上完九年义务教育就可以

这句话背后揭示了一个道理:表达愤怒、抱怨、不满,似乎是语言最原始、最本能的用途。人类还未掌握完整的语法与修辞,就已学会了哭泣。

新生婴儿落地的第一声啼哭,正是一种天赋的语言——一种对环境提出抗议的表达。哲学家维特根斯坦说过:“语言的边界就是世界的边界。”在生命伊始,我们的语言边界,即是对苦痛的感知;我们最早学会的,是如何说“我不喜欢”。

相较之下,笑,是后天习得的,是在社会化过程中逐渐学会的回应。但当笑成为一种礼貌、成为一种职场的面具,它也就褪去了它的真实。于是我们在笑中疏离,在沉默中彼此冷漠,脸上浮现的,是长久训练出的 poker face,那张扑克脸仿佛是一种文明社会强加的伪装。

最近 realDonaldTrump 把🇨🇳进口关税从10%,20%,54%,104% 一路干到154%。 仿佛数字本身也在喊叫。一个长期生活在中国的美国人 王渊源John 打趣地说 trump 的支持者之所以对“涨关税”拍手叫好,是因为“trade deficit”(贸易逆差)这个词在英语里带有天然的负面含义——“deficit”意味着赤字、亏空,仿佛国家正在负债累累。而在中文语境中,“逆差”这个词更像是一种经济现象,而非道德沦丧,无需过度反应。

这让我想起另一个语言误会的悲剧——美国的“war on drugs”(禁毒战争)之所以久攻不下,很大程度上,也可能是败在语言上。在英语中,“drug”一词含义,既可以指药品(medicine),也可以指毒品(narcotics)。这导致在大众语感中,毒品并没有一种“邪恶之物”的鲜明面孔。相比之下,中文中“毒品”与“药品”泾渭分明,一个是治病,一个是害命,“吸毒”这个词本身就带着罪与恶的意味。而英文中的“drug overdose”,只不过是一场“药物使用过度”的中性描述,仿佛只是剂量出了问题,而非价值观的崩塌。

语言之毒,在于其无形;它不像刀剑那样可见、可防,而是悄无声息地改变我们的感知。孔子曾说:“巧言令色,鲜矣仁。”。庄子又言:“言者所以在意,得意而忘言。”。语言虽巧,往往意在蛊惑;修辞的闪光点,也可能是陷阱的倒影。语言的本质是媒介,而非终点。

古代巫师、祭司、先知,其实都是语言的炼金术士。他们并非真正能预见未来,而是能以一字一句为符咒,将人的心智引向他们想要的方向。如《盗梦空间》中,那个悠悠旋转的陀螺,不断将人困于梦与醒之间,真假难辨。

语言即现实的建构者,它能唤醒你,也能奴役你。它是文明的基石,也是误解的温床。传播仇恨,只需几句粗陋的标语;而传递感动,却如雕刻光影,需要时间、技艺与赤诚。


15:12 根据ChatGPT润色了文章。太他妈吊了。