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
#learn #cg 《OpenGL杂谈》 🔬
GL提供了特殊类型 vecN (xyzw/rgba/stpq 来引用/自由重组均可;可iub前缀表示类型)和matNxM (m[i<N][j<M])以及 texture(sampler2D,xy) ,支持严格 int/float percision ,支持struct和传统C的控制流及GL特有 cube/shadow,代码的特性由 compile 环境/GL驱动决定(比如GLES就不支持break,许多不能?:和%=mod,**=pow,不同类型?:)。SL能计算frag颜色和vert点-geom顶边,对应渲染和物理计算(一个很草的事实是,基于GL计算的渲染引擎在CG界遍地开花,各有各好 🤪)

SL是没helloworld却有计算力的语言,和CSS一样,明明print都写不了却能定义动画
尽管SL能保持个buffer-state,不要尝试只用SL完成一个功能机械的app,不然就太丑了。SL适合写动态壁纸和滤镜类的东西 #建议

除了社区不重视代码质量(冗长或空语义的极端,如uv=uniform=readonly graph-arg)、不善用struct、场景与渲染不切分、和复用/可配置力问题、shader含字符位图硬编码(GLSL不擅长的用途)等人的问题,也关于计算领域 🤔

为什么GLSL看起来和C很不同?不谈多out 函数和内部gl_物理变量,显卡的计算和CPU的单线模式差异很大。比如画个圆吧,g.arc(x,y,l, 0,2PI);g.fill() 后它就出现在画布(或用SDL/VGA)上了,因为这里有个“显示缓冲”位图的概念,所有图形存留在这里直到clear-SwapBuffers(一个冷知识,glFinish计数比FPS适合图形学跑分用),画圆可以迭代xy=(sint,cost) t=0~2PI 来累积圆上点,这个过程是线性的,多核CPU一次能画几个?尽管能LUT(查表)优化、能模拟Vec来复用同半径的结果,一次也只能画一个。对于几万个粒子来说就更鸡肋了,
因为执行顺序根本对时差更新/绘制结果毫无帮助,你逐个往画布叠对N叉 tree 好用,可对数学分形 还不如把“端点迭代”完全打散,越散越适合GPU计算。

显卡计算是没有顺序和“整体图像”的,几何都必须能按xy-颜色来“绘图”,因此着色器和 Painter 完全是两种东西,当然也有办法把arc(x,y,l)->float 峰值clamp 封装成函数,并且用数学方法mix()

#define v1 float
v1 circle(vec2 P, vec2 p, v1 l) {
v1 d = length(P - p) - l;
return 1.-clamp(d, 0.,1.);
}
void mainImage(out vec4 bg, vec2 P){vec2 L=iResolution.xy, p=P/L;
vec3 c = 0.5 + 0.5*cos(iTime+p.xyx+vec3(0,2,4));
bg=vec4(mix(c, vec3(.87,.37,.23), circle(P, L/2., L.y*.3 ) ) ,1);//试给圆半径 *mod(iTime,1.)
}
矩形xywh也可用类似手段。不过shader里这些形状不是必需品(paint里确实是)

数学(此为几何相关)应用相关命名随意已经是普遍现象了,
>“ s一般用来代表一个"scalar"(标量)。所以是一维数字。t是因为字母表s后面的字母。不能继续用u和v是因为uv已经被他们用来作计算用的坐标了。因此就用了向前的字母了。(strq)淡然,后来他们发现r与rgba的r冲突了,就用p替换了r。就是stpq了。
动画工具一般用t来表示时间的概念,所以就不用s和t来表示纹理的坐标了。因此,他们就用了u和v(UV贴图),因为他们根本不关心相关的计算。
s和t的命名来自于对平面的描述:r=r0+sv+tw (r0是平面任意一点,vw是定义向量,st随选)
uniform 意义也非常迷,它的意思是CPU和GPU间统一,许多人拿 uvec,uv 简写这ND座标/颜色/etc.,但SL里真有uvec2的类型-照传统编程早该改了,SL界硬是成了传统,想学图形先换术语,脑子里没对应表100%看不懂 😟

这是在GL(带一张 ShaderToy.com/new 贴图)显示 hello world ,带着注释里的问题阅读

