duangsuse::Echo
400 subscribers
3.82K photos
103 videos
573 files
5.01K links
duangsuse技术相干订阅
这是 @duangsuse 与技术有关的发布频道
duangsuse 的另外有 throws 闲杂频道
@dsuset
转载频道 @dsusep
duangsuse 有coding,github,gitlab帐号和bilibili帐号

极小可能会有批评zf的消息 如有不适可以退出

suse的小站:https://piped.stream
ps 另有别名 popf.rip
ʕ•̀ω•́ʔ✧ 🐶🍎🏠生死🐜
(>ω<)岂因祸福避趋之 一鿕
Download Telegram
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 最后一条消息是…
😃 那么,简而言之,我觉得有价值的信息:

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' }.size
duangsuse 在过去 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(" ", "") }
"#" + hs.uniq.join(' #')

#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.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 字 / 秒 🤔

受到解析度(只到分钟)和浮点运算准确度的影响,有很多消息都是在间隔一分钟内发完的,统计结果可能不正确。

好啦,还有什么别的信息,请大家自己来发掘呗( 😝 比如说,我熬夜发过多少消息。
#SQL #Postgres #db 🤔 SQLite Expert 也是不错的产品,我听 Qt 开发指南上看的,Qt 对 SQL 查询客户端也有封装
#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
#cplusplus #sql join 是按AB共同键的相等性过滤。中间三角是交、并、并-交
总之 join B on A.k=B.k 左交就是A+B查询,加 where B.key=NULL(仅选B没有的部分) 就是 A-B
所以L/R/inner/fullouter join 的复杂度是 O(nn)这种 for(a)for(b)

此外SQL 还有GROUP BY HAVING(=where)
#dev 现在的许多傲慢消失了,感觉好像啥也没专门去学一样😌

以前觉得组合器是特殊的,现在只是利用设计DSL
以前想长就是好、快,现在长就是烂、空洞
以前想多就是系统性,现在多就是冗余、套版

以前觉得CSS盒模型是坏的,现在发现它比其它平台更适合而贴切,言词不多,贵在扩展
以前想代码生成是大的,现在FileTree+列表处理 随手就能做
以前想反射是难的,现在发现只是名词太长,class{val/*field*/;@WTF fun} 没啥不好区别,换框架看文档对个名词就成
以前解析器是不会的,现在提取前缀,组装返回值,预过滤行号流、记录span词区间 ,根本不需要分词器或任何工具和严谨

以前不知道UI框架里线程做什么,被 web 的 timers,worker post/onMessage 等 0阻塞API 矫正了,原来Thread级阻塞去 event loop 就是检测手势,查找调度Task 的,而并发异常只会随机出现; 队列是数据,随便在哪 add pop 阻塞poll;懂了为啥想放几音乐不能用for、想 fetch() 要暂断执行此函数 await 或.then(op)

以前没看到nav浏览栈是什么,被 web 的 PJAX 矫正了,原来可把生成View的数据保存pushState起来,也因此理解内存对象不都可序列化
以前不会HTTP和Cookie(服务端KV之K),现在只想大的API绑定,忽略无关数据交换的细节 httpd((req,res)=>res.write
以前不懂 SQL 和ORM,现在我只当它是严谨化加速列表处理过滤,以及事务和JOIN
以前连分页都觉得好神奇,现在 a.chunk(2)=[a.slice(0,0+2), a.slice(2,2+.. 和类似的列表处理写过无数;各种控件 tab,slideshow,fab,drawer,drop-upload 也早不稀奇,反而觉得还不够可配置

#PLT ”动态语言“ ”脚本“确实不严谨,但class{}大定义也是从小程序组合起来的,只在框架内思考会失去对框架本身的认知、放弃优化框架的可能。 例如反射只是元编程的运行时形式,«Ruby元编程»是本好书;编译期和运行期差别只在有无变量、编译解释只在有无缓存,代码生成是编译期计算。 强弱类型在于兼容和转换的显式隐式,类型推导可以让用户少手写编译期信息,类型检查能让人和机器少犯傻。 语法和语言工具用于表达,写法只有缘由,没有条条框框。
JS和CSS,JSON,YAML,HTML ,都是嵌套结构构成,只是人赋予了JS执行序、计算变量,而只让JSON解释为构造1数据--prettify又怎不是1数据 ;结构相同语法不同、数据相同命名不同,等于完全相同
效果相同类型不同 —泛型和 map,filter 函数正是如此
好的优化能让人知道。而不 prof, %timeit 怎么知道性能快慢

多观察或许就可预测,可预测或许就可控制。 被带偏或试着控制,各有好处,但没有理解缘故就只能被动模仿,束手束脚害怕出错。
就好像一个未良好复用的动作,能少一行代码,却会造就整个软件、更多软件里无数多余代码、不完善功能、高学习难度

以前不知模板和 animation/queue 是什么、粒子是为什么,现在我自己做过
以前不会二进制,现在 Read/Writer 流都被我抛了,我想0copy直接mmap()绑定,不停留在”Int=4x Byte“
以前不会画画,现在 arc rect fill stroke % alpha hsv(hsl) 一把梭,视频和参动之画也绘,了解向量计算=角度无关位置=(A-B)0点角,也认识到”非主流“ GLSL 打散绘制的方便
以前不知道值类型(全复制)、位置引用和惰性计算/编译期宏,和许多函数式Type术语,现在大致分清了
以前不懂编译原理,现在从 ASM chunkspy r2 libdl.so链接器 objdump shellcode 看到了更多、从 kamet 了解了 AST->LLVM::Value 树转化、地址和类型处理

从逆波兰了解了优先序重排和栈,从S-expr嵌套列懂了局部变量=栈位置 及()=>{} 闭包是程序+变量数据的实质;从无数次重写中明白了编程的实质是表达思维,多余代码只是环境限制
从函参返memo 了解了递归缓存与伪递归(递推) ;从深先树遍历了解了 DFS/BFS 途径/可达搜索,以及有更实际的 Dijstra/A*/JPS
从前缀树Trie+failPath=AC的关系了解了状态(自动)机、KMP的Map状数组了解了OI的一些惯用法,试出了1行的JS后缀合并树,从B站的一些视频明白了算法有许多讲法,之间差异也很大
从自顶向下,伪(左)递归转循环、去除流回退(peek/backtrack)到 LL(预判=k) 机; 到自底向上yacc/Simp?LR/LALR ,我不做无意义的打断优化;不把大状态机+报错,嵌套表等小儿科当编译原理。 别只用切碎的程序状态解释实现目的,复辟冯诺时代编译-汇编序列模板


以前很讨厌设计模式,现在会区分 Visitor,Delegate(T-by-obj,"proxy"),Observer 等真正的设计模式和

Chain(责任链),Adapter,Singleton(lazy),Builder(return-this链),Factory(选择子类new),抽象Factory(选中子类构造器), 等假装的设计模式和
Iterator,Context,Prototype(链上级虚表),Filter, SvcLocer(Lazy ctx+调用cache),

State(废话,啥函数不看this val),模板(废话,OOP封装继承是为啥的),策略(废话,OOP接口多态是吃白饭的),Command(函数闭包) 等非设计模式
明白 FP与OOP 间的异同,闭包即SAM对象,对象即 send(fname,*arg) 闭包

以前只会Java 甚至AWT/swing/net 都记不住,现在 JS/TS,Python,Kt 都是常用语言,也会 Ruby,C#/Powersh, C,C++,Scala/Hs ,我会在JS和Python 间按API和UI选择写脚本处理工具
以前害怕项目build定义,现在讨厌
以前觉得真理是系统性的,现在觉得真理也可以有开头和前言

以前相信教条规范,现在明白教条和权威也有局限性(比如不会自动化重构),需要择优
以前相信web是菜鸡聚集地,现在明白有人在写的 和你不是一个JavaScript
以前相信原理是极少数人在学的,现在明白任何人做同样的事情,也有选择与目标

以前觉得C难,现在知道C难点,以及导致难点的历史目标与时代局限性
以前只能看到app"前后端/桌面" ”小工具“的一亩三分地,现在明白嵌入式、各框架游戏、专业软件 比它们更有趣
以前尽量严谨,现在废话要简写,突出顺序和重点

我学到的最终不是知识,而是简化知识的方法
我编写的最后不剩代码,只是代码后的目的
#plt #sql #java 嗯 我前两个月有几天做了一个中文的SQL,并不是机翻,这几周可能会重置给到代码生成和DBA UI的功能,大家可以来学学SQL的写法:
https://duangsuse.github.io/tv/%E9%BB%91%E4%BA%86/db.htm
#web #tool 笔记本 https://xwmx.github.io/nb/
https://ia.net/presenter .md=>.ppt
#js https://t.me/swiminthedream/1256 无界面的社交网络🌚🌝

#dontknow css 可以在浏览器里即时编辑🌚: style[ContentEditable]{display:block}
所以H5是未来的技术(

#algor #py #dalao http://whatbeg.com/2016/11/16/godtianpinyin.html 自己写谷歌拼音?
#hard #sql #rust https://zhuanlan.zhihu.com/p/596119553 图论优化器
#os 冷知识
0. 旧闻 在中国熟悉二进制和流媒体的工程师,月薪5k https://t.me/haneko_daily/2030
1. gcc 编译出 APE格式的sh脚本能在win下执行
2. 支乎程序员全平台添加截屏隐水印 ,和B站BV号、抖音禁粤语有的一拼 #党八股
3. Flash 模拟器 Ruffle.rs 对 AS3 SWF 的支持迅速增长 ref
4. 大数据杀熟,中国人专画中国人 https://t.me/shudongcomin/7743
5. https://t.me/rynif/30235 #dev 缩进风格

#sql 冷知识

1. 非要用MySQL 结果制造很多工作 于是玩hack
2. Postgres 的纯js #WASMNode 实现
3. 不用datetime 怎么存时间
int(11)中的 int 决定了存储空间,11 则是和 ZEROFILL 配合的,只影响显示
4. pgsql 扩展程序 #bing
https://t.me/haneko_daily/2224?comment=562
5. sql合成音乐 https://t.me/rynif/30327
duangsuse::Echo
#algorithm #bing 二分查找 spiral sorted ndarray 最好把它转换为1d,再转换回来以获取 '1'的位置 #py #code def unrot(a, out): while a.size: out.extend(a[0]); a=np.rot90(a[1:]) #难以用concat矩阵滚出螺旋 def rot(a, m): ia=np.reshape(range(len(a)), (m,-1)) unrot(ia, ord:=[]) return…
#FP #sql #code 真正的 relational 笔记本👏
那种能 x+2=5 的。SQL做不到呢(预先 insert values (3,2,5)? )

花了一大把时间用来学习在逻辑式里写DFS搜索..

今天终于把序列化(/解析)器项目前堆积的事项完成了, 虽然这质量,怎么看都是很失败..

也就主要是for loop 的功能,但确实简洁了点。 学了关系式 constraint (注意不是sympy线代)后,觉得能更好的理解类型系统了
#sql DFS搜索 像素图填色 in Prolog

btw. fill(_,X) 是 “从任意一点探索区域X , 一共能收集到多少X”
v(P,0) : 查询颜色是0的P=[X,Y]
conn([2,1], P1) : (2,1)=0 四邻里 0值格的座标们

不知为何很慢
看起来好像简短了,实际只是省掉 if 和解构的代码量 😒


有趣的是,conn(四邻) 是基于 |X-x|+|Y-y|=1 的参数方程(GL常用),而非 x+1,y+1 直接迭代,所以 dfs :- C=conn(A),dfs(C) 就必须写成 conn(A,C) 的约束,尽管C只是A的“过滤结果”, 对C的穷举确实不像“返回值”能做到的

https://www.swi-prolog.org/pldoc/doc/_SWI_/library/lists.pl
关系式和SQL一样支持查询结果 distinct(unique)
之前用 findall(X, Func,R) 莫名出问题,也用不了lambda ,累死了
duangsuse::Echo
#algorithm #FP 版的 list 累加法杨辉三角 ps. 也可以用DP和代数式推算 P2:垃圾 itertools #py #code from itertools import accumulate,islice,chain fib=iself(2,lambda x0,x1: chain([1,1], (x+y for x,y in zip(x0,x1)) )) def 杨辉(): #pascal_triangle row = [1] while True: yield…
#sql #ts Prolog 牛逼! 正确的关系式搜索+ 同时实现 parse 和 toStr 😱

#zhihu 灵感来源

e(E) -->{E = [I,Ea,Eb]}, %重写规则, 'eX'为优先级

%利用 链|e1(E) 括住内"*/"
e1(Ea), op(I,"+-"), e(Eb); e1(E).
e1(E) -->{E = [I,Ea,Eb]},
e2(Ea), op(I," */"), e1(Eb); e2(E).

e2(X) --> number(X); ("(", e(X), ")"), !. % 单项值/字面
op(I,W) --> [C], { nth0(I0,W,C),nth0(I0,"加减乘除",I) }.


5行就能实现一个str”模板“,写法相对匮乏但功能丰富,吊打 Haskell 的 TextCombinator 🥺

❤️ https://eu.swi-prolog.org/pldoc/man?section=basics
这里还有个Lisp实现