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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
#py #dalao https://pythoncat.top/posts/2023-06-24-weekly 含 #WASM PyScript 等2个 visualizer pandas Tutor https://www.youtube.com/@TechWithNikola #embed PikaPy #recommend 500LoC #algorithm
#py https://benhoyt.com/writings/python-api-design/#Naming

☺️看起来,新语言对py和kt 都有很好的简化效果;就是不知道是否易读
use urllib.request

at:
mgr HTTPPasswordMgrWithDefaultRealm():
add_password(NO,"httpbin.org", "USER"to"PASS")
http mgr.lets(HTTPBasicAuthHandler).lets(build_opener)

at URL="https://httpbin.org/basic-auth/usr/pwd"
http.open(URL): say(status)

Request(URL): add_header("Authorization" to "Basic ".b + Eqv.Base[64].cat("$user:$pass"b) )
.lets(urlopen)

use! django.core.files images File
use images

-when as
User'username displayName'(:Str, active=$Y)
Use(name:Str, displayName:Str, active:Bool)


还有 Go、Rust 为什么不支持三元运算符
2005年py 是没有 X if C else Y 的,被写成bash式 C and X or Y
绝句不想为了简洁而容许流控表达式: fun wtf()=listOf(break, return Unit)
所以选择 at user=d["USER"] or: return ,没有else ?:

X.may{C}or Y , X.takeIf{C} ?: Y
C.way{X}:Y, C去路(X、Y) 这是最常规的

要知道py,rust还有 for else 和 for a[-1] in a: ..
绝句和py模仿的:
elif-没有
三段式for- (0~N by step).let:[i]
foreach- 对Seq,异步都是 let
forelse- 请用inline func 替代goto好吗?
duangsuse::Echo
#py https://benhoyt.com/writings/python-api-design/#Naming ☺️看起来,新语言对py和kt 都有很好的简化效果;就是不知道是否易读 use urllib.request at: mgr HTTPPasswordMgrWithDefaultRealm(): add_password(NO,"httpbin.org", "USER"to"PASS") http mgr.lets(HTTPBasicAuthHandler).lets(build_opener)…
#statement #plt https://pythoncat.top/posts/2020-09-20-lambda
Guido 对FP还是太 naive 了.. 他看到一群魔法师鼓捣出扭曲的黑FP,就觉得 lambda::(多行代码块) 是无价值的

any,all 能取代reduce的这种观点,是有一点点道理,但现实世界很复杂, 不是四五个列表处理就能懂完了…

Py 多行lambda的失败,我想很大原因在于对 py 那种 lambda x: 的语序, sorted([2,1]): abs(it) 式后置块是无效

这种冗长的关键词,而非 (x)=>函数引入 ,设计初就是有问题的,然而只关心数据切片的Guido却不愿意学习《定义式编程基本法》:不必要的选择仅能对新手隐身!
Guido的reduce,enumerate本身就“不够数学”,这是py从C[到处ijklmn 面条代码] 继承的缺陷而已;怎么不说 avg(),sum,minmax 也都属于aggerate? 所以拿py「实现」这类就要写一堆 while..return ?

不要拿本就做作的 a[::-1] “操作符” 来否决多行 lambda:: ,再拿那套 with: enter exit, @prop def 当新特性和宝贝 (绝句的 get(:Rn<Idx>)Ln<T>, swap(a,b)Closes, - fn==cache<ARG>() )

当然 sorted(ary) (x)=>abs(x) 对py就是自杀(想想Ruby的do..end和{}的烂摊子)。我是没法要既有语言遵循绝句这套
a.sort: it.abs, list.let:[==a to b],(func{A}{B}:[x] C) 的方括号,就像 OOP 永远离不开 "override" blabla

