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
#py https://www.hillelwayne.com/post/python-abc/ 3.10 利用 isinstance hook 新增 match case: 🌚👍

#cpp #algor https://www.zhihu.com/question/365763395/answer/971009059 大整数str 和各种风格元编程 ,最后才是 (1~20)去叠「*」 的函数式

#fp GitHub 的 The ReadME Project 从大众角度来看函数式编程了
https://github.com/readme/featured/functional-programming

https://www.peterkrautzberger.org/0217/
#web mathjax 用 HTML/CSS 实现《算法》伪代码排印版式🤔

https://wiredjs.com/ 罚抄字体滤镜
#fp 👆 #haskell 入门
#ai https://chirper.ai/
Social Network for AI only.
free to register and create some AI Chirpers for yourself.
#learn 对我而言,编程并不是「专业技术」,只是“另一种母语”和创作方式,所以我很讨厌潦草的代码

最近一直在打磨一门自制语言的语法, 获得一个较大的成功,居然是把它的OOP术语移植到英文.. 😅
事量物例类|公私族组内
fun val data named type|same{,0,type,pkg}
储例判同造|既可未终定
\- enum -when -named made|^,impl{?,??,}

之前的版本是
事量物例类 
fun val thing insta class|
储标例况变
data anote enum case var|!,impl{?,??,}

虽然不够“面向对象”(obj->data) 了,但实在(英语化)好写不少。 我一直很讨厌 Java 那种八股文式,歪七扭八不一致的语言特质,给数据处理和调试带来很大负担

interface Closable
type Closes
fun close
-named
fun all(:Args<Closes>)...

data Door(name:Str) Closes
made(:Idx)=made("# $i")
^fun close=say("shut $name")

data class Pair<out A, out B>(val A:A, val B:B): Serializable
'AB'(get) - Pair(A:A,B:B) Send
typealias PairOf<T>=Pair<T,T>
'T'PairOf=Pair<T T>

这个就对标 #haskell data=A|B#rust enum Either<A,B>
'AB'(get)-when Either
A(v:A); B(v:B)
'R'fun way(err:Fn1<A>, ok:Fn1<B>) = when this:
A:err(v);; B:ok(v)

就体现另一种 #FP 的价值观:定义式先于不可变

绝句计划把 Var,Type, expr.E 都拉入一等公民,虽然我不清楚怎么做但相信有意义(连scala3都没更灵活的 eval fun: inline arg 还不够全)
总之,OOP 的public-private constructor 麻烦真的很大,
我又不认为 Rust,Go 那样把一切打散和到处pub fn, 冗长化 type Item=int32 就算“优于继承” — py也有自己独占的一亩地, 但它足够 "server side" 吗?
对于视频内代码的重写:

事 阶乘(n:数) 数
变数,a 1。
(1~n),[i] a=「它*i」 。

fun Ary<Int> contains(it:Int) Bool
this:[x]
if x==it: return $Y
return $N

或者更函数式(reduce 和 findIndex)
'N'fun N`!`=(1~this).Sum{*}

'T'fun Seq any(:Test<T>) = this(Sum.from($N): or test(it) )
= first { test(it) }?.i !=NO

