#Csharp #dotnet #microsoft
https://github.com/dotnet/standard/blob/master/docs/versions.md
.NET Core 会支持,Framework 不支持(补充)
https://github.com/dotnet/standard/blob/master/docs/versions.md
.NET Core 会支持,Framework 不支持(补充)
2 .NET Framework will not support .NET Standard 2.1 or any other later version. For more details, see this blog post.
duangsuse::Echo
在 Ruby 里,要把它解析成 List & Object 的形式,只需要利用 Nokogiri: require 'nokogiri' plain = File.read('test.xml') doc = Nokogiri.parse(plain) root = doc.children[0] def collect_real_tags(xml) i = 1; ret = [] while i < xml.size ret << xml[i] i += 2 end …
可惜没有绘制成图表 plot 好看一些 🤔
— 🔗 有 XXX 的消息条数
众所总周知,这种消息一般是很优秀的消息(跑),值得大家观摩,它们分别是:
https://t.me/dsuse/9512
它的总编号是 9512, 不过,因为零基数组微妙的差异(解析的时候用了两次零基数组),得加上 1 才可以
https://t.me/dsuse/9527
https://t.me/dsuse/9541
https://t.me/dsuse/9576
https://t.me/dsuse/9580
https://t.me/dsuse/9585
...
或者详细一点:
#Ruby #Project 一个失败的尝试,但是我也了解了二进制 IO 的一些信息
https:/...
https://t.me/dsuse/9541
https://zhuanlan.zhihu.com/p/60171538
#dotNet
...
https://t.me/dsuse/9576
#Mozilla #ES6 #JavaScript #frontend #backend 啊,的确,不...
https://t.me/dsuse/9580
#tech #CS 来科普一打有趣的信息技术相关知识: 🤗
1. Windows 里的 A: B: ...
https://t.me/dsuse/9585
5. 手机和磁卡放在一起,会不会『消磁』?
== 对于磁卡来说,『消磁』是什么?
以磁性介质存储...
https://t.me/dsuse/9586
6. 世界上第一个网站是什么?
惊闻刘国梁荣当乒协主席,深感高兴。虽然我们未曾有过交集,但乒乓球运动...
https://t.me/dsuse/9605
https://github.com/duangsuse/RandomPicture 我必须得感谢自己...
https://t.me/dsuse/9621
我待会把坑填完... #Android #blogPOst
https://blog.yuuta.m...
https://t.me/dsuse/9637
效率.... 🤐
那既然已经花了很多时间就再多花一点(皮)
演示一下这个功能:
[DuangSU...
https://t.me/dsuse/9638
最后,快速了解一下 #Android 系统服务 (https://blog.yuuta.moe/201...
https://t.me/dsuse/9643
https://github.com/LineageOS/android_frameworks_bas...
https://t.me/dsuse/9645
#blog #recommended https://bindog.github.io/
...
https://t.me/dsuse/9654
#CS #fix 下面我来给大家解释一下停机问题和 NP 困难到底是什么,和我这里提到的 NP-har...
https://t.me/dsuse/9663
现在开始讲解方才 @drakeet 的排序问题
5 没有被手动排序过,5 排在 1 前面,4 被手动...
https://t.me/dsuse/9676
#Android 类似的设计详询 Android Input Methods (https://dev...
https://t.me/dsuse/9684
感谢 @haoyet @eGluZl 等热心用户的建议,YuutaW 主要参照 https://www...
https://t.me/dsuse/9689
#通知
我们的MTProxy已经上线,欢迎使用
点击这里设置代理 (https://t.me/pro...
r.size #=> 187一共统计了 187 条消息。
r.sort_by { |it| it['published'] }.first['published']第一条消息是
=> 2019-03-24 11:22:00 +0800
2019-03-24 11:22发送的
r.sort_by { |it| it['published'] }.last['published']最后一条消息是
=> 2019-04-05 20:06:00 +0800
2019-04-05 20:06发送的
— 🔗 有 XXX 的消息条数
r.find_all { |it| it['body_type'] == 'HAS_HASHTAGS' }.size
=> 42有 #Telegram Hashtag 的消息,一共有 42 条,约有 20% 的消息被打上了标签
r.find_all { |it| it['body_type'] == 'HAS_LINKS' }.size含链接的消息,一共有 37 条,约有 19% 的消息被打上了标签
=> 37
r.find_all { |it| it['body_type'] == 'HAS_LINKS_AND_HASTAGS' }.size都有的消息有 17 条,占总消息的 9%
=> 17
众所总周知,这种消息一般是很优秀的消息(跑),值得大家观摩,它们分别是:
r.sort_by { |it| it['debug']['no'] }
我们看到,第一条消息是 2019-03-24 11:22:00 的 AXMLParser 广播https://t.me/dsuse/9512
它的总编号是 9512, 不过,因为零基数组微妙的差异(解析的时候用了两次零基数组),得加上 1 才可以
puts r.find_all { |it| it['body_type'] == 'HAS_LINKS_AND_HASTAGS' }.map { |m| "https://t.me/dsuse/#{m['debug']['no'] + 9511 +1}" }.sort.join("\n")
::https://t.me/dsuse/9527
https://t.me/dsuse/9541
https://t.me/dsuse/9576
https://t.me/dsuse/9580
https://t.me/dsuse/9585
...
或者详细一点:
puts r.find_all { |it| it['body_type'] == 'HAS_LINKS_AND_HASTAGS' }.map { |m| "https://t.me/dsuse/#{m['debug']['no'] + 9511 +1}\n#{m['body'][0..50]}...\n" }.sort.join("\n")
https://t.me/dsuse/9527#Ruby #Project 一个失败的尝试,但是我也了解了二进制 IO 的一些信息
https:/...
https://t.me/dsuse/9541
https://zhuanlan.zhihu.com/p/60171538
#dotNet
...
https://t.me/dsuse/9576
#Mozilla #ES6 #JavaScript #frontend #backend 啊,的确,不...
https://t.me/dsuse/9580
#tech #CS 来科普一打有趣的信息技术相关知识: 🤗
1. Windows 里的 A: B: ...
https://t.me/dsuse/9585
5. 手机和磁卡放在一起,会不会『消磁』?
== 对于磁卡来说,『消磁』是什么?
以磁性介质存储...
https://t.me/dsuse/9586
6. 世界上第一个网站是什么?
惊闻刘国梁荣当乒协主席,深感高兴。虽然我们未曾有过交集,但乒乓球运动...
https://t.me/dsuse/9605
https://github.com/duangsuse/RandomPicture 我必须得感谢自己...
https://t.me/dsuse/9621
我待会把坑填完... #Android #blogPOst
https://blog.yuuta.m...
https://t.me/dsuse/9637
效率.... 🤐
那既然已经花了很多时间就再多花一点(皮)
演示一下这个功能:
[DuangSU...
https://t.me/dsuse/9638
最后,快速了解一下 #Android 系统服务 (https://blog.yuuta.moe/201...
https://t.me/dsuse/9643
https://github.com/LineageOS/android_frameworks_bas...
https://t.me/dsuse/9645
#blog #recommended https://bindog.github.io/
...
https://t.me/dsuse/9654
#CS #fix 下面我来给大家解释一下停机问题和 NP 困难到底是什么,和我这里提到的 NP-har...
https://t.me/dsuse/9663
现在开始讲解方才 @drakeet 的排序问题
5 没有被手动排序过,5 排在 1 前面,4 被手动...
https://t.me/dsuse/9676
#Android 类似的设计详询 Android Input Methods (https://dev...
https://t.me/dsuse/9684
感谢 @haoyet @eGluZl 等热心用户的建议,YuutaW 主要参照 https://www...
https://t.me/dsuse/9689
#通知
我们的MTProxy已经上线,欢迎使用
点击这里设置代理 (https://t.me/pro...
Telegram
duangsuse::Echo
AXMLParser parser = new AXMLParser(apkFileInputStream);
int eventType = parser.getType();
while (eventType != AXMLParser.END_DOCUMENT) {
String parserName = parser.getName();
boolean isManifest = "manifest".equals(parserName);
[...]
eventType…
int eventType = parser.getType();
while (eventType != AXMLParser.END_DOCUMENT) {
String parserName = parser.getName();
boolean isManifest = "manifest".equals(parserName);
[...]
eventType…
duangsuse::Echo
可惜没有绘制成图表 plot 好看一些 🤔 r.size #=> 187 一共统计了 187 条消息。 r.sort_by { |it| it['published'] }.first['published'] => 2019-03-24 11:22:00 +0800 第一条消息是 2019-03-24 11:22 发送的 r.sort_by { |it| it['published'] }.last['published'] => 2019-04-05 20:06:00 +0800 最后一条消息是…
😃 那么,简而言之,我觉得有价值的信息:
2019-03-24 11:22 - 2019-04-05 20:06,一共两个星期的时间里,本频道 @dsuse
+ 有 #Telegram Hashtag 的消息,一共有 42 条,约有 20% 的消息被打上了标签
+ 含链接的消息,一共有 37 条,约有 19% 的消息被打上了标签
+ 链接和 Tag 都有的消息有 17 条,占总消息的 9%
+ 187 条消息里,折行最多的消息是这条,它有 4232 个字和 7 条链接。
当然,这 70 条都是回复本频道消息的。
IT 那点事 (YuutaW 鱼塔): 10
羽毛的小白板: 10
duangsuse Throws: 6
Rachel 碎碎念 (IFTTT): 5
Rachel 的消息发布站点 (Rachel Miracle.) via @like: 3
YSC 的频道: 2
duangsuse ¯\_(ツ)_/¯ |学渣 | 我爱学习 | ∈ [E²PROM, 范畴论]: 2
Doge: 2
YuutaW 鱼塔: 2
Rachel 碎碎念 (湘江一桥): 2
DogeSpeed广播: 1
😄 @haneko_daily 被转发的次数最多,继续努力!
😳: 4
😲: 3
😡: 2
😑: 2
🙄: 2
😋: 2
😀: 2
😥: 2
🍹: 1
😐: 1
最火的 hashtags 组合:
所有 Hashtags:
以及他们的消息覆盖个数:
== 非线性查询(当然和算法上那个没有关系啦,就是复杂一点的查询)
// 收集所有单 / 双数索引
受到解析度(只到分钟)和浮点运算准确度的影响,有很多消息都是在间隔一分钟内发完的,统计结果可能不正确。
好啦,还有什么别的信息,请大家自己来发掘呗( 😝 比如说,我熬夜发过多少消息。
def get_link(h); "https://t.me/dsuse/#{h['debug']['no'] + 9511 + 20}"; end+ 一共统计了 187 条消息。
2019-03-24 11:22 - 2019-04-05 20:06,一共两个星期的时间里,本频道 @dsuse
+ 有 #Telegram Hashtag 的消息,一共有 42 条,约有 20% 的消息被打上了标签
+ 含链接的消息,一共有 37 条,约有 19% 的消息被打上了标签
+ 链接和 Tag 都有的消息有 17 条,占总消息的 9%
map { |h| [h['body'].size, h] }.sort_by { |it| it.first }.reverse
map { |h| [h['body'].size, h] }.sort_by { |it| it.first }.reverse.first[1]['links'].size+ 187 条消息里,最长的消息是这条,它有 4475 个字 — 连链接都有 25 条! 🤪
+ 187 条消息里,折行最多的消息是这条,它有 4232 个字和 7 条链接。
sum { |it| it['body'].size } / size+ duangsuse 的平均字数:359 字 / 消息
sum { |it| it['body'].lines.size } / size+ duangsuse 的平均行数:11 行 / 消息
find_all { |it| it['header_type'] == 'REPLY' }.size
+ 过去的 187 条消息里,有 70 条都是回复,占总量 37%find_all { |it| it['header_type'] == 'FORWARDED' }.size
+ 过去的 187 条消息里,有 45 是转发自其他频道或个人的,占总量 24%当然,这 70 条都是回复本频道消息的。
a.uniq.map { |u| [u, a.count(u)] }.sort_by { |it| it.last }.reverse.to_h.each { |e| puts "#{e.first}: #{e.last}" }+ 转发者和条数表如下:
IT 那点事 (YuutaW 鱼塔): 10
羽毛的小白板: 10
duangsuse Throws: 6
Rachel 碎碎念 (IFTTT): 5
Rachel 的消息发布站点 (Rachel Miracle.) via @like: 3
YSC 的频道: 2
duangsuse ¯\_(ツ)_/¯ |学渣 | 我爱学习 | ∈ [E²PROM, 范畴论]: 2
Doge: 2
YuutaW 鱼塔: 2
Rachel 碎碎念 (湘江一桥): 2
DogeSpeed广播: 1
😄 @haneko_daily 被转发的次数最多,继续努力!
sort_by { |it| it['hashtags'].size }.reverse+ 具有最多标签的消息是这条,它有足足 8 条标签!
sort_by { |it| it['links'].size }.reverse.first
+ 具有最多链接的消息是这条,它有 25 条链接!同时也是字数最多的消息!find_all { |it| it['header_type'] == 'A_PHOTO' }.size过去 187 条消息里,一共有 29 条广播是单纯的一个照片 🖼
find_all { |it| it['header_type'] == 'A_ALBUM' }.size过去 187 条消息里,一共有 5 条广播是照片集 📸
find_all { |it| it['header_type'] == 'IS_STICKER' }.size可爱 🐱 的 duangsuse 在过去 187 条消息里使用了 28 个 sticker 抒发自己的感情,使用的表情这么多:
find_all { |it| it['header_type'] == 'IS_STICKER' }.collect { |it| it['ext'] }.yield_self { |r| r.uniq.map { |u| [u, r.count(u)] }.sort_by { |it| it.last }.reverse.to_h.each { |e| puts "#{e.first}: #{e.last}" } }😔: 7
😳: 4
😲: 3
😡: 2
😑: 2
🙄: 2
😋: 2
😀: 2
😥: 2
🍹: 1
😐: 1
find_all { |it| it['header_type'] == 'HAS_FILE' }.sizeduangsuse 在过去 187 条消息里发了 8 个文件,它们是:
find_all { |it| it['header_type'] == 'HAS_FILE' }.collect { |it| it['ext'] }["axml.rb", "AndroidManifest.xml", "AndroidManifest.xml", "TextSort.kt", "RandomPicture.kt", "Vibrator.svg", "Vibrator.png", "Vibrator.svg"]
最火的 hashtags 组合:
collect { |it| it['hashtags'] }.yield_self { |r| r.uniq.map { |u| [u, r.count(u)] }.sort_by { |it| it.last }.reverse.to_h.each { |e| puts "#{e.first}: #{e.last}" } }结果太长,在这里查看
所有 Hashtags:
hs = s.flatten.find_all { |it| it.is_a? Array }.flatten.map { |s| s.tr(" ", "") }#Android #zhihu #KDE #Low #Haha #life #tech #tencent #WeChat #weibo #share #tools #dev #Markups #Telegram #Hack #aop #Huawei #通知 #Freedom #sysadmin #GitHub #travis #CI #Sysadmin #Linux #Coolapk #Web #frontend #HTML #China #school #Microsoft #Life #VisualStudio #-} #OOP #web #geekapk #doge #CS #fix #CSharp #School #blog #recommended #bin #backend #Kotlin #Java #Share #svg #blogPOst #PL #JVM #Moha #code #ALgotithm #DuangsuseSB #GeekApk #SQL #Learn #wiki #Mozilla #ES6 #JavaScript #MoHa #Paper #haha #dotnet #bad #OOP_Delegates #Parallelism #dotNet #Csharp #Windows #performance #Channel #weekly #linux #Ruby #Project
"#" + hs.uniq.join(' #')
以及他们的消息覆盖个数:
hs.yield_self { |r| r.uniq.map { |u| [u, r.count(u)] }.sort_by { |it| it.last }.reverse.to_h.each { |e| puts "#{e.first}: #{e.last}" } }太长,这里看
== 非线性查询(当然和算法上那个没有关系啦,就是复杂一点的查询)
// 收集所有单 / 双数索引
ar = []; ar2 = []
i = 0 // 0 2 4 6
while i < self.size; ar << self[i]; i += 2; end
i = 1 // 1 3 5 7
while i < self.size; ar << self[i]; i += 2; end
aa = ar.zip(ar2)
我们将比较相邻两消息之间的关系。aa.zip(aa.map { |ms| ms.last['published'] - ms.first['published'] }).sort_by { |p| p.last }.reverse
间隔最长的两条消息是这条和这条,间隔 44880 秒(12 小时)b.map { |h| [h.last, h.first.first['body'].size ] }.map { |a| a.last / a.first }.select { |it| not it.nan? and not it.infinite? }.sort.reverse平均打字速度:7 字 / 秒 🤔
受到解析度(只到分钟)和浮点运算准确度的影响,有很多消息都是在间隔一分钟内发完的,统计结果可能不正确。
好啦,还有什么别的信息,请大家自己来发掘呗( 😝 比如说,我熬夜发过多少消息。
Telegram
duangsuse::Echo
AXMLParser parser = new AXMLParser(apkFileInputStream);
int eventType = parser.getType();
while (eventType != AXMLParser.END_DOCUMENT) {
String parserName = parser.getName();
boolean isManifest = "manifest".equals(parserName);
[...]
eventType…
int eventType = parser.getType();
while (eventType != AXMLParser.END_DOCUMENT) {
String parserName = parser.getName();
boolean isManifest = "manifest".equals(parserName);
[...]
eventType…
#life #dev duangsuse 落实 10:30 准时睡觉『政策』。 🐱
考虑到健康原因(不让自己的努力白费),每晚 10:30(h:m) 必须立即睡觉
== duangsuse::Echo 参考 #Telegram hashtags
duangsuse::Echo 常年利用 hastags 标记消息所含知识领域,并且,这也会为未来 Echo 频道进行简单准确的数据统计带来可能(不然,我也有其他手段,比如 NLP、统计预测)
以下是新的标签实例(不区分大小写、不能保证消息只含这些标签):
== 消息平台部分
#Telegram #zhihu #Github #so #Coolapk #book #wiki
== 注释部分
#life #China #School #Statement #lib #recommended #low #fix
#project #blog #share #Learn #paper
#dev #tech #art #meetUp #conference
#Moha #Haha
#gnu
#Microsoft #Mozilla #WeChat #QQ #Weibo #Tencent #Baidu #Ali #Qihoo
#tools #code
== 程序设计语言部分
#Kotlin #Java #JavaScript #JavaScript_ES6 #TypeScript
#Rust #Go #Swift #Dart #Crystal
#Ruby #Python #Perl #Tcl #Lua #PHP
#C #D #Cplusplus #CSharp #Objc
#Pascal #Fortran #Delphi #Ada #Basic #VisualBasic
#Scheme #Haskell #Scala #Clojure
#TeX #Graphviz
#Octave #Matlab
#Shell
(有些写出来是为了鼓励我去写,其实不一定真的写过)
== 软件平台部分
#Android #Windows #Win32 #MacOS #Java #Java_JVM #CLR #Qt #GTK #Tk #WxWidgets
#CSS #XML #JSON #KDE #Postgres #dotnet
== 软件技术领域部分
#backend #sysadmin #frontend #sysadmin_net
#OI #CS #IT #Informatics
#stat #ann #ann_dnn #machl
#math #math_linearAlgebra #math_discrete
#se #se_dia #se_ci #se_ee
#comm #net #www #web #http #html #mail #wireless
#circuit #embedded #os #db #db_relAlgebra #SQL
#bin #encoding #encoding_audio #encoding_image #encoding_video #encoding_text
#hpc #parallelism #distributed #simd #gpgpu #crypto
#pl #pl_plt #ce_vee #ce #ce_optimize #fp_monad #fp_proof #fp #oop #oop_arch #sp #parser
#algorithm #struct #lists #maps #sets
#security #security_lowlevel
#signalProc #nlp #phonetic
#cg #cg_dip #cg_3d #cg_2d #cg_lowlevel
#gui #gui_animation #gui_layouts #cli #visualization
考虑到健康原因(不让自己的努力白费),每晚 10:30(h:m) 必须立即睡觉
== duangsuse::Echo 参考 #Telegram hashtags
duangsuse::Echo 常年利用 hastags 标记消息所含知识领域,并且,这也会为未来 Echo 频道进行简单准确的数据统计带来可能(不然,我也有其他手段,比如 NLP、统计预测)
以下是新的标签实例(不区分大小写、不能保证消息只含这些标签):
== 消息平台部分
#Telegram #zhihu #Github #so #Coolapk #book #wiki
== 注释部分
#life #China #School #Statement #lib #recommended #low #fix
#project #blog #share #Learn #paper
#dev #tech #art #meetUp #conference
#Moha #Haha
#gnu
#Microsoft #Mozilla #WeChat #QQ #Weibo #Tencent #Baidu #Ali #Qihoo
#tools #code
== 程序设计语言部分
#Kotlin #Java #JavaScript #JavaScript_ES6 #TypeScript
#Rust #Go #Swift #Dart #Crystal
#Ruby #Python #Perl #Tcl #Lua #PHP
#C #D #Cplusplus #CSharp #Objc
#Pascal #Fortran #Delphi #Ada #Basic #VisualBasic
#Scheme #Haskell #Scala #Clojure
#TeX #Graphviz
#Octave #Matlab
#Shell
(有些写出来是为了鼓励我去写,其实不一定真的写过)
== 软件平台部分
#Android #Windows #Win32 #MacOS #Java #Java_JVM #CLR #Qt #GTK #Tk #WxWidgets
#CSS #XML #JSON #KDE #Postgres #dotnet
== 软件技术领域部分
#backend #sysadmin #frontend #sysadmin_net
#OI #CS #IT #Informatics
#stat #ann #ann_dnn #machl
#math #math_linearAlgebra #math_discrete
#se #se_dia #se_ci #se_ee
#comm #net #www #web #http #html #mail #wireless
#circuit #embedded #os #db #db_relAlgebra #SQL
#bin #encoding #encoding_audio #encoding_image #encoding_video #encoding_text
#hpc #parallelism #distributed #simd #gpgpu #crypto
#pl #pl_plt #ce_vee #ce #ce_optimize #fp_monad #fp_proof #fp #oop #oop_arch #sp #parser
#algorithm #struct #lists #maps #sets
#security #security_lowlevel
#signalProc #nlp #phonetic
#cg #cg_dip #cg_3d #cg_2d #cg_lowlevel
#gui #gui_animation #gui_layouts #cli #visualization
因为 #Basic 没有内建 Regex 支持,我只好自己用 VBA.Strings 写的低效辣鸡满是 Shadow Copy (而不是 Zero Copy... 老是传 ByValue,我怀疑它是不是真的要复制一份字符串... 那多伤感情...)的扫描程序,虽然我其实可以用 Windows 的 COM Object 的.... 而且这是 #dotnet #CSharp VisualBasic for Applications 而不是 VisualBasic.NET 所以连
Of
Generics 都没有,数组都得是 Variant(无类型检查),辣鸡死了... 话说 VB.NET 还有 Class、Interface、Type、Namespace 什么的?///🤔 #dotnet
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false" />
</runtime>
</configuration>
[o]configuration:
runtime:
AppContextSwitchOverrides:
attr: { value: 'Switch.System.Net.DontEnableSystemDefaultTlsVersions=false' }
Telegram
YSC 的频道
SSR C# 更新订阅链接的时候默认不使用 TLS1.2 协议,有没有办法既不用修改代码重新编译,也不用修改系统注册表开启呢?
答案是有的:
https://kevinchalet.com/2019/04/11/forcing-an-old-net-application-to-support-tls-1-2-without-recompiling-it/
在 exe 同目录新建 <exe文件名>.config ,然后写入
<?xml version="1.0" encoding="utf-8"?>
<configuration>…
答案是有的:
https://kevinchalet.com/2019/04/11/forcing-an-old-net-application-to-support-tls-1-2-without-recompiling-it/
在 exe 同目录新建 <exe文件名>.config ,然后写入
<?xml version="1.0" encoding="utf-8"?>
<configuration>…
Forwarded from 羽毛的小白板
看了看生成的 asm 感觉是因为有两份累加操作使得 CPU 并行执行。归根到底还是目前 RyuJIT 缺 loop opt
https://twitter.com/badamczewski01/status/1357603334706909185
https://twitter.com/badamczewski01/status/1357603334706909185
Twitter
Bartosz Adamczewski
Loop Optimizations can be surprising: #csharp #dotnet #programming
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
Microsoft 恢复了 dotnet CLI 的热重载支持。dotnet/sdk#22262 已经被合并。 #dotnet #ms
https://devblogs.microsoft.com/dotnet/net-hot-reload-support-via-cli/
https://devblogs.microsoft.com/dotnet/net-hot-reload-support-via-cli/
Microsoft News
.NET Hot Reload Support via CLI
Last week, our blog post and the removal of the Hot Reload capability from the .NET SDK repo led to a lot of feedback from the community. First and foremost, we want to apologize. We made a mistake in executing on our decision and took longer than expected…
map({it+1},[0])|{[*it]}, 1|{it+1}
为何是有效 Python 🤔#tool #py #ce ✅帮我写个python重构工具,把
{it+1} 改成 lambda it:it+1
,把 1|{it+1} 改成 (it:=1, it+1)[-1]
;用match✅给我些基础 lib2to3 fixer, 如把 "abc" 加上 '+' 前缀 ;另外再用 ipywidget 给lib2to3 一个UI (+5对话)
❌写个python重构工具,把 def 和其内的def 转换为class,如
def Point(x,y):
def len(k):x*y*k
变成@dataclass
class Point:
x:int; y:int
def len(k):return self.x*self.y*k
❌ 编程处理def f的 defaults 。请以参数名设置默认值:参数名为n则 default=1, 为s=""
✅利用 astor 做for循环展开,例如将
for x in evals([1,2]): f(x) 1句改为 f(1);f(2)
2句 。只要for x in 的集合是 evals(e) 就对e进行求值,并将x替换为repr✖️ 用 astor 重构,实现函数内联。
@evals
def f(x): x+=1; return x
f(f(0))
变成
x=0; x+=1; x1=x; x1+=1; x1
❌整理我发给你的gist链接里的代码
💢请以py实现 1+1 这种运算链的栈化并进行 linux x86_64 JIT汇编编译和执行。如 cal("1+1+$0")(3)=5 :尝试用asmjit执行pushpop汇编
🤔https://t.me/kotlin_cn/21458
https://t.me/Javaer/893241 #kt #ce #dotnet