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
#c #php #java #recommended http://ice1000.org/2018/09/24/CodeEditor4/

duangsuse 阅读时注意到的事情(本文第一次,作为编辑器后端架构基本蒙蔽)

0. 我又看到了 gap buffer
1. freenode #lisp 有 dalao
2. Oracle 开发 JavaX 的程序员很有文化
3. VSCode 前端程序员们有不考虑字面 literal 包含 EOL 的 Token “优化” 的黑历史
4. 他们曾经也没考虑当前编辑行
5. VS 很厉害,会缓存每行代码渲染后生成的纹理 buffer
我也想试用下 FreeType 来着
可惜后来没时间了 2333
我曾经修改的一个 Rust badge 生成器,现在还在 docs.rs 上,用了 FreeType 的一个 Rust 绑定,当初看不懂 算
6. 冰冰现在也做数据结构 & 算法可视化动画了 LineSpan 的数据结构可视化
7. 太长不看 TLDR
8. 所谓太长不看的大多是 文本序列数据结构的通用性质
讲的还挺好的
+ 一个 item 指文本序列的最小单位,通常是 char 或者 wchar_t
+ 一个 sequence 指一系列以各种方式组合并在逻辑上是连续的 item ,即刚才提到的抽象结构,比如 LinkedList<Character>, std::list<char>
+ 一个 buffer 指一段在物理上连续的 item std::vector<char>::data, java.util.ArrayList<Character>, mmap() 映射的
+ 一个 item 序列如果同时是 sequence 和 buffer 那么它是一个 span like java.lang.String, std::string
+ Ruby/Lua/JavaScript/Dart/Perl 等语言中的 string 是 span
8.5. PHP 也是,如上文,Java 当然也是

// 可以认为 PHP 里 string 是这样的
struct php_string {
php_refcount rc;
unsigned long hash;
size_t length;
char buffer[1]; // 多出来的一字符用于存储 CString 的 EOS '\00'
};

这里 struct php_string 是一个 item 为 char 的 (sequence 兼 buffer)a.k.a. span,因为它在物理上也是连续的

9. 菜鸡 duangsuse 也是正式入坑 CS 足足一年半后才知道啥是位长度啥是进制的,烫烫烫烫烫烫烫烫烫烫...
10. code 现在使用 Piece Table 来作为存储后端数据结构实现
11. 简单数据库操作 CRUD 简单序列操作 QID
#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
Template.java.dia
总而言之,用 PDL(Program Design Language) 可以表示为:

fun main(argv)
String? template = readFormatString();
String? formated = String.format(template.getOr { exit(EXIT_FAILURE); }, argv);
formated.let(stdout::println);

fun readFormatString()
File.Path fileName = getenv("TEMPLATE") ?: "template";
File templateFile = File(fileName);

unless file.exists and file.isFile: raise "File ${fileName} not found"
unless file.canRead: raise "File ${fileName}: cannot read"

FileInputStream is = null;
byte templateBytes;

begin /* readAll is into templateBytes */
templateBytes = new byte[is.available];
is = FileInputStream(templateFile);
is.read(templateBytes);
handle IOException rethrow
ensure is.close

return String(templateBytes);


那么我就顺手再写个 C 的版本和 C++ 的版本和 PHP 的版本和 Ruby 的版本和 VisualBasic 的版本和 CSharp 的版本... 反正我还有很多事没做... 啊 😵

#C

#Cplusplus

#PHP

#Ruby

#Lua

#VisualBasic (VB.NET)

#CSharp
#CS #PL #FP #Tuby #PHP 说到现在广为资磁🐸的 Lambda(排除 Scheme 等真正依赖真正的 Lambda 的之外),

我们就来看看 🌶🐔 #Python 吧。

如果你给 Python2 一个这样的 Lambda 表达式:

(global scope)
a = 1
l = lambda: a
print(l())
# 1
compile('l=lambda: a=2', '<lambda-assign-test>', 'single')
#!> File "<lambda-assign-test>", line 1
SyntaxError: can't assign to lambda

这是怎么实现的,我想不是重点,但是 Ruby 里的确可以这么做,反观 Java 8 引入的 Lambda(Coin 项目的?哦好像就叫 Lambda 项目...),也不能『assign』
它要引入的变量,全都得是 "effective final",要不然就是『无效引用』了?为什么?其实这和程序设计语言语义背后的存储,关于值和引用之类的东西有关...

a = 1
l = ->() { a = 2 }
l.call() #=> 2
a #=> 2