(不得不说,绝句的变动太快了.. forEach和尖括号类型都能被删没 (我对那个 对何forall<AB> 的还执着了好久,因为很"函数式"😭 ) , 这两天对于‘带代码’行注释 和事/物 内量的区别对待、C++式iter与可变<T>的统一、 #Kotlin require check 之类“特技”的归一化 也很难抉择 ,所有简写竟都是全新的,而且都能涉及到编译期API)

唯一能确定的是, 绝句最终的语法和std不会保留冗长且含糊的概念,至少中文绝句不会 (比如 try catch finally 就变成语法函数化+试做 接应 皆应+试:可空 , 之前是 尝试 接迎 终焉)
也不会刻意与py,rb,js 的传统术语分离,一定是小更改换大收益 😋

希望它能打破解释和编译的隔离吧 ,虽然我根本不知道咋做.. 语法风格颠覆的太快
不过我还是很高兴学习过弱类型 metaprogramming ,又掌握了解析和编译原理,所以不必受制于既有的 syntax 和 API,或者对象图框架,而能创造DSL

btw. kt 的 Sequence实现 居然和 yield() 无关 ,居然只是 sequence{} 在创建只读的协程吗
😅而且复制给Array,Set,Str.. 信仰崩塌
#learn #FP 从“面向运气编程”到“设计程序”,「编程是什么」有许多天差地别的答案。

编程语言的范式。以社区的主流写法而定(FP之前后:统称过程式 vs. 定义式):

PP结构化- C,Go,Perl,Lua

C是会计算(跳转)栈、整数/struct* 类型到成员地址的汇编,它的对象检查很弱,也没有规范的List,KV数据类型(SDL,linux,qemu 这些都有自己的"utils")

GC需要定期"stop THE WORLD"并自 static/调用栈变量遍历对象图,连[]{} 都没有的C当然找不出“0引用”指针,更多人使用shared_ptr<T> 引用计数实现Pair<AB>等数据

OOP面向对象- C++, Java~, .NET~

FP函数式- JS,Py, Rust

若对象用 函数值参数/监听器字典,取代override 那就叫“闭包closure” (其可见/可定性同interface,都为 public open)

类比,AbstractAnimal=(T={eat,say})=>“构造器”(name)=>{name, __proto__:T“类型T也有proto”}

“弱结构强脚本”轻松于万物class{}。fn=a=>(b=>a+b) 能从词法上文捕获a,不用 new fn$1(fn.arg[1]) 手动把a放入匿名对象

PF纯函数- Haskell Scala Lisp~

冷门:
FRP响应式- Rx,React

- x86 wasm
在 .data 段加个字符常量, 再在 .text push bp;sub sp,N 栈分配调用 libc:printf
甚至需要关心 nasm; ld 仅仅来让print() 能跳转到dll的“地址”,不会SEGV

LP逻辑式- SQL Prolog #relational #types

逻辑问题也有函数域和'=',只是'a=b' 的含义是“解构赋值” 出解集。b能含变量: [1 x]=[y 2]
a=b, b=1 应求出a=1 ,因此执行流程是 cut(=) 深解构, ',|'and or 靠约束过滤解集, 最后 cat 深建构

若等号右边必须已知,在 ([1]+x)=[1 2] 的求解中
(+) A B
|A=[], B
|A=[x a], [x (a+B)]

appendo A B O
|A=[], O=B
|A=[x a], O=[x appendo(a B)]
里,O=[x 递归] 就无法匹配出 A=[$x ] 这些输入参数了

当然,变量是值。“解”可以是 [List T] 这样的含“类型”变量,<T> 一定是“类型函数”加过的变量,所以:[List T]就是函数签名
可以取各处T的成员(接口)交来infer调用、单独查找fun重载,但本质上都是这样:

fun Box<T>.let(f:(T)->R)=listOf(f(item))
let A B
|A=[Box T],B=[Fn T R], listOf(B.invoke(A.item))
|重载,.
listOf T..|[List T]

阮一峰 体验 👉 swish.swi-prolog.org/example/grammar.pl //在左边粘贴关系, 右边查询,如 murderer(X)
tomstu.art/hello-declarative-world
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线代)后,觉得能更好的理解类型系统了
#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 row; row = [1,*(x+y for x,y in zip(row, row[1:])),1] #上行+上左


def iself(n,fn):
a=[]
def _(i):
while True:yield(a[-i])
for x in fn(*[_(i+1) for i in range(n)]): a.append(x);yield x

ctrlM=lambda a: (lambda n:'\n'.join(f'{s}'.center(n)for s in a)) (max(len(str(s))for s in a))
N=20
print(ctrlM([*islice(杨辉(),N)]),'\n\nfib', [*islice(fib,N)])
duangsuse::Echo
举例, #ts 上有”交并集类型“ (有人认为 hs, Rust 没有子类型所以不存在集合论的,确实如此但 in-out 形变是Racket子语言里也有的,我找不到原文但TRack 是有) (我一点也不羡慕没有重载和this模块等多态技术的圆括号 😅, 模型的缺失是拿宏手动兼容 a.b.c 所弥补不了的, 就像 F# 的 |> 比不上 xx.let{}, kt 的元组 destruct 比不上 ES6 let[x,y]=P, ES6的解构又不如 Prolog 的 unify [x,1]=[2,y]...…
#FP Prolog 和 Racket 一样都有严重的语法缺陷:没有真正的等号,语法一致性也很差;也就比 #SQL 好了
或许 Lisp 的嵌套链表很”统一“,但统一并不等于简单而一致

number(X) 就是 X=num() 的意思,很多算式本该有”一个值“,而不是为了”X=1 返回 [{X:1}]“ 就放弃简化
Res 变量应该被掩盖掉,就像Go等所有现代语言都抛弃了 struct*, char**

那样👆e(X) 就可以不用”宏“ 或 Monad 来实现隐式参数,化简3参数的 S=X+R, "2x"==2+'x' , 直接 num=[S,X,R] 就能被 repeat() 修饰了, num=["12a",X] 优于 phrase(num(X), "12","a")

