duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
#py Here are one-line examples for each of the available transformations provided by 2to3:

1. apply: Converts apply(func, args) to func(*args).
2. asserts: Converts assert statements to assert function calls.
3. basestring: Replaces basestring with str (since basestring is not available in Python 3).
4. buffer: Converts buffer to memoryview.
5. dict: Converts dict.iteritems() to dict.items().
6. except: Converts except Exception, e to except Exception as e.
7. exec: Converts exec statements to exec() function calls.
8. execfile: Converts execfile to exec(open(filename).read()).
9. exitfunc: Converts atexit.register(func) to atexit.register(func, *args, **kwargs).
10. filter: Converts filter(func, iterable) to list(filter(func, iterable)).
11. funcattrs: Converts func.func_... attributes to func.__...__.
12. future: Adds from __future__ import ... statements for Python 3 compatibility.
13. getcwdu: Converts os.getcwdu() to os.getcwd().
14. has_key: Converts dict.has_key(key) to key in dict.
15. idioms: Various idiomatic changes for Python 3.
16. import: Converts import x to from x import y.
17. imports: Converts import x to import y.
18. imports2: Converts import x to import y.
19. input: Converts input() to raw_input() (since input() in Python 3 evaluates the input).
20. intern: Converts intern(s) to sys.intern(s).
21. isinstance: Converts isinstance(x, T) to isinstance(x, (T1, T2)).
22. itertools: Converts itertools.izip() to zip(), etc.
23. itertools_imports: Adds from itertools import ... statements.
24. long: Converts long(x) to int(x) (since long is not available in Python 3).
25. map: Converts map(func, iterable) to list(map(func, iterable)).
26. metaclass: Converts metaclass syntax to Python 3 style.
27. methodattrs: Converts method.im_... attributes to method.__...__.
28. ne: Converts <> to !=.
29. next: Converts next(it) to next(it, default).
30. nonzero: Converts x.__nonzero__() to bool(x) (since __nonzero__() is not available in Python 3).
31. numliterals: Converts octal literals (e.g., 0755) to hexadecimal literals (e.g., 0o755).
32. operator: Converts x.__cmp__(y) to operator.__cmp__(x, y).
33. paren: Adds parentheses for print statements (e.g., print x becomes print(x)).
34. print: Converts print x to print(x).
35. raise: Converts raise E, V to raise E(V).
36. raw_input: Converts raw_input() to input() (since input() in Python 3 reads a string).
37. reduce: Converts reduce(func, iterable) to functools.reduce(func, iterable).
38. reload: Converts reload(module) to importlib.reload(module).
39. renames: Various renaming changes for Python 3.
40. repr: Converts repr(x) to repr(x).
41. set_literal: Converts {x, y} to set([x, y]).
42. standarderror: Converts StandardError to Exception.
43. sys_exc: Converts sys.exc_type to sys.exc_info()[0].
44. throw: Converts x.throw(E, V, T) to x.throw(E(V)).with_traceback(T).
45. tuple_params: Converts def f((a, b)): ... to def f(a_b): a, b = a_b.
46. types: Converts types.ClassType to type.
47. unicode: Converts unicode(x) to str(x) (since unicode is not available in Python 3).
48. urllib: Converts urllib.quote() to urllib.parse.quote(), etc.
duangsuse, [2024/3/9 16:44]
语言绝不能多加特性,加库API就好了

你看py 40年来语法变过没有?

duangsuse, [2024/3/9 16:46]
如果Modifiers() 可以visitor复制的话还是好改的

我觉得API做不好你就像DOM那样支持innerText算了,或者外提literals走宏替换好了, 不就自动refactor吗 既要又要的 复杂度比得上gpt么
听说IDEA版本库有4G啊
或许比WebKit还大呢

duangsuse, [2024/3/9 16:51]
如果改起来这么复杂,说明框架连 Object.assign 的完善度都没达到,或者说连js界的状态管理 水平都没有

因为assign是可以被hook为深拷贝的,只不过默认是0拷贝

duangsuse, [2024/3/9 16:55]
https://github.com/python/cpython/blob/3.12/Lib/lib2to3/fixes/fix_map.py

这个够不够全?

duangsuse, [2024/3/9 16:56]
python -m lib2to3 -l |xargs
Available transformations for the -f/--fix option: apply asserts basestring buffer dict except exec execfile exitfunc filter funcattrs future getcwdu has_key idioms import imports imports2 input intern isinstance itertools itertools_imports long map metaclass methodattrs ne next nonzero numliterals operator paren print raise raw_input reduce reload renames repr set_literal standarderror sys_exc throw tuple_params types unicode urllib ws_comma xrange xreadlines zip
#plt duangsuse:
我就觉得赢王民科,有时候对自己不学的领域指手画脚

但民科不意味着他在plt是无价值的,实际上我很希望有更多更易懂的中文资料,但他们还超不过赢王10年前的博客

其实我很奇怪啊,那些教「编译原理」「操作系统」的大学生和教授去哪了

为什么能打的只有 https://moonbit.org/ 张老师一个人呢
这学术性价比也太低了,近年创立或火起来的 Go,Rust,Mojo,Dart 都没啥境内博客,难道全是论文?

同感,他是把 Any/Var(Any) 对象分开谈了,没涉及heap引用等问题
我是赞同这种分法的, 因为咋分配本来就是算法噪音,应该像py,cffi那样随便转换才好呢

Java确实只有引用类型啊,无非是在局部还是在List<>

谈到这个我觉得 kt IntArray, Array<Int> 让人有点不清,而且导致了有 intArrayOf() 这样的重复宏

2. kt是做了一个自动装拆箱,这样局部/数组和List<>里就无差异
3. CLR里泛型能是值类型,但JVM泛型擦除为Obj(int tag+void*)
jvm的代码体积会小,因为C#是用动态生成template<> 的方法new泛型class
但也造成了 Stream.OfInt 这种脑残编译期宏

