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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
#web Web Audiotool.com 某软件/游戏大佬的作品之一,太厉害了
duangsuse::Echo
#web Web Audiotool.com 某软件/游戏大佬的作品之一,太厉害了
WebAudio 相关 —抛弃python pydub啥的啦,浏览器多方便!
https://github.com/audacity/audacity/blob/master/src/effects/Wahwah.cpp#L391 freq=3.7 depth=.85 reso=3.4 哇哇
https://p5js.org/examples/sound-filter-bandpass.html 有交互创意
https://wavesurfer-js.org/example/bars/index.html 的方便波形可视化(Region循环,ELAN字幕,Bar/timeCursor/line,MediaSession)还有 marker,minimap,playhead 等超强可配置
https://collab-project.github.io/videojs-record/#/examples 的WebRTC技术音视录制工具,支持 Chromecast record(maxLength=60)saveAs()录屏和 doc.pictureInPicture Window. URL.createObjectURL(player.recordedData)
https://alemangui.github.io/pizzicato/ 的硬核声效与 WebAudio ScriptProcessor/FFT-Analyser Node IOBuffer,还有……
https://github.com/andrzejlisek/AudioSpectrum/blob/master/filter.js 地狱绘图-巨型项目-代码烂得不行

https://t.me/dsuses/5034
duangsuse::Echo
WebAudio 相关 —抛弃python pydub啥的啦,浏览器多方便! https://github.com/audacity/audacity/blob/master/src/effects/Wahwah.cpp#L391 freq=3.7 depth=.85 reso=3.4 哇哇 https://p5js.org/examples/sound-filter-bandpass.html 有交互创意 https://wavesurfer-js.org/example/bars/index.html…
https://tinyrave.com/tracks/69-ode-to-joy #signal #tool
https://www.shadertoy.com/view/XlBGzm
https://www.shadertoy.com/view/XlXSWB Praat
https://tinyrave.com/tracks/10-interstellar-theme-song 果然信号处理就是人均data转化 codegen ,啥都会啊
https://www.shadertoy.com/results?query=star 这每张都是壁纸.. #cg

https://tinyrave.com/tracks/23-wizards-and-warriors-midi-nes m

https://www.barretlee.com/blog/2014/02/28/cb-webAudio-filter/
https://www.redblobgames.com/x/1618-webaudio/ 编玩边学 和解释: https://www.cnblogs.com/xy2c/p/7501327.html
#dalao https://andremichelle.io/lab/ ^大佬眼里的大佬。这个是贴图伪3D,他写了很多Flash 几何/曲线(flower,ocean,)/游戏算法(如Bezier碰撞体),可用 ruffle.rs 试玩. 免费DAW audiotool.com 也是他写的-是的,完全和各种社区设计引擎平级的个人..
https://github.com/andremichelle
有B站号,图形和物理模拟巨佬 https://www.shadertoy.com/user/iq
两个人都看似和国内硕博一样,甚至更低端,但实则比@3b1b更稀有

https://permadi.com/java/rayc/Rayc.java ^大佬**3 ... 这是3D扫描渲染.. 图形学大佬都说excellent, 肯定非常牛逼了
https://justintaddei.github.io/webaudio/ 是简单的频谱仪

基于 tf.js 还有个 https://magenta.tensorflow.org/demos/web/softsynth.com , dgen.co
https://oosmoxiecode.com/archive/js_webgl/particles_morph/index.html
https://avseoul.net/particleEqualizer/
#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 流行

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

把科普当科学的特异点最多只能续命一会再崩塌,根本不现实,正确的方法就是把人分成两波,一波专心造玩具,一波见机圈钱圈粉,同行的关注点并不相通,很难交流去做到更好的事