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
#msoffice 这个功能还比较方便,支持缩进描述树结构的
Forwarded from Leonhard Euler
前端后台数据库,编码网络多进程,单点缓存分布式??
#security #china #game #freedom 🤔 随着盗版字幕组去了?吾爱破解危不危?
Forwarded from APPDO 数字生活指南
突发事件

知名游戏论坛猴岛宣布永久关闭。

“虽然不舍,但又无能为力,请大家各自珍重,江湖再见!”

频道 @AppDoDo
#plt #ce #js https://rescript-lang.org/docs/manual/latest/newcomer-examples
为什么中国出了这么多厉害的互联网公司,但没有自己设计过编程语言? - 知乎用户的回答 - 知乎
https://www.zhihu.com/question/359906573/answer/1709942996
#rust -like , with let binding & {} expression
#plt #Java 出去散步的路上想了一下绝句目前的一些语法糖

之前对 event listener 的设计是,控件里存 被单击被单击释放之子树被改变 这样的 EventName ,开始计划是靠子类多态重载中缀算符「」(也能支持 annotation 了... 好像不能 但可以学 Python decorator ),不知会不会再改

可以写出 按钮当被单击,说("emm")。 这种代码,现在想想可以增进 DOM 式支持 量 监听配置 = 按钮加监听(被单击、op) 这种可撤销的 listener ,优雅些而且完善

这有一点问题, EventName 不好批量定义,我就想到之前的「变」定义有逗号形式:
事 wtf() 为
变,
数 a 初0;数 b c 初1
文 s k 初""
重复若a不是5,b令置为「它乘2」;c令置为「它乘b」;a增。
回a+b+c
我好像还记得另一种设计:
事 wtf() = a+b+c
其中,
变数,a 初0;b c 初1。
变文,s k 初""。
现在我可能倾向前者一些,主要是因为好读而且只写一个比较规整。
可以另外对 量提取(a、b、c) 做扩展…… 可是 Kotlin 目前不支持这种非局部定义(显然这个要能静态执行,才能知道能不能完全初始化)
所以说任重道远啊...

回看 Java 的 anonymous subclass 的时候我还以为编译器可以提供闭包的专用 inspect API 呢,比如就可以做 CallbackList 这样的压缩工作,大意了 😂
因为 int a; new Listener() { void run() { print(a); } } 就会弄出有 constructor(a:Int) 这样的 inner class 啊,显然不需要 inspect 它 closure 住的变量(或者说构造器已经说明一切),这种接口就很完善了...
duangsuse::Echo
#math 我将无我... 🌝 其实根本没用到,作者喜欢从别处复制粘贴?或者喜欢自己写一大堆(repeating...)没用的结构? 话说作者挺喜欢给自己找麻烦,非得 let that = this; 一个,用了 27 次,我挺反感这种主语混淆不清的代码 好像挺 English 的,其实写半天我看不懂 this that 是在指什么,代码又为何要换人称 🌚
重写 js canvas 游戏 asteroids 是一个很好的展开,我打算最后给它加一个触摸(单击+移动转向射击/双击前进)操控的功能
如何抽提 mainloop 是个问题,最好还是能给子弹这样的对象添加自动绘制管理,到时候会彻底重写的

贪吃蛇的话整个地图都是一起绘制的,就没有对象座标集代码冗长的问题
做不到…… 两个标量,我实在无力简化。 一个是毫秒时间单位一个是秒系数,怎么办呢...

从使用处看倒是可以简化——nowTime 是用于判定开场动画和频率限制的,如果把频率限制抽提出来或可删去
不用 class 封装游戏对象还是有局限性吧…… 为了性能不能检查 func 返回值来看是否中断,也不能每次 requestAnimationFrametry-catch 一个,我看只有整体做大一点,key handler 放外面,才能避免为一个 Esc 键退出弄额外开销

目前的设计还是站在 inline 优化可信的基础上,可这毕竟是循环引用(updateFunc),func 参数不可能被内联的
不过,requestAnimationFrame 要自体再调用本身就不可以内联吧…… 关键是这个 next 闭包肯定有额外开销

在下觉得,果然还是不应该用 next 函数参数,应该提供一个 event queue 实现然后支持 exit() event...
暴露 frame-refresh schedule 果然是不良实践呢
This media is not supported in your browser
VIEW IN TELEGRAM
果然只有亲手写过”手绘“游戏,才知道框架的艰难
只有了解不常用的东西,才能了解常用的东西……
Forwarded from IRv Lin
大佬们,这是epoll的io过程,可是对于应用程序来说好像整个过程都是阻塞的,和BIO没啥区别啊。是我理解有误吗
#lib #doc #js ACE code editor
https://ace.c9.io/index.html#nav=howto
https://mivik.gitee.io/compress
https://file.xecades.xyz/Linux/GetKeyDown.html

https://stackoverflow.com/questions/8832320/how-can-i-highlight-code-with-ace-editor
https://medium.com/@jackub/writing-custom-ace-editor-mode-5a7aa83dbe50
https://github.com/ajaxorg/ace#features
https://stackoverflow.com/questions/18614169/set-value-for-ace-editor-without-selecting-the-whole-editor 'editor.setValue() does selectAll, forgot to unselect it'

