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

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

suse的小站:https://piped.stream
ps 另有别名 popf.rip
ʕ•̀ω•́ʔ✧ 🐶🍎🏠生死🐜
(>ω<)岂因祸福避趋之 一鿕
Download Telegram
「世界上最具备扩展性的 Qt 点名器 ChickPick (原名 randomSelection)」

「ChickPick Core」 #project #dev #qt #design #windows

命令行 pick.exe (Windows 下) Command line

pick [input = chicks.txt] [persis = -] [tasklog = -]
pick input [persis = -] [tasklog = -]
pick input persis [tasklog = -]
pick input persis tasklog

pick --help -h -help /help /h
pick --version -v -ver -version /ver /v /version
pick --options -opts /options /opts
pick --check -check -cf /check [file]
pick @respfile
pick --license -license /license
pick --makeini -makeini /makeini [output]
pick --gui /gui -gui

部分文件可以选用 !stdin !stdout !stderr

环境变量 Environment variables

FCOLOR
FFCOLOR
FFSIZE
FNAME
FPRESSDELAY
FPRESSALLOW

PFSIZE
PFCOLOR
PCOLOR
PDELAY
PWIDTH
PHEIGHT

RPOPLAST

RBATCHSIZE
RBATCHFILE
RURANDOM

(只读变量)
RLIST
RPFILE
RLFILE
RLASTITEM
RLASTINDEX
(结束只读变量)

VERSION

PLUGINS
ANIM
ANIMSPEED
LOGBATCH
LINESEP
SHOWTRAY
EMITSIG

ATEXIT
ATRANDOM
ATANIMSWITCH

标准项目结构 Standard project structure

Plugins/
Profiles/
Dicts/
Counts/
Logs/
chickPick.exe
chickPickWrapper.exe

文件 signature

文件:列表.txt,大小 8 Unicode 字符(10 项),文件校验码 xxxxx,总共点名 1 次(1 项被点过)

日志文件 Log file format

// 跳过一行文件标记
// 上次更新日期文本

<日期>
[时间] 名字

统计文件 Count file format

// 跳过一行文件标记

A: 2
B: 3

GUI 管理器 GUI Wrapper


列表
——
help | about | mode | setup 右击->profiles

mode 列表:
rand rc-> urand rc-> simplerand(使用非为平板设计的 UI,而不是悬浮窗)
count
logs rc->show all logs
edit rc->new

