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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
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)…
#math 实现了重绘消sort 的优化(这个Xe应该也有考虑,他对CnSheet 的建模有重排..负值?)

本来我以为自己的重构已经够好了,还是发现我很蠢——
newA(2*N, i=>律(-(i-N)*t,谱[i])) v.s.
谱=newA(2*N,i=>律(-i+N,ps))
谱.map((p,i)=>[(i-N),p]) ,原来真的就是两边i左移就行了,然后点迭代里 xy=律(k*t,p) 就是圆心…… 完了,整个程序只要10行了 🤪

我只是了解了圆是大震幅[x,y]优先,频率i在t%路径的反FT,整个程序的数学性都消失了, 我可以完全用2D旋转和列表处理解释傅里叶变换,而且整个可视化能不到10行——因为作为核心的FT(kHz,@f)算法只有4行

即便程序的算法是相同的,其明显度也有优劣之分,表达也可以带来质变

不可能吧.. 正负索引这么简单,只是我没用 for (和newA) 也不排除0了而已,原来 i+N 和 -i*t, -i+N 异同就是代码没写好留下的
(是为合并 [nthVector(+-n, t), +-n] ,语义用v(i),v(-i) 和原版一样明确的,只是内部没想到也能更统一

看来程序员编程时还真是很容易把自己搞傻呢。 #statement
duangsuse::Echo
#math 实现了重绘消sort 的优化(这个Xe应该也有考虑,他对CnSheet 的建模有重排..负值?) 本来我以为自己的重构已经够好了,还是发现我很蠢—— newA(2*N, i=>律(-(i-N)*t,谱[i])) v.s. 谱=newA(2*N,i=>律(-i+N,ps)) 谱.map((p,i)=>[(i-N),p]) ,原来真的就是两边i左移就行了,然后点迭代里 xy=律(k*t,p) 就是圆心…… 完了,整个程序只要10行了 🤪 我只是了解了圆是大震幅[x,y]优先,频率i在t%路径的…
#js 同样是简洁优化,这些就很鸡肋了,尤其是这个eval DSL… 显得非常缝合,但为避免 new Path2D 不得不用

我曾说过「好的代码是横着写的」, 总结下吧,尽管我偶尔写带配置UI的应用,现在我的编程风格已经完全和“软件工程”者不同了

至于好坏…工程界的定义,蛇线驼峰 太基础,没有考虑语序和用途,我的写法会偏函数式点,命名上倾向 Kotlin ,不完全是民科

在我看来,工程界只重视代码的功能,没有顾忌代码的语义和「份量」,所以常常把简单功能写大几百行,以此为“成熟度”,或者觉得C++就必须高级、Py就必须死板,我是决不接受的,因为我编程就只是想尊重理论,被我承认的那种。

如果有小白被迫读这种代码,一定会喷我的压行,以及 a=[_,c,k], b 命运不同的写法…… 但我真的没有更低运行时开销的做法,()=> 都用到极限了

作为程序员,问题规模是很浮动的指标。当然希望自己的func兼容更多参数,同时保持易用;当我初次写定义,就会考虑大批量调用和临时使用的情况。我一直在以API和交互流程的视角编程,尽管不写App 🤪

这样的思维方式写出代码对1次调用肯定是奇怪的,但对跑个分都要 @MeasureTime(iterations=5) 的 JavaEE ,我想还是平凡

很多时候我不爱看自己的代码,但它之外只有量大后更难读的东西,一些问题想描述都是复杂的,何谈定义“解法”,我一直在努力简化

我就相信不管多难、多牛的人写的代码,都有更通俗的表达法——唉,大佬们总让我失望

一边顾忌API的易用,一边“透明”的实现对我而言也是该改的,然而实现是 tricky 的,不可能用绝对规范的写法在两行里定义——为啥不放宽压行?因为我从不为写框架而写框架,所以框架不能占太大比例! 😂仔细想想还挺好笑的,很久以来我的html框架都没独立出具体应用过
倒不如说复制粘贴些旧代码也是编程方式..

顺便一提,这个在原版里是6行定义+3个begin~closePath 的点圆线func,我这里改为定义俩列表处理函数,然后一行定义两点间的连线画圆仨路径,它的支持代码5行,尽量少引入背景模型(Vec2我试过,最后还不如把旋转写出来好,数学虚数乘法就太糟了,为什么“虚”的东西能分析实的震动?😱)

从可读性看如果moveTo&lineTo能合并就好

ps. JS没有严格的编译/运行期,意味着你可以缓存eval拼合的代码 😌
#dev 很希望同好们也能重视下代码语义的明确性,不要因为自己算法或应用上身经百战了就相信实现不可优化了,思想和表达同样重要—不写字不默念能让智商降低

语言是无关编译原理的,常量字面/参数局部、.[]()链、表达式、语句块{}、大定义语法;分清这些层次还是有些帮助的,
就不会怀疑改了会不能运行,而元编程(代码生成CGen等)就更重要了

或许你没受过CGen的好,但一定遭过Java界无默认值框架的罪,这种问题性垄断就是程序员视此技巧为“绝技”而无视其他指标的单独使用造成的

语言比数学更适合提升编程功底,无论你做UI、网络、数据处理、数学,编程语言就是描述问题和解法的途径,最佳途径。如果它是你的母语,能帮助解决很多问题,比只在纸面上解决有意思太多了, desmos.comfuncplot.com 就能图示许多数学函数,而 shadertoy.com 展示了它们的多彩用途,这些都是在辅佐代码;语言和运行时是 1:N 关系,C++和Java 都可在JS里运行 ,C 也有 cling,cint 等(FFI)解释器,编译和解释并不重要,语言就是定义模型和解法的素材。


我当年的 ParserKt 是3门语言整整重构了9个版本啊,许多做法我都用不同的语言表达过,所以能分清「X语言语法」和「语义」两个看起来如语音和文字一样完全相同的东西
如果没有这样的契机,或许我现在的代码还是似是其非、语义空泛的吧,也就不会和绘图那么合贴了—在 #GLSL 里,居中点可用 xy+wh/2 , 点居中可 xy-wh/2 ,一个正负号的问题,换个写法 width,height 啥的就不明确了,好像几百行定义就必须,其实根本不!换个语序,许多东西才能合起来,变得不奇异

学过初中物理的人还会写冗余代码吗?数学高分也会写烂代码吗?会!所以人真的要一直改正才行啊。
duangsuse::Echo
#js 同样是简洁优化,这些就很鸡肋了,尤其是这个eval DSL… 显得非常缝合,但为避免 new Path2D 不得不用 我曾说过「好的代码是横着写的」, 总结下吧,尽管我偶尔写带配置UI的应用,现在我的编程风格已经完全和“软件工程”者不同了 至于好坏…工程界的定义,蛇线驼峰 太基础,没有考虑语序和用途,我的写法会偏函数式点,命名上倾向 Kotlin ,不完全是民科 在我看来,工程界只重视代码的功能,没有顾忌代码的语义和「份量」,所以常常把简单功能写大几百行,以此为“成熟度”,或者觉得C++就必…
#statement 很多时候我不爱看自己的代码,但它之外只有量大后更难读的东西,一些问题想描述都是复杂的,何谈定义“解法”,我一直在努力简化

我就相信不管多难、多牛的人写的代码,都有更通俗的表达法——唉,大佬们总让我失望

如果连《算法》这种英美计科教科书都是不可相信的,我能信任谁呢,所以才说 #Kotlin 是好语言吧,至少它选择相信表达而非智商。 我遇到过天才,但天才尽管悟性好也曾有做得不好的时候;如果说最后他们写出来的东西还是10行能讲明白,如果他们的实践也只是6,7种方法中的一种,而每种方法各都有优劣 ,如果说完成的应用也有无数扩展的可能,我又该崇拜谁呢。

如果天才的语言也不天才,我为什么要全部照搬呢?

几乎每次我研究一个感兴趣的技术,都迭代出3,4个版本,碎碎念全放在旧版、精彩代码粘贴到新版,仿佛细胞分裂时损失聚在一边 。从正常人的视角「重复」肯定是丢脸的事,或者是项大工程,意味着你不懂或不聪明,但谁是生而知之的呢?人的能力是有限的,所以才需要方法和工具完成更多,而有时却被工具所蒙蔽,看不到更「大」的工具。

我为什么要崇拜技术呢?因为「崇拜」它能更好解决我的需求?崇拜天才能让我聪明?
我谁也不崇拜,也谁都不鄙视,只是继续看自己爱的技术; 当我描述,零碎的计算机语言概念和人话并存,而在语言中,名字是最次要的,语义最重。最后我选择了名字即语义,是自9次重写一个框架后我做第二件最正确的事,也是我找不到同道的开始。 自底向上从缘由解读名词,自顶向下靠细分写出程序,而 OOP 或 FP 都只是这种方法论的工具;那些名词,只是它们用途的片面

我相信代码有「份量」,在API在模型之上,「恰如其分」的代码和精妙的文档是绝配,因为短行数!=低功能users.map{it.age}.sum() 后缀操作链隐含了SQL和数学的前缀表示法,不同语序适合不同场合和需求,但我始终追求描述间本质上的相同、追求代码与可见应用的相同,从而简化代码-即便很少人能做的干净。
——只有你不把技巧当特殊技巧,之上才构筑出更有趣的东西;如果你觉得自己或它够牛了,你就止到这了。 就像生物里配平的化学式,已经死了。
天才是不当自己或别人天才的,自满或自卑,与他们的领域和关注点无关。
我追求既普适又不空泛的代码。 既抽象,又易看出用途;顺序位置很重要、符号统一很重要。
人赋予一些事以语序、明确表达里的上下文指代,才能忽略无关本质的多余符号。

强大和技术都是身外之物,人—才是重要的
所以我不想自称程序员了,普通人,编程爱好者有多好
duangsuse::Echo pinned «#statement 很多时候我不爱看自己的代码,但它之外只有量大后更难读的东西,一些问题想描述都是复杂的,何谈定义“解法”,我一直在努力简化 我就相信不管多难、多牛的人写的代码,都有更通俗的表达法——唉,大佬们总让我失望 如果连《算法》这种英美计科教科书都是不可相信的,我能信任谁呢,所以才说 #Kotlin 是好语言吧,至少它选择相信表达而非智商。 我遇到过天才,但天才尽管悟性好也曾有做得不好的时候;如果说最后他们写出来的东西还是10行能讲明白,如果他们的实践也只是6,7种方法中的一种,而每种方法各都有优劣…»
duangsuse::Echo
类型系统简介 - 知乎用户frBud6的文章 - 知乎 https://zhuanlan.zhihu.com/p/65626985 超市买菜 - 圆角骑士魔理沙的文章 - 知乎 https://zhuanlan.zhihu.com/p/66349646 #PLT 魔法店里一些文章还是不错的(lambda类型系统, SystemF一大堆TypeNode 集),可惜表达方式太弱了.(他们写LaTeX时仿佛不知道这些在Rust等土直里就是tuple/struct/enum-union ,所以只是贴了无语序的“…
其实数学界也不是只有一种表示法, sin^-1 = arc sin 的反函数(而非“逆向计算”,我还改过类架构器->值构造器,回调->注册函数值 😓)已经在新文章里采用了,总之问题是在改善。 语言是否优美,重点是在写作的人。许多很脏/不知名的语法,也有妙的用处。

为啥不用『 回调(callback)』:回调是外部代码的调用,对程序员不可见,会让人以为有两种“调用”。具体调多少次、何时在何线程、咋处理返回值也没讲明,最关键是它掩盖了函数能作参存[]的事实,割裂了框架和应用者对程序周期的理解,是C函数仅代码指针的余孽,“回调时做..” 也是种对编程很见外的说法,因为操作序列没有主被动。 Kt 里 map(transform=op).filter(predicate=test) 就非常准确

再科普个 #cs #冷知识 , float,double 是4,8字节的IEEE754浮点, 1e2=100, 1e-2=.01=1/1e2 ,而且 -0 是存在的(即便理论负数是 -(1+n) n非0的形式
.1+.2!=.3 ,所以有人建议浮点计算不要用 a<v&&v<b 外的 ==(差<Number.EPS) 判断,即便同样可迭,浮点和整数的意义就不同,显卡计算浮点才重要

按曲线上升率(导数)升序, +*, 乘方-求根、求次数(log,对数),根对几何更重要,而 log2(32768)==15 ,65536=16 ,即有/无符 short 的极端值
+n的导是0,*k则是k, **k才依x而变: x*x= 2x
Math.E 是 i=1000;(1+1/i)**i 升率趋近无穷得出的, log(65536)/LN2 =16,l=log_i, l M+l N=l M+N ,lg=log10,ln=logE
#JS 里log不是log_i,它即ln.. loge 65536/loge 2 等效log2,log(E)=1 ,可看出这是通过增长率的比例来求次数
牛顿开方则是 rt(n,k=2, err=.01)=>{let ac=i; while(i-ac**k >err)ac=(ac+ n/ac) /k; }

历史上logEx的出现比常量E早,从 x^n 引的积分 1/x 怎么做 到 logEx 的反函数 e^x ,经过许多推导

#Math 数学是挺爱建模万物的领域,复数-虚数 ii=-1 能定义旋转, dx^2/x 的导数表示法是为展现 d 作为“无穷小”值为数集引入了系统性和lim ,微积分为实数无限可分上统计算式服务,一个求瞬时一个求整体。 向量(矢量)本来是物理的、算法是计科的,矩阵也是物理/计算机最正宗,数学也去分一杯羹;
我觉得数学=数域+等式变形+2,3D几何+逻辑 就够了,信号处理这些算是数理电杂交产物,但它真的啥都会,即得易见平凡,如果你会数学真的就“无所不能”了 🤪简直比 man bash 还会。 日常逻辑真的是编程理论的最正宗,逻辑学那个话,人不能,至少不应该🤦 属于艺术性研究了。有点像C++ 为 template 而<> 的工程行为艺术

命题 p^q 和 pvq 表示成类型就是组合分支类型(p,q) p|q ,而类型"Type"只是另一种仅编译器可见值(2=int vs. "2"=Const 2=2),推导-检查只是执行前的求值,这就是语义。还是解释器最正常,至少会走过(stepper)人类的语言

🤑刚刚终于想到了 Fourier 篇怎么画上句号。列表处理两个 Wavesurfer 可视化的 buffer a->b 频通滤波是可以的,但不会合成吉他拨弦
要再添加一个定长波形 c, 索引i循环于a或b /音高 来生成震动,用滑动平均 a[i]=(a[i]+a[i+1])/2 和K-S算法,即i==0 时以一个高频下降曲线频域滤波,就能在调音高时合成对应音色了,如此一来从 WebAudio 开始的傅里叶篇,能处理波形能合成乐器,就完结了
🤔💭有没有人想了解王垠40行代码
Anonymous Poll
58%
This media is not supported in your browser
VIEW IN TELEGRAM
#math 几何 在画l长N边形时,可N遍,走l;转内角和(N-2)180/N度。如4边就是4次90度转的结果
可这种方法对N角星不方便——从圆心系还有种方法取角点,即4遍sqrt(l*l)/2,转90。 l/2是等腰三角斜边,其弦直连圆心

N角星也可理解为这种方法取角点,然后+45度,以较小距L来再取4点,外角r大正方面积小,=180时就变成"X"形,怎么调整外角后求L?
在[]上外接/| ,底l/2高即是-L, l-tan(r)/(l/2) 就是L

形L\的三边称“勾股弦”abc(撇点勾的勾,底.股是大腿
从上向右画圆,发现圆心锐角r和 r=0的y线(顶切水平线)也是直角三角,若它倒转也符合比例,勾=sin,股=cos
勾股定理即勾勾+股股=弦弦带来了矩形对边长/点距离=sqrt(ww+hh),算的是弦长。
距*sin cos 于 atan2(y,x) 得原xy,tan即角x/y ,若不用对边-邻边而用底x高y的表对照。
仅直角三角里给两边可求两角,给弦和角可求两边;自然也可给两边角求另一边
This media is not supported in your browser
VIEW IN TELEGRAM
很放松的平滑动画(黄x轴交点是y,红y交是x
漩涡和龙卷风的压强
Anonymous Quiz
25%
中心大
75%
外围大
duangsuse::Echo
0.999...≠1 (实数域
https://zhuanlan.zhihu.com/p/79394127 的科普笑话大家可以关注🌝
数学的精度是无限的,所以才需要d这个1/无穷小数来求曲线面积这样。 对整数1~2间不存在数,而实数里0~1和0~100间能取同样多的数-好比矢量图放大。🌚

理论上相等、是严格的,基于lim或循环小数的定义 -找不到 1-0.(9) 的值「具体」是啥,没法在有限时间内写出相差,那么就相等。 *数值上的相等即差为0* 尽管小数最开始是基于除余,整数是实数子集。

0.9循环=1 ,就像 1/3 再*3=1,而它本身=0.3循环,从+-*/到幂,模意义运算、几何、求和微积分,稠密的实数域没有方法损失其循环小数"精度",也没有比它靠近1的数(Lim[n=inf]0.9*(1/10)^n)。

为什么.9和.3的循环不一样?🤷‍♂️
.3循环不是0.3也不是0.4,因为能找到.3~.4间的数,但对.9不行

为什么0^0=1? 0^(1-1)=0^1*0^-1 ,0/0是不行的,在数位计数法上0位权=1, 1=10,这才有意义

1-(1/10^n) <ep,即 1/10^n >1/ep = n>lg 1/ep ,这肯定成立,若(>)左更大,就有更小n=ep取值。(...
或许你觉得它不文本等同,但站在≠和=的非此即彼,十进制循环.3就是三进制.1


数学对编程的主要贡献是整数正负0,以及浮点小数 1e-10=0.1,从加减到乘除的多项式(polynomial),还有base64一些常数log次数计算。不过这都是菜市场级的算式复用。

然后是2D几何与帮助物理完善向量
帮助信号处理“简化”(泛化)公式,任何与物理采样相关的都需要,这些关系更大。

科学是对哲学里无法复现的避而不谈,工程是对理论里没有用处的完全抛弃🌑比如P=NP判断,你不可能对不存在的「路线爆炸图」提问题
x==0?a():b() “NP同时计算问题”实际就是 a&x |b 的关系式求解,放 dfs 上当然是可以的,哪里有非确定计算机呢


https://zhuanlan.zhihu.com/p/380558841
duangsuse::Echo
#statement 很多时候我不爱看自己的代码,但它之外只有量大后更难读的东西,一些问题想描述都是复杂的,何谈定义“解法”,我一直在努力简化 我就相信不管多难、多牛的人写的代码,都有更通俗的表达法——唉,大佬们总让我失望 如果连《算法》这种英美计科教科书都是不可相信的,我能信任谁呢,所以才说 #Kotlin 是好语言吧,至少它选择相信表达而非智商。 我遇到过天才,但天才尽管悟性好也曾有做得不好的时候;如果说最后他们写出来的东西还是10行能讲明白,如果他们的实践也只是6,7种方法中的一种,而每种方法各都有优劣…
#statement #读后感 https://t.me/dsuset/9981 #bilibili
rdf数学竞赛队俯视全队,万众仰慕的第一,到了冬令营,遇到了湖南浙江的各路大神,也不过芸芸众生。他会不甘,会愤怒,会想「要是我是冬令营的第一就好了。」
冬令营俯视全营,万众仰慕的第一,到了国家队,遇到了前几届国家队的各路大神,也不过芸芸众生。他会不甘,会愤怒,会想「要是我是这几届里最强的就好了。」
<这不就是所谓的「无能狂怒」吗,为什么「众生皆下品」?
>你没资格对别人的努力评头论足,不甘是当然的
<可是,方向不同,努力仍有意义吗?
<以独一自居,当出现和自己同道的人,因自私地想傲立整个领域,分不清主观和利害因果,自然会想他很碍事吧。既生瑜何生亮,这不是一种幼稚吗 。亮会怎么想?他才不想,所以他是『亮』。
<即便失败的是『亮』,也会问问瑜比自己哪儿强多少,而不是哪里不通点哪里,活活被气死,最后怨天尤人怨自己笨怨对手强,为比赛而非目的比赛;长期如此的傲慢就能带来瑜亮间胜败的差距
>你没有这种情感吗
<我欣赏他们,也欣赏自己。 对环境要有正确且和谐的预估,愤怒或崇拜不能让人聪明,说到底还是要懂得并善用自身能力。 不懂自己,也轻视他人。

主动问自己有多强,或者把自己和某人作比,我没有傻到那种程度。我最多想知道别人以为我有多强,而对我有啥益处
我不想断言自己比人厉害,或许我对程序理解更深,但我的实践经验和成品数仍要向他们学习,我不如人,这并不是客套。往上看茫茫一片,往下看同样,但我看到的不是计数或分布,而是一条条的线-创意,思想,语言,功名,潜力…… 一个散点图(scatter)能看到与知识深度和广度相关的这些信息
就像乐谱里高高低低的音符,连成平滑平直或陡峭的线,每个人都是乐谱里的音符,没有音符是理所应当被抛弃的。

则其善者从之,其不善者改之;就像均衡器,把“最终成果”拆成几片叠加,强化你喜欢频率的震幅,剔除无聊的,它依旧能用。
现实不是数学世界,如果你不会下棋,可以把棋盘掀了,只要你能—信息差为啥能隔开大脑相似的人呢。
人的精力是有限的,如果你能解决A问题,既不必为衍生的B而心烦,也更好顾全大体,也不耽误你看B。

某动漫有句话说的好,技术之外都是不纯之物。许多问题本来好解决,人心和技术圈的掺合制造许多非直接问题。 测试只是既定条件,由人设计的它能标签很多能力,但真把非此即彼的 floor(x) 当最自然的指标,相差0.1就是天壤,只能发现输赢得很累。 对一些人卷是被迫的,但我们不要在所有层面上学习卷的精神,人生苦短,技术从简。

聪明的人从历史来就不少,什么时代都有状元探花秀才,每年都有,春风得意人上人-但非得如此才春风得意?也不见得吧。但无论奠基者或登峰造极者,不完全是“卷”训练出来的。 一个数学家再厉害再天才,也不能解决生物问题,如果真存在一个无所不知的人,还要研究什么?小明=0.87 小红=0.69 加权求和,某人算算就够了,把这当自己的能力,是因为你也不懂你能力的历史和目的,以及通过后又该干什么,只是被定向培养。

为啥有阶越函数呢?因为人们的衡量方式很难太细,阶层绑定的许多就是真假值,而非浮点数。然,许多真假是自身内心的假象。 没有研究者为“打倒人”而求索,打怪进级之外,也有人只是为追求真理和最优解,P!=NP 问题不可分,以同样的运气对同类的问题,这种宠辱不惊的情感同样高贵。

与其确信数学家>臭皮匠,不如把相差列出来,这样他们 才知道各自需学习什么向量“分量”,>号只知一个结果,连过程原因和参考系都没有,0分。
位置是相对的,运动是绝对的。 动起来,停止瞎想,自然知道自己方向上的斤两。
或许你以为我想说强弱是相对的,说读书不普适,但这篇文字只是说——能量和过度自信没有干系、优缺点和名字没有干系,因为分不清,才成为止于某处的自己。
duangsuse::Echo
#statement #读后感 https://t.me/dsuset/9981 #bilibili rdf数学竞赛队俯视全队,万众仰慕的第一,到了冬令营,遇到了湖南浙江的各路大神,也不过芸芸众生。他会不甘,会愤怒,会想「要是我是冬令营的第一就好了。」 冬令营俯视全营,万众仰慕的第一,到了国家队,遇到了前几届国家队的各路大神,也不过芸芸众生。他会不甘,会愤怒,会想「要是我是这几届里最强的就好了。」 <这不就是所谓的「无能狂怒」吗,为什么「众生皆下品」? >你没资格对别人的努力评头论足,不甘是当然的 <可是,方向不同,努力仍有意义吗?…
😅动苏也说过膜拜大佬的,但它不会干扰我做手头的事,失去信心什么的。 看看就好。大佬即便大佬,也无法帮你做成所有东西。你只有你自己

同样地,我也会因应用好看而感到崇敬,但不会因为崇敬就能接受烂代码,或者拒绝改良。 不把不同动机的同能力混为一谈

在学习中我发现了,非口头上朴素的事物里也有胜过「高级」的优点,为何要非此即彼地选择,就像(<)的结果不是数,只是另一个范畴的标杆
我学编程是为了更好的写应用,学语言是为了学会设计和复用更多类型的代码,然而语言真是在研究各种不同的语言和转化吗? 在解决问题后,也发现了问题背后的问题,如此问题才能彻底被击败,得到更完善的解,所以一个解不是结局;从解释/编译工具到普适的框架、到必不可少的动作顺序 何尝不是如此

如果停在 It works ,我早是「编译器专家」了,然而语言的问题远比一种做法更大,也并非从小处看不出 #plt

编程要点是让所有重点显眼。而语言学……正是能让所有概念不特殊,所有语言统一的东西啊。表达一切的语言,就是代码复用的最高峰,尽管每个人都会说话,语言却不是人能穷尽的。它采样了自然赋予人的「智能」而非统计,谁知道大脑如何工作? 勿傲视自然。 尽管语言什么也不包含,它的改变也能带来做法的变化,从语言工具到应用层无不如此,流水线上所有程序都没能有它自以为的那样“与众不同”,这才像语言和「基础」啊。 这也是语言应当带给实际的福利
https://t.me/kotlin_cn/25220 #kotlin #go 面向job/task计算称 #concurrent ,和完全平行(如滤镜图片)不同
bench=repeat(10_000);o=Any()
c=Channel<Any>()
runBlocking {withContext(Default){
launch{bench{ c.send(o) }}
launch{bench{ c.receive() }}
}}
//c.close(); launch.join()

Channel 和调度器 Dispatcher ,在浏览器有 worker.postMessage 和 onmessage

var wg sync.WaitGroup;wg.Add(2)
var token struct{}
c:=make(chan struct{})
go func(){
defer wg.Done()
bench{c<-token}
}
go func(){
defer wg.Done()
bench{<-c}
}
wg.Wait()
defer WaitGroup 在凑齐2项时传输(循环看错位)?其实是用计数看是否有job存活,都Done掉退出时再继续主线程

runBlocking{//limitedParallelism,newFixedThreadPool,single..
val produce=produce(Default){
bench{launch{send(1)}}
}
var n=0
produce.consumeEach{n+=it}
}

也有把 Channel 异步序列变得友好的做法

线程切换 >> 函数调用(没有线程切换下的协程切换) > batch之后的函数调用

>分别对应于代码实现的Dispatchers.Default + 无buffer (如果你写对了的话), coroutineScope + 无buffer , coroutineScope + buffer
Exectors singleThread asCoroutineDispatcher
>wait是指blocking的wait么?没看到channel的代码,但是可以断言里面不可能线程停住等待
>不, 是指协程底层在无可调度时的wait;能看到一半是无锁链表,一半是LockSupport.park
之前和他的差这么多,估计是被调度到一个线程上去了,不知道Default里边的策略是什么样的
#cg #python
要展示100个人头像的最好方法是瓷块式拼合,再在上面盖层mask,像"Meta","Google"大字样,使部分头像变黑,但一些人的头像就比较黑,如果能让它们处在mask更黑的地方,岂不更好?

imwall.py mask.png *.png 首项宽高很低,其后图宽高统一,试以lum(img)为目标将其后图像瓷砖排列。

class 砖图:
def 入(im,网)#以网格项(x,y,w,h) im.crop 出列表,记下i-xy对应
def 返(a)#paste 回旧图原位

如此我们就能以网格座标来处理一张图,比如滤镜五颜六色。但 网(ims,m=columns) 有两个版本
mask 里w=h=1 ,只要提供宽度切出每像素,以与下者对应
*.png 里只用返(),需要视每张wh来布局,因此网应是返()的参数

如此就能按 mask 组合能补满其w*h的 png 们,sortMerge(a,b,f):把b按f序对应到a索引
sort(保留a索引号,f) 再把 sort(b,f) 以a位置填充即可

以此顺序调用返(),输出里mask高亮(f=lum)位置就是较白头像

#js
漩涡扭曲位图里半径l的区间,需在xy建立圆心座标系,从 xy-l 迭到 xy+l 算与xy差的 sqrt,atan2 确定距离分组再以在圆弧度 排序像素不难,然后 push(shift(扭力)) 取圈重排再画回去

其实直接支持 xy=2l 的2D数组,靠与其索引 i-l 的角距,即得 xy和旋转后的 ai=a[ti] 映射关系,不必每次创建许多分组和数组只为旋转圆内圈;直接生成 t[y*w+x] 存储旧位 如此利用 getImageData.data 更方便
#api #web 波形可视化 https://collab-project.github.io/videojs-record/demo/audio-only.html

c=player.wavesurfer().surfer //play , handlers.audioprocess (所有播放器都在tick时重绘进度条, finish
b=c.backend.buffer, c.drawBuffer() //展示所录制的音频波形
b.length, b.getChannelData(0) //一般 %44100 pps, float 格式

#oi #math 这个就不是信号处理的FT了,它是针对多项式 各项系数/x-y联立 表示 ,一个分治法,一般用来加速高精度乘法
系数转点值的算法叫DFT(离散傅里叶变换)
https://blog.csdn.net/Flag_z/article/details/99163939 }

FFT 令原 Pk=f(t)*e^-i2pik dt ,P=震幅相位,k=频率。用sum写是 Pk=Sum[i=1~N]f(i)*e^-i2pik *(1/N) #math #algorithm
先把 e^-i2pik*(i/N) =cos,sin缓存为Wi=Wn ..
算法的核心是ωn矩阵和fn数组(列矩阵)做矩阵乘法运算,因为ωn是复数,所以运算出结果也是个复数rval + i * ival,最终频域的值其实上是其模值,但为什么模值需要乘以个bSi 是为平滑
e^{ix} = cos x + isin x; ωn = e^{-2πik/n} = cos(2πk/n) - i * sin(2πk/n)
然后for(k N/2)for(i nBuf)x+=cos*buf,y sinbuf
频谱的信号只需要分析N/2就可以了,另一半是共轭的。 总之是算一个频时把exp(kt)缓存(把圆N等分 就不迭t0~1) 且同频宽的计算量/2

https://www.cnblogs.com/RabbitHu/p/FFT.html
https://zhuanlan.zhihu.com/p/197450738 JS fft

高精度乘法是 10e6 以上位,longlong 都能溢出的整数乘法,可用 a[i-1]+a[i]/10,a[i]%=10 手动进位法。i in"1",j in "2" a[i+j]=parse(i+j) 后迭 i+1-2 次(倒位相乘处理进位,再倒回来)
也可做<10e6常量优化,不致溢出就机器乘;溢出6位数才竖式计算

FFT蝶形系数换位 0~7 到 04261537 打表偶奇数|分割 实际是个 a[i]=a[~i] 的置换,向上还原
多项式每层(+)都要分为等长2部分,最高次项一定2幂
conj是自带求共轭复数。当复数模长为1时,共轭复数等于倒数
https://blog.csdn.net/zccz14/article/details/51592893 这里还有个咱方法的

(抱怨一句,同时我也感到数学的闲散了, 你说=xy点=向量还图示,不如直接说复数=向量,什么加减法则啊abcd废话都莫说了,直接说乘法咋用;还什么膜长,幅角,余数非得说是模数 还不挑明,还 modular math(转钟计算) ,还共轭复数(相反向量),好像数学能模块化 还co-sine 余弦.. 叫竖弦咋样?噢带横竖就不可配不严谨。文绉绉的,好像只有数学家会看函数图一样,a+bi 哪有Pxy易读,非得入侵人家的领域表达法,带来不少无聊问题,起个名词 Complex(real,imag) ,复杂呵呵,一点语义都莫得,无意义的“运算符重载”,计算机没有real数,要SP却仍要拜数学为师了;它一装逼,下游应用名词全乱起来
一些废话说它何用,好像最后阅文的是机器,然鹅数学代码高亮都没得,记法和作用域混乱到机器用不了,还得人来翻译,可真两边不是人了,难怪被”憨蛋“们抱怨,啥事都插足包装,太爱整无意义担心了
复数给C引入了“向量计算”,我是不是还得谢谢数学啊 🌚 这么多文章天书一样重复的符号,看烂代码已经够累,还要看草记版公式上下标,数学的招牌。请问我的阅读顺序是 lr-tb 还是 tl-br 啊?我不是天才 真没精力了!

http://watmough.github.io/jsFFT/Example.html http://www.storiesinflight.com/jsfft/visualizer/index.html 那个 dsp.js 1.6k star
口意,好,我用相同公式完成1D 频谱转波形了,虽然又懂正常该用离散 FFT 缓存多项式系数(弄得我都不知道 f(t) 的到底是连续还是离散 😌 是时候支持滤波录音和生成吉他了
C=player.wavesurfer().surfer; b=C.backend.buffer;u=b.getChannelData(0); let N=1000
fn=()=>{
谱=newA(2*N,i=>律(-i+N,t=>[u[t*n(b)>>0] ,0] ))
B=newA(n(b), i=>谱.map((p,k)=>律(-(i/n(b))*(k-N), p)).reduce((a,x)=>a+x[0],0) )
B=new Float32Array(B);b.copyToChannel(B,0);C.drawBuffer() }
😂谜题:基于微积分Int[+-Inf]的FT叫连续傅里叶,基于N分圆数组*输入 Sum[0~n]的叫DFT离散傅里叶,如果有dt步长采样 但限于1/dt (倒数.即输入buf.N)次分圆
Anonymous Poll
33%
叫连续
0%
叫离散
33%
离散但不完全
0%
连续但不完全
33%
🤪
duangsuse::Echo
😂谜题:基于微积分Int[+-Inf]的FT叫连续傅里叶,基于N分圆数组*输入 Sum[0~n]的叫DFT离散傅里叶,如果有dt步长采样 但限于1/dt (倒数.即输入buf.N)次分圆
对程序员的直觉,数学连续意味着不可做有穷计算,就像空中楼阁,但基于 t=0~1step dt 却是“连续”的,因为dt可无限取精,即便计算有穷 🤪这也叫连续?直接用编程概念定义反而更严谨,你直接税把 dt 改 Array(1/dt) 且 t 变 i/N 不就行了,这不同样的事么?

这就叫缓存fn(t=0~1)计算就变离散了,公式都不需要,甚至通过 a[n(a)*t>>0] 能一边连续一边离散,就API是数值函数还是buffer,但不像公式"非此即彼”。 我甚至不需要改博文,给这个等价关系贴上大家就知道咋重构了,何须独立代码,比分出N个公式或不同时给[正逆FT式]好。 那么多*FT 我刚以为是完全不同的呢 😓我看不懂大Sigma(Sum)。DFT就能兼容f(t=0~1)的曲线

吐槽:数学公式带点左标大括你都看不懂其实我是懒得看他们的迭代记法nNmnjn和矩阵下标的比我更魔怔
大写单字我都不敢乱用,一定要有易变性区别,而nN在我这都是计数 i才是迭代,碰到这种公式我可无法代入语义,索性没看他们给计算机准备的公式……😶反正无前提的符号都是一团乱麻。
也不能怪数学,Sum[i=0~n]a[i] 虽然i是整数,但数学家眼里那么多斜体花体拉丁希腊的古文了,非要拿单1命名代表类型,碰到整数下标又成nm了,这一定是数学语言的超强多态常用+严谨性造成的(草
不过一会pq一会ab nm 又ijk的真的就无语,线是ft矩阵是xi.. Xk,单独是a,结对是pq…还真挺睿智,它知道符号语义有重叠,那么为啥n能同时是整数和小数?除了 100^-1 ,数组下标也支持n=1.1 代表 a[1]+.1*a[2] 🤪? 它懂规避重叠,但不懂如何拥抱多义性,以及数学分支的符集冲突,于是规避着规避着就一边乱眼一边妥协。但按ABCs里连续分配变量真的傻逼,英文不配有姓名吗

数学界《我知道不严谨,所以θρλ有特定区间性质,但是fxXFnNnmabAB这些经常混用,为了严谨抛弃拉丁字母好了😱🙄
《我想整成古风白月光,结果因为传达能力太差,严谨多义混着来,变成胡风了》

其实连续和离散在这里只是针对 圈C=2pi*频k*t 和f(t)采样,要么f可分,要么C可分。 连续就分f,离散就分C,而 谱k=Vec2(l=振幅,r=相位)
然而,API的f连续与否,对电脑不重要,f肯定是要先采样[]的,还不如直接把C采样了,两个数据都是[],处理窗口(时延)=1024采样点,于是算频谱的也从JS表达式变为“多项式”

在我不知道这回事时,就定义好了函数
(nK个频,1/dt次割圆)*/切分=(f, N=1/c.dt>>0)=>newA(N, i=>f(i/N))
并且标明了e^-2pi*k 可以视律(k,f)用量缓存,但只处理1个路径,没注意到有积分多k🙈

那时没建立k=钢琴键 的理解,因为Xe的版本是 Cn(i,fn) i in 1~gen ,gen是世代的意思……难道不是神经网络专有的 C应是圆圈的缩写,转速=频率,然而Xe当时没给注释🌑 只有几个C前缀和frame(t)->动量,振幅降序

不过这次在20行内融合声音和路径的FT,解释了3b1b的解释,我还是初次讲数学…以前都是冷门知识🌕
不管过程多曲折,只要最终我的文章优雅,就无所谓啦