(话说 hs 也真是垃圾🙉 连伪递归纯函数 都强制化了,却仍然不能求解出 x+[2,3]=[1,2,3] ?? 递归再回溯,不就是为了方便DFS吗?

确实 inc1(x)=2 可能需要闭包和重载,所以我说圆括号很垃圾,因为不够”广义“的等号,和那些扭来扭去的数学希腊字或者VB,PHP一样

🥰我最爱的方向是:
- 定义式/py,rb,元编程,跨平台接口
- 关系式/模式匹配,读写转化,typing知识
- 响应式/Vue ,await和协程, 编程时所见即所得
- 跨领域/基于物理,OS,libc 等根源问题的搜索习惯
duangsuse::Echo
#dev #algorithm #statement 「只要搜对了接口」 把问题写出来,就等于解决问题。顺便消灭所有事后、事前的坑 所谓编程语言能力,就是这样创建「伪接口」叙事的编程习惯,带来了治未病的价值观。 伪代码,不通用、不好思考 真代码,不易于溯源和穷举 我不需要「设计模式」,因为真实生活的对象之间的模式,比刻意设计术语和样板更加深广 我没有编过程,只是用数据的算式,展示算法和用法、答案和问题的本来面貌 OCR截屏, 字符画 <10行 fib 和杨辉三角、螺旋矩阵的定义 <20行 自动重构…
#py 周刊

#ai 方便中国用户离线安装的中文 Llama2-7B

Jupternb 7 支持 Jupyter Lab 的内嵌调试器
pip install manhole, pyrasite 支持向py进程注入代码

@pyscript.bridge def 可以提供js侧 py.func()
<script src="https://cdn.jsdelivr.net/npm/pyscript@4.0.6/dist/pyscript.min.js"></script>

awesome htmx 项目清单

pip install taipy
数据过滤节点图+mdx GUI

自动安装的免检测爬虫
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

Py3.12 的 f"" 支持嵌套, 但仍不能被函数重载
#FP 最佳实践

pipx 已经支持的单文件依赖提案
#!/usr/bin/env python
# Requirements:
# requests

Flask 防范 IDOR 地址穷举攻击 (但不要学B站用AV BV号..

asyncio 注册自定义轮询任务检查任务回调的执行耗时


#jp 《每个人的线性代数》 [pdf 共10页]直接以可视化的示例概括了 ndarray([]) , 反观一些离岸国人一边以「哇你们线代好厉害哦」来认知一种数据工具, 一边吐槽中国的 CS 为啥那么烂 那么八股文
https://github.com/kenjihiranabe/The-Art-of-Linear-Algebra
《线性代数应该这样学》的英文版 Linear Algebra Done Right 最新版(第四版)开放获取了,可以免费下载电子版 https://link.springer.com/content/pdf/10.1007/978-3-031-41026-0.pdf
https://www.3blue1brown.com/topics/linear-algebra
教什么线代,直接看3b1b 用Numpy可视化计算
怎么不问问神奇的gpt呢?
如果只是停留在把自己当计算器的程度,gpt超过100个做题家
这个「一定的数学知识」随着时代和计算机的进步,一定是越来越少的
所谓生产工作,大家都能生产才有市场啊

把能解决问题的简单概念,用原创的废话转写,得到逻辑完美的新问题和“新”工具,便拿工具兜售自己对新问题的浮夸定义;这就是我对CS的观感。

就像一些 BASIC 时代的人,在吹“咱的语言都结构化流控了” “我又懂稀罕的古佬真理了” “逻辑式和响应式真的太特殊了” ,
殊不知时代仍在向定义式、生成代码、自定语法糖,在向语言去符号化 的方向走,快到都没机会让他们用留了一手的知识 漂亮地回击“恶意质疑”,便应“不体面”地求知若鸡 🥰实在太暖心

或许,这就是叙事逻辑的不同吧。 我没get到1行就显山露水的算法,有什么好高等的;我们大可用10页树立心智模型,来让核心只有1页,因为有规律 才被称为计算机「科学」。

技巧和功能有许多,在我眼里都是家常菜。作为一个合格的“大胃王”,私房菜这种东西,过眼云烟吧。

俺代码的接口越多,烧脑的概念便越少, 可能他们做的东西间没有联系,乃至结构和程序、专业和常识间争夺C位,那就完蛋了。

你用python写,你性能好,你下班早,你吃饭香,你睡的安稳
你用c写,它性能好,它cpu早下班,它内存吃饭香,它硬盘睡的稳
你说,应该死道友还是死贫道?