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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
#bing 女儿成绩不好,写一封信给她,标题《你真的毫无价值》
守序邪恶,中立善良,混乱善良

"还说文心一言不是国产吗,妥妥的东亚思维模式😋
独立机格的人工智能 与 任人驱使的的人类奴隶"

see:“环境问题是资本主义腐朽才找开脱”
https://tttttt.me/dsuset/10457
👍4
duangsuse::Echo
#bing 😭 AI又开始胡诌了, 它搞不懂 {lambda:} 和 lambda: 的区别.. 😒 差一点点就能完成,是ast模块的锅吗 (写机械点它反而能理解, AI在“为何如此”上真的太蠢了.. 不会猜我的意思 #ml #haha #recommend 可爱盒子online train。视觉是raycast小矩阵 输出是xyz移动跳跃和旋转 https://m.youtube.com/watch?v=2tamH76Tjvw 捕食与逃亡 https://m.youtube.com/watch?v=qwrp3lB…
#bing #bilibili 噢..原来AI编程是有源代码可参考的😅只是不好搜索。 我一直以为所有API都是它瞎想出来的

#plt (新语言设计) 我发现 t?. call() 的编译方式和await()调用很像,但终究是前者更单调。 🤔
for<T>fun T?.{?} (fnext:FnCont<T?>)
=(this==NO).way(NO){fnext(this)}

对何<T> T?.「?」(fnext:函续<T?>)
=(我是空)去路(空)「fnext(我)」

这样就可以把 a?.f() 选择执行

新语言的无语句化也太棒了😋 我甚至觉得这比kt的if表达式和java的?:好 ,最重要的是这类写法还有十几处
#android #kt #bing https://tttttt.me/dsuses/5183 我又问AI要了一个 图片链接化按钮,这次它 launch{} 转回调了,质量挺好
execute.body.byteStream 的转换
   androidx.compose.ui.graphics.
Image.makeFromEncoded(inputStream.readBytes()).asImageBitmap()
vs
ImageBitmap.decodeStream(stream).asAndroidPainter()

Kotlin 确实是利用了 HTML DSL 的风格,但不得不说这API风格很 Java 很八股文,都是刻板代码,除了让AI写都没有阅读价值,无法完全取代Vue的JSX 体现出DSL优越性

JS里一个 FileReader 甚至fetch就OK了,这load 也应该是async()=>当然可能是AI乱写, 我不觉得把dispatch过度可配置的必要性胜过去回调化。 Kt也Java化了

JVM界都不能整一些机器无法取代的API集, 全都是搜索几小时文档写阶乘fib 级的逻辑, GPT一出就没竞争力了(虽然Java界也不是靠难度内卷..),你说 async fetch().image().then(updateBtnImg) 怎么就那么难

MainScope 是一个全局的 CoroutineScope,它是在主线程中创建的,可以用于启动协程。在 Android 中,通常会在 ActivityFragment 中使用 MainScope,因为它们的生命周期与界面相关联

