duangsuse::Echo
712 subscribers
4.24K photos
127 videos
583 files
6.46K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
比较深奥的话题里,我快被内联的代码淹没了,却不知道他,或者原软件的作者想handle什么数据结构和动态。当然我贴的链接都是很易读的,因为他选择了较高视角。 高视角和技术栈的符号无法结合,也算是95%的通病。
#statement #learn 《面向薛定谔的技术分享》
刚才有个朋友说,
咱们写个文既要 "get ur hands dirty", 又要能添加 "footprints",还tm要别人觉得易读,
那不就和玩泥坑的佩佩猪一样,成巨婴了?😒


可是…… 在读这一类仅仅是博文-而非知识库的产出时,我就能隐约感受到一层“可悲的厚壁障”了😅:好像作者已死,读者不能出于好奇或自己领域的经验提出任何问题。
这就像读博文或AI生成的完整代码时,却不能edit&rerun,甚至都不能run的起来一样,手感非常怪异。 简单来说,这就是yin所谓的「死知识」
https://yinwang.org/posts/learning-philosophy#:~:text=死知识可能来源于真正聪明的人,但普通人往往是间接得到它

然而,我似乎能猜到95%网文对技术“粗粒度”和“细粒度”的描述间,又为什么会缺失这一种中间融合态的视角,而有时又没这毛病。旁观者清,我把这种状态称为「面向薛定谔的技术分享」。🤯

我学习的方式比较特殊,因为我脑子不好,经常学不进东西!所以,我的任何一个知识,并非是“插入了”整个的知识图谱里,而像是“在教程和实践的启发下,自己创造出来的新知识”。
这样状态的知识不经考(因为学习效率低),而且往往也与主流技术界“没有共同语言”,但也有一点好处。🤪

我能控制知识点间的超链接,也知道着手的顺序
,就像py函数一样。
我能看清热点的时序、难点的重构、高开销的IO和易错的地方,好像是自己在运行着整个图谱一样,知道在哪里加个if就能提升静态或动态的性能😒

所以我们就能回答文章顶部的问题了:
粗粒度理解时,外部的知识树并不大,所以自己没有knowledge-base也可以含得(handle)住; 细粒度时,因为完全是转发主创的形状,照猫画虎,也没问题; 但是要在之间形成一种解读时,这两种 "hot path" 都靠不住了,必须是“去优化”到自己来做,才能抓得住。 毕竟,创作是掌握的象征。


因为是“自己创造”而非“FFI外语接入”,获得知识的「内聚性关联」较弱,我能够切断我不想要的,或者替换,或者打散重组;就像JVM的native比之cpy的“C 语 言 (意味深) 插 件”一样:
前者必须遵循Java的心智模型,按照她的生命周期来,不然就不接纳它这个“复用库”;后者则非常自由,每次生态的整体升级都会给cpy自己卡点设限。😅
——最要命的是“C插件”所依赖的C生态,根本不在cpy自己调度范围内;但也没差的,反正cpy也成了unix系的一个附庸。 它获得了她那70年积累下来的“下限”,但同时也失去了替代unix工作的机会,可以说有得必有失。

那,如何直观区分“学到的知识vs受外部启发而自己创造的知识”?
简单来说,后者是双向选择。 我的认知之网不存在“pin好的值”,或者表象形式。 这个站点,是热补丁的、交叉引用的,不存在「一种清单」去豁免知识,更不会将死知识“视如己出”。

我认可,才知之;交叉引用太少,我想学都不成。 其实呢,这也未必是学习效率低,人们谈教育的词,慢慢从智商、智慧、认知,变到更优的指标。
yin对一些「知识负资产」还能实践一些,有成果后去骂几句,遂束之高阁;我就没他那么聪明。 有些“知识孤岛”表面上存续,它们作为整体却没有希望。
我把教程融入自身,而不许自身融入教程。 寻根究底,最简单的替代品,就是事物的本质。


