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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
#science #好物 🔋📽🌃 扔掉笨重的电源适配器和贵得奇怪的户外电源 —可供电 最高同时给各种DC圆孔笔记本+12v户外电池充电 99阿里 康佳C1,DC:22v2a 186阿里 hY300,双插头 23包邮 12v150W车载加热管,烧水1L需半小时 https://gettopics.com/zh/calc/water-heating-time —转接线 8包邮 DC母转鳄鱼夹(10A电流,兼容EC5,接反必烧!) 11阿里 typec转DC5521等(可调5v2a,12v,20v3a),可…
#science 😓 虽然做了半周攻略,我自己最终买的电池🔋📽🌃其实血亏,或者说配不上我收集这么多资料
如果你只知道便携、带线(A头转1拖4其实很廉价)、12v“高”容量支持车载,那随便买就行,可我希望量化把控一切参数

用电器,首先是投影仪20v2a DC(实测峰值也就20W) + 100W逆变器,还可以插150W加热管(纯电阻)
充放电时间,4.5小时@5A 20W电器可用2小时

充电宝和户外电池是什么构成的?是电芯! 和小学生串联2节5号电池一样简单
3S2P 3串2并=12.6v20Ah 0.2度, 保护电压3~4.2V
性价比最高的 1260聚合物(底面积1.2*6cm 11包邮, UCI=3.7v10Ah 0.5~1C 37Wh) ,总之比18号21号高能量了,圆柱电池组是保护板更便宜

价格并不是按电芯来算的,大家都在瞎掰。 不DIY有两个坏处,首先是消费者都懒得买44块 CC表,缺斤少两 以次充好非常难察觉;其次是外壳里很空,非常粗制滥造

先后选择了:
按typec12转220v 来找,但结果都是3.7v依赖ip升压板 80W的一百块
廉价的户外电源,小二百0.2或0.18度电
12v电瓶+逆变器,最普遍的选择,170 0.2度电,焊接费100
12v18Ah1C(可350W)动力电池,140

那么当初为啥要多花一百? 因为懒得买电烙铁。 但是,导电AB胶(石墨环氧树脂) 加上解胶剂也才4+6块,完全能串联好聚合物 😅😅
补. uv导电胶 可能并不好 https://zhuanlan.zhihu.com/p/569578632
电芯的消费者有专业设备,很难造假。如果是拿来驱动车载 应该直接按电芯买,加装个16的电量显示就不需要保护板了(电流是可以超频的 就是怕短路接反.低C无需均衡电路 同厂即可)
如果只是充电宝,小米京东的10Ah足够轻快了(尽管升压5V容量=0.65C, 效率可达90%) https://post.smzdm.com/p/a07o2prz/
duangsuse::Echo
#经济 海权国家 #china 细猪政经学对 🇨🇳🇷🇺关系有何误解? 为什么中国实质上已经不以「地大物博」「开疆扩土」来获利? 图: 陆地和海洋,国土面积vs供应链的好感,你只能获得一个 品客:拿下 🇹🇼,台积电不就归中国啦?帝国主义慕洋犬盈利的研发不就归咱们了? 寸土寸金啊 🤑 公知:打仗那么贵!认真融入WTO的贸易体系,政治改革经济开放,停止下头的侵略妄想,建设好自己, 不费一兵一卒就能获得tsmc的投资设厂「以礼来降」啊。参考 🇺🇸海外州
#china #history 正 义 轴心AXIS: 台湾“内战”开打后,国际社会怎样? 国内民生怎样?

1. 🇺🇸觉得 以色列>乌克兰>台湾
请勿出于犹太/欧洲「身份」来判断美国的利益。 🇹🇼是太平洋警察的命脉,也是AI半导体的心脏(它不能自主生产,anyways),美国会像待日韩那样待台

2. 中国>鹅爹
中文舆情都受聚光灯操控。 大炮一响白银万两,如果不懂导弹精度、防空拦截这些博弈,至少有听说过1小时22分零三百多天?