额外知识:
1. 为什么没有完全分开 wrapper 和核心
因为这样静态链接在 windows 上就很难受
2. 点名的是列表还是集合
有序列表,就是说可以通过调整人名出现的次数控制被抽中的可能性
duangsuse::Echo
https://github.com/telegramdesktop/tdesktop/blob/d98bbca353fa12cc7b7fcecd193335db363aec35/Telegram/SourceFiles/core/click_handler_types.cpp#L32 #telegram
(其实我一直以为 Telegram Desktop 源码结构维护得那么好的话,这种链接路由应该专门分一个文件实现的,但其实内联在链接点击里实现了?(其实只不过是在那个文件里实现,不是在点击事件函数里实现的

(说实话,我不是很了解他们是怎么找到这些黑科技一样的玩法的... 我都懒得玩这些呢... 🙈 (找 @lwl12 问问去

我们来分析一下相应的算法 #telegram #algorithm #frontend #qt #cplusplus #desktop #linux #tool

... 算了直接找我要用的吧,首先我们说说 Telegram links 基本的 impact

telegramdesktop/tdesktopd/Telegram/SourceFiles/core/click_handler_types.h@d98bbca353fa12cc7b7fcecd193335db363aec35

clickHandler 就是链接派发逻辑。它分类对 Post 里内联的链接进行派发(到实际动作,如打开用户信息窗口),Types 是里面处理的数据类型,如用户 ID、网址 URL 等

public:
TextClickHandler(bool fullDisplayed = true)
QString copyToClipboardText()
QString tooltip()

class UrlClickHandler
class HiddenUrlClickHandler
class BotGameUrlClickHandler
class MentionClickHandler
class MentionNameClickHandler
class HashtagClickHandler
class CashtagClickHandler
class BotCommandClickHandler

充分体现了面向对象编程的继承性和抽象性(迫真

然后我们看看实际上的实现们

QString tryConvertUrlToLocal(QString url)
where

matchOptions = Regex::CaseInsensitive
bool telegramMeMatch = Regex::match(qsl("^https?://(www\\.)?(telegram\\.(me|dog)|t\\.me)/(.+)$"), url, matchOptions)

if
telegramMeMatch {
query = telegramMeMatch->capturedRef(4);
query->ifMatch("^joinchat/([a-zA-Z0-9\\.\\_\\-]+)(\\?|$)", x => x->ifMatch("^/\\d+/?(?:\\?|$)", url("&post=")))
query->ifMatch("^addstickers/([a-zA-Z0-9\\.\\_]+)(\\?|$)")
query->ifMatch("^share/url/?\\?(.+)$")
query->ifMatch("^confirmphone/?\\?(.+)")
query->ifMatch("iv/?\\?(.+)(#|$)")
query->ifMatch("socks/?\\?(.+)(#|$)")
query->ifMatch("proxy/?\\?(.+)(#|$)")
query->ifMatch("^([a-zA-Z0-9\\.\\_]+)(/?\\?|/?$|/(\\d+)/?(?:\\?|$))")
}

... 有点累,不用伪代码了吧,实现细节都抖出来有点多了
... 总之,我觉得应该搞一个自动正则匹配 URL 然后拿指定逻辑替换的插件,这样以后我就不用手动弄优雅(隐式)链接了

$伪 hashtag
#JavaScript #Qt #desktop #dev #Google 同意,绝对同意。
#frontend #Unity #gamedev #Qt #desktop Qt 5 里就支持的有 Qt CSS(QSS)用来增强界面风格动态自定义的能力
是的,可惜我连 #Windows Form 都不是很会,目前唯一用 #Qt 给 Windows 端开发过一个 Helloworld 级别的应用,不过 Win 上开发平台自然现推 WPF 喽,可惜我不熟悉 MS 的 Desktop Application 技术,就知道个 Mono Gtk# 和 old-style Windows forms... 其实 Windows 也提供了类似 Qt QML 的开发平台(好像就是 WPF 来着...)不过就 duangsuse 这种 Win32 都不熟悉的不合格开发者,就免谈这么多了。
#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
duangsuse::Echo
#bin 然后为了证明我不比 drakeet 差,只是缺少拿来实践的时间, 我分析一下这篇文章《5分钟学会十进制转换成二进制的快速口算方法 & Java输出二进制的代码》,然后就睡觉。 当然,至于 Android 那一套,比如异步、Timer、MessageDriven、Android XML、Android Widgets、Resources、Android Gradle Build 集成、库打包、封装、Android Layouts、Views、Paint、Android Layout Animat…
对了,其实 #Android 应用和(我没写过,不过别人写过)iOS 应用其实都和 #Qt 应用很像的,如果想学会开发多平台的 #GUI 应用程序,不妨学好 Qt
一些基础比如 Canvas (Qt 里是 QPainter 和 QGraphicsScene,Android 里也有 PorterDuff Compositor 和 View Canvas)不就会了么( 🖥
#Go #Qt #Cplusplus 🤔 让我想到了 int main(int argc, char **argv) { QApplication app(argc, argv); return app.exec(); }
#task 嗯嗯,那么明天又要上学了啊... 看来本来打算完成基本的计划都无法完成了呢,那计划就只有继续讲一些理论向的东西和开发一个应用算了

+ #PLT Zero sized types、Empty type(bottom type) 的 Sum(+) 和 Product(*): 为什么要给他们起这种名字

+ #Qt 5 Widgets 开发一个支持插件的 "Dullboy" 应用,其目的在于利用和 KDE Applet / Systemd 的集成,定时启动强制锁死用户界面一段时间,让我这种“工作狂”(无褒义,仅仅是我对自己的戏称)不能随便糟蹋身体健康 的说。

+ 顺带讲一下关于传统序列解析器架构策略相关的内容(比如命令行参数解析器)

+ 回复在 #Bilibili 《黑子的篮球》 S1 里看到的一个 NOIP 同好,虽然我不是 #OI 方面的说... 也不是不可能,但现在不是

== 这些是明显做不完的

+ #PL C++ 弄一个 REPL 支持的计算器,有所谓的 MidTreeParser 抽象和 ReplLexer 这种支持 Hook 上输入事件的 Lexer
+ LLVM 开发 Toy 语言的编译器,当然是照 LLVM Cookbook 画瓢,不过我是不会抄里面的不良实践的(比如,明明是返回 nullptr 却写成返回 0、到处使用 global linkage 的 static 变量)

+ Android 视图应用:Lime tokenize view
尝试开发一个使用 RecyclerView, Fragments, Services 的 Android 应用

应用向的人不准喷!不准喷!与你们无关!你们熟悉的我只是暂时没有时间去熟悉,也不要拿冰封哥的 CastleGame 数据库访问 show 我,比起 SQLite RDBMS,还是等会关系代数了或者说会图数据库了才能来说话!

+ Android 版本的 AllDreamWall & SDK

SDK 想做成 Maven 管理库的形式,不过不用为 Central 填写元数据,而且也只是自己发布的说
同样不准喷,真的不能喷啊... 这有什么的呢?

+ 默写一点关于 HTML4(5) 和 CSS 相关的东西,写点布局

+ 继续写完 smms.es6 (这个使用的 requests-promise-native)
#Qt 🤔 啊,我才知道 QTimer 默认就是 scheduleAtFixedRate ,而不需要为非 singleShot 的情况额外编程的,只需 timer->start(rate); timer->remainingTime() 就好了,真方便
audio_output
68.9 KB
#Linux #qt #signal #math 公式是 qCos(2*M_PI* qreal(x) / format.sampleRate() * pitch) 其中 x 是 (i % format.sampleRate())
#js #lib #listing #gui https://editor.datatables.net/generator/
🤔 想起了 #Qt Model/View 的 delegate 和 createEditor 什么的... 但其实从 row 建立可搜索、可排序、可编辑的 table 并不需要那么多名词吧

https://github.com/fiduswriter/Simple-DataTables
嘛,虽说是 lightweight ,其实连 Date format 都支持...

http://fooplugins.github.io/FooTable/ 感觉还是这个最好看

https://github.com/frappe/datatable 这个也支持 inline editing
https://github.com/future-architect/cheetah-grid 有创意,内带比率可视化支持
https://github.com/mleibman/SlickGrid/wiki/Examples 感觉最糟糕的一个
https://github.com/bvaughn/react-virtualized 第二糟糕的
https://github.com/ratiw/vue-table 最像 Qt 的一个... 不对,这不像 Qt
https://github.com/jiren/StreamTable.js 支持 #stream 但只能用 templating 的一个
http://swimlane.github.io/ngx-datatable/#filter Angluar 的一个
https://github.com/daniel-nagy/md-data-table#demo Material #Design 的一个,作者眼力是不是不好... README.md 那么多示例 table 放着呢
https://clusterize.js.org/ #performance #web 🤔给 <tr> 甚至 <il> <div> tag 做 chunking 的简易 js 优化
#tool 想要用 #android scrcpy+OCR 在电脑上问AI答题
#bing
>用py 写截图复制文字的软件
textshot chi_sim+eng
推荐此脚本或者调百度云AI

>编程: 当 PrtSc 按下且剪贴板变化,PIL获取剪贴板并用 paddle OCR 复制内容
(没有 "且")
>我是要剪贴板变化时OCR ,写短点
(太长, API信息错了)
>不注释。用(for).join ,把检测变化外提为 await for change(pyperclip.paste)
#py #code
import pyperclip, paddleocr
import PIL.ImageGrab

async def changes(f):
v0=f()
while True:
if (v:=f())!=v0: yield v; v0=v

use=paddleocr.PaddleOCR(lang="ch")
#页0 每行=(box,(txt,概率))
ocr=lambda it:'\n'.join(x[1][0] for x in use.ocr(it)[0])

async for x in changes(pyperclip.paste):
if not (img:=PIL.ImageGrab.grabclipboard()):continue
s=ocr(img)
pyperclip.copy(s); print(s)

>请用PyGTK兼容 #linux 上的 PIL grabclipboard()
(我不会)
(只想 open xclip -t image/png 的输出而不用GTK)
>那你会写 #Qt 框选截图吗?

最终代码: (需要3次提示)

>编写numpy 的4x4棋盘格矩阵,黑0 白1
a=np.zeros((4, 4)) #chess_board
a[1::2, ::2] = 1; a[::2, 1::2] = 1
plt.imshow(a, cmap='binary')

>请用py 实现 /dev/mice 移动时,设置ANSI控制台的光标。请写入sys.stdout ,用np.array([x,y]) 计算光标新位置
(用struct+fcntl读取了tty信息, 甚至能兼容win32)
(成功转用numpy. 但函数外提得很烂)

>编写一种mp3转mid 的py 脚本, 它能转录音高,也能为音符配对上语音识别
(构造PrettyMIDI>Instrument>Note[], 就以为语音识别的结果包含音高..)

>用正则和逆波兰, 写四则计算器
(不含parse 算法, 示例还是错的)
>请用js 设计解析组合子,写精简的 JSON Parser, 再比如解析 csv 到 [[]]
(只会split)


#py 环境配置
conda install jupyter ipykernel
conda install python=3.10 pyqt PyGObject #Arch下尝鲜py10, 注意,pip不通用,qt脚本要重装
ipython kernel install --user --name=base #在venv里启动内核
conda config --set env_prompt ''

更新
pacaur -S `pacaur -Qd|grep -P 'python|jupyter-'|awk '{print $1}'|xargs`
jupyter kernelspec list
python -m ipykernel install --user --name=base

支持系统特有包
echo /usr/lib/python3.11/site-packages/ > `python -c 'import sys; [print(x)for x in sys.path]'|grep 'conda.*site-packages$'`/os.pth