float l=.06;
void mainImage(out vec4 bg, vec2 P) {
int[] t = int[](72,69,76,76,79,32, 87,79,82,76,68,33);//"Hello World"
P = P/iResolution.y - .3/*为什么能调x位置?全屏试试*/; P.y += .05*sin(3.*P.x+iTime) -.4;

for(int i=0; i<int(iMouse.x*.02)%12;i++,P.x-=.1)if (length(P-l)<l)
if(false)bg+=vec4(1)/*<能解释了吗? .5调成1.试试?>*/;else bg+= texture(iChannel0, P*.5 + fract(vec2(t[i],15-t[i]/16)/16.)).x;
}

答案:P的0值是确定点,for(i)if() 是为确定当前P对应的t[i] 。 P*.5 是因为原字体图太小了——那为啥P/2 呢?不该是有t[i]的位图yx偏移,就够在当前P画字了? 作为只懂g.fillText 的程序员不会考虑怎么从像素级别对应P缩小了,同高区间就只含低 texture 视口,于是贴图放大了! 和数学函数缩放一样。类似写法在SL里很难规避,也没法文档

SL的逻辑不能用常规迭代/判断来解释,在进入图形学公式前,需要先习惯这种思维方式。许多程序员这辈子没机会,你看到了就是有本事。 所有平台,Web,Android,DX/Unity/Xorg 都支持OpenGL ,机器学习框架也开始GPU计算,不想黏合点特效装逼?看不出咋调参可不行!

你肯定会吐槽:逐点贴图?肯定很慢吧! 其实GL是最快的图形方法了。计算量大但都易优化,它是很低层的绘制API,和各种层次的painter不在一条赛道
在迈向并发的时代,一头什么都会的牛和一大群只会+-*/的鸡 硬件选择发展后者,应用层各有各好,但在图形上答案显然还是简单的-简单比线性好

#math 这是一个曼德博(朱丽亚)集的分形图,在SL上反而比在JS更合适,不需要手动迭代虚数P(x,y)

#define cxmul(a,b) vec2(a.x*b.x - a.y*b.y,  a.x*b.y+a.y*b.x)
#define R iResolution
//#define JulC vec2(.383,.13)
void mainImage(out vec4 bg, vec2 P){
vec2 z,c = P/R.xy *4.-2.; c.x=c.x* R.x/R.y +(.2-iMouse.x/R.x)*15.; c/=1.2+iMouse.y/R.y*20.; z=c;
#ifdef JulC
c=JulC; //v 猜猜看,怎么调参数.
#endif
float i=.0,N=abs(sin(iTime/32.0))*64.0, v;
for(; length(z)<2. && i<N;i++)z =true? vec2(z.x*z.x-z.y*z.y, 2.*z.x*z.y)+c : cxmul(z,z) + c;
v=i/N;
bg = vec4(v,v,v,1);
}

这是一个”老相片“视频滤镜,展示了GL无所不能的inputs... ,猜猜它是怎么处理颜色的

void mainImage(out vec4 bg, vec2 P){
vec2 p = P.xy / iResolution.xy;
//p.y = 1.0 - p.y; // invert
//p.x = 1.0 - p.x; // flip
vec4 c = texture(iChannel0,p);
float c0 = (c.r + c.g + c.b) / 3.0; // grayscale
c.rgb *= abs(vec3(cos(c0),sin(c0),atan(c0) * sin(c0)) );
bg = c;
}

以上三个示例里,大家都能感受到GLSL对向量(元组)计算 帮助是很大的
应该也能感受到数学计算里不需要太多边界判断,靠sin,mod 等就能展示复杂的图形。比如这个 fireworks. fascinating graphics, made eazy, 类似的有效作品120多个
OpenGL着色器杂谈今天就到这里

