Forwarded from mivik::channels::tech
Forwarded from Milkice's 我是高仿号我根本不懂中文 (Milkice | nabudclexixiuv)
Elepover
扫描,撕裂和垂直同步 - VSync 技术实现 | Elepover's Blog
我们来上一节历史课,回顾显示技术的发展史。故事要从人类最早的显示技术:CRT 说起。
Forwarded from 三三说
如果你想知道自己的 Telegram 账号所在的 DC,现在有了更简单的办法:
https://lab.best33.com/telegram-datacenter/
只需要公开头像即可,不需要设置用户名,也不需要通过 inline bot 发送结果。
https://lab.best33.com/telegram-datacenter/
只需要公开头像即可,不需要设置用户名,也不需要通过 inline bot 发送结果。
Forwarded from Solidot
GNOME 40 发布
2021-03-25 08:51 #GNOME
GNOME 桌面环境项目宣布释出 GNOME 40,它的上一个版本是 GNOME 3.38,项目在去年宣布将改变版本命名方式,理由是在可预见的未来它不会像 GNOME 2 到 GNOME 3 那样改变核心的技术,大版本号不会增加了。GNOME 40 主要新变化包括:新的 Activities Overview 设计,重新设计天气应用 Weather,改进设置,浏览器加入了新的标签栏设计,增强了文件应用 Files,等等。
2021-03-25 08:51 #GNOME
GNOME 桌面环境项目宣布释出 GNOME 40,它的上一个版本是 GNOME 3.38,项目在去年宣布将改变版本命名方式,理由是在可预见的未来它不会像 GNOME 2 到 GNOME 3 那样改变核心的技术,大版本号不会增加了。GNOME 40 主要新变化包括:新的 Activities Overview 设计,重新设计天气应用 Weather,改进设置,浏览器加入了新的标签栏设计,增强了文件应用 Files,等等。
Forwarded from MiaoTony's Box (MiaoTony)
#今天又看了啥 #安全 #openssl
NULL pointer deref in signature_algorithms processing (CVE-2021-3449)
一个拒绝服务漏洞,由空指针引用错误引起。对于默认配置下使用 OpenSSL 的软件,恶意构造的请求可以让服务端崩溃。
A server is only vulnerable if it has TLSv1.2 and renegotiation enabled (which is the default configuration). 受影响范围 1.1.1+
CA certificate check bypass with X509_V_FLAG_X509_STRICT (CVE-2021-3450)
受影响范围 1.1.1h+
OpenSSL 1.1.1k 修复了上述漏洞
See also:
OpenSSL Security Advisory [25 March 2021]
OpenSSL fixes high-severity flaw that allows hackers to crash servers
NULL pointer deref in signature_algorithms processing (CVE-2021-3449)
一个拒绝服务漏洞,由空指针引用错误引起。对于默认配置下使用 OpenSSL 的软件,恶意构造的请求可以让服务端崩溃。
A server is only vulnerable if it has TLSv1.2 and renegotiation enabled (which is the default configuration). 受影响范围 1.1.1+
CA certificate check bypass with X509_V_FLAG_X509_STRICT (CVE-2021-3450)
受影响范围 1.1.1h+
OpenSSL 1.1.1k 修复了上述漏洞
See also:
OpenSSL Security Advisory [25 March 2021]
OpenSSL fixes high-severity flaw that allows hackers to crash servers
cve.mitre.org
CVE -
CVE-2021-3449
CVE-2021-3449
The mission of the CVE® Program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities.
#日常精神分裂 #parsing #JS #scheme
A: 之前说好了要写的 s-expr 解析器,看来是写不了了?还打算复用 JSON.parse 的,以及支持缩进布局,那样就会很有价值吧
B: 之前还打算支持 {;} 可选缩排的,发现和 data notation 侧冲突了,看来是眼高手低😂
A: 其实关键在于易实现性吧,你想用尽量少的代码和低层API实现给应用用的解释器,无论解析结果怎么用?
B: 对了,子序列法比流递归下降法代码量少吗?
A: 无论从什么角度看,加上对 JSON 子语言解析器的复用都不会更省啊……
S表达式是由 Atom/List 两种元素组成的嵌套表,或者说 值/调用参组 的树形列表,一般首项为函数值, 尾余为参数;是三十行以内能实现带调用和 (let 的 动态作用域版。
譬如在解析 () 里的 a b c 单项中,我们实际在读 SList 即 toplevel 的 Expr list ,假设 a 是另一个 () 则:
流递归下降从 ( 后再解析 SList ,它主动完结后刚好在 ) 闭处
无论是靠返回结束索引号的非规范递归下降还是 StringView substr 返回消耗/片段的皆此
子序列在 ( 处直接 findPairedIndex ,这个算法只需处理 "\"" 字符串然后取闭包含子串递归解析,不过这个扫码过程是没有缓存但只需计数开括号的,相对外部()会多数很多遍。
我可以觉得,不用流不等待「不知何处结束」的子串解析结果再检查闭括号较易理解,但是它实际做了无用功,调用栈还是那么高。
B: 就没有什么又易懂又简单的方法去递归下降吗?子序列真的有那么无用吗?
A: 我打算用 function 值把流建模成 s(0)==length, s(1)=="a", s(-1)(1)=="b" 这个样子,还算轻易。
JSON 静态变作流解析有方法,递进长度子串+检查异常pos取头 足矣,全长仍错时即无解析
递归下降如果不显式 substr 而是交 (共享/复制&同步) StrView 的话 #parser 的确对新手不好理解,但套路不复杂。
子序列的话我考虑了一下,如果我们采用复杂点的 visitor 去边解析边执行(自然也可存下再执行)是能实现 if 里兼容一侧语法错误的,显得很 Javascriptic 🌝
B: 很神奇,具体怎么做呢
A: 存参成树允许再遍历的 visitor 就不说,可以给部分递归 () 的 case 变成
其实我并不喜欢边解析边执行,只是有时候(比如 %s fmtstr 等)工作就是很死板所以无所谓了,况且这分块惰性解析涉及函数调用求值序的问题,那就是扯到函数抽象、词法作用域里的闭包 #ce #plt ,不简洁不能体现对灵活的嵌套处理过程的即时利用
A: 之前说好了要写的 s-expr 解析器,看来是写不了了?还打算复用 JSON.parse 的,以及支持缩进布局,那样就会很有价值吧
B: 之前还打算支持 {;} 可选缩排的,发现和 data notation 侧冲突了,看来是眼高手低😂
A: 其实关键在于易实现性吧,你想用尽量少的代码和低层API实现给应用用的解释器,无论解析结果怎么用?
B: 对了,子序列法比流递归下降法代码量少吗?
A: 无论从什么角度看,加上对 JSON 子语言解析器的复用都不会更省啊……
S表达式是由 Atom/List 两种元素组成的嵌套表,或者说 值/调用参组 的树形列表,一般首项为函数值, 尾余为参数;是三十行以内能实现带调用和 (let 的 动态作用域版。
譬如在解析 () 里的 a b c 单项中,我们实际在读 SList 即 toplevel 的 Expr list ,假设 a 是另一个 () 则:
流递归下降从 ( 后再解析 SList ,它主动完结后刚好在 ) 闭处
无论是靠返回结束索引号的非规范递归下降还是 StringView substr 返回消耗/片段的皆此
子序列在 ( 处直接 findPairedIndex ,这个算法只需处理 "\"" 字符串然后取闭包含子串递归解析,不过这个扫码过程是没有缓存但只需计数开括号的,相对外部()会多数很多遍。
我可以觉得,不用流不等待「不知何处结束」的子串解析结果再检查闭括号较易理解,但是它实际做了无用功,调用栈还是那么高。
B: 就没有什么又易懂又简单的方法去递归下降吗?子序列真的有那么无用吗?
A: 我打算用 function 值把流建模成 s(0)==length, s(1)=="a", s(-1)(1)=="b" 这个样子,还算轻易。
JSON 静态变作流解析有方法,递进长度子串+检查异常pos取头 足矣,全长仍错时即无解析
递归下降如果不显式 substr 而是交 (共享/复制&同步) StrView 的话 #parser 的确对新手不好理解,但套路不复杂。
子序列的话我考虑了一下,如果我们采用复杂点的 visitor 去边解析边执行(自然也可存下再执行)是能实现 if 里兼容一侧语法错误的,显得很 Javascriptic 🌝
B: 很神奇,具体怎么做呢
A: 存参成树允许再遍历的 visitor 就不说,可以给部分递归 () 的 case 变成
()=>readList(s.substr(findPairedIndex(s,))) 闭包,然后参数求值(反正这语赋值处只有实参组) 时支持惰性求值的程序里兼容下先解析。其实我并不喜欢边解析边执行,只是有时候(比如 %s fmtstr 等)工作就是很死板所以无所谓了,况且这分块惰性解析涉及函数调用求值序的问题,那就是扯到函数抽象、词法作用域里的闭包 #ce #plt ,不简洁不能体现对灵活的嵌套处理过程的即时利用
#reveng #dev 谈点关于 #aop 的吧,虽然因为和运行时 intrinsics (内部构造) 关系大我只能说说而已。
AOP 即面向侧面(aspect)编程,和 apktool&apksign 「改包」以及 八门神器/烧饼的「修改器」不是一个概念,它往往意味着纯运行期的外部代码扩展(偶尔并不是外部代码 如 AspectJ BECL CGLib 式 reflect Proxy 系扩充),常见于幸运破解器类「系统级纂改」
这个东西很有用吗?是挺有用的。比如睡觉这个是不定时间数的动作,但具体地,洗洗睡是头、上床睡是尾,一般 AOP 概念向程序员暴露 op: before&after = 1:1 的 hook API ,实际 res = after(op(...before(args))) ,例如有个 getList() = [1,2,3] 那 after=res.filter{it>1} 就会隐藏部分结果,小米的安全通讯录就是个可定性(意味着编程者的复用性和 persistence 数据持续化)过低的例子。
其实摄像头、GPS位置、电量什么的通通可以篡改,不过正经人从来不会意识到这个层面的可扩充性,即便它们很有用;例如,如果应用用自己内部的相机 readFrame&draw surface 的话,想实现原有「选照片」的功能就得覆盖摄像帧,如果要在只能录音的 app 里上传音频文件(准确的说只是实时发声),必须覆盖听筒回传音块(当然这些也会涉及自动 input)
如果应用了加壳混淆或反逆向复杂化重构 aop 依然有效吗?当然,因为它和 搜索堆栈、锁定地址的「修改器」一样是系统级篡改的方法,至少能影响基础框架 API ,把程序和运行时部分剥离。
C++ 等没有函数起止符号的情况能用吗?部分可以,如果能重建部分符号会好些。
如果混淆器能内联函数可以吗?很多 AOP 框架都不支持修改子程序的「一部分」。其实,aop 针对的『子程序』是指一段有输入输出变量的代码区间,变量可能在堆上或栈上,理论上补齐 code span 和 input/output 的存储位置标记,利用部分反汇编就可以照常 aop,但是没人实现,软件工程界大概就是这样(对「数据操纵的关联化设计」我还是最符 0xd4d/dnSpy 可惜不维护了)。
其实 aop 的用途远远不止插件、用户脚本那么少,就像带条件断点,如果能支持 变量打表、回溯执行、数据可视化、审视调用栈和指令指针 之类的操作,分析上也会变得非常有用呢。如果能针对执行状态区别化 aop ,哪怕只能在 bytecode (或汇编) 级进行检查,只断点一类指令都能实现很多干预。
AOP 即面向侧面(aspect)编程,和 apktool&apksign 「改包」以及 八门神器/烧饼的「修改器」不是一个概念,它往往意味着纯运行期的外部代码扩展(偶尔并不是外部代码 如 AspectJ BECL CGLib 式 reflect Proxy 系扩充),常见于幸运破解器类「系统级纂改」
这个东西很有用吗?是挺有用的。比如睡觉这个是不定时间数的动作,但具体地,洗洗睡是头、上床睡是尾,一般 AOP 概念向程序员暴露 op: before&after = 1:1 的 hook API ,实际 res = after(op(...before(args))) ,例如有个 getList() = [1,2,3] 那 after=res.filter{it>1} 就会隐藏部分结果,小米的安全通讯录就是个可定性(意味着编程者的复用性和 persistence 数据持续化)过低的例子。
其实摄像头、GPS位置、电量什么的通通可以篡改,不过正经人从来不会意识到这个层面的可扩充性,即便它们很有用;例如,如果应用用自己内部的相机 readFrame&draw surface 的话,想实现原有「选照片」的功能就得覆盖摄像帧,如果要在只能录音的 app 里上传音频文件(准确的说只是实时发声),必须覆盖听筒回传音块(当然这些也会涉及自动 input)
如果应用了加壳混淆或反逆向复杂化重构 aop 依然有效吗?当然,因为它和 搜索堆栈、锁定地址的「修改器」一样是系统级篡改的方法,至少能影响基础框架 API ,把程序和运行时部分剥离。
C++ 等没有函数起止符号的情况能用吗?部分可以,如果能重建部分符号会好些。
如果混淆器能内联函数可以吗?很多 AOP 框架都不支持修改子程序的「一部分」。其实,aop 针对的『子程序』是指一段有输入输出变量的代码区间,变量可能在堆上或栈上,理论上补齐 code span 和 input/output 的存储位置标记,利用部分反汇编就可以照常 aop,但是没人实现,软件工程界大概就是这样(对「数据操纵的关联化设计」我还是最符 0xd4d/dnSpy 可惜不维护了)。
其实 aop 的用途远远不止插件、用户脚本那么少,就像带条件断点,如果能支持 变量打表、回溯执行、数据可视化、审视调用栈和指令指针 之类的操作,分析上也会变得非常有用呢。如果能针对执行状态区别化 aop ,哪怕只能在 bytecode (或汇编) 级进行检查,只断点一类指令都能实现很多干预。
#life 在超市看到了人脸识别的柜台机,想想人脸的API 大概还挺方便,就像 token 一样的 Serializable,Hashcode 数据就够了,结合自动存包柜还挺有意思(条码的验证要么密码学要么分配并写上 token ) 🤔
#code
#code
再定的物 存包柜(量 母密钥:文) 为
私下的量加密器=某法加密器(母密钥)
量总箱号=(0~100)去化集()
量满箱号=集<数>() “也可以变成UUID令牌表 不用加密法”
初,
扫描器 当条码被识别 时,
箱门开(加密器去解(它) 顺便(满箱号::去除))
事 按存() 为
量号=随机去取(总箱号-满箱号) 顺便(满箱号::去加) “可以变成二分集,缓存优化”
箱门开(号) “关键逻辑仅是按码开箱”
打印条码(加密器去编(号))
打印("${时间()} ${箱号(号)}")
物 人脸存包柜:存包柜("") 为
量 人面箱号=表<值、数>()
初, “写得大概点”
人脸识别器 当人脸被检测 时,解分配箱以(它)。
事 按存() = 人脸识别器去加监听单次(当人脸被检测),分配箱以(它)。
“分配箱就是记存位&开箱&显示位置(可选),解就是 pop人脸存位&开箱,的确本质是记/用凭条开箱门”#statement #dev #design 编程者像舞蹈编排者一样,就是什么时候做什么事情而已。 什么时候是指外部输入和环境变化带来的事件入口及传播;什么事情是指对数据的处理与判断。 编程就是总结物上之事的客观规律并加以主观控制,实际一步就是美感地设计代码/项目的结构和利用下层接口。程序的设计和科学一样,只要习惯了所处的这个死板的「世界」,明白目标的流程和时序/存储关键点、灵活复用代码,无论看起来多么复杂或强大的程序都能按部就班地设计出来!
#functional 程序序列 生成/归纳 ,比如对第一次/第一项的特殊处理或重复语句
数据序列 操作/绑定 恒等关系
嘛,很多方法,我能说出它在编程领域的技巧名,但却不知道它具体是什么,都是经验,甚至赋技巧模式以名字本身也是经验
#math 编程相对于数学最好的一点就是懂把重复的规律提取为常见易懂的子程序
Rect 要是带算法可视化的副作用就更好🤔 #cg #statics 觉得建模易扩展十分有必要! #DOM Rect 还带 x,y 的就很灵性,其实是 Area 吧
#net 想想写局域网聊天测试,tcp recvfrom 和 sendto 两 buf ... 不,其实是两方的 recv buf ,没有主动方或从动方
#relational 关系式, 不是我读一次你,而是我与你相关,双向的关系 (双边 setter )
不过这个不算真关系式…… 但关系式的内心不止是求一个满足等式的变量表 state , React 这些自动更新的、甚至数据库查询都算关系式。
#game #python 想弄个真心话大冒险,当然游戏逻辑本身太简单了,作为 web 应用应该要 9patch 背景图(工具?)和动画什么的
fs:scan/read/save 9patch async-quest-loop xhr-gists&files expand[a,b] listanim
#windows 同学居然做出一个 winform 还是啥的 C++ form+table 『疫情登记表』…… 回头也想做一个
#web #js push&update, form Date, table sort/filter/select, export, grid-opto
#functional 程序序列 生成/归纳 ,比如对第一次/第一项的特殊处理或重复语句
数据序列 操作/绑定 恒等关系
嘛,很多方法,我能说出它在编程领域的技巧名,但却不知道它具体是什么,都是经验,甚至赋技巧模式以名字本身也是经验
#math 编程相对于数学最好的一点就是懂把重复的规律提取为常见易懂的子程序
r.stepCount(nStep).zipWithNext().reduceWithLeft(y) { (acc,x,yL)
Rect(x,0,x+r.step,avg(yL,y(x))).area
}
(求和曲边梯形面积 定积分)Rect 要是带算法可视化的副作用就更好🤔 #cg #statics 觉得建模易扩展十分有必要! #DOM Rect 还带 x,y 的就很灵性,其实是 Area 吧
#net 想想写局域网聊天测试,tcp recvfrom 和 sendto 两 buf ... 不,其实是两方的 recv buf ,没有主动方或从动方
#relational 关系式, 不是我读一次你,而是我与你相关,双向的关系 (双边 setter )
不过这个不算真关系式…… 但关系式的内心不止是求一个满足等式的变量表 state , React 这些自动更新的、甚至数据库查询都算关系式。
#game #python 想弄个真心话大冒险,当然游戏逻辑本身太简单了,作为 web 应用应该要 9patch 背景图(工具?)和动画什么的
fs:scan/read/save 9patch async-quest-loop xhr-gists&files expand[a,b] listanim
datasets=dict(enumerate(basename(fp,".txt") for fp in listdir()))
selBanner=" ".join(f"{k}{v}" for k,v in datasets.items())
while(1) print(randPick(datasets[input(selBanner)]))#windows 同学居然做出一个 winform 还是啥的 C++ form+table 『疫情登记表』…… 回头也想做一个
#web #js push&update, form Date, table sort/filter/select, export, grid-opto
duangsuse::Echo
#statement #dev #design 编程者像舞蹈编排者一样,就是什么时候做什么事情而已。 什么时候是指外部输入和环境变化带来的事件入口及传播;什么事情是指对数据的处理与判断。 编程就是总结物上之事的客观规律并加以主观控制,实际一步就是美感地设计代码/项目的结构和利用下层接口。程序的设计和科学一样,只要习惯了所处的这个死板的「世界」,明白目标的流程和时序/存储关键点、灵活复用代码,无论看起来多么复杂或强大的程序都能按部就班地设计出来! #functional 程序序列 生成/归纳 ,比如对第一次/第一项的特殊处理或重复语句…
编程者像舞蹈编排者一样,就是什么时候做什么事情而已。
什么时候是指外部输入和(内部)环境变化带来的事件入口及传播;什么事情是指对数据的处理(读写,生成,归纳)与判断。
编程就是总结物上之事的客观规律并加以主观控制,实际一步就是美感地设计代码/项目的结构和利用下层接口。
程序的设计和科学一样,只要习惯了所处的这个死板的「世界」,明白目标的流程和时序/存储关键点、灵活复用代码,
无论看起来多么复杂或强大的程序都能按部就班地设计出来!
🌝🤔很多时候大家看起来觉得很复杂的软件都是有套路的, Tab(notebook)&indicator ,可移动重组 Panel , drag&drop ,自定义渲染的子控件
项目保存是序列化、导入导出是表现形式互化,撤销重做是编辑栈,还有设置、按键编辑器什么的,
它们都是很常见的交互组成成分,对多线程的 desktop #gui 而言监听分派和 style 自定义可能没 mobile 麻烦,但是很多人还是不得不利用过低层/辣鸡封装的API定义这些东西,心疼
什么时候是指外部输入和(内部)环境变化带来的事件入口及传播;什么事情是指对数据的处理(读写,生成,归纳)与判断。
编程就是总结物上之事的客观规律并加以主观控制,实际一步就是美感地设计代码/项目的结构和利用下层接口。
程序的设计和科学一样,只要习惯了所处的这个死板的「世界」,明白目标的流程和时序/存储关键点、灵活复用代码,
无论看起来多么复杂或强大的程序都能按部就班地设计出来!
🌝🤔很多时候大家看起来觉得很复杂的软件都是有套路的, Tab(notebook)&indicator ,可移动重组 Panel , drag&drop ,自定义渲染的子控件
项目保存是序列化、导入导出是表现形式互化,撤销重做是编辑栈,还有设置、按键编辑器什么的,
它们都是很常见的交互组成成分,对多线程的 desktop #gui 而言监听分派和 style 自定义可能没 mobile 麻烦,但是很多人还是不得不利用过低层/辣鸡封装的API定义这些东西,心疼
duangsuse::Echo
编程者像舞蹈编排者一样,就是什么时候做什么事情而已。 什么时候是指外部输入和(内部)环境变化带来的事件入口及传播;什么事情是指对数据的处理(读写,生成,归纳)与判断。 编程就是总结物上之事的客观规律并加以主观控制,实际一步就是美感地设计代码/项目的结构和利用下层接口。 程序的设计和科学一样,只要习惯了所处的这个死板的「世界」,明白目标的流程和时序/存储关键点、灵活复用代码, 无论看起来多么复杂或强大的程序都能按部就班地设计出来! 🌝🤔很多时候大家看起来觉得很复杂的软件都是有套路的, Tab(…
#linux 🌚 机房里发现 vmware 什么华清远见开发环境, Ubuntu 12 ,估计自带的 arm gcc / Android4.x source tree 嵌入式开发
看到了一些 C 语言示例(包括 inet bind server 的) 就想传一下,共享桥接网络和独占USB设备都可以用,但辣鸡 Ubuntu 没有自带 gvfs-mtp 竟不能用数据线-_-||,还好 SMB 网络访问正常, host 机网络共享中心开访问,再设置下文件夹写权限果然能用了
看到了一些 C 语言示例(包括 inet bind server 的) 就想传一下,共享桥接网络和独占USB设备都可以用,但辣鸡 Ubuntu 没有自带 gvfs-mtp 竟不能用数据线-_-||,还好 SMB 网络访问正常, host 机网络共享中心开访问,再设置下文件夹写权限果然能用了
https://t.me/rynif/22773 #life #China 现在的应用就是却人类友好设计了…… 对设计便利的重视真的和个人技术水平没有一点关系,真的。
有的人即便技术水平高,但他不能在意到易使用化的编程精力分配,或者改进变量刷新的架构上的问题,我觉得如果一个人算法和数学很好但对优化软件的基本流程没有长进,是太可惜的。
有的人即便技术水平高,但他不能在意到易使用化的编程精力分配,或者改进变量刷新的架构上的问题,我觉得如果一个人算法和数学很好但对优化软件的基本流程没有长进,是太可惜的。
Telegram
::rynco::army_of_two
“北斗掉线”事件背后:不懂人情的技术是残酷的
2021-04-09 13:43 #奇客故事
作者|高飞 奇客故事(ID:cybergushi)
一位货车司机,因为北斗掉线而选择自杀结束生命,这是「货拉拉用户跳车事件」之后,货车行业的第二起科技事故。
「货拉拉事件」后续,是货拉拉上线了一系列安全整改措施。从公开资料来看,包括行程录音、行驶记录仪、逾期预警等。
但很遗憾,货拉拉的整改措施,其实对司机和乘客的保护作用并不会太大——为什么这么说呢,因为这是由目前城市的暴力犯罪类型所决定的。
由于技…
2021-04-09 13:43 #奇客故事
作者|高飞 奇客故事(ID:cybergushi)
一位货车司机,因为北斗掉线而选择自杀结束生命,这是「货拉拉用户跳车事件」之后,货车行业的第二起科技事故。
「货拉拉事件」后续,是货拉拉上线了一系列安全整改措施。从公开资料来看,包括行程录音、行驶记录仪、逾期预警等。
但很遗憾,货拉拉的整改措施,其实对司机和乘客的保护作用并不会太大——为什么这么说呢,因为这是由目前城市的暴力犯罪类型所决定的。
由于技…
duangsuse::Echo
https://t.me/rynif/22773 #life #China 现在的应用就是却人类友好设计了…… 对设计便利的重视真的和个人技术水平没有一点关系,真的。 有的人即便技术水平高,但他不能在意到易使用化的编程精力分配,或者改进变量刷新的架构上的问题,我觉得如果一个人算法和数学很好但对优化软件的基本流程没有长进,是太可惜的。
明明能做到很麻烦的事情,使用了不常见的特例化 标准数据结构API ,能为高复用可配置的标杆结构套上程序进行解释,却没有重视一些基础的使用流程上几行代码就能实现的 trick;反而是一些只会简单 runtime-Intrinsic&C-data 的人设计的程序便于调参和情景适应,明明就只差一步啊,可是不被意识到这些细节啊。
#dev 物理命名法 (前缀?) 涵义😋
只有写一段代码重复写到无聊但从不写冗余代码的人能理解这种做法的意义。
实际一点的活用见上
a b : paired item
c: char
d: step/dict
e: element; ev: event; ex: exception
f: math func/file; fp: file path
g: graphics
h: height
i: index
j: 2nd dim index
k: ratio/key
l: distance
m: 2nd dim size
n: dim size/count
o: simple object; op: subroutine closure
p: predicate
q:
r: degree
s: str/stream
t: target/text
u:
v: value (of k)
w: width
x y z: left top pos/list item
0: base or elder element
1: new or stop value
只有写一段代码重复写到无聊但从不写冗余代码的人能理解这种做法的意义。
实际一点的活用见上
a b : paired item
c: char
d: step/dict
e: element; ev: event; ex: exception
f: math func/file; fp: file path
g: graphics
h: height
i: index
j: 2nd dim index
k: ratio/key
l: distance
m: 2nd dim size
n: dim size/count
o: simple object; op: subroutine closure
p: predicate
q:
r: degree
s: str/stream
t: target/text
u:
v: value (of k)
w: width
x y z: left top pos/list item
0: base or elder element
1: new or stop value
Telegram
duangsuse::Echo
#statement #dev #pl 补充一句,我用的不是匈牙利命名法(这个名字本身怎么那么狭隘……匈牙利人常用么)
匈牙利命名法是 property(常量/类属性/可变量)+简写type+描述
我的命名法是在长期重构和编程中自创的,大小写分词(camel/snake)基于 Kotlin 的规范,但在特定子程序(涉及物理量/同名不同形式量 比较多的)会有更清晰的模式,甚至可以替代类型声名,我管它叫『物理命名法』
匈牙利命名法重视类型前缀,物理命名法却重视类型本身——因为很多作用域范围内同类型只会有一个值,或一个…
匈牙利命名法是 property(常量/类属性/可变量)+简写type+描述
我的命名法是在长期重构和编程中自创的,大小写分词(camel/snake)基于 Kotlin 的规范,但在特定子程序(涉及物理量/同名不同形式量 比较多的)会有更清晰的模式,甚至可以替代类型声名,我管它叫『物理命名法』
匈牙利命名法重视类型前缀,物理命名法却重视类型本身——因为很多作用域范围内同类型只会有一个值,或一个…
#dev #life #js #web #gui 咱要实现一个 Tab(notebook) 控件。
A: 今日校园的 tab 也要做,这个难度可就不小了
B: 无非是一个 nav 后接个大横列 div ,初始全隐+切首页,切换隐:active+设置新:active 加减 hidden
onclick 的 nav span 元素添加 no 属性,直接和后面横列 div.children 1:1 对应
A: 那么下面的动画条呢?
B: 可以用 canvas 做 background-image repeat-x 再调 offset-x 吧
A: 貌似不可以吧。背景图是不能 overflow 显示的,必须做成单一元素
B: 那就做成 div 条盒子,设置 position:absolute 再切 left width 的 transition 就好了
A: 我想关键的问题是,不同页面间有点元素要复用…… 这就非常头疼
B: 无非就是第二层嵌套是不是 for(pagedIndices)showHide 操作的问题了,我觉得只能做成 div.replacer 的形式,而不能是 tag.copy-to-keep ,当然那样或许性能好些?
A: copy 的问题在于不知在哪重新插入,如何在 DOM 数据上提供这种指定接口,而且恢复也比较麻烦。
B: 2h 写了一个 https://64f1aq.coding-pages.com/HTMLs/school/_2/tabs.html
我用的 plan B,毕竟多两个 node 有点不爽,而且不用 replacer 也能实现 cloneNode 补贴式的x滑动
提供的 api 基于 childNodes[attr("no")] 和 e.groupBy(attr("tabs"))
A: 今日校园的 tab 也要做,这个难度可就不小了
B: 无非是一个 nav 后接个大横列 div ,初始全隐+切首页,切换隐:active+设置新:active 加减 hidden
onclick 的 nav span 元素添加 no 属性,直接和后面横列 div.children 1:1 对应
A: 那么下面的动画条呢?
B: 可以用 canvas 做 background-image repeat-x 再调 offset-x 吧
A: 貌似不可以吧。背景图是不能 overflow 显示的,必须做成单一元素
B: 那就做成 div 条盒子,设置 position:absolute 再切 left width 的 transition 就好了
A: 我想关键的问题是,不同页面间有点元素要复用…… 这就非常头疼
B: 无非就是第二层嵌套是不是 for(pagedIndices)showHide 操作的问题了,我觉得只能做成 div.replacer 的形式,而不能是 tag.copy-to-keep ,当然那样或许性能好些?
A: copy 的问题在于不知在哪重新插入,如何在 DOM 数据上提供这种指定接口,而且恢复也比较麻烦。
B: 2h 写了一个 https://64f1aq.coding-pages.com/HTMLs/school/_2/tabs.html
我用的 plan B,毕竟多两个 node 有点不爽,而且不用 replacer 也能实现 cloneNode 补贴式的x滑动
提供的 api 基于 childNodes[attr("no")] 和 e.groupBy(attr("tabs"))