#py #tool 浏览器缓存 图片 爬虫
#code
你可以逐文件夹拼图: #bash 各种相对路径真的吐了
python a.py 'x\.com' 200 ~/.cache/chromium/Default/Cache/Cache_Data/*
python imgdump.py 'www' 100 `ls --sort time --reverse ~/.cache/chromium/Default/Cache/Cache_Data/*`
#code
import re,struct, os
def ls_cache(urlRegex, kbSizeMin, *cache_files):
key_marker = struct.pack('Q', 0xf4fa6f45970d41d8)
def deco(b):
# header is 8+4+4:keylen+4+ bytes[keylen]
key_len = struct.unpack('I', b[12:16])[0]+4
key = b[20:20+key_len].decode()
body = b[20+key_len:b.find(key_marker)]
if len(body)>kbSizeMin*1024 and re.search(urlRegex,key):
return mstrip(100,re.sub('[\x00/]','', key)),body
mapFiles(cache_files,deco)
mstrip=lambda n,s: s if len(s)<n else f"{s[:n//2-2 -2]}..{s[n//2:]}"
def mapFiles(a, fOut):
os.system('rm -rf png;mkdir png')
for i,file in enumerate(a):
with open(file, 'rb') as f:
if f1:=fOut(f.read()):
k,v=f1
with open(f'png/{i}-{k}', 'wb+') as out_f:out_f.write(v)
if __name__ == '__main__':
import fire
fire.Fire(ls_cache)
你可以逐文件夹拼图: #bash 各种相对路径真的吐了
vcat() { cd $1;a=`find *|sort -n|xargs printf "-i %s\n"`最开始考虑了 https://t.me/dsuses/5305 和binwalk但太慢
ffmpeg $a -filter_complex vstack=inputs=`wc -l <<<$a` ../$1.png ;cd -;}
for f in `ls`;do vcat $f;done
for f in find * -type d; do thunar -B $f/*; done #按文件夹 批量重命名
cp-id() { i=1; for x in "$@"; do X=$(basename "$x"); cp "$x" "${i}-${X%.*}.${X##*.}"; i=$((i+1)); done; }
mkdir a tar
cp `grep 'x.com' -FRl ~/.cache/chromium/Default/Cache/|find -size +200k` tar
binwalk -C a -D image:png tar/*
find a/ -name '*.png'|nl
Telegram
duangsues.is_a? SaltedFish
To retrieve the N most recent images from the Chrome cache in Linux that are greater than 100KB in size using Python, you can use the following script. This script uses the sqlite3 library to access Chrome's cache database. Please note that accessing the…
#ai #tool #algorithm 对比
我比较了一下三个AI免费码农,发现还是bing稍微有点能力
但实际上还是不如手写的(只需replace(/RE/)1次)可能我问的太杂了,GPT基建还任重道远啊
我也是说可以直接compile() 一个字典来分词
这样真的很慢
不过jspy界也确实是天上地下,很多人不会正则只知AC
这样GPT5应该就能代替程序员写全栈了
> 正则不太适合做这个业务,还是用原汁原味AC自动机,再优化的话研究下GPT的token怎么搞的
GPT确实要涉及到NLP。BERT,LSTM 什么的seq2seq推理技术
它应该不是一个按关键词或简单的权重图来分
只是一个计费手段而已,好像也没法省token
非AI的算法往往更快 也不靠GPU
都是应用层的程序员太垃圾,才给人一种算法很慢的错觉
unity内核的开发者和jspy人根本不是一个级别, 学信号处理和数控的都是魔鬼
>做GPT接入的时候,又套了层向量数据库和Java的注解开关,以优化上下文接口的流量
https://cloud.tencent.com/developer/article/2356967
搜了一下,发现VecDB是用于Fine-tune的知识库文件吧,
通过 openai.Embedding API 可以查找问题相似度,类似人脸匹配,从而实现领域术语prompt
我还以为是要webhook让openai反查的,原来只是prompt工程
我比较了一下三个AI免费码农,发现还是bing稍微有点能力
但实际上还是不如手写的(只需replace(/RE/)1次)可能我问的太杂了,GPT基建还任重道远啊
我也是说可以直接compile() 一个字典来分词
dicts=Object.entries({你:"我", 好:"坏" })
dicts.reduce((s, [A,B])=> s.replace(A,B), "你好" )
这样真的很慢
不过jspy界也确实是天上地下,很多人不会正则只知AC
请编写关键词替换.js
let [str, hint]=subs("这群老 板指鼠为鸭,简直是黄 世 仁" )
dicts=[[{黑:"白", 鼠:"鸭"}, "请勿造谣呦"], [{黄世仁:"人民公仆", 老板:"周扒皮"}, "用词不合社会主义"] ]
去空格匹配,期待 hint=="请勿造谣呦\n用词不合社会主义"
若无匹配回null
这样GPT5应该就能代替程序员写全栈了
> 正则不太适合做这个业务,还是用原汁原味AC自动机,再优化的话研究下GPT的token怎么搞的
GPT确实要涉及到NLP。BERT,LSTM 什么的seq2seq推理技术
它应该不是一个按关键词或简单的权重图来分
只是一个计费手段而已,好像也没法省token
非AI的算法往往更快 也不靠GPU
都是应用层的程序员太垃圾,才给人一种算法很慢的错觉
unity内核的开发者和jspy人根本不是一个级别, 学信号处理和数控的都是魔鬼
>做GPT接入的时候,又套了层向量数据库和Java的注解开关,以优化上下文接口的流量
https://cloud.tencent.com/developer/article/2356967
搜了一下,发现VecDB是用于Fine-tune的知识库文件吧,
通过 openai.Embedding API 可以查找问题相似度,类似人脸匹配,从而实现领域术语prompt
我还以为是要webhook让openai反查的,原来只是prompt工程
#plt #recommend 写了一个类型推导科普
😅 完了,感觉我都要变 yinwang.org 了
他10年前的抱怨我全都有,而且我比他还少点实践
https://gist.github.com/duangsuse/8fa4ae8c627e5c3c6044522a84ccebf4
还好好搜了一下各种中文blog
没找到好的内容,草
明明各种大学都有开编译原理依照 static typed
做compiler前端的是吃白饭的么? 都在教一些又过时又get不到重点的东西一样
这kt编译期显然不是古早的 Matcher() 那个级别
使用Var()来收集类型信息是 https://tomstu.art/hello-declarative-world 里就有的 unification ,但那个支持dfs,比如解X+Y=1。kt可以直接拟合(fit)
现在的React也开始习惯于「变量作为值」了,不过用Signal()深赋值取代diff的还是去年,发展得挺慢
https://justinpombrio.net/2021/03/11/algebra-and-data-types.html
还是ADT更好看些
https://isomorf.io/#!/tours/of/overview/7/python #tool 这里还提了一个跨语言可视化代码编辑器
https://sokra.github.io/source-map-visualization/ sourcemap 可视化 #js
https://github.com/mozilla/source-map?tab=readme-ov-file#generating-a-source-map eval
😅 完了,感觉我都要变 yinwang.org 了
他10年前的抱怨我全都有,而且我比他还少点实践
https://gist.github.com/duangsuse/8fa4ae8c627e5c3c6044522a84ccebf4
还好好搜了一下各种中文blog
没找到好的内容,草
明明各种大学都有开编译原理依照 static typed
做compiler前端的是吃白饭的么? 都在教一些又过时又get不到重点的东西一样
这kt编译期显然不是古早的 Matcher() 那个级别
使用Var()来收集类型信息是 https://tomstu.art/hello-declarative-world 里就有的 unification ,但那个支持dfs,比如解X+Y=1。kt可以直接拟合(fit)
现在的React也开始习惯于「变量作为值」了,不过用Signal()深赋值取代diff的还是去年,发展得挺慢
https://justinpombrio.net/2021/03/11/algebra-and-data-types.html
还是ADT更好看些
https://isomorf.io/#!/tours/of/overview/7/python #tool 这里还提了一个跨语言可视化代码编辑器
https://sokra.github.io/source-map-visualization/ sourcemap 可视化 #js
https://github.com/mozilla/source-map?tab=readme-ov-file#generating-a-source-map eval
Gist
懒得喂给GPT了,因为知道要协商很久。 我觉得在语法低冗余前,这些比DSL还虚的还是少设计的好。从库的角度看,复杂用法的“美”绝对是昙花一现的。
懒得喂给GPT了,因为知道要协商很久。 我觉得在语法低冗余前,这些比DSL还虚的还是少设计的好。从库的角度看,复杂用法的“美”绝对是昙花一现的。 - compile-typer.md
duangsuse::Echo
#py #tool 浏览器缓存 图片 爬虫 python a.py 'x\.com' 200 ~/.cache/chromium/Default/Cache/Cache_Data/* python imgdump.py 'www' 100 `ls --sort time --reverse ~/.cache/chromium/Default/Cache/Cache_Data/*` #code import re,struct, os def ls_cache(urlRegex, kbSizeMin,…
#security #linux #reveng https://mastodon.social/@AndresFreundTec/112180083704606941
https://boehs.org/node/everything-i-know-about-the-xz-backdoor
https://twitter.com/Blankwonder/status/1773921956615877110
发现后门的人还只是一个 pg 社区的开发者
#tool srt 我来示范一下怎么获取全集字幕吧,《国宝特工》
https://pypi.org/project/SpeechRecognition/ 也可以用Azure等云服务
最后,如果能买API Key 的话可以直接用
https://platform.openai.com/docs/api-reference/audio/createTranscription#audio-createtranscription-response_format
#web GPU(类似 waifu4x https://real-cugan.animesales.xyz/) https://huggingface.co/spaces/Xenova/whisper-web
https://huggingface.co/spaces/aadnk/whisper-webui
>#china #ai 代购我不知道,API黄牛倒是不少,但免费的可以薅
据说 Claude.ai 更好,但也封锁了
国区魅力时刻:https://www.bilibili.com/video/BV1ip421U7Qx 大清苏联重现
如果你没有VISA(不能注册Azure的GPT或ASR/TTS),只有微信,可以用 https://openai-hk.com/?i=25623 这个中间商,起步价10块(有更好的推荐请私我.. 😓)
whisper-1 0.006美元/分钟 0.0426人民币 每段限25MB
网页版 https://github.com/openai/whisper/discussions/1018
和离线版是一样的
主要是Whisper的听说性价比在目前能算SOTA吧,而且能顺带充一个GPT4和midj(1个问题3毛钱啊)
可以在 ChatHub.gg (Alt+J) 使用代理商的API,各种 client webui, 本地GLM也都能用
我看了一下,淘宝有卖apikey的(openai不让搜了),gpt3 一口价5块,无需帐号。 也能用Whisper服务 🥰
单靠官方APIkey 只能限权,不能量贩,除了虚拟手机卡注册,这大概是公用号.. ( 我当时也很惊讶gpt4可以直接卖key) 现在gpt3栏大街了,我把sk贴出来:
ssk - v4SRWkhYGKu7EoUeIMJuT3BlbkFJFii1vkU3ZCdO7dyoADrG
我当时也很惊讶gpt4可以直接卖key
https://boehs.org/node/everything-i-know-about-the-xz-backdoor
https://twitter.com/Blankwonder/status/1773921956615877110
发现后门的人还只是一个 pg 社区的开发者
#tool srt 我来示范一下怎么获取全集字幕吧,《国宝特工》
>准备ASR服务+降噪优化
pip install -U openai-whisper demucs
>下载视频全P
yt-dlp -f0 https://www.bilibili.com/video/BV1Rx411j7aw?p={1..52}
>ffmpeg concat all m4a, start seek 110s, to wav 16k
audcat() { for f in `find *.$1|sort -n`; do echo -e "file '$f' \ninpoint $2"; done>ALL.txt; ffmpeg -f concat -safe 0 -i ALL.txt -ac 1 -ar 16000 -sample_fmt s16 -y ALL.wav; }
audcat m4a 110s
>去BGM
#demucs --two-stems vocals ALL.wav; mv separated/*/vocals.wav ALL.wav
#因为配置低就不示范了
>20M一个文件夹(24min一集,建议5集一批), 用同样原理把{1..6}/a.srt 收集回来
find *.m4a|sort -n|pr -aT -10|nl|xargs -L1 ruby -e'puts "mv "+ARGV.rotate.join(" ")'
mkdir {1..6}
for f in `find * -type d`; do cd $f; audcat m4a 110s; cd ..; done
#find -name *.m4a -exec mv {} $PWD \;
>识别生成中文srt
whisper --model base --language Mandarin ALL.wav
>去除回音代表的行
>transform srt file a (using srt.parse), iterate over a[], when a[i] not in a[i-1:i-N], keep it
for i in {1..11};do echo>>a "# $((i*5))前的5集";srt-process -f print --input ep$i.srt >>a; done
import srt,sys
# Set N value for checking against previous N lines
N = 2
_,srt_file=sys.argv
subs = list(srt.parse(open(srt_file)))
noDup=lambda cap,i: cap.content not in [c.content for c in subs[i-N:i] ]
filtered_captions = [cap for i,cap in enumerate(subs) if noDup(cap,i)]
# Save the result to a new SRT file
with open("ep" + srt_file, "w") as f:
f.write(srt.compose(filtered_captions))
https://pypi.org/project/SpeechRecognition/ 也可以用Azure等云服务
最后,如果能买API Key 的话可以直接用
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F "timestamp_granularities[]=segment" \
-F model="whisper-1" \
-F response_format="srt"
https://platform.openai.com/docs/api-reference/audio/createTranscription#audio-createtranscription-response_format
#web GPU(类似 waifu4x https://real-cugan.animesales.xyz/) https://huggingface.co/spaces/Xenova/whisper-web
https://huggingface.co/spaces/aadnk/whisper-webui
>#china #ai 代购我不知道,API黄牛倒是不少,但免费的可以薅
据说 Claude.ai 更好,但也封锁了
国区魅力时刻:https://www.bilibili.com/video/BV1ip421U7Qx 大清苏联重现
如果你没有VISA(不能注册Azure的GPT或ASR/TTS),只有微信,可以用 https://openai-hk.com/?i=25623 这个中间商,起步价10块(有更好的推荐请私我.. 😓)
whisper-1 0.006美元/分钟 0.0426人民币 每段限25MB
curl https://api.openai-hk.com/v1/audio/transcriptions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: multipart/form-data" -F file="@ALL.mp3" -F "timestamp_granularities[]=segment" -F model="whisper-1" -F response_format="srt"
网页版 https://github.com/openai/whisper/discussions/1018
和离线版是一样的
主要是Whisper的听说性价比在目前能算SOTA吧,而且能顺带充一个GPT4和midj(1个问题3毛钱啊)
可以在 ChatHub.gg (Alt+J) 使用代理商的API,各种 client webui, 本地GLM也都能用
我看了一下,淘宝有卖apikey的(openai不让搜了),gpt3 一口价5块,无需帐号。 也能用Whisper服务 🥰
单靠官方APIkey 只能限权,不能量贩,除了虚拟手机卡注册,这大概是公用号.. ( 我当时也很惊讶gpt4可以直接卖key) 现在gpt3栏大街了,我把sk贴出来:
OPENAI_API_KEY= ssk - X6muuhftCItNxCFy6bP7T3BlbkFJlkcCKxV8Js2v3mnoCAtZ
ssk - v4SRWkhYGKu7EoUeIMJuT3BlbkFJFii1vkU3ZCdO7dyoADrG
我当时也很惊讶gpt4可以直接卖key
PyPI
SpeechRecognition
Library for performing speech recognition, with support for several engines and APIs, online and offline.
#ai #tool gpt4客户端直接用 https://app.nextchat.dev/#/
我在 https://openai-hk.com/?i=25623 有个号,想试用 你可以找我问apikey
似乎很简短的算术题都需要0.1元,gpt3是1分钱
我在 https://openai-hk.com/?i=25623 有个号,想试用 你可以找我问apikey
似乎很简短的算术题都需要0.1元,gpt3是1分钱
duangsuse::Echo
Photo
#science 最近很火那个十万流明手电仅需550W,0.2度可以开20min:
14包邮/XHP50大单体LED 18W=12V1.5A通过USB-A 2.6klm 165lm/W
25包邮/XHP70 30W 12V2.4A 4.2klm 181lm/W https://www.mouser.cn/new/cree/cree-xlamp-xhp70-2/
🌝BV1pZ421y7mg 组装了7粒 28klm,200块200W的成本
已经是只有无人机能找出差别的亮度了(户外手电发烧友大部分都懂行懂DIY)
目前,市价的200lm/w转化率,只有十年前的飞利浦LUXEON Lime, 科瑞XLamp XPL在0.3A气温85。即便不像充电宝容量那样假,也有厂家店家虚标。。。
一些手机带有环境光传感器 #tool https://intel.github.io/generic-sensor-demos/
https://gettopics.com/zh/calc/water-heating-time
https://www.dianziaihaozhe.com/gongju/Wh_mAh/
谈到虚标,
不使用40块的usb/C口电表(或者电流超过12A量程),怎么靠称验货呢?
首先是选「带配料表👍」的可信商家,淘宝更多:聚合物锂电池批发 极品配件之家 炬为CC表 nicun逆变器
2024市价磷酸铁锂、三元铝壳、三元软包 电芯的储能Wh/kg=180,210,*1.2倍
如果同类同重量电瓶/电芯达不到的,充电宝声称自己是,那可能是为电压做串联拉高了成本
如UCI=12v20Ah1C=3S2P*3V10Ah
或者是1260软包比18号,21号圆电芯更便宜、单体>3C动力电芯价格更高(150包邮18Ah,加350W逆变器只需210...)
UCI指标里,C=220Wh 意味着11v2a 22W的投影仪能使用10小时,但热电器大概就带不动。 锂电池除了UCI规格,内阻发热 寿命 自放电 低温容量 也很重要
想通俗的理解锂离子电池倍率越大容量越小(C=20Ah, I=0.5C=10A,同容量标称3C的比0.5最大1C的贵一倍) 可阅读
https://zhuanlan.zhihu.com/p/670353928
#好物 DIY潜水式冰箱(30,半导体-水冷热交换法):
15+9+3包邮/12707 67W温差74+铝水冷头带1m线+40mm铝散热片
5包邮/365泵 8W
并联焊接、AB胶粘合4个原件。串联泵-水冷头之一,另二线挂保温箱外循环
电热管:对120W的充电宝,0.2L洗脸水从26度到60度,花费20分钟,150W电热管耗电<20%
一瓶康师傅烧开, 11.45v-10.7v
20分钟后要断电5分钟,最终耗半小时,理论上是75Wh的电量
14包邮/XHP50大单体LED 18W=12V1.5A通过USB-A 2.6klm 165lm/W
25包邮/XHP70 30W 12V2.4A 4.2klm 181lm/W https://www.mouser.cn/new/cree/cree-xlamp-xhp70-2/
🌝BV1pZ421y7mg 组装了7粒 28klm,200块200W的成本
已经是只有无人机能找出差别的亮度了(户外手电发烧友大部分都懂行懂DIY)
目前,市价的200lm/w转化率,只有十年前的飞利浦LUXEON Lime, 科瑞XLamp XPL在0.3A气温85。即便不像充电宝容量那样假,也有厂家店家虚标。。。
一些手机带有环境光传感器 #tool https://intel.github.io/generic-sensor-demos/
https://gettopics.com/zh/calc/water-heating-time
https://www.dianziaihaozhe.com/gongju/Wh_mAh/
谈到虚标,
不使用40块的usb/C口电表(或者电流超过12A量程),怎么靠称验货呢?
首先是选「带配料表👍」的可信商家,淘宝更多:聚合物锂电池批发 极品配件之家 炬为CC表 nicun逆变器
2024市价磷酸铁锂、三元铝壳、三元软包 电芯的储能Wh/kg=180,210,*1.2倍
如果同类同重量电瓶/电芯达不到的,充电宝声称自己是,那可能是为电压做串联拉高了成本
如UCI=12v20Ah1C=3S2P*3V10Ah
或者是1260软包比18号,21号圆电芯更便宜、单体>3C动力电芯价格更高(150包邮18Ah,加350W逆变器只需210...)
UCI指标里,C=220Wh 意味着11v2a 22W的投影仪能使用10小时,但热电器大概就带不动。 锂电池除了UCI规格,内阻发热 寿命 自放电 低温容量 也很重要
想通俗的理解锂离子电池倍率越大容量越小(C=20Ah, I=0.5C=10A,同容量标称3C的比0.5最大1C的贵一倍) 可阅读
https://zhuanlan.zhihu.com/p/670353928
#好物 DIY潜水式冰箱(30,半导体-水冷热交换法):
15+9+3包邮/12707 67W温差74+铝水冷头带1m线+40mm铝散热片
5包邮/365泵 8W
并联焊接、AB胶粘合4个原件。串联泵-水冷头之一,另二线挂保温箱外循环
电热管:对120W的充电宝,0.2L洗脸水从26度到60度,花费20分钟,150W电热管耗电<20%
一瓶康师傅烧开, 11.45v-10.7v
20分钟后要断电5分钟,最终耗半小时,理论上是75Wh的电量
www.mouser.cn
XLamp XHP70.2超大功率LED - Cree LED | Mouser
Cree XLamp XHP70.2超大功率LED比第一代XHP70 LED在光输出和光效(LPW)方面分别提高9%和18%。
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…
#bash #tool USB 5V pwm/pcm 以及stdio.file命令行科普
https://wiki.archlinux.org/title/Fan_speed_control 使用$ sensors; pwmcontrol 控制风扇
lsusb的基于udev,不适用于sysctlfs 所以查看:
可以用powertop调
发现2.6内核已经不能调,而且电源也是软关闭,如同 usbguard-qt
不过,如果驱动(rndis..)不对可以 usbreset
无论使用
唯一的可能是 rtcwake -m mem -s 60; 需要BIOS支持睡眠断电
以及购买集线器 uhubctl -a off -p 1
https://github.com/mvp/uhubctl?tab=readme-ov-file#notable-projects-using-uhubctl
DEB http://launchpadlibrarian.net/448511434/uhubctl_2.1.0-1_amd64.deb
https://wiki.archlinux.org/title/Fan_speed_control 使用$ sensors; pwmcontrol 控制风扇
lsusb的基于udev,不适用于sysctlfs 所以查看:
usbdev(){ usb-devices |node -p 'fs.readFileSync(0,"utf8").replace(/T: Bus=(\d*).*Port=(\d*).*MxCh= 0[\s\S]*?Product=(.*?)\n/g, (_,i,j,k)=>`# ${k} /sys/bus/usb/devices/${+i}-${+j+1}\n`)';}
可以用powertop调
发现2.6内核已经不能调,而且电源也是软关闭,如同 usbguard-qt
不过,如果驱动(rndis..)不对可以 usbreset
无论使用
usbguard list-devices; dmesg|grep udev; sysfs
都无法diff到USB LED头的差别唯一的可能是 rtcwake -m mem -s 60; 需要BIOS支持睡眠断电
以及购买集线器 uhubctl -a off -p 1
https://github.com/mvp/uhubctl?tab=readme-ov-file#notable-projects-using-uhubctl
DEB http://launchpadlibrarian.net/448511434/uhubctl_2.1.0-1_amd64.deb
xurls(){ eval $(node -p 'process.argv.slice(1).map(s=>{try{s=`$(wget -c -nv --show-progress ${new URL(s)};ls -rt|head -n1)`}catch{}return s}).join(" ")' $*);}
alias DEB='xurls sudo dpkg -i --force-depends'
alias RPM='xurls sudo rpm -ivh --nodeps' #应支持 rpm://$(dnf download)
diff <(echo hello world) <(echo foo bar)
pushd $(mktemp -d); $0; cd; rm -rf `dirs +1` #进入临时目录
xdg-mime query default application/x-deb #dbus注册表
GitHub
GitHub - mvp/uhubctl: uhubctl - USB hub per-port power control
uhubctl - USB hub per-port power control. Contribute to mvp/uhubctl development by creating an account on GitHub.
#learn #bash with #tool 入门+优质冷知识 😋
图为 asciinema.org/explore 。没有 #linux 的极客可打开 WebVM.io
Linux Deploy; (Mac)Git Bash; winetricks; screenfetch 甚至 bashttpd; pacman/OpenRC init 基于bash
shell 是类似 Windows.ps1 但使用纯文本或行IO的脚本编程语言。 每当你看见awk|sed|grep ,那就是在 #sql select访问属性、文本替换、where过滤了
Dijkstra说,用BASIC编程的人“脑子已经坏了”,作为运维你要尽力避免这一点。用AI写命令思路也是要正确! 😨
因此在思考时,你应当用pwsh的API模型:
更不是 网关=
— 快捷键 (
⬆️⬇️滚动历史, Alt/Fn⬅️➡️ 跳词/跳行,Tab补齐, ls \ mydir 或fc:多行命令
^=Ctrl, M=Alt e=ESC
^M T 打开cmd窗口 ^L清屏 ^D退出
!cd 执行最近1次cd开头的命令, sudo !! 补齐为上一条命令
touch a; ls $_ #操作同一个文件
^a^b 改参数重执行
^U ^Y 剪切和粘贴行,nano同款
*.mp4 ^xg #查看符合正择的文件,免ls|grep
^A# ^E# 意为正则/^$/。script录制时(例如
^M F1~F6 一般含几个tty串口,通过 echo>/dev/tty2 即w;write,您可以装得像电脑有第二个人在用一样 还需要协作 😅
图为 asciinema.org/explore 。没有 #linux 的极客可打开 WebVM.io
Linux Deploy; (Mac)Git Bash; winetricks; screenfetch 甚至 bashttpd; pacman/OpenRC init 基于bash
shell 是类似 Windows.ps1 但使用纯文本或行IO的脚本编程语言。 每当你看见awk|sed|grep ,那就是在 #sql select访问属性、文本替换、where过滤了
Dijkstra说,用BASIC编程的人“脑子已经坏了”,作为运维你要尽力避免这一点。用AI写命令思路也是要正确! 😨
因此在思考时,你应当用pwsh的API模型:
Get-Date|select Year; dir|?{$_.CreationTime.Year -lt 2024}
,而不止是 date '+%Y' ; find . -maxdepth 1 -type f -not -newerct
2023.12.31更不是 网关=
ip r|awk '{print $3}'
这样的糟粕— 快捷键 (
bind -p|grep '"\\C'
)⬆️⬇️滚动历史, Alt/Fn⬅️➡️ 跳词/跳行,Tab补齐, ls \ mydir 或fc:多行命令
nl $HISTFILE|tac|less
默认保留500条可清空^=Ctrl, M=Alt e=ESC
^M T 打开cmd窗口 ^L清屏 ^D退出
!cd 执行最近1次cd开头的命令, sudo !! 补齐为上一条命令
touch a; ls $_ #操作同一个文件
^a^b 改参数重执行
^U ^Y 剪切和粘贴行,nano同款
*.mp4 ^xg #查看符合正择的文件,免ls|grep
^A# ^E# 意为正则/^$/。script录制时(例如
history 3
) 添加注释 ^M F1~F6 一般含几个tty串口,通过 echo>/dev/tty2 即w;write,您可以装得像电脑有第二个人在用一样 还需要协作 😅
duangsuse::Echo
#learn #bash with #tool 入门+优质冷知识 😋 图为 asciinema.org/explore 。没有 #linux 的极客可打开 WebVM.io Linux Deploy; (Mac)Git Bash; winetricks; screenfetch 甚至 bashttpd; pacman/OpenRC init 基于bash shell 是类似 Windows.ps1 但使用纯文本或行IO的脚本编程语言。 每当你看见awk|sed|grep ,那就是在 #sql sele…
— Linux与命令行
"外壳"提供了调用软件的人机接口。在 kernel.org 已对内存cpu分时分址复用、解码/dev/sdXY 分区, /sys/内设外设+网
.bashrc 和 etc/XXX.d/ 以run-command而非json注册表的方式配置设置,这既先进又落后。 rc的灵活性远优于yml,但bash的无类型,单全局表 将其化神奇😅为腐朽了(毕竟1971年老古董)
您的终端通过 ANSI 清屏=
->py termios 如何进入非阻塞(游戏按键)模式?编写 key echo demo
->表格出所有ANSI escape,然后函数化为
— 进程管理
^C终止 ^Z挂起到jobs
#记录3态时间的后2Sum是CPU占用率 ,sys时间较高=IO密集型
jobs -l 查看pid; fg bg 继续任务$!, kill -9 $(pidof bash) 杀死
— 命令的组合 &; >< 与括号展开
&>fp 即
表达式if\else
for,case在文尾。 罕见于urls|xargs cat
hi 3 HiH 3 01 03 05 07 09 goodboy badboy..
{} 允许并列,嵌套和正择 🥰
使用可嵌套的 $() 取代`` 除了可以调用文字替换API, 还能提升组合力
不过sh系都支持多行字符串
可以手动
— 目录管理
mkdir -p 目录/树
echo>>a.txt 记录
rm -rf * 清空$(dirs)
^xg #查看符合正择的文件
cp;mv 复制和移动到arg-1即 $_
chmod {+x,755} 设置可执行
set -s noglob 以禁用*正择
可深度遍历,匹配多个斜杠。正则[0-9]仍有效,但'?' 变成了(.), [^\d]* 成了
替换文件扩展名(thunar -B ,不得不说单字符很脑残,何况bash连对象键值都停留在get/set函数名) https://wangdoc.com/bash/string#搜索和替换
a mp4
自至剪贴板
练习:封装这些功能为函数或basename式CLI工具,加什么参数你看着办,这幼儿园Perl我看着就难受
— sh变量
不支持str和float算式,支持?:
— 权限
您的系统通过chown和setcap来管理特权,所有文件通过 umask: ugo(user grp other)三权分立,一般为 644, 755(=rwxrxrx 对于目录x允许进入)
6(rw-)即是位旗 0b100+0b10+0;
特别地,wheel 用户组(类似win/droid的SYSTEM) 可使用/bin/sudo 来鉴权到sudo的所有者root。为了防止 LD_PRELOAD注入应使用 visudo 修改配置
— 古怪的语法
先前学过java的大佬,会觉得 if-fi case-esac for-done 比Lua和Matlab还啰嗦,这是因为bash采取了shlex 而且和TeX一样不懂变通
bash 区分命令和计算的$()也很含糊,但在pwsh上都是 ()
"外壳"提供了调用软件的人机接口。在 kernel.org 已对内存cpu分时分址复用、解码/dev/sdXY 分区, /sys/内设外设+网
ls {/proc,/sys/class}/net
的基础上。这是DOS.COM 所不具有的.bashrc 和 etc/XXX.d/ 以run-command而非json注册表的方式配置设置,这既先进又落后。 rc的灵活性远优于yml,但bash的无类型,单全局表 将其化神奇😅为腐朽了(毕竟1971年老古董)
pacaur -S xonsh elvish pwsh
拥有更合理的弱类型API您的终端通过 ANSI 清屏=
printf '\e[2J\e[14t'
来控制显示效果,但对于TUI应用..有少数stdio管道不能实现的接口, https://docs.python.org/zh-cn/2/library/termios.html .iospeed.O_NONBLOCK->py termios 如何进入非阻塞(游戏按键)模式?编写 key echo demo
->表格出所有ANSI escape,然后函数化为
clear=lambda: CSI('2J'); ...
bash连接到的tty服务器=$(fuser -s $(readlink /proc/$$/fd/0))
,如 xfce4-terminal;ssh;tmux— 进程管理
^C终止 ^Z挂起到jobs
htop; powertop
TUI监视器yes sir|tee just-like.dd
nohup zenity --entry --text="请输入您的姓名:" &
tail -f nohup.out
time sleep 1
#记录3态时间的后2Sum是CPU占用率 ,sys时间较高=IO密集型
jobs -l 查看pid; fg bg 继续任务$!, kill -9 $(pidof bash) 杀死
— 命令的组合 &; >< 与括号展开
{cat,echo}|grep #不要这样做! 使用'<'或arg1输入文件常量,'>>', &>/dev/null 赋值文件。尽量不要使用 >
&>fp 即
1>fp 2>&1
; freopen了两个换行流文件(stdbuf -oL),就像 import subprocess.Popen(stdin=-1)
它可被读写less -f /dev/stdin &sleep 1 &&echo>>/proc/$(pidof less)/fd/0 hi您使用lsof即可知道进程打开了什么(网络)文件
lsof /tmp/; ss; strace -etrace=openat,getdents64,connect ls
表达式if\else
zenity --question --text="确认要执行吗?" && echo "您已确认执行。" || echo "您取消了执行。"
test -f nohup.out &&wc $_
for,case在文尾。 罕见于urls|xargs cat
a=hih;echo ${a:0:2} ${#a} ${a//h/H} $((10/3)) {01..9..2} {good,bad}boy {z..a}
hi 3 HiH 3 01 03 05 07 09 goodboy badboy..
{} 允许并列,嵌套和正择 🥰
使用可嵌套的 $() 取代`` 除了可以调用文字替换API, 还能提升组合力
diff <(echo hello world) <(echo hello bar)
less <<<Good #配合 ruby -p; node -e 胶水使用
JS=$(cat <<OK
heredoc,就像""仍能内插${} ''
OK
)
不过sh系都支持多行字符串
可以手动
tmp=$(mktemp); trap 'rm -f "$tmp"' EXIT
— 目录管理
文件夹名/拖放
转到。不要用cd那个太古板了mkdir -p 目录/树
ls -lh; tree; du -h
读目录,计算df大小echo>>a.txt 记录
rm -rf * 清空$(dirs)
^xg #查看符合正择的文件
cp;mv 复制和移动到arg-1即 $_
chmod {+x,755} 设置可执行
set -s noglob 以禁用*正择
可深度遍历,匹配多个斜杠。正则[0-9]仍有效,但'?' 变成了(.), [^\d]* 成了
*[![:digit:]]
,从find和sed的使用来看😅bash的RegExp是🤡ls !(*.mp4)
echo **/*.mp4
替换文件扩展名(thunar -B ,不得不说单字符很脑残,何况bash连对象键值都停留在get/set函数名) https://wangdoc.com/bash/string#搜索和替换
fp=a.x.mp4; echo ${fp%.*} ${fp##*.}a.x mp4
echo ${fp/.*/} ${fp/*./}
a mp4
for fp in *; do [[ $fp =~ \.png$ ]]&&ls "$fp"; done
自至剪贴板
a=$(xclip -selection clipboard -o); base64 <<<$a|xclip -selection clipboard
练习:封装这些功能为函数或basename式CLI工具,加什么参数你看着办,这幼儿园Perl我看着就难受
— sh变量
不支持str和float算式,支持?:
pargs() { echo "$@"; }
pargs x y #x y. 不像argv它不含$0
echo $PS{1,2} #为什么大佬教你要 "$var"呢?试试在文件名里加空格或 echo $(cal) ?牛逼啊,还能SQL注入了!默认语意这么脑残
IFS=":" # read分隔符为冒号, 遍历可执行注册表
for dir in $PATH; do
echo "$dir"; done
export PATH #bash连字符串变量也不默认传给子进程
#有无屏幕, 其实 .bash_login 就是tty-only
(xdotool sleep .1 search --name tty windowsize 100% 100%)& alacritty
[ -z $DISPLAY ]&&startx /bin/sh atty.sh
read id; ${id:=Peter}
read id; ${id:?Oh no Peter}
#不建议用 declare -i c; c=1+2 或let=运算,可以
((a=1,b=2)); array=([2]=c [0]=a [1]=b) #读取 "${array[0或@]}"
— 权限
您的系统通过chown和setcap来管理特权,所有文件通过 umask: ugo(user grp other)三权分立,一般为 644, 755(=rwxrxrx 对于目录x允许进入)
6(rw-)即是位旗 0b100+0b10+0;
echo $[2#100+2#10]
,644以此类推特别地,wheel 用户组(类似win/droid的SYSTEM) 可使用/bin/sudo 来鉴权到sudo的所有者root。为了防止 LD_PRELOAD注入应使用 visudo 修改配置
find / -perm /4000列举所有自鉴权模块如su
sudo setcap cap_net_bind_service=+ep $(command -v python)#允许bind 80端口
# cat /etc/{,g}shadow /etc/{passwd,fstab,sudoers,ssh/sshd_config}
只有root能查看。权力越大责任越小,rm -rf /* 😱享受特权吧!— 古怪的语法
先前学过java的大佬,会觉得 if-fi case-esac for-done 比Lua和Matlab还啰嗦,这是因为bash采取了shlex 而且和TeX一样不懂变通
if [ ]; then, for in ; do
更像是2条命令(do eval字符串 done) 而不是“块”, forkBomb() { sleep; }
尾分号同理bash 区分命令和计算的$()也很含糊,但在pwsh上都是 ()
Telegram
duangsuse::Echo
#tool tty canvas #ai 编程失败
>用py实现 sudo hexdump /dev/input/mice -ve'3/1 "%d " "\n"'| for X,Y in lines: 叠加x=0,y=0 并移动终端光标
(很烂而且没有避print换行的坑)
gpmm() { #鼠标光标
stdbuf -o0 hexdump /dev/input/mice -e '3/1 "%d ""\n"'|awk -v kx=$((COLUMNS / LINES)) -e '!/*/{x+=$2/k*kx;…
>用py实现 sudo hexdump /dev/input/mice -ve'3/1 "%d " "\n"'| for X,Y in lines: 叠加x=0,y=0 并移动终端光标
(很烂而且没有避print换行的坑)
gpmm() { #鼠标光标
stdbuf -o0 hexdump /dev/input/mice -e '3/1 "%d ""\n"'|awk -v kx=$((COLUMNS / LINES)) -e '!/*/{x+=$2/k*kx;…
#learn #web #tool spider
以yt-dlp 为首的刺头,支持 e-hentai.org 什么的
https://github.com/yt-dlp/yt-dlp
https://github.com/iawia002/lux?tab=readme-ov-file#supported-sites
https://github.com/KurtBestor/Hitomi-Downloader
https://t.me/dsuse/19360 😅直接从缓存下图片,ImageAssistant
https://github.com/nilaoda/N_m3u8DL-RE
https://jeanslack.github.io/Videomass/screenshots.html
特选零代码的
https://github.com/VinciGit00/Scrapegraph-ai/blob/main/examples/openai/json_scraper_openai.py
https://github.com/NaiboWang/EasySpider
https://www.octoparse.com/download
https://www.parsehub.com/quickstart
还有两个付费/仅关键词的
https://github.com/harismuneer/Ultimate-Social-Scrapers
https://github.com/alirezamika/autoscraper
以yt-dlp 为首的刺头,支持 e-hentai.org 什么的
https://github.com/yt-dlp/yt-dlp
https://github.com/iawia002/lux?tab=readme-ov-file#supported-sites
https://github.com/KurtBestor/Hitomi-Downloader
https://t.me/dsuse/19360 😅直接从缓存下图片,ImageAssistant
https://github.com/nilaoda/N_m3u8DL-RE
https://jeanslack.github.io/Videomass/screenshots.html
特选零代码的
https://github.com/VinciGit00/Scrapegraph-ai/blob/main/examples/openai/json_scraper_openai.py
https://github.com/NaiboWang/EasySpider
https://www.octoparse.com/download
https://www.parsehub.com/quickstart
还有两个付费/仅关键词的
https://github.com/harismuneer/Ultimate-Social-Scrapers
https://github.com/alirezamika/autoscraper
#bash #tool 测一测您的笔电电池,还有多少容量? 🔋
科普:Li-ion 电池都有百次以上的循环寿命,且其电压U与剩余容量C成反比,要提升寿命,需要在闲置时把电量保持在70%左右
BAT -h
😅我对AI的代码复用率和准确性醉了, 大家复制粘贴切勿模仿,1个排版模板浪费了我个把小时
😅
另外,
有glob匹配您还要做select语句,您也真是 极大方便了应用层啊!?
只能评价为连pwsh都不如, 就像DBus之于COM,完全没有为API user 服务的意识
eval `cat /sys/class/power_supply/BAT0/* |grep -o POW.*`
echo $POWER_SUPPLY_ENERGY_FULL{,_DESIGN} 1000/ /p|dc
科普:Li-ion 电池都有百次以上的循环寿命,且其电压U与剩余容量C成反比,要提升寿命,需要在闲置时把电量保持在70%左右
'L16M2PB2' Battery by SMP#14845 ⚡️
IU=16720000 mW
C0=.76C=24160000 mWh
C=.90design=31640000 mWh
U=8373000 mV > 7500000 mV
Lm=100% 💡
nCyc=205🔋
CpW=1.444h
BAT -h
IU=16.749 W
C0=.82C=26.15 Wh
C=.90design=31.64 Wh
U=8.481 V > 7.5 V
😅我对AI的代码复用率和准确性醉了, 大家复制粘贴切勿模仿,1个排版模板浪费了我个把小时
😅
echo */
可以显示文件夹,但 !(*/)
不能显示非*.* 格式的文件名, 我想对bash作者说你设计glob设了个 🐓……自己都玩不明白还要 find -depth1 😅另外,
/sys/class/power_supply/BAT$i/
是个完全能 i=select
的主,类如章节选择完全可以绑定为 select '-no' ls [0-9].mp4
,既能read还能Tab。有glob匹配您还要做select语句,您也真是 极大方便了应用层啊!?
只能评价为连pwsh都不如, 就像DBus之于COM,完全没有为API user 服务的意识
BAT() {
i=0;eval `cat /sys/class/power_supply/BAT$i/!(*/) 2>/dev/null|grep POW`
st=$([[ "$POWER_SUPPLY_STATUS" == C* ]] &&echo ⚡️)
tput setaf 6 bold;
echo "$(quote $POWER_SUPPLY_MODEL_NAME) $POWER_SUPPLY_TYPE by $POWER_SUPPLY_MANUFACTURER#$POWER_SUPPLY_SERIAL_NUMBER $st"
echo "IU=${POWER_SUPPLY_POWER_NOW} mW"
echo "C0=.${POWER_SUPPLY_CAPACITY}C=${POWER_SUPPLY_ENERGY_NOW} mWh"
tput setaf 1;echo "C=$(echo "scale=2;(${POWER_SUPPLY_ENERGY_FULL}/${POWER_SUPPLY_ENERGY_FULL_DESIGN})" | bc)design=${POWER_SUPPLY_ENERGY_FULL} mWh"
echo "U=${POWER_SUPPLY_VOLTAGE_NOW} mV > ${POWER_SUPPLY_VOLTAGE_MIN_DESIGN} mV"
tput sgr0;
echo Lm=$(echo `cat /sys/class/backlight/*/{,max_}brightness` 10/ /p|dc)0% 💡
echo "nCyc=${POWER_SUPPLY_CYCLE_COUNT}🔋"
echo "CpW=$(echo "scale=3;(${POWER_SUPPLY_ENERGY_NOW}/${POWER_SUPPLY_POWER_NOW})" | bc)h"
}
unit() { node -p 'process.argv[1].replace(/(\d+) m(Wh?|Ah?|V)/g, (m,n,k)=>n/1e6+" "+k)' "`cat`" ;}
duangsuse::Echo
https://roriri.one/2024/05/12/alice-run-1/ 文章出来了
👆#ce 幽默 loop unroll (Duff's switch do{case} device)
x86在memcpy上是有rep movsb这个特殊优化的,如果是要做IO,恐怕瓶颈就不在程序跳转上了😅
#tool #game https://fsr.alicerun.pages.dev
https://pdf-to-podcast.com
https://github.com/LuisYeah1234-hub/NativeLinux #linux xp
https://github.com/mljar/mercury huggingface webui
https://github.com/ItzCrazyKns/Perplexica
x86在memcpy上是有rep movsb这个特殊优化的,如果是要做IO,恐怕瓶颈就不在程序跳转上了😅
#tool #game https://fsr.alicerun.pages.dev
https://pdf-to-podcast.com
https://github.com/LuisYeah1234-hub/NativeLinux #linux xp
https://github.com/mljar/mercury huggingface webui
https://github.com/ItzCrazyKns/Perplexica
GitHub
GitHub - LuisYeah1234-hub/NativeLinux: Linux in the Windows Native Mode (chkdsk screen env)??
Linux in the Windows Native Mode (chkdsk screen env)?? - LuisYeah1234-hub/NativeLinux
https://github.com/cunarist/rinf
https://www.visioncortex.org/vtracer/
由螃蟹驱动的位图描边转矢量工具 #tool svg
https://www.lummi.ai/
https://github.com/adobe-webplatform/shaderdsl
有趣
有趣
http://topcoat.io
搞点传统的 #css
https://github.com/Web-Media-Foundation/infrastructure/blob/master/packages/ogg-polyfill/src/OggVorbisPage.ts #js #bin
隔壁实现完了 Vorbis 的解码前端(只带解编码元信息,不带解成 PCM 的部分),八百多行
https://t.me/im_RORIRI/17034
#statement
其实也不难,只要你知道你程序依赖的领域、最小的功能是啥,解决问题必须先确定范围;知道自己在干什么、与旧案有何区别、又为何不同,才配叫工程。
比如二进制吧,像bmp那样用一个struct就能parse的东西很少,因为C拿指针掩盖了带长数组、也无常量池等规范,但继续用 u/int32_t 那样的概念也没意义,不如叫 +-1 2 4 8 吧。甚至C bitfield也应该拿bitflags换了。
凡是用不到的专业概念,比如bitsize,全部抛弃掉,这样才有机会
避开前人留的坑
除了 read(bView, ['*', [4 4,'Num2 x y']]) 这样的带长数组,struct的json化也可以基于Proxy,以实现0copy序列化、push、sort啥的
总之就是确定最小问题是什么,然后组合、复用、降低复杂度来换算法的高效能
https://www.visioncortex.org/vtracer/
由螃蟹驱动的位图描边转矢量工具 #tool svg
https://www.lummi.ai/
https://github.com/adobe-webplatform/shaderdsl
有趣
有趣
http://topcoat.io
搞点传统的 #css
https://github.com/Web-Media-Foundation/infrastructure/blob/master/packages/ogg-polyfill/src/OggVorbisPage.ts #js #bin
隔壁实现完了 Vorbis 的解码前端(只带解编码元信息,不带解成 PCM 的部分),八百多行
https://t.me/im_RORIRI/17034
#statement
其实也不难,只要你知道你程序依赖的领域、最小的功能是啥,解决问题必须先确定范围;知道自己在干什么、与旧案有何区别、又为何不同,才配叫工程。
比如二进制吧,像bmp那样用一个struct就能parse的东西很少,因为C拿指针掩盖了带长数组、也无常量池等规范,但继续用 u/int32_t 那样的概念也没意义,不如叫 +-1 2 4 8 吧。甚至C bitfield也应该拿bitflags换了。
凡是用不到的专业概念,比如bitsize,全部抛弃掉,这样才有机会
避开前人留的坑
除了 read(bView, ['*', [4 4,'Num2 x y']]) 这样的带长数组,struct的json化也可以基于Proxy,以实现0copy序列化、push、sort啥的
总之就是确定最小问题是什么,然后组合、复用、降低复杂度来换算法的高效能
GitHub
GitHub - cunarist/rinf: Rust for native business logic, Flutter for flexible and beautiful GUI
Rust for native business logic, Flutter for flexible and beautiful GUI - cunarist/rinf
#think #web #tool
https://cssgridgenerator.io/
https://crocotile3d.com/
https://fixupx.com/Oroshibu/status/1808500235263418441?t=BtGGBHj9jnN2AReHW2VTWA&s=19
三視圖?
有趣的建模工具
帅啊!
螺莉莉的黑板报:
(๑•ㅂ•)و✧
https://dataset.wav.pub/
https://brython.info/demo.html
https://github.com/Distributive-Network/PythonMonkey
#py
螺莉莉的黑板报:
https://github.com/baskerville/plato/blob/master/README.md
你们 rust 真是啥都能干……
https://www.sea-ql.org/SeaORM/
这东西好用么……求教……
https://gitlab.com/coolreader-ng/crengine-ng
有趣的引擎
https://chinese-font.netlify.app/ font
https://typst.app/universe/package/bob-draw
#svg
https://ivanceras.github.io/svgbob-editor/
#code
duangsuse:
大量复制粘贴十分抽象
list有那么难用吗
难道你没注意到近十行只变了1个参数
AIGC也没脚本化得这么严重吧
我看还是用list first!null好了,这么八股文…… 大家现在都是用get null取代预判has的
这种到处预判的风格,很像你找大佬问问题,先发「您在不在」,他只好回个在,然后你不在线……
表达式化比你想的要多哦:
>Spring如何把 @Autowired T xx; 换为 var xx=find(T.class)
var Ts = [T.class].map( applicationContext::getBean);
你在class{}里加那一堆定义,如果只引用了一次,就完全不应该引用。 到底都是要查bean的
从code smell来看,只使用了1次的变量名是无效的;如果只是为了易读新建变量,只能证明你的helper fn命名的有问题
kt已经有!! 了,还想要更多
Java 一大特色,注解属于元数据,和函数调用有重大区别
duangsuse:
那这是定义“随用随扔”变量名的理由吗
函数和变量是这么用的?
java以省略[""] 为由引入太多常量复杂度的优化了,都要所谓框架来解决
纯粹是make compiler happy,把一个schema弄成它能读懂的class,然后再强转Any来构造class而已
js里一个字典让java用就是这么麻烦,其实能用几次呢? init完就扔了,根本不是性能瓶颈。
注解的本意,应该和py的 @decorator 一样,是接受class元数据的编译期函数才对
而不是等到运行时才去查什么field有哪些@属性 然后逐个.set()
要动态生成一个类型,来获取注入,简直无理取闹。 明明就该在编译期产生Registry.get&fillNew的样板函数
这是属于既把元编程的路封死了,还不让基于注解的注入框架提供统一的“反射”方法
其实jawa懂这个道理,但它偏偏就做得很烂,就会个@Override
duangsuse:
为了编译速度这也太幽默了,其实,jvm作为栈机 基本就是带类型签名的GNU dc计算器,不需要什么编译优化
如果递归下降一遍,校验下类型 生成个push call 就能花什么编译时间,属于是用PHP的方式搞算法了
而且javac的能力还远没有到c预处理器的程度,为了优化? 我看是他们不在乎程序/类定义的优雅性
什么序列化啊,也没有做规范,和py能 import json,yaml,toml,marshal 能比?就一个用来RPC的ObjStream,还被业界遗忘,哈哈
汤姆猫是大专必学
虽然汤姆猫的Biz程度也就比Node http-server强半点吧
所以问题就是Result类型为何没有重载 !!, 让它看起来仿佛只是带有错误消息是null
凭什么!! 只能校验 Type? 呢?
assert也是乐观/悲观路径
Exception也是,为什么不能一起判定了?
还非得搞个ifEmpty, ifBlank.. ifNullOrBlank..
莫名其妙
duangsuse:
这不是废话吗?例如买30天大会员,肯定是30* 24*60*60秒后失效,这才是世俗意义上的电脑时间
看到py关于时间和日期/时差有3个API
我就觉得抽象
audit就是一个不懂AOP的,其实unix可以靠strace审查syscall,win32的 sysinternals.com 也有进程日志功能
与其自己搞个无人知晓的轮子,不如封装别人的,两全其美
把OS的活都包揽了,难道py是要运行在Ring0把内核驱动都带上? 那必须支持啊
绷不住了,抽象程度直逼jawa
一开始就不该搞所谓orNull
默认 first{}!! 就够了
我在js里都是把Error视为object返回值的特例,和null是一个意思
这样就不存在什么orNull orElse的,catch表达式也免了
就是语言设计者对值体系的理解不过关,例如NaN就是numbers的null才对,而不是什么number?
这样才能用统一的方法去报错/换默认值
可悲的是一开始就没把悲伤/快乐路径当问题啊,真是异常搞心态
duangsuse:
幽默IDE
完全相信它的API有一大堆根本用不上的class
忸怩作态的软件没必要去维护
kcp是这样的,可 import ast 自 https://python-future.org 就没变过😋
py只是用:隔离一个表达式先于=执行,就实现了高贵语言们的静态检查
既可以用于静态分析,也能在运行时查看f.annotation ,完备的数据不需要反射
btw. 大佬应该会做一个DSL
Message.invoke{ id==mid }
Message.select{ id==mid }//多项
可是这种写法才是真正的SQL逻辑式
既然Msg(id=)能构造数据, Msg{id==} 就能查询
这不是很合理么 #kt
很简单,如果做得太标准,以至于移植到任何一门语言里都没必要修改的话
就没人给官方docs贡献流量了
duangsuse:
https://www.liuwj.me/posts/ktorm-introduction/
🤔 一个SQL函数.xml codegen 能被吹爆,还有人卖课是我没想到的
ES6里一句 sql${} 解决的东西,哈哈
「没想到他文化程度那么低」……
怎么会呢,语句能缓存,再怎么也比一次加载完dao好
你要是不喜欢,或者不相信语法糖有缓存,可以做成生成函数的形式
例如
updateId=f=sqlFn2{a,b-> Pair{B/b, A/a}}
f("bye",0)
所以说,如果你不相信DSL能被缓存,可以转为生成sql函数的形式啊
这不是MyBatis++ ?
https://github.com/JetBrains/Exposed/blob/main/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Op.kt#L184
我只能说,缓存键要么是调用点或次数
要么是函数
似乎很难单独缓存DSL对象,除非对它们的构造器
幸运的是, key eq x 里x的修改能缓存,因为它是参数
https://jetbrains.github.io/Exposed/frequently-asked-questions.html#q-how-to-get-a-plain-sql-query-which-will-be-executed
https://stackoverflow.com/questions/74821893/postgresql-arrays-instead-of-extra-table-in-a-many-to-many-relationship
涨姿势了,以后 1:N用数组json N:N用join
duangsuse: #fp
要是kt能允许编译期生成一部分表达式,就没这问题了😅😅😅
可惜啊, unquote{bash(q(trim("trimedStr")))} 这当然是lisp的专利
其中q() 被生成为一个字面量,就像闭包捕获:
fun bash(s)=trim(s).let:
paste {system(it)}
并没有所谓的编译期,因为编译器能访问所有lib API
0开销不是瓶颈问题,但事关语言的脸面
明明就很有用,可被一些人理解为「并非瓶颈的东西」
然后被rustc拿来完魔法
要我说他们就是傻屌,只不过是把闭包「捕获」的实现方式,改为内联字面量(unquote)
就能轻松突破编译、运行的动静边界,根本没有引入任何新API ,没有什么循环展开和 kotlinpoet javapoet的区别
他们做成什么样了? 正则的缓存还不如py的拿dict查😅
https://cssgridgenerator.io/
https://crocotile3d.com/
https://fixupx.com/Oroshibu/status/1808500235263418441?t=BtGGBHj9jnN2AReHW2VTWA&s=19
三視圖?
有趣的建模工具
帅啊!
螺莉莉的黑板报:
(๑•ㅂ•)و✧
https://dataset.wav.pub/
https://brython.info/demo.html
https://github.com/Distributive-Network/PythonMonkey
#py
螺莉莉的黑板报:
https://github.com/baskerville/plato/blob/master/README.md
你们 rust 真是啥都能干……
https://www.sea-ql.org/SeaORM/
这东西好用么……求教……
https://gitlab.com/coolreader-ng/crengine-ng
有趣的引擎
https://chinese-font.netlify.app/ font
https://typst.app/universe/package/bob-draw
#svg
https://ivanceras.github.io/svgbob-editor/
#code
duangsuse:
大量复制粘贴十分抽象
list有那么难用吗
难道你没注意到近十行只变了1个参数
AIGC也没脚本化得这么严重吧
我看还是用list first!null好了,这么八股文…… 大家现在都是用get null取代预判has的
这种到处预判的风格,很像你找大佬问问题,先发「您在不在」,他只好回个在,然后你不在线……
表达式化比你想的要多哦:
>Spring如何把 @Autowired T xx; 换为 var xx=find(T.class)
var Ts = [T.class].map( applicationContext::getBean);
你在class{}里加那一堆定义,如果只引用了一次,就完全不应该引用。 到底都是要查bean的
从code smell来看,只使用了1次的变量名是无效的;如果只是为了易读新建变量,只能证明你的helper fn命名的有问题
kt已经有!! 了,还想要更多
Java 一大特色,注解属于元数据,和函数调用有重大区别
duangsuse:
那这是定义“随用随扔”变量名的理由吗
函数和变量是这么用的?
java以省略[""] 为由引入太多常量复杂度的优化了,都要所谓框架来解决
纯粹是make compiler happy,把一个schema弄成它能读懂的class,然后再强转Any来构造class而已
js里一个字典让java用就是这么麻烦,其实能用几次呢? init完就扔了,根本不是性能瓶颈。
注解的本意,应该和py的 @decorator 一样,是接受class元数据的编译期函数才对
而不是等到运行时才去查什么field有哪些@属性 然后逐个.set()
要动态生成一个类型,来获取注入,简直无理取闹。 明明就该在编译期产生Registry.get&fillNew的样板函数
这是属于既把元编程的路封死了,还不让基于注解的注入框架提供统一的“反射”方法
其实jawa懂这个道理,但它偏偏就做得很烂,就会个@Override
duangsuse:
为了编译速度这也太幽默了,其实,jvm作为栈机 基本就是带类型签名的GNU dc计算器,不需要什么编译优化
如果递归下降一遍,校验下类型 生成个push call 就能花什么编译时间,属于是用PHP的方式搞算法了
而且javac的能力还远没有到c预处理器的程度,为了优化? 我看是他们不在乎程序/类定义的优雅性
什么序列化啊,也没有做规范,和py能 import json,yaml,toml,marshal 能比?就一个用来RPC的ObjStream,还被业界遗忘,哈哈
汤姆猫是大专必学
虽然汤姆猫的Biz程度也就比Node http-server强半点吧
所以问题就是Result类型为何没有重载 !!, 让它看起来仿佛只是带有错误消息是null
凭什么!! 只能校验 Type? 呢?
assert也是乐观/悲观路径
Exception也是,为什么不能一起判定了?
还非得搞个ifEmpty, ifBlank.. ifNullOrBlank..
莫名其妙
duangsuse:
这不是废话吗?例如买30天大会员,肯定是30* 24*60*60秒后失效,这才是世俗意义上的电脑时间
看到py关于时间和日期/时差有3个API
我就觉得抽象
audit就是一个不懂AOP的,其实unix可以靠strace审查syscall,win32的 sysinternals.com 也有进程日志功能
与其自己搞个无人知晓的轮子,不如封装别人的,两全其美
把OS的活都包揽了,难道py是要运行在Ring0把内核驱动都带上? 那必须支持啊
绷不住了,抽象程度直逼jawa
一开始就不该搞所谓orNull
默认 first{}!! 就够了
我在js里都是把Error视为object返回值的特例,和null是一个意思
这样就不存在什么orNull orElse的,catch表达式也免了
就是语言设计者对值体系的理解不过关,例如NaN就是numbers的null才对,而不是什么number?
这样才能用统一的方法去报错/换默认值
可悲的是一开始就没把悲伤/快乐路径当问题啊,真是异常搞心态
duangsuse:
幽默IDE
完全相信它的API有一大堆根本用不上的class
忸怩作态的软件没必要去维护
kcp是这样的,可 import ast 自 https://python-future.org 就没变过😋
py只是用:隔离一个表达式先于=执行,就实现了高贵语言们的静态检查
既可以用于静态分析,也能在运行时查看f.annotation ,完备的数据不需要反射
btw. 大佬应该会做一个DSL
Message.invoke{ id==mid }
Message.select{ id==mid }//多项
可是这种写法才是真正的SQL逻辑式
既然Msg(id=)能构造数据, Msg{id==} 就能查询
这不是很合理么 #kt
很简单,如果做得太标准,以至于移植到任何一门语言里都没必要修改的话
就没人给官方docs贡献流量了
duangsuse:
https://www.liuwj.me/posts/ktorm-introduction/
🤔 一个SQL函数.xml codegen 能被吹爆,还有人卖课是我没想到的
ES6里一句 sql${} 解决的东西,哈哈
「没想到他文化程度那么低」……
怎么会呢,语句能缓存,再怎么也比一次加载完dao好
你要是不喜欢,或者不相信语法糖有缓存,可以做成生成函数的形式
例如
updateId=f=sqlFn2{a,b-> Pair{B/b, A/a}}
f("bye",0)
所以说,如果你不相信DSL能被缓存,可以转为生成sql函数的形式啊
这不是MyBatis++ ?
https://github.com/JetBrains/Exposed/blob/main/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Op.kt#L184
我只能说,缓存键要么是调用点或次数
要么是函数
似乎很难单独缓存DSL对象,除非对它们的构造器
幸运的是, key eq x 里x的修改能缓存,因为它是参数
https://jetbrains.github.io/Exposed/frequently-asked-questions.html#q-how-to-get-a-plain-sql-query-which-will-be-executed
https://stackoverflow.com/questions/74821893/postgresql-arrays-instead-of-extra-table-in-a-many-to-many-relationship
涨姿势了,以后 1:N用数组json N:N用join
duangsuse: #fp
要是kt能允许编译期生成一部分表达式,就没这问题了😅😅😅
可惜啊, unquote{bash(q(trim("trimedStr")))} 这当然是lisp的专利
其中q() 被生成为一个字面量,就像闭包捕获:
fun bash(s)=trim(s).let:
paste {system(it)}
并没有所谓的编译期,因为编译器能访问所有lib API
0开销不是瓶颈问题,但事关语言的脸面
明明就很有用,可被一些人理解为「并非瓶颈的东西」
然后被rustc拿来完魔法
要我说他们就是傻屌,只不过是把闭包「捕获」的实现方式,改为内联字面量(unquote)
就能轻松突破编译、运行的动静边界,根本没有引入任何新API ,没有什么循环展开和 kotlinpoet javapoet的区别
他们做成什么样了? 正则的缓存还不如py的拿dict查😅
cssgridgenerator.io
CSS Grid Generator
CSS Grid Generator - a user-friendly tool designed for web developers to effortlessly create customizable CSS grids for seamless web development.
#design #tool https://fixupx.com/stammy/status/1815800758199361629?s=46
https://www.freefaces.gallery/
https://motherfuckingwebsite.com/
https://keyboardsimulator.xyz/
http://interface.watch
https://www.elmo.chat/ #ai
https://github.com/bugbakery/audapolis tts
https://github.com/trholding/llama2.c/blob/master/runq.c
拒绝一切 neofetch #linux
拒绝 NV显卡,非炼丹术士,用不上
拒绝一切 lib32 ( 禁用 multilib ),所以咱和 wine 八字不合
拒绝一切 拖家带口的软件,相比直接安装 shellcheck 会带上一大堆 haskell ,我更喜欢直接去 GitHub 拿二进制文件来用
话说 AUR 源和 homebrew 类似,提供的是食谱,是 midi,不是 wav,不是 bin
所以清华 TUNA 放弃 AUR 没啥问题,反正真正阻止你用 AUR 的是开盲盒般的 GitHub 访问体验
Arch 实际上体验成本不高,archinstall 已经非常可用了,不过在愉快地设置安装前推荐去 /etc/pacman.d/mirrorlist 里把国外源都干掉,国内源留一两个 https 的就足够
pacman 一开始接触会觉得非常反人类
常用的首字母就俩 :
S 从网上
Q 从本地
后面就可以开始叠 buff 了 :
i 列出包信息
y 更新缓存
l 列出包文件
s 找包
还有俩特殊的 :
Rs 删 Rd 忽略依赖地删
F 通过文件找包 Fy 前文 + 更新缓存
炸 grub 不怕,因为压根不用 grub
systemd 的魔爪已经
用 systemd-boot 取代了 grub
用 systemd-networkd 取代了 NetworkManager
grub 引导挂了从启动盘启动,按 gentoo 方法把系统挂上,重新 grub-install 一下问题就解决了
https://t.me/kotlin_cn/110568 #故事会
https://www.freefaces.gallery/
https://motherfuckingwebsite.com/
https://keyboardsimulator.xyz/
http://interface.watch
https://www.elmo.chat/ #ai
https://github.com/bugbakery/audapolis tts
https://github.com/trholding/llama2.c/blob/master/runq.c
拒绝一切 neofetch #linux
拒绝 NV显卡,非炼丹术士,用不上
拒绝一切 lib32 ( 禁用 multilib ),所以咱和 wine 八字不合
拒绝一切 拖家带口的软件,相比直接安装 shellcheck 会带上一大堆 haskell ,我更喜欢直接去 GitHub 拿二进制文件来用
话说 AUR 源和 homebrew 类似,提供的是食谱,是 midi,不是 wav,不是 bin
所以清华 TUNA 放弃 AUR 没啥问题,反正真正阻止你用 AUR 的是开盲盒般的 GitHub 访问体验
Arch 实际上体验成本不高,archinstall 已经非常可用了,不过在愉快地设置安装前推荐去 /etc/pacman.d/mirrorlist 里把国外源都干掉,国内源留一两个 https 的就足够
pacman 一开始接触会觉得非常反人类
常用的首字母就俩 :
S 从网上
Q 从本地
后面就可以开始叠 buff 了 :
i 列出包信息
y 更新缓存
l 列出包文件
s 找包
还有俩特殊的 :
Rs 删 Rd 忽略依赖地删
F 通过文件找包 Fy 前文 + 更新缓存
炸 grub 不怕,因为压根不用 grub
systemd 的魔爪已经
用 systemd-boot 取代了 grub
用 systemd-networkd 取代了 NetworkManager
grub 引导挂了从启动盘启动,按 gentoo 方法把系统挂上,重新 grub-install 一下问题就解决了
https://t.me/kotlin_cn/110568 #故事会
FxTwitter / FixupX
Stammy (@Stammy)
now this is a side project
duangsuse::Echo
#sysadmin Arch #linux 一次滚挂历程(差一点) *原因:很久没滚,GNOME mutter wm莫名有了键盘焦点的bug。 未使用 -Syu 以至于为一些旧的包 --ignore icu 的升级,谁知xml依赖它呢?另外还 --overwrite'jupyterlab/*' *差点滚挂: 不能 systemctl restart display-manager ; pacman -S 启动不了!而且我的tty1开的是支持中文的 cage kitty (虽然不会bootloop 🙉 并非btrfs…
#sysadmin Arch #linux 一次莫名其妙的boot卡第一屏
ps. #tool #github https://chromewebstore.google.com/detail/webdevauthn 比那些付费垃圾TOTP(sha1 6b) 厉害多了 😅
经过PE验证,
没法直接从其他发行版iso照搬
一看Arch liveCD 都1G多了 😅就选择Alpine,但手里的U盘不方便直接dd,需要 isolinux 启动(应该使用 https://www.ventoy.net/cn/index.html 的)
众所周知, GRUB 采用 1vm+2init 执行Linux,第一次init在内存盘,第二次明明也可以让grub传指针进来(squashfs,iso9660) 却莫名其妙要指定/proc/cmdline 去 find .iso 以便
Ubuntu 的是
因此最终你要对.iso 敲两次代码……
然后在毫无文档的init fallback 上挂载
然后OpenRC依然会挂,而且连bash都没有(不能用 arch-chroot https://wiki.archlinuxcn.org/wiki/Chroot ) 😅😅
替换一下 $esp/init*,这样就不卡第一屏
gnome-control-center 也坏了,草,是我的 nm-iwd 导致的
靠这些垃圾发行版还不如USB cdc上网
最后说个冷知识: /dev 树并不是在内核里定义好的
而是由init脚本(udev)创建,在切到第二个init(systemd) 后,看起来就像内核搞的一样 😄
devtmpfs 只是 -o size=固定的 tmpfs
/dev/null 这些统称为内存设备: https://github.com/torvalds/linux/blob/master/drivers/char/mem.c#L696
完整列表见 device.rst
Linux内核的启动参数,主要是 root=/dev/ram0 ,通过pivot_root的新方式都是在可脚本环境下挂载/的
initrd由多个 .cpio.gz 构成,真希望能把.iso 与挂载脚本也加进内存去啊😅😅 为啥非要从u盘
https://run.tournament.org.il/extracting-multi-layered-initramfs/
https://github.com/owenson/tiny-linux-bootloader/blob/master/bsect.asm#L112
http://boot.ipxe.org/ 网络启动
#learn
https://wiki.archlinuxcn.org/wiki/Arch_的启动流程#Getty https://wiki.archlinuxcn.org/wiki/块设备持久化命名
https://mickyching.github.io/kernel/linux-vfs-introduction.html
https://kernel-tour.org/fs/devtmpfs.html
https://github.com/0voice/linux_kernel_wiki/blob/main/文章/设备驱动/Linux操作系统学习之字符设备.md#三-字符设备基本构成
魔数解析 https://ty-chen.github.io/linux-kernel-0x400000/
https://uniondong.github.io/docs/linux/linux_driver_develop_basic/一文秒懂linux字符设备驱动/#21-cdev
https://github.com/torvalds/linux/blob/master/fs/binfmt_script.c
手写fs https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html
ps. #rust 😅 macro 是教你这么玩的么,简直是对元编程的侮辱
一个KV表写成这B样,唉 https://github.com/torvalds/linux/blob/master/net/9p/error.c 都不好意思了
ps. #tool #github https://chromewebstore.google.com/detail/webdevauthn 比那些付费垃圾TOTP(sha1 6b) 厉害多了 😅
经过PE验证,
$esp/boot/initramfs-linux.img #约40M
莫名其妙成了空文件,必须重新 https://wiki.archlinuxcn.org/wiki/Mkinitcpio -g initr.img没法直接从其他发行版iso照搬
一看Arch liveCD 都1G多了 😅就选择Alpine,但手里的U盘不方便直接dd,需要 isolinux 启动(应该使用 https://www.ventoy.net/cn/index.html 的)
众所周知, GRUB 采用 1vm+2init 执行Linux,第一次init在内存盘,第二次明明也可以让grub传指针进来(squashfs,iso9660) 却莫名其妙要指定/proc/cmdline 去 find .iso 以便
mount /media/cdrom
Ubuntu 的是
boot=casper iso-scan/filename=/a.iso
但Alpine不吃这一套因此最终你要对.iso 敲两次代码……
#grub.cfg
menuentry "find iso" {
find --set=iso a.iso
}
menuentry "boot $iso" {
loopback l0 $iso
linux (l0)/boot/vm*
initrd (l0)/boot/initr*
}
然后在毫无文档的init fallback 上挂载
mount /dev/sda2 /tmp #反正不能直接从GRUB里传/dev号,不通用,也不能直接 find -d1 /media ,需要逐个mount..
mount -t iso9660 -o loop /tmp/a.iso /media/cdrom #不能自动探测loop0/cdfs,全默认fat
fdisk -l #输出是正常的,然而mount不是!
然后OpenRC依然会挂,而且连bash都没有(不能用 arch-chroot https://wiki.archlinuxcn.org/wiki/Chroot ) 😅😅
for p in sys dev; do mount --bind /$p /mnt/$p; done
chroot /mnt /bin/bash <<OK
mkinitcpio -g a.img
OK
替换一下 $esp/init*,这样就不卡第一屏
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval 'Main.lookingGlass.toggle();'
gnome-control-center 也坏了,草,是我的 nm-iwd 导致的
靠这些垃圾发行版还不如USB cdc上网
最后说个冷知识: /dev 树并不是在内核里定义好的
而是由init脚本(udev)创建,在切到第二个init(systemd) 后,看起来就像内核搞的一样 😄
devtmpfs 只是 -o size=固定的 tmpfs
/dev/null 这些统称为内存设备: https://github.com/torvalds/linux/blob/master/drivers/char/mem.c#L696
完整列表见 device.rst
Linux内核的启动参数,主要是 root=/dev/ram0 ,通过pivot_root的新方式都是在可脚本环境下挂载/的
initrd由多个 .cpio.gz 构成,真希望能把.iso 与挂载脚本也加进内存去啊😅😅 为啥非要从u盘
https://run.tournament.org.il/extracting-multi-layered-initramfs/
https://github.com/owenson/tiny-linux-bootloader/blob/master/bsect.asm#L112
http://boot.ipxe.org/ 网络启动
#learn
https://wiki.archlinuxcn.org/wiki/Arch_的启动流程#Getty https://wiki.archlinuxcn.org/wiki/块设备持久化命名
https://mickyching.github.io/kernel/linux-vfs-introduction.html
https://kernel-tour.org/fs/devtmpfs.html
https://github.com/0voice/linux_kernel_wiki/blob/main/文章/设备驱动/Linux操作系统学习之字符设备.md#三-字符设备基本构成
魔数解析 https://ty-chen.github.io/linux-kernel-0x400000/
https://uniondong.github.io/docs/linux/linux_driver_develop_basic/一文秒懂linux字符设备驱动/#21-cdev
https://github.com/torvalds/linux/blob/master/fs/binfmt_script.c
#! 的由来
手写fs https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html
ps. #rust 😅 macro 是教你这么玩的么,简直是对元编程的侮辱
declare_err!(EPERM, "Operation not permitted.");
.. 一个KV表写成这B样,唉 https://github.com/torvalds/linux/blob/master/net/9p/error.c 都不好意思了
Google
Chrome Web Store
Add new features to your browser and personalize your browsing experience.
#tool kotlin 命令加速器 https://gist.github.com/duangsuse/50937b30cbf24a6be0eb69da3a7231b3
灵感
结果 😅 实现监听就花了大篇,
在使用rePTY恢复REPL的标准流时,又发现好像和后台开个终端没区别
因此把焦点放在 main() 的static环境的缓存上,基于pipe实现请求响应
反射的调用省略,总之是单类应用
因为一些莫名其妙的上游bug花了一整天
./catdo bash #export JAVACMD=$PWD/catdo
time kotlin -e 1+1
2
VM .: jstack 331655
2
real 0m2.769s
real 0m3.121s
time kotlin a.main.kts
real 0m1.176s
real 0m1.397s
灵感
>make a mainClass invoker(argv[0]=fqName) in jshell, poll on fqName.txt(NUL-splitted, prepend argv[1:])
if exists, just rewrite fqName.txt, then run reptyr $(lsof -t fqName.txt)
sudo sysctl -w kernel.yama.ptrace_scope=0
use newWatchService to impl watch(Map<Str, Runnable>){}, minimal, in jshell
结果 😅 实现监听就花了大篇,
void main() {
watch(mk(c->{
c.put("a.txt", () -> System.out.println("File modified"));
}));
}
在使用rePTY恢复REPL的标准流时,又发现好像和后台开个终端没区别
因此把焦点放在 main() 的static环境的缓存上,基于pipe实现请求响应
反射的调用省略,总之是单类应用
因为一些莫名其妙的上游bug花了一整天
echo=lambda x:x[::-1]
def bind(f, u=open("a.txt",'wb+')):
while True:
while (ln:=u.read())==b'': pass # see also for fd,ev in select.poll():
u.seek(0); u.truncate(0)
u.write(f(ln)); u.flush() #echo >>
bind(echo)
#js #ai #tool TTS vits 声线
https://huggingface.co/spaces/k2-fsa/web-assembly-tts-sherpa-onnx-en 120M
Sherpa-ONNX
https://rhasspy.github.io/piper-samples/ 选择语音(ryan,bryce 男声挺好, amy/danny-low 低配版) 后下载armv7 https://github.com/k2-fsa/sherpa-onnx
https://github.com/rhasspy/piper/issues/257#issuecomment-1823768683
https://huggingface.co/spaces/diffusionstudio/vits-web 默认20M
https://huggingface.co/spaces/k2-fsa/web-assembly-tts-sherpa-onnx-en 120M
Sherpa-ONNX
https://rhasspy.github.io/piper-samples/ 选择语音(ryan,bryce 男声挺好, amy/danny-low 低配版) 后下载armv7 https://github.com/k2-fsa/sherpa-onnx
https://github.com/rhasspy/piper/issues/257#issuecomment-1823768683
https://huggingface.co/spaces/diffusionstudio/vits-web 默认20M
huggingface.co
WebAssembly English TTS (sherpa-onnx) - a Hugging Face Space by k2-fsa
Discover amazing ML apps made by the community