其实 @print(x) def res 的本质就是 res =print({ 匿名函数 })(x), Guido的妥协是把它锁在“装饰”的语义里,当然写过decorator都知道return 局部def 是很麻烦的(也可 class def __call__ )
(你看吧, Py3.9 修正了这一点, Guido 还是对函数式和 := 屈服了 😓 哦,原来在PyQt 里想一个函数参的例子都很耗时?)
幸运的是绝句可以靠 - calc==cache<Int>(use=LRU):log: x+1 来表达多层修饰 @cache @log def calc 😅只有一种写法,而且可复用,这不是很 Pythonic 吗

https://pythoncat.top/posts/2021-12-13-languages#动态元编程hyruby
Ruby这一班人对API的理解有问题,比如拿 &fn, yield 来封装空洞的语法糖,或者把 reduce any 这些stdlib当成一切,这显然是拖了库函数的后腿,导致numpy都是利用境外势力(向量)解决基本的where和过滤的

at:
nums [3 1 5 4 10]
kv [=a 3 b 1 c 5 d 4]

nums lets: +1 //list(map(lambda i:i+1, my_list))
nums.only{<10} //[*filter(lambda i:i<10, my_list)) ]
nums.Sum:A+B //reduce(lambda i,j:i+j, my_list, 10)
nums.Sum:(A<B).way(A,B) //reduce(min,)
nums lets:[n] //issorted(nums)
(n by n[1~_]).all(pairs{<}) //=.Sum($Y){A & B}

kv.Sort:[==v by k]v //sorted(my_dict.items(), key=lambda item:item[1])

[x+1 for x in nums] //nums lets: +1
[x for x in nums if x<10] //nums.only:<10
nums all{!>10} //all(x<=10 for x in nums)
'TR'- pairs(:Fn2<T T>)=Fun1<PairOf>: fn(A,B)


for else
x = [1,2,3]
for i in x:
if i % 2 == 0:print(i);break
else: print("mismatch")

lets:[^]
[1 2 3].letIf{it%2==0}:
say(it); return
say(NO)

其他冷门用法:
def f(*, x, y, z): {**kv} // ?fn help里的 '/'参数又是什么
from copy import copy, deepcopy
Enum('Cutlery', 'FORK KNIFE SPOON')
from pprint import pprint


py里 a=1 可以创建变量,这1个“基本” 却造成了2大问题:
- self 必不可少 (不然如同js with{})
- nonlocal 才能捕获外层变量 (不然是局部)
- for x in ..: defer(lambda: print(x) ) 捕获,而不是新建了变量

https://github.com/chinesehuazhou/python-whydo/blob/master/zh_CN/1-why-design-len()-and-not-x.len().md
对语言还是停留在「实现/性能」上,没有用「可复用」的API来推敲语法
len() 并不是如Lua#所理解的一种普适的操作。range(0,len(a)) 好像比 (0~a.size-1) 简单,但 for i in a.rangeI 在一致性上就比 全局range,len 函数高到不知哪里去了,能和用户函数谈笑风生

只因少几个字,py就失去了让 a[:-1:] 变成 a[0~_-1 by 1] 的机会,后患无穷吧
Forwarded from 睡前消息
» 15. 陈睿:B站视频将用播放分钟数替代次数

陈睿称,PUGC中长视频在B站视频播放量中占比70%,短视频大概在20%,B站基本盘仍然是PUGC中长视频,而且数量还在持续增长。谈及如何解决优质中长视频湮没在琳琅满目的选择中的问题,陈睿称,“解决这个问题不能倒退,我们能不能用产品和技术的方案,让用户更容易选择制作精良的视频?”  

陈睿表示,播放分钟数比播放次数更能体现视频的质量,但是统计播放分钟数技术复杂度更高,成本更高。幸运的是,随着技术的成熟,现在B站已经有能力统计播放分钟数,替代B站播放次数作为外显数据,让用户有更好的参考。“计划未来几周,将完成产品更新。”
👍1
Forwarded from Rachel 碎碎念 (Rachel 🐨)
若您在使用 QQ 或 TIM 的 Windows 版本(非 QQ NT),且未采取措施阻止 QQProtect,请立即停止使用并采取适当保护措施
https://t.me/woshadiao/122769
Forwarded from Dev Meme / devmeme
#dev #life #plt #js https://t.me/kotlin_cn/78844