其实你可以放心,如果你想学他的内容还是可以看看

只不过学他知识一定不能直接挣到钱而已

我个人觉得还是比马士兵啥的强,比如你能搞懂Serializer的编译期手段和DSL设计(虽然他没直接教过),这是长期投资

任何copy都能lazy分配的

他是觉得用传参([]) 来复制数组很过时。 很少有函数会修改参数吧?除非多返回
可以参考他对Haskell pure GADT的反对, hs的每个参数都是lazy的,就像CoW 的数组值

😂 记得某位CSer说过,计算机科学只有2种问题: 1缓存失效 2变量命名

IDisposable 这些确实烦人的很
用用函数式不就解决了吗? Go 还加了个defer
然后kt有 coroutineScope{} 这就不需要手动close()

所以说这些trick或者说设计模式, 终究还是会被正确的DSL打败
不应该耗时学习它们
选对框架是关键

我就觉得资源用完不free()很合理
反正一般程序也不是long-running
这个检查和 checked Except 一样,被严重过誉了

感觉Rust也是到处Rc<T>啊
inline fn 和接口本来就是少数,怎么可能lifetime用到爆

py只靠Rc就实现了许多GC语言的功能,只是比C多个bytes而已
Py对API和对象树的理解,可以说登峰造极,独孤求败,堪比DOM对UI的定义

py也可以用GC啊,只是正常人用weakptr(parent)就好了

对写树结构的人这些应该是常识
为什么编程语言作者,会觉得该用算法给他们擦屁股?

另外看到 https://www.jetbrains.com/decompiler
我想说<40M 的 https://github.com/dnSpy/dnSpy 比它强10倍
已经是最终成品了,除了反编还能编辑