在AI和 #ML 技术发展的当下,你想要选择哪种模式,调度自己所「掌握」的知识呢?😒
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 层叠 - The Cascading
Python 基金会因「坚持推行 DEI」放弃美政府 $1.5M 捐款。

- Python 基金会 (PSF) 发文如是说。DEI 指多元化、平等及包容 (diversity, equity, inclusion)。
- 捐款来自美国政府国家科学基金会 (NSF) 关于开源生态系统的项目,起初由 Python 基金会职员组织申请。
- 捐款方美国政府要求 PSF 不开展促进 DEI 的工作,否则可能收回已发放捐款。

pyfound.blogspot.com/~

#Python #US
Forwarded from 层叠 - The Cascading
Firefox 新吉祥物:小狐狸 Kit。

https://www.firefox.com/en-GB/kit/

EDIT 11/9: 修正一个 typo。

#Firefox
Forwarded from 咕 Billchen 咕 🐱 抹茶芭菲批发中心 (billchenchina | 缩缩)
All modern digital infrastructure
https://mk.absturztau.be/notes/af9ier31oog102r8
Forwarded from &'a ::rynco::UntitledChannel (Rynco Maekawa)
神人网站:只有哈基米音乐的播放器 hachimi.world
duangsuse::Echo pinned «#statement #learn 《面向薛定谔的技术分享》 刚才有个朋友说, 咱们写个文既要 "get ur hands dirty", 又要能添加 "footprints",还tm要别人觉得易读, 那不就和玩泥坑的佩佩猪一样,成巨婴了?😒 可是…… 在读这一类仅仅是博文-而非知识库的产出时,我就能隐约感受到一层“可悲的厚壁障”了😅:好像作者已死,读者不能出于好奇或自己领域的经验提出任何问题。 这就像读博文或AI生成的完整代码时,却不能edit&rerun,甚至都不能run的起来一样,手感非常怪异。…»
duangsuse::Echo
阶段一:The Master Craftsman (工匠大师) vs. The Knowledge Curator (知识馆长)
#cs #dalao YSLib的作者(C++吧 帝球,与vczh齐名,和hex老互怼)的科普集合,非常的……
https://github.com/FrankHB/pl-docs/tree/master/zh-CN

对于咱们喜欢看title的听众,若说 jia.je 是“清华微电子17届”,在CS的整体上倾向开源硬件,那HB起码是 MIT,IU,Berkley 了…… HB比起ice1k这种只是略沾C艹的人,而且还混贴吧的,那知识量简直双倍啊😅
ps. 没说错,因为他和1k就是一个圈子的。
ps. 可是我也关注了会锐评HB的频道啊 😅

他写导论的“语气”和我比较像,不太严肃,但这个大部头,超深的ul>li>ul树,结合VSCode自带的嵌套ul逐层高亮(while e.parent:e=e.closest'ul') 😱
这种深列表风格,一时间让我有点像「自己是归并排序算法」的感觉,又像是「帝球才是真正的Lisp信徒」。

你看过帝球的docs,就完全理解为啥有人把30行的体量写成500行大算法了,但我完全被他不明觉厉吓住了,他这个广度,大概不比LLM差吧…… 24年更新,主要内容截止到22年,但我看没什么我了解的东西他没写到的😅

上面AI也说了,杰哥这种风格的人最终会“修”到什么样子,我猜,就是(知识馆长)程度的能力😒

可惜谈个main函数ABI都能写上千行的能力,要知识蒸馏,甚至只是当词典查,还真难啊。
不要轻易读pl-docs,不然就回不来了。

ps. 最近我对yin的产出和历史了解比较多,他的书也很好,除了只公开英文,7章前一百多页
https://github.com/Kuri-su/yinwang.bak/tree/master/articles
https://github.com/yinwang-wiki/site
ref:https://t.me/dsuse/21573 另一位大佬

