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
tg侧边栏的落雪特效: 每.5s/100 移动 P=随机点 随机(雪花,白球) .5s P+随机xy
前几天做的粒子动画实验,隔2状态随机1次 就很合适,可惜点赞不够 我懒得做 [xy,+-雪/白球 透明];而且雪花咋画呢.. 但tg客户端代码质量真不行,我估计它为这写了一个文件,但其实客户端交互动画挺多的。

#windows #api #hack https://t.me/yscschan/6968
Win32 窗口置顶zIndex问题.任务栏开始菜单 都是窗口
Win8+的Band层z序最大如果想在任务栏上显示UIAccess或注入CreateWInBand /SetWBand (shell32常规是注入?..
ysc发现有key EnableAMAccess (w32kfull.sys活动管理) 后可以使用后者自由提升窗口,key限取一次,SetShellWindow 登录时 pcshell.dll 管理,只能重启explorer.exe hook NtUserAcquirel 获取key ;好奇怪的私有API

窗口置底问题.Win8+ 桌面图标可独立窗口,只要 SendMessage 0x52C 给某窗口,它变成最底;再将 shelldll_DefView 图标下方 WorkerW 隐藏,ffplay --noborder xy=00wh=屏幕宽高 这样的播放器就是动态桌面
ShowWin(,SW_) SetParent(w,w0)
EnumWindows(f(w,argv)) FindWindow(k,fl=0) -Ex(in_w?,next?,k,fl)
SendMessageTimeout(w,k, 3x, dt, fl)

#py 计划
100粉的头图黏合Py PIL生成。为啥不是canvas或OCV或Java? Pillow Image.open/new/resize 和 getpix, Draw(im) 的API想必是熟悉了,这次我们要用100张图片 拼出小宽高的灰度图,流程是:mask.png w h *.png
若mask不存在,求得(x,y,cp) 网格排布 绘制。输出 mask 再编辑
否则,对 a=mask (x,y,resize(1,1)lum亮度) 和 b=cycle(im list) 共同 sort, imOut.paste(bim,axy) 后高亮图肯定在高亮mask点
#statement #dev #tech #oop 🌝
我已经物理命名法化了…明明之前说要慎用的,笑死

它是以单字符用途不假思索起名变量的方法,如 ab kv 意味配对,xywh 是矩点宽高,ijnm 是2D数组纵横i<n,c配置 e元素 f函数|文件 g图形Ctx
x 也是单项、xs xz 列表和休眠列表next(),ww 意为“w内的w”,w0 意味外层的w或之前的w,1~inf 只是编号,以此类推
o对象 p命题|点|指针 q真假 r结果|弧度 s字串|流 t时点 d翻译表|正负距离|细度 l长度 u链接|blob z休眠中

用途无关平台-View或Widget就该命名为eXX,配置状态只叫c, unord_map就是d或kVs的长名, 无所谓其实现细节,
如果它不兼容标准操作 就用语言让它兼容!如果它有多余功能,无视就好——因为标准操作就那几个
k是广义的键-有v配对就算-i18n resID 都算;如果量有限制(计算量的)意义,可以像i<N这样大写
dt时差 dur时长,cp bg/fg 是单双颜色,ev ex 事件异常,fp路径 im图片 ,
反正能少写就少——但是语义优先,所以它和 ijkplayer 的OI风格命名、匈牙利/魔术风格命名 简繁两个极端是本质不同的

程序是由「统一」和「领域」两部分API组成的,领域名词只有互相联系才有意义,而统一名词没有意义-只有动词能赋予它们意义;越广泛的概念,命名就越该简略-除了是这还能怎样呢? 我们用它的名词是有目的,还是只增加了理解难度呢?
getUnreadBlogs() 就应该写成 blogs.filter{it.unread} 的样子
名字是依附上下文而有意义的,因冗长或太杂脱离了表达目的,程序不过是看起来不可或缺的一堆废纸。再详细的重复名字,在不想看代码的人前都是对牛弹琴-为啥要在代码片段里管中窥豹呢,我一开始就知道要干什么,就自然知道什么变量是必须的,这种篇幅分配 不香吗?
因此我只适当地用介词,重点在前、易改点在后给函数起名,我从不给变量起名——它不值得专有名字;如果写软件,我会先确定有多少「领域」名词,之后代码便不会多加3字以上的变量;把舞台留给函数签名和//注释,这才是最好的文档。
#statement 《如何成为优秀的编程者》
试想你「最开始」接触编程时是为了软件设计?是为了mod闭源的程序? 编程都有目的,但忽视代码的结构 就会失去发展的可能。
代码怎样对大家都是一样的,但当你慢慢入行,必须通过更多的工具与语言,重新认识「编程」二字

入门时,要么是照着示例分析作用、拆拼,要么是强记空泛的体系理论和单项;其实这些不完全适合「编程」
理论需和实例配合着用,实例若缺乏更大视角与归类,也很难将功能点建立联系

「编程」是从脱离编程语言开始的,精炼自己的语言来取代C,Java 函数的语义,尝试让不同API实现相同功能——这就是「不用代码」的编程
计算机能做的千千万,排版/自动化、绘制统计、分析转化、机器人嵌入式,它们最统一的就是『程序语言』的定义结构和流程结构,只会按既定流程做「通信 鉴权 排版交互」,用几个社区库,太少了
实质性、独特的东西太少了;许多平台10行就能描述完,许多工作一个sh脚本+配置文件就可完成,它的难度只在于理解含糊冗杂的文档、堆砌定义、不直观的调试
我们需要理解语言的用法、摆脱既有代码的束缚,这就需要对程序动名词定义的结构有好的「语感」、对软件有涉及的领域概念有「代码外的理解」,除了这么写 你还有很多方法能表达——即元编程,这样你习得的才叫『编程语言』——通过思想而非文本编、有概念而非执行效果的程,最后映射到OOP,FP 的定义体或状态注册,API操作上

语感或「代码外的理解」,都不是示例或理论、一两张图能教给你的,儿童编程IDE也不行,需要自己动手、脑中模拟执行,这需要时间和精选的示例

作为优秀的程序员,每行代码为何存在 你都很清楚,而且会以val和fun 避免啰嗦的重复代码、重复行出现,对一个有语感的人而言就会讨厌重复;我想,没有真正的「脚本语言」或「编程范式」——汇编没有离去 但无结构编程消失了;只有把代码写得像面条流水帐一样的人。语言不应分领域,但分文化,更分人。请用有序柔和的语言对待编程,任何人都能成为「代码设计师」和「软件工艺师」,而不是只可孤芳自赏的「魔法师」

那么优秀和称职又有何区别呢?这就需要我们自己寻找了,在社会上,并不是所有事都能用科学、或技术解释,我只能告诉你我理解的编程是怎么样。表达自己,也是语言最重要的目的啊
duangsuse::Echo
#statement 《如何成为优秀的编程者》 试想你「最开始」接触编程时是为了软件设计?是为了mod闭源的程序? 编程都有目的,但忽视代码的结构 就会失去发展的可能。 代码怎样对大家都是一样的,但当你慢慢入行,必须通过更多的工具与语言,重新认识「编程」二字 入门时,要么是照着示例分析作用、拆拼,要么是强记空泛的体系理论和单项;其实这些不完全适合「编程」 理论需和实例配合着用,实例若缺乏更大视角与归类,也很难将功能点建立联系 「编程」是从脱离编程语言开始的,精炼自己的语言来取代C,Java 函数的语义…
“我记得有听好友吐槽过教科书的不伦不类。它们既想激发学生对学科的兴趣,又想保持自身的绝对严谨,其结果就是往往写了很多复杂的公式和推理,却并没有带来什么实际意义,甚至都没能告诉学生这些理论知识能用来干什么。

我很小很小的时候,所有人都在学乐器学书画;我读初中了,所有人都在学机器人;我上大学了,大人们疯狂往计算机里挤,小朋友们也开始学少儿 Python 了。

……比常人多懂一些的人应该做的,不是摆架子摆身段昭告天下这门学科有多科学、多严谨、多复杂,学习它能带来多少好处,能帮助人在什么竞争中又出人头地一分。恰恰相反,是要让大部分人感受到这门学科有多诱人”

(大意)当我花好几个小时首次编译出自己的小系统,随便抓起个 U盘写入后成功启动一台小电脑;或者更早点,在sl 命令看见一辆停不下来的火车从屏幕这边开到了屏幕那边时,内心涌起的兴奋和成就感,用多少本 Linux 史书都压不下去。
(后来)面对各样的 bug 而不泄气,花一整个下午,只是为了稳定很简单的特性,不是因为我用的语言有多先进,不是因为我写出来的代码性能有多优异,只是因为我满足了自己或者身边人的某个微不足道的需求。

……我们还要设置门槛,劝退那些稍稍感兴趣的、还在犹豫的人吗?

至少我拒绝。如果我有机会,我会毫不犹疑地扔掉那些初步接触时根本不重要的死板而繁杂的理论。

……每条正确的命令带来的正反馈、命令行带来的强掌控感让人欲罢不能。在学习的过程中必然会碰到很多艰难险阻,而且会发现自己还有太多太多不了解,那都不重要。重要的是,兴趣被调动起来,一切都好说了。

https://blog.rachelt.one/articles/education-interest-linux-and-programming/ #rblog

……借着 ModPE 的机会,我逐渐跟着各种现在看来很稚嫩的教程开始访问 Java Android 的诸多功能,直到我成功绕过游戏 创建了第一个现在看来也很稚嫩的悬浮窗。很稚嫩,但作为刺激已经够了。以此为契机,我开始接触开发。

我还是很怀念第一行代码带给我的最初的感动。那是几乎改变了我整个人生轨迹的力量。……

频道主也基本是从改C#游戏开始,那时foreach都很迷糊,后来用AIDE写了第一个minbase64... 现在我连basenc 系列算法和RSA都有所了解了🌚 但是我觉得只要教学顺序合适,难度是差不多的-只是没必要每个人都会;针对那些所见即所得的编程,科普是很有必要的 #recommend

站在编程语言爱好者的角度,我觉得他说得很对。 或许靠难度证明自己很好、对研究很有意义,但是呀,好玩的东西当然是不嫌多的。研究也可以是降低理解其它研究的开销,我所理解『编程语言』的职责正是如此
其实元编程和编译原理,说到底就是理解分层次结构、树深先重写、调用栈本质的普通程序,这些都没有超过『语言』能表达的范围
因此,『文科』语感的那一套东西,对这些仍然起效

或许文科是不敌理科的,但这么想的人搞错了一个根本:语言与思想都是人的基础智慧,基础是负责强化应用的,不是用来较高下的🌚
duangsuse::Echo
#plt 回复 @幻の上帝 :原来你认识冰封和LH_Mouse[doge] 显然是做编译器喽, 我也做(kamet-dse),但只会前端。或许你应该试试讲科普,对概念理解得就会更具体。科普的语言简洁、顺序分明最重要,或许能遇到新东西[doge] 我这不就是遇到了吗​ 我对var的理解是 int i=1 这样显而易见的不必多打字,语言规范更多是种导向而非阻碍,如果类型足够含糊(如val x=a[i])大家是会标明的,规范不该太绝对;而且J11好像引入局部量推导了 抽象不该有什么目的,它是为实现目-易读易配置/扩展/移植的用的。…
类型和命名符号本来就不能分先后,硬要说,那有类型就是notype.checked,无类型就是多态的有类型,其实就是思想和汇编谁重要这种问题,公说公有理,我觉得都不如解法途径重要,所以我不讲理论的

你不觉得 C 的 int i,*p 类型记法,以及更难看的函数指针某种意义上是没有 __auto_type 导致的,初学者#define往往引起问题

%和<N 确实不该算一类,只是边界情况一样,Lua这样我也是很醉的,i=(0..<N)或(1..N) 其实不影响 N-1 这些修改的(若i!=N) ,考虑到它的table=ary|hashbucket 类JS混淆数组表,我觉得从1数反倒合理了-Lua只是为 a[i]这类元组引用的情况优化,反正其前身Sol是面向record的

因为区域取值不是集合类型论能检查的问题(甚至非负性都得看常量折叠),而且对暴露API的lib而言不动态检查无意义;程序和物理纸面是有区别的,程序会扩张和重复,故没法直观地严谨

N=随选数 的确很脏,Linus对这么选硬件地址的提交者严词批评,但oi算法比问题区间重要;不也有树状数组(堆排序,.)和kv状数组(状态机转移表),计算机毕竟是工程学科,AC就牛逼

至于位置,知乎上也没见啥有价值的讨论,C#CLR也是支持1起始,我觉得 iter-累计i=0 这可以说明时序和内存上0起始都更好,但现在有了函数协程,iter的出现也会越来越少,如 first(n) for(x of xs)if(n--)yield x else break
总之严谨点肯定是好,但也要看是为了什么,Lua牺牲严谨是为了石油采矿的统计,excel性质的,那1始数组也就有缘由了
duangsuse::Echo
我觉得这件事说明中国人并不是不知道某组管理的习惯,只是不想关心而已🌚 但是因为暴力强迫拆迁这样的严重事件 还是有不少人站出来,包括一些不太自媒体的写手 可惜呢,墙是系统性的,现在许多社媒都封杀了 如果只是批评其实意义不大,我觉得就事论事吧 这个.. 总之我不知道这是否能算一个风向标, 今天一个威逼签订、老赖拒不履行的合同,能搞得两老一小家破人亡,而法律睁一只眼闭一只眼,甚至有人说“法律上没法给他 公道” “已经很照顾了”,就不担心未来稍微穷苦小众一点的人被某些人“含泪抄家”? 在中国涉及地皮的东西…
#china #net #freedom 《有法可依、有法必依、违法必纠》🌚
https://t.me/vvb2060Channel/569

咱不藏着掖着了,融入被ban公司的外国社区服务就是反华🧐
发表不利于某组的言论就是违法,不管是不是事实

《家大业大》
#kotlin 《progressive》
啊,之前被各路公众号吹爆的 databind 变成 viewbind 了啊,kapt直接变语法树改写ksp了,比我的编程观换代得更快🌚
暴露AST细节乃至sealed dataclass很难吗,哦对javaapt只暴露了定义结构部分的interface processing.Element来允许@Override之类的检查和运行时属性参数值注入

原来databind就是堆@findView.val=o.xxVal 再同步更新吗,因为xml,还真是非常值得起一个名词呢🌚 毕竟html前端都是搞不懂DOM form只会拼字符串的水货

那么viewbind应该是 Angular和Vue 这样的东西了,现在抛弃widget.val的概念,拥抱model/view ,啊不,任意data.val及列表都可以同步到view

我就不明白,根本不是一个世代的东西为啥名字很像
哦对,xml就是一群不懂元编程的人吓唬人的,还什么可配置,所以viewbind反而是回到过去回到最初的做法,那么之前那么多应用都是在干什么?

哦不对啊,View DSL 才是最新的,winform designer.xml 才是最初的,UI都需要设计器,我在说啥啊我🤣

一个小萌新:可为什么 builder.io 就没有专门的设计器呢
因为html是种xml啊
可这不一样啊,你能用webkit设计单页效果,能用View开发View吗,可以啊(Androlua设计器),但是大家都在学“了不起”的“绑定技术”啊🤣
Cancel Culture(下台文化)是美国metoo等维权运动中类似“战狼”的作风,RMS受到了这种抵制 #gnu fsf故事
或许你觉得今天fsf没有影响力,但今天自由软件、开源概念却始终贯穿软件工程,在上个世纪它不是唯一的选择——甚至是小众的,因为针对“PC”基础件被商业和共享软件垄断,此外一些人并不乐意开源研究。

" javascript包管理工具lerna成为了第一个行动者,他们修改了自己的开源协议,把包括微软、亚马逊在内的一堆公司列入了“因协助ICE而禁止使用”范围。

Stallman was right变成了互联网meme,但谁来继承他?下一代年轻人还会对这些有兴趣吗?在今天还有人能忍受他这种简朴而单调的拒绝几乎所有科技公司产品的生活,还有人愿意花几十年创造伟大而重要的产品,同时放弃巨大的商业价值当作自由软件让所有人都能使用吗?

RMS经常得罪人,很多人讨厌他,但是他以接近流浪汉的方式生活了一辈子,把大部分时间都投入到软件开发和社区管理中,早年他以一人之力提供了编辑器,编译器,调试器等一系列用来创造软件的软件。在当时,80年代末90年代初,这些技术都是价值连城的商业机密,几乎每一项都可以撑得起一家上市公司,RMS完成了这些东西,以GPL许可证开放开源给人们自由使用(按:当时gcc对程序员的改革性不假,但说是商业机密有点过了。微软当时也有卖basic解释器,但仅靠这个应该不够价值连城,gcc开发是用的 free as 0price的amsterdam cc ,在之前没有通用的c实现开源)

软件相关行业并不是一直都如今天这么光鲜,早年是被认为nerd之类奇怪的人从事的行业,很多人自述来到这个行业,是因为愿意和机器打交道而不愿意接触人。早年工作环境也远没有今天完备,
没有IDE,没有搜索引擎,
没有问答社区,没有github可以抄代码。写程序是孤独面对手册和屏幕,
每一行指令都要节省,每一字节内存都要计算,调试程序和bug需要极强的耐心、技巧和固定操作的无数次重复,而且
计算机运行速度极慢,只有今天主流cpu速度的几千分之一。这类工作对大部分人是难以忍受的,但是对阿斯伯格综合征人士,这倒是一个难得的友好工作环境。
#net #sysadmin 🧐原版socks吗
Forwarded from Rachel 碎碎念 (IFTTT)
Clash 恐成最佳 socks5 server
— Rachel 呱 (@Rachel030219) April 19, 2021
Forwarded from Al Pt
写得可读性再差也不会提升什么执行效率的(笑
# 噪声消除 # 监听麦克风 # 分别控制不同程序的输出 # (同一程序)输出到多个设备 # 蓝牙 #dalao #linux pipewire-pulse 兼容和gui处理图工具 patchbay
strace -n ls
#reveng 👆
用Lua这种语言的沙箱不就行了.. yaml怎么了?怕是不懂schema ,要知道+* 表达式的解析是没有易写统一的方法的,根本就是伪命题,这样无疑是要所有软件配置不可统一编辑!
" conditional logic or description of transformations or something else. Both the logic of what can be expressed and done and the terms and elements of the domain are specific and custom to the program. This is what you see in firewall rules, whether OpenBSD PF...
https://utcc.utoronto.ca/~cks/space/blog/programming/ConfigurationIsNotGeneric #configuration #programming
Chris's Wiki :: Configuration (and configuration files) is not and cannot be generic
#py #code
attrs是一种定义dataclass,/社区库的方法,它和库D都支持 validate和convert ,为啥说D不好呢? 首先,attrs生成的构造器和手写的一样,也没有 json: 这样不必要的预占位

from attrs import define
from pydantic import BaseModel
#json.dumps(cattr.preconf.json conv unstruct()) / as_dict(aobj)

@define
class AttrsDatetime:
a: datetime = field(validator=instance_of(datetime))

class T(BaseModel):
a:pendulum.DateTime
T('2021-..').a#wrong type!


" it allows automatic de/serialization to formats that don't support datetimes natively
I disagree with this. Un/structuring should be handled independently of the model...

D的序列化不可能同时允许两种格式,如 ISO/UNIX 时间
timeit约慢3倍
from cattr import Converter
D里需要 override the json_encoder field in the model config. 且只支持了json (so no msgpack, bson, yaml, toml...), 甚至没 ujson 外的库

D支持的显然是实用外的东西,比如
PydanticOuter(a={"a": 1}) PydanticOuter(a=PydanticInner(a=1)) 和悲观错误检查