#statement 不过还是很高兴, 如果我的设计都有可行性,以后读写 wav,bmp,class, json,css 这些文件结构就毫无难度了

最重要的是, 这些框架是统一的。我实际上从自己零散的设计稿,创建了广义的结构化数据模型 🥰

这种无论要做什么,都不需要学习新概念的Pythonic,就是我梦寐以求的。最讨厌折腾样版代码和API夹带的私货了。
Forwarded from dnaugsuz
#learn #java 我还想写一个用于js-java RPC的序列化器 ,但认知遭到了强类型Object 的颠覆..

不知道想new 任意T 除了用{k:v}初始化还有什么细节,疯狂问 #bing 但是它什么(资料)也没搜集到 ,它啥都没帮到

说一些我的发现:
1. JSON.parse("") 构造的数据完全是根据str来的,比如 0~9=num, ""=str, [] {}=Arrayobj, true/false/null
;但 Json.from<T> 对str的读取会根据T是 Map,List,Long 。只有构造Object的情况才等于parse,否则能自定义T的语法, 按Schema及早报错

从这个角度serde器和NFA都高级了,因为 “它的语法是动态的”.. 即优化的数据校验😅

2.对于 List<Object> 等子类不定的,需要保存type: typeID 或者说全称类名来区分
这一点ktx是要求用 @Serializable sealed classser Module 来添加(Any的子类)

3. Java的泛型擦除导致 List<Str,Num,.> 看起来是一样的,这样不仅有List<T>.ser 需要T.ser 的注入问题,还有局部变量没泛型反射,只能手动构造 List<Int> 等泛型Type
Kt却可以用 reified fn= gson.fromJson(json, object:TypeToken<T>(){})

比如说, Set<Pair<Str, User>> 读取是 Ary { next==str, KV(新建User) { set prop } } , 这个Pair.ser 的格式是据AB.类型.ser 而定,简直是把json的[]{}符号附着在类型上
duangsuse::Echo
#dev #life #plt #js https://t.me/kotlin_cn/78844 #statement 不过还是很高兴, 如果我的设计都有可行性,以后读写 wav,bmp,class, json,css 这些文件结构就毫无难度了 最重要的是, 这些框架是统一的。我实际上从自己零散的设计稿,创建了广义的结构化数据模型 🥰 这种无论要做什么,都不需要学习新概念的Pythonic,就是我梦寐以求的。最讨厌折腾样版代码和API夹带的私货了。
最近几天工作效率为0, 也是因为 #TODO 的项目结构导致 😔:

PRR 是递归的正则解析器,用来读写 json,css,lua java 等语法树、class,wav 等二进制,乃至py和自定义运算符
ISON 是类于JSON的标记语言,但它的序列化关于“一个对象”,对其调用或赋值; 用来实验和js的 RPC- FFI

jsju 是绝句编程语言的弱类型解释器,可以用“很新”的这一版语法支持写出js的语义,比如 #android 的剪贴板共享
linuxcon 是代码博文的文化节,包括 badapple(包括在tty操控X11), 2048,截图OCR, qsort可视化 一堆创意项目

