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
👆 #ai #cg 使用特殊相机拍摄 5cm 8439 张并以AI拼合,整个文件5.9T,一个像素比血球还小。提供了一个Google地球式的web查看缩放

#android #hardware ,UEFI
Eric, [2022/1/22 下午10:20]
什么时候才能普及运行可以由用户审查、修改、替换的第一阶段引导加载程序的计算机?
封闭的固件导致难以发现和清除的恶意程序,这是行业应该反思的。

事实是,行业不但没有反思反而变本加厉,从所谓的「安全启动」,到完全锁定的引导加载程序(在移动设备上很常见)。所以这可能我有生之年都看不到了吧
Forwarded from Solidot
黑客将恶意程序植入到 UEFI 固件中

2022-01-22 20:06

卡巴斯基研究人员 透露了植入到 UEFI 固件中的恶意程序 MoonBounce。该恶意程序被认为来自于 APT41 aka Winnti 或 Double Dragon。恶意程序修改了主板上名为 SPI flash 的元件,它不在硬盘上,因此格式化硬盘或更换硬盘不会清除恶意程序。修改后的固件镜像允许攻击者拦截引导序列的执行流,引入一个复杂的感染链。研究人员认为,黑客对 UEFI 系统的工作原理有着深刻的理解。感染链只在内存中运行,硬盘上没有留下攻击痕迹。黑客主要对 IT 行业、社交媒体、电信、非营利组织和医疗机构进行攻击。
元宇宙 #Haha 极其声草
https://zhuanlan.zhihu.com/p/460537291 宠物 人
“ 可是,猫主子的地位,是如此的虚妄。血猫产业的存在,恰恰因为所谓猫奴对猫主子的爱是有限的。他们可能会花几千块给猫主子输血,却绝对不肯花上几万乃至几十万去说服别的猫奴自愿带着猫主子献血。
正是这种供求差价区间的存在,导致了血猫产业的诞生。一只吃着三文鱼长大的高贵的猫,随时可能因为猫奴不愿承担成本,而一夜之间沦为流浪猫,最后变成血猫。

就像曾经高贵的奥托.冯.哈布斯堡,在被奥地利驱逐后,流浪到四十岁才有条件结婚。当一头猪盼望着成为猫,或是当一只血猫盼望着成为猫主子,它们自认为这是一种阶级跃升,其实在人类眼里毫无意义。
杀死一只猫比杀死一头猪,或许心理成本略高。然而一两千块钱的利润,就足以让人类克服心理压力,以杀猫为职业。
#plt 呃,这几天眼睛有点疼,那个网页重构也接近尾声了(目的就是交个PR),马上把雄狮扭眼的”热度蹭完“,我就能开始二进制pybind了 ……但是到2月我就必须开始制作一个H5动画礼物,以现在这个效率…… (而且之前说的 Java 入门又鸽子了,尽管对话框和离线javac的问题解决,其他内容还是需费精力