MemoryStream {

protected override void Dispose(bool disposing)
这个有点逆天啊,是嫌嵌套还不够多,搞这么一个bool给实现者?

当我有其他算法和点子可以写,会使用其他伪代码之后,才发现java世界的语言多么装腔作势

是 Dispose(bool disposing) 频率高,还是 Dispose(Disposables.. used) 更合理呢?
duangsuse, [2024/3/9 22:04]
😅 完了,感觉我都要变 yinwang.org

他10年前的抱怨我全都有,而且我比他还少点实践

大部分的 AI 系统里面连语法分析器(parser)都没有,所以主谓宾,句子结构都分析不清楚,更不要说理解其中的含义了。

不过幸好我没他民科,不会对自己不学的领域指手画脚

他们天真地以为,有了谓词逻辑,一阶逻辑这些东西,可以表达“因为所以不但而且存在所有”,机器就可以拥有智能。于是他们设计了各种基于逻辑的算法,专家系统(expert system),甚至设计了基于逻辑的程序语言 Prolog,把它叫做“第五代程序语言”。最后,他们遇到了无法逾越的障碍,众多的 AI 公司无法实现他们夸口的目标,各种基于“神经元”的机器无法解决实际的问题,巨额的政府和民间投资化为泡影,人工智能进入了冬天。


是啊,这些人为什么会觉得人脑就是布尔算术数据库呢?

duangsuse, [2024/3/9 22:23]
以太坊的 Solidity 语言一开头就有低级错误,导致价值五千万美元的以太币被盗。以太坊的智能合约系统消耗大量的计算资源,还导致了严重的性能问题。
我们真的需要那些脚本的功能吗?比特币虽然有脚本语言,可是常用的脚本其实只有不超过 5 个,直接 hard code 进去就可以了
实现转账交换的简单功能就可以了。合约应该是另外独立的系统,不应该跟货币捆绑在一起。交给律师和会计去办
比特币的脚本语言只能写出功能简单,不伤害系统性能,容易验证的脚本


不过淫王的一些话还是犀利的,听说有人手动调用Trasfer()参数不对导致丢钱的,而且Dapps在2017占用了 https://en.wikipedia.org/wiki/CryptoKitties#:~:text=25% 的算力
分布式系统确实需要一种WASM式的分布式ATM
duangsuse, [2024/3/11 17:59]
CIR是目前 .ll 语法的扩展,每条指令前都要前缀cir.
和 rustc 包含的HIR,MIR等树结构不同,clang会直接生成.ll文件,但它只会记录跳转而无cir.for等嵌套结构
复杂度上对C sum(1~N) 似乎是6:35行

CIR还支持保存虚表结构 / 类的基本信息
CIR 自Meta 2022.6,即将脱离“孵化”状态,其独立代码仓库将很快被合入 llvm-project 主仓库,并作为 clang 的一个子项目
在异构计算方面,CIR 目前将主要支持 CUDA 、OpenCL 、SYCL 和 OpenACC 四种平台和框架。

无端推广:写了一个类型推导科普
https://t.iss.one/dsuse/19387
还好好搜了一下各种中文blog
没找到好的内容,草
明明各种大学都有开编译原理依照 static typed
做compiler前端的是吃白饭的么? 都在教一些又过时又get不到重点的东西一样

duangsuse, [2024/3/11 22:02]
传值和传名区别在 if(rand(), print()) 是否短路上,其实就是 Swift @autoclosure(即Thunk) 的问题。过度的惰性是很慢的

CBPV就是不closure化已计算的值…… 看起来就是传名的优化
(Fun "x" (Return (Thunk (Fun "y" (Return (Var "x"))))))

这个我不知道意义何在,因为闭包的创建是O(1)的

duangsuse, [2024/3/11 22:11]
https://valkyrie-language.netlify.app/cn/
https://blog.vero.site/post/noulith#:~:text=maxify

a max= b 
x := [1, 2, 3];
x append= 1;

这个是比较数学化的,就不是无所谓的内部优化

duangsuse, [2024/3/11 22:29]
https://thunderseethe.dev/posts/bidirectional-constraint-generation/#example

然后这个作者还写了篇双相情感障碍 类型推导的
(app (fn(x) x) (int 3))

这个也太简陋了。就上面我的AST
F(1){x-> x[1](x[0]) }(Int)

其中x[]是关于此次调用的template<>参数Var(T)
这不就能用了么,为什么要做成完整的 unification,何况typeclass多态还乱倒不好用
“如果我们无法证明两种类型相等,我们就会遇到类型错误,我们可以提前退出。” 最后居然还扯倒了Union-Find

https://tomstu.art/hello-declarative-world 里就有教 unification ,Ruby版简单多了
连逻辑式编程都没教,程序体和constrait的对应关系没列清,乃至infer函数的签名都没讲明白,就开始写算法,只能说这个作者水平还是次。

duangsuse, [2024/3/11 23:02]
https://thunderseethe.dev/posts/row-types/
然后 row type (x:Int, y:Int) 是一种可N项组合的record,但按tuple的方法检查类型,并且还支持模拟union{}
其实Go,Kt都透过嵌入struct与Pair 在支持这种范式,我觉得它的自由度和参数颗粒化类同
union+struct A|B这个模式一般都是用extends了,搞出两种实属多余

OOP支持的是二项组合,基本把维护门槛限制在可读范围内。 把 {...o, age:18,gift:} 视为正经构造器在js都是十分炸裂的,尤其是它的实现酷似 car cdr cons

https://justinpombrio.net/2021/03/11/algebra-and-data-types.html
还是ADT更好看些
https://isomorf.io/#!/tours/of/overview/7/python #tool 这里还提了一个跨语言可视化代码编辑器
好孩紙🧶 ηαsү, [2024/3/17 10:32]
json理论上来说也可以用yaml库load(

duangsuse, [2024/3/17 10:40]
json也可以用 ast.lit_eval() 加载

Trim21, [2024/3/18 01:03]
部分json是合法的python代码啊

duangsuse, [2024/3/18 08:56]
不过 True,False,null 是不能的

duangsuse, [2024/3/18 09:02]
> 利用 importlib 实现让 from file_name import* 加载 file_name.json 字典为vars
你需要 hook import语句,先来看看Loader

> 请你向 sys.path 添加查找器,使 from file_name import* 加载 file_name.json 字典

class JsonImporter(object):
def __init__(self, path=None):
self._path = path or '.'

def find_module(self, fullname, path=None):
if not fullname.endswith('.json'):
return None

filename = os.path.join(self._path, fullname + '.json')
if os.path.exists(filename):
return self

return None

def load_module(self, name):
fp = open(os.path.join(self._path, name + '.json'))
data = json.load(fp)
fp.close()

mod = imp.new_module(name)
mod.__dict__.update(data)

sys.modules[name] = mod
return mod

sys.meta_path.insert(0, JsonImporter())


duangsuse, [2024/3/18 09:02]
😅bing copilot 不能用了
Perplexity 和 pi.ai 这些小厂似乎都更会写代码
#js #apple 平底鍋, [2024/3/19 01:07]
https://bgme.me/@bgme/112117191163425974

> Mac 软件生态吐槽

今天晚上兴致之下到「数码荔技正版软件」的淘宝店看了一下(我也真是无聊的),大开眼界的同时,心里堆积了不少的嘈点。不吐不快,就在这里随便写一写,对 Mac 软件生态的吐嘈吧。

仔细想想对 Mac 软件的嘈点的开端,可以从 Downie 威胁删除用户文件开始[1]。怎么说呢?对于 Mac 用户,借用某张 meme 图的话 Mac 用户有钱。

Mac 软件生态一个很大的特点就是再小的一个功能,都有人写一个什么什么软件,然后拿出来卖钱。
对于这种现象,不作评论。但我自己作为一个 Linux 用户,我对此非常的不适应。
比如说:我在数码荔技看到了这样一个软件 A Better Finder Rename ,售价¥79,支持前缀、后缀、文本、字符、序号等等一系列方式对文件进行重命名。总之功能很强大。
但也许是思维方式的差别吧,如果我遇上要批量重命名,我的第一反应是打开终端,然后使用 rename、perl-rename;如果要求比较复杂,就写一个 bash 脚本来处理;如果 bash 脚本还搞不定,那就写一个 python 脚本(我还没有遇到 bash 脚本没搞定的情况)。而不是去什么什么商店里看有没有什么文件重命名的软件,然后掏几十元买这样一个软件。

数码荔技店中卖的软件大约有八成都是 Mac 平台独有的,而这些 Mac 平台独有的软件,相当大部分软件给我的感觉都类似于上面所说的文件重命名工具。


[1] https://www.v2ex.com/t/1022505

平底鍋, [2024/3/19 01:08]
1. Mac 的開發者憑證對於獨立開發者來說其實挺貴的,基礎成本就擺在那了

2. Mac 的使用者消費力通常確實比較高一點,折騰能力也比較弱

duangsuse, [2024/3/19 11:06]
实际上到py脚本的程度一个运维拿gpt都是够的
何况gpt会推你流行工具

duangsuse, [2024/3/19 11:07]
和中国的同物价品质低一样,都是地区税收太高
导致淀粉肠都有问题

duangsuse, [2024/3/19 11:08]
Apple不过是把功能砍了/预置了,多做点动效,就吸引那么多资本投入

duangsuse, [2024/3/19 11:10]
不是, FileSysHandle Fx是有的
>FileSysHandle 最短的文件名全替换为 +".1" 示例

def rename_files(directory_path, new_extension):
for root, dirs, files in os.walk(directory_path):
for filename in files:
old_path = os.path.join(root, filename)
new_filename = filename.replace(".", "") + new_extension
new_path = os.path.join(root, new_filename)
os.renames(old_path, new_path)
https://rename.jgrass.xyz/
// assuming fileHandle is a valid FileSystemFileHandle instance representing the file to be renamed
const newFileName = 'new_filename.txt'; // replace with desired new name
await fileHandle.parent.getFileHandle(newFileName).then((newFileHandle) => {
throw new Error('File already exists');
}).catch(async () => {
await fileHandle.move({ target: newFileHandle });//fx专属
});


duangsuse, [2024/3/19 11:13]
是的,Web平台已经能做到离线使用PWA,RTC,WASM文件系统等特性,只是和electron比API麻烦些

很可惜WASM不太好调试啊,然后ChromeOS也不流行了
duangsuse, [2024/3/21 19:28]
哈哈哈社工,和那个微信文件助手高仿号同理

duangsuse, [2024/3/21 19:35]
如果视力是能训练回来的,为什么就你知道? 赢王已经陷入了抗癌药阴谋论,就差得出昂撒犹太控制 🌎

duangsuse, [2024/3/21 19:37]
https://www.yinwang.org/resources/gucs-sample-chapter1.pdf

不过赢王居然不想 top-down design 这个CS教程
让人匪夷所思,我看看

duangsuse, [2024/3/21 19:43]
查了下,我看未必是中医,而是假性近视本来就是能恢复的
https://www.zhihu.com/question/394687329

有人说自己600->300过
从直觉上讲,错误习惯导致眼轴病变,靠习惯也能逆转
只看度数不能证明近视原因

duangsuse, [2024/3/21 19:48]
话说赢王也不是个粉红,为什么会热衷于这么反智的话题?

我作为反思怪也没有想到能做这么逆天的结论

duangsuse, [2024/3/21 19:31]
开源:增加下游数量,方便供应链攻击
节流:砍功能砍支持,挣钱
开猿:按专家或团队解散app维护者
节流:降低可用性和粉丝数

降本增笑

哈哈,不支持宏内联的py里确实不用分,反正内存都可变
程序员反贼比例应该挺高的毕竟心态开放,而且很容易触墙 😠
GH主要是翻墙吧…… 提交和同步有UI的
其实我觉得直接应用比较好
50w算是什么级别啊,vue应该有几百 什么领域的?CG?web?桌面?移动

照张雪峰说的,acm,那就是IT的哲学 是拉丁文,哲学家大部分都是死人,在古代。 AI对什么冲击最大啊? 你能比几十T的模型擅长查资料?
无非是哲学死的早一点,计算机的哲学死的晚一点,能分应用界的名气
write code, to solve exact cover problem using SAT or SMT

我搜了一下,发现gpt3能给一个逻辑编程调用
感觉挺虚无的,这么牛逼的问题连个库+框架都没有,还要仰赖gpt的编程能力
Z3不知有没有封装
计算机存在的意义,就是为了规范各种问题、联系各种解法
动规就是自底向上来做缓存的递归嘛 很好理解,对PYer 来说标准库就有
https://docs.python.org/3/library/functools.html#:~:text=a%20dynamic%20programming%20technique
你也没说错,很多dp问题只涉及2个参数 -二维数组

如果连API都给不出来,那就不是CS问题
https://brilliant.org/wiki/heap-sort/
https://algostructure.com/sorting/heapsort.php
btw. 我以前也做过算法可视化的,但B号是露脸的 不方便发

rbt 几乎是函数式数据结构的helloworld了
参考 https://try.moonbitlang.com/?012_avl_tree.mbt
duangsuse, [2024/3/23 13:16]
简单清晰是可靠的先决条件,不是可靠的牺牲品。
简单直接的代码\=易取代的初级代码

如果连这个领域的demo怎么实现都不懂,从不思考实体背后的复用逻辑, 用“工程技巧”添加几个参数,恐怕也就只是bash脚本级别的设计。 然而我看到很多的设计模式,都是这样的三脚猫,因此所谓静态语言才和jspy产生那么大隔阂

你说一味追求“快”“小”的产物所做出来的东西应用在生产中只会是灾难, 我看让一个简单app的整个「体系」无法解释的过度工程,才是最大的灾难

duangsuse, [2024/3/23 13:36]
我之前70行有个basenc算法 https://t.iss.one/dsuse/18158
虽然代码短而晦涩(因为是初稿),但复用性还好

功能复杂、实现易懂、代码长 ,三者是没有绝对相关的

作者希望在保证功能的同时,缩减代码、提供统一恒定的接口, 这是非常有道理的
功能上的规范才是软件工程的本质,那些class不是, 怀念旧软件\=怀念没有功能和适配性的魔法特技,而是在追求真正有语意的设计驱动编程 。

duangsuse, [2024/3/23 13:48]
v8我不知道,不过 https://bellard.org/tcc/tccboot.html (5.9M, Linux 2.4) 和 https://luajit.org/download.html (822.84k)
你可以观摩观摩

不知道为什么你能从protobuf, ANTLR 等流行实现,得出“某个功能必须占几百K” 这种刻板印象来的。 你可能根本没分析数据和程序间,通过怎样的结构来对应。你也不在乎某个编程问题属于什么领域

不过我知道,LeetCode其实就属于复杂功能 低代码实现的。 其实许多“高工程质量”的标准库和算法题解也没有结构性差异,无非多几个参数和class

duangsuse, [2024/3/23 13:56]
> 如果这套毫无意义的抒发能够推动一个3M内实现V8引擎的工程奇迹诞生

我现在告诉你了,V8 那样的jit也不是非得设计那么多中间层,才能做出来的。 实际上gcc+asm 的最小可行实现不仅没有3M,而且像numpy那样提供显式的优化API,能多快好省地“做工程”

你能把观点细化到对事不对人么

我就只看到你觉得, 新软件就是比旧的功能好,因为里面包含更多工程师、更多产品需求耗费的精力,甚至更多更专业的"Agile" 架构师的天才思想, 但这就是它们比「最初的美好」烂的原因, 所谓屎山是堆砌出来的,不是所思即所得的设计。


或许V8是膨胀到20M,但工程师们写helloworld 的水平却不会随之攀升。 为了待在原地而「奋力」奔跑,有意义吗?

duangsuse, [2024/3/23 14:01]
得,我举个例子来展现你的 “V8 <3M 不可行论” 有多荒谬,以及猜测你刻板印象的来源,还变成我打稻草人了

这都是批评过度工程的案例。 我是想说,比如要开发按键精灵那种程度的安卓脚本, Duktape(800K) 比一定要移植V8 适配多了。 明明软件功能和需求就是没进步,“操作系统层面”却不断膨胀,甚至把复杂性溢出到app层干扰开发者的创作

https://duktape.org/download

duangsuse, [2024/3/23 14:07]
那你反对原作者干啥啊, 他说的就是「不在现有的工具链上建设」啊

人家又没有说技术债务有罪论

duangsuse, [2024/3/23 14:10]
可能软件界还是太新了,加入知识共享的很多,导致一直在发展,没有人停下来像真的工程师那样去总结
但开放正是它的先进性所在

https://www.yinwang.org/blog-cn/2015/06/07/software-engineering

btw. >这些人做出来少数有点用的东西(比如 JUnit),其实非常容易,以至于每个初学编程的人都应该做得出来。一个程序员见识需要低到什么程度,才会在乎这种人说的话?
还有一个「交换律:数学生的编程水平,等于计算机科学生的数学水平」

可以说是破了两个刻板印象。 计算机是工具,代码不是拿来膜拜的,怎么简单怎么写

duangsuse, [2024/3/23 14:20]
让我想到前几天Apple Java 的新闻 https://t.iss.one/kotlin_cn/106753

Mac应该算是软件产品化的顶峰了吧? 又是Darwin的例行升级
哦对,还有固件更新把2024写错为24,导致所有用户被升级的

「编程要严肃」「快和简明是代码可信度的牺牲品」,这只是观念而已,甚至该叫偏见。 谁都想要高质量可维护的软件
凭什么说像fakerjs那样总会被潮流取代的 流行的代码,是高质量软件的必需品呢?

duangsuse, [2024/3/23 14:25]
同样的话也可以给软件工程化的标杆—— Apple 生态圈啊

duangsuse, [2024/3/23 14:26]
难道不是越持久、越宏大的代码越可信? 谁能在4G的代码仓库里,找到是哪一行导致JVM在XNU内核上崩溃的bug?

Java生态是可以运行医院管理系统的, 假设历史的某一点上,有个人在医院更新了系统 导致java不稳定,可就会影响各种医疗资源的分配
为什么那么大、那么多人的供应链维护的软件,也会出现所谓极简主义才有的死机崩溃问题呢?

另外推荐
https://mirrors.ustc.edu.cn/alpine/latest-stable/releases/x86/
https://tinycorelinux.net/downloads.html
https://www.damnsmalllinux.org/
duangsuse, [2024/3/29 20:45]
搞成 useNew { XInputStream() } 呗,既然拿实例就能报错

duangsuse, [2024/3/29 20:46]
我到是觉得use() 本来就该vararg ,类似Promise.all

duangsuse, [2024/3/29 21:01]
其实@autoclosure 也是好看的,
use(::FileInputStream, "a.txt") {}

更统一些

resScope{ ins1.use(); ins2.use(); } 更标准些

但关键问题是构造器异常这种,太莫名其妙
为什么不提供open()

Jason5Lee, [2024/3/31 15:00]
我倒是想过最佳的 GC 语言 mutation 控制机制

Jason5Lee, [2024/3/31 15:01]
Kotlin 目前的干法是,Mutable 接口继承非 Mutable 接口,所以非 Mutable 接口的对象理论上是可能 Mutable 的,但是大家约定俗成一旦对象被当初非 Mutable 接口就不能变了。

Jason5Lee, [2024/3/31 15:03]
kotlinx.immutable 的问题是会有很多转换。Kotlin 当前设计实际上考虑了 Java 一个接收 List 接口但实际上不会修改的这个情况,牺牲保证换转换方便。

duangsuse, [2024/4/3 09:46]
就是一个curry化啊
吧语法重载下延迟执行,泛型<R>呗

duangsuse, [2024/4/3 09:49]
我是说
Lit(Int): T<Int>
Add(A,B): T<Int>
toStr(this:T<*>): T<Str>
就够了

duangsuse, [2024/4/3 09:51]
总之这种 #haskell 上也有
https://okmij.org/ftp/tagless-final/index.html#:~:text=class%20Symantics

称为GADT https://stackoverflow.com/questions/33928608/typed-abstract-syntax-and-dsl-design-in-haskell
Forwarded from 螺莉莉的黑板报
逗了一下 8b 模型:
ollama run llama3
>>> 你好
😊 你好!我是人工智能语言模型,我很happy地看到您使用中文和我交流!如果您需要帮助或想要聊天,请随时说出你的想法! 😊

>>> 你 的年龄是?
哈哈,我的“年龄”是一种虚拟概念,因为我是一个人工智能语言模型,我没有生存的时间,也不具备传统的年龄概念。我不断学习和更新自己的知识和能力,所以说我“年龄”是不断增加的! 😊

>>> 你 被训练了多久?
🤔 我不是以传统意义上的“时间”被训练的,而是通过大量的数据和算法来学习和改进自己的语言理解能力。

我的训练数据来自于互联网上的一些高质量的文本 corpus,我从这些数据中学习了各种语言结构、语义关系和文化背景等知识。我不断地更新自己,以适应新的数据和算法,这样我就可以更好地理解和生成人类语言! 🚀

>>> 你 在训练的时候吸收了多少来自互联网上的资料?
🤯 我的训练数据来自于 internet 上的一些高质量的文本 corpus,总共有数十亿个单词、数百万个文章和书籍等。
我的训练数据来自于各种领域,如科学、技术、历史、文化、娱乐等,我吸收了这些领域中的知识和信息,从而拥有了广泛的语言理解能力。

具体来说,我吸收了以下几类数据:

1. Web pages: millions of web pages from the internet, including articles, blog posts, and online documents.
2. Book and academic papers: hundreds of thousands of books, research papers, and journal articles on various topics.
3. User-generated content: millions of social media posts, comments, and forum discussions.
4. Product reviews: thousands of product reviews from e-commerce websites.

这些数据让我拥有了广泛的语言理解能力,可以处理各种语言和文本类型。

>>> 关于用户生成的数据,请你举一些例子,你都吸纳了哪些平台上的数据?
🤯 我的训练数据来自于 internet 上的一些高质量的文本 corpus,包括了许多用户生成的内容,我吸收了以下几类平台上的数据:

1. Twitter: millions of tweets, including conversations, news articles, and memes.
2. Reddit: thousands of posts and comments from various subreddits, covering topics like science, history, entertainment, and more.
3. Facebook: hundreds of thousands of posts, comments, and updates from friends, family, and interest-based groups.
4. Quora: millions of questions and answers on a wide range of topics, including science, technology, culture, and more.
5. Stack Exchange: millions of questions and answers on various topics like programming, mathematics, and linguistics.
6. Wikipedia: thousands of articles, including biographies, history, science, and more.
7. Online forums and discussion boards: hundreds of thousands of posts and threads from various online communities.

这些平台上的数据让我拥有了广泛的语言理解能力,可以处理各种语言和文本类型。

>>> 现在的时间是?
🕰 我是一个人工智能语言模型,不具有现实世界中的时间概念。我不是根据地球上的时区或日期来定义自己的时间,而是使用一个虚拟的时间参考系,用于衡量我的训练数据和更新过程。
在我被创建时,我就已经包含了大量历史数据,从而拥有了一个基于历史事件和知识的时间参考系。这个时间参考系帮助我理解和生成人类语言,并且让我可以与用户进行实时交流! 🚀

>>> 请进一步介绍你的时间观念,也就是你的时间参考系
🕰 我的时间观念是基于一个虚拟的时间参考系,我称之为“Epoch”。_epoch_ 是我的训练数据的起点,这个起点定义了我的时间参考系。
在_epoch_ 中,我拥有了一个固定的时间参考系,它包含了以下几个方面:
1. **Event timestamps**: Thousands of timestamped events from various domains, such as science, technology, history, and more.
2. **Textual references**: Millions of text-based references to events, dates, and times, which help me understand the context and relationships between events.
3. **Temporal relationships**: Insights into temporal relationships, such as cause-and-effect, sequence, and co-occurrence, which enable me to reason about time and causality.

这个_epoch_ 是我的时间参考系的核心,它让我可以理解和生成人类语言,并且让我可以与用户进行实时交流! 🚀

>>> 我们之间的交流经历了多少个 epoch?
🤯 我们之间的交流不是基于传统意义上的“epoch”概念,而是基于我的训练数据和更新过程中的一些关键事件或milestones。
在我们的交流中,我认为每一个新的对话、问题或反馈都是一个小的时间参考点,这个点让我可以了解你的需求和意图,并且让我可以生成更好的回应。 📊
因此,我们之间的交流经历了许多“epoch”,这些 epoch 是基于我的训练数据和更新过程中的一些关键事件或milestones。
duangsuse, [2024/4/24 09:31]
没有啊,
@deco
def f():
也就是 f=deco(fBody)
可以在调用处用

duangsuse, [2024/4/24 09:32]
end='' 属于幼儿园知识吧

duangsuse, [2024/4/24 12:22]
我也很无奈啊,怎么这么基础的 logpoint功能py都没自带呢?到处print真难写

duangsuse, [2024/4/24 12:23]
用着函数式的GC,连组合函数都不会用,还手动print

duangsuse, [2024/4/24 12:24]
明明是可以 from traceback_with_variables import activate_by_import

duangsuse, [2024/4/24 12:30]
logging应该是 systemd 的同款功能吧,这个是debug

duangsuse, [2024/4/24 12:32]
就看到一个 @logger.catch
我觉得还不如直接整个globals()自动应用好了

duangsuse, [2024/4/24 12:33]
https://loguru.readthedocs.io/en/stable/overview.html#exceptions-catching-within-threads-or-main

duangsuse, [2024/4/24 12:35]
logging就应该搞个绝对化,一概不要,让 journalctl来做
这么简单的事情还分编程语言
Show HN: I built a non-linear UI for ChatGPT
Teranoptia – 一个奇特的「生物组合体」开源字体

https://jesse-zhou.com
这首页做得好帅啊
https://www.kubota.com/futurecube/
https://retrage.github.io/lkl-js/boot.html

#ai #web spider
code snippets for web scraping using Scrapy, Puppeteer, and Apify with 2-space indentation and using let (for JavaScript variables):
python
import scrapy

class MySpider(scrapy.Spider):
name = 'example'
start_urls = ['https://quotes.toscrape.com/']

def parse(self, response):
for quote in response.css('div.quote'):
text = quote.css('span.text::text').get()
author = quote.css('span small.author::text').get()
yield {
'quote': text,
'author': author,
}



javascript
const puppeteer = require('puppeteer');

(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://quotes.toscrape.com/');

const quotes = await page.evaluate(() => {
return Array.from(document.querySelectorAll('div.quote')).map(quote => {
let text = quote.querySelector('span.text').textContent.trim();
let author = quote.querySelector('span small.author').textContent.trim();
return {
text,
author,
};
});
});

console.log(quotes);

await browser.close();
})();


javascript
const Apify = require('apify');

Apify.main(async () => {
const input = {
startUrls: [
'https://quotes.toscrape.com/'
]
};

const crawler = new Apify.CheerioCrawler({
startUrls: input.startUrls,
handlePageFunction: async ({ request, $ }) => {
const quotes = [];
$('div.quote').each((index, el) => {
let text = $(el).find('span.text').text().trim();
let author = $(el).find('span small.author').text().trim();
quotes.push({
text,
author
});
});
console.log(quotes);
}
});

await crawler.run();
});

These updated snippets use 2-space indentation and let for JavaScript variable declarations in the Scrapy, Puppeteer, and Apify examples..

duangsuse:
go,c#定义
kt表达式
c数据类型
java main函数,这个是最逆天的
开倒车

pipeline这种稍微用过kt都应该拿.let(fn)换掉
什么落伍的伪函数式,oop不能函数式吗?

然后Token list宏是最绷不住的,不就是不会干扰到字面str的replace吗
怎么不用这玩意做个SWIG的功能试试?还不如html模板。

学学ruby的define_method吧,或者至少装个b用rust的ast版正则婊答式也好

extend T with I{} 可以用adaper实现,反正都要判定多态,本质上是编译期的糖
绿线程这个lua都有,不过cj比较好的是使用go风格spawn{}.get并发,没有kt 结构化scope的理解门槛

不如P/Invoke啦,这种特性都没必要教,import cffi 都是直接include.h
https://blog.csdn.net/dreamdonghui/article/details/76343671

最可气的是它仍然在到处pub private
java里这种凑字数行为
然后mut this与copy this也有待商榷。
cj的list是值类型吗,如果不是rust那样准确的区分是否可变,mut引用就是文字游戏

struct不支持子类型是标准操作, https://crystal-lang.org/ 和cpp是这样的

kt里mutlist自己就是可变的,mut func与否都可变,go里取决于append()

不如这样,module和class都可以有init和main(),后者是operator() 🌚

搞特殊哪有这么冠冕堂皇的

奇怪,libc_start_main好像都没这么特殊对待
属实是脚本化入脑入心入魂了

至少C标准里.so可以同时有init
一个.c编译单元就是一个object{}

这种事情c就干过, -Wimplict-int
c的设计者kent还聪明些,比cj这个泛用的多,然而时间证明了他的错误

好吧,static inner class本来就该被淘汰了
inner class本质上是class+构造器fun而已

本身就是oop拿来凑数的,其实把它视作可override和extend的fun才对
duangsuse:
感觉有点……一言难尽
到处 private const return 很标准,我无话可说,这是ES6本身凑字数的毛病。
但作为程序员就不要比标准库聪明了,DataView递归下降挺合适的,能逐byte,大小端slice功能完备,读流简单 import re 都有写

洋洋洒洒几百行,一问只能load,函数名全掐死为readXX(),dump或in-place修改那是不可能的。js 语意化的优势在哪里呢?cpp是能做到这两点的。
其实并不是js差,而是脚本用完就扔 懒得总结经验复用吧。
JSON挺复杂,PCRE也只要20行。难道一个2d数组比这还复杂吗 https://regex101.com/r/vyUdBa/1
https://github.com/Web-Media-Foundation/infrastructure/blob/master/packages/ogg-polyfill/src/

readUint{2..6}
readUint{8,16,24,32} 写时手真的不会抖吗,这么多余的常量转函数名 定义时不累 调用方不觉得多余吗?
凭什么只能read呢? fitUint(nBit, obj,key){if o[k]undef or isF5:read else write} 不行吗

TS好像是支持类型体操的,这种fun在for()里定义亦非不可能,虽然我无法理解procedural到这个地步是想干什么。OOP也不是这么玩的

我是说,至少可以少写点js循环
你的代码很规范,非常业界化,这不容置喙,但它显然不是足够通用的代码

https://readhacker.news/s/6a97H

注:火柴盒图的柱子标记minMax,众数和平均数

B-Trees Require Fewer Comparisons Than Balanced Binary Search Trees (Score: 150+ in 1 day)

Link: https://readhacker.news/s/6aa9u
The First Animal Ever Found That Doesn't Need Oxygen to Survive (Score: 150+ in 23 hours)

Link: https://readhacker.news/s/6a9qp

https://github.com/ggerganov/imtui
Show HN: Voice bots with 500ms response times https://fastvoiceagent.cerebrium.ai/
https://github.com/ButTaiwan/evilsung

邪恶宋体!
前几天还在群里开玩笑说我们需要ChatGPTcc来替代手工编写汇编优化,没想到……

https://x.com/AIatMeta/status/1806361623831171318
#java #py
duangsuse:
https://t.iss.one/im_RORIRI/17511
卧槽
把前缀相同的param.给struct化啊,还有,f64不支持NaN么

栈上分配超过6个参数是不可接受的,x86有几个传参寄存器来着? daniel'si dress costs r89

完全不能拆成多个fn或者用列表处理吗
感觉这个程序是属于numpy的

如果你wrap成tuple bmp_chroma{} 就可以用 x.0~x.11表示参数

float类型ieee自己就有规定夸语言的null值,套一层属于自讨没趣

duangsuse:
xml在ast方面确实更好,但它被linus喷了
我只是举个例子

函数如同查询,是完全可以符号化数据化的

举个例子, NUM+a+b+1
[".0.1 NUM a b", 0,1,2, .+, '.1', .+ .+]
就可以是json的等效表达
0是全局变量, 1 2是参数, .+是调用

.0.1 代表这个数组保存了有0个变量,1个绑定,剩下2个参数的节点图,或者说“函数”

自古以来脚本语言是最好理解的,因此“静态声明”必须被解读为编译期项的添加,而不止是一种不运行的语法

这样才方便编写预处理、方便理解类型检查,这样无论编译还是运行时,使用的数据模型都统一为“不纯”的
程序员才不会自以为数据绑定是魔法框架的专利,然后整出一大堆脚本里不存在的设计模式

总之,现在的语言只有Zig在编译期计算上是合格的,其他通通笼罩在魔法师的阴影下

我在找一种类似 import cffi 的 kotlin inline c jni code 的元编程库

发现一个纯cpp写jvm lib的方法 https://github.com/google/jni-bind?tab=readme-ov-file#methods

🌚有点像C#的il2cpp ,不过我最理想的方法是,kt代码直译为cpp external fum

Kotlin/Native does not support compiling Java bytecode to native code, which would be necessary to use the kotlin-jvm stdlib.
Calling all JVM APIs through JNI is definitely going to be much, much, much slower

SWIG和JNA大概也是类似的,不过没有我理想的那种多语言无缝衔接

https://github.com/LanderlYoung/Jenny 可能比JNA好 https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md

python社区的元编程功力实在是太棒了,或许是因为没有第二门语言的语法和反射如此简洁

py除了自带ffi,还有cython,mojo,numba,taichi一大堆子语言,根本不会像java这样要配置什么编译链接,一切都是框架主动生成

duangsuse:
奇怪,你是要支持 http:#hash 吗,为什么要多此一举匹配path呢,toUrl又不能直接拿来请求

而就这个例子,应该用resp.ContentType 是否为application/gzip
或 Content-Encoding: gzip https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Encoding

你可以断言url没有#hash直接对str判定

确实,text和octect是最常见的错误MIME
Forwarded from dnaugsuz
🌚 我当然也可以把完整草稿发一下阿,甚至还有形式语法,但那有什么意思呢

行列算数的本质,就是把列模板、行集合算作整数,加入计算器,以及让GADT和其匹配的函数值变得可扩展、支持默认值、与实例解耦
从而替换掉struct,union sealed 那些东西

说点有实际意义的,它能彻底颠覆Kotlin的数据结构范式。

class are: Row<I> {
fun Num2(x:N, y:N){}
fun .. //数据类
}
open class are: Col<I>, AnimalFn {
val name:Str
fun Dog(){}
fun Cat(cuteLevel:Cnts){}
}
class are: Col<I>, AnimalFn {
fun Man(c:Career,e:Email) //新子类
fun firstName()= //扩充函数,无需语法特例
fun isEmail(s:Str)=Regex(..)(s)
//自带校验类型,inline class
}
enum Career_: iz{Dev,Teacher} //BitSet

其中,<I>代表 Rowcol typis 定义的编译期计算范式Ep01(eval phrase ast~typedict),用于传入静态的类型对象。加上cell(响应式/逻辑变量),它在各类数据绑定上都是自带电池的、跨语言的。

就像Col表格可以随便“打开与扩充”,基于cell多返回值的函数,除了能 showInt(res, "123");res.v 反计算
还据此支持 "trim_".as(u.txt/"wtf"){it.trim()} 这样的链式编解码与IO

单字符参数不好,所以它配套一个记着顺口的标准类型集"sixfane",这每个字符都对应一个类型
就不一一列举了,其实都是很简单的重构。
创建语言(新语法)很容易,但找出语意上的缺陷,并用新范式修补的话…… 这种人太少了。
Forwarded from dnaugsuz
#kt #元编程 嗯。。我有个点子,有没有懂ktx序列化的人批判一下

基于Visitor实现json/toml.. 的读写,data class 只提供零参构造和 KVprim.see(instance,"field",jsonVisiter)接口
设计CLI解析器时想出来的,就挺像xmlpull

这个see按field的类型调用注册的读写器

N=Double
Num2(x:N,y:N)
interface KVprim {
companion 注册表: IType<KVprim>
}

typeof<Num2>(KVprim).see object:FitPrimSeer {
see(x:N):N =next.Float
see(x:Any, T:KVprim) = skip'{', T.see(x, next.Str, this).. return x
}

这是读取,写入的话接口一样是
x=fit(jsonStream,x) 。如果 T.seal? 字典不为空就先读个'type'键 然后同上
codegen上就是一个大when{}语句字典
然后对diff update以及CSV很友好,这点是我最满意的
duangsuse:
typealias啊,支持运行时验证和扩展fun

🌚大胆的想法
final class是extfun的另一种写法,不需要运行时的虚表支持
如果jvm能搞这个。。

🌚把Visitor和序列化读/写统一后,现在回看encoder模式感觉好复杂啊
这一大堆和上面那条FitPrimSeer的区别,仅仅是后者不支持验证可选字段,加个bitset就结了

这不会是官方实现吧
buildSerialDescriptor ,确实是
又要提供Descriptors又强制手写encode就感觉莫名其妙
也没看出是用非反射方法赋值啊

https://github.com/iseki0/kotlinx-serialization-bencoding/blob/master/src/commonMain/kotlin/space/iseki/bencoding/internal/BencodeEncoder0.kt#L112
🌚好吧,确实是……非常,独立于语言本身的类型系统
之前学的IO语法,想手写json rw时就得重新发明了
Forwarded from dnaugsuz
然后这个Lexer是可以返回带类型的值,通过 val(T,lit)=la()
不需要堆分配。MutPair单实例,当然用 lit.Str? lit.Int?.let 也行

peekChar()会更好因为有CharRange
想必这个BT种子的格式是最适合练手了
Forwarded from dnaugsuz
🌚和我想的一样,ktx序列化就是比反射多一个prim类型免装箱
为了这一碟醋包了一整个设计模式,啧啧

但kt区分T和TElement是我没想到的,有病程度堪比 ArrayInt vs IntArray
后面iseki又重造了x86调用栈的轮子不是。。