duangsuse::Echo
Photo
#Learn #OOP #js #design #Java #Kotlin
duangsuse:
大失败,不会写了;第一次还觉得需要 RingBuffer 或者双指针维护缓冲器那样……
其实根本没有那么麻烦, post 的时候带上 queue index ,全部完成右移视口 offset 就够了,如果没全完成右移也不行
简单设计复杂化
许久没有编程的动苏眼高手低到了这样的程度,不行,一定要写出来刚才那个的核心逻辑😡
……草,竟然真的可以用了,虽然没测试 原来 runtime.Port 真的像 channel 一样要 sender自己 onMessage 也能收到,所以要先 verify 吗
基础封装的逻辑就是封装 channel , create server 可选, client 一定;兼容了 DOM postMessage API
假定 Function 的 que 无法共享,利用 seqNum (传输侧别名为 no) 指代响应目标,然后 que 本身利用 offsetL 压缩一下,不会一直增长
核心部分 20 行
仔细想想这个封装的确很有必要,总体 post/onMessage 请求一次 backend 是 callback(proc(msg)) ,C/S 两边都要 post,onMessage,msg,post 还难复用信道,call 了服务端处理完还要尝试按原名回调,容易重复标识符数据。
Jack Works:
来,把异常处理也加上
duangsuse:
Uncaught DOMException: The object could not be cloned.
不得不想序列化变形的办法…… 而且 JS 还是弱类型
好吧,好像需要一个完整的序列化方法,这个方法必须介入 sendMessage 数据来允许保留类型信息,如果不止要存留 Error message 的话 🌚
Jack Works:
到最后你会发现你重新发明了 JSON RPC
所以我把我的实现改造成了 JSON RPC 做成了通用的库
duangsuse:
serialize 本来就应该是框架层做的,而且它也只需要暴露 ser() deser() 两个函数而已
我们只不过应该在框架上写个十来行的小程序就够了
Jack Works:
我也是这么设计的啊, https://jack-works.github.io/async-call-rpc/async-call-rpc.asynccalloptions.html
duangsuse:
中国开发者越来越难了, github.io 都不能用了 #China #net #Freedom
以后写个软件第一关过政审第二关过苹果 Steam 的审,层层加码,服!
duangsuse:
累死了,反正能用就行
格局小了,我本来准备写 DOM 动画的,又鸽子了,再鸽就溢出了……
又到了各种 push 不上去的时间段,中国的网络环境。
Jack 那个我是真的摸不清,骨架太大了,重写人的脑力也是有限的(当然 typing 应该看得懂 就是各种 scope feature 看不懂),知道 onConnect,disconnect 这些 API 也不好分析
不过好歹是能用一个,虽然肯定有性能开销了
Jack Works:
里面逻辑复杂但是外面接口简单啊
duangsuse:
动苏的标准是从内到外没有业务主干外的代码,如果有就作为插件嵌在骨干外…… 总之就是一句话,强调最根本最必须的算法 #statement
Jack Works:
你只要写一下怎么收发消息的逻辑,我这个框架就能 magically 跑起来
duangsuse:
所以说动苏的编程风格是函数式改 upvalue 而不是 class 属性,因为我强调算法先于架构
Jack Works:
动苏?啥玩意 = =
rxliuli:
你的中文昵称?
Jack 更喜欢在一个文件中编写多个 func,然后全部命名导出,吾辈更倾向于 class method 的形式
Jack Works:
我这个对 tree shake (webpack) 比较好🤔
duangsuse:
是的, duang 源于成龙洗发液的“头发动啊”,suse 是 Linux 发行,所以叫『动苏』😋 #life
动苏会觉得自称「我」或者「咱」(代替「我们」,我w键坏了) 有点生硬,这样就好很多
duangsuse:
这一点我还是倾向 Jack ,毕竟 Java 算是八股文式 OOP ,没有为实际编程有 toplevel func 样的优化
我可没说错话哦,面向对象的 class 本质是对函数式闭包加类型, property 即 upvalue , method 即子程序化分段,整个对象即 send(name,args) 元方法,真正的面向对象只有「物/例」和其上的名词动词,没有文绉绉的废话甚至混乱 static。 #statement
面向对象把数据和其上操作混合定义是好事,可惜某些人就知道装B 起一大堆半通不通的专有名词,专业术语往往鬼用没得,给人们的思考造成一大堆麻烦。
要是 OOP 最初的作者能有半点实用化的觉悟,绝对不会放任 Jawa 混乱善良合理的编程习性
rxliuli:
但 Java 确实流行起来了而且基本被大规模实用了。。。虽然写起来确实感觉不太舒服,尤其是写过其他更好的语言之后
duangsuse:
所以说它才有机会被 Kotlin 吊打啊~
可惜 JavaEE 是他们自己搞出来自以为高明的八股文,很多 Kotliner 还没做好准备击败他们
CodeHz 📡:
(因为用类作为天然的命名空间分割函数的方法太好了(
duangsuse:
是的,构造器就像可覆写的一个局部变量初始化 header
然后整个类就像一个函数, constructor 提供了初始的变量混入
CodeHz 📡:
(oop 很好)就是无法自然的表达多重dispatch
duangsuse:
polymorphism 多态 不可以吗?
<就有个主次之分了,而且也不是运行时多态
运行时多态上 Sum type 可以 Visitor 啊,也挺方便的
<(有好几个参数需要动态分发的时候写起来还是挺别扭的
c 里搞 tagged union 到处 cast 就不方便吧…… 每个使用处都要检测 tag
请教下什么叫多派发啊
<大概就是这种( https://en.wikipedia.org/wiki/Multiple_dispatch
C#是直接用动态运行时(DLR)了 #dotnet
类似 #Haskell 的 pat match 啊,那样 visitor 的确就不够了,得 trie 数据结构匹配...
非常疯狂,看起来 A.collideWith(B) 和反过来 B,A 是一样的
看起来是个非常有意思的特性,不过我感觉离算法/设计模式比 PLT 近些, visitor 单判定派发更实用一些
duangsuse:
大失败,不会写了;第一次还觉得需要 RingBuffer 或者双指针维护缓冲器那样……
其实根本没有那么麻烦, post 的时候带上 queue index ,全部完成右移视口 offset 就够了,如果没全完成右移也不行
简单设计复杂化
许久没有编程的动苏眼高手低到了这样的程度,不行,一定要写出来刚才那个的核心逻辑😡
……草,竟然真的可以用了,虽然没测试 原来 runtime.Port 真的像 channel 一样要 sender自己 onMessage 也能收到,所以要先 verify 吗
基础封装的逻辑就是封装 channel , create server 可选, client 一定;兼容了 DOM postMessage API
假定 Function 的 que 无法共享,利用 seqNum (传输侧别名为 no) 指代响应目标,然后 que 本身利用 offsetL 压缩一下,不会一直增长
核心部分 20 行
仔细想想这个封装的确很有必要,总体 post/onMessage 请求一次 backend 是 callback(proc(msg)) ,C/S 两边都要 post,onMessage,msg,post 还难复用信道,call 了服务端处理完还要尝试按原名回调,容易重复标识符数据。
Jack Works:
来,把异常处理也加上
duangsuse:
Uncaught DOMException: The object could not be cloned.
不得不想序列化变形的办法…… 而且 JS 还是弱类型
好吧,好像需要一个完整的序列化方法,这个方法必须介入 sendMessage 数据来允许保留类型信息,如果不止要存留 Error message 的话 🌚
Jack Works:
到最后你会发现你重新发明了 JSON RPC
所以我把我的实现改造成了 JSON RPC 做成了通用的库
duangsuse:
serialize 本来就应该是框架层做的,而且它也只需要暴露 ser() deser() 两个函数而已
我们只不过应该在框架上写个十来行的小程序就够了
Jack Works:
我也是这么设计的啊, https://jack-works.github.io/async-call-rpc/async-call-rpc.asynccalloptions.html
duangsuse:
中国开发者越来越难了, github.io 都不能用了 #China #net #Freedom
以后写个软件第一关过政审第二关过苹果 Steam 的审,层层加码,服!
duangsuse:
累死了,反正能用就行
格局小了,我本来准备写 DOM 动画的,又鸽子了,再鸽就溢出了……
又到了各种 push 不上去的时间段,中国的网络环境。
Jack 那个我是真的摸不清,骨架太大了,重写人的脑力也是有限的(当然 typing 应该看得懂 就是各种 scope feature 看不懂),知道 onConnect,disconnect 这些 API 也不好分析
不过好歹是能用一个,虽然肯定有性能开销了
Jack Works:
里面逻辑复杂但是外面接口简单啊
duangsuse:
动苏的标准是从内到外没有业务主干外的代码,如果有就作为插件嵌在骨干外…… 总之就是一句话,强调最根本最必须的算法 #statement
Jack Works:
你只要写一下怎么收发消息的逻辑,我这个框架就能 magically 跑起来
duangsuse:
所以说动苏的编程风格是函数式改 upvalue 而不是 class 属性,因为我强调算法先于架构
Jack Works:
动苏?啥玩意 = =
rxliuli:
你的中文昵称?
Jack 更喜欢在一个文件中编写多个 func,然后全部命名导出,吾辈更倾向于 class method 的形式
Jack Works:
我这个对 tree shake (webpack) 比较好🤔
duangsuse:
是的, duang 源于成龙洗发液的“头发动啊”,suse 是 Linux 发行,所以叫『动苏』😋 #life
动苏会觉得自称「我」或者「咱」(代替「我们」,我w键坏了) 有点生硬,这样就好很多
duangsuse:
这一点我还是倾向 Jack ,毕竟 Java 算是八股文式 OOP ,没有为实际编程有 toplevel func 样的优化
我可没说错话哦,面向对象的 class 本质是对函数式闭包加类型, property 即 upvalue , method 即子程序化分段,整个对象即 send(name,args) 元方法,真正的面向对象只有「物/例」和其上的名词动词,没有文绉绉的废话甚至混乱 static。 #statement
面向对象把数据和其上操作混合定义是好事,可惜某些人就知道装B 起一大堆半通不通的专有名词,专业术语往往鬼用没得,给人们的思考造成一大堆麻烦。
要是 OOP 最初的作者能有半点实用化的觉悟,绝对不会放任 Jawa 混乱善良合理的编程习性
rxliuli:
但 Java 确实流行起来了而且基本被大规模实用了。。。虽然写起来确实感觉不太舒服,尤其是写过其他更好的语言之后
duangsuse:
所以说它才有机会被 Kotlin 吊打啊~
可惜 JavaEE 是他们自己搞出来自以为高明的八股文,很多 Kotliner 还没做好准备击败他们
CodeHz 📡:
(因为用类作为天然的命名空间分割函数的方法太好了(
duangsuse:
是的,构造器就像可覆写的一个局部变量初始化 header
然后整个类就像一个函数, constructor 提供了初始的变量混入
CodeHz 📡:
(oop 很好)就是无法自然的表达多重dispatch
duangsuse:
polymorphism 多态 不可以吗?
<就有个主次之分了,而且也不是运行时多态
运行时多态上 Sum type 可以 Visitor 啊,也挺方便的
<(有好几个参数需要动态分发的时候写起来还是挺别扭的
c 里搞 tagged union 到处 cast 就不方便吧…… 每个使用处都要检测 tag
请教下什么叫多派发啊
<大概就是这种( https://en.wikipedia.org/wiki/Multiple_dispatch
C#是直接用动态运行时(DLR)了 #dotnet
类似 #Haskell 的 pat match 啊,那样 visitor 的确就不够了,得 trie 数据结构匹配...
非常疯狂,看起来 A.collideWith(B) 和反过来 B,A 是一样的
看起来是个非常有意思的特性,不过我感觉离算法/设计模式比 PLT 近些, visitor 单判定派发更实用一些
Wikipedia
Multiple dispatch
feature of some programming languages
Forwarded from dnaugsuz
对了 Jack ,其实 Serialization 的本质是
这样的操作
上次基础网页设计我就拿这个抽象弄了个改 cssText shift(1) border 的,老好玩了(可惜没带U盘)
Equiv<A,B>(from:(A)=>B, into:(B)=>A) 呢,它上面还可以实现map(x:A,op:(B)=>B):A ; swap(): Equiv<B,A>
lift(op:(B)=>B):(A)=>A; id(): (A)=>A这样的操作
上次基础网页设计我就拿这个抽象弄了个改 cssText shift(1) border 的,老好玩了(可惜没带U盘)
Forwarded from dnaugsuz
不为 specified case 设计是一种设计思想,有时间你可以试试,说不定会有新发现
(这个思想还挺有用的,如果要让项目更可扩展就必须以这种思想设计程序,把问题不断拆分并且巧妙的拼合程序与业务逻辑)
我设计的最喜欢的 ParserKt, BinKt, ArgParser 都有这种思想,不过有点过度了,这种思想要比普通框架大比 Scala,Haskell 小才好用
(这个思想还挺有用的,如果要让项目更可扩展就必须以这种思想设计程序,把问题不断拆分并且巧妙的拼合程序与业务逻辑)
我设计的最喜欢的 ParserKt, BinKt, ArgParser 都有这种思想,不过有点过度了,这种思想要比普通框架大比 Scala,Haskell 小才好用
Forwarded from Blaire Noctis
sed -i 's/stable/unstable' /etc/apt/sources.list
https://t.me/woshiluo_nsfw/249 #Linux #轻松一下
GNU 安全卫士
VLC 影音
git 同步盘
Tor 安全浏览器
Clash 加速器
duck.com 永无广告安全搜索
redd.it 贴吧
youtu.be 视频
apt 软件管家
AUR 应用市场
grub2 引导管理器
Genymotion 安卓盒子
qphotorec 文件恢复大师
clonezilla& 系统备份ghost
Linux 5.x 新技术(NT)内核
systemd 启动管理器
gparted 分区genius
BleachBit.org 清理大师
VNC&scrcpy 远程协助
GIMP 魔术手
Pitivi 会声影
Libre Office
xarchiver 好压
aircrack-ng 万能钥匙
小狼毫(rime.im)智能输入法
Plasma themes 美化大师
cairo-dock 开始菜单小助手
glmark2 跑分大师
Raspberry Pi OS 物联网平台
Transmission&aMule 雷
emacs 文档系统
beamer 演示
KDE Connect 智慧互联
GNU 安全卫士
VLC 影音
git 同步盘
Tor 安全浏览器
Clash 加速器
duck.com 永无广告安全搜索
redd.it 贴吧
youtu.be 视频
apt 软件管家
AUR 应用市场
grub2 引导管理器
Genymotion 安卓盒子
qphotorec 文件恢复大师
clonezilla& 系统备份ghost
Linux 5.x 新技术(NT)内核
systemd 启动管理器
gparted 分区genius
BleachBit.org 清理大师
VNC&scrcpy 远程协助
GIMP 魔术手
Pitivi 会声影
Libre Office
xarchiver 好压
aircrack-ng 万能钥匙
小狼毫(rime.im)智能输入法
Plasma themes 美化大师
cairo-dock 开始菜单小助手
glmark2 跑分大师
Raspberry Pi OS 物联网平台
Transmission&aMule 雷
emacs 文档系统
beamer 演示
KDE Connect 智慧互联
Telegram
Woshiluo 的 NSFW 与 ACGN
GNU 安全卫士
VLC 影音
git 同步盘
Tor 安全浏览器
apt 软件管家
Clash 加速器
AUR 应用市场
VNC 远程协助
GIMP 魔术手
aircrack-ng 万能钥匙
小狼毫智能输入法
Plasma themes 美化大师
Raspberry Pi OS 物联网平台
VLC 影音
git 同步盘
Tor 安全浏览器
apt 软件管家
Clash 加速器
AUR 应用市场
VNC 远程协助
GIMP 魔术手
aircrack-ng 万能钥匙
小狼毫智能输入法
Plasma themes 美化大师
Raspberry Pi OS 物联网平台
#Android #Security https://github.com/drakeet/AppFilter drakeet 实现的 Xposed 模块,用来在 PackageManagerService 中过滤掉指定的 App,防止 debug 版 App 泄露(之前国内有过先例,某杀毒软件自动把某绿色通讯应用的 debug 版上传到其服务器)
因此如果是开发者,还是很有必要保护一下自己的 debuggable 应用
这个是什么鬼🤔面向开发者的设备的? 噢…… 是防止调试设备上 apk 被大数字之类的自动上传
因此如果是开发者,还是很有必要保护一下自己的 debuggable 应用
这个是什么鬼🤔面向开发者的设备的? 噢…… 是防止调试设备上 apk 被大数字之类的自动上传
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.