3. 台湾是中国经济的捆龙锁,有了台积电中国人到处出国当大爷
拿着侵略国二代的身份证,别想和台湾普通护照一样有145免签国(🇺🇸🇯🇵 🇨🇦,,)了
芯片是这届人类文明最精密的体现,哪怕 🇺🇸也无法自主生产性价比达标的芯片。

4. 统一台湾,是每个中国人血肉相连的精神利益 连体巨婴,打了就永远不会停止 不早泄宣言hh
人生第一件喜事是分家,爱国第一件大事是武统,唉,老中
二战前期的纳粹德国,可谓迷倒万千军事博主,那么,为了统一长城 欧洲对面的同胞,能死几个人呢?

男青年死了1/2,没死的1/2会残, 作为人矿而非石油产地,这是致命的
从肯德基到奢侈品,一切外企会消失,出口也砍一半,实现了好事者梦寐以求的「闭关锁国」
技术冻结,新的显卡和苹果没了。自主融合的黑科技基建出问题后,唯一的治疗是封锁消息
使馆关闭,不能出国留学偷技术了
战时状态,每个人都要体验新的水电气表和劳动警察

在吉吉国,老鼠站在猫的角度叫公正,猪使用屠夫的口吻叫客观
所有戰爭的宣傳叫囂、謊言、仇恨,都來自那些不上戰場的人 - George Orwell
duangsuse::Echo
#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)…
#好物 解暑 500ml批发饮料
1.2/今麦郎芒顿小镇
1.6/依能苏打水
0.5/老上海盐汽水0.6L

1.2/王老吉同款
4.6/海之言1L
4/依能丑水
5/外星人

摆摊可用:
17阿里/8度半小时 速冷冰袋160g*10(尿素,氯化铵法)
9/大保温袋2包
13/赤藓糖醇 1kg
44阿里/x5标签错题打印机

^ 30diy水冷冰箱
👍1
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 所以查看:
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注册表
duangsuse::Echo
#好物 解暑 500ml批发饮料 1.2/今麦郎芒顿小镇 1.6/依能苏打水 0.5/老上海盐汽水0.6L 1.2/王老吉同款 4.6/海之言1L 4/依能丑水 5/外星人 摆摊可用: 17阿里/8度半小时 速冷冰袋160g*10(尿素,氯化铵法) 9/大保温袋2包 13/赤藓糖醇 1kg 44阿里/x5标签错题打印机 ^ 30diy水冷冰箱
#science 12v+双5v 双水冷户外冰箱(冷水机) 34包邮DIY
2*USB3W潜水泵 9
2*40mm铝水冷头+5m*6,7mm管 18
12706 (127*1.2)v6a热交换 7

升级:TEC-12707 14 1230B-5W 15
5w潜水泵搭配上下出水冷头,和宿舍水桶泵同价
参考价 昂特电器DC23A直流usb无刷微型静音高温水陆两用陶瓷轴/11
>50W应使用长风冷、水冷

半导体与压缩机的冷效率WpW比为0.6/5 ,即100W每16min吸热60kJ,但速度上TEC可5分钟结冰且压缩机起步价300

使用固液气吸热的效能似乎比这还差😐,CO2汽化热是23kj/100g,比液氮略高,流行的冷冻剂是4块700ml 如丙烷35kj每百克,
而电瓶每小时能-225kj 足以冻结27度1.5L水了,比冰箱快5倍

冰箱当然是性价比之选,但TEC可配合电瓶车载使用,最重要的是保温
陶瓷纤维/3.4包邮 聚氨酯泡沫/3 气凝胶毡/11(导热系数.03, .02, 0.01,优于铝膜1倍,高于泡沫塑料,再低就是真空了)
🦄1
#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模型: 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 与命令行 #bash
"外壳"提供了调用软件的人机接口。在 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 /tmp/; ss; strace -etrace=openat,getdents64,connect ls

