MoreRSS

site iconEST修改

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

Inoreader Feedly Follow Feedbin Local Reader

EST的 RSS 预览

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润色了文章。太他妈吊了。

Su7🔥,智驾,假风口

2025-04-01 23:48:00

车祸和智驾

北国春深,乍暖还寒。3月29日夜,三位大四女学生开着小米Su7新能源轿车,在安徽高速上着火出事,不幸香消玉殒。

恰好米车上市刚一年,卖得十分火爆。因为新能源起火+死人,31日,1日舆论爆炸。作为全程吃瓜群众,觉得有必要写一些我的感知。

还记得,首先乱七八糟群里看到各种截图和聊录,抖音哭惨。有家属(事后被证实是女主男友)痛陈了米车 刹车,“自”燃,车机死机,智驾,AEB等诸多技术问题,以及封号删帖等不公正掩盖行为。

随着消息丰富和媒体报道,事实的大概的轮廓逐渐清晰:

  1. 车是Su7标准版,电池应该是弗迪,女主家里出资买的
  2. 车主归女主男友所有,因女主还未毕业,拿不到车贷
  3. 女主和两位同学去外地考试,给女主母亲说的坐高铁
  4. 女主“借车”出行,夜里出车祸,起火燃烧,前排两人遇难,后排被破窗拉出,遭遇不测。

本能的带入思考一下,车烧人陨,算是大事了。如果是旧能源车,起火怪车子质量,撞车怪驾驶。但是着是新能源,就得更加细分:

  • 起火原因,普遍观念,重点看用的什么电池。三元锂肯定不如铁锂。但是出事的恰好是标准版,多半是铁锂。我觉得,PACK设计,是否CTB和电芯倒置也很重要。
  • 司机用了智驾,小米的公告说提前2秒退出,都不用猜肯定是这个结果
  • 因为事故当时高速在修路,有各种桩桶水马,那么有没有超速,避险,甚至路政设施不到位的问题?
  • 最后才轮到司机自身问题

截止现在 20250402 00:04,矛头普遍指向米车智驾NOA太烂。各种短视频、自媒体、矩阵号扮演不懂就问,把民意引导扩大到米车质量问题,营销问题,雷军人品问题了。

我想说:啊?智驾难道还有不烂的?

作为十多年驾龄的老司机,如果我在高速遇到事,比如爆胎,首相想的就是怎么从路政拿到赔偿,而不是怀疑轮胎或者车辆本身有啥猫腻;回到前面,发现一个重大差别:车是借的。民间有说法,车和女人不外借。出事的车上还有其他两位女性,如果有赔偿问题,车主肯定首当其冲。车主不会选择漫长的从路政那里维权,找最快引爆流量的方向——从车企入手。

于是问题的矛盾集中在智驾爆发了。

智驾这个关乎生命安危的议题。我对它的接受设定为:

  1. 可以不用,但是最好有
  2. 如果某一次生效,把车从事故边缘拉回来一次,就算值了。

但显然大众对智驾有更高的看法和期待,幻想能完全保驾护航。

设想一下女性单独出远门长途,夜里开车,加上出事的现场在打围修路,需要变道往对向车道,开着100+的NOA超速,稍有不慎处置不当,这不妥妥大事故。夜里过往车辆少。错过宝贵的救援窗口时间。你最好祈祷智驾在这期间要么工作0次,驾驶员直接接管,要么成功100%,

三条人命就这样消失了。


说说小米

我当年一直给各种Samsung刷机MIUI。当smzdm说MIUI做手机了,果断冲了首发,然而米1手机有个电池虚焊的致命硬伤,变路人;抢红米抢不到,感觉被猴耍,变米黑;突然有一天,雷总说给1999返现,我又转粉了。我平时喜欢看一些汽车类资讯,也感叹米车的成功。雷军的爆款思维很是有一套。

面对车祸带来的口水👊,斗胆对万亿总裁指点一下江山:现阶段智驾是个假风口。

雷军很喜欢讲顺势而为,风口的猪也能起飞,记得一次采访他说之所以造车是因为小米集团里的人才都跑去做车机,做智驾了。然后🇺🇸一制裁duang你手机芯片成问题了。拿干脆下场做车得了。新能源技术卖点,除了三电还能有啥,就是智驾。

我看待智驾的出发点:它永远无法达成L4 L5的目标。更不要说纯视觉方案了!理由很简单,就算你训练AI做得和人一样聪明,最顶尖的人类驾驶员开车也会犯错,AI有何根本机制避免?既然AI无法避免,车企担责就是不可避免的。

顺着这个出发点,那么现阶段最好的智驾供应商,天生有一道护身符。如果它出了事,可以拿“市面上你也找不到更好的智驾”给圆过去。比如鸿蒙M7出事,KOL可以大大方方造谣说是博世方案的锅,虽然舆论也很难看,但是华为方案这个核心并未受到挑战。因为它就是无可争议的No.1

但是老二和老三就难受了。消费者愿意为了最好的东西支付溢价。这场比赛可没有“顺势”。所有擂台上甘拜下风的竞争者,遇到逆风局,都只能被动挨打。这是个赢家通吃的游戏。

今天小米公告,雷军的发言,给人的感觉就是只想平息,并没有太好的针对措施。技不如人,还能咋办?等热度过去,继续x砸钱干研发呗

这事还有更主动的出路。在前面已经列出关键——路政。

家属和民意选择往车企身上靠贴,你车企不知道往路政靠?毕竟未来的智慧交通,“车路协同”,V2X,也是很重要的一环。直接大大方方承认,智驾无法单独承担责任,遇到静态物品太迟。就算人开车,也不能很远发现前方路况出什么事了。过去出租车司机靠对讲机通风报信,现代人不也是要靠GPS+地图路况。高德那个山路弯道会车提醒就广获好评。同理,遇到道路施工或者险情,路政是不是应该能主动下发推送,提前切断区域内所有智驾,推送降速行驶指令呢?

所谓“赛博桩桶” 是也。

雷军作为人大代表,北京现金王,完全应该站出来,倡议这件事。跳出“智驾”这个死局,开辟新的路线。有些“势”就不能等别人造,得自己突破。

技术上做这个事情太容易,电子路标,还有雷军倡议的智慧车牌。就拿现有的框架,ETC龙门架就可以下发一定的数据。新车也是强制配备ETC终端的,完全可以跟智驾通信。

这样,以后如果路政没设置电子围栏,至少也分得大锅。

路政不愿意接受,米车之间能不能组一个路况网呢?加上蔚小理搞个实时路况联盟行不行呢。单机蒙猜,不如群体智慧。这事就算没法立刻落地,至少也是个话题讨论点,怎么也能熬过这次危机。

安全开车这事,没必要指望那点可怜的CMOS像素和矩阵乘法来承担一切