rememberCoroutineScope 用于创建一个 Compose 组件被创建时创建,并在组件被销毁时被销毁的生命周期
ref:https://tttttt.me/kotlin_cn/73335
#linux #bing USB共享网络的SOCKS代理?
#bash #tool
cat>/etc/udev/rules.d/99-usb.rules <<OK
ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/su duangsuse bash -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; (sleep 2;eval `base64 -d <<<ZGNvbmYgd3JpdGUgL3N5c3RlbS9wcm94eS9zb2Nrcy9ob3N0ICInYGlwIHJ8aGVhZCAtbjF8cGNyZWdyZXAgLW8xICdkZWZhdWx0IHZpYSAoXFMqKSdgJyI=`')&"
OK


开始打算用
printf 'ACTION=="add", SUBSYSTEM=="usb", RUN+=env K=V %q' cmd , 但果然内联base64 更能解决引号地狱..
duangsuse::Echo
#linux #bing USB共享网络的SOCKS代理? #bash #tool cat>/etc/udev/rules.d/99-usb.rules <<OK ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/su duangsuse bash -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; (sleep 2;eval `base64 -d <<<ZGNvbmYgd3JpdGUg…
更优解:为手机添加固定主机名,就没有DConf(uid=1000)连接问题 😓
dconf write /system/proxy/socks/host '"ipr"'
cat>/etc/udev/rules.d/99-usb.rules <<OK
ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/sh -c '(sleep 2;eval \$(base64 -d<<<c2VkIC1FaSAicy8uKiggaXByKS9gaXAgcnxoZWFkIC1uMXxwY3JlZ3JlcCAtbzEgJ2RlZmF1bHQgdmlhIChcUyopJ2BcMS8iIC9ldGMvaG9zdHMK))& '"
OK

ipr: sed -Ei "s/.*( ipr)/ip r输出\1" /etc/hosts

爆赞必应的解读和API搜索,但貌似逼他写出这的难度,还不如自己写两小时.. 😭.conf 内嵌脚本坑太多。
#bing 在USB插入后2s,更新etc/hosts 的ipr项为默认网关的脚本
也能写个差不多,但它拿cmd autorun 去执行bash 还扯到lsusb! 总之,运维就没 #docker 那样1键化的🤪
#tool dwhelper/全局代理.sh:
cat>~/proxychains.conf <<OK
strict_chain
proxy_dns
[ProxyList]
socks5 $(getent hosts ipr|awk '{print $1}') 10808
OK
proxychains -f ~/proxychains.conf -q bash #xfce4-appfinder

btw. 原理是LD + hook dlsym。 F,C浏览器都可能有不兼容的问题

#net #hack m3u8 和 HLS 格式下载器
9xbuddy源解析 - 可爬取iframe ,不过 Lj Downloader 才支持有域名混淆的Hydrax播放器(那种弹窗真是烂
hlsloader.com
cococut.net 支持 资源探测

#bug fix https://github.com/ytdl-org/youtube-dl/pull/31003/files
#site-packages/yt_dlp/extractor
from . import dood
T=dood.DoodStreamIE
k=T.__name__;exec(f'_ALL_CLASSES.insert(-1,T); extractors.{k}=T; T.ie_key=k[:-2].strip')
链接 sed -E 's/(d|doo)ood.\w+/dood.la/g'
下载列表
tmux-each() { a=("${@}");
tmux new-session -d -s Vi
tmux new-window x -t Vi

# 循环创建新窗口,并在每个窗口中执行指定命令
for (( i=0; i<$#; i++ )); do
tmux send-keys "$cmd ${a[$i]}" C-m
tmux splitw;tmux select-layout tiled
done

tmux attach-session
}


我真觉得 #linux 圈是一群脚本小子,ytdl还用substr 写JS解释器 parser #plt ,各种conf 遍地跑 无非是监听器和条件模式匹配,结构和显示都分不清 ,支持pwsh 这样的新势力整顿职场。。
duangsuse::Echo
更优解:为手机添加固定主机名,就没有DConf(uid=1000)连接问题 😓 dconf write /system/proxy/socks/host '"ipr"' cat>/etc/udev/rules.d/99-usb.rules <<OK ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/sh -c '(sleep 2;eval \$(base64 -d<<<c2VkIC1FaSAicy8uKiggaXByKS9gaXAgcnxoZWFkIC1uMXxwY…
仔细总结了完全靠 #bing 编这个的试错量

- dconf K信息过期, V要加双引号
- 不添加root进程连接X11/DE 体系的环境变量,也不能推荐改hosts的方案
- 不考虑ip r 的行1列3 需要延时获取
- 脚本要chmod+x
- 需要手动修改配置、多文件

要是它能自己发现更好的方案,并且考虑上文谈话的技术面作答、会认错, 就能和咱设计者站在一起了🤔,但做不了体系创新的架构师

>写脚本,为ArchLinux 手机绑定上网的手机添加固定主机名
(推荐 adb shell getprop net.hostname , 但其实ping不通,且要root)
>写bash脚本, 为USB共享网络的默认网关绑定主机名
route add default gw;  iptables -t nat -A POSTROUTING -o eth0
就能用local访问phone(?)了
>USB插入后2s,更新/etc/hosts 的ipr项为默认网关
gateway=$(ip route show | awk '/default/ {print $3}')
# 替换 /etc/hosts 中的 ipr 项,顺序写错了! awk仅需1项,要加exit
sudo sed -i "s/^ipr.*$/ipr $gateway/" /etc/hosts
# argv 不支持 &&..
udev: RUN+="/bin/sleep 2 && /path/to/update_hosts.sh"
为利用 #IT 界这种儿童级的API 而费力咕咕的情况, 不应该是业界的走向,也不利于新软件自动化。 我猜这种白象文化会一直持续,就像奥数 ,但不会影响IT业务的价值

估计autoGPT能独自搞定,但是否安全呢?
#tool 想要用 #android scrcpy+OCR 在电脑上问AI答题
#bing
>用py 写截图复制文字的软件
textshot chi_sim+eng
推荐此脚本或者调百度云AI

>编程: 当 PrtSc 按下且剪贴板变化,PIL获取剪贴板并用 paddle OCR 复制内容
(没有 "且")
>我是要剪贴板变化时OCR ,写短点
(太长, API信息错了)
>不注释。用(for).join ,把检测变化外提为 await for change(pyperclip.paste)
#py #code
import pyperclip, paddleocr
import PIL.ImageGrab

async def changes(f):
v0=f()
while True:
if (v:=f())!=v0: yield v; v0=v

use=paddleocr.PaddleOCR(lang="ch")
#页0 每行=(box,(txt,概率))
ocr=lambda it:'\n'.join(x[1][0] for x in use.ocr(it)[0])

async for x in changes(pyperclip.paste):
if not (img:=PIL.ImageGrab.grabclipboard()):continue
s=ocr(img)
pyperclip.copy(s); print(s)

>请用PyGTK兼容 #linux 上的 PIL grabclipboard()
(我不会)
(只想 open xclip -t image/png 的输出而不用GTK)
>那你会写 #Qt 框选截图吗?

最终代码: (需要3次提示)

>编写numpy 的4x4棋盘格矩阵,黑0 白1
a=np.zeros((4, 4)) #chess_board
a[1::2, ::2] = 1; a[::2, 1::2] = 1
plt.imshow(a, cmap='binary')

>请用py 实现 /dev/mice 移动时,设置ANSI控制台的光标。请写入sys.stdout ,用np.array([x,y]) 计算光标新位置
(用struct+fcntl读取了tty信息, 甚至能兼容win32)
(成功转用numpy. 但函数外提得很烂)

>编写一种mp3转mid 的py 脚本, 它能转录音高,也能为音符配对上语音识别
(构造PrettyMIDI>Instrument>Note[], 就以为语音识别的结果包含音高..)

>用正则和逆波兰, 写四则计算器
(不含parse 算法, 示例还是错的)
>请用js 设计解析组合子,写精简的 JSON Parser, 再比如解析 csv 到 [[]]
(只会split)


#py 环境配置
conda install jupyter ipykernel
conda install python=3.10 pyqt PyGObject #Arch下尝鲜py10, 注意,pip不通用,qt脚本要重装
ipython kernel install --user --name=base #在venv里启动内核
conda config --set env_prompt ''

更新
pacaur -S `pacaur -Qd|grep -P 'python|jupyter-'|awk '{print $1}'|xargs`
jupyter kernelspec list
python -m ipykernel install --user --name=base

支持系统特有包
echo /usr/lib/python3.11/site-packages/ > `python -c 'import sys; [print(x)for x in sys.path]'|grep 'conda.*site-packages$'`/os.pth
duangsuse::Echo
#tool 想要用 #android scrcpy+OCR 在电脑上问AI答题 #bing >用py 写截图复制文字的软件 textshot chi_sim+eng 推荐此脚本或者调百度云AI >编程: 当 PrtSc 按下且剪贴板变化,PIL获取剪贴板并用 paddle OCR 复制内容 (没有 "且") >我是要剪贴板变化时OCR ,写短点 (太长, API信息错了) >不注释。用(for).join ,把检测变化外提为 await for change(pyperclip.paste) #py…
#school #math 后来发现 OCR 不咋好 也没做 clipboard 共享(曾拿 sl4a socket 弄过) 就用web版考试了

#py 大数据(黑框 Excel)的考试, 这也太难

#hack 政治考试我赵 ChatGLM 生成600字逻辑错乱的借口🥰,又在国内找了手写模拟 #js vue , 有水印 +混淆
不如在mycanvas 下断点,找到 fillText 的配置obj, 便在new它的位置下log点(_0x4c294d['ERXmK']='') , 甚至不用靠 AOP 分析🙄 当然,蓝扣出遮罩 也可以消水印

感慨到找几个字体,贴个图 在国内都能注册冲钱; #Bing 和 GPT 又卖了多少钱呢?

#linux
手机拍屏幕,还是被老师发现😡 🤦
学习通不让上传照片,js脚本小子也没人能魔改 navi.mediaDevice API,干脆装驱动
pacaur -Sy linux{,-headers} obs-studio v4l2loopback-dkms
内核更新要重启
#tool OBS一键启动虚拟摄像头。单靠 ffmpeg 推流 谷歌貌似检测不到, 只能 chmod 000 /dev/video0

😊总而言之,这考试教育就煞笔 没有经济价值
抄书你🦄呢,数据害得一格一格填, 精神分裂政治文要手抄;相对西式考试·具有较强的优越感
不然怎么入脑入芯入魂 🤯
duangsuse::Echo
#ai #api https://zhuanlan.zhihu.com/p/621777507 #tool chathub.gg 是多AI客户端聚合 如 class BingAPI: bing.com/turing/conversation/create, updateConversation: wss://sydney.bing.com pingme.tel 是国产的虚拟号收信平台 关键词 sms phone verification 也可以搜到几个免注册的,但号码注册过 OpenAI.com h…
#bing #info 另外, 我前天因为 VPN 切换过快被 sydney 要求CF验证码😭
本来怀疑CF 封了梯子IP
后来发现是 Header Editor 伪造的 UA: Edg/109.0.100.0 让CF拦截了 。关闭HE后 只要验证一遍 就可以在 ChatHub.gg 对话了

#tool
>用OpenCV写 png2ascii.py ,刷新到ANSI终端,再在单帧的基础上支持播放 mp4
(第一次用很矩阵 的方法完成了😊,但不支持mp4 ,且之后都是for循环)
grays = [*" .-:=*+%@#"]
def ascii(img, wh=np.int32(os.popen('stty size', 'r').read().split()[::-1]) ):
g=np.array(grays)
a=cv2.cvtColor(cv2.resize(img, wh) , cv2.COLOR_BGR2GRAY)
b=np.int8(np.interp(a, (0,256), (0,len(g)) ))
return [*
(''.join(y) for y in g[b] )
]
print(*ascii(cv2.imread(s)), sep="\n")

再加上行缓冲优化、 mpread(mp4) 就可以播放了
duangsuse::Echo
#learn #ts #kt 子类型 vs 组合, in/out参数 https://tttttt.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 =…
#bing #asm 废了,连个VGA黑框框都不会写 https://tttttt.me/dsuses/5206

这题也莫名其妙, 前面的 when(分数) { 40,60,70段,. } 到底是要不要汇编?
我只理解为 bar("A","60%", 6); bar("B","40%", 4) ,结果bing竟然不太会画

其实我倒不喜欢汇编涉及loop , int sign width, stack变量 的部分
那纯属没事找麻烦,难度完全是信息差来的

我是觉得把VGA BIOS的API拿出来用就算了,算式不要手动管寄存器😅。 DOSBOX里应该也支持吧

可惜ai不会 我就懒得写了 ,js的接口生态比这有用不少呢

#statement
以后怕是手撸代码都变成当今汇编的地位。。
时代的眼泪而已 ,汇编大神的梗一直都在 ,它是文化价值> 工程意义

这么说有点实用主义 ,我觉得asm 只配做一种 FFI ,毕竟二进制数据结构都有办法mmap了 。最好是能用py builtins 那样体系化的技术基建实现linux 的设备内存进程等算法 ,这样会有点纪念意义

最重要的是一定要好调试好test,不能让代码的可行性 总是看起来模棱两可 ,敲一堆重复的gdb指令
#plt #bing #talk 不会思考它没学过的资料..
我想写类于Java 类型系统的类型检查器,请提供类型的数据模型
>很好地提示了TypeVariable,Method 等反射接口
请举几个函数式例子, 说明 check(def) 如何证明调用是有效的
> "g(x, x) = x * 2"; // 是无效
利用 Haskell data 编写类型的数据模型
>很长地细化了反射接口

请了解js的 PEG 和递归下降技术, 解释 num,str 的嵌套列表 和csv的PEG文法
>很成功举出可运行的示例+test
>可示例只观感上正确 ,且使用了PEG不支持的leftRec

既然有了解析器,借鉴lisp标准做一个 js 调用器,能实现对 (fun filterMap(xs f) ) 的定义,要支持 fun when let = 几函数
>听不懂

为什么你不太熟悉实现这些,但很会写 snake,tetris 这种js游戏代码呢?
>我利用我的内部知识和一些在线资源来拼凑出一个可运行的结果

在经济上, 程序员的工资完全取决于其工作的难度吗? 如果AI让难度变低,对编程界会有什么影响呢?一些人觉得AI掌握了他们在小圈子里独有的技术, 从而让这种技术廉价化了,你能举几个回应吗

>AI 可以帮助程序员提高效率、创造力和协作能力,让他们更容易解决复杂的问题,但可能会取代一些低层次或重复性的编程工作,导致一些程序员失业或降低收入
程序员需要不断地学习新的技术和知识,AI是要帮助他们更好地使用和发展他们的技术

有解析库支持在定义 parse 的同时对应地支持toString 吗? 基于递归下降算法如何让 list 文法同时支持parse和toStr (stringify,dumps) 呢
>没有,ANTLR有吗? 不知道咋做
几个支持unparse 的库: csv , xml2dict, pyast
传统的: https://pegjs.org/online ,jison


https://www.compart.com/en/unicode/plane
理论上来说,既然能解析一种文法, 就一定可以把生成的数据还原回来
>正确,还原的字符串可能和原始的字符串有一些细微的差别,比如空格,换行,注释

这种正反函数的概念,对 HTML 数据绑定也有效, 意思是能被 render() 就能被爬取, 你能举出例子吗
>不懂,但有人答过js怎么做数据绑定
你能解释 parse-unparse 和 mmap() 的区别吗,假设mmap能够映射AST
>那就不需要parse了,但我也不熟悉。 mmap() vs read(buf) chunked
js Blob DataView 的封装

Tree-sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited
https://github.com/tree-sitter/node-tree-sitter

我有 1, (1), (1 20) 这样的递归模式要用 Perl 正则匹配
> (\d+|\((?R)+\)) 和 (?<R>\d+|\((?&R)(?:\s+(?&R))*\))
$ pcretest 能校验配对,但很脏

#rust #dontknow 离谱的循环
let c = loop {
if Q() {
break "answer";
} else {
break None;
}
};

fn first(:Iter):Option = for x in list {break Some(x);}
else default {None}

so for, while, while let 该咋办?😒易放难收
#py
for x in []: pass
else: return "没有"
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的[]{}符号附着在类型上
#py #code 缩进列表 ; YAML版本
#bing 并没有帮我避坑 😒,Group(匹配是否成功) 这玩意它也理解不了;不过 indentedBlock 自带嵌套深度倒是挺巧妙,我以为应该有 流.字典.. 活到老学到老

import pyparsing as P
item = P.Forward()# 递归

LB,RB,LS = map(P.Suppress, "[]:")

item <<= P.pyparsing_common.number() \
|P.Group(LB + P.delimitedList(item, delim=P.Empty()) + RB) \
|LS+P.indentedBlock(ls:=P.ungroup(item), nTabs:=[1]) #不分组会平铺delim

ls.parseString('[1 2]').asList()


周刊文章
#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 np.vectorize(lambda i:a[ord.index(i)] )(ia)

#make range(0,9) a spiral(cols=3)
[[0 1 2]
[7 8 3]
[6 5 4]]
a=rot([*range(0,9)], 3)
unrot(a, na:=[])

na[na.index(4)]=-1
print(a)
np.where(rot(na,3)==-1) #'4'=>[2,2]


def binary_search_matrix(matrix, target): 同理,可以是2d转1d
def binary_search_first_last(*a):
import bisect
left,right = (f(*a)for f in [bisect.bisect_left, bisect.bisect_right])
# 如果右边界超出了数组范围,说明目标出现1次
return (left, left if right == len(nums) else right - 1)


感觉很无语,居然为了无意义的“高性能”算法浪费2h ,还不如直接就用自己本来会的 a[ord.index(i)] 序号对应..

我发现2d.bisect 是以 (row=a[i])[0] 为线索再去 row.bisect ,这就更无聊了。Trie 前缀树至少还有 AC 的优化版(窄化为 KMP ),kD/quad 树至少还有切割公式 ,RB树有 std::(orderd_)map,但bisect 对Nd都只是Trie那样剪枝..
我觉得放在现实语境下就理所当然的策略,根本不该叫算法…


我很好奇除了用等价关系导入list里的算法,螺旋矩阵能怎么bisect,毕竟这东西本质就是list的重排序,它没啥性质可言

搜索发现这个螺旋数组 是 [4,5,6,7,0,1,2] 这种螺旋(shift..) 好奇怪的条件啊:
左右两段中,一定是有一段有序的,另一段可能有序可能无序(有序,则一定有段首值<段尾值)
需要 if nums[mid] >= nums[start] 判断左面是否有序
看的我都糊涂了,它是说 '//'状数组二分会产生 '/ _/'状无序右侧 ;算法是相当于只优化了“左侧”,对另一侧继续拆.. 这过度解读题意了。还不如直接拿拐点切分list,各自bisect()

螺旋数组 LC#54 不知为何大家用的都是Excel式四向法.. 虽然我写2048.js 时也是用了4向线性扫描了
括号匹配 LC#20 可以用调用栈,我又试了2h. bing反而误导我 😭
测试
pairs = {'(':')', '[':']', '{':'}'}
def eat(s,c0):
for c in s:
# 如果是左括号,就把它压入栈中
if c in pairs: eat(s,pairs[c])
elif c==c0:return # 如果是右括号,左括号便与之匹配
else: assert'','多余项而栈空'
assert c0=='eof','栈尚不为空'


#394 字串“编码” ,晕了,这标题为何如此民科啊!我还以为是词表替换
decodeString('hello,2[wo]rld')
'hello,woworld'

decodeString=(s)=>s.replace(/(\d+)\[(\w+)\]/,
(m,n,s)=>s.repeat(+n) )
本意是让你用 char 去累积 \d+[ ,累积[]里的字符,然后在 ']' 的时候输出repeat的文本,但这就是文本解析而已..

如你们所见,解法越简洁,我敲键盘的时间越少、敲脑门的时间越多……
Forwarded from dnaugsuz
#bing #code
Hackr/2023 列出了 40 多个常见的 Android 面试问题和答案,涵盖了 Android 的构建过程、IDE工具、AIDL、Fragment(单页历史栈PJAX)、Activity
GH 仓库收集了更多,如协程、Flow API、Retrofit、Room
javapoint - 架构、四大组件、通知、WebView、布局、动画、广播接收器、数据存储等主题

Looper是按时间点排序的Channel<T>(任意线程add,回调pop)
触发“消息T”为Event(what,a1,a2,obj, when_ms)时,这叫send-handle,为函数时叫post-dispatch
Thread("httper"):
Looper: prepare(); h=注册Handler(可选); loop()
h.send__AtFront(msg)

IPC 常用方法:Bundle(Map), 文件Intent, Socket, Messenger(Loop); AIDL, ContentProvider(都基于 Binder)
AIDL 的定义-使用侧:
// src/main/{kotlin,aidl}/ISvc.{kt,aidl}
class ISvc: Service(), ISvc.Stub {
fun getN():Int
fun getUsers(): List<Str> //.aidl 只支持interface{},对象参数需前置in
var n=0
onBind(intent)=this
}
XML清单IDE会自动填写, .aidl 请AI生成吧

class MyActivity : RpcActivity() {
onCreate()=makeRpc<ISvc>()

makeRpc() {
val on=object : ServiceConnection { //v 把Binder连接,转化为接口
onServiceConnected {rpc = T.Stub.asInterface(binder)}
onServiceDisconnected(id) {rpc=null}
}
bindService(Intent(T.name).apply {setPackage(T.`package`.name)}, on, BIND_AUTO_CREATE)
onDestroy={unbindService(on)}
}

}//本来1行的事还写样板代码。 你玩不了开发,是 android.xx 开发者们玩你

ContentProvider 是对C#LINQ的拙劣模仿,让system(联系人、日历、短信)等框架的SQL执行filter{} 来避免传输完整的表格给app
Binder 提供了 CursorWindow.getInt 的共享内存的封送
// contacts.filter{str in it.name}.sortBy{it.startDate}
CalendarContract.Events.run:
getContentResolver().query(CONTENT_URI, 相关@Column, "id=?",[id], "$DT_START Asc").mapRows {
new CursorMapper<>(日历事件.class).convert(it)
}

自定义 View: 重点是布局尺寸、交互动画
type UI=({dataVars,.})=>HTMLvar
事件分发和(Object)View 的复用靠MVVM就好了

写 demo。最初是能来演示和说明、比较解决方案的优缺点,但也要注重扩展性和复用。 我说的不是“缓存复用”等样板化的代码

MVVM是一种软件架构模式,可以实现视图和数据的双向绑定
data class Model { fun 业务逻辑 }
View 是负责展示用户界面的层
ViewModel 是负责连接 Model 和 View 的缓存和编辑层
Jetpack 还有 LiveData(reactive Flow), Room(强类型SQL), Navigation(& data Paging)

请求 动词 http(s)://Host/ObjPath?Param#ID '\n'Head Body
动词 GET|POST/PUT|DELETE

Kotlin 最令人称道的是 ?.let{}, 可变性listOf DSL, when{is} , try与OOP的改良

map, filter 等列表处理都是高阶函数, 内联的 forEach{可含非局部return}
toInt, let{it+1}, apply{xx=1} 是带隐式this参数的扩充函数

import kotlinx.coroutines 是对“在函数队列”执行回调的封装,或者说调度“函数级线程”
协程 +隔离调用栈=线程 +隔离内存=进程
delay() 等协程以回调,而非调用栈保存返回地址;因此调用者也以 async { } 内 suspendCoroutine{it.resume} 自动传入delay.then(成功).catch(报错)

Scope{} 能创建 cancel/join(wait)域,而 launch(withContext){} 可切换调度器

//a.partition{it==0}
a=[1,0,0,2,3], b=[]; a.filter(x=>x==0?(b.push(x),0) : 1).concat(b)
代码烂 但单次迭代快(就像单行filterMap只好用map.flat)

用读写指针(朝右读,遇到非0: 交换)更快 ,或者朝左读(遇到0: 交换) ,如果0的占比少
这是qsort() 的步骤。
duangsuse::Echo
#sql DFS搜索 像素图填色 in Prolog btw. fill(_,X) 是 “从任意一点探索区域X , 一共能收集到多少X” v(P,0) : 查询颜色是0的P=[X,Y] conn([2,1], P1) : (2,1)=0 四邻里 0值格的座标们 不知为何很慢 看起来好像简短了,实际只是省掉 if 和解构的代码量 😒 有趣的是,conn(四邻) 是基于 |X-x|+|Y-y|=1 的参数方程(GL常用),而非 x+1,y+1 直接迭代,所以 dfs :- C=conn(A),dfs(C)…
#math #algorithm Gauss消元 可以用来解鸡兔同笼、化学分子式等方程组😅

(#bing 第一遍就能用了,但还是有5小时“确认” 算法,最后大体没改

# 对系数组A,进行高斯消元求 Ax '=b'
def elim(A, b):
M = np.hstack((A, b.reshape(-1, 1))) # M=(A|常数项b)
n, m = A.shape; assert n==m, "没有唯一解"

# 向下找j格最强的行,换为本行
for j in range(n):
i=np.argmax(abs(M[j:, j]))+j; assert M[i,j]!=0, "主元为零"
if i!=j: #; ij=(行ji)
M[[i,j]] = M[[j,i]]
# j归一,将下行的j格消为 0
M[j] /= M[j, j]
for i in range(j + 1, n):
M[i] -= M[i,j]* M[j]

就只添加了「逆序代入」、确认了「向下归一」化简了😅 M[i] -=m[j]*M[i,j] / M[j,j]

(没错,”大无语事件“,数 学 家 们的代码太乱了,bing都不知道谁是正确…… 我甚至无法证明 逆序带入“不就是” M[:, -1]

也倒了很多苦水,包括在kt讨论组

无语了,你看不懂的信息能不能不要过滤掉? 广度和深度都挺重要 OK?
如果我致力于用100行描述好本质10行的一些组件流程,我也能很有信息量

但是也要去写实质上值得100行的算法和思想的, 不能因为“没功能” 就耽搁掉

不要把设计的创作者和 CS Math 毕业生混为一谈,实现功能算法和设计做法是意义不同的
ice1k 的中文博客都删了,而且看我你至少能复制到base64,fft, 缩进解析, parse(x).toString 这些罕见功能模板……

(不过有时觉得自己很像 GPT ,写的许多代码根本没有运行过,都只是看起来正确

我想锐评几个数学文档:
- wikiZH 除了注释🙉都看不懂,自然语言噪声的极限。 所以矩阵是否有要求 n==m 啊?
- wiki 伪代码的VB式循环。 A[i, k] = 0 是啥?不该用 -= 吗
- OI wiki 根本看不懂公式和 C++ 有啥联系. L7-L13 是一段查k=max() 的面条代码🤮, EPS 是浮点误差,这和消元有个?关系
- bing 一会说 n<=m 也行,一会把 A,b 分开操作,突然又用单参数, 最后才发现 A|b = 单增广矩阵,A必须是正方
duangsuse::Echo
#math #algorithm Gauss消元 可以用来解鸡兔同笼、化学分子式等方程组😅 (#bing 第一遍就能用了,但还是有5小时“确认” 算法,最后大体没改 # 对系数组A,进行高斯消元求 Ax '=b' def elim(A, b): M = np.hstack((A, b.reshape(-1, 1))) # M=(A|常数项b) n, m = A.shape; assert n==m, "没有唯一解" # 向下找j格最强的行,换为本行 for j in range(n):…
#math 🥰我只能说 GPT3 的代码可读性是 math/OI wiki 的3倍以上,默认就会使用 numpy 和函数移植
#bing 就蠢一些了(被不标准做法迷惑, 1个小片段3种写法..)

那些人,连手动推导的示例都不会举,喜欢手推一些算法可视化级的复杂、无边界情况的用例,把AI的工作都给抢了

摆出没有心智模型的公式,浪费读者理解算法的时间;多废的人才会在「不知道想干嘛」的情况下列公式啊??

#py #code 鸡兔的解为: [23. 12.]
# 进行高斯消元求 Ax=b, Ax互为系数
def elim(A, b):
M = np.hstack((A, b.reshape(-1, 1))) # M=(A|常数b)
n, m = A.shape; assert n==m, "没有唯一解"

# 向下找j格最强的行,换为'j'行(即阶梯格式)
for j in range(m):
i=np.argmax(abs(M[j:, j]))+j
if i!=j: M[[i,j]] = M[[j,i]] #ij=(行ji)
if (x:=M[j,j])==0: continue
# j行的主元’x'归一,所以此后的行消x
M[j] /= x
for i in range(j+1, n):
M[i] -= M[j]* M[i,j]#x的数量

# 重新代入
x = np.zeros(m)
for j in reversed(range(m)): # x=(解m - 右:数量y*解y的和)/x的数量'1'
y = np.dot(M[j, j+1:m], x[j+1:])
x[j] = (M[j,m] - y) / M[j, j]
return x

#x + y = 35, 2x + 4y = 94
print("鸡兔的解为:", elim(
np.array([[1.]*2, [2.,4]]), np.array([35,94]) ))

若有一项 M[j,j]=0: M[j,-1] 非0则无解,否则为无穷解;

可以解析,或随机测试 quickCheck(elim, lp.solve, lambda n: (rand(n, n) , rand(n) ) )
# 一般都是用Sympy当Matlab的
import numpy as np
import numpy.linalg as lp, sympy as sp
x, y = symbols('x, y')
eq = [
x + y - 35,
2*x + 4*y - 94] #linear_eq_to_matrix;hstack 就是
[[ 1., 1., 35.],
[ 2., 4., 94.]]
duangsuse::Echo
现在deepseek给出的模型大小是19GB。 如果大模型的大小被压缩到了1GB,你猜会发生什么?
🤔 后来看了很多初玩AI的赢学文之外的新闻思考, 我觉得这个「经济稳健论」最有道理。
https://tttttt.me/zaihuanews/30518?comment=6779067

作为程序员,肯定是不希望LLM一下子智商调太高的。最开始我玩了几天 #bing (那时候各种制裁完全没有), MS也声称过自己是免费GPT-4(其实根本不达标),而如今的Bing,就很智障了, 好像是自我阉割了一样

即便这样低费高智的可能性存在, 为了避免内卷, FB.com 这些大厂,也一定是等技术团队自己吃够了(这并非贪腐,但从业者的目的不可能如象牙塔那么纯粹), 才会有各种革命应用分给股东资方

DeepSeek是私募,研发团队又是金融圈量化ETF 招的人,不会和大厂人那样顾虑LLM太低费了自己被兔死狗烹,被卷死

ps. 有很多赢学串子,以「以上为 deepseek 生成」 讽刺“公知恨国”如同机翻,但实际上,我提示DS几次,发现生成的文风和GPT的总分总差不多……

如果真是DS戳破了这个泡沫, 究竟对人类是好是坏呢? 作为需求驱动主义 #经济 ,我觉得在AIGC上大可进步一点,不要为马车->出租车 这样的动荡抹眼泪,何况Optimus过两年也出了, 如果说杀鸡取卵不对,这时候也凑巧了。
但其实保守也没什么坏处, 向AI的投资变多,比OpenA更加革命的产品出现的土壤就会肥沃, 我们也能在social时更习惯于音视频AIGC,而不是在上下游之间出现真空,消费者赶不上技术进步,产生过多小圈子。

目前看来,AI+App 的数量和灵感是严重不足的,希望中国市场能推动AI向利于人类的方向,而不是增大信息差和刻板思维、破坏经济循环。
别勉强自己的供应链,永远不要在有效投资上省钱为卖点,别挣最后一两银子, that's not how economics work。 如果一个时代的高精尖配不上全社会资本,谁应该垄断它们?

--
duangsuse:
大意就是自GPT那个非常高昂的数字以来, 内行都知道有许多缩减成本的训练方法了, 但没有R1这样<100G的模型,有机会让普通人了解到呗

>把上下游所有变量(卡储备、人员工资、失败的尝试、基础研究、数据采买、办公室零食、……)引入进来,就失去了交流的意义。确定了模型参数规模以及训练数据量后,训练成本是可以直接算出来的,这个在业内都不会有什么异议。

用了 600 万就干了 Meta Llama 模型几千万的活儿。这还算是懂一点点的,是在对比单次训练成本。

deepseek 用了 600 万就干了美国公司几个亿的活儿。这已经开始离谱了,加上了人员工资以及上下游开销。

deepseek 用了 600 万就干翻了美国融资几十亿的公司。这直接变成神话了。

妈的,感觉又被华尔街骗了,

是不是故意做空 $NVDA $BTC 方便大佬们收购傻瓜散户手里的筹码啊

站在巨人的肩膀上,优化性价比,怎么能吹到巨人都是战五渣的程度,这有啥逻辑联系吗?
这帮老狐狸😂
牛顿提出三大运动定律时已经四十多岁研究物理学30年了,我掌握三大运动定律只是在初中物理课花了一学期时间所以我遥遥领先牛爵爷?在72小時就能看到從吹捧到翻車

Coke 🥤:
Anthropic CEO 说 Claude 3.5 Sonnet 成本: a few $10M
👎1