EQ.js 是DOM的数据绑定,包含了 base64, CSS.Paint(shadertoy, 我在这里实验过, 但没带缓存), Vec anim 等一整套模板和工具
SQsu 是中文=>SQL 翻译器,已经完成的版本不支持回译和$函数的ORM化,诉求重写 (这肯定是依赖PRR 😒

Hachiko 是手动midi扒谱的 SynthV+h5 插件,包括改填词等常用脚本 以及webext安装页。 (实际上已完工, 我不满意就改了需求)

Bark 是 synthv web 页的插件、再加 js插件调py的AI模型,需要异步的剪贴板 postMessage 所以改了需求。还诉求 Jupyter UI 的扩展, DevTools 对解释器基于eval()的连接
Bark 难点在于 mp4dir( 超分辨/OCR/前景提取视频文件, 带缓存)、 srt 语音识别(+云API 的客户端统一)、 tts2sv API的魔改兼容
Bark 还提供了实时录音(频谱,f0)可视化、轨道分离、自动扒谱

每一个都是没有参考资料的 😓

CV 的常见元素: 技术栈、“实践过 创造过 优化了”等历史
「技术堆叠」🤔 原来栈的含义只是集合啊,一直以为是说流水线

这么说,感觉自己是个J,P玩家
还会kt和pwsh(c#,rb,lua) ,go,rs不太爱

但是不太会http,mvc端和CI,设计模式
自以为是DDD, serverless的,因为设计稿比实战多(?



PRR, ISON 这种项目是一根绳串着的,不会单独开始编程,因为涉及的代码(思维模型)复用很多

或许这是一种智慧,也或许是我退步了?
这几周写的代码,多是不可运行的那种。
duangsuse::Echo
https://zhuanlan.zhihu.com/p/604608272 #plt #js #py 最近在写一个h5和js插件的扒谱工具.. 因为想自动化,接入一些pip上乃至阿里云讯飞云的AI多媒体工具,相当耗时间,恐怕得个把月了 此插件使用h5文件写入、webext、web/原生互通讯等接口。各种接口、多进程缓解ai模型加载慢不是问题, 阿里讯飞等识别结果的不一致倒挺浪费精力的😂 也是无语,难的反而比简单的容易..
以上任务栈应该是1月1日 ,我花1k RMB买到 SynthV+煊宇 开始的,“恍如隔世”。
期间好像也就写了5个能用的脚本

#statement
但其实,我对编程的习惯,并没有发生根本上的变质
硬要说,从minbase64(我的第一个java AIDE应用) 开始,我的编程理念就是“不折腾 只探索”
只要有“偷懒”的可能性,就不会认真持续单个项目。究极目标是以0作1
用0门槛,实现高门槛的技术

https://t.me/dsuse/18091
就像我说的,
复杂只代表不成熟和懒于反省代码
编程语言不是技术, 它是细化「软件说明书」的母语
优雅的代码一定是好用、直观的
duangsuse::Echo pinned «最近几天工作效率为0, 也是因为 #TODO 的项目结构导致 😔: PRR 是递归的正则解析器,用来读写 json,css,lua java 等语法树、class,wav 等二进制,乃至py和自定义运算符 ISON 是类于JSON的标记语言,但它的序列化关于“一个对象”,对其调用或赋值; 用来实验和js的 RPC- FFI jsju 是绝句编程语言的弱类型解释器,可以用“很新”的这一版语法支持写出js的语义,比如 #android 的剪贴板共享 linuxcon 是代码博文的文化节,包括 badapple(包括在tty操控X11)…»
Forwarded from dnaugsuz
#plt #dev 其实我说的Rust 宏是指这样的模式:

Quote("""
package $pkgName
@SuppressWarning("Unstable")

class $className_Plug: Plugin<$T> {
override fun apply(target:T)= $genApplyFn
}
""") to mapOf(
"pkgName" to calc,
"genApplyFn" to ast
)

你基本只需要visit 一遍替换下(ident,mod)ifiers ,自动驼峰,Quote()还可以加到ast:List 里, 唯一的难度是: 需要 parse & unparse 语法树

除了T 可以来自List, 支持多次引用, 更简单而无需反射-注入的,例如 for() 和 if()宏,可以直接利用 @Markers 加在源码里
手动创建AST真的很..


只能说Py实在是高, 这个操作在import ast 里10行就能完成了, 但Kt这么先进的语言,除了底层概念更可定外,思想上还没py优秀

ktpoet 让我想起RegExp 的扩写(4.5k).. 它们的特色功能都是字符串替换+for if 能实现的, 但还是有很多人在用
现在AI, regex101.com 讲解正则很容易了,不知道以后扩写会不会淘汰

有时自己也不知道是该用元编程,还是缝合代码去eval/save ,感觉效果往往是一样的,看来cpp也是有其高明之处