ref:
https://zhuanlan.zhihu.com/p/32788146 Py julC
https://blog.csdn.net/cuckoo1/article/details/108083508 js分形
https://www.shadertoy.com/view/Wtt3Wl OTF bezier
https://www.shadertoy.com/view/XsyXzw 音乐粒子
https://www.shadertoy.com/view/7dKGDK 基础着色
https://www.cnblogs.com/chen9510/p/11447292.html UBuffer 跨着色器传递
duangsuse::Echo
#learn #cg 《OpenGL杂谈》 🔬 GL提供了特殊类型 vecN (xyzw/rgba/stpq 来引用/自由重组均可;可iub前缀表示类型)和matNxM (m[i<N][j<M])以及 texture(sampler2D,xy) ,支持严格 int/float percision ,支持struct和传统C的控制流及GL特有 cube/shadow,代码的特性由 compile 环境/GL驱动决定(比如GLES就不支持break,许多不能?:和%=mod,**=pow,不同类型?:)。SL能计算frag颜色和vert点…
#cg 也是非常有创意的领域,而且也有技术
第一个烟花就只这点代码(都不够按行算了):
#define N(h) fract(sin(vec4(6,9,1,0)*h) * 9e2)
void mainImage(out vec4 o, vec2 P) { //fireworks[SH17a]
vec2 u = P/iResolution.y;
float e, d, i=-2.;
for(vec4 p; i++<9.; d = floor(e = i*9.1+iTime),p = N(d)+.3, e -= d)
for(d=0.; d++<50.;)
o += p*(1.-e) / 1e3 / length(u-(p-e*(N(d*i)-.5)).xy);
u.y<N(ceil(u.x*i+d+e)).x*.4 ? o-=o*u.y : o;}
第二个也只有20行稀疏的代码 https://www.shadertoy.com/view/4sjBWR
这就是几何学的魅力

对于我们普通程序员,也是很值得思考🤔的- 仅仅使用一个数字,多写点算式就能实现复杂控制流的功能,仿佛变量都不必存在一样
也好像是禁语游戏-不使用常规绘制法,如何绘图