ps. https://yinwang-wiki.github.io/site/blog/posts/2013/06/21/One语言-的设计理念.html#:~:text=把类型声明放在函数体内,不是为了显得酷,而是为了取得语义的“一致性”。这个类型声明可以是一个很复杂的表达式

呃…… 不得不谢谢这些做“名人”wiki的人了。 如果不是他们记下这些曾经开源的思想, 我都意识不到我今天的设计yin曾经尝试采用过。 不过,我不相信圆括号就是了(你猜呢 😝? 命名也非常DOM风格(类似http头那样,因为单词长,所以取得了一致性,所以实践意义上反而简单..)。

他用 Rc+typehints 替代GC的方法我也有考虑到,甚至是 (wait (par 多任务)),或许最后做不到,但至少要在ABI中体现。 窝槽,这是十年前啊。 这些笔记现在是搜不到的,所以饭圈在某种意义上也是有价值的?
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
ac.k331.one, 朱子润
难怪看这个人文章我觉得亲切,记住他了,原来是一个流派的……
点朱子润resume里的头像,你会发现wow! 🥳

为什么这么wow呢?因为他协作于 章雍哲、柯向上 (除了Agda.. 柯擅长使用 bidirectional transform 解决两个变量树的一致性)
https://josh-hs-ko.github.io/blog/0006/ 这篇挺好读的
https://x.com/i/grok/share/bHjJvTvsgL8KDNBhYIEzvemYo #ai探讨
我注意到BiGUL对一份代码,实现了 get, put 两个操作,组合函数的签名就像JQ,单向函数会validate结果(V)是否如f(S) 否则Err(adapt分支)

可是就 Reactive List 的场景而言,直接以length来"adaptive"或"skip"是很奇怪的,因为无论项是不是int,它肯定该有一个ID,然后,根据局部ID(key函数)来缓存strBiGUL的map结果就行了,就像普通的lru_cache或memo而已

push, splice 这些操作应该直接影响到id,而不是要写另外一堆“默认值”或截短的接口。另外,如果emb再复杂一点,不能是 String(Number(int)) 这样oneliner的正反函数,“魔法”抽象被击穿的代价会非常残酷,让库调用者试图理解整个 'Putback-based BX',demo里都没做到。😅


ps. 其实对于任何“PL人”之外领域的人,编译器都是随手都来么…… 这个是2010 ACM的成都#4
https://bitbucket.org/zyz915/palgol/src/master/doc/tutorial.md#markdown-header-112-indentation-rule

不过我不得不说,这和py+DSL区别也不大了…… 甚至语意上的优化不如numpy这些「准编程语言」,而且是 dsl2c++,甚至没有1:N port
但其实业界也就那样嘛…… 想起了 np.einsum() ,那才叫设计语言啊,我在国内看到实现语言工具链的都很少了,少数两三个人都是爱设计「艺术品」,中看不中用那种。

ps. 😱 grok 支持执行py代码了?
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
你看过帝球的docs,就完全理解为啥有人把30行的体量写成500行大算法了,
shunting-yard #parser #algorithm
https://www.moonbitlang.cn/pearls/shunting-yard#:~:text=可以认为%20Shunting%20Yard%20是将%20Pratt%20Parser%20中隐含在调用栈里的机制转写为显式的栈操作

其实我会这个玩意(从Lua抄的,但基于调用栈而非[].push),但我一直不知道它叫啥 Yard
不过,现在我知道它是 Dijkstra 百年前为Algol60所创,就高兴了。以后谈RPN就可以提Dij的名字了😃
另外一种是1999~2008的 https://11l-lang.org/archive/simple-top-down-parsing/ #recommended

ps. lparser.c#subexpr 使用的是TDOP(aka Pratt),但输出的结构不是树或SExp,它是一个树状的RPN数组,所以我说两者是一样的,就在上上条消息里。
如果在TDOP里不使用return,我们很容易发现Pratt是把栈结构藏在call里工作。 但如果一定要考据癖的话,那就是递归下降 op precedence 算法先进Dij老大40年

不过,现在某些大学里还在教「左递归」和LL1么…… 考据癖可能都做不到。

所谓选择大于努力, 在我看来Moonbit张写上条消息的算法也是可以500行的,比另一个Earley算法(一个经典的CFG解析器)短点。
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
shunting-yard #parser #algorithm https://www.moonbitlang.cn/pearls/shunting-yard#:~:text=可以认为%20Shunting%20Yard%20是将%20Pratt%20Parser%20中隐含在调用栈里的机制转写为显式的栈操作 其实我会这个玩意(从Lua抄的,但基于调用栈而非[].push),但我一直不知道它叫啥 Yard 不过,现在我知道它是 Dijkstra 百年前为Algol60所创,就高兴了。以后谈RPN就可以提Dij的名字了😃
#plt #java #learn 张宏波系列
这个教程整体不错,但还是太刻板了,尤其是在这里比较数学上一个不相干的概念…… 为什么不说数学的“参数式函数” “隐函数”和python里有啥区别呢?
https://github.com/moonbitlang/contest-2025-data/blob/main/compiler-crash-course/05_closure.md#:~:text=原本对于一个函数是开放(open)的变量(也就是自由变量),%20被关闭(close)到了一个指定的变量作用域中,%20得到了一个“关闭的表达式”(closed%20expression)。%20这个名字再之后被缩短,就变成了和数学概念重名


“可露稀closure” 其实是对单方法对象(SAM) 的内存优化,其实现方法为“捕获capture”,就是把栈上字节copy到new结构里去,结构就叫闭包。

张强调的一点很对,就是libc提供了 signal(id, fn, arg0) 这种“KV注册”接口,但只传入fn也是可以的。 传入vtable+this 双指针(fat pointer)也是可以的,C.ABI.函数指针 能无缝衔接对象参数,要不然C++怎么那么轻松就火起来了。

闭包与纯粹的 (new Callable(nonlocal变量,)) .call() 区别在于,如果在frame返回前销毁,就不需要堆分配了,所以说它不是一个「语意上存在的特性」,只是new class{}对象的语法糖+inline优化。 这点和同样用“捕获”创建的协程(闭包链表Thenable),完全不同😒

nonlocal有很多名字,cellvar .py.rs, Upvalue.lua, LexicalScope ,但本质上,它和 class var 一样可写,因此在 |mut acc|{} capture 里,它会逼得外层函数也变成 new class {call(...){}} ,除非依赖 IntRef(0)这种autoboxing,即修正 "effective final" 错误。
当然这种错误真正的解法就是从OOP过程式-> Compose。 IntRef是不是和 let [get,set]=useHook(0) 的逻辑式变量很像?
Moonbit 的实现没有在DOM上,就不只是在set时更新一下 derived vars. dirty...

至于文顶的“自由变量”一般就是this变量或全局。 之所以自由,是因为暴露在API里不能随便“alpha-重命名”,相对于“绑定变量”来讲。 这一行谈纯理论,我说的不难受,但我猜读的人和我当时一样百思不得其解,什么栏目答演算。🤯

invokedynamic/LambdaMetafactory 其实就是这个“不逃逸优化”,没被存储到字段、传到其他线程、返回出去,零拷贝。 Serialization 的问题由JDK大佬 Brian Goetz @2014 PPT讲解过:
https://wiki.jvmlangsummit.com/images/7/7b/Goetz-jvmls-lambda.pdf#page=18
https://www.infoq.cn/article/brian_goetz_project_lambda_from_the_inside_interview#:~:text=你很难决定是否支持捕获可变局部变量、非局部控制流、异常透明度和其他的特性,并且放弃其中一些特性意味着它们很难自然地表达。

Goetz这个说的道理。这不比莫名其妙扯到数学的科班好了? fyi. #Kotlin 支持它们全部
#ai锐评 https://x.com/i/grok/share/UEs8sZtds1l1XxWqwWUFijyIj
再谈「指针vs对象表示」问题😒
其实这些,都是从解释器到cpu的优化,或者说是试图把 [1,2,3].[0~1]=> ptr+len, Animal{Duck;Cat}=>type+data 编码为x86能计算或跳过的字节,避免「中间商赚差价」(LLVM 就不是中间商了, hh
我们操作的是变量树,指针和堆栈并非「语意上存在的特性」,所以cpy它丫的 sizeof(一个int)==28 😓……
当然,这些VM数据结构的心智开销很小,感兴趣的可放心阅读。

C++-style lambdas 张宏波系列 https://thephd.dev/the-cost-of-a-closure-in-c-c2y
模仿 esm.run,git 的“一切皆文本”编程语言: scrapscript.org
GC/Rc 的最终 https://x.com/i/grok/share/ULJQCSOhg56OCZiY84f29lPZO
Please open Telegram to view this post
VIEW IN TELEGRAM
https://jsbin.com/yosixu/edit?output #ai #vibe Graphviz
https://jsbin.com/nofepom/edit?html,output 最终发现失败了,AI没有做成功双向编辑😅

grok3搞了3遍…… 回头加个漫画风和AST可视化。
#statement
事实证明,如果AI第一遍没写对,而且不是版本号这些小问题; 后来你调试会花600%的时间…… vibe 可不是针对大模块的

而且,grok3的webUI基本上一点点模块化都没有…… 我思量着ipywidget那种级别的demo可以让它帮忙,但有缝合代码的需求就还是算了。API矿工都挺勉强,它太难调教

😅 修了半天也没把两个API缝合好,动不动就错,还不报错
#除错路线 d3-graphviz+拖拽更新DOT节点文本
- ai提供版本号和大小写错误的js -轻松
- drag事件座标计算错、state变量问题。现在依然有玄学的座标偏差问题(多次拖放)
- roughJS的各路API不稳定造成AI幻觉问题

d3的报错没有提示是renderDot()和sketch()共享一个id容器,大部分时间浪费在排除法和http请求、鼠标路径上

最不爽:AI经常调用不存在或已经失效的API(“最后一公里”问题)、jsbin的三栏界面太窄(F12很燥人)
AI直接处理大段代码会写丢功能、AI的代码基本没有函数化 导致无法扩展/插拔(代码裁缝还不好当..)

#awesome
https://observablehq.com/@magjac/demo-of-d3-graphviz-animations
https://github.com/magjac/graphviz-visual-editor 原作者写的编辑器(UI很差。。)
https://codesandbox.io/examples/package/d3-graphviz #tool npm的demo搜索

https://edotor.net/
http://www.webgraphviz.com/
https://stamm-wilbrandt.de/GraphvizFiddle/ ps. 这人也是个跑马拉松的( German Ultramarathon Association )
http://www.ryandesign.com/canviz/ 巨多示例
https://sketchviz.com/about 这个不是作为示例库,而是抄了RoughJS和字体

#draft
设计一种.jsdot 脑图,更加简洁(如 let { -a b; -b c 'c1' }),可以嵌入S-表达式和js ,可以ppt动画

dot=({fruit,salad, 香蕉,番茄}, ln)=>{
fruit(香蕉)
salad([香蕉,番茄, fruit], {port:'r2l'})
}
ln(attr_arrow?, Node, _1nNode?)
ln(attr?, _1nNode)
ln(_) 绑定首参数,返回Node函数。 ln(..)() 创建或获取"node[attr]"的 $ed 编辑器选区
所有Node可为"str",自动获取或创建。(_1nNode)意为1或N个项
ln.ALL可过滤全部节点, ln.F5创建动画帧,总结:

ln(...DSL) 可以是以下任意形式:

ln(A, B, attr0) → A → B
ln(A, [B,C], attr0) → A → B, A → C
ln([A,B], C) → #wontfix
ln(A)(B)(C) → #wontfix, try [A,B,C].reduce(ln)
ln.graph({...}) → 图属性
ln.let(name) → 创建子图
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
接下来又双是暴论时间了。我希望这是我最后一篇讲单线多任务的po,不区分pyjskt等卡线程or单线多路IO实现
#ai探讨 https://x.com/i/grok/share/O3cKyQzTDrHBLaUbm34UadxDL
#对比 https://chat.librechat.ai/share/ziJek8UdHRdq7AuKQNHoQ
😅😅 完了,我被AI取代了 😅😅

有时候,果然还是非专业的Thinking模型好用啊…… 没有思维定势
与他的比喻相比,我写这些给中级开发者看,又算什么!

“ 异步,是程序自己主动把慢活儿安排给别人干,
异步就是:别傻等,让别人去干慢活儿,干完了再通知我。
异步不是让程序变快了,而是让“等待的时间”不再浪费!😅
同步:你等5秒,啥也干不了 → 浪费5秒
异步:你等5秒,但这5秒你可以接待100个顾客 → 时间被充分利用了
最后回到那句“异步的最小单位是任务对象”翻译成大白话就是:
一张“干完这事后记得叫我”的小纸条。
这张纸条可以传、可以组合、可以排队、可以取消……
所有高级玩意儿,都是在玩这张纸条的花样。

阻塞 = “我不干完,你全家都不准干”
而所有异步技术,核心就两样东西 : 一张“待办小纸条”(Promise / Future / Task) + 一个“闹钟大管家”(事件循环 / 运行时)

全世界99.9%的异步花里胡哨,都是在这两样东西上玩花样。
你会发现:sleep 5的 real ≈ 5秒,但 user 和 sys 都几乎是0!结论:异步的 sleep 根本不占你的CPU!
它只是跟操作系统说:“5秒后叫醒我”,然后你的程序就去干别的事了。


#tool 很好的client WebUI
TypingMind (付费、Team,UI繁多)
🔗 https://typingmind.com

LibreChat (全开源,可分享链接,可自托管,UI简洁)
🔗 https://librechat.ai
🧑‍💻 GitHub: https://github.com/danny-avila/LibreChat

LobeChat (现代开源,UI最美)
🔗 https://lobe.chat
🧑‍💻 GitHub: https://github.com/lobehub/lobe-chat
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
想知道没有相关知识的小白问AI会有什么结果可以看看:
grok3: 同步阻塞的本质 = 把“等待”当成了“工作”,时间被偷走还不自知。

你看,是不是每一句话都能在项目里找到真实案例?
哪个陷阱戳中你了?来,我给你递纸巾擦眼泪~

😅😅 #learn
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
#learn #math Fourier Transform 的输入必须是2,3维向量:可以用于简化 svg path ✏️ FT是把yMax个频 的sin(cos,基频), 逐y与波形加权求差(np .dot),得到"左右对称"的直方图 (频谱图里纵向的1px 线) (FFT以此优化. 直方含有"相位",默认为wav+0j,也能被vocoder推出来) def DFT(x): N = len(x) t = np.arange(N) pi = -2j*np.pi * t.reshape((N…
#ai #news https://x.com/Tz_2022/status/1993030754423763340
NB pro 也可用于PPT: https://x.com/bggg_ai/status/1993131825737482271

nano banana pro 的强悍之处不在于会画图,而在于图形和文字的直接融合/融会贯通😅。 漫画内容:

LLM无法真正将训练后的新知识吸收为长期记忆。嵌套学习😅(Nested Learning, NL)范式 和由此诞生的 HOPE(A Self-Referential Learning Module with Continuum Memo) 框架,正在打破这一僵局。

有专家认为,这篇论文的重要性不亚于LLM行业那篇知名的开山之作《attention is all you need》
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM