duangsuse::Echo
975 subscribers
4.94K photos
159 videos
588 files
7.29K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): a19a0b
Download Telegram
#learn #ts #kt 子类型 vs 组合, in/out参数
https://t.me/dsuses/5194

总之,trait类型的交集 还是需要in/out,这不是子类型带来的麻烦。
a=append(a,x) 与 copy(a,src) 类型上是一样的,前者也并不能“把a修正为更窄接口”。 Go必须把list+=单项 写出来, 因为缺少型变

func main() {
var src []interface{} = []any{1, 2, 3, 4, 5}
var dst []int = make([]int, len(src))
copy(src,dst) //错:没有共同接口

func copy[T any](dst []T, src []T) {
for i := range dst {
dst[i] = src[i]
}
}

更多关于 #rust #go #plt 的原理
https://t.me/kotlin_cn/74484

https://rustmagazine.github.io/rust_magazine_2021/chapter_4/ant_trait.html#向上转型upcast #recommend

https://rustmagazine.github.io/rust_magazine_2021/chapter_10/lisp-in-rust.html
duangsuse::Echo
感觉虽然有些收获,也都是没啥意思的问题…… 面试呢,或许对我这种数学渣就都做不到的吧? #statement 我讨厌这种AI都能写的问题,这些”深刻思考“有什么价值呢? 总是一些算法,让编程变成一种不快乐的任务、变成帮出题人自问自答的”寻宝“ 这些出题人又有多聪明呢? 大众都在润色70年前,世上还没电脑时就有的问题, 而小众又能成什么气候,又如何让他们的沧海遗珠给时兴编程带来价值呢? 如果用《算法图解》那种小说口吻去讲,做一些有弹性的科普视频,倒是有娱乐价值;如果写代码只是为了复制粘贴「能用的东西…
举例, #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]...

观摩王垠《别再欺负我们读书少》:
- int -> int | bool ->bool 表示的确实是一个intersection type(^),而不是union type(|)
- id(itself) “同时”是int->int和bool->bool,而不是表示它“有时”是int->int,而另外的时候是bool->bool。
- 所以,id(1)一定是int。如果你输入id(True),它推导出的一定是bool。
- 否则,调用id(1)会报错,因为id的类型有可能是bool->bool,不能接受int的输入。调用id(True)也会报错,左右不是人。


但我习惯拿 成员交=union ,成员并=insect ,绝口不提“同时”“有时” 这种抽象说法乃至术语
- int -> int | bool ->bool 表示的确实是一个重载,而不是Either
- id “必须”是int->int, bool->bool ,而不是“可为” int->int | bool->bool。 when(x) { is Int, is Str } 这种情况才是“x可为二者”
- 否则,调用id(1),id(True)都会报错,因为id的类型有可能是bool->bool,不能接受int的输入,或者反之。

严谨性绝对是次于创造力的,况且,含糊的说法对同时使用和实现不利。
虽然这些都是小小的细节,但每个细节都注重可读性,随着设计的步进,最终会形成巨大的差异。即便都是用AI,我的实现也会有很多不同
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实现
#ts #csharp 😱C++化,来临力 https://zhuanlan.zhihu.com/p/648312212

#py langchain 支持了 pipe

# fib.only{%2==0}.firsts{<40_00000}.Sum 
sum(fib() | where(lambda x: x % 2 == 0) | take_while(lambda x: x < 4000000))

比如(我的天啊, Javaer 怎么入侵 Python 了!我以为AIGC潮能打醒它们的,没想到恰恰相反? 😱
os.environ['OPENAI_API_KEY'] = ''

from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.schema import (
HumanMessage, output_parser as OutP
)
from langchain.chains import LLMChain

prompt = ChatPromptTemplate.from_messages([
HumanMessagePromptTemplate.from_template("Show me the HEX code of color {color_name}")
])

(prompt|ChatOpenAI()|StrOutputParser() ).invoke({"color_name": "RED"})


另外,基于代码解释器, model.bind(fns )|JsonOutputFunctionsParser 可以让AI调用一段描述文档,并获取返回值
在花🎗️科技圈
华为Harmony OS 4.0版本将于8月正式发布 来源:新浪微博 投稿人:Arkansas State Police 投稿:@ZaiHuaBot 频道:@TestFlightCN
#huawei #js #ts 最近很火的 ArkUI 跨平台版 (UI语言doc )
商店示例:
https://gitee.com/arkui-x/samples/blob/master/Shopping/entry/src/main/ets/model/homeModel.ets

ArkTS和Java没有相互调用的能力,需要ArkTS与C++交互,C++再与Java交互(剪贴板、文件,.),反之亦然。
看起来和方舟无关,也不需要Dart那样的虚拟机或 jvm ,基于 Node-API 但自己做绘制? 还是自己又弄了DOM?

但是 puerts (js,lua) 可以.. 虽然都不如 import cffi 直接解析.h头文件 强 😅

好像也没有很火,在文件名都需要审核的 Gitee 上以 Apache2 开源,想必也没什么正经人看.. 😓

btw. 人家还讲了 状态注入, MVVM

反正我只认同 type UI=({dataVars})=>HTMLvar
#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好用
duangsuse::Echo
(框架层的) 技术讨论,是否足够“对事不对人”
#js #design 那我也不算讨厌 Vue (虽没有React那样奇怪, 但毕竟XML是不可触碰之物), 我来黑一下 Vue yyx 对一个“不知天高地厚”的年轻朋友的反黑

如何评价前端框架Yox? - 尤雨溪的回答 - 知乎
<template v-if="name">
你好,{{ name }}
..v-else
请登录
</template>

{{ name ? `你好, ${name}` : `请登录` }}

单举这个例子,有点鸡贼,但对EQ刚刚好,因为它的数据模型继承自我打草稿的半OOP语言,可谓高射炮打蚊子

p(
when(name, {$Y: html`你好 ${name}`, $N: `请登录` })
)
p(
wKV({ if: name }), html`你好 ${name}`
)

<div :id="id" :class="class || 'default'">

另外EQ还支持 div$css 的 _mix,即类的继承;如果说id是动态的,用wKV(ES6)就更方便了

div__id(wSty`${class||'default'}`)
$navbar(wKV({id,class}))

ee.main=({todos=[], tag='good'})=>lets(
todos(a=> a.only({tag}) ),
//EQ不需要靠编译和'signal'得出 todos,tag 变更时要做什么,我们不和DOM抢地盘
x=>$todo()
)

省下的行数可以拿来设计几个颜色主题啊 😄
- 怼黑子有什么用,不如多写几个单页玩玩, 招牌是干嘛的?不如把代码放首页,提升一下Web圈的创作欲
- 我就要怼天怼地,尤其是对我设计有明显启发性的老东西, 任何的僵化都不能放过,你留着它过年,重构甚至跟风都是一定会炸的,功能越加越难用,还妨碍别人按时睡觉
- 别人的成熟设计,里面的取舍一定是受领域的刻板印象窄化过的,也是被 CRUD20年的市场 Boys 虚荣地夸过的, 所以我只从最终用户的角度看框架 ,编程领域 我不关心,我圈外,靠内心的语言思考问题就够了。
(e.g. 我可以把Vue3 的ref 等 anti-feature 都解读成和 #ts 等额外特性有关,但为了类型损害程序表达的可读性,仍然是蠢做法;因为正确的框架,该靠明确性,而非机械正确,实现治未病
- JQ和Svelte都觉得自己“代码少少功能多多”,但不请XML这一尊滚出Web,不善用CSS那睥睨native的先天丽质,思路如诗-ref(),是会被牛得逼成渣的
duangsuse::Echo
#py #math 《优雅不是奢侈品》 “如何才能让编程者们相信,简单性和清晰性——简而言之:数学家所说的“优雅”——不是可有可无的奢侈品,而是决定成功与失败的关键因素?” ― Edsger W. Dijkstra,“计算机著作精选:个人观点”,第 347 页。 简单明了的代码就是优雅的代码。这些都是代码中非常理想的属性。Dijkstra 又补充道: “……在软件不可靠性的情况下,最大的成本因素是复杂。 一个可靠的(因此简单的)程序的开发和使用成本,比一个(复杂的因此)不可靠的程序要廉价。” 人们…
#py 周刊
- 《优雅不是奢侈品》
- nogil 最新情报
- #web Django ORM 最佳实践
- Django 自带的JWT 路径验证和登录页
- #ts 阮一峰 入门, 纯JS入门

- #linux #rust Nush: 不是 Powershell
- #js npm依赖图
- #ai #tool realsizer4x 超分辨
- #rust pixi add cowpy 强化pip
- #ui Toga: 跨平台的 TkGUI

- #ml Viberary: 开源书籍检索引擎
- Khan 为何从Py2移植到 kt,go
- #parallel 用asyncio分享查询,防止缓存失效时并发卡爆
- #plt Rust vs Idris,Zig: 渐强类型的解药 #1

单进程 cron:
from apscheduler.schedulers.background import BackgroundScheduler

cron = BackgroundScheduler(jobstores=sqlite)
.add_job(print, 'interval', seconds=5)
.start()

并行 multiprocessing: #2
with mpire.WorkerPool(n_jobs=5) as pool:
results = pool.map(getFiles, range(10), progress_bar=True)


- 修改语法ASDL,实现 map( (x)=>x*x, [1]) [Parser/Python.asdl] [30行实现]
- 奇怪的for赋值, 魔术方法
from xx import* 的明确化:设置好 xx.__all__ = [exports]

实现 lazy load:
importlib.import_module

⭐️import pyforest 自动导入np,pd 等变量
#code 修改语法 __import__('cv2') -
from lazy import cv2

import types,sys

class lazy(types.ModuleType):
def __getattr__(self, mod):
import importlib.util as _
if None==(r:=sys.modules.get(mod)):
id = _.find_spec(mod)
# get it inserted into sys.modules.
_.LazyLoader(id.loader).exec_module(r:=_.module_from_spec(id))
return r

sys.modules['lazy']=lazy('-L imports')
— 仅供学习,import 语句本可以是局部。 (GPT怎么变蠢了
#ts
#1为什么静态类型的C,Go,C++ 不是弱检查 就是太复杂

代码练习: 不需要 type WTF<> = 就可以检查 htmlTag, funcPipe, nthArg, printf("\d") 等调用的类型

int[10] 的实质、 #Kt 类型推导的原理
duangsuse::Echo
#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); ("(",…
#book #ts The Little Typer
1. 类型签名是命题,程序的语意是用+,[],. 构造int,void.
2. 命题的条件和自身,都是值;依赖类型可以把值放到类型(int[2],. )中去,从而构造关于值的命题。
3.Prolog 缺少抽象 refl_ID(X,X). 的模式,它的条件表都是全局给定,不能构造类型
4. 类型也可以有类型, #haskell HigherKind *->*, TypeFamilies 就是指这个(虽然和 #ts 一样过度设计

从结果上看,反而像 类型签名是证明,类型构造器是调用命题……
data Equal : a -> b -> Type where
Refl : Equal x x
fiveIsFive : 5 = 5
fiveIsFive = Refl = Equal 5 5

如果我换个语序,会更合理。
data'ab' _=_
- x=x Refl() 成立
- five() 5=5 Refl

这样,类型依然是命题,程序依然用Refl证明并构造了Equal,而且删掉了查重率60%的冗余语法
Refl : 右是一段程序。用这种隐晦的方法传变量是错误的。这个语法的问题远不止「类型含糊」, 对语序的修改,只算一种局部的优化。

为什么用 (
Refl : Equal
) 呢:它的亲戚,逻辑式语言都连「调用树」都不会组织,反而觉得 add-out(1,2,3) 更好看,加个类型学了“调用”,语序却远输OOP,真可谓一盘散沙

https://ksqsf.moe/posts/2019-02-18-dt-fun.html
https://mxm.ink/dependent-type/#依赖于类型的类型:list
https://agda-zh.github.io/PLFA-zh/Induction/#第一个证明结合律

https://www.idris-lang.org/pages/example.html
-- showOrRev(isInt, x) when isInt:
$Y: x.Str ; $N: x.flipLR

因为是宏,当然就不需要类型作为值了。内联后直接推导就知道

-- printf(:Str, :[Arg Str])
直接在编译期生成loop,也不需要什么ts体操+js强转了

when--'T' Link
Nil; Add(:T, :Link)

-'T' Link`+`(y:Link) when this:
Nil: y ; Add(x0,x): Add(x0, x+y)

-- useInline
可以直接计算Link拼接或解构后的值,避免手动分期求值
duangsuse::Echo
#huawei 虽然API上各方面都没啥突破(亦如ark.ts),但这个demo tutorial举例比rust,go的更有趣 可以说团队的脑子没有被八股文的驴踢 #锐评 https://t.me/dsuses/5319
#java #ts https://www.zhihu.com/question/659506359/answer/3538805082?utm_id=0
看到“高级编程语言”的数据结构我就捉急呀。

类型就是表格。纵行是其变种,横列是其数据, obj :. A(x):; B(x) 手动模拟if isinstance多态性
表格可以相互混入,传参时只要有覆盖该表就能调用
若无构造器,默认定义为纯模板 fn?? ,亦可含fn?项
否则表格默认全员锁定!fn,相当于struct。 写明的fn用于扩充既有类型或seal接口
- f(x.[Int Str may2]) Col2(1 2).A
?? 'AB'Row fn
Col2(A.A B.B)
?? 'AB'may2
A(x.A); B(x.B)

这不轻松把OOP interface abstract open final enum ADT match 给讲明白了,顺便消除了“代数”数据与子类型的鸿沟,易读和扩展性全都要。本身就是小学生都能搞懂的把戏嘛,真是啰啰嗦嗦一大堆啊

什么积类型和类型,你是Prolog? 给你俩Byte你能穷举出256**2个值,那才叫 prod type! 然而自称支持这些的,你的 patten match 等号两边能反过来写吗?
moonbit和仓颉,主流语言的那些小九九一个也没落下。 您是为计算机系开心写代码,还是为使用者开心而写?

再比如Go的 struct mixin。OOP的inner class本意也是一样,可惜被执行坏了,结果反而不如FP的tuple拼接

其实哪有什么构造器呢?拿函数签名生成的新类型吧。不过就是你们在模仿gpt该做的烂活,或者请IDE“代码生成”。。明明语言从语法API就必须解决掉的东西

如果从更大的复用性来看“class”,90% 的情况都是把重复的args打包起来,避免传一大堆参、允许部分修改,比如那寥寥无几的 open fun,“函数值参数”

因此py即便不爱用class也不瓶颈到工程的规模、Go早期干脆不做泛型。捆绑几个参数嘛,dict更好做

至于协程(N:M线程),await和yield(then vs next)其实是一个东西,但前者更合理,因为它只是把回调交出去,然后自己return
yield看似符合直觉,但缺少了重要的东西,例如buffer N项一页yield 大家都不支持。我们真的缺语言级iter吗?
spawn{}隐藏了调度级的“异步”,线程随便开,这很好

cj的过程宏,目前 import std.ast.* 后可以parse FuncDecl 啥的,也有quote()内插,还算比rust易用

我们程序员的奇技淫巧很超前,我们的软件工艺落后太远。

btw. 官方文档注 https://zhuanlan.zhihu.com/p/704858976?utm_id=0
https://www.zhihu.com/question/523049017/answer/3537896490?utm_id=0
duangsuse::Echo
另外,我刚又又设计了一种新的元编程方式: QuineQuoted (馈硬是一种 eval(s)==s 的测试,它和FP系的ast宏还有点区别: qq需要编译器支持, QQ自己就是编译器) #plt #kt https://github.com/mame/quine-relay 我几年前用这类技术弄了Tk的DSL,forin展开 https://github.com/duangsuse-valid-projects/TkGUI ,但没有意识到值:名替换 是把运算符重载变成编译器的要点 : 首先 kstSel=Fn(2…
https://www.fxzhihu.com/question/528403706/answer/73201328199 #ts

再见了,丑陋的类型体操
通过在JS上使用eval留字面的二段求值,任何这样支持反射的语言,都可以有编译期的预处理器,和# define一样简单
再也不需要理解类型了,解释即编译

Inc=F.QUINE((quote,x)=>(quote`${{x}}+=${1};`, x))
acc=2; dd=Inc[acc]
//dd=Inc.scop(s=>eval(s)).MEMO1(acc)
//dd=((x)=>{x+=1; return 3 })(acc)

//展开结果
acc=2; dd=3
#AI #statement
我发现 R1-32B 和 claude.ai/Sonet 202406 完全不能帮我完成框架设计😡

目前看来,它们的独立作业能力, 甚至比 docs by example 略低,但是对单一科班任务,尤其是游戏开发、全栈模板、UIUX 等全凭信息差任务,依然能很便利的完成,

尤其是在选型阶段能demo出很多有用的可拼接snippet,但需求稍微有点大化(比iOS脚本复杂点的那种) 就丢三落四,给你巨大的甲方压力,

很多程序员并不喜欢为这样的小问题反复修改chat上文的。当然,对于框架设计,自己自顶向下找出功能难点test好,再问ai代码裁缝,也是一种高效的用法。

>请用fetch 基于 toncenter, blocksout API 实现 getRecentTx(addr,n=10) 检测并查询此区块链地址的USDT出账,示例输出[{to,v:1400}, {to,v:200}] 为 $14,$2 的转账
>请支持 usdc协议,按时间顺序拼接在结果上

R1输出了莫名其妙的http API,也无力修正TON需要?lt 的时间戳参数
Claude甚至完全忽视了我兼容两种API的功能点(当然问题2 它完成的还可以)
它们似乎看不懂示例的1400=$14, 而如果我是看API返回值照猫画虎,那我怎么不自己写呢? 更别说还有 $USDT 和CNY等汇率换算的「简单」代码、缓存问题等等

如果只是这样的话,我还要进一步接入需要油猴插件来访问的 oklink.com API ,这需要AI无法建议的平台选择指标、接口爬取。 我还谷歌到了 currency-api 这一npm日更免key数据源。可见需求不平常一点,找AI列举就内耗的要死,甚至不如自己搜。

这样,还有一些人觉得「啊,我单凭Claude代工和 AI aided X 课就能拳打阮尤贺,脚踢 Jeff Dean, C#TS之父, Bellard.org 」,天呐,这样你们的创造力怎么发展啊? 只靠消灭信息差吗?

如果说API是用 chat with swagger.io 能解决的,shell 文件处理的编写也有问题。

>
实现 cpToBy Movies/ ff.toMKV Downloads/*.mp4
相当于
ff.toMKV Downloads/a.mp4 Movies/a

这个也是,除了对sh的双引号问题习惯的很好, 实际上没有营养。 我还要求了js支持的重命名 'noExt(u)+i+"#.mkv"' ,这也实现不了,完全没提到 node -p

实际上稍有常识的同事都会知道,这么参数化是为了兼容 thunar -B ,而不仅仅只能转码某个fileTree(/) ,别说设计高表达力的API了,它们连按要求完成都要我指指点点,反复协商补充上文,我相信找人外包是不需要解释的,因为格式工厂就™是一个常见需求

再进一步,例如和make一样的编译缓存?文件夹监听?多CPU ? AI都不会提醒你要加进去。 其实这些前瞻性都是《程序员的自我修养》。
这居然是top1程序员的小帮手,其实它根本不能帮你完成软件架构的策划!
https://t.me/hyi0618/7238?comment=12049 #ts #rust 类型检查

许多学问,只是跨端、跨期之时,对同一种语言结构或「语意」的扭曲。 我甚至觉得比Python晦涩的编程语言不应该存在,因为人人皆可编程,这才是编程语言和IT的本意。

Guido用 @pipe(x) def y: +1 和lambda:的若智语法compose块,但他的哲学刚好弥补了这一部分。

如果你是个高级的元编程研究者, 你的眼中不会有「高级特性」,因为那正是语言设计要消灭的问题。 许多“特性”,只是与App接触不良的“关联性”。
duangsuse::Echo
让我觉得匪夷所思的是, FRP 脚本有很多,但基本都是拿到地址就(可以公网)测试了,就像你只是调用了一下curl而已 Linux hostnamectl 这个特性,似乎是可有可无的,存在感比蓝牙设备名还低 这就像一些 http/ftp-server 测试服务,启动后不会 print URL 句柄,要你根据port去猜 当我封装CF的公网tunnel时,理所当然就把此服务封装成 $HOSTNAME 了,回头一看我居然是异类。 😅 twistd -n ftp -r . python -m pyftpdlib…
#web #dev 这个真是懒得喷。 我理解的REST(可表达状态转移, curl https://wtf = count: x=>x+1) 是什么? 😅 😅

就是 db.GET PUT json, 加上过滤排序分页, 或许有些 /user/:id/follow 的页面可以手写下,也可能直接套模板生成(哪个平台没有一堆“收藏夹”啊..)

这种RPC当然毫无价值,类似于把本地存储换到线上,只是加个鉴权和双向搜索罢了,查重率100% 我是懒得手写的, GraphQL.org 也封装的明明白白。
我觉得奇怪的是,哪怕是在PyJS的全栈框架里, 我说的这种REST,对 BlogComment, Todos, PetShop 等基础CMS样板也没法做成和Excel一样简单; 那些淘宝上卖的(开源投自制) 也都没有重用重构的价值


这篇文章在替发明REST这个「高端概念」的大佬,抱怨工程师们什么呢? 是 HateoAS (讨厌OpenAPIs?? ) 没人玩。 😅
也不是讨厌,是用res.body XML上的nullable函数超链接,表示“用户有没有登录” “用户能不能删贴”,来「方便App跨版本」 等等,比SOAP好一点

这不是废话么?? 这都2025了还有人把活爹.XML(schema)当个宝呢。 你说说Java里怎么生成 OPTIONS / 啊? 有了 HATEOAS 接口,在JS里免client lib 直接调用的DX体验怎么样??

没有TG自己造传输层协议的能力,还抱怨工程上restful的理解了RESTful, 那比你强的就是懒得为REST这种高度自限性的RPC写框架,早自己玩更好的去了; 比你菜的又只会CRUD,最多拿 http/module/:pathArg 优化下可读性,对接下SQL或jsonKV, 你让他区分个 GET/POST 都懒

可不是被滥用和误解嘛, 纯属活该,自己不开发在那边画饼…… 你有没有意识到, api.x.com/OpenAPI.json 就是所谓的REST、免文档、自动发现函数、解耦合?

Java codegen 都没写过是怎么敢设计这种协议范式的? 不对,看他们 content-type 都要改成 vnd.XX.User+json 我就觉得这是 #ts 写上瘾了。 知不知道 fetch() 不能自动判定body类型,还要手动.json()一下……
如果你真能生成并用 OPTIONS /:type/:id 调用动态方法,那要http就没意义了(本质上是js rpc),所谓超文本又体现在哪。

我都可以给REST/HATEOAS重构成工程界可以接受的样子, 但我不会用单请求单响应。🙉

http方法本身也是烂梗, POST就是有body的GET,DELETE就是空body的POST, jQuery 里一直是这样重载的,十年了不见跨语言一点。 POST的“同名时冲突” 也是很脑残的约定,很多人只是为了在body里放文件上传一下, 根本就不该禁止,填写表格时多次检查。

🤡 https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
ps. 我是真的写过API生成的 https://github.com/duangsuse-valid-projects/GeekSpec-GeekApkv1.0b
SOAP砖家: https://coolshell.cn/articles/3585.html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
duangsuse::Echo
Java codegen 都没写过是怎么敢设计这种协议范式的? 不对,看他们 content-type 都要改成 vnd.XX.User+json 我就觉得这是 #ts 写上瘾了。 知不知道 fetch() 不能自动判定body类型
https://share.google/aimode/H5Xh1f2JR18pcKJJm #web

说到了escape的问题
我觉得http动词的设计也是有问题的,其实只需要 get put post 三个(但不是说定义GET,方便地址栏访问or拼接url.query就行了的.. 那是一种可选别名😃)

patch 完全就是扯淡,put已经有了按key更新的语意,而把 post(rpc call)泛化一下,就是按初始值 or key 设定用户/文章等对象的意思
有些spec规范的设计越多,它的表意反而越少。 less is more.

不过这样 REST boys 就不能推广他那套 jsonHttp/RPC -> 按options自动判write权限的“跨端跨站ORM” 了? 哈哈。🤪
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
#huawei #js #ts 最近很火的 ArkUI 跨平台版 (UI语言doc ) 商店示例: https://gitee.com/arkui-x/samples/blob/master/Shopping/entry/src/main/ets/model/homeModel.ets ArkTS和Java没有相互调用的能力,需要ArkTS与C++交互,C++再与Java交互(剪贴板、文件,.),反之亦然。 看起来和方舟无关,也不需要Dart那样的虚拟机或 jvm ,基于 Node-API 但自己做绘制?…
#huawei #dev https://x.com/i/grok/share/0HQMPNpuUgLIAliXKVRe2VW6M #plt 仓颉 过程宏

4大 IO demo: EchoArgs(针对表单元素), Counter, Checklist_with_Deadline, ForkJoinWalkDirs


重新预期了一下一年前的蛤为版 React #ts (Stage模型😅), grok 给的代码还不错,说明框架质量和 Vue SFC/Compose 平级,砸钱投资,还是获得了人才的回报(比几年前 滥竽充数的抽象行为 好多了)😅

从 "DCORS" (Data, Content format, Operations, Resources and Styles) 的组合角度来看,ArkTS 推的写法语序是 "CSO;D 独立D类型(@State)",相较于H5的 "SC;DO" 还是长进不小,
像 Div(){AddChild()}.color(RED).onClick(()=> thisStruct.str.show())
像 TextInput({placeholder:"模拟H5 tags"}).onChange((s)=> this.str=s)

明显是为了 Tag(){} .cssXX.onYY 的Tab补齐做了优化,但其实补齐位置很多的,不必全靠调用链啊…… style 的外提和模块化也成了问题,安卓XML反而没这个缺口。
😅: Compose 作为 Declarative 编程风格的应用,可以说不可能比XML差。 你看 HomoOS 不是解决了此问题么


学习H5,静态化js那一套是正确的方向,但华为在生态方面有咕狗那样的开放心态吗? 语言和框架只能是鸿蒙的专利?

MDUI.org/docs 设计语言,是全平台的, Flutter.dev 和 Chrome PWA/Electron 这些,更不是局限于安卓自家可用。
即便代码质量可以配得上是「在2023年做好技术选型」的SDK,吸引不到dev入驻,或是拿钱买数据,没有DX和客户粘性,有什么好预期呢?

其实“新”平台SDK比较适合的战略就是,通过优秀的系统兼容性或自动化refactor工具,甚至是靠方法论层次的“侵略性开源贡献”,从 DOM/CSS、android.view、WPF 这些老东西那边偷Devs,另一边,自家的工具也要易学好用: 文档自己是demo,代码自注释,免费云资源😒…… 这方面还有改进空间。

ps. 蛤为家的MVVM比较奇特的点是把 div,p 含糊的堆叠方向搞成 Column纵向, Row([横,向]) 这种中文语境更含糊的了……

#AI锐评 如何创建新平台生态 😝
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
这次的结果比较失败😅 我已经努力备稿了,但回答质量还和Gemini的版本、WEB数据集相关
https://chat.librechat.ai/share/9Hf8poCH6ELbxOuWAtM-R #ai #tool

DS3.2 的“表现力”更差,但更加适合有基本功的人阅读 (上条说的「形式化验证」就暂时不讲了,要 #vibe 嘛),最重要的是便宜8倍

我花了几个小时缝合Gemini的4个答案串,希望能优化追问的质量,回头贴上。😅
https://chat.librechat.ai/share/7qAk4DtR2yryMmXbFXSJS #ts #sql #plt 看过了,很不错

#post #加入套餐 抽象解释、符号执行、污点值传递(progurad 做不到这么精细)
https://chat.librechat.ai/share/-rZrNF-UqZoRL8h58etCn 😒
https://chat.librechat.ai/share/DhFAi6LcDMgJVRRv5pRHY 类型系统还能用来 #reveng

让我们聊聊sourceless的调试(探针模式)

其实,静态类型就是在sourceless(无变量名)黑盒下的一种可观测性,它和模块划分、内存分配高度绑定
同时,类型也相当于一种“符号ID”,可以匹配不同版本、不同package里的相同代码
类型系统并不只是在“无源码做assert”或沟通API时起作用,它的本质是对程序行为的观测

这种观测可以延伸到runtime。即使对混淆过的控制流,不去推测其内部逻辑,只是hook平台的基础API(例如图层和键鼠函数),我们也能通过“指针污染”还原一定的逻辑
如果对基础API间组合关系的分析,能够进行codegen,并增量的patch到原有“汇编”,这就是动态分析的反混淆

九成情况下,AOP不是要完全获取source,而是要“理解”功能点间的联系,就像CheatEngine的数值搜索-锁定或A11y的检测点击一样。 安全界对此的认识到什么程度呢? Ghidra,x64dbg,r2 都很好,但它们对程序似乎不是“语义化理解”,限于还原符号

https://x.com/i/grok/share/gzQnI2916tLMlNWPtyoa59n5t
https://chat.librechat.ai/share/BjZyFc8Twa42gHsR_Yk47
我们不考虑二进制,或语言的AST或对象系统这些表象
type infer 究竟和这种“反混淆过程”多相似?

注意,二者都是在追溯已知“点”和“箭头”间的联系,从而推出新箭头乃至新点。

静态类型是用字面值的传导,推理箭头函数的形状,比如参数数量。在一个全部def均是SSA块(不含for,if)的代码树上,这一点非常明显。包含if或异常时它通过 union type 与类型变量,来更准确的表达点和箭头的联系。

动态分析是用污点返回值的传导,推理“箭头语句块”的流向,并探知新语句块的存在、新返回值的意图。



可能纯技术问题DS比G2.5更好用?对于大陆用户
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
#net #news #rust #lua 绷中绷 https://t.me/hyi0618/9888?comment=142993 https://fxtwitter.com/guanlandai/status/1996991544663171360?s=20
https://x.com/cloudwu/status/1997181816760058321 #design #ts 😅

- 这不就是没有空指针的语言都能避免的吗?用这类强类型语言,如果execute如果可能为空,那写execute.results就编译不过。
C++ 和 java 是不是strong type systems ? 这和 strong type 没关系。

- 本质是短路过后,有一部分代码没考虑到execute会出现被短路后变成nil,去访问以为正常执行的execute里面的东西。……编译器就不会允许你直接访问execute.results, 你必须处理空的情况。rust, swift,kotlin都可以

就这个问题,lua 给 result 加个元表也能避免这个。怎么就没意思了?
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
有些人会觉得我这么骂 #PLT 的从业者不客观,太偏激 https://t.me/dsuse/22077 如果他们玩抽象,然后承认自己玩的只是文字游戏,接受LLM那只赖皮狗在黑板上写的公式偶尔更优雅(🎓沉没成本),PLT不总能是先验,那OK,只要最终51%这样我就道歉。 (Kay的后继Bret Victor 也注意到了“发明”编程语言的领域,现在咋都在做“最顶尖的”形式化验证,AI也以为,真人用户们只是“纯函数生命体”的ーーGemini 都出幻觉了😅:但我们没有活在大学数学教的宇宙里。这是幻觉,不容歧…
#plt #ts 《〈Go To语句被认为有害〉被认为有害》(1987年3月)

二维矩阵中查找第一个全为零的行?
有没有一种可能,dijkstra提供了基于tailrec或def子程序的方法,做所谓的 break outer?

PCQ加持过的布尔变量?EWD当年并不认识声明式eDSL和tailrec(return continue vs while c),这不能怪他。

可是状态变量实在太过丑陋了!这和控制x86的eip没有本质区别,这就像把PEG写成DFA一样,证明不了什么,因为负责证明的是人,结构化和编译器只能是助手。
我推崇的那种“状态变量”是
chkstk=(n, r=0)=>{Loop(n-1,r+1) : n==0; /*so*/ return r}
或者说
f(x, y=0): if(x==0) y else f(x-1,y+1)

f(1)=1


不是EWD那种结构化的编程……

“循环不变量”这几个字本身就像鬼画符一样难猜,前置条件?应该是让人一眼能demo出来边界条件的,不需要EWD要的那种数学去证明。靠爱就能感觉出来。

我的思维本质上是关系式的,反对返回bool,支持BitSet、T? 和Hole(x=y有交换律)
结构化编程的信息量太低了,真正的数学不是表演sinx的磁悬浮,而是把海浪画出来。

他曾想要程序的验证变成一堆01(循环不变量--反正执行也是循环),就像Lean希望assert变成“真理集”,对J规则(LR transport)的丑陋视而不见。

我想要的,是结构性正确,可探索解释,不是while 0和1,不需要 off by one,正确性会广播。


然而你仔细想想,我和HoTT、TLA+ 完全走的不是一个路线。海浪很美,别忘了人才是那个“美学引力”。

EWD的灵魂会支持我的。
没错,验证本身就是像可探索解释那样。因为解释在生命体本身,必然是元循环的。

Goto有用论非常荒谬。RAII和defer甚至只是finally可以轻松干掉错误处理和retearly的问题,宏、crossinline和闭包组合很容易弱化时序流控。

时序是有罪的,它永远不可能和numpy或fffmpeg“滤镜脚本”那样优雅

#ai探讨