duangsuse::Echo
714 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
#math 感觉太失败了,但…我依然已经重写 没想到傅里叶公式如此简单,但是啊但是 感觉数学和工程理论差异蛮大的,对我们而言连续(\int)根本是不存在的,一切计算都是有精度按步长积分,Sigma(Sum) 符号看起来也很多余,我们根本搞不清为什么有两种版本的公式,在理论上有何分别。虚数就更离奇,它的vec2乘法是 xX+yY,xY-yX ,别人说复数虚数(r,i)*i 的物理意义是旋转90度,也就是生成t的螺旋,我能不能无视虚数平面,只用笛卡尔两系计算呢? (x+iy)*(cosθ+isinθ)即e^it…
This media is not supported in your browser
VIEW IN TELEGRAM
原创写出来力,但是性能上严重不如Xe(以及我半重写他的版本),以至于我必须去Vec2 化重写 🤪
差异有多大呢? Xe dt=.001 nK=400 只要半秒,我同参数要5秒…… 这个星星还是 dt=.005 nK=5 ,才能做到Xe的速度。我猜是因为V8无法很好优化eval 的代码,还以为教严格0复制会比嵌套[] 好..

应该是正逆傅里叶完频谱咋可视化没设计好,我简单
a=Vec2(W,H).pk(.5); 和=Vec2(0)
for(i=n(动量)-1;i!=1;i--){b=和.p(动量[i]) .dup.p(_5).pk(H*H/W); 连线(a,b);a=b} P(a)
了以下,圆心正负的问题都每想过(我觉得不该有正负的 🥲

而且画画的过程中顺序和频率圆的问题也要保留序号,我就搞错了这个.. 又死了

为了拽中文和理论清晰弄得太卖力了
let i,N=c.nK,谱=Array(2*N), /*内俩频*/动量,a,b,和, P=录点() 的时候我都每想过逆FT完结果怎么累积回屏幕空间,就断定有ab和这回事 🤪,so.. 实际上最后 N<3 是报错的,因为我不想用JS里不规范的 i<=N i~N区间
如果要不按数学写,大概还要改一大堆迭代区间 🤪 我还是数学一点吧
duangsuse::Echo
#WIP 作者正在学习傅里叶变换 😓 感谢xecades大佬的博客。 实在不好在tg打太长的草稿。 语言有问题请大家积极报告 今天本来说还得写篇文评知乎民科的,以及提纲2月的动画礼物(草 话说xecades大佬居然真的是用 offset-path 来获取SVG折线点……天哪,我还以为不能呢,offsetLeft 好像确实变了,当时我以为不能(忘记为啥了)就找到了 SVGPath 的 TotalLen/PointAtLen (这里Xe顺带 -W/2 居中了一下,style里0点也加上了。transferSVG…
感觉自己没资格教Xe做事🤪。 其实理论正确了,程序曲折一点也OK,只要能工作就好,Xe用d3的JQ功能和CSS 做好像也OK,只是形式有点冗,数学式是没问题的,而且他还写过canvas 版本,性能比我高10倍.. 什么鬼,他只是写了正常的代码,甚至用了[]负索引,我稍微换了点私货-虚数变向量,居然会变慢?

而且把原版换成向量,没变慢多少?

Xe还是高三呢,理论对就不打扰他了,看起来我的代码也该修改😱

我这个版本用了太多元编程和eval,画个画都搞出(我不想重复xy传参..) 连线=(a,b)=>画(a,2,0,DEG,'Farc', b,'Sline', a.dup.m(b).l,0,DEG,'Sarc') 这种“DSL”… 很明显,运行时较大开销,那[Vec2,] 和无法内联的复制就更不用说了。在 #GLSL 里你可以随便上vec2[] 矩阵,JS 里可不敢说0开销抽象。 😭

怎么转一圈就耗这么长时间?我直接给xy平铺在[]好了!

我不用向量改 J(i=>a[i]+b[i])好了,也不用 svgPoint()=t=> 这种鸡肋的方式混淆计算和DOM测量了 😭 看来浏览器开发不考虑计算分块不行啊
#math 妙~虽然分辨率处理岔了,54行实现目标功能!理论优雅性有了,核心代码4+12行。过去发现区间和累积的bug都已修复

如果说还能再改进,我想正常手选以外的输入..手绘,文件,URL 啥的, 还要能输出str的,画布要能选绘制方式..
没有框架的算法是走不动的,可悲的是我就没得框架用。 JQ,Vue? 格局太小了,都得程序员手动指定吧 🙈

最痛苦的是 J['-'] 这种半道出家的定义,食之无用 弃之行数又多了。我是真对代码有强迫症,但可能不是对合规性—对于编译原理程序员,只要语言里合法且语义不至糊的都合规(比如 录点=(a=[])=>p=> ,eAdd=(e0=> (s,op)=> , fold=(fr,f,ac)=>(fr(x=>{ac=f(ac,x)}) ,ac) 这tm是瞎写..
看着恶意行数短,但也没法再优化了,语义就是这样(反正是数学应用 app界也无人看 管他呢 🤪

此外简画(ps)也不能积分1D输入(t-x动就可了),我是想用 echarts 支持可视化白噪声啥的,能弄个吉他合成?反正发文肯定不能只讲2D
当然这个也不能用于手绘外的FT,WebAudio是支持快速傅里叶频谱的 😂
for(动量=[],i=1;i<N;i++)动量.push(v(i),v(-i))//律(-i*t,谱[i+N])
动量.sort((b,a)=> pLen(a)-pLen(b))
//^t%的全谱震幅,l降序,累积为点
a=L.map(v=>v/2),l=Math.min(...a)*4;for(i of 动量)//检讨
{a0=[...a];J(a,i,(a,b)=>(a+b*l)); 连线(a0,a);a0=a} P(a)
duangsuse::Echo
重构 https://alemangui.github.io/pizzicato/ 的代码简直是种折磨,我鸽了3,4天了(当然也是因为天气凉和频道更新。 最开始是想作为WebAudio的练手,的难度下降版,,,) 没想到在我解决人脸识别和画布几何扭曲算法后, 这个东西卡了我很长时间…… 你们不知道……🤪 我原以为声音好听=代码好看,没想到这个作者纯纯就是前端,勉强写了个player UX ,全TM是 getByID 拿{} 去传.. 真的还不比我们班同学的复制粘贴。 menu 和article的结构大量重复倒不说,…
#js #code #low 🌚 本来想到FT可视化算法里一个流程技巧,想去看看这个是不是已有了,发现人家用的是FFT — 为什么和正常人写的不一样?
非常无语的抑制住了血压升高,因为我的文还在「设计」中

真的是逗死我了,Xe 大佬的代码居然是最优雅的,因为居然有人蠢(请允许我这次用这个词)到动画状态机(st++的那种?)都 case? JSer 都没学过编程吗?!

我tm a[i/N >>0] (floor)已经很过分了,这还 >>>1 ?还x:y:x:yx... this, context(graphic) ?叠buf呢 😱
这个作者到底懂不懂编程,他是做游戏的,能做游戏居然也会写烂代码??! 这是什么鬼
duangsuse::Echo
#js #code #low 🌚 本来想到FT可视化算法里一个流程技巧,想去看看这个是不是已有了,发现人家用的是FFT — 为什么和正常人写的不一样? 非常无语的抑制住了血压升高,因为我的文还在「设计」中 真的是逗死我了,Xe 大佬的代码居然是最优雅的,因为居然有人蠢(请允许我这次用这个词)到动画状态机(st++的那种?)都 case? JSer 都没学过编程吗?! 我tm a[i/N >>0] (floor)已经很过分了,这还 >>>1 ?还x:y:x:yx... this, context(graphic)…
请各位订户千万不要被原文的趣味性带偏! 无论你在写什么领域的代码,这是绝对不可取的!
他的文章很好,但代码很烂! 我会逐图解释为何「烂」 🌚 虽然正常人都看得出

从迷糊程度开始。
2.这其实是一个展开命名(SSA单赋值...)了的Vec3计算。hpmd 是+s 的乘积(range map计算..),后面许多是 n[v],n[v+1] 和2D旋转公式 ax-by,ay+bx ,只是没有任何数据封装 只有变量名(汇编时代都有约定俗成struct的),千万不要手动内联表达式!不要以这种人为榜样!

我相信一定是作者手写的,因为没有魔怔编译器会如此优化文本代码 🤪🙏

3.到这时想起来[{key,value}] 和[{x,y}]的滥用datatype了,那刚才写那么多var是 🙅‍♂️
从性能上也没比[x,y]优雅到哪去,都是 number pair ,何苦内联手写js里🤦🏻 稍微有点常识也懂JSON.parse
有你从 MouseEvent.xy 拿这些的功夫。早找到 SVG Path 了

代码空间管理大师:
4.起名大师,和那个 Pizzicato 一样,重复前缀丝毫不会意识到 DOMTree 为何是嵌套的
5.重复.前缀大师, doc.docElement 无数遍,我的天哪 Kotlin 的 o.let{it.aa+it.bb} 真的是太现实了
6.DOM注册转发大师,空话复制一大堆,您还是看看JQuery吧,虽然格局较小但简写也是有用的🙅‍♂️
用这个"可拓展",没人帮你写插件!(Kotlin 的 class by(o: interface) 真好😂

7.数据类型函数名化,from/into 这个应该是全工业界没抽提。 我现在对数据已经完全无实感了,一会整 res.amplitude 一会全变量名,他到底是不是程序员,知不知道变量和 data 上的变量对复用是不同

1.您把 drawCircles 的 opacity 参数抽提啥都用 anim(1,0,v=> 补间绘制末帧来淡出不就可以了,是对动画队列没概念吗?起一大堆状态号
您把「画圈、手移开、FT出这个手、圈淡出」,这些变成带参回调function 不就可以了,您知道状态机的意义是转移表吗?🤦🏻 讲数学,函数的[]都不会用

最重要的是,状态机都写了,animCount 帧号还是手动判断区间的?! setInterval重绘里这是二选一好不好……(<)号就能判断状态和时轴%了,您还是讲数学呢!还3D螺旋呢!

我是从没写过臆症到 && 内含多个,赋值的 (注意break前的“语句”哪里来尾括号? animCount>48&&(state=) ...) 🤪
思想稍微善良的程序员也该明白 && || 取代if 要适可而止吧,能把JS写成 #bash

世界上只有两种程序员:一种习得技巧发现用不到后微笑着接受 ,一种学到后立刻与this这些画风不搭的组成缝合怪🤮,还自以为更快更黑科技

用手想都知道 ok=(i==n)
switch(st){case 0:draw(i); if(ok)st=1,n=50 } i++ ;if(ok)i=0
比重复5遍「高性能」

“聪明”到知道 !0&&(a=1,b=2)1==t&&2==t 是有效的,笨到不知道有 if()break; 可以外包for(;;st++) 和switch就是过时写法的事情。当代码必须重复,就要把函数当参数,存[]了,这不是编程基础吗?
不会写您可以不写,可以用社区轮子,写这么一大堆是何苦呢; 怕是得花个星期写一篇博文吧,竟然需要几万行代码,我死了
恶心的是JQ内部也没优雅到哪去,但它居然还算好的……

我们应该为对自己代码的自信没有魔怔到此种程度而骄傲🤦🏻 价值观稍微正常的人看到20行的算式都知道是错的离谱
不仅不应为自己能“理解”并编写此类代码而自豪,反而要将写过这种谭式mian条代码当自嘲的笑话,警示自己编程是解决而非制造问题的

优秀的代码绝对不该能区别开 >>>1 和 /2 这些的,请大家以此为镜,尽管是在写有用的代码,也千万不要用奇奇怪怪的语法,尤其是同前缀"" 或同前缀.号链,如果出现太多,就要注意设计是否变成堆砌了