这也是函数式编程的特征啊
所以是顺序执行,还是怎样怎样,有许多代码可以实现一个程序,只要思想不滑坡,你就永远是菜鸡-只是菜的清醒罢了😂
duangsuse::Echo
本来说可以移植 SDL 甚至支持 WebAudio 和 改写 sharder 渲染支持 stereo 的 (哪怕只是预求和一下 可大佬 size 计算变量貌似没弄全)。 但这个原版代码本身有一点冗余(其实有 sync locks 的一大堆尚无应用意义代码)、试用语言特性的意图, C++ 的简洁性很难(就连 flat 文件树都得拿自写预处理工具去保证),如果用 Py/JS 的话性能又不好,我觉得还是算了( 代码链接后 400k 也算小了 这个是 Mivik 版。 https://t.me/dsuse/16598…
更实际的GLfw/FFTw示例看这里
https://t.me/dsuse/16598

这里我们是要纯GL绘制一个柱状图,首先得按宽度比率切出vert,然后用geomerty(图形由顶点构成) 从points EmitVertex~EndPrimitive连出图形,最后frag只填平色就行
float y = mix(-1., 1., clamp(y_in, 0, 1)), x=mix(-1.,1., (float(gl_VertexID) + 0.5) / u_count);
gl_Pos = vec4(x, y, 0, 1)
//geom
layout (points) in;
layout (points, max_vertices = 1) out;
glPos=gl_in[0]; Emit //顶点0直接输出
layout (triangle_strip, max_vertices = 5) out;
P(l,-1) (r,-1) (l,y) (r,y)
就能生成一个□+\ 的几何

每个顶点都可以带颜色等附加信息,geom也能设置out fColor

bar vert的重力计算在这些之后每帧应用,绘制 y=texture(fftBuf,vertIdx),就能实现一个缓动的频谱图了。

glClear(00wh)
use(shader)
glBindVArray(vao)
glDrawArray(POINTS,0,N)

动苏第一次完全不知道 shader 除了着色贴图还能处理几何,后来觉得 geom 一定是先于 vert 运行(当成点和边了 😂),然后发现geometry shader 画矩形有四个点,vert 却只有2个,于是认为 vert 能决定宽高,或者有重复计算 🤣其实不懂绘图

https://blog.csdn.net/q1398284020/article/details/80181803 着色器变量
想用WebGL+WebAudio复刻abeat 和 constQ 频谱图录制,至少能录个音,
想重写 xecades 的xy fourier transform 可视化

想做哔哩哔哩上看到的视频隐写 信号处理,base64

想复刻xecades的手写数字识别,然后讲机器学习

可是还有太多之前的东西也没定义,那个java博文和el框架也没做,往往不得不填补过去
想做简单的sexp编译器,变量解构和闭包都构思了,没有精力完成

可是Pizzicato的页面修改还没发PR、扭脸的视频还没有发,拖了两天了
一个人脸识别都这样艰难

太累了啊,这样奔波
昨天晚上又是4点,很久没有好好睡觉了
现在也感到了很无奈。 我搜了一下,整个 Telegram 都没有人了解这些东西,甚至于胆大包天教 GLSL 这种细节?我昨天才因为找WebAudio的资料看到 shadertoy.com ,然后就熬夜写了(没错全都是我手打的)几个入门着色器,刚刚了解就开始教人做事!我何德何能?
除了GPU计算, OGL 也是可以实现 GDI,Cairo,Skia 的2D功能的,用它对UI框架作者也是种开关项,不是只有 #game 和滤镜在用

曲高和寡,我从来不想说这种话,只是为真的不知道为什么——我写文从来「不止」是为了自己,更是希望能启发一些暂停观赏的人,但应该没有那么多吧。

的不知道我和 @ice1000 、和我喜欢的许多大佬 又该有什么不一样,经常标榜自己比人易懂,是因为我很无聊,又讨厌含糊其辞的东西,所以一直把这当成爱好——不过认真起来也不会输于任何人就是了。

比较讽刺的是看不起易语言的人也没有理解易语言错在哪。 易虽然语法就是民科汉化,但它的作者却实在是了解编程的人,今天你们做的所有应用,数据库、http、服务链接、UI、加密 ,易语言标准库都包含,易甚至自己有一个跨平台IDE,尽管开发流程比较土,易的功能性代码胜过这个时代的许多同类应用,对程序的了解也远不止代码-序列效果这样

所以说到底该不该分享,我也不知道
或许冰封或友好的朋友们是对的, 有些东西没必要说得太明白、没必要用中文先讲遍,懂的人自然懂,你看图形学各种模式、创意或算法的作品那么丰富,各种引擎和高大上应用遍地开花,不就是因为大家都到一起了,可我也不想决定自己留在哪。

我越来越觉得一个人的技术水平就是有天命的,他不想,或者有自己觉得最厉害的东西,以至于胜过其它,那神也救不了他; 没有必要对同好很友好,
都是我凭本事学的,夜是我熬的、代码是我重构的、工具是我写的、资料我整理的,简单啊?!懂了多简单,可这背后抛弃的东西,从哪里找回呢?
真理简单啊、配方简单啊,一个结果多有价值啊,可是追它们所费的一切,如何买单?
你可以菜、可以抄代码、可以骄傲,甚至受到鼓励,而认认真真对待技术,要想真的平稳的人只能呆在背后,所以我最初到底是为什么?!真的只是因为我爱分享吗?
就好像是安全界许多问题就是自产自销,比如OLLVM控制流混淆,那些开发者根本不懂名字外的东西,何谈去用。

如果我一开始就什么都懂,有R大那样的强大表达力,就不会把那些的侧面残影当成什么“浪漫”了,但现实毕竟就是残缺的,简单的软件效果也有糅杂的流程,这样或许扭来扭去的符号相较之下,反而更优美了吧
至少它对自己的本质,承认得更彻底。

原来我以为“世界上第一个网站”离互联网并不遥远, 现在我才知道程序设计就是有两个世界,而它们间隔的也没有那么远,形式很神似,结果完全不同,一点误解就能决定许多成败。是因为什么,让学编程的人越来越片面模范呢?
哦对了,因为上网的人越来越多了,都是样本偏差效应
Forwarded from Solidot
Faker.js 成为社区控制的开源项目

2022-01-17 11:20

在一位开源开发者故意破坏两个广泛使用的开源库一周之后,其中之一的 Faker.js 成为社区控制的开源项目。Faker 是一个生成虚假但合理数据的库,可用于测试和开发,最早由 Jason Kohles 在 Perl 语言中实现,之后移植到 Ruby、Python、Java、Clojure 和 PHP 等不同语言,Faker.js 是 JavaScript 的移植版本。新的社区项目托管在 GitHub 上,名字为 faker-js/faker,包含了 8 名维护者。开发者承诺将继续扩展和开发项目, 为 Faker.js 带来新的生命。
Forwarded from 羽毛的小白板
前面一条提到「知乎的程序员多数是“互联网”背景的,时常跳入历史虚无主义的错误中。甚至互联网大厂希望多数人都陷入到这种历史虚无主义中而丧失对技术的批判性。」而这些垃圾「技术文章」的背后有多少都是那些互联网大厂呢?

https://v2ex.com/t/795733
Forwarded from 螺莉莉的黑板报
赫蹏(hètí)是专为中文内容展示设计的排版样式增强。它基于通行的中文排版规范而来,可以为网站的读者带来更好的文章阅读体验。

sivan.github.io/heti/
https://t.me/haneko_daily/1862 jndi log4j 旧闻。
https://www.zhihu.com/question/20451584/answer/2220757276 #recommend #csharp struct/memGC和PInvoke FFI. CLR真是好东西

#tech https://weibo.com/6347862377/KomPj0IBr 王银终于开始民科化了,不过他说不能嘲笑质疑相对论的人这一点我赞成。科学是拿证据说话,那空口无凭说人家没讲明白又怎么质疑他们呢😒
https://t.me/dsuses/5048

质疑也不是廉价的,需要拿出不小于对方的功能,才够认真(不过王某人能持这种态度,我丝毫不意外,他就是喜欢把一些 alternative way 说成the only axiom或沙藏珍宝的人。可惜的是历史错了也不代表它们就能干了……😞 都有优缺点和大环境

>……却一直拒绝与质疑他的人公开答辩,所以我感觉他可能不仅不是天才,而且是否真懂物理都值得怀疑。不要忘了,在此之前他是一个在专利局工作的小职员……(阴谋论)

爱因斯坦说“如果你不能向六岁小孩解释清楚一个理论,那你并不真的懂”,然而他自己就违反了这句话。不仅小孩完全无法理解,而且他的论文极少人能看明白。我试过,真的。此(扩大释义)

我对社会的看法就是,活好就成了;科学和教育界问题不少,但确实是有能力的,而且想革命最好是由软件操刀。嘛,反正抱怨这些人也不会想想怎么解决,反而是当个跨界的科普作者更实际
但其实这些对社会并不重要🤷‍♂就像 PHP,JVM,Go 比原理苦工的 CLR,Lua 流行

基本操作很易懂啊,可是没有传播价值,现在中国就是这样(我这么想就又成公知了,你看看

把科普当科学的特异点最多只能续命一会再崩塌,根本不现实,正确的方法就是把人分成两波,一波专心造玩具,一波见机圈钱圈粉,同行的关注点并不相通,很难交流去做到更好的事
羽毛的小白板
https://zhuanlan.zhihu.com/p/363380508
😔有的时候就是这样,现在的未必更好,只是一种发展潮流 #web #statement

>小孩问父母,既然手机的电池这么不经用,为什么不发明一种「可插拔、可充电」的手机电池,这样外出游玩的时候就可以多带几块增加续航时间呢?
可不是吗?最早的手机电池就是可替换的呢!\可拆卸后盖

给 div 想 className 太麻烦了,为什么不用 Tailwindcss.cn 这种把样式直接写在 HTML 标签上的写法呢
可不是吗?最早的 style 属性就是这么用的呢! \无意义.className (emmit.io 就是典型
(不过Tailwind 官网队列transition挺好的.. ,而且 .text-center(内容居中) 的按位置类名的确是烂活,CSS也确实需要@apply类继承(混合

用媒体查询@media 写响应式样式好麻烦啊,要是 HTML 和 CSS 自己本身就是响应式的多好啊?
可不是吗?你只需要给 body 加个 max-width: 1000px,然后给 img 加个 max-width: 100%,你的页面就可以适配任何屏幕呢! \竖版文档排版

webpack 打包好慢,要是 JS 不用打包直接就能运行在浏览器上多好呀。
可不是吗?JS 以前就是这么用的呢! \无minify|resource import

AJAX 加载动态内容好慢啊,要是内容一开始就嵌入页面里,这样就能节省好多请求和响应时间。
可不是吗?最开始的网页开发就是这么干的…… \如果你想把JS生成的内容saveAs html ,或者后端模板

一旦点开某个信息,再回退时,就要重新滑动滚动条才能定位到刚才的位置,好麻烦啊!就不能自动记住上次浏览的位置吗?
可不是吗?以前的静态网页是可以被浏览器记住位置的呢…… \scrollTop可调(router keep-alive

写vue的时候发现html/js/css写在同一个文件里好方便,可不是吗?最早以前的网页就是这么写的,都写在一起。
哈哈哈,React的就更好解释了,就拆分再link,script引用
写vue发现{变量}好方便,可不是嘛,最开始jsp就是怎么写的。。。

可不是吗?现在各种规范教导你”不要这么做,不可复用!“
您懂机械流程和复用吗?
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/ 虽然很可爱但莫名有点土 😂