您使用lsof即可知道进程打开了什么(网络)文件

表达式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##*.}
echo ${fp/.*/} ${fp/*./}

a.x mp4
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上都是 ()
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…
— CLI程序服务
getopts; complete 用于获取短参数和提供补齐。少数人用while shift/read;case 来解析
还有一个select in ; do,和py2 print 是异曲同工之败笔,请
->展示zenity的所有功能,并生成一个简短的MC风格的文字冒险

#!/bin/bash

while getopts ":n:s:err" opt; do #?未知 :空
case $opt in
n) n=$OPTARG ;;
s) s=$OPTARG ;;
err) isErr=1 ;;
esac
done
printf "%d*%s E%d\n" $n $s $isErr

ycm() {
local cur prev words cword
_init_completion -n = || return

case $prev in
-s) COMPREPLY=($(compgen -e -- "${cur}")); return 0 ;;
*) COMPREPLY=($(compgen -W "-n -s -err" -- "${cur}"));;
esac
}
complete -F ycm $0

使用 chmod +x a.sh; . a.sh 注册后./执行 即可Tab补齐

⭐️ #js #recommend bashrc
#允许拖放文件夹+远程 uc ls=wget
shopt -s autocd
uc(){ eval $(node -p 'gc={"?d1":"--depth=1","?dn":"--recurse-submodules","":""}; process.argv.slice(1).map(s=>{try{u=new URL(s),s=/^git/.test(u.host)?
`git clone ${gc[u.search]} git@${u.host}:${u.pathname.slice(1)}.git&&ls -td */`:
`wgetHL ${u}`;s=`$(${s}|head -n1)`}catch{}return s}).join(" ")' $*);}

wgetHL(){ python -c 'import pip._internal.cli.progress_bars as PB, time,sys, subprocess as P,re,functools as F
def hear(sh,vp):
nvp=len(vp)
for s in (po:=P.Popen(sh, stdout=-1,text=True,shell=True)).stdout:
for k,v in enumerate(vp):
if nvp==0:yield po
if not isinstance(v,str)and (m:=v.match(s)): vp[k]=m.group(1); nvp-=1
for po in hear(f"LANG=C wget -dc {sys.argv[1]} 2>&1", vp:=[*map(re.compile,sys.argv[2:])]):
time.sleep(1); f=iter( F.partial(open(vp[1],"rb").read,1), b""); print(vp[1])
sys.stdout=sys.stderr; [*PB._rich_progress_bar(f, bar_type="on",size=int(vp[0]))]
po.wait()
' $1 'Length: (\d+)' "Converted file name.*-> '(.*)'";}

#help真太烦人! mans(){ [ -z $(command -v $0) ]&&command-not-found $0 ||对$0依次使用 --help,-h,tldr,man,man -k  }
mans() {
[[ "$@" =~ / ]]&&cd "$(mkdir -p $@;echo $1)" ||(ev=MAN$1;[ -n "${!ev}" ] &&${!ev} "${@:2}") ||
([ -z $(command -v $1) ] &&command-not-found $1) ||(
for opt in "--help" "-h"; do $@ $opt 2>&1|mansHL &&break; done
sleepHL 2 &&for doc in "tldr" "man" "man -k"; do $doc $1 &&break; done
)
}
alias ?=mans grepp='grep --color=always -P'
#export COMMAND_NOT_FOUND_INSTALL_PROMPT=1
MANimport='pip install -U'; MANjs='sudo npm -g i'; MANdoc='docker pull'
MANfmt='[[/(?<=\s-[\w-.]+)(( | ?[=<\x27[])[^\s:,,]+)/g, 36],[/,? ?(\s-[\w-.]+)/g, 32],[/([A-Z][A-Z0-9_]{2,})/g,34]]'
command-not-found() { sudo pacman -S $@ ||pacman -Ql $@|grepp '/etc|lib/'; pkgcSel $1; return 0;}
mansHL(){ node -p "$MANfmt.reduce((str, [A, B]) => str.replace(A,\`\x1b[1;\${B}m\$1\x1b[0m\`), process.argv[1])" -- "$(cat)"; }

sleepHL(){ python -c "import pip._internal.cli.progress_bars as PB, time,sys
def delay(xs,dt):
for x in xs:yield x;time.sleep(dt)

dt=$1*10;t0=time.time()
try:[*PB._rich_progress_bar(delay(iter('?'*dt),.1), bar_type='on',size=dt)]
except:print(f'{time.time()-t0}s :) cancel'); sys.exit(1)";}

zenity-sel(){ s=`cat`; test -n "$s"&&zenity<<<$s --title "$1" --list $(eval echo --column={$2}) $3;}
pkgcSel(){ k=$(pkgconf --list-all | grep -P $(sed 's/lib/(lib)?/' <<<$1)|sed 's/ \s*/\n/'|zenity-sel "Debug package $1" cffi,usage)||return
for fp in $k $1/$1 $1 $k/lib$1/$1; do cpp -undef $(pkgconf $k --cflags-only-I) <<<"#include <${fp}.h>"|grep -v '^#' >sel.h &&break; done
(sleep 5&&sed -E 's/__attribute__[^;]*//g;s/__(inline|restrict)//g;s/typedef .*va_list.*//g;s/\w*va_list/.../g' -i sel.h)&
echo "import cffi; ffi=cffi.FFI();ffi.cdef(open('sel.h').read()); C=ffi.dlopen('$(pkgconf $k --libs)'[2:])"
#fuck u cffi, what <cdata>? Is strconv&cdef(errItem=ignore) that hard?
}

这样,您可以快速阅读调用帮助: for c in python node ruby lua "kotlin -h" "git init" pip sed awk grep nano bash;do ? $c; done
或者,下载存储库及文件 uc cd https://github.com/hyprwm/Hyprland?d1
uc ls https://mirrors.ustc.edu.cn/xbmc/releases/android/x86/kodi-20.2-Nexus-x86.apk

切换文件夹 ? a b/{1,2} c/ (在jupyter)安装依赖 ? import srt
🎁 允许用py调用系统上的.so 库如 pkgcSel caca alpm

作业:用文尾的知识,为mans编写自动补齐生成
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…
😍 pip install 的rich进度条真的太酷了,怎么就没人把它移植给下载管理器呢??

同理,bash-completions 其实是包维护者手动弄的, 可是 shell param 就两种模式,GNU甚至连git init这种调用链式都不会搞
这个完全可根据 cli -h 自动生成
bash的开发者也不懂事,list complete 应该用 ./a.sh '-s*' 的形式来查询,这样用户和中间商也能沾点光,而且非常UNIX。 分成什么补齐脚本简直画蛇添足

可能它们在写python里自带的功能,还是太忙了。 唉,明明补好对象模型,就能解决的问题,非要调用命令 🙄
1
duangsuse::Echo
— CLI程序服务 getopts; complete 用于获取短参数和提供补齐。少数人用while shift/read;case 来解析 还有一个select in ; do,和py2 print 是异曲同工之败笔,请 ->展示zenity的所有功能,并生成一个简短的MC风格的文字冒险 #!/bin/bash while getopts ":n:s:err" opt; do #?未知 :空 case $opt in n) n=$OPTARG ;; s) s=$OPTARG ;;…
#fuck u cffi, what <cdata>? Is strconv&cdef(errItem=ignore) that hard?

我之前有个dl-preload+ptrace nmhook库,本来可以学 frida.re py魔改二进制的,看来FFI界的烂API又要麻烦我了 😅
Frida is Greasemonkey for native apps
? import frida-tools
sudo frida-trace -i "readdir" telegram-desktop
#ffi.offsetof('struct dirent*','d_name')
log(args[0],Memory.readCString(args[0].add(19)));


变颜色说明参数变了,也只有这些信息量
后来结合 r2 -d $(pidof telegram-desktop); 每次选文件时Ctrl+C再 dc; V
发现 arg0 处啥都没,但后面是dirent* 的游标
查了一下才知道要通过fd读取,不过好像不是tg在读文件夹……
log(Memory.readU32(args[0]));

readlink /proc/$(pidof telegram-desktop)/fd/*

完全看不到在选的位置

#reveng 只是持久化还是要依靠 Xposed
Java.perform(function() {
var Button = Java.use("android.widget.Button");

Button.setOnClickListener.implementation = function(listener) {
listener.onClick.implementation=()=>console.log("Button onClick stopped");

// Call the original onClick method
return this.setOnClickListener(listener);
};
});
https://whitebird0.github.io/post/Frida的Python库使用.html#:~:text=值无法交给python继续使用
https://blog.csdn.net/freeking101/article/details/107489590

btw. 这个作者还用FastAPI暴露函数参数…… 说明 Frida.re 完全是不支持跨语言和ffi的
duangsuse::Echo
Photo
#好物 BV1ns421G7B4 hy300 linux版是148🧐
duangsuse::Echo
— CLI程序服务 getopts; complete 用于获取短参数和提供补齐。少数人用while shift/read;case 来解析 还有一个select in ; do,和py2 print 是异曲同工之败笔,请 ->展示zenity的所有功能,并生成一个简短的MC风格的文字冒险 #!/bin/bash while getopts ":n:s:err" opt; do #?未知 :空 case $opt in n) n=$OPTARG ;; s) s=$OPTARG ;;…
#py #code snake 贪吃蛇,最近很忙放着待改
import termios as TTY,copy, sys,time, numpy as np

from contextlib import contextmanager
from dataclasses import dataclass as d
@d
class tty:
fd:int
@property
def Is(_):return TTY.tcgetattr(_.fd)
@Is.setter
def Is(_,v):TTY.tcsetattr(_.fd, TTY.TCSADRAIN, v)

@contextmanager
def swap(x,r, f):
v=r.fget(x)
try: r.fset(x,f(v1:=copy.deepcopy(v))or v1);yield
finally: r.fset(x,v)

sdf=lambda w,h,f:np.fromfunction(lambda x,y:f(x-.5*w,y-.5*h), (w,h))
sdQuad=lambda r:lambda x,y:abs(x+y)+abs(x-y)-r
def snake(a=sdf(15,15, sdQuad(10)), fps=2):
a=np.vectorize(lambda P: 1 if P>2 else 0)(a)
n,m=a.shape; P=0;dP=1
kbd={'a':-1,'d':+1,'w':-m,'s':+m,}
def ADWS(a):a[3]=a[3] &~ TTY.ICANON|TTY.ECHO; a[-1][TTY.VMIN]=0
def f5():
nonlocal P
P+=dP;a[P//m,P%m]=0
print(a)
with swap(tty(0), tty.Is,ADWS):
while True:
k=sys.stdin.read(1); dP=kbd.get(k)or dP
print(f'\x1b[{n}A',end=''); f5(); time.sleep(1/fps)

snake()
#bash #tool 测一测您的笔电电池,还有多少容量? 🔋
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`" ;}
#sysadmin Arch #linux 一次滚挂历程(差一点)
*原因:很久没滚,GNOME mutter wm莫名有了键盘焦点的bug。 未使用 -Syu 以至于为一些旧的包 --ignore icu 的升级,谁知xml依赖它呢?另外还 --overwrite'jupyterlab/*'
*差点滚挂: 不能 systemctl restart display-manager ; pacman -S 启动不了!而且我的tty1开的是支持中文的 cage kitty (虽然不会bootloop 🙉 并非btrfs,libc 的那种死亡panic)

众所周知,所有非 gcc -static 软件,都是靠 ld.so 查/usr/lib C语言全局表,其重要好比glibc之于bash或gtk之于Ubuntu
ld虽然有 LD_PRELOAD 同名替换hack,却无法以 LD_BIND_NOT 来避免不必要的.so 文件/版本缺失,导致「极其重要的pacman完全无法运行,即便没用到那 libxml」
ldd 也是DFS算法连tree可视化都没有的主 😅 LD_DEBUG=all 性能贼慢,还不如许多黑客软件懂UIUX

😅看起来,pacman 莫名其妙地dlopen(xml)了,其实都怪 archive.so 错误地未使用 gcc -rlazy 来惰性链接xml (RTLD_NOW)
readelf -d `whereis pacman` #PLT 节
标记 类型 名称/值
0x0000000000000001 (NEEDED) 共享库:[libalpm.so.14]
0x0000000000000001 (NEEDED) 共享库:[libarchive.so.13]
0x0000000000000001 (NEEDED) 共享库:[libc.so.6]


首先当然是祈祷icuuc.so.75 的函数表没差异, cp .old .new 但失败
那就只能手动下载、补充安装icu 。gio mount -rl 查不到MTP安卓,U盘不知为何lsblk不出,只好用http上传
? import uploadserver 
ip a|grep 192.168.


然后用tar -xf *.zst; 手动cp缺失的.so文件们,直到能启动 pacman -U

教训: libc toolchain 真是傻逼,pacman它根本没用XML解析器,XML也完全没必要强制 International Components for Unicode library !
然后升级一定要-Syu
然后CPython的httpd,xml API真是神

#learn ELF
https://lecoding.com/post/2016/linux-dynamic-lib-lazy-load/
https://yxj-books.readthedocs.io/zh-cn/latest/programming/ProgrammerSelfCultivation/ch07.html#plt
https://www.coder.work/article/8000423
//cc  a.c  -zlazyload -ldl -lcaca
#include <stdio.h>
#include <dlfcn.h>

int main() {
printf("Lazy loading demo program.\n");
void *m = dlopen("libcaca.so", RTLD_LAZY);
dlclose(m);
}
glibc 支持lazybind,无法lazy mmap 。你可以用 patchelf --remove-needed
https://github.com/NixOS/patchelf/blob/7c2f768bf9601268a4e71c2ebe91e2011918a70f/src/patchelf.cc#L1719 😅明明可以暴露成json编解码的
duangsuse::Echo
#china #经济 国企改革会继80年代再次迎来下岗潮吗? https://youtu.be/IXBByK14x24?t=486 以指南针精视角 🐻 好处:提升0.5%利率就可以抹平卖地收益下滑,提升到私企的一半就能完全不收卖地税,利于维稳,把整个社会的资金效率提振到高于银行存款的程度,利于红色民主们的永不变色 坏处: 🇸🇬「官股民营」中央没法指明方向了,也动了鲶鱼阶级的根本利益 🇪🇺「全民持股,休克疗法」 损伤国库,又降低了人矿红利,养懒汉,又逼既得利益者上街! 指南针精认为,反腐的力度是比民主…
#经济 #china 回顾房地产,为啥房价不像08年,会再起不能? https://youtu.be/nHe-T5IcZAs?t=278

- 房价收入比>10年,本身有太多泡沫。泡沫用于土地财政,本质是50%税收,这和 🇺🇸 🇯🇵的次贷、失去30年 情况有大不同
- 消费降级。🇺🇸1刀GDP有0.7是工资, 🇨🇳1元GDP只有0.4 ,如今人矿开采的风光不再,中国人只会越来越出不起国
- 借钱太难,杠杆率太高,消耗了社会资本循环效率、劳动力再生产效率, 已进入通缩螺旋
- 3千亿太少,救市需要7万亿,政府接盘得没有诚意
- 我党没有意识到一些业主是需要「房债两清」而不是保交楼,没有调查民意
👍1