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
#sysadmin #Linux Arch 草 10G 内存是
Forwarded from Phonograph (Ralph 萌新喵)
噢, Reactive 就是 c=a+b 自动更新 c 呀,我之前想了几次呢。 一般不用 onresize 之类的事件很麻烦呢 #Web #DontKnow #JS #lib
而且还能做到数据变动视图自动更新,耳不仅是单向的视图更改数据,有点意思。 #functional #ce
然后对于控件的 computed() 用了特殊语法 $: a+b (label statement) 表示,应该说也是很实践性

“ 在「古典」React 里,你不得不写 shouldComponentUpdate, 在现代 React, 你同样需要引入 useCallback 和 useMemo,手动地缓存函数,来避免性能问题。

同样是使用 Virtual DOM 的 Vue 却没有这个问题,因为 Vue 的机制(依赖收集)决定了它不必重新执行整个 UI 函数来换取新的 Virutal DOM 树,当某个状态更新的时候,它明确地知道应该 diff 哪些节点。

这么看 React 真是傻逼,不过是提供了无作用域的 state ,竟然要重渲染整体 UI?难道不能收集出有哪些变量节点用了被更新变量么,这不是基础操作?
看看就好的频道
Message
#recommend 从裸 DOM 到 JQ 到现在的 Vue, React, Angular 框架, TypeScript ,经历了很多变化甚至思维模式转变,但都是为了能处理大型视图项目。

当然,动苏所习惯的 el("tag", withClass(""), []) DSL式语法就照应了树本身的结构,可以弄运行一次代码生成和进一步糖化。

俺并没有特别做什么设计就选择了这种写法🌝 对我而言,怎么拼合程序与数据、解决模板代码都惯的来。

通过编译期处理实现 c=a+b 的自动关系式更新可以选择 defineProperty setter ,但其实预处理才是最高性能不拖泥带水的做法,这种代码我之前写过三回
https://github.com/duangsuse-valid-projects/Share/blob/master/HTMLs/qndxx.ts#L13
https://github.com/duangsuse-valid-projects/Share/blob/master/HTMLs/xy/xy.ts#L74
https://github.com/duangsuse-valid-projects/Share/blob/master/HTMLs/dim2/dim2.ts#L45
#php #zhihu 辣鸡原罪语言,比 Lua 低到不知哪里去了
#service 可惜现在觉得 CGI 有性能开销,变成应用服务器时代了, ASP JSP 的时代过去了
#statement #functional #js #GUI #dom
再说 Reactive... 等等这不是 Rx 类框架的招牌吗٩(๑`н´๑)۶ 看来 -ive 的词性都容易后宫起火啊草。
React 用 functional MEMO 提升控件更新性能根本就是弱智措施, memo 即备忘录,用 hash 表实现函数输入输出对应的缓存,这样对类似 Text 的控件,同输入多次调用不产生额外计算和内存开销,应用在树 render() 上时相当于自动实现 shouldComponentUpdate() ,尽量复用旧的渲染结果,对树遍历减少重建操作量,相当于仅重建了真正变更的控件。

经典版暴露 shouldUpdate 已经很没水平了,说好的面向 state 编程呢?在我看来这个 Reactive 所做的就是「把所有控件的所有变量暴露到一个 state 里方便读写操作」,那么凭什么程序员要操心什么 update 啊 memo 啊,记得很像 还有 SMUV(state,message,update-event,view)模型,实际上根本不能便利地 handle 多少东西,就是个秀儿。

当然,其实真正的 relational 编程也是这样,关系式 state/var/eq/both/either 靠 enumerate&filter 可以解出 x+1=2 这样的线性方程,甚至能得出 a+b=9 的所有可能性,只是需要 interleave([a,b]) 两个变量先后递增构造 state 迭代,然后 unify 一下同步恒等关系(双向版变量引用)而已

可是这和 DOM 有多大关系?比如我有个
class Main: DUI() { fun view() = el("il", withNone, Counter(0)) }
class Counter(var n): DUI() {
  fun view() = elDiv(withNone, elText(ref(this.n)))
  fun inc() { n+=1 }
}

其实渲染 Main 的时候连给子控件注入其路径都不需要!也不需要专门分析 DOM diff 的哪个 tag 哪个 attr 还是 text ,直接拿住自己的 HTMLElement 的引用就够完成全部 update 了,所以说搞那么复杂?

要是想兼容 haml 或者 E4X 内联 XML ,直接做个中部翻译成 el 调用就行,反正 DOM 元素动态创建最好是 createElement ,逃不开运行时开销。

想实现控件属性事件到 update 代码的方法很简单,因为 js ref(a.prop) 并不会传入 a 相关的信息,编译期把 op(ref(a.prop)) 变成 refAddRel(a,"prop",v=>op(v)) 就可以了,这种方法换成处理全部代码,引用处 a.prop=x 自动更新就变成上面那个 框架S 的实现方法,接口上是兼容的,只不过 refAddRel(o,k,op) 从 defineProperty 变成编译期打监听表。

变形方法很简单,walk 到 FCall 节点记作基点,如果是 op(ref(o.prop)) 就把基点变成 refAddRel 的调用,如果是 ref(v) 这种不知道 receiver 的情况就请换 Array [v] 报错,反正框架函数可以随便加没必要特别支持 a=ref() 这些语法,兼容的少,反而更优雅。
看看就好的频道
Message
另外这个博文作者的示例 https://github.com/djyde/plastic-editor

虽然有 reactive ,居然 responsive 都没做,就是笔记应用支持 star grouping&Date,上传照片和 JSON 导出…… 移动端尺寸设计很难吗

有意思的是这个人有开源 DFS longestRoute https://github.com/djyde/findRoad/blob/master/src/index.ts#L98 的代码,应该是很久以前的了 (他还有个 dom like .data tree-util 和 TS 测试的 pushIf ,只有一行代码,应该是算法弃了)
#science #China 所以说啊,国际话语权……
噢,想起来了,可以用 ins,del(N),blink(char),delay 序列做动画…… 然后加 delayPosition 这样的预处理函数🤔

百叶窗的话设置 indices 再 shuffle 替换就很像了,还要自动折行的,有必要考虑下怎么做…… 怕不是要看 TextRange
Forwarded from 131的小本本
这 profile 这样写感觉挺有意思的(
131的小本本
这 profile 这样写感觉挺有意思的(
第一次感觉这么不确定…… 就连动画更新都设计错了-_-||

想当然觉得可以固定帧率看帧号,忽视了必须有更新才有必要重绘的事实,自信心很有问题

明明动画动作序列应该说似乎没有问题,要用 selection TextRange 去 pick 动画点也没问题,就是莫名觉得这样不正常,其实已经是最大格式兼容了?!

那就支持 charGraident(indices,substs) 百叶窗、插入 HTML 和自动折行好了
Forwarded from Solidot
7-Zip 开发者释出了首个官方 Linux 版本

2021-03-13 20:58 #Linux

7-Zip 开发者 Igor Pavlov 不用 Linux,因此这个非常流行的解压软件一直没有官方的 Linux 版本。7-Zip 的非官方版本 p7zip 由另一名开发者维护,但项目已经四五年没有更新了。在这种情况下,Igor Pavlov 决定根据最新的源代码创建官方的 Linux 版本,他发布了 AMD64ARM64x86armhf 架构的 Linux 版本。他只提供了二进制程序,目前还没有公开源代码,原因就是他不用 Linux,维护 Linux 编译脚本和包有点难度。
#CG #cv #algorithm #math 高难度…… 和 canvas parser 一样,从位图还原吗草