说真的我没一次蹭上国内热度,因为每次都是我趁机学了些”没用的“(比如彩字符画、粒子动画、MBR程序、C指针和数组啦),然后数据不好看 😂
这次也是一样,我用shift重映射圆心距l=1~len 环上像素的方式扭曲一块矩形,这个方法是我自己想的(思而不学(我刚刚上网搜了,没写我这么直白的…… (Android.drawBitmapMesh, web没内建不规则变形)
类似 http://deepred5.com/oppai/ , http://www.htmleaf.com/Demo/201909185795.html (woc dat #gui )这样的。 #Vocaloid 爱好者平时爱看的2D骨架变形是这么做的。
不行这个Grid2Fullscreen #cg webgl实在是太厉害啦 (原作 https://github.com/Anemolo/WebGLDistortionConfigurator . barba.js.org/ 主页动画也很有趣..

它们的原理类似三角形贴图: Mesh=小网格缩放到图片,其上控制点可以移动,相当于小三角在翘曲,例如全向手指位靠(圆挤压 fisheye/pinch C#)
https://blog.csdn.net/lufy_legend/article/details/8084367
当然啦, GLSL 10行内基于笛卡尔座标系() 实现圆的变形是很容易的
https://www.shadertoy.com/view/XsVSW1
翘曲(k=3)
l=length(xy),r=atan2(x,y); //圆心座标<=>直角
l=l*l*k; 放大 //sqrt(dot())速率试试
l=sqrt(l)*k/1; 挤压
p = l * vec2(cos(r)*0.5, sin(r)*0.5);
//xy就是p的新位置

甚至 p *= length((p-mous)* vec2(w/h,1)); fragColor = texture(iChannel0,p);
vec2 p = center - uv ;
float d = length(p),
factor = .5 * sin( iTime ),
f =d>.5?0.: exp( factor * ( d - .5 ) ) - 1.;
fragColor = texture( iChannel0, uv+ /*normalize*/(p/d) *f);

算下距离都能做到同样效果(就是我实现漩涡扭曲滤镜的原理

如果只是圆形其实并不困难,重要是在符合直觉…… (啊草
a:数组,x:项,k:键,q:真假,d:{}表 #code
let a="run (\\f x. (+ (+ x 2)3))  (f 1)".split(/([()\s\\\.])/g).filter(s=>s.trim()!=''),i=0;
层=(tk)=>{for(let x,q;x=a[i];){i++;if(x==')')break;q=x=='('; tk.push(q?(x=[]):x); if(q)层(x)} }
glo={run:a=>a[a.length-1], ['+']:([a,b])=>a+b }
eva=d/*scope*/=>a=>a.values? (a[0]=='\\'?eFun:eCall)(d,...a) : !/\d/.test(a[0])?d[a] : +a//num
eCall=(d,kf,...a)=>(d[kf]||console.error)(a.map(eva(d)) ) //单步规约
eFun=(d,_,kf,...x)=>{let nArg=x.indexOf('.'),ka=x.slice(0,nArg);x=x.slice(nArg+1);x.unshift("run")//解析:切分 //v 名值表允嵌套
d[kf]=a=>{if(a.length!=nArg)throw `bad arity for ${nArg}`; let old=zipMap(ka,a, (k,v)=>{let v0=d[k];d[k]=v;return[k,v0]});
let r=eva(d)(x);old.forEach(([k,v])=>d[k]=v);return r } }

zipMap=(a,b,f)=>a.map((x,i)=>f(x,b[i]))
层(_6=[]); eva(glo)(_6)

调用时才去zipMap(形/实参) 然后解析变量,在运行了KV表仍存在,故称『动态作用域』。 若把 eFun:eva(d)(x) 注意不是微分! 里d.copy()保留,就无需 let old ,且支持『词法域』 just=x=>()=>x, f=just(0/*x是参数0吗?*/) ,若编号变量、独立调用栈,不返回编程(eCall: 内项Promise.all 后才done +-*/)就实现 continuation(断续函数,协程)

有赖于F12 ,在eCall上打断点/ logs=f=>a=>{console.log(...a);return f(a)};glo["+"]=logs(glo["+"])
再次调用 glo.f([1]) ,可以看到计算过程。 Java上用class造解释器同理,只是给 (run ,if, 1/""/true) 的语义(\f. 内是多表达式) 专门建立Node了而已,因为我们必须区分(顶层/函数内) 是”语句列表“而非调用的特殊「语义」(解释器只看语法树,不知”层级关系“,解析信息必编码为此IR中间表式),S-表达式里用x[0]标注足矣。 解析到此”非规范“AST是完全一样甚至更快的

Node和S-expr 一样吗? let a=1,b=2 或 import a.* 应该是S不能表达的语法吧? (= a 1 b 2) (use-all 'a)/甚至变import作用域表 就可以。把x[0]当节点类型即可。另外S的本质(前序算式)可以和后序的+-*/优先链、.[]()左先链 结合,算符后序 按*+重排序

欸,大家也看到我编程风格的变化了:宁可用特殊语法+自己注释也不愿用工程的做法.. 主要是省字数,这里是教程 😅
但如果是省字数却弊大于利的情况,我会写自然点:例如 s.trim()!='' 也可写 !/\s/.test 或 !!s.trim ,这都是有取舍的。我经常对一个表达式改了又删,因为所有写法都不过是茫茫语法树里一片叶子罢了,没啥可稀奇
解析器(同时分词)和树遍历(以栈)、集合类型论+型参(in-out性)与推导、二进制组/支结构、(虚表,双指针)多态/(函外量编号保存)闭包/(值变量归一)解构、伪递归,不完整求值等流控 都到齐了,就差实践经验和CPS变换的协程/序列<T> 不会了 🤔

嘛,但那些大佬也对这些没有帮助。说到底最后出力的还是工程界的各位,明明做过那么多尝试,写文出来还是很精炼,很默默无闻
简单和复杂都是选择。这些之上,才有幼稚和成熟
我会努力追求成熟的简单 因为我是程序员 也是「语言」爱好者

为了传递而简化知识对我来说不是一种开销,而是继续学习的收益

编程的目的不是创造,而是表达早已烂熟于心的想法,不是(示例)代码给你创造力,而是API让你明白能干什么,从而设计出许多情况(地点时机动作)。对于框架不使用的人,他们理解领域概念和低层API(如HTTP/socket-bind,UNIX-ABI/x86) 也能组织程序,而这些程序和其它程序亦无不同,概念相同体现不同 先解概念,就像程序与UI。

识得代码暴露的操作框架总让我们感觉程序员与常人不同,比其他人更懂电脑、能做更多,或者觉得移动和桌面就本质不同,试着理解二维数组、各种生硬结构,而忘了Excel表格里最直观的行1列A、文字换行的先y后x,以及许多代码就是自动编辑几字Ctrl+F的事实。 不是因为我们不一样,而是我们能提出模板

我们总觉得自己不一样,小看那些普通的真理,于是费力解决一个简单的问题,顺带制造更多问题,而把这当成进步。
我们总是崇拜一个偏大的框架和概念,却看不见自己只能利用到它的10%,而其内真正起效的行数是1%,以及程序本身就是由无数孤立、复用的小结构组成最终的“大”产物
过于相信“调用” "类"们的效果、过于相信app是不同于lib的,而忽视了程序语言是语言、程序最终是什么。

许多编程界的流行不是最优解、许多IT话术没实验,而最优解(web,kotlinmp)缓慢发展,与其用技术适用解释,不如用社会心理来猜。

编程和人类的语言是没区别的,也应轻重合适、语序得当、重复得有意义,不重复的有语义。
不是越长越好,也不是1字母就好,如果是套话,不如说给计算机听,它们比数学严谨得更死板;而人类,需要良好上下文和顺序的知识,语言滑坡 就得读者智商来凑,
读懂错误表达,我不视其为能力,更讨厌这种无效智力
duangsuse::Echo
#plt 呃,这几天眼睛有点疼,那个网页重构也接近尾声了(目的就是交个PR),马上把雄狮扭眼的”热度蹭完“,我就能开始二进制pybind了 ……但是到2月我就必须开始制作一个H5动画礼物,以现在这个效率…… (而且之前说的 Java 入门又鸽子了,尽管对话框和离线javac的问题解决,其他内容还是需费精力 说真的我没一次蹭上国内热度,因为每次都是我趁机学了些”没用的“(比如彩字符画、粒子动画、MBR程序、C指针和数组啦),然后数据不好看 😂 这次也是一样,我用shift重映射圆心距l=1~len 环上像…
我太阳,才发现这个别人能发博文的东西,我竟然连标题和名字都没起,试运行成功贴上就pass了…… 这不是在线教SICP(程序的构造和解释)吗🤪 #lisp #fp #zhihu #statement
放到以前我绝对搞大新闻一样,就像之前仿造(但也没成功)Lice 时专门建了项目画了logo,然后文档拼缀别人的,最后模板代码写完不会了 🙈

但说起来,元编程最后也不过是编程。你了解编程语言,很好,但语言只是载体,美丽的、各种各样的应用才是我们的最终目的。
你能写编译器,很好,但也不过是完成了文本模式和树遍历,加上一些理论。 编译器的中/后端分析优化 也是同样的处理流程,也有简单和最优的做法,「编译器」,对这个流程而言并不特殊。「编程」,对代码可变的计算机并不特殊。

就像让语言运行(尽管一些没执行序)于计算机的工具,也竟只不过是种应用,如果你了解可复用的前缀解析器:
#js #code #parsing
feed=(s,i=0)=>d/*+peek -take*/=>{let q=d<0,r;if(q)d=-d;r=s.slice(i,i+d);if(q)i+=d; return r}
feed=(s,i=0)=>d=>d<0?(d=-d,s.slice(i,i+d,i+=d) ): s.slice(i,i+d) //返回前可加过滤空格(当前tok==0? 跳空格)和'\n'数行号
sign=s=>{let k=s(1),i; if(-1!= (i="+-正负".indexOf(k)) )return i%2==1}
num=s=>{let n=0,di;for(;/\d/.test(di=s(1));)n=n*10+(s(-1)-'0'); return n} //可以用-0 确保for至少有1次.
Seq=(...ps)=>s=>{let a=[],p;for(p of ps){r=p(s);if(!r)break;a.push(r)} return a}
pSelf=pOf=>{let p=s=>p(s); p.give=(P=pOf(p))=>p=P; return p}//wait give

"+123 负3 正2 -1".split(' ').map(code=>
Seq(sign,num)(feed(code)) )
呃,测试就不做了,大家作为小练习吧(反正外面也没讲的,不信你搜(
顺便一提: eCall 的首项其实不是 d[kf] ,能继续(yes?fa:fb)(1),这也是个易混点。 let x=1 in e 与 ((\x. e) 1) 不完全一样,前者不涉及”函数作值“

那么语言的实现,以及各种DSL(make,ant.xml) 与普通CLI程序(grep,sed,..)没啥不同。 得到了菜刀,就更要懂得取舍其能力。 菜刀不能用来干什么? 如果这么用,人多后风险是什么? 怎么最简及最优地添加功能? 这才是编程语言爱好者该思考的问题。 编程语言是更精确的自然语言,优化一篇文章和优化一段代码,是存在不少相似性的;编程和数学都能”提升思维“,但编程更擅长表达。表达也是智力。

解释或编译,JIT为REPL执行或动态优化,都是相同目标的不同选择,大同小异,关键在懂得它和已知知识的差异。
(补充: Fun,Call,var 在函数式一般称 abs,app,subst .当然王某那篇 就没有用这些稀奇名字. 我这里没有let-in 和 (+ 的 prim 操作,都是通过JS 函数相互引入。换Java用reflect也可

Java/Kt实现之所以长,是因为要强类型检查 而且fun eval() 和override啥的重复许多遍,语义上并没有新概念
C/Py实现之所以长,是在文法期(lex-yacc)和纸面推导磨叽太久、语言本身特性缺失(union:int nodeTag)和__init__这种,而且但凡是个公开lib作者都爱过度设计(overdesign),很难写简洁的parser
工程界一般科普做个计算器(Node/队列指针)还是很直接的,可是不能表达变量和按语序参数,会造成很多问题(CSS支持变量后就变贼有用了)

毕竟大家开始学编程时都是按直觉的, int n; new ListSeter(){ void f(List a){a[0]=n;} } 里new了的Type实质是函数(SAM单方法接口),而SAM实质又是包含n和算式的数据(闭包),for(i0;i<;i++)for(i in 0..N) 这样都没想过吧。 框架定义,我就用,这是外国 Java 在 Kotlin 出现后如此被动的原因。 😅

你把东西写长,不会让它更”生产“或”可配置“ ”易懂“;写短,不会”更快“或”有内涵“,语义不多不少,它就在那。我觉得这是仍没见过汇编的程序员该有的认识。不知道为什么,重视语义的人很少,仿佛世界上只有语法和”JSON,YAML“这些名字,而操作它们的库API也都是孤立的,并不存在一个”概念“把所有的一切语法和表象连起来。

举个例子,S表达式就能表示HTML🙃。有人想过拿JSON保存这个吧,但是因为含大量children:[]被怼,但S表达式 (div.wtf (id xx) (a (href xx title 上级)) 就能表示HTML-DOM。
现在不少人就把它的影子当新DSL呢!我们是不是该说这是「历史倒流」呢🌝
也有许多往JS内嵌XML呢! 作为代码移植的好帮手,还真是十分有必要不独立转化而新建jsx语言呢,这样就能在单文件写html了不是?

语言对程序员来说并不遥远。它笼罩着编程的方方面面。
无论是以何种形式使用,对语言的理解决定程序员的能力,并不是做的事多了,就懂语言。

解释器实现不是不能自顶向下拆开讲,因为许多人某层面就知道那一种做法(比如刚才 zipMap 我不提出来 理解难度就++, 或者我写一大堆XXNode, 人也get不到调用和查变量的重点),他觉得无可替换(或者”这就是最快的“),而篇幅又巨大,对初学者会非常不友好
另一方面咱领域人少,一些只顾自己写开心的魔法师(人和领域是互相选择的。冷门专业冷门人)就多些,真正做科普的就少

我们从小就被教导要努力向谁看齐、要按套路管理自己的生活乃至一生,要给各种技术排名次、造『鄙视链』,可是我看到许多Vlogger,每个人都有不同的经济条件、地理位置和性格,但真的无法把他们的视频风格分出高低谁谁淘汰,他们都能让你开阔眼界——普通的生活也能如此有意思,原来做记录也可以不像在记录,却达到更好效果。

确实,技术不是最难解决的问题;把眼光放开阔,许多问题或许就是人为制造,可以从更远的地方追溯修整方案呢! #recommended

谁告诉你 combinator 和 Maybe 及类型推导,跨编译就是函数式专属的(Kotlin),谁说逻辑式就必须复杂(miniKanren),谁说{}或end 最严谨(Python),Web怎么会只有”前端“功能呢(ES6+H5API)
如果世界上存在最优的编程语言——是哪个? 最简单的/功能最多的/最快的?
许多衡量标准本身就是冲突的,先有目的,然后才有最优解。 先懂为什么,然后才看做法
我们所学的知识和理论,有多少是罔顾了原因,只有做法和自恰性的? 文档并不是只有易理解与否,还有与现实、与其他的对应性,因为编程是一件实事,目的之下一切可替换的事。

到最后你才发现,根本不存在最优解,你所看到的优秀,不过是圈子里广为流传的假象。 世界上那么多人,所谓的大牛仍是天外有天,为什么你必须向他学习呢,难道你不能有比他做得好/做得广泛之处吗。

语言不重要,思想重要。
放下排名、放下”最佳实践“,做自己想做的
duangsuse::Echo pinned «我太阳,才发现这个别人能发博文的东西,我竟然连标题和名字都没起,试运行成功贴上就pass了…… 这不是在线教SICP(程序的构造和解释)吗🤪 #lisp #fp #zhihu #statement 放到以前我绝对搞大新闻一样,就像之前仿造(但也没成功)Lice 时专门建了项目画了logo,然后文档拼缀别人的,最后模板代码写完不会了 🙈 但说起来,元编程最后也不过是编程。你了解编程语言,很好,但语言只是载体,美丽的、各种各样的应用才是我们的最终目的。 你能写编译器,很好,但也不过是完成了文本模式和树遍历,加上一些理论。…»
Forwarded from Solidot
在父母车库里自造芯片的美国青年

2022-01-24 00:01

22 岁的 Sam Zeloof 半开玩笑的说 他的芯片晶体管密度比摩尔定律描述的进步更快。他的第二块芯片的晶体管数量是第一块的 100 倍。使用修复的旧电子显微镜和自造工具,他的第二块芯片有 1200 个晶体管。他希望芯片的晶体管密度能达到英特尔 4004 芯片的规模。4004 是芯片巨头的第一款商业芯片,有 2,300 个晶体管。Zeloof 在高中时受创业家兼发明家 Jeri Ellsworth 视频的启发开始动手制造自己的芯片,他的父母对其爱好谨慎支持,父亲咨询了一位资深半导体工程师寻求建议。从业四十年的 Mark Rothman 一开始认为不可能,他为 Zeloof 的进步感到惊讶。
#security chrome://flags/#reduce-user-agent
建议开启,防止UA泄露设备信息(南宫

barba.js.org 的让我知道等时差动画也是很复杂的…… 例如动画时长随[在播放]内项增大而减小,还有 linear-in ease-out 这样,就很顺滑,很人性化(有点像 Material 的 Ripple 是按下时慢linear 抬起快ease

再看看那个动画礼物的等时差队列要多可配置,
进场序i 后进先退no (仿AE
分块1 时差.3s 定时清退0(这都兼容手动激活项了..
现在歌词动画的跳跃心心也是把整个字幕切成独立的词+里一个个字去等时差播放,而且得预先知道下项x位置.. 除了xy双抛物线还有旋转...
duangsuse::Echo
#plt 呃,这几天眼睛有点疼,那个网页重构也接近尾声了(目的就是交个PR),马上把雄狮扭眼的”热度蹭完“,我就能开始二进制pybind了 ……但是到2月我就必须开始制作一个H5动画礼物,以现在这个效率…… (而且之前说的 Java 入门又鸽子了,尽管对话框和离线javac的问题解决,其他内容还是需费精力 说真的我没一次蹭上国内热度,因为每次都是我趁机学了些”没用的“(比如彩字符画、粒子动画、MBR程序、C指针和数组啦),然后数据不好看 😂 这次也是一样,我用shift重映射圆心距l=1~len 环上像…
对正常人的理解,做编程语言是要能运行的,也有配套代码高亮规则/REPL/网站示例 之类的最低工具集,当然REPL的功能(Tab,历史,高亮)都类似,ANSI终端上 bash 用的 GNU readline 和 node repl{eval,log-writer,completer} 都可以拿来测试

如果说语言是要执行或变成数据(Makefile),
leX-Yacc 的X-Y根本无关这个目的(这个Y根本不是解,因为BNF,PEG本身就是很弱的DSL”领域专有“语言),学下来最后发现自己什么都不会做,一个简单的”数据定义语言“也得费很大功夫
不懂行的人都觉得 school 厉害,其实它各种层面上只教过时的东西,好好想想,如果人家能跟业界平分秋色,为啥不来分一杯羹呢?这又不是传统科学

真正懂编程语言的人不会随意设计(或拓展预处理)语言或类似的东西(隐式注入值,大宏,.),除非这个问题已经到常规写法不能解决的程度(例如 Java 的 null问题和 Builder.this 链),像内联XML和JSON 文法这样的东西,是给常量加糖(混淆语言的数据定义和功能步骤),偶尔用用还乐呵,当个宝就会有人让你知道啥叫行为艺术(配置文件全内联js里,因为默认值垃圾!),所以 #Kotlin 里只有 listOf,mapOf 而无 []{} 数据,老爱复制粘贴的人到这也就顿悟了——原来 Map 是由 Pair<K,V> 组成的..
就像你老重复写一个动词,为许多同类HTTP接口操作专门弄堆fun,不代表你理解框架,只能显得很傻,所以 Kotlin 可以给 fun/A.(T)->R 指定 this (扩展函数)

为什么懂语言结构的处理,反而要(在实验外)规避真正做它? 因为我们明白,若非语言真的优化了一个系统性问题,它只是制造麻烦。知道 for(decl;cond;tail) 很厉害,自由变形AST都能做许多,但也只是玩具——如果我能在编写时避免含糊,就没有后续问题。
如果新语言命名语序和别人相同,那要它干嘛? 否则,就让用户重复学习(例如”汉化“关键词和stdlib),而又不写转译器(Kotlin做得很好),是很头疼的。(没错,我能感到用户的头疼😅

因为我们知道语言也有开销和收益,它不是最终问题,所以不随便创建它。如果你真的把「语言」当成问题,或顺带框架概念去讨论些简单的算法,就会把简单搞复杂、难调试。

>摘要:
举个例子,S表达式就能表示HTML🙃。有人想过拿JSON保存这个吧,但是因为含大量children:[]被怼,但S表达式 (div.wtf (id xx) (a (href xx title 上级)) 就能表示HTML-DOM。
现在不少人就把它的影子当新DSL呢!我们是不是该说这是「历史倒流」呢🌝

毕竟大家开始学编程时都是按直觉的, int n; new ListSeter(){ void f(List a){a[0]=n;} } 里new了的Type实质是函数(SAM单方法接口),而SAM实质又是包含n和算式的数据(闭包),for(i0;i<;i++)for(i in 0..N) 这样都没想过吧。 框架定义,我就用,这是外国 Java 在 Kotlin 出现后如此被动的原因。 😅

你把东西写长,不会让它更”生产“或”可配置“ ”易懂“;写短,不会”更快“或”有内涵“,语义不多不少,它就在那。我觉得这是仍没见过汇编的程序员该有的认识。不知道为什么,重视语义的人很少,仿佛世界上只有语法和”JSON,YAML“这些名字,而操作它们的库API也都是孤立的,并不存在一个”概念“把所有的一切语法和表象连起来。
duangsuse::Echo
我太阳,才发现这个别人能发博文的东西,我竟然连标题和名字都没起,试运行成功贴上就pass了…… 这不是在线教SICP(程序的构造和解释)吗🤪 #lisp #fp #zhihu #statement 放到以前我绝对搞大新闻一样,就像之前仿造(但也没成功)Lice 时专门建了项目画了logo,然后文档拼缀别人的,最后模板代码写完不会了 🙈 但说起来,元编程最后也不过是编程。你了解编程语言,很好,但语言只是载体,美丽的、各种各样的应用才是我们的最终目的。 你能写编译器,很好,但也不过是完成了文本模式和树遍历,加上一些理论。…
尽管王某这篇不够简洁,作为同道的我觉得,这囊括住了上面冰封喜欢一大堆术语的 HOAS ,许多人讲过一切关于解释器的理论,而且没有遮遮掩掩、没有复古命名,与目前我对程序解释的基础认知完全吻合 #plt #ce #recommend
他写这一篇就够了。其他东西没必要再讲了,已经胜过许多人分享捕风捉影的东西了。 全网那么多自称知识的社区,就R大和王垠的多分享最干货,其他的大佬,都仍迷惑在语法和名词上。 我开始了解程序语言理论这三年,所获得的也不过如此嘛。

唯一的缺点是不够明确,只有Racket的版本, Lexical Scope 当年我问冰封他没回答,但看这篇我也没看懂,就只知道不能 getA=(a)=>()=>a 了。其实这些在编译原理都有更直接的解释(函数指针+upvalues外层量)
毕竟当时就是嵌套表都只知道 Map<K,List<V>> 或其翻过来这样"虚表"式查找,不知道eval(e,d) 本身就是ds:List栈.. 更不知道名字!=UUID ,=arg$1 这回事;说白了就是编译原理不是显学,看半天揉杂太多语言特性和C,Lisp之类博文语言的麻烦

如果说王某招生的愿打愿挨(在语言理论人看来就)是在躺着圈钱,那么”学院派“大佬的知乎就是站着昂着脸受拜 ,如果想开培训班过好生活是割韭菜,作为既有能力又看不惯的人,不该反思下这种现象为何存在?
虽然我不会干这种事(未来还是打算做后端),但如果博客做到此科普名气水准,我想做点轻松的职业也不该受到道德苛责吧

偶像崇拜不应该是单向的,尝试接受和质疑大佬的布道也很重要
如果一个人给人不接受质疑的感觉,那么他只是暗示自己有这个资格而已
duangsuse::Echo
#plt 呃,这几天眼睛有点疼,那个网页重构也接近尾声了(目的就是交个PR),马上把雄狮扭眼的”热度蹭完“,我就能开始二进制pybind了 ……但是到2月我就必须开始制作一个H5动画礼物,以现在这个效率…… (而且之前说的 Java 入门又鸽子了,尽管对话框和离线javac的问题解决,其他内容还是需费精力 说真的我没一次蹭上国内热度,因为每次都是我趁机学了些”没用的“(比如彩字符画、粒子动画、MBR程序、C指针和数组啦),然后数据不好看 😂 这次也是一样,我用shift重映射圆心距l=1~len 环上像…
谈谈命名问题。圆座标系(POLar)上,角度和距离一般称 theta-rho , angle/arc-radius 即a-r,这是物理采用较少的几个希腊字
我的物理命名法则用 rl:rotation-length 表示这个,因为编程上a理应代表数组..而一些人也会用r标记角度a记面积 真混乱

对同一个像素图,可用直角(xy)和圆座标(rl)自00点等效描述其上每点位置(座标系的意义就是编码位置),这样就容易进行变换,例如圆翘曲和拧转
->rl=(atan2(x,y), sqrt(xx+yy))
<-rl=(lsinr,lcosr)

画半径=3圆就可用点迭代式(参数方程) lsinr,lcosr (r=0~2pi, l=3) ,这等同于在pol系生成一堆点再映射到xy系。当然位图上不好确认dr=rStep ,所以可用 length(p-p0)<l, r=atan2(yx) 处理圆内点。这个yx是配合 (lcosr,lsinr) 顺序的,具体为啥正弦反在余(co-)弦后我不清楚(补: 因为数学把 正右作0点, sin,cos 的00是正上

比如,笛卡尔心 rho=1-sin(theta) .极座标式 r=a*(1-(sint)) 直座标式 (asint,acost)-(.5sin(2t),.5cos(2t)) t=0~2pi

#define pol(f) float r=atan(p.y,p.x),l=length(p);f;p = l * vec2(cos(r), sin(r));
void mainImage(out vec4 bg, vec2 P){
vec2 p = P.xy/iResolution.xy - .5;
p-=.1;pol(float d=(1.-sin(r))/3.9 -l) bg = vec4(1.,step(d,.001) ,1.,1.);
//pol(l=l*l*1.5)bg=texture(iChannel0, p + .5);
}

为啥笛卡尔能画出心呢?在 funcplot.com 画 1-sinx (即-sinx+1)和 x=2pi 和y=1,对照 r=1-sint 你就能找到答案. 注意数学pol系是从正右逆时针算弧度..天哪 难怪 r=1-cost 是向左的

附带物理命名法表/补上次的:
Array B-paired Config Distance Element Func/File-path Graph
h w y x/item i j-i内i n m-n内n Key/比率 Value Length
Object Predicate条件 Question真假 Rotation弧度 Str/stream Text/template模板
u-二进制 z-深度

记忆法:26字母背一遍,把符号配对就行了: hwyx (h)ijnm (ij)kvl (uvwxy)z,你会发现 for(y in 0..<h)for(x i 0..<w) 正好和 y=i, x=j 对应
duangsuse::Echo
谈谈命名问题。圆座标系(POLar)上,角度和距离一般称 theta-rho , angle/arc-radius 即a-r,这是物理采用较少的几个希腊字 我的物理命名法则用 rl:rotation-length 表示这个,因为编程上a理应代表数组..而一些人也会用r标记角度a记面积 真混乱 对同一个像素图,可用直角(xy)和圆座标(rl)自00点等效描述其上每点位置(座标系的意义就是编码位置),这样就容易进行变换,例如圆翘曲和拧转 ->rl=(atan2(x,y), sqrt(xx+yy)) <-rl=(lsinr…
#math 我补张图。注意t=0,r=1 是从正右逆时针,看绿线以下的区域和”心“的上半。 如果把 1-sint 改成 min(it,1) 会咋样?

然后物理的向量(有r和l 的量)计算(许多JS小游戏里玩家跑跳/重力 都有用,尽管一些人封装的不好 )也是出色的圆座标系简化。它利用了角度无关位置(某点+ 角度*距离 是OK)的事实,在GL里vec2(x,y) length,atan,normalize=it/len 就是向量
duangsuse::Echo
#math 我补张图。注意t=0,r=1 是从正右逆时针,看绿线以下的区域和”心“的上半。 如果把 1-sint 改成 min(it,1) 会咋样? 然后物理的向量(有r和l 的量)计算(许多JS小游戏里玩家跑跳/重力 都有用,尽管一些人封装的不好 )也是出色的圆座标系简化。它利用了角度无关位置(某点+ 角度*距离 是OK)的事实,在GL里vec2(x,y) length,atan,normalize=it/len 就是向量
#statement #dev #math 你觉得我会说”编程到尽头是数学“吗?错。 实际上浮点编程、列表(即矩阵)处理让数学真正走入了现实世界,而流控和步骤算法尽管对有许多hack的图形学没意义,对小游戏却是必须的,比如数学就算不了最短路径和五子棋AI (我不觉得图论是数学,如果真是那样万物皆『数学』,没啥意义了)

编程和数学对一个”非== “的应用都是需要的 ,只有公式而缺乏位置什么也干不了,并没有谁的尽头是谁的说法。
倒不如说获得了编程的数学从无聊的算式推导和缺意义的符号跳出来,变得与现实接轨且更易读有结构了,这对数学而言是种提升,就像精确的思想配合通俗的语言,比中文词性都分不清要好。

如果说数学是抽象的,编程比数学抽象得更严谨更广泛,你可以拿苹果、香蕉这样具体的东西套进 List和Set ,而不是局限于数学表示法不擅长的 {x|x是学生} ,一切求值等号和变形都可执行。 数学函数定义域/值域 就是单参函数参/返值的类型 ,比如 abs:整数->正数|0

仅有数值计算的语言是不完整的,所以编程设计了一套套工具系统,抽象、准确快速、可扩展工程,让单次的纸面变成无数设备上无数地方无数次的调用,不局限于数学或逻辑
这可不是件小事,更不是单靠数学训练就能完工的。

编程可以结合线性代数组的矩阵来配平化学式,也可以结合微积分来做(dot.好像是卷积:十字积之和 吧)神经网络自动调参,它意味着真实语言,思想只有用人能懂的语言说出来才有效果。 编程除了”应用“也能表达思想,只是数学语言写起来特例更多 方便人类变形而已,思想终有一天要成熟。你能说思想和语言哪个重要吗?必须合作才能成事,没有主次。
【2021个人作品合集-Demo reel-哔哩哔哩】 https://b23.tv/T0inTYO
#recommend #cg #bilibili 人和人之间的差距大于人和猴子间的差距…… 🤪
这人2019入门的,两个月人物建模贴图着色就ok,2020就做reel了
php:敏杰语言(确信🌚👍 我整个人都敏捷起来了,使用Jawa和Go
都是些JP玩家讨论 asyncio和netty,orm啥哪个好,还有 C#, Go+ DDD.. 魔怔概念

#Ruby 这里有个2D数组编序的..
def spiral_print m
return '' if m.size == 0
m.map(&:shift).join + spiral_print(m.reverse.transpose)
end
妈耶,这mT真的是2D数组..
spiral_print([
['a','b','c','d'],
['e','f','g','h'],
['i','j','k','l']
])
# -> 'aeijklhdcbfg'

噢螺旋向内啊..能看出先是左侧消1,然后末,然后右、始。所以 while m; puts a.map{shift};a.reverse.transpose! ,果然必须转置90度
duangsuse::Echo
【2021个人作品合集-Demo reel-哔哩哔哩】 https://b23.tv/T0inTYO #recommend #cg #bilibili 人和人之间的差距大于人和猴子间的差距…… 🤪 这人2019入门的,两个月人物建模贴图着色就ok,2020就做reel了
【《有一种美叫数学2》| 用方程表达世界的本质,用代码描绘数学的光彩。-哔哩哔哩】 https://b23.tv/cDXyDUU
#math 推荐一个超级牛的 Matlab 数学可视化作者,虵🐸的校友

运动模拟、椭圆反射、各种3D图形、虚数Koch分形、A* JPS 、集合覆盖问题、傅里叶、梯度下降、卷积图形识别可视化、泰勒展开、微积分逼近,许多种算法,反正是数学的有很多🐱
实在是太 #dalao 了这个,也在做公众号但是就不一样,很nice

A:你说这个文本入场动画咋做的队列啊,两边同时往中间靠?
B:学队列动画学魔怔了!这就是中点切后左右letter-spacing啊
A:你说楼上那个建模大佬是怎么画雪山Mesh的啊,每次选中几点往y+拉?不得很生硬?
B:首先,高程图(bump texture)可以手绘y高度,然后NURBS曲面选几点拉高就是平滑的。 生锈铁锅的光泽/吸收也可以用特殊材质混合着色器
A:不过3D单帧一些本质上是物理效果的部分不知道是手绘还是咋弄呢
B:所以这年头捏人和动画速率很赚钱啊