duangsuse::Echo
413 subscribers
3.85K photos
105 videos
574 files
5.15K links
duangsuse技术相干订阅
这是 @duangsuse 与技术有关的发布频道
duangsuse 的另外有 throws 闲杂频道
@dsuset
转载频道 @dsusep
duangsuse 有coding,github,gitlab帐号和bilibili帐号

极小可能会有批评zf的消息 如有不适可以退出

suse的小站:https://piped.stream
ps 另有别名 popf.rip
ʕ•̀ω•́ʔ✧ 🐶🍎🏠生死🐜
(>ω<)岂因祸福避趋之 一鿕
Download Telegram
duangsuse::Echo
#js #lib #listing #gui https://editor.datatables.net/generator/ 🤔 想起了 #Qt Model/View 的 delegate 和 createEditor 什么的... 但其实从 row 建立可搜索、可排序、可编辑的 table 并不需要那么多名词吧 https://github.com/fiduswriter/Simple-DataTables 嘛,虽说是 lightweight ,其实连 Date format 都支持... htt…
Clusterize 那个真的不能再小了,才 300 行,大部分精力在做 interactive doc 上吧(这个 doc 也算是很有效了
当然 search, keep <thead> 什么的 还有固定大小 table-layout:fixed 要特殊处理
然后 #CSS counter (内部文本: 数数) 总结下咋支持的: content_elem.style['counter-increment'] = 'clusterize-counter ' + (data.rows_above-1); 这么说 rows_above 始终不为 [] 了..? 应该 把索引0映射到&chunk[0]这样
https://cdn.jsdelivr.net/npm/clusterize.js@0.18.1/clusterize.js
https://cdn.jsdelivr.net/npm/clusterize.js@0.18.1/clusterize.css 只有几条规则而已 魔改者最多只需覆盖1条

#js #ce 还支持 https://developers.google.com/closure/compiler 🤔 不知道这玩意会不会 inline constexpr (肯定不会
https://cdn.jsdelivr.net/npm/clusterize.js@0.18.1/externs.js 如果连 API 都要库作者手写的话,首先设计就有问题, Proguard 不需要

#DontKnow event delegation... scroller 覆盖了控件树,还是需要 delegate 才能听见吗
document.getElementById('contentElemId').onclick = function(e) {
e = e || event;
var target = e.target || e.srcElement;
if(target.nodeName != 'TR') return;
// do stuff with row
}

$('#contentElemId').on('click', 'tr', function() {})
JQuery 也是比较成功, DOM 都封装好了而且支持 IE
#recommend #design #css #drawing 很值得思考的重构🤔
本来只是想复用 CSS anim 的 time function 乃至 scheduler (当然不可能)
看来挖到宝了
https://1stwebdesigner.com/15-fun-and-inspiring-examples-of-css-animation/
https://mzh.moegirl.org.cn/LexBurner

(狭隘的个人观点)感觉 SCSS 和 LESS 好废啊…… 就只有这些基础功能吗,比 CPP 好一点而已啊 SCSS 一个 $var: def 一个 for $i from 0 through n {} 语法贼奇怪

而且还有人在用 -webkit-keyframes ,明明都在用 SCSS 了,是嫌代码不够长
#math 如果你要在终端展示图片(RGB亮度->灰度),就需要将稠密的浮点切成区间编号。 绿 floor(x*a)/a 在a=2 时将0~1切成2份,a=10 相当于保留1位小数(1.0内含10阶),而 红 round 会切成4份,即数组a. a[floor(v*n(a) )]
#CSS #web 提供了 #rgb , #rrggbbaargb(255,.) ,以及 hsl(Hdeg S%L%) 扇形选色方式,注意这不是冷知识.. color picker 都支持按色相、饱和、亮度选色, backdrop-filter:hue-rotate(1deg) 也是有的
CSS1 仅支持VGA颜色,后来有了 X11-SVG 标准色集
CSS4 支持 rgba(r g b /a) 空格格式和浮点数

相比之下,弱鸡的 #Java AWT 和 #Python PIL 就没有简单、统一可玩的API ,awt 只有光谱 CIE XYZ 这样低层的概念, getHSBColor 和又能大写又能小写的 static RED 这些……emm

#cg 在「擦拭」位图A->B渐变里,t=0~1 , 当前帧=(1-t)A+tB ;先绘制A, 再以 mask(t) 叠上B
遮罩mask 内最黑的部分代表B最先出现部分,随着t递增 所有像素渐变到B

柔和度=0 时 mask 内只有0,1 二态,所以AB中间的线(如果mask=横向渐变)很锐利
=1 时会用尽alpha色域(一般256色)渐变
duangsuse::Echo
http://tridiv.com/ 用 CSS + HTML 画三维物体的可视化编辑器。 你们……CSS 上脑的人好可怕……
#DontKnow 一如既往的Y-up 座标系(左手比枪xy, 中指z) 。 原来向y旋转是要改变x角度吗..向z旋转要改变y, 角度z 就是相对x了,对横长方体不明显..

正方体有6面,十字架展开 tp lt ft rt 凸字形:最上=顶面, bm bk 底和后,相信类似3D盒动画大家见过 --_- 。它们的 #CSS transform:
rotateX(90deg) translateY(-50%)
rotateY(90deg) translateX(-50%)
translateZ(2em)
rotateY(-90deg) translateX(-50%)
rotateX(-90deg) translateY(-50%)
translateZ(-2em) rotateY(180deg)
顶底(i=0,-2) 的角度是对应的,轴=X
前后(2,-1) 移动轴=Z —只是前后次序
左右(1,-3) 轴=Y

当你正面(xy)正方体,它可以在X/Y=横纵 距一个外点旋转(xy位置改变),Z 就是四方本身的倾斜度
X不是横向旋转,而是“所有点绕X轴转”

然后通过 rt-lt{width} bk-ft{} 这些调参

它给每个对象创建CSS .cub-19 .face 我最佩服的..
https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d()
https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Advanced_animations
woc, Moz 这太厉害了,加速率弹球动画、alpha拖影合成,还包含位图处理,不愧是最知名的MDN啊,还有一个500行(上面 Java 版本)的渲染器 raycaster !太牛了吧,而且也提到了 ZIM和P5.js ,梦幻联动

为啥动苏喜欢画图呢 🤔 因为图形里有许多参数是可以抽提比率增减的。尽管看起来很傻(用矢量图软件更好 没啥意义),却非常放松。

#css ninepatch 边角吗.. https://css-tricks.com/almanac/properties/b/border-image/ 虽然很可爱但莫名有点土 😂
https://caniuse.com/css-snappoints #web
#dontknow #CSS Scroll Snap

可以替换 splide.com 用js模拟的拖拽轮播图,可grid化,配合 anim-timeline:scroll(#id) 可实现滚轮ppt驱动动画 🌚👍

CSS 相比 YAML 把 03:01 解析为24小时制秒数😅就好得多https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell

另外,DOM的resize和visible(Intersect) 也是有Observer 的
DOM和CSS就是多元化 #UI 实际上的标准
duangsuse::Echo
修订文章的过程中,发现了一个有趣的事情 因为我有刻意去斟酌文字,希望尽可能让标点符号用的更符合直觉。 对 drakeet 的一些话(内联) 有一段话: “黑历史”是曾经不完美的见证,但它对自己而言也不是没有用处的,因为一个优秀的人时常要复习一下自己的黑历史、记住自己曾经的误解、不确定,来为自己的未来提供一个完整的排除名单。错误不再重复第二遍。 我给它的第一段修改成了 “黑历史”是曾经不完美的见证,但它对自己而言也不是没有用处的。 我做了一件事情: + “独立”了一个句子,把『因为』连词去掉 +…
http://jsbin.com/rubukabida #css 🌚突然心血来潮 复刻drakeet的知识星球之一
(没事玩玩 我也不记得他了。几年过去啦,也祝各位 #android 开发者越过越好 )
当然,web上是有1行完成的方法,但排版对齐不方便。我花6行
#code 我编程是自带框架的🌝,我不把可复用部分计入行数。总js有30行

大体10min 就写完了,移植paint花了半小时,兼容CSS花了4小时.. 确实, houdini.how 问题还不少.. 比如fill不能是线性渐变😅
TypedOM 支持上的问题让我对Chromium 的粉丝滤镜碎了一地.. 也可以说Firefox直接支持bg元素更好吧。 css4联动js上 常绿浏览器的支持都很烂
duangsuse::Echo
http://jsbin.com/rubukabida #css 🌚突然心血来潮 复刻drakeet的知识星球之一 (没事玩玩 我也不记得他了。几年过去啦,也祝各位 #android 开发者越过越好 ) 当然,web上是有1行完成的方法,但排版对齐不方便。我花6行 #code 我编程是自带框架的🌝,我不把可复用部分计入行数。总js有30行 大体10min 就写完了,移植paint花了半小时,兼容CSS花了4小时.. 确实, houdini.how 问题还不少.. 比如fill不能是线性渐变😅 TypedOM…
#web 此页思路:
0. Paint(f参数px和颜色集var), dragPin(ul, f_e_e0) 垫片
1. 用hsl(rand()turn 50% 70%) 🌈填色
2. tap 填N颜色,tap2s 给ul重排序乱序
3. rbRoll彩虹🌈卷 是靠N个梯形向下叠底 --lAng 底边更长 来倾斜。 #css 线性渐变就足够实现这个
4. drag f(e,e0) 会被保存,排完序自动重做用户排序😂: Bad在Good前,.

没错,[]上无需算法,全靠DOM。这逻辑2行实现,很普通的调用重做。靠 #py 都不会这么容易.. 学元编程很值
不然连1次 “f(a,b)” 如何记忆调用到[] 都不知道惹,有母语(JS)优势利于设计


另外,动苏对曾经伤害的人道歉。 就当是政治正确?🙏

把更多时间拿来思考、实现,而非写代码与争论
既然 #ai 把码字的工作抢了(是的..就训练集的质量来看 较冷门的lib 更大的项目 只要肯交流 也迟早能被半自动编程,人的工作本就是打磨设计啊🤪
就好好享受生活(摸鱼)呗

我是喜闻乐见的🌝👍,中国存在着一些“你看不懂我NB”的特色现象,但读不懂也可能是读者sb,但由最擅长文字把戏的AI来教, 文章是否立论明确,以及低创文章的过滤 就不会碍眼了,从长远看 利于中文互联网
#web #css #bing 感觉还不如 #algor ( 怎么全都是教npm 😂
#js #cg Scratch式demo canvas 绘制
顺便推荐开源函数图 + #css houdini.how (.. 入门2D绘制时实现过,当时啥SVG和GL都不懂

许多demo我做过.. 包括 Bezier曲线 我有1行实现版, Koch雪花, 弦图, Mandelbrot(隐函数,=距离函数)
(还有个2023版的 Bezier算法

sin,cos 可视化, 果冻状的扫把树, 太阳系Ring动画 也做过 🥳

#statement
顺手翻了以前做事情的态度, 感觉曾经很热血,喜欢背书单(完全不像我),代码量很足。其实一直有热情是好事。
想起做过 C lib.so hook, asteroids,snake 这些街机游戏 , 觉得忘记的东西有点多

按曾经我的编程眼光,即便是在AIGC的革命下,也会觉得 Java 系的样板代码非常优美规范
@Path("/posts") fun getPostsForUser(@Param("user") user: User ) 这种把函数名删掉都不影响语义的框架..😆

现在的Web后端=给SQL语句注册HTTP路径和JSON验证 ,ORM=对跨语言RPC的窄化,已经失去创造力了……

但今天我是API的封装者、定义者,而不太做应用;大概这就是我加入编程的理由。我和独立开发者都不是为了“复现”而编程、不为了“理解”而写文,所以不像PL人,我乐意打发AI完成甚至所有的编写,毕竟我们追求的是高于代码的进步、和可持续创作的环境,而非持续把半条命摔在门槛上
“任何人都可以成为程序员” —黄仁勋

我敲代码,不是为了有“钱途”或拿到“特异技能点”,不是为了不“被替代”,仅仅是朝夕相伴。我甚至不觉得自己是程序员,但我很讨厌给工作造成麻烦的、计算机特有的无趣的概念

真希望有了更好的语言后,让这些几何与算法变成20行左右的片段,这样无论如何也不会忘记,甚至能像上面一样做成 Demo Gallery。唉
https://github.com/cunarist/rinf
https://www.visioncortex.org/vtracer/
由螃蟹驱动的位图描边转矢量工具 #tool svg

https://www.lummi.ai/
https://github.com/adobe-webplatform/shaderdsl

有趣
有趣
http://topcoat.io
搞点传统的 #css
https://github.com/Web-Media-Foundation/infrastructure/blob/master/packages/ogg-polyfill/src/OggVorbisPage.ts #js #bin

隔壁实现完了 Vorbis 的解码前端(只带解编码元信息,不带解成 PCM 的部分),八百多行

https://t.me/im_RORIRI/17034
#statement
其实也不难,只要你知道你程序依赖的领域、最小的功能是啥,解决问题必须先确定范围;知道自己在干什么、与旧案有何区别、又为何不同,才配叫工程。

比如二进制吧,像bmp那样用一个struct就能parse的东西很少,因为C拿指针掩盖了带长数组、也无常量池等规范,但继续用 u/int32_t 那样的概念也没意义,不如叫 +-1 2 4 8 吧。甚至C bitfield也应该拿bitflags换了。
凡是用不到的专业概念,比如bitsize,全部抛弃掉,这样才有机会
避开前人留的坑

除了 read(bView, ['*', [4 4,'Num2 x y']]) 这样的带长数组,struct的json化也可以基于Proxy,以实现0copy序列化、push、sort啥的

总之就是确定最小问题是什么,然后组合、复用、降低复杂度来换算法的高效能
#parser #css concrete syntax tree。CST 与 AST 相比,它将完整包含源代码中所有的 token 与 trivia 信息。以上面的代码为例,CST 会包含 { } 等 token 信息,甚至是注释、空白都会有。这对于实现 formatter 来说无疑是极为方便的。
https://blog.gplane.win/posts/raffia-and-malva.html
duangsuse::Echo
https://t.me/hyi0618/3476?comment=1182 突然想吐槽一句🌝 我要是尊重业界这群自以为专业,动辄几十k代码堆砌出「劳动成果」的魔法师 尊重这些搞笑的过度工程、这些空有篇幅,而无功能点的大class 谁去尊重那些不断被强制更新,软件体积耗电量不断翻倍,功能却越来越卡、慢的用户? 谁去为新程序员踩的坑熬的夜买单? 谁去为谦卑的Pythonic、和WebAPIs的正确道路添砖加瓦? > 你会买百公里耗油100升,甚至1000升的汽车吗?在软件行业,业界一直这么做。 > …
#statement os #design
程序员为了教条规范放弃常识,就是最大的形式主义。

幸亏我学了元编程,不必被那些文字游戏所蒙蔽,可以有自己的心智模型。
只要穷举了「设计模式」们的Reason,就能跳过所有空洞的抽象,稍加设计,代码结构才能直观反映用户的视角。
如果,我没有遇见Prolog(https://tomstu.art/hello-declarative-world)和numpy、没有对C ABI和lisp的认识、不会写解释器和DSL,不能将协程/Reactive/OOP等“新框架”与C语言的旧需求对比着看,我肯定要被业界不沾边的教条主义牵着走。

“优雅的程序与它读写的数据,在结构上直观对应——Daniel Friedman”
从前后端到终端,从红黑树到递归和DP.. 有哪种代码不需要拆分业务逻辑、计算各色的数据?无非是晦涩或明确、重复或简洁、充满机翻感或编程如写诗。

富有语意的代码,“免费”的序列化与各种绑定..注入..的魔法,在lisp的时代就已经初具雏形。
别忘了对象树与GC、靠lambda隐藏部分参数的这个概念,就是他们的首创。 Javaer设计了那么多模式,很少有Visitor,ProxyDelegate 这样能跨语言保持一致的东西;然而60年前的函数式操作符,所有主流语言里竟然都是一个样!
部分程序员弄出来的私货,终究是暂时的闪烁,只有纯粹为语意服务的 functionals ,才能成为永久的光明。

React之流的各类“榜一”,对前人的工作有尊重吗?不幸地,沉溺于重造webkit等上游的轮子的他们,不屑于接受软件工艺的点化。

幸亏我遇到了先贤们的示例代码和优雅范式,他们对技术「自顶向下」的reasoning,才是真正与读者的平等交流,让大家能「早点休息」
而不是把对方视为copycat或翻译AI。
可怕的不是草台班子,而是你依赖的草台班子,抄袭魔改了另一堆草台班子……

如果一个人话都说不利索,讲概念难以简明扼要、一语中的,凭什么他靠写“新语言”的代码就能突破? 封问题,一定是消而不灭,照猫画虎尔,搞出更多让人头疼的坑。所以要兜售“永续学习论”“知识价值”咯..
其实,就是库的设计者一代不如一代。说是你不聪明不正经,那是在逃避编程语言的天职。

C诞生50年了,它所能实现的预处理期计算、单函数读写结构、栈参数和this变量的同构、
os级协程、将bytes重解释为"Proxy对象"如结构体的变量绑定,依然是后继寥寥, 更别说ndarray、正反函数、跨语言调用对象的这类常理化接口了,在编程界基本不存在!

Can programming be liberated from C-like OOP style? 😒 How long will it take?
https://tonsky.me/blog/centering/ #css ...
Rachel: #android #css #web
写过复杂 UI 的人肯定知道要在复杂业务场景里把动画优化到 60 帧有多难

duangsuse:
为什么 shadertoy.comgl-transitions.com 用几行代码就能做到呢? 为什么@3b1b 一个人用py就能实现呢

还不是框架做得烂 https://t.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,哈,完全是样板代码