啊... 感觉 ACE 真的好草啊
设计上大概就是 replace, getValue 这些常用"UI"功能放 root object
replace(range,text), setValue 放 .session
getSelectedText(), insert(s) 放 .selection

但是它的 cursor 真的好难弄啊,为什么是 {line, column} 的形式呢(Range 也是这种,四元形式...),而且都只有 cursor/selection Left/Right/Up/Down 的无参函数,估计只是给 UI 绑定的
那你定义个鸡毛啊! 就这?! 要知道不管什么文本存储后端, LRUD 四向的代码几乎都差不多,你暴露接口,而且不支持 length 只能为 1? 也没有元编程便利性 API 辅助?
而且 ace.edit(selector, options) 居然没有用,非得 editor.setOptions 才行
无了无了

https://stackoverflow.com/questions/23278238/ace-code-editor-set-language-dynamically
https://stackoverflow.com/questions/20869962/what-are-the-requirements-for-mode-html-in-ace-editor
https://www.xspdf.com/resolution/54957281.html
session() 也挺有意思的,但凡桌面应用都要有撤销重做的能力,这个是 .setMode("ace/mode/sql") 都能重做一样
duangsuse::Echo
https://duangsuse-valid-projects.github.io/Share/HTMLs/renju_spaceship/spaceship.html 大家可以在这里试玩 #web #js #code #project 按 1 增加一盘, 2 增加彩球(我在干什么我,为什么要用五子棋盘当靶子…… 🤪 ) asteroids 方向键控制、空格射击、B 键刷新,其他参考 www.websiteasteroids.com
关于飞机打炮游戏,吃饭时想到三点。 🌝 不过还是衷心希望能重构好,争取 300 行内的 #design #web #js #game

1. Vector {angle, distance} 与点击指定方向的计算
一直不清楚这个『矢量』到底指的是甚,它是仅从 (x,y) 总结出了 angle (rad), length 两个变量,我之前只知道可以从一点 +角度 +距离 得到另一点的,这个矢量是自己就有角度和长度吧 😰
要实现单击指定飞机方向,得有 relativeDegree(a, b) (或者 absolute?)这样的函数,我当然是不会写
可见计算机图形学的艰难了。

重写 Vector(x,y) 和 Line(p1,p2) 的时候我有一个点子,可以基于 js 反射做一个 2 tab 的 class 相等性检查器,栏1 输入代码,栏2 显示同名类/成员的树,可以用定义好的 sequence (random 集什么的) 去测试输出的一致性。 #tools

2. oneclick, dblclick, pressmove 事件的检测(detect)
DOM 的 InputEvent 只有 keydown,keypress,keyup ,没有 singleclick, doubleclick 什么的(这也是为什么许多时候只注册 keyup 事件而不能叫 click ,因为 click 指代的事情不明确)

游戏的触摸屏移植计划的是,单击打子弹、双击前进、按下+移动变方向。
doubleclick 的检测比较麻烦,要区分单击和双击,就得计算点击间隔,如果到时没连则为单击;不过用 DOM Event 二次封装事件还比较方便

之前还想了要不要移植个基于 DOM dispatchEvent 的虚拟方向键盘(肯定不会有操纵杆那么高级)过去,后来说不要了(想必也有轮子)

3. 关于 mainloop key handle 和 draw (重绘) 的解耦数据建模方式

关于每帧绘制的情况,是可拆分的,游戏里 bullets, (爆炸的)particles 这俩元素每次更新都要重绘, player(rotation),flame 这俩在玩家的 spaceship 移动/旋转时重绘 😋

目前,作者的设计是各存一个 [] (当然是 unshift/pop 的 queue 模式),然后 refresh 时逐个绘制;这个流程是可拆分的没必要写死 「用数据代表程序,让程序融进数据」
基本上可以说最少要几个 name 不同的 function draw(p) 和它的实例 args (例如绘制点、绘制角度)

类型:绘制函数=1:1;类型:实例参数=1:N

可以说数据模型是这样,怎么建模最易用,且最高效?
可以用两个 dict: renderers={"bullet":drawDot}, instances={"bullet":[Point(1,2),]} ,遍历 render 的 key 就行,但这样要 o[key] 两次 不是很高效
可以用一个 array: [[drawDot, Point(1,2)]] ,但这样是针对动态类型语言的(混淆了 args 的 sizeof)
[[drawDot, [Point(1,2)]]] (for [render, instances] in types), register render 函数进去时就要用索引号,不方便

最后我还是决定用第一个 array(原因见最下方),静态决定绘制顺(绘制会消耗时间 比如 player,flame 显然是一起绘制而且分先后的)
然后利用动态语言的特性 let 解构给 types 命名(player, flame, bullet...)。
因为 instances 的集合大小是动态的,显然持有的都只能是堆对象引用而不能直接分配,再说 JS 现阶段的优化不足以直接度量 struct size ,不如减少 [] 分配量
没毛病, table 就是一大堆 Map 的组合 🌝🤔 ( #db #relational