#think #web #tool
https://cssgridgenerator.io/
https://crocotile3d.com/
https://fixupx.com/Oroshibu/status/1808500235263418441?t=BtGGBHj9jnN2AReHW2VTWA&s=19
三視圖?
有趣的建模工具
帅啊!
螺莉莉的黑板报:
(๑•ㅂ•)و✧
https://dataset.wav.pub/
https://brython.info/demo.html
https://github.com/Distributive-Network/PythonMonkey
#py
螺莉莉的黑板报:
https://github.com/baskerville/plato/blob/master/README.md
你们 rust 真是啥都能干……
https://www.sea-ql.org/SeaORM/
这东西好用么……求教……
https://gitlab.com/coolreader-ng/crengine-ng
有趣的引擎
https://chinese-font.netlify.app/ font
https://typst.app/universe/package/bob-draw
#svg
https://ivanceras.github.io/svgbob-editor/
#code
duangsuse:
大量复制粘贴十分抽象
list有那么难用吗
难道你没注意到近十行只变了1个参数
AIGC也没脚本化得这么严重吧
我看还是用list first!null好了,这么八股文…… 大家现在都是用get null取代预判has的
这种到处预判的风格,很像你找大佬问问题,先发「您在不在」,他只好回个在,然后你不在线……
表达式化比你想的要多哦:
>Spring如何把 @Autowired T xx; 换为 var xx=find(T.class)
var Ts = [T.class].map( applicationContext::getBean);
你在class{}里加那一堆定义,如果只引用了一次,就完全不应该引用。 到底都是要查bean的
从code smell来看,只使用了1次的变量名是无效的;如果只是为了易读新建变量,只能证明你的helper fn命名的有问题
kt已经有!! 了,还想要更多
Java 一大特色,注解属于元数据,和函数调用有重大区别
duangsuse:
那这是定义“随用随扔”变量名的理由吗
函数和变量是这么用的?
java以省略[""] 为由引入太多常量复杂度的优化了,都要所谓框架来解决
纯粹是make compiler happy,把一个schema弄成它能读懂的class,然后再强转Any来构造class而已
js里一个字典让java用就是这么麻烦,其实能用几次呢? init完就扔了,根本不是性能瓶颈。
注解的本意,应该和py的 @decorator 一样,是接受class元数据的编译期函数才对
而不是等到运行时才去查什么field有哪些@属性 然后逐个.set()
要动态生成一个类型,来获取注入,简直无理取闹。 明明就该在编译期产生Registry.get&fillNew的样板函数
这是属于既把元编程的路封死了,还不让基于注解的注入框架提供统一的“反射”方法
其实jawa懂这个道理,但它偏偏就做得很烂,就会个@Override
duangsuse:
为了编译速度这也太幽默了,其实,jvm作为栈机 基本就是带类型签名的GNU dc计算器,不需要什么编译优化
如果递归下降一遍,校验下类型 生成个push call 就能花什么编译时间,属于是用PHP的方式搞算法了
而且javac的能力还远没有到c预处理器的程度,为了优化? 我看是他们不在乎程序/类定义的优雅性
什么序列化啊,也没有做规范,和py能 import json,yaml,toml,marshal 能比?就一个用来RPC的ObjStream,还被业界遗忘,哈哈
汤姆猫是大专必学
虽然汤姆猫的Biz程度也就比Node http-server强半点吧
所以问题就是Result类型为何没有重载 !!, 让它看起来仿佛只是带有错误消息是null
凭什么!! 只能校验 Type? 呢?
assert也是乐观/悲观路径
Exception也是,为什么不能一起判定了?
还非得搞个ifEmpty, ifBlank.. ifNullOrBlank..
莫名其妙
duangsuse:
这不是废话吗?例如买30天大会员,肯定是30* 24*60*60秒后失效,这才是世俗意义上的电脑时间
看到py关于时间和日期/时差有3个API
我就觉得抽象
audit就是一个不懂AOP的,其实unix可以靠strace审查syscall,win32的 sysinternals.com 也有进程日志功能
与其自己搞个无人知晓的轮子,不如封装别人的,两全其美
把OS的活都包揽了,难道py是要运行在Ring0把内核驱动都带上? 那必须支持啊
绷不住了,抽象程度直逼jawa
一开始就不该搞所谓orNull
默认 first{}!! 就够了
我在js里都是把Error视为object返回值的特例,和null是一个意思
这样就不存在什么orNull orElse的,catch表达式也免了
就是语言设计者对值体系的理解不过关,例如NaN就是numbers的null才对,而不是什么number?
这样才能用统一的方法去报错/换默认值
可悲的是一开始就没把悲伤/快乐路径当问题啊,真是异常搞心态
duangsuse:
幽默IDE
完全相信它的API有一大堆根本用不上的class
忸怩作态的软件没必要去维护
kcp是这样的,可 import ast 自 https://python-future.org 就没变过😋
py只是用:隔离一个表达式先于=执行,就实现了高贵语言们的静态检查
既可以用于静态分析,也能在运行时查看f.annotation ,完备的数据不需要反射
btw. 大佬应该会做一个DSL
Message.invoke{ id==mid }
Message.select{ id==mid }//多项
可是这种写法才是真正的SQL逻辑式
既然Msg(id=)能构造数据, Msg{id==} 就能查询
这不是很合理么 #kt
很简单,如果做得太标准,以至于移植到任何一门语言里都没必要修改的话
就没人给官方docs贡献流量了
duangsuse:
https://www.liuwj.me/posts/ktorm-introduction/
🤔 一个SQL函数.xml codegen 能被吹爆,还有人卖课是我没想到的
ES6里一句 sql${} 解决的东西,哈哈
「没想到他文化程度那么低」……
怎么会呢,语句能缓存,再怎么也比一次加载完dao好
你要是不喜欢,或者不相信语法糖有缓存,可以做成生成函数的形式
例如
updateId=f=sqlFn2{a,b-> Pair{B/b, A/a}}
f("bye",0)
所以说,如果你不相信DSL能被缓存,可以转为生成sql函数的形式啊
这不是MyBatis++ ?
https://github.com/JetBrains/Exposed/blob/main/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Op.kt#L184
我只能说,缓存键要么是调用点或次数
要么是函数
似乎很难单独缓存DSL对象,除非对它们的构造器
幸运的是, key eq x 里x的修改能缓存,因为它是参数
https://jetbrains.github.io/Exposed/frequently-asked-questions.html#q-how-to-get-a-plain-sql-query-which-will-be-executed
https://stackoverflow.com/questions/74821893/postgresql-arrays-instead-of-extra-table-in-a-many-to-many-relationship
涨姿势了,以后 1:N用数组json N:N用join
duangsuse: #fp
要是kt能允许编译期生成一部分表达式,就没这问题了😅😅😅
可惜啊, unquote{bash(q(trim("trimedStr")))} 这当然是lisp的专利
其中q() 被生成为一个字面量,就像闭包捕获:
fun bash(s)=trim(s).let:
paste {system(it)}
并没有所谓的编译期,因为编译器能访问所有lib API
0开销不是瓶颈问题,但事关语言的脸面
明明就很有用,可被一些人理解为「并非瓶颈的东西」
然后被rustc拿来完魔法
要我说他们就是傻屌,只不过是把闭包「捕获」的实现方式,改为内联字面量(unquote)
就能轻松突破编译、运行的动静边界,根本没有引入任何新API ,没有什么循环展开和 kotlinpoet javapoet的区别
他们做成什么样了? 正则的缓存还不如py的拿dict查😅
https://cssgridgenerator.io/
https://crocotile3d.com/
https://fixupx.com/Oroshibu/status/1808500235263418441?t=BtGGBHj9jnN2AReHW2VTWA&s=19
三視圖?
有趣的建模工具
帅啊!
螺莉莉的黑板报:
(๑•ㅂ•)و✧
https://dataset.wav.pub/
https://brython.info/demo.html
https://github.com/Distributive-Network/PythonMonkey
#py
螺莉莉的黑板报:
https://github.com/baskerville/plato/blob/master/README.md
你们 rust 真是啥都能干……
https://www.sea-ql.org/SeaORM/
这东西好用么……求教……
https://gitlab.com/coolreader-ng/crengine-ng
有趣的引擎
https://chinese-font.netlify.app/ font
https://typst.app/universe/package/bob-draw
#svg
https://ivanceras.github.io/svgbob-editor/
#code
duangsuse:
大量复制粘贴十分抽象
list有那么难用吗
难道你没注意到近十行只变了1个参数
AIGC也没脚本化得这么严重吧
我看还是用list first!null好了,这么八股文…… 大家现在都是用get null取代预判has的
这种到处预判的风格,很像你找大佬问问题,先发「您在不在」,他只好回个在,然后你不在线……
表达式化比你想的要多哦:
>Spring如何把 @Autowired T xx; 换为 var xx=find(T.class)
var Ts = [T.class].map( applicationContext::getBean);
你在class{}里加那一堆定义,如果只引用了一次,就完全不应该引用。 到底都是要查bean的
从code smell来看,只使用了1次的变量名是无效的;如果只是为了易读新建变量,只能证明你的helper fn命名的有问题
kt已经有!! 了,还想要更多
Java 一大特色,注解属于元数据,和函数调用有重大区别
duangsuse:
那这是定义“随用随扔”变量名的理由吗
函数和变量是这么用的?
java以省略[""] 为由引入太多常量复杂度的优化了,都要所谓框架来解决
纯粹是make compiler happy,把一个schema弄成它能读懂的class,然后再强转Any来构造class而已
js里一个字典让java用就是这么麻烦,其实能用几次呢? init完就扔了,根本不是性能瓶颈。
注解的本意,应该和py的 @decorator 一样,是接受class元数据的编译期函数才对
而不是等到运行时才去查什么field有哪些@属性 然后逐个.set()
要动态生成一个类型,来获取注入,简直无理取闹。 明明就该在编译期产生Registry.get&fillNew的样板函数
这是属于既把元编程的路封死了,还不让基于注解的注入框架提供统一的“反射”方法
其实jawa懂这个道理,但它偏偏就做得很烂,就会个@Override
duangsuse:
为了编译速度这也太幽默了,其实,jvm作为栈机 基本就是带类型签名的GNU dc计算器,不需要什么编译优化
如果递归下降一遍,校验下类型 生成个push call 就能花什么编译时间,属于是用PHP的方式搞算法了
而且javac的能力还远没有到c预处理器的程度,为了优化? 我看是他们不在乎程序/类定义的优雅性
什么序列化啊,也没有做规范,和py能 import json,yaml,toml,marshal 能比?就一个用来RPC的ObjStream,还被业界遗忘,哈哈
汤姆猫是大专必学
虽然汤姆猫的Biz程度也就比Node http-server强半点吧
所以问题就是Result类型为何没有重载 !!, 让它看起来仿佛只是带有错误消息是null
凭什么!! 只能校验 Type? 呢?
assert也是乐观/悲观路径
Exception也是,为什么不能一起判定了?
还非得搞个ifEmpty, ifBlank.. ifNullOrBlank..
莫名其妙
duangsuse:
这不是废话吗?例如买30天大会员,肯定是30* 24*60*60秒后失效,这才是世俗意义上的电脑时间
看到py关于时间和日期/时差有3个API
我就觉得抽象
audit就是一个不懂AOP的,其实unix可以靠strace审查syscall,win32的 sysinternals.com 也有进程日志功能
与其自己搞个无人知晓的轮子,不如封装别人的,两全其美
把OS的活都包揽了,难道py是要运行在Ring0把内核驱动都带上? 那必须支持啊
绷不住了,抽象程度直逼jawa
一开始就不该搞所谓orNull
默认 first{}!! 就够了
我在js里都是把Error视为object返回值的特例,和null是一个意思
这样就不存在什么orNull orElse的,catch表达式也免了
就是语言设计者对值体系的理解不过关,例如NaN就是numbers的null才对,而不是什么number?
这样才能用统一的方法去报错/换默认值
可悲的是一开始就没把悲伤/快乐路径当问题啊,真是异常搞心态
duangsuse:
幽默IDE
完全相信它的API有一大堆根本用不上的class
忸怩作态的软件没必要去维护
kcp是这样的,可 import ast 自 https://python-future.org 就没变过😋
py只是用:隔离一个表达式先于=执行,就实现了高贵语言们的静态检查
既可以用于静态分析,也能在运行时查看f.annotation ,完备的数据不需要反射
btw. 大佬应该会做一个DSL
Message.invoke{ id==mid }
Message.select{ id==mid }//多项
可是这种写法才是真正的SQL逻辑式
既然Msg(id=)能构造数据, Msg{id==} 就能查询
这不是很合理么 #kt
很简单,如果做得太标准,以至于移植到任何一门语言里都没必要修改的话
就没人给官方docs贡献流量了
duangsuse:
https://www.liuwj.me/posts/ktorm-introduction/
🤔 一个SQL函数.xml codegen 能被吹爆,还有人卖课是我没想到的
ES6里一句 sql${} 解决的东西,哈哈
「没想到他文化程度那么低」……
怎么会呢,语句能缓存,再怎么也比一次加载完dao好
你要是不喜欢,或者不相信语法糖有缓存,可以做成生成函数的形式
例如
updateId=f=sqlFn2{a,b-> Pair{B/b, A/a}}
f("bye",0)
所以说,如果你不相信DSL能被缓存,可以转为生成sql函数的形式啊
这不是MyBatis++ ?
https://github.com/JetBrains/Exposed/blob/main/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Op.kt#L184
我只能说,缓存键要么是调用点或次数
要么是函数
似乎很难单独缓存DSL对象,除非对它们的构造器
幸运的是, key eq x 里x的修改能缓存,因为它是参数
https://jetbrains.github.io/Exposed/frequently-asked-questions.html#q-how-to-get-a-plain-sql-query-which-will-be-executed
https://stackoverflow.com/questions/74821893/postgresql-arrays-instead-of-extra-table-in-a-many-to-many-relationship
涨姿势了,以后 1:N用数组json N:N用join
duangsuse: #fp
要是kt能允许编译期生成一部分表达式,就没这问题了😅😅😅
可惜啊, unquote{bash(q(trim("trimedStr")))} 这当然是lisp的专利
其中q() 被生成为一个字面量,就像闭包捕获:
fun bash(s)=trim(s).let:
paste {system(it)}
并没有所谓的编译期,因为编译器能访问所有lib API
0开销不是瓶颈问题,但事关语言的脸面
明明就很有用,可被一些人理解为「并非瓶颈的东西」
然后被rustc拿来完魔法
要我说他们就是傻屌,只不过是把闭包「捕获」的实现方式,改为内联字面量(unquote)
就能轻松突破编译、运行的动静边界,根本没有引入任何新API ,没有什么循环展开和 kotlinpoet javapoet的区别
他们做成什么样了? 正则的缓存还不如py的拿dict查😅
cssgridgenerator.io
CSS Grid Generator
CSS Grid Generator - a user-friendly tool designed for web developers to effortlessly create customizable CSS grids for seamless web development.
🔮 奇闻异录 与 沙雕时刻 meme collection
#ChatGPT #GPT4 GPT4 的发布会 www.youtube.com/watch?v=outcGtbnMuQ 全程无尿点。但如果要挑出一段精华,我觉得是下面摘出来的这两分钟时间,演示的是: 1. 在草稿本上用纸笔画出一个非常粗糙的草图 2. 拍照告诉 GPT 我要做一个网站长这样,给我生成网站代码 3. 网站做完,总共历时十秒钟左右 source from weibo
YouTube
淘汰Websim! Claude Artifact:将截图变成可执行的应用程序|支持源代码下载|无代码开发|免费AI工具|
在本视频中,我分享了用Claude Artifact功能,通过无代码的方式,分别开发了应用,游戏和网页的过程!真正颠覆性的AI开发工具!支持源代码下载进行二次开发! #ai工具 #免费ai #claude #artifacts #websim #无代码开发
#linux Sukka's Notebook:
Finally, the wait is over! Winbox 4 is here, now natively supporting Windows, MacOS, and Linux! 🎉
Windows: https://download.mikrotik.com/routeros/winbox/4.0beta1/WinBox_Windows.zip
MacOS: https://download.mikrotik.com/routeros/winbox/4.0beta1/WinBox.dmg
Linux: https://download.mikrotik.com/routeros/winbox/4.0beta1/WinBox_Linux.zip
MikroTik 释出了 4.x 版本的 WinBox(仍是 Beta)、原生支持 Windows、macOS 和 Linux,在 macOS 和 Linux 上无需再使用 Wine 启动 WinBox;除此以外,还原生支持暗色模式。
#web https://www.redblobgames.com/making-of/draggable/
Draggable objects
如何实现可拖拽的元素
Finally, the wait is over! Winbox 4 is here, now natively supporting Windows, MacOS, and Linux! 🎉
Windows: https://download.mikrotik.com/routeros/winbox/4.0beta1/WinBox_Windows.zip
MacOS: https://download.mikrotik.com/routeros/winbox/4.0beta1/WinBox.dmg
Linux: https://download.mikrotik.com/routeros/winbox/4.0beta1/WinBox_Linux.zip
MikroTik 释出了 4.x 版本的 WinBox(仍是 Beta)、原生支持 Windows、macOS 和 Linux,在 macOS 和 Linux 上无需再使用 Wine 启动 WinBox;除此以外,还原生支持暗色模式。
#web https://www.redblobgames.com/making-of/draggable/
Draggable objects
如何实现可拖拽的元素
Rachel: #android #css #web
写过复杂 UI 的人肯定知道要在复杂业务场景里把动画优化到 60 帧有多难
duangsuse:
为什么 shadertoy.com 和 gl-transitions.com 用几行代码就能做到呢? 为什么@3b1b 一个人用py就能实现呢
还不是框架做得烂 https://tttttt.me/dsuse/19124
同意,类型系统不就是对字面和编译期键值的Matcher嘛, 占篇幅纯属过度设计
要是我,直接把 def(a:str) 写成 def(a~"")
现在ui还不是有用gl加速,结果到头来连满挣都做不到,一大堆空洞的class写得还不如numpy的那些公式
如果专业是指「我们必须保留所有历史错误」,我宁可保持饥饿、保持愚蠢
至少,对用字面量取代类型标注上是这样。 泛型也一样啊,写成 a=set() assert{a.add("")} 而非Set[Str]
我有一整个系统来替代现在的OOP和静态类型/编译期计算理论。
你不觉得typescript的类型标注是过度工程吗?作为把sql row 填到forif模板里的一些业务。
他们有这样依赖补齐、检查,完全是因为API的风格太含糊
动态类型只是在运行时能进行修改和(同名符号的)链接,方便元编程。 例如 for: class: 这种结构就是无效的
致胜优点是免编译(交互式编程/所见即所得)、隐式类型!
还有,在生态上,没有被缺乏语意的设计模式(例如序列化和依赖注入 aka with强类型KV:)所绑架
在子类型多态上,未必比得过静态OOP
难以拆箱(栈上分配)本该是一种可以被类型推导消除的副作用
我看到的是有初学者用 Cursor 写出类似字幕搜索的高层应用
编程的工程化,作为限制生产力的繁文缛节,如果只是 make computer happy,理应从人应该学习的部分去掉
例如,javac 用那一套class{}语法定义一个编译期字典,我们应该是做IDE插件去生成样板代码吗??
多少技巧模式是从语言缺陷来的?
狸::
说着要开发效率,用着到处加字段,SQL两百行,不合理拆分接口全部Object返
duangsuse:
还有全部POST :)
这样,其实你完全可以用WebSocket收发json吧
不是动不动脑子,这种业务组件根本不该让人写
白用了个http,就是当做饼干罐和 /git/push?url= 那样的子命令微服务吧🥰
直接跟py那样 import fire ,什么http服务器哎,封装为函数路径和调用算了。
就像以前还写什么argparse,哈,完全是样板代码
写过复杂 UI 的人肯定知道要在复杂业务场景里把动画优化到 60 帧有多难
duangsuse:
为什么 shadertoy.com 和 gl-transitions.com 用几行代码就能做到呢? 为什么@3b1b 一个人用py就能实现呢
还不是框架做得烂 https://tttttt.me/dsuse/19124
同意,类型系统不就是对字面和编译期键值的Matcher嘛, 占篇幅纯属过度设计
要是我,直接把 def(a:str) 写成 def(a~"")
现在ui还不是有用gl加速,结果到头来连满挣都做不到,一大堆空洞的class写得还不如numpy的那些公式
如果专业是指「我们必须保留所有历史错误」,我宁可保持饥饿、保持愚蠢
至少,对用字面量取代类型标注上是这样。 泛型也一样啊,写成 a=set() assert{a.add("")} 而非Set[Str]
我有一整个系统来替代现在的OOP和静态类型/编译期计算理论。
你不觉得typescript的类型标注是过度工程吗?作为把sql row 填到forif模板里的一些业务。
他们有这样依赖补齐、检查,完全是因为API的风格太含糊
动态类型只是在运行时能进行修改和(同名符号的)链接,方便元编程。 例如 for: class: 这种结构就是无效的
致胜优点是免编译(交互式编程/所见即所得)、隐式类型!
还有,在生态上,没有被缺乏语意的设计模式(例如序列化和依赖注入 aka with强类型KV:)所绑架
在子类型多态上,未必比得过静态OOP
难以拆箱(栈上分配)本该是一种可以被类型推导消除的副作用
我看到的是有初学者用 Cursor 写出类似字幕搜索的高层应用
编程的工程化,作为限制生产力的繁文缛节,如果只是 make computer happy,理应从人应该学习的部分去掉
例如,javac 用那一套class{}语法定义一个编译期字典,我们应该是做IDE插件去生成样板代码吗??
多少技巧模式是从语言缺陷来的?
狸::
说着要开发效率,用着到处加字段,SQL两百行,不合理拆分接口全部Object返
duangsuse:
还有全部POST :)
这样,其实你完全可以用WebSocket收发json吧
不是动不动脑子,这种业务组件根本不该让人写
白用了个http,就是当做饼干罐和 /git/push?url= 那样的子命令微服务吧🥰
直接跟py那样 import fire ,什么http服务器哎,封装为函数路径和调用算了。
就像以前还写什么argparse,哈,完全是样板代码
#web #js #tencent 小程序 历史 https://www.fxzhihu.com/question/725620450/answer/4183159166
2017年左右,react 🤡搞了个专利事件,让国内各大厂都自研前端框架阿里的 rax,京东 nerv,百度 san,去哪儿 anu 然后 react16 又改回了 MIT
此时,这些框架作者的框架,如果不想彻底死绝,就只有一个选择,那就是小程序
而微信,其实它也是误打误撞,它最初也只是想搞个多webview框架,让h5更像原生一点
至于其他的,性能啥的,都是纯扯谈,这种东西只有 yyx 说得出口
2017年左右,react 🤡搞了个专利事件,让国内各大厂都自研前端框架阿里的 rax,京东 nerv,百度 san,去哪儿 anu 然后 react16 又改回了 MIT
此时,这些框架作者的框架,如果不想彻底死绝,就只有一个选择,那就是小程序
而微信,其实它也是误打误撞,它最初也只是想搞个多webview框架,让h5更像原生一点
至于其他的,性能啥的,都是纯扯谈,这种东西只有 yyx 说得出口
FxZhihu / Fixup Zhihu
已经有 Web 了,为什么国内还有各种小程序,快应用这种畸形的产物? - @伊撒尔 | FxZhihu
2017年左右,react 搞了个专利事件,让国内各大厂都自研前端框架 阿里的 rax,京东 nerv,百度 san,去哪儿 anu,然后我也写了 fre 然后 react16 又改回了 MIT 此时,这些框架作者的框架,如果不想彻底死绝,就只有一个选择,那就是小程序 所以百度基于 san 研发了自己的小程序框架, nerv 团队写了 taro,anu 也写了 nanachi 而我后来也加入携程搞携程自己的小程序框架 是的你没有看错,除了微信以外的小程序,都是国产前端框架…
#recommend #tool #web https://euangoddard.github.io/clipboard2markdown/
https://extractify.zip/ PWA在线解压缩
剪贴板本来就支持富文本,干啥还要整那么多「文章下载器」?
Chrome 的 Reader Mode 屁用没有, 体验还不如 https://webextension.org/listing/chrome-reader-view.html
本来可以用来「带格式复制」的,那帮脚本小子这功能都想不到吗?
https://extractify.zip/ PWA在线解压缩
剪贴板本来就支持富文本,干啥还要整那么多「文章下载器」?
Chrome 的 Reader Mode 屁用没有, 体验还不如 https://webextension.org/listing/chrome-reader-view.html
本来可以用来「带格式复制」的,那帮脚本小子这功能都想不到吗?
webextension.org
Reader View
The 'Reader View' extension is designed to enhance readability by stripping away clutter like buttons, ads, and background images, and by adjusting the text size, contrast, and layout. It uses Mozilla's Readability library to provide a powerful readability…
https://github.com/tuteng/Best-websites-a-programmer-should-visit-zh?tab=readme-ov-file#针对那些想开始一个小的项目但是无从下手的人
#tool awesome list
#dev #learn 公案 zen 入门 https://github.com/ts25504/awesome-koans#:~:text=编程语言的学习也有一种公案形式的学习方法,是我见过的最好的学习一门新的编程语言的方式
重构浣熊 🐿收录的10种流行 #OOP Design Pattern 掩盖了哪些语言特性的缺失 ?
https://refactoring.guru/refactoring/when
https://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html
#web #design 推荐 https://component-party.dev/
https://github.com/RimoChan/match-you/blob/slave/mother.kt :偷偷发给同事启动,他电脑上装好的依赖就会被删掉,然后他就得自己配环境了!..
#tool awesome list
#dev #learn 公案 zen 入门 https://github.com/ts25504/awesome-koans#:~:text=编程语言的学习也有一种公案形式的学习方法,是我见过的最好的学习一门新的编程语言的方式
重构浣熊 🐿收录的10种流行 #OOP Design Pattern 掩盖了哪些语言特性的缺失 ?
https://refactoring.guru/refactoring/when
https://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html
#web #design 推荐 https://component-party.dev/
https://github.com/RimoChan/match-you/blob/slave/mother.kt :偷偷发给同事启动,他电脑上装好的依赖就会被删掉,然后他就得自己配环境了!..
GitHub
GitHub - tuteng/Best-websites-a-programmer-should-visit-zh: 程序员应该访问的最佳网站中文版
程序员应该访问的最佳网站中文版. Contribute to tuteng/Best-websites-a-programmer-should-visit-zh development by creating an account on GitHub.
duangsuse::Echo
纯sdf, 顺手移植了一个给 numpy+tty 花了1小时吧: cv2.open(mode=HSL亮L).降采样为(stty size) mix(256色到" .*#"色) .追加\n列 .光标到(0,0)print 我用了比yes命令内存效能低的join'',但也不打紧 #performance fwrite() 就像CtrlV,要打'y'*500你是粘贴五百次还是多复制、缓冲? 把rows('<U1').buf分隔复制到 int8(w*h+1h),按帧yield给/dev/pts/0管道更省 若一开始就…
看最近几条逆天,我要聊哲学 #CS
操作系统不就是4片3口虚拟化么
时间内存存储程序,网口线口板口 #os #plt #embed #recommend
win,*nix,mac, aosp ios ;哪个不是只有这么点API和差异化 🦄?为了音视频和回应事件弄那么多框架外链新语法,不如3行 #web js。
像 bellard.org 那样的通才终究少数,搞出\0结尾无长度字串,连{}[]{type:}都没建模的libc算什么API啊?在位运算位flag上都被人打败 也配教人数据结构算法? 。 为这撒手掌柜的「千年虫哲学」服务的「编译器和OS」……
"It works"的「千年虫哲学」出现在4byte的13位时间戳、在'\0'结尾的CStr、在argc和snprintf等“最佳实践”、在将'❤️'算作2字符的JS和JVM(UCS-2的伪utf16)、在线程被窄化为while(1);join和各种设备信号的“同步IO”里 —evpoll为何不是默认呢,就因为C没“回调值”,轮询pull>推送onpush? 千年虫在几乎所有让你不分昼夜却不得要领的「术语」里……
时间片sched - 变通while(true)的死机, kotlin/go func 怎么不需要这些? numpy,GL 为啥不需要循环向量化?
内存片vm - 缝补struct{{}} Rc状态树, 缓解(编译期)检查缺位的骇客
存储片fs - 分簇存bytes&CoW复制断电不断写
程序设置依赖片elf,apt,regedt - 硬编码各种rc,ini和/lib/.so.版本 🤮,各发行版树格式不通,make系统ld.so优化一堆,却连 live compile/fatJar/minify 抖树都不懂……
网口tcp,ssh 双管道(socket), pipe闪存读写(等buffer就是等yield)
线口usb 注意方口圆口转接,通用的
主板口pciBus 安卓的dts
>__线程调度内存隔离、文件设备(fat32,ext4,IRQ)、 IP网络和并发工具(IPC,sem,mutex)__
>如果一个人写了线程池或malloc()或ELF文件链接器,声称自己写了操作系统 是可以的(GNU不就是)……
凑以上这些字数干嘛? 时间内存存储程序--片,网线板--口,就这么简单。 把双管道快取翻译成「套接字缓存」是啥逆天专家
OOP封装/多态实际上解决了 libc vm 化进程的问题,JVM,NET只需要查数组或union的越界,没有“syscall给驱动”,因此跨平台,何来segfault?顶多送个内存片swap和热更新热迁移(混合睡眠/分布式fork),做好函数间互相jump; yield(闪存或typed)的“IPC”。
IO? 直接说ip+fs 分片传输吧,检测点击长按、解码HDav到PCM也没见内核态自带啊,外设和性能也不必突破一切皆文件。
ip实际上靠http。纯socket没?args长度没返回MIME类型 ,URL就平替了
ip和sh命令一样,带参数单文件而已。ip还附赠跨语言扁平读写(REST序列化)。 stdout本该可直接 print Blob(bytes,MIME);而stderr是loglevel变量,没意识到这让log4j竖子成名
用过 nc;curl 管道和GET,PUT都知道,http函数模型比sh优秀,实际上WebAPI/py调包远胜于UNIX。PJAX调用/PWA就是一种“上文切换”、IPC、/{etc,usr}软件格式
时间内存存储程序,网口线口板口,4片3口虚拟化 😊
逗号左半,pyjs javacs rust 包括C作者自己写的Go啊 Docker啊,哪个不比libc+Linux强, uv(vs ^CSIGINT或evpoll?) jemalloc(闪存0copy和0flush) psql redis/flatpak
逗号右半,Bun.js ip栈封装; WebUSB; Arduino; 各种图形界面设定,很简洁,一到hwinfo“元数据”就乱搞,像fastjson大师修注入似的。凑字数?给骇客留空间!
包括那个 ld.so 可绕过的chmod +x ,多用户真的比多app容器+人均root有用么? OS竟敢不按devs的喜好来部署。
《程序员的自我修养》大概比较了COFF对象的这几种分支,PE,ELF,甚似于apk。常量池.rodata、全称名mangle、字节码动态链接、菜单图标、自带资源树和签名,比之C++ 对象,不能复制修改,无虚表原型,无双指针框定类型,不线程局部而。
也就是缺个二进制 databind 写冷门硬件的“驱动”,不过那也无所谓,ASN1式的屎山只能像zig那样,自动C2zig
有人说用户态不够,memsafe 后还需要调度器呢。 谁要那个巨无霸4K起步的 struct task/PCB{} 啊,还有上文切换开销。画蛇添足? Lua, 2KGo, NTFS和安卓的FUSE, numpy 真多核……从API从源码开始做优化,删掉无意义的设计模式,四海皆效仿,才配叫编译器和OS!
我半年前1k阅读的稿,也是这样 libC sucks 的观点 https://tttttt.me/dsuse/19854
淫王也这么想 https://www.yinwang.org/blog-cn/2019/08/19/microkernel#:~:text=一个操作系统本应该
操作系统不就是4片3口虚拟化么
时间内存存储程序,网口线口板口 #os #plt #embed #recommend
win,*nix,mac, aosp ios ;哪个不是只有这么点API和差异化 🦄?为了音视频和回应事件弄那么多框架外链新语法,不如3行 #web js。
像 bellard.org 那样的通才终究少数,搞出\0结尾无长度字串,连{}[]{type:}都没建模的libc算什么API啊?在位运算位flag上都被人打败 也配教人数据结构算法? 。 为这撒手掌柜的「千年虫哲学」服务的「编译器和OS」……
"It works"的「千年虫哲学」出现在4byte的13位时间戳、在'\0'结尾的CStr、在argc和snprintf等“最佳实践”、在将'❤️'算作2字符的JS和JVM(UCS-2的伪utf16)、在线程被窄化为while(1);join和各种设备信号的“同步IO”里 —evpoll为何不是默认呢,就因为C没“回调值”,轮询pull>推送onpush? 千年虫在几乎所有让你不分昼夜却不得要领的「术语」里……
时间片sched - 变通while(true)的死机, kotlin/go func 怎么不需要这些? numpy,GL 为啥不需要循环向量化?
内存片vm - 缝补struct{{}} Rc状态树, 缓解(编译期)检查缺位的骇客
enum { A(int) B(str) }, for(i:0~9)a[i], sql select${x}+1, scanf%s
存储片fs - 分簇存bytes&CoW复制断电不断写
程序设置依赖片elf,apt,regedt - 硬编码各种rc,ini和/lib/.so.版本 🤮,各发行版树格式不通,make系统ld.so优化一堆,却连 live compile/fatJar/minify 抖树都不懂……
网口tcp,ssh 双管道(socket), pipe闪存读写(等buffer就是等yield)
线口usb 注意方口圆口转接,通用的
主板口pciBus 安卓的dts
>__线程调度内存隔离、文件设备(fat32,ext4,IRQ)、 IP网络和并发工具(IPC,sem,mutex)__
>如果一个人写了线程池或malloc()或ELF文件链接器,声称自己写了操作系统 是可以的(GNU不就是)……
凑以上这些字数干嘛? 时间内存存储程序--片,网线板--口,就这么简单。 把双管道快取翻译成「套接字缓存」是啥逆天专家
OOP封装/多态实际上解决了 libc vm 化进程的问题,JVM,NET只需要查数组或union的越界,没有“syscall给驱动”,因此跨平台,何来segfault?顶多送个内存片swap和热更新热迁移(混合睡眠/分布式fork),做好函数间互相jump; yield(闪存或typed)的“IPC”。
IO? 直接说ip+fs 分片传输吧,检测点击长按、解码HDav到PCM也没见内核态自带啊,外设和性能也不必突破一切皆文件。
ip实际上靠http。纯socket没?args长度没返回MIME类型 ,URL就平替了
env key=v PATH/git/add-command?k1=v1#.mp4 .wav
; 实现共享ip和sh命令一样,带参数单文件而已。ip还附赠跨语言扁平读写(REST序列化)。 stdout本该可直接 print Blob(bytes,MIME);而stderr是loglevel变量,没意识到这让log4j竖子成名
用过 nc;curl 管道和GET,PUT都知道,http函数模型比sh优秀,实际上WebAPI/py调包远胜于UNIX。PJAX调用/PWA就是一种“上文切换”、IPC、/{etc,usr}软件格式
时间内存存储程序,网口线口板口,4片3口虚拟化 😊
逗号左半,pyjs javacs rust 包括C作者自己写的Go啊 Docker啊,哪个不比libc+Linux强, uv(vs ^CSIGINT或evpoll?) jemalloc(闪存0copy和0flush) psql redis/flatpak
逗号右半,Bun.js ip栈封装; WebUSB; Arduino; 各种图形界面设定,很简洁,一到hwinfo“元数据”就乱搞,像fastjson大师修注入似的。凑字数?给骇客留空间!
包括那个 ld.so 可绕过的chmod +x ,多用户真的比多app容器+人均root有用么? OS竟敢不按devs的喜好来部署。
《程序员的自我修养》大概比较了COFF对象的这几种分支,PE,ELF,甚似于apk。常量池.rodata、全称名mangle、字节码动态链接、菜单图标、自带资源树和签名,比之C++ 对象,不能复制修改,无虚表原型,无双指针框定类型,不线程局部而。
也就是缺个二进制 databind 写冷门硬件的“驱动”,不过那也无所谓,ASN1式的屎山只能像zig那样,自动C2zig
有人说用户态不够,memsafe 后还需要调度器呢。 谁要那个巨无霸4K起步的 struct task/PCB{} 啊,还有上文切换开销。画蛇添足? Lua, 2KGo, NTFS和安卓的FUSE, numpy 真多核……从API从源码开始做优化,删掉无意义的设计模式,四海皆效仿,才配叫编译器和OS!
我半年前1k阅读的稿,也是这样 libC sucks 的观点 https://tttttt.me/dsuse/19854
淫王也这么想 https://www.yinwang.org/blog-cn/2019/08/19/microkernel#:~:text=一个操作系统本应该
❤1🦄1
#life #js #web 独立开发者 < B站娱乐编程主播
>虽然说 wangEditor 没有带来直接收益,但是这中间带来的不管是咨询也好,知名度也好,最终都能反馈到慕课课程、1v1咨询,划水 AI 项目上来。
对于双越老师提到的动辄 1w 的网红服务,希望大家也能自行判别哈。相比之下,如果所谓的提供服务的人,连一些公开的输出都没有,是不值得信任的。
huashuiAI.com 付费开源项目模式的发起,如双越老师自己所说:"和当年做面试课程一样,这又是我的一个创新,全网唯一做线上项目的,且业务复杂、技术难度大"。
链接:https://zhuanlan.fxzhihu.com/p/721026909
就用双越老师自己的年中总结结尾吧:务虚年代,逆风飞翔
>虽然说 wangEditor 没有带来直接收益,但是这中间带来的不管是咨询也好,知名度也好,最终都能反馈到慕课课程、1v1咨询,划水 AI 项目上来。
对于双越老师提到的动辄 1w 的网红服务,希望大家也能自行判别哈。相比之下,如果所谓的提供服务的人,连一些公开的输出都没有,是不值得信任的。
huashuiAI.com 付费开源项目模式的发起,如双越老师自己所说:"和当年做面试课程一样,这又是我的一个创新,全网唯一做线上项目的,且业务复杂、技术难度大"。
链接:https://zhuanlan.fxzhihu.com/p/721026909
就用双越老师自己的年中总结结尾吧:务虚年代,逆风飞翔
FxZhihu / Fixup Zhihu
野生开源已死--聊聊双越老师 | FxZhihu
前端双越老师 ,大名鼎鼎的 wangEditor 作者。而 wangEditor 从v2,v3 到 v4,v5, 到…
最近设计一种跨语言ABI,很苦逼, 没啥灵感, 就评论点文章吧 🙉 #learn #sql #web #design
作者是DBMS的维护者。谈到面向表单+外键的数据库,应该说SQLite的质量很高,它不会是为了过度设计而做的东西,但内存数据库和今天广泛用于 Geo/Vec/全文搜索/timestamp 的Pg方向不同。
而王垠是我同行,他对SQL的观点是:必然要连ORM,Redis这些套子,还不如直接 new $KV_HashMap +loaddump 解决了,反正索引算法都是BTree二分查找嘛,像读写配置文件那样CRUD,比夸张的创造一种RPC协议又套一次要简单
我的态度是,SQL作为API的学习成本很不必要,但从就业率和persist部署一致性的角度-我们还能做什么呢?? LINQ/JSON查询 那样架空SQL是合理的,但对企业应用,还是该有DBaaS的搞法,就像 mount -t 文件系统 有很多竞争者
但是文内还有些我不顺眼的地方,吐槽下……
>肤浅至极,给大家展示什么叫隔行如隔山。
他山之石可以攻玉,DB和OS/PL都是在x86上执行,都是靠算法PGO,说的好像换个SQL语法就爆赞了
>“就是C的struct, 就是指针, 为什么不能RPC”
struct和Row在数据类型上有动静态差异,而且SQL就是基于/tmp/shm的第一个 C RPC
>使用基本的数据结构,其实可以完全的表示关系模型以及被它所“超越”的那些数据模型
<怼:webapp在乎Bw-Tree是怎么实现lock-free的吗?用C写完了请加上一个buffer pool,WAL,disk-backed B Tree,并且写上所有高并发
王垠不该批评SQL这个API被实现为怎么样,SQL明显提供了单app做不到的缓存和事务性安全
new $KV_HashMap +loaddump 很简单,对象存储API很简单,但那并不是DBMS,倒不如说它解决了JVM的性能问题,让人们专注于优化$http.json
曾经嵌入式开发存在一些XML数据库,它们就是干啥啥不行,和JSON存储一样
>只要你有一个程序语言,你就可以发送这语言的代码,到一个“数据服务器”。服务器接受并执行这代码,对数据进行索引,查询和重构,最后返回结果给客户端
>如果你看清了SQL的实质,就会发现这样的“过程式设计”,其实并不会损失SQL的“描述”能力
<恭喜您发明了Spark。但是这怎么解决写入的问题?
unquote为常量(JSON.dump) 啊,他就是在批评SQL过于冗长罢了,其实程序员的工作范围是比Excel操作员高端的,说实话。
SQL存储函数完全能实现Java的中介功能,只不过没有直接暴露:3323:5432到公网的全栈文化罢了,DBaaS只是独立小程序的选择,许多人UAC验证都没做
>数据库的问题哪有那么困难,它其实跟“远过程调用”(RPC)没什么两样
<RPC最著名的问题就是怎么在保证性能的情况下靠近"Exactly Once"的广播call,数据库集群是一定要”Exactly Once“
类似于TCP:发送到Kafka的每批消息将包含一个序列号,该序列号用于重复数据的删除。与TCP不同,序列号将被持久化存储topic中,重启不会影响去重
>数据库系统存储设计的本质是简化以及优化程序和外存储的互动。
IndexDB确实就是更简单的类型化FS,是使用各种存储缓存的另一种范式
>DRAM读写速度大约10-20倍于SSD, 对于HDD更加明显, 硬盘延迟是80倍左右,同一份数据,在读写过程中自然地有多份copy。单独的数据库系统进程的职责就是, 在这样的硬件环境下,保证性能并且保证不会丢失数据。
>数据库的操作在加上transaction以后自带了对于断电等情况的应对,需要相对应加强代码的理论模型
>停电,系统崩溃这种事情不是人能控制的。灾难可以在任何时候发生。就算每次读写都直接走硬盘,写入的操作并不是一次完成的,简单的fprintf()都会发生只改了前缀的情况
谈到冗余备份,就不得不说 Pg VACCUM 语句和各种 &is_deleted=0 了,把笼子删了屎山只会跑得到处都是
不过就缓存&一致性问题,Linux 主流的jfs/bcache即日志文件系统/CoW写前复制 解决的蛮好的,并没有ACID那么复杂
而且说实话,真有人在乎意外断电,缓冲区的数据能不能恢复?(最多是CoW那样冲突留旧) 实时系统和RAID也不敢说啊。 软件层面试图硬抗,很天真
>我写C的时候只告诉电脑要一个变量”int a“,不告诉它要存在内存的哪里,还是放在寄存器里,也不告诉它整数是什么,存几个字节,真是一个不切实际的妄想啊。
>这年头你的数据库不把SQL编译成汇编都不好意思出去和人打招呼。
王垠对SQL的批评是,它太难配置了: [].mapNotNull() 或者简单的forif{},换成DB连接就有一大堆的麻烦的设计模式,而且SQL的数据类型(utf8mb4?)甚至语句/模板API,可以说设计得非常低级,让人欲吐不能,所以才有ORM和MVC框架的事情
基于解构匹配通配符的 Prolog 才是真正的SQL,但SQL的巧妙也确实是在有各种插件去 CREATE INDEX ,但这仍不涉及可推荐「共同好友」的图数据库
至于准备语句的JIT,恐怕也就是 template interpret 这种把switch(op[i]){case:}拼成汇编的低级玩法了,在单层for if 的SQL查询里这种内联汇编根本无关于算法优化。 PrologVM做过一样的蠢事
>由于“行”只能有固定的宽度,所以导致了你没法在里面放进任何“变长”的对象,tag数组,项目union都不行,A.B非得让B转90度竖过来,查两次
<normalization在很多情况下更高效(多个A的值指向同一个B, B表加一列等等)。
<如果是嵌套数组的,那么不止B的foreign key,A整个行的字符串都要重复好几次嵌套进去。更加不要说update的惊群效应,性能反而低
<Vertica是使用SQL的RDBMS。Column-Store诞生是为了更有效地解决大数据分析的问题(OLAP workloads),节省硬盘I/O(就是所谓列压缩),运用SIMD等等。不知道这和逃脱SQL有什么关系。
struct和Row在数据类型上有动静态差异,但确实很少有人利用动态table,这需要架构师学习
这方面王垠demo做少了, 比如 post.tags[], user.badges,.fo 确实应该单独立表,这样才能join查询。 json()数组这种存法,作为语法糖就够了,它不关系
你只是显示tags/fo数,没时间线什么的? 意识不到关系式数据库为啥「关系式」, 据说Q群就是1群1Table,就该这么用
列存储显然只是一种类似gzip的自动压缩,并不能优化双向索引
>数组需要一个字段来表示它的长度N,剩下的空间用来依次保存每一个元素,这样你只需要一个key就可以找到数组里所有的元素,而不需要把key重复N遍。
<把字典压缩理解错了?把run-length压缩理解错了?这怎么解决变长问题?
(Ary){u32 N; u8* bytes[N]} 可以解决str分配问题,如果DB有个常量池的话,套一层指针对缓存也好
>每一个“foreign key”,其实就是一个指针
>每一个join操作,本质上就是对指针的“批量访问”,找到它所指向的对象
<数据库里的foreign key不是pointer。数据库经常需要把数据更换位置来解决存储碎片化的问题,不可能用pointer来实现这个
<Join是由数据库查询优化器(Query Optimizer)来决定的,基础的算法就有nested-loop join, sort-merge join, hash-join等好几种,也会有用索引和不用索引,甚至半用索引
这就是你有所不知,bumpptr GC 全都有指针引用计数组,可以在某段页面清空后,通过memmove(to)并更新xref消除内存碎片,而不malloc
这就是为啥JVM/Lua的FFI都存在 Un?Pin(Object) ,foreign key不是pointer, 可托管内存同样不是pointer!
SELECT student.name, record.id, record.city
FROM student, record
WHERE Student.id < Record.id ;
^ 这样的join不离谱吗?我在Gitea里只见过 LEFT JOIN id=id ,还是王垠有理,SQL弱
总的来说,王垠对SQL的批评主要是流行语言的DB.API都太拉垮,私货满满了(包括ORM和KV/对象存储、配置读写等等),
他这么一说好像算法都差不多,每个app单 import db_impl 甚至json就省力气了,其实忽略了mapNotNull函数不能解决的:动态索引join、缓存和事务性安全、async并发的问题。
用FP的写法join和反查你是要写两行甚至加变量的,SQL只需prepare(fn).bind(arg)! 😅
最重要的是,C时代还不存在stdlib里有KV/ListGC算法甚至统一row格式的便利性,而那时就有json持久化和join查询需求了。就像 UNIX getent hosts , 这还是只读数据库
我觉得如果要优化,也是把 @data class 和 [x for x in if] DSL扩充下(groupBy,sort,page啥的),翻译到SQL连接上更合理,虽然数据库还涉及ABI兼容性(schema rollup)等运营日程,但Docker式DX至上DevOps的思路是正确的
作者是DBMS的维护者。谈到面向表单+外键的数据库,应该说SQLite的质量很高,它不会是为了过度设计而做的东西,但内存数据库和今天广泛用于 Geo/Vec/全文搜索/timestamp 的Pg方向不同。
而王垠是我同行,他对SQL的观点是:必然要连ORM,Redis这些套子,还不如直接 new $KV_HashMap +loaddump 解决了,反正索引算法都是BTree二分查找嘛,像读写配置文件那样CRUD,比夸张的创造一种RPC协议又套一次要简单
我的态度是,SQL作为API的学习成本很不必要,但从就业率和persist部署一致性的角度-我们还能做什么呢?? LINQ/JSON查询 那样架空SQL是合理的,但对企业应用,还是该有DBaaS的搞法,就像 mount -t 文件系统 有很多竞争者
但是文内还有些我不顺眼的地方,吐槽下……
>肤浅至极,给大家展示什么叫隔行如隔山。
他山之石可以攻玉,DB和OS/PL都是在x86上执行,都是靠算法PGO,说的好像换个SQL语法就爆赞了
>“就是C的struct, 就是指针, 为什么不能RPC”
struct和Row在数据类型上有动静态差异,而且SQL就是基于/tmp/shm的第一个 C RPC
>使用基本的数据结构,其实可以完全的表示关系模型以及被它所“超越”的那些数据模型
<怼:webapp在乎Bw-Tree是怎么实现lock-free的吗?用C写完了请加上一个buffer pool,WAL,disk-backed B Tree,并且写上所有高并发
王垠不该批评SQL这个API被实现为怎么样,SQL明显提供了单app做不到的缓存和事务性安全
new $KV_HashMap +loaddump 很简单,对象存储API很简单,但那并不是DBMS,倒不如说它解决了JVM的性能问题,让人们专注于优化$http.json
曾经嵌入式开发存在一些XML数据库,它们就是干啥啥不行,和JSON存储一样
>只要你有一个程序语言,你就可以发送这语言的代码,到一个“数据服务器”。服务器接受并执行这代码,对数据进行索引,查询和重构,最后返回结果给客户端
>如果你看清了SQL的实质,就会发现这样的“过程式设计”,其实并不会损失SQL的“描述”能力
<恭喜您发明了Spark。但是这怎么解决写入的问题?
unquote为常量(JSON.dump) 啊,他就是在批评SQL过于冗长罢了,其实程序员的工作范围是比Excel操作员高端的,说实话。
SQL存储函数完全能实现Java的中介功能,只不过没有直接暴露:3323:5432到公网的全栈文化罢了,DBaaS只是独立小程序的选择,许多人UAC验证都没做
>数据库的问题哪有那么困难,它其实跟“远过程调用”(RPC)没什么两样
<RPC最著名的问题就是怎么在保证性能的情况下靠近"Exactly Once"的广播call,数据库集群是一定要”Exactly Once“
类似于TCP:发送到Kafka的每批消息将包含一个序列号,该序列号用于重复数据的删除。与TCP不同,序列号将被持久化存储topic中,重启不会影响去重
>数据库系统存储设计的本质是简化以及优化程序和外存储的互动。
IndexDB确实就是更简单的类型化FS,是使用各种存储缓存的另一种范式
>DRAM读写速度大约10-20倍于SSD, 对于HDD更加明显, 硬盘延迟是80倍左右,同一份数据,在读写过程中自然地有多份copy。单独的数据库系统进程的职责就是, 在这样的硬件环境下,保证性能并且保证不会丢失数据。
>数据库的操作在加上transaction以后自带了对于断电等情况的应对,需要相对应加强代码的理论模型
>停电,系统崩溃这种事情不是人能控制的。灾难可以在任何时候发生。就算每次读写都直接走硬盘,写入的操作并不是一次完成的,简单的fprintf()都会发生只改了前缀的情况
谈到冗余备份,就不得不说 Pg VACCUM 语句和各种 &is_deleted=0 了,把笼子删了屎山只会跑得到处都是
不过就缓存&一致性问题,Linux 主流的jfs/bcache即日志文件系统/CoW写前复制 解决的蛮好的,并没有ACID那么复杂
而且说实话,真有人在乎意外断电,缓冲区的数据能不能恢复?(最多是CoW那样冲突留旧) 实时系统和RAID也不敢说啊。 软件层面试图硬抗,很天真
>我写C的时候只告诉电脑要一个变量”int a“,不告诉它要存在内存的哪里,还是放在寄存器里,也不告诉它整数是什么,存几个字节,真是一个不切实际的妄想啊。
>这年头你的数据库不把SQL编译成汇编都不好意思出去和人打招呼。
王垠对SQL的批评是,它太难配置了: [].mapNotNull() 或者简单的forif{},换成DB连接就有一大堆的麻烦的设计模式,而且SQL的数据类型(utf8mb4?)甚至语句/模板API,可以说设计得非常低级,让人欲吐不能,所以才有ORM和MVC框架的事情
基于解构匹配通配符的 Prolog 才是真正的SQL,但SQL的巧妙也确实是在有各种插件去 CREATE INDEX ,但这仍不涉及可推荐「共同好友」的图数据库
至于准备语句的JIT,恐怕也就是 template interpret 这种把switch(op[i]){case:}拼成汇编的低级玩法了,在单层for if 的SQL查询里这种内联汇编根本无关于算法优化。 PrologVM做过一样的蠢事
>由于“行”只能有固定的宽度,所以导致了你没法在里面放进任何“变长”的对象,tag数组,项目union都不行,A.B非得让B转90度竖过来,查两次
<normalization在很多情况下更高效(多个A的值指向同一个B, B表加一列等等)。
<如果是嵌套数组的,那么不止B的foreign key,A整个行的字符串都要重复好几次嵌套进去。更加不要说update的惊群效应,性能反而低
<Vertica是使用SQL的RDBMS。Column-Store诞生是为了更有效地解决大数据分析的问题(OLAP workloads),节省硬盘I/O(就是所谓列压缩),运用SIMD等等。不知道这和逃脱SQL有什么关系。
struct和Row在数据类型上有动静态差异,但确实很少有人利用动态table,这需要架构师学习
这方面王垠demo做少了, 比如 post.tags[], user.badges,.fo 确实应该单独立表,这样才能join查询。 json()数组这种存法,作为语法糖就够了,它不关系
你只是显示tags/fo数,没时间线什么的? 意识不到关系式数据库为啥「关系式」, 据说Q群就是1群1Table,就该这么用
列存储显然只是一种类似gzip的自动压缩,并不能优化双向索引
>数组需要一个字段来表示它的长度N,剩下的空间用来依次保存每一个元素,这样你只需要一个key就可以找到数组里所有的元素,而不需要把key重复N遍。
<把字典压缩理解错了?把run-length压缩理解错了?这怎么解决变长问题?
(Ary){u32 N; u8* bytes[N]} 可以解决str分配问题,如果DB有个常量池的话,套一层指针对缓存也好
>每一个“foreign key”,其实就是一个指针
>每一个join操作,本质上就是对指针的“批量访问”,找到它所指向的对象
<数据库里的foreign key不是pointer。数据库经常需要把数据更换位置来解决存储碎片化的问题,不可能用pointer来实现这个
<Join是由数据库查询优化器(Query Optimizer)来决定的,基础的算法就有nested-loop join, sort-merge join, hash-join等好几种,也会有用索引和不用索引,甚至半用索引
这就是你有所不知,bumpptr GC 全都有指针引用计数组,可以在某段页面清空后,通过memmove(to)并更新xref消除内存碎片,而不malloc
这就是为啥JVM/Lua的FFI都存在 Un?Pin(Object) ,foreign key不是pointer, 可托管内存同样不是pointer!
SELECT student.name, record.id, record.city
FROM student, record
WHERE Student.id < Record.id ;
^ 这样的join不离谱吗?我在Gitea里只见过 LEFT JOIN id=id ,还是王垠有理,SQL弱
总的来说,王垠对SQL的批评主要是流行语言的DB.API都太拉垮,私货满满了(包括ORM和KV/对象存储、配置读写等等),
他这么一说好像算法都差不多,每个app单 import db_impl 甚至json就省力气了,其实忽略了mapNotNull函数不能解决的:动态索引join、缓存和事务性安全、async并发的问题。
用FP的写法join和反查你是要写两行甚至加变量的,SQL只需prepare(fn).bind(arg)! 😅
最重要的是,C时代还不存在stdlib里有KV/ListGC算法甚至统一row格式的便利性,而那时就有json持久化和join查询需求了。就像 UNIX getent hosts , 这还是只读数据库
我觉得如果要优化,也是把 @data class 和 [x for x in if] DSL扩充下(groupBy,sort,page啥的),翻译到SQL连接上更合理,虽然数据库还涉及ABI兼容性(schema rollup)等运营日程,但Docker式DX至上DevOps的思路是正确的
👎1
duangsuse::Echo
最近设计一种跨语言ABI,很苦逼, 没啥灵感, 就评论点文章吧 🙉 #learn #sql #web #design 作者是DBMS的维护者。谈到面向表单+外键的数据库,应该说SQLite的质量很高,它不会是为了过度设计而做的东西,但内存数据库和今天广泛用于 Geo/Vec/全文搜索/timestamp 的Pg方向不同。 而王垠是我同行,他对SQL的观点是:必然要连ORM,Redis这些套子,还不如直接 new $KV_HashMap +loaddump 解决了,反正索引算法都是BTree二分查找嘛,…
结合上面一条看…… 啊,王垠说的挺对啊, UNIX 这个libc实现,是历史的倒退, 今天谈啥函数式、非阻塞(异步)、用户态驱动与 eBPF、Docker 部署、systemd ……
其实CDEF ABI 的设计错误就挺多的。 Object 是 .so 内存N:1映射, main() 要自己解析 argv env和ports 不统一, stdio和socket(同为双管道)接口不一致, 没有考虑UIUX所需的用户态驱动或者SELinux那样对root接口的细分。 大家好不容易hack过了,拿mainloop去写app,结果造成了 yield vs return 的染色问题……
就拿 setTimeout/curl 这些阻塞IO说吧,如果键鼠框架独立于主线程,通过 read() write() 这些线程(C协程)断续点等UX或IO结果,GCC 再支持个堆回调,是不存在需要管理Dispatcher的API的, 都怪UNIX没有考虑UI框架、线程池同步、事件批量监听! #web 与之相比真是太成熟了,无远弗届。
如果把 mmap加载( .so ) 当作是 new Object 呢,你会发现根本没有线程全局冲突的问题,也根本不该有import模块化和PLT hook 的问题, 新线程,就是OS把 __thread var 块的原型链设为.so ,然后补齐几个imported回调 ,pthread 本来就不该和 C++ new 有区别,别提那个和YaCC一样弱智的fork()了,程序员的傲慢而已,煤球用。 https://m4tsuri.io/2020/10/18/glibc-tls/
在Lua和JS里, 同样的事用 mod=( privateVar=1)=> ({exports}) 也能解决。
Linux 真就是一个劣化的JVM ,它的本意是支持
更别提许多C项目那个人机 ./configure 了,比Gradle还慢,这是因为它每次都检查你是否在用gcc或llvm以外的编译器打包!?
现在好了,都在给UNIX哲学擦屁股啊, 说的道理太多了, 都忘记业务本身有多浅显了,哈
其实CDEF ABI 的设计错误就挺多的。 Object 是 .so 内存N:1映射, main() 要自己解析 argv env和ports 不统一, stdio和socket(同为双管道)接口不一致, 没有考虑UIUX所需的用户态驱动或者SELinux那样对root接口的细分。 大家好不容易hack过了,拿mainloop去写app,结果造成了 yield vs return 的染色问题……
就拿 setTimeout/curl 这些阻塞IO说吧,如果键鼠框架独立于主线程,通过 read() write() 这些线程(C协程)断续点等UX或IO结果,GCC 再支持个堆回调,是不存在需要管理Dispatcher的API的, 都怪UNIX没有考虑UI框架、线程池同步、事件批量监听! #web 与之相比真是太成熟了,无远弗届。
如果把 mmap加载( .so ) 当作是 new Object 呢,你会发现根本没有线程全局冲突的问题,也根本不该有import模块化和PLT hook 的问题, 新线程,就是OS把 __thread var 块的原型链设为.so ,然后补齐几个imported回调 ,pthread 本来就不该和 C++ new 有区别,别提那个和YaCC一样弱智的fork()了,程序员的傲慢而已,煤球用。 https://m4tsuri.io/2020/10/18/glibc-tls/
在Lua和JS里, 同样的事用 mod=( privateVar=1)=> ({exports}) 也能解决。
Linux 真就是一个劣化的JVM ,它的本意是支持
new wtf.c .so({staticsCoW})
这样「面向PATH里的对象」,ELF即class, .text .bss rbp 堆/栈/常量池段分得好好的? 却认识不到这只是对OOP的拙劣模仿, __thread ABI 创建更显得OSdev们没点复用意识,没突破UNIX的烂尾楼更别提许多C项目那个人机 ./configure 了,比Gradle还慢,这是因为它每次都检查你是否在用gcc或llvm以外的编译器打包!?
现在好了,都在给UNIX哲学擦屁股啊, 说的道理太多了, 都忘记业务本身有多浅显了,哈
m4tsuri.io
Glibc TLS的实现与利用 | M4tsuri's Blog
https://x.com/JamesGoong/status/1902513306423980537 #web #经济 最看不起这种了不起划转一个数字, 就收大量手续费担保费的中介机构
Web3 就差一个跨平台跨端API,就能把这些两头吃,到处填表格跑断腿的玩意打成渣
把所有KYC要求全部丢给商户, 自己两头不讨好,用户体验差别就像什么呢? 像 OpenAI vs OpenRouter.ai
真不知道为了运行这种天怒人怨的合规性,追回了几笔诈资黑钱呢??
Web3 就差一个跨平台跨端API,就能把这些两头吃,到处填表格跑断腿的玩意打成渣
把所有KYC要求全部丢给商户, 自己两头不讨好,用户体验差别就像什么呢? 像 OpenAI vs OpenRouter.ai
真不知道为了运行这种天怒人怨的合规性,追回了几笔诈资黑钱呢??
X (formerly Twitter)
在悉尼和稀泥 (@JamesGoong) on X
在今年 6 月 17 号之后,Stripe 每收到一笔 dispute(争议性付款)后,商家除了要支付 15 美金的费用外,如果有异议,还要额外再付 15 美金,最后如果赢了会退还这 15 美金。
也就是说,如果现在有 fraud 用黑卡刷了你的服务,或者哪怕是一些 SB 用户付完钱后直接 dispute。你就要付 30 美金,且里面
也就是说,如果现在有 fraud 用黑卡刷了你的服务,或者哪怕是一些 SB 用户付完钱后直接 dispute。你就要付 30 美金,且里面
#web #security #js 前端打架
pg 大哥写了个总结!
https://mp.weixin.qq.com/s/1jjBMe525CtDaq1XrDztHQ
事的起因很简单:Next.js 出了个非常幽默的高危漏洞,一旦被利用,就相当于给小偷留了后门,直接绕过登录做想做的事。Vercel 作为 Next.js 的金主爸爸,刚被推上“欠解释、缺修复”的风口浪尖,Cloudflare 这边就先拿出补丁,摆出一副“我先替你们收拾烂摊子”的姿态。
还在 X 上抛出几句酸溜溜的嘲讽。就像一个隔壁大哥突然跑到你家门口说:“房顶漏了,我给你搭好防水布啦。对了,你们家装修可真够脆弱的嘛。” 这搁谁家听了,不恼也难。
pg 大哥写了个总结!
https://mp.weixin.qq.com/s/1jjBMe525CtDaq1XrDztHQ
事的起因很简单:Next.js 出了个非常幽默的高危漏洞,一旦被利用,就相当于给小偷留了后门,直接绕过登录做想做的事。Vercel 作为 Next.js 的金主爸爸,刚被推上“欠解释、缺修复”的风口浪尖,Cloudflare 这边就先拿出补丁,摆出一副“我先替你们收拾烂摊子”的姿态。
还在 X 上抛出几句酸溜溜的嘲讽。就像一个隔壁大哥突然跑到你家门口说:“房顶漏了,我给你搭好防水布啦。对了,你们家装修可真够脆弱的嘛。” 这搁谁家听了,不恼也难。
你知道吗? #tg #web 使用了一种 自制编程语言(TL) 定义 MTProto ,后者 涵盖和HTTP一样广,但是TL语言的长难句多的如同梦呓…… 看起来它是优化ASN.1但是失败了 😅
TL里每个类型的修订版本,都有一个hash,甚至于 bool null list 都有,只是从来不变……
和REST一样,TL也有把dict读取作函数调用的方法,这时 blob.(type) 是远程方法ID
如果仔细了解下 Telegram Core 的开源信息,你就会知道为什么Signal不如它的一根毛了, 这都是什么绝绝子程序员啊😅
我不得不吐槽,这命名都是什么鸟语; 但也可以说,如果tg开发者连学术都不会,没有能力重造轮子, Telegram 生态也不会如此独一份了
就不说大家每天都在用的IV和TON平台了,官网上写了 Web&Linux 客户端的都是神人, Durov 的这个和 酷安 比,那酷安不是没法比。 技术上,资本上,云计算格局上,比不了鹅爹。😅
谁懂老杜的含金量啊, 无论如何,这确实是一个尊重技术的 instant messaging 龙头
https://core.telegram.org/schema#Layer2
https://core.telegram.org/mtproto/serialize#polymorphic-type-constructors
TL里每个类型的修订版本,都有一个hash,甚至于 bool null list 都有,只是从来不变……
和REST一样,TL也有把dict读取作函数调用的方法,这时 blob.(type) 是远程方法ID
如果仔细了解下 Telegram Core 的开源信息,你就会知道为什么Signal不如它的一根毛了, 这都是什么绝绝子程序员啊
我不得不吐槽,这命名都是什么鸟语; 但也可以说,如果tg开发者连学术都不会,没有能力重造轮子, Telegram 生态也不会如此独一份了
Telegram delivers messages faster than any other application.
Telegram has an open API and source code free for everyone.
Telegram lets you completely customize your messenger. (主题系统甚至 90% 用户都没在用,散户程序员都无力开发)
https://instantview.telegram.org/
就不说大家每天都在用的IV和TON平台了,官网上写了 Web&Linux 客户端的都是神人, Durov 的这个和 酷安 比,那酷安不是没法比。 技术上,资本上,云计算格局上,比不了鹅爹。
谁懂老杜的含金量啊, 无论如何,这确实是一个尊重技术的 instant messaging 龙头
https://core.telegram.org/schema#Layer2
https://core.telegram.org/mtproto/serialize#polymorphic-type-constructors
Please open Telegram to view this post
VIEW IN TELEGRAM
Instant View Platform
Instant Views Explained
Instant View allows Telegram users to view articles from around the Web in a consistent way, with zero loading time. When you get a link to an article via Telegram, simply tap the Instant View button, and the page will open instantly.
duangsuse::Echo
让我觉得匪夷所思的是, FRP 脚本有很多,但基本都是拿到地址就(可以公网)测试了,就像你只是调用了一下curl而已 Linux hostnamectl 这个特性,似乎是可有可无的,存在感比蓝牙设备名还低 这就像一些 http/ftp-server 测试服务,启动后不会 print URL 句柄,要你根据port去猜 当我封装CF的公网tunnel时,理所当然就把此服务封装成 $HOSTNAME 了,回头一看我居然是异类。 😅 twistd -n ftp -r . python -m pyftpdlib…
#web #dev 这个真是懒得喷。 我理解的REST(可表达状态转移, 😅 😅
就是 db.GET PUT json, 加上过滤排序分页, 或许有些 /user/:id/follow 的页面可以手写下,也可能直接套模板生成(哪个平台没有一堆“收藏夹”啊..)
这种RPC当然毫无价值,类似于把本地存储换到线上,只是加个鉴权和双向搜索罢了,查重率100% 我是懒得手写的, GraphQL.org 也封装的明明白白。
我觉得奇怪的是,哪怕是在PyJS的全栈框架里, 我说的这种REST,对 BlogComment, Todos, PetShop 等基础CMS样板也没法做成和Excel一样简单; 那些淘宝上卖的(开源投自制) 也都没有重用重构的价值
这篇文章在替发明REST这个「高端概念」的大佬,抱怨工程师们什么呢? 是 HateoAS (讨厌OpenAPIs?? ) 没人玩。😅
也不是讨厌,是用res.body XML上的nullable函数超链接,表示“用户有没有登录” “用户能不能删贴”,来「方便App跨版本」 等等,比SOAP好一点
这不是废话么?? 这都2025了还有人把活爹.XML(schema)当个宝呢。 你说说Java里怎么生成 OPTIONS / 啊? 有了 HATEOAS 接口,在JS里免client lib 直接调用的DX体验怎么样??
没有TG自己造传输层协议的能力,还抱怨工程上restful的理解了RESTful, 那比你强的就是懒得为REST这种高度自限性的RPC写框架,早自己玩更好的去了; 比你菜的又只会CRUD,最多拿 http/module/:pathArg 优化下可读性,对接下SQL或jsonKV, 你让他区分个 GET/POST 都懒
可不是被滥用和误解嘛, 纯属活该,自己不开发在那边画饼…… 你有没有意识到, api.x.com/OpenAPI.json 就是所谓的REST、免文档、自动发现函数、解耦合?
Java codegen 都没写过是怎么敢设计这种协议范式的? 不对,看他们 content-type 都要改成 vnd.XX.User+json 我就觉得这是 #ts 写上瘾了。 知不知道 fetch() 不能自动判定body类型,还要手动.json()一下……
如果你真能生成并用 OPTIONS /:type/:id 调用动态方法,那要http就没意义了(本质上是js rpc),所谓超文本又体现在哪。
我都可以给REST/HATEOAS重构成工程界可以接受的样子, 但我不会用单请求单响应。🙉
http方法本身也是烂梗, POST就是有body的GET,DELETE就是空body的POST, jQuery 里一直是这样重载的,十年了不见跨语言一点。 POST的“同名时冲突” 也是很脑残的约定,很多人只是为了在body里放文件上传一下, 根本就不该禁止,填写表格时多次检查。
🤡 https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
ps. 我是真的写过API生成的 https://github.com/duangsuse-valid-projects/GeekSpec-GeekApkv1.0b
SOAP砖家: https://coolshell.cn/articles/3585.html
curl https://wtf = count: x=>x+1
) 是什么? 就是 db.GET PUT json, 加上过滤排序分页, 或许有些 /user/:id/follow 的页面可以手写下,也可能直接套模板生成(哪个平台没有一堆“收藏夹”啊..)
这种RPC当然毫无价值,类似于把本地存储换到线上,只是加个鉴权和双向搜索罢了,查重率100% 我是懒得手写的, GraphQL.org 也封装的明明白白。
我觉得奇怪的是,哪怕是在PyJS的全栈框架里, 我说的这种REST,对 BlogComment, Todos, PetShop 等基础CMS样板也没法做成和Excel一样简单; 那些淘宝上卖的(开源投自制) 也都没有重用重构的价值
这篇文章在替发明REST这个「高端概念」的大佬,抱怨工程师们什么呢? 是 HateoAS (讨厌OpenAPIs?? ) 没人玩。
也不是讨厌,是用res.body XML上的nullable函数超链接,表示“用户有没有登录” “用户能不能删贴”,来「方便App跨版本」 等等,比SOAP好一点
这不是废话么?? 这都2025了还有人把活爹.XML(schema)当个宝呢。 你说说Java里怎么生成 OPTIONS / 啊? 有了 HATEOAS 接口,在JS里免client lib 直接调用的DX体验怎么样??
没有TG自己造传输层协议的能力,还抱怨工程上restful的理解了RESTful, 那比你强的就是懒得为REST这种高度自限性的RPC写框架,早自己玩更好的去了; 比你菜的又只会CRUD,最多拿 http/module/:pathArg 优化下可读性,对接下SQL或jsonKV, 你让他区分个 GET/POST 都懒
可不是被滥用和误解嘛, 纯属活该,自己不开发在那边画饼…… 你有没有意识到, api.x.com/OpenAPI.json 就是所谓的REST、免文档、自动发现函数、解耦合?
Java codegen 都没写过是怎么敢设计这种协议范式的? 不对,看他们 content-type 都要改成 vnd.XX.User+json 我就觉得这是 #ts 写上瘾了。 知不知道 fetch() 不能自动判定body类型,还要手动.json()一下……
如果你真能生成并用 OPTIONS /:type/:id 调用动态方法,那要http就没意义了(本质上是js rpc),所谓超文本又体现在哪。
我都可以给REST/HATEOAS重构成工程界可以接受的样子, 但我不会用单请求单响应。🙉
http方法本身也是烂梗, POST就是有body的GET,DELETE就是空body的POST, jQuery 里一直是这样重载的,十年了不见跨语言一点。 POST的“同名时冲突” 也是很脑残的约定,很多人只是为了在body里放文件上传一下, 根本就不该禁止,填写表格时多次检查。
🤡 https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
ps. 我是真的写过API生成的 https://github.com/duangsuse-valid-projects/GeekSpec-GeekApkv1.0b
SOAP砖家: https://coolshell.cn/articles/3585.html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2