正好符合我们对『a = 2 语义』的预期,Ruby 就是这样,代码块就是代码上下文中的一部分,不是独立的语法糖。
从侧面反映了 Ruby 不仅比 Python 更可读(拟态方法 vs. __init__ __ge__ 这种让人丈二和尚摸不着头脑的奇葩名字,还有反直觉的类定义项引用名字里 __ 前缀的含义),而且更函数式(跑

欸这么做啊就有一个好
,我们知道 Python 是实现了 Lexical scoping(嵌套序作用域) 的,要不然也不能这样定义这个函数:

def compose2(fn): return lambda x: lambda y: fn(x, y)

并且这样使用

compose2(print)(1)(2)

如果 Python 是 dynamic scoping(时序作用域)维护着符号表栈的话,

def get_a(): return a
a=1
get_a() #=> 1
def foo():
a=2; return get_a()
foo() #=> 1

foo() 的 a 定义就要覆盖掉 global scope 里的 a 定义了(反正这里就是一层函数调用一个作用域,还有一个 global scope)

Python 认为 Lambda 是什么呢? 它认为 Lambda 是一种 function...
欸 Python 实在是混乱邪恶... 像是 Ruby 和 Lua 的杂交体...

为什么
,你们猜? 🌚
还是说...
#php #algorithm #security 果然还是做了剪枝的,就看了 mb_ord() base64_decode() array_splice() 几函数
#recommended #blog #security #game #web #php #lua #js #net #windows 这个人涉猎非常广,WinApi、网络、逆向、密码学 都有实践经历,而且非常有活力,之前忘记加紧关注了(当然我觉得代码质量还能更好点)
#PHP while ($x = each($xs)) ,然后 destruct 是 list ($a,$b)=pair? 感觉有点混乱…… 为什么 ArrayIterator 和 Array 是绑在一起的,虽然可能是为了降低分配开销吧
#code:
function para_filter($para) {
$filtered = array()
while (list($k, $v) = each($para)/*deprecated*/) {
if (!($k=="sign"||$k=="sign_type"||$v=="")) $filtered[$k]=$v
}
return $filtered;
}
#sysadmin #linux #bash VPS 一键安装多分区系统脚本(草 还有 mysqli #php #security
#php #zhihu 辣鸡原罪语言,比 Lua 低到不知哪里去了
#service 可惜现在觉得 CGI 有性能开销,变成应用服务器时代了, ASP JSP 的时代过去了
#php #js #web 双重傻逼就是傻逼两次。 第一次混淆 sql 代码和数据已经够弱智,第二次是暴露 http 不管传输层在应用层做脑残防护,三秒给你监听代码扬了。
https://github.com/w2sft/BrowserWAF #github #china #haha

“ 防自动化攻击: 如动画中,浏览器下方,开始时候密码输入框的id和name都为空,也就意味着通过识别元素id和name属性的方式,是无法被定位到的,那么也就无法进行自动赋值,也就无法进行暴力破解、撞库等攻击(burp嗅探重放式的除外)。

同时,注意有一个属性为hidden的input框。它是被随机插入在页面中的,这样也就可以防止使用xpath方式定位的攻击。

🌚???你还知道 xpath 啊,那你知不知道随机一个 <input hidden> 也能被自动过滤?
#py 周刊

#ts Mypy: 1.5
Mypy 是 Python 的静态类型检查工具,1.5 版本主要功能有: @overrride 、更灵活的 TypedDict(字面创建的 dataclass) 创建和更新、可显示错误代码的文档、改进了泛型函数的类型推断、__slots__ 的优化、步进 Python 3.12

#ai 整理和预处理pdf文件,让GPT访问
from bot import Retriever, llm_reply

#backend 用 numpy, 线程池 优化数学区间求和函数

- 杀死 ProcessPoolExecutor
Python 自身不适合处理 CPU 密集型任务,文章中项目原本使用进程池来规避 GIL 问题,后使用线程、C++ 扩展,内存使用量减少 50%,CPU 使用量减少约 20%

- 观点: Py 不适合编写100行以上的软件,因为弱类型、重构难和性能


from contextlib import suppress
with suppress(FileNotFoundError):
的妙用

- 上下文管理器
from tenacity import Retrying, stop_after_attempt #AbortSignal
for attempt in Retrying(3):
with attempt
:

骗你的。Java式接口让人难以评价:
for i in Retrying(stop=stop_after_attempt(3)):
with i:
print(f"🧨炸弹{'真的'*i.retry_state.attempt_number} 要炸了!")
try: time.sleep(2) # 按Ctrl+C !
except:pass
else: raise Exception("💥!")

#visualize #plt LibCST: 遍历Python3代码树
btw. 你可以用 %%showast 和 astor 查看算式的树状图和代码形式
- viztracer 提供了 DevTools profile 页

#datas 绘制多个直方图、折线图表
- #tex 对比"星星旗帜"的海龟画图 Python 来学习 PostScript
PostScript 广泛用于打印机、出版和图形设备。文章将可被 convert -page 720x480 flag.ps flag.png 的程序,直译成对接到 matplotlib 的 Python 代码


#java 如何编写简单的C模块,篡改 CPython 解释器的数字
导入一个模块后,如何让 print(8) 会打印出 9?只需要拿到整数对象池,交换两个大整数引用的值
swap( (PyLongObject*)PyLong_FromLong(8)->ob_digit[0] , (9)  )

#os #linux 在 execvp(["python3", “Hello World.py”]) 时,会发生什么?
在 py 文件中写上一句,执行这个文件,幕后都发生了什么呢?文章使用了 readelf 、strace 、ldd 、debugfs 、/proc 、ltrace 、dd 和 stat 等工具,详细解释了脚本被执行的过程。
主要涉及操作系统,GNU libc 相关的内容
推荐阅读


#js htmx: 强化的 form table dialog,交互式界面扩展
<form hx-put="/contact/1" hx-target="this" hx-swap="outerHTML">


#php 🤯 Slack: 我们认真觉得PHP好用