duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
Forwarded from Deleted Account
当然可以!这里是 Haskell 和 Python 的最短实现最长公共子序列(LCS)算法。

### Haskell 实现

lcs :: Eq a => [a] -> [a] -> [a]
lcs xs [] = []
lcs [] ys = []
lcs (x:xs) (y:ys)
| x == y = x : lcs xs ys
| otherwise = max (lcs xs (y:ys)) (lcs (x:xs) ys)

-- 示例
main :: IO ()
main = print $ lcs "AGGTAB" "GXTXAYB"


### Python 实现

def lcs(x, y):
if not x or not y:
return ""
if x[0] == y[0]:
return x[0] + lcs(x[1:], y[1:])
return max(lcs(x[1:], y), lcs(x, y[1:]), key=len)

# 示例
print(lcs("AGGTAB", "GXTXAYB"))


这两段代码都实现了基础的递归 LCS 算法,当然对于长字符串来说,效率较低,可以进一步优化。希望对你有帮助!😊
Forwarded from Deleted Account
要在 Android 项目的 build.gradle.kts 文件中配置 .kts 源码的编译和引用,可以按照以下步骤操作:

1. **确保项目结构**:将你的 .kts 文件放在项目的 src/main/kotlin 目录下(或你希望的位置),例如 src/main/kotlin/com/example/myfile.kts

2. **修改 build.gradle.kts 文件**:在你的 build.gradle.kts 文件中,添加如下配置:

   import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
id("com.android.application")
kotlin("android")
}

android {
compileSdk = 33 // 或你希望的 SDK 版本

defaultConfig {
applicationId = "com.example.app"
minSdk = 21
targetSdk = 33
versionCode = 1
versionName = "1.0"
}

buildFeatures {
compose = true // 如果使用 Compose,设置为 true
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

kotlinOptions {
jvmTarget = "1.8"
}
}

dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10") // Kotlin 依赖
// 添加其他依赖
}

tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xscript" // 添加编译选项以支持 .kts 文件
}
}


3. **在 Main 中引用**:在主活动或任何 Kotlin 文件中,你可以这样引用 .kts 文件:

   // 示例: 引用 myfile.kts
val result = eval("src/main/kotlin/com/example/myfile.kts")


确保在运行时可以找到并执行该 .kts 脚本。如果有任何问题,可以查看运行日志,以确保一切配置无误 😊

按照这些步骤,你就能够在 Android 项目中成功使用 .kts 文件了!如果你有任何具体问题或错误,请随时告诉我!🚀
Forwarded from Deleted Account
要在 Kotlin 中编译 .kts 文件并将其生成为 fun,你可以使用 Kotlin Scripting API。以下是一个基本示例,展示如何实现这个过程:

### 步骤 1: 创建一个 .kts 文件

首先,创建一个 .kts 文件,例如 script.kts,内容如下:

fun greet(name: String): String {
return "Hello, $name!"
}


### 步骤 2: 使用 Kotlin Scripting API

接下来,在你的 Kotlin 应用中,使用 Kotlin Scripting API 来加载和执行这个脚本。示例代码如下:

import kotlin.script.experimental.api.*
import kotlin.script.experimental.host.*
import kotlin.script.experimental.jvm.*
import kotlin.script.experimental.kotlin.*

fun main() {
val scriptFile = File("script.kts")

val compilationConfiguration = ScriptCompilationConfiguration {
jvm {
dependencies("path/to/kotlin-stdlib.jar") // 添加必需的依赖
}
}

val evaluationConfiguration = ScriptEvaluationConfiguration {
// 可以在此处配置和添加额外的环境
}

val script = KotlinScriptEngine().eval(scriptFile, compilationConfiguration, evaluationConfiguration)

// 调用脚本中的方法
val greetFunc = script.scriptInstance::class.members.find { it.name == "greet" }
val greeting = greetFunc?.call(script.scriptInstance, "World") // 调用 greet 函数
println(greeting) // 输出: Hello, World!
}


### 步骤 3: 运行代码

确保你的环境中配置好 Kotlin 和所需的库。运行这段代码,它将读取 script.kts 文件并调用 greet 函数。

### 小结

通过这种方式,你可以在 Kotlin 中动态加载和调用 .kts 文件中的函数!🎉 如果有任何问题或者需要进一步的帮助,请告诉我!😊
#bash
alias DEB='cu sudo dpkg -i --force-all'
cu(){ 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(" ")' $*);}

cnf-x() {
[[ ! "$@" =~ ' /' && "$@" =~ / ]]&&cd "$(mkdir -p $@;echo $1)" ||([[ $1 =~ ^[0-9,]+$ ]] &&cut -d' ' -f $1|sed -nE "$2p" ) ||
([[ $1 =~ ^\. ]] &&jc ${@:2}|tee e.json|jq -rcM "$1"|sed '1s/^/(/; $s/$/)/'|node -p) ||(ev=CNF$1;[ -n "${!ev}" ] &&${!ev} "${@:2}") ||
([ -z $(command -v $1) ] &&command-not-found $1) ||(
for opt in "--help" "-h"; do $@ $opt 2>&1|cnfx-HL &&break; done
sleepHL 2 &&for doc in "tldr" "man" "man -k"; do $doc $1 &&break; done
)
}
alias ?=cnf-x grepp='grep --color=always -P'
CNFimport='pip install -U'; CNFjs='sudo npm -g i'; CNFdoc='docker pull'
CNF_fmt='[[/(?<=\s-[\w-.]+)(( | ?[=<\x27[])[^\s:,,]+)/g, 33],[/,? ?(\s-[\w-.]+)/g, 32],[/([A-Z][A-Z0-9_]{2,})/g,34]]'
command-not-found() { sudo pacman -S --noconfirm --needed $@ ||pacman -Ql $@|grepp '/etc|lib/'; pkgcSel $1; return 0;}
cnfx-HL(){ node -p "$CNF_fmt.reduce((str, [A, B]) => str.replace(A,\`\x1b[1;\${B}m\$1\x1b[0m\`), process.argv[1])" -- "$(cat)"; }

sleepHL(){ python -c "$HL_0
dt=$1*10;t0=time.time()
try: goPB(dt,delay(iter('?'*dt),.1))
except: print(f'{time.time()-t0}s :) cancel'); sys.exit(1)";}
wgetHL(){ python -c "$HL_0
for sh in hear(f'LANG=C {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; goPB(int(vp[0]),f)
sh.wait()
" "wget -dc $1" 'Length: (\d+)' "Converted file name.*-> '(.*)'";}
cliHL(){ ls;}

HL_0='import pip._internal.cli.progress_bars as PB, time,sys, re,subprocess as P, functools as F
goPB=lambda n,su: [*PB._rich_progress_bar(su, bar_type="on",size=n)]
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
def delay(xs,dt):
for x in xs:yield x;time.sleep(dt)
'
xfor() { for x in `sed 's/\n/ /g'`; do $@ "$x"; done ;}
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?
}
# 'isatty[]=0;; readdir[_,"/"]=0'; export GTK_DEBUG=interactive LD_DEBUG=all
frida-cffi(){ ls;}
ytdl-spi() { python -c 'import yt_dlp,sys
u=yt_dlp.YoutubeDL({"cookies-from-browser":True}); del u._ies["Generic"]

for x in sys.stdin:
try:print(u.extract_info(download=False, url=x))
except: print()
'
}
#f5 %.pyc; f5 /usb /clip


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`" ;}


bili-m4s() {
[ -f ls ]||for f in */c_*/entry.json; do jq -r '$U+.bvid+".png",.title,.owner_name,.bvid,(.downloaded_bytes/1024e2),.cover' --arg U $PWD/ <$f
ffmpeg -loglevel quiet -n -i $(dirname $f)/*/video.m4s -ss ${1:-1} -vframes 1 $(jq -r '.bvid+".png"'<$f); done >ls
zenity-sel 您要提取的缓存 thumb,标题,up,BV,MB,cover --multiple <ls #--imagelist
}
Forwarded from dnaugsuz
De Bruijn 索引。 https://magic.huohuo.moe/html/DBI.html

PLT人起名字也真是乱起,那么多抽象玩意(譬如Sum/Prod来表示 union{int tag; struct{}} 的,你是 Prolog 能DFS出所有BoolPair也就罢了, 没那个功能还硬套嘛。。)
DBI居然还是参考卡牌游戏的魔术

UUID,在ES6里叫 Symbol(),等价 new Obj。不过bash那种 $1 是不会冲突的,看了下,你大概把符号的"文本形式" 视为值了

(z.x. (z.x)) z 里(z.x), x本就是(_=> _.upval[1]) 的语意,而型参z.并不是"z"。
哪怕没有用嵌套KV做把ID解析到ValRef,至少也该知道替换不是对argName这些反射数据进行的。
可以说此问题的前提就是没有尊重AST scoping,[Str 的括号树]并不是lambda的本质, lisp本就缺少用于复用节点构成计算图的let (他们说用函数..),搞成递归数组就更空洞了

入.的自由变量,其实就是this变量, A.B. A+B 即 \2 $1+$0
DBI在apply(f,x)时 f变浅,x变深, (A. [A B.A]) 0 即 \ [$0 \ $1] 到 \ [0 \ $2]

确实不好讲,因为$2明明可以在代换时就替换为0,为啥既要重命名,又不绑定到闭包数据结构呢?

最后,解释器要100行…… 而且就是单replace()功能
好吧这就是java
duangsuse, [2024/8/13 23:33]
https://magic.huohuo.moe/html/EvalStrategy.html 这篇说 call-by-lazyName 也忽略了一个重点

()=> 的本质是对象,它完全能有非局部引用。 你为了实现 if(, print..) 这些越DSL的俎代庖的“优越性”,不遵循x86 ABI 这些规范传值,结果只能是更慢,而非少求值了几次。

设计一种东西总得谈概率吧? a||b||c 确实能节省,但autoclosure这种,有必要给人讲明白,而不是为了解决而解决

duangsuse, [2024/8/13 23:45]
https://magic.huohuo.moe/html/Algeff.html

也没必要写成 catch{e.resume} 这么奇怪的形式。Eff 就是静态的把catch{} 依赖注入给throw()而已
那么,如果不需要cont,直接throw again 就行

只是把java的组件级依赖注入改成语句级,然后yield给一个根本不需要new函续体的handler。

Exception 之所以不叫Error,就是因为它是一种可以默认传入的函数值参数,就像 open fun
非局部返回只是一种愉快的副作用,至于Retry和替代Promise什么的, Algebiac Effect 显得高射炮打蚊子。 异常+协程 仍然是最优解

>发生记录日志的作用,可以预先写一个输出到标准流的的执行器(Handler)一个输出到文件的执行器然后在调用函数的时候按需组合。这也就是它是代数的(Algebiac)的原因

这理由也够扯的。 「代数」?线性代数够普世吧? 它和编程界的组合compose可一点儿关系也没有,丑陋的矩阵处理
挪用Java界的依赖注入文化就算了。 Effect 根本不能区分longjmp() 和真正要切换有栈协程的优化情况
哪怕是C++和Linux 引入的协程/进程上文切换/fork,往往也比(多发)函续体、CPS 这些所谓理论强多了。一个自动传回调讲成啥了。

duangsuse, [2024/8/14 00:18]
https://magic.huohuo.moe/html/Parsec.html
嗯,又是一个被复杂化的简单问题。 就像某些CS课,“能够写编译器的编译器呢!”

不过是重造了x86调用栈和forif的轮子,和那些把链表当列表处理的人一样。并不重视语意,只是用他们的“特色”捆绑一些最基础的工具。
parser只是编译器的第0步,而且是完全能省略的;然而有人觉得那才是最重要的。

在谈parser是什么前,你的第一页要说明输入输出是什么格式,比如本文用正则来对照就很好
“简单是可靠代码的先决条件,而非可靠的牺牲品——Dijkstra, 发明递归的人”
“优雅的程序与它对应的数据,在读写前直观绑定——Daniel Friedman, 箭头函数的先驱”
“业界有两个设计软件的方法,一种简单大方,明确没有堆砌缺陷,一种繁琐抽象,连缺陷都难以写明确——Hoare, 快速排序之父”

https://t.iss.one/dsuse/18717
Forwarded from dnaugsuz
> 计算机发展的历史就是人类尝试控制复杂度的历史,运行时有时间复杂度空间复杂度,编写时有代码复杂度和逻辑复杂度。封装抽象出的黑盒系统可以把复杂度分离到不同部分,而每一个部分的复杂度都能控制住人脑能接受的范围。模块化使我们能在不同项目间共享复杂度。而良好的编程习惯可以让代码变得有序,减少代码层面的复杂度。运行时的调度、垃圾收集利用算力分担手工管理的复杂度。
https://iota.huohuo.moe/OO-in-C.html#:~:text=Java%20不支持像

噗,原来你们(例如龙书封面)也知道复杂度是个坏事啊

可你们起的术语、写的文章,在我看来根本是在违背自己的哲学啊。
import this 用凯撒密码加密了源码,但Pythonic是真实的。包括中文PLT却很少强调「编程的理论是为了消灭复杂度」这点

其实 magic.huohuo.moe 的许多文章,例如 F-Bounded Polymorphism(Self type) 都可以有一句话提纲,让用户有个前置印象再去看
再比如 HKT<List,Int>, Java泛型本质上是繁多类型(List literal as type)而不是常量函数, 不过 Higher Kinds 最终的价值也是把'*'填完生成一个Matcher去检查字面变量, 那就是用HKT1<P,T>强转了

不过介于我看的这几篇都不得要领,在某种理论上甚至不如Lua这些工业糖精聪明,我也没时间去读剩下的了
比方说吧,JS Bool, Error, List, 这些明明都能用 [12,3].As(x=>).or("empty"); fetch.As(e=>"fail", x=>x.body) 的"箭头"去处理

这就是FP的category,而且不需要引入任何新概念("compose?") 或"不准确的类比"。它们都有零元(x=>x, false, []..)和join(e.g. x=>[x]) ,而且当然能 A=> B=>curry(A+B)
结果是语言的forif,filter map可以被逻辑查询替代,而且是符合4定律的: 哪怕 Functor[A] 变成 A,Any也不能变回Any 。js自带结合与组合律

而FP呢? 除了空壳还是空壳。 如果说Functor只是和C指针一样拙劣而且用途更小(无所不包,但缺斤少两,因此才被淘汰) 的抽象,你们也不肯改编吧

我不知道CS有什么理由向癖好「未定义先使用」的数学书们学习。他们根本不知道明确与严谨该怎么写,他们甚至没有与几百个人合作写过1本书("交流" 可不是件简单的事!),可以拍脑门地使用各种希腊符号(现代物理已经减少了rho这种歪七扭八的东西)。
Forwarded from dnaugsuz
https://magic.huohuo.moe/html/ADT.html
想起行列算数(RowCol TypIs)了
类型是一张表格。横列是A,B..或具名的值,纵行是它的构造样板,也就是校验函数
用??语法打开或新建表格,添加函数列或构造样板。只要参数覆盖了类型签名对应的列,就能调用操作

?? Col
Student -name-id(Str Int)
#共有str*int种可能性,也叫乘积类型
Vec2(N N)
Date(Int Int)

- say -An(Student) "{name}({id})"

?? SchoolPerson
-name Str
Student -id(Int)
Teacher -office(Str)
#共有(学生+老师)种可能性,也叫求和类型

?? Bool
YY; NN
?? Nat
O
十1 -An(Nat) #peano,链表长度数
two O.十1.十1

?? [T Link]
Cons -x-?xs(T Link)

?? Json fn # 以允许继承,即便已有构造器
Lit -?val(Bool) #YY,NN,NO

?? Json
Lits -a([Json Ln])
KLit -k([Str Json KV])

GADT(泛型adt)好歹把 Tagless和Final讲一下啊
btw. Tagless是指用virtual虚表取代 type tag 做union的意思
最开始年轻的牛和猴,俩一起反天,基本没有对手,但是牛有老婆,有牵挂,天庭想阴招坑了铁扇让她怀孕骗老牛半路跑路,结果剩下一个猴被如来搞了,牛发现娃不是自己的种,认为铁扇骗自己,坑了自己兄弟,跟铁扇闹翻了,铁扇解释自己也是被逼的,也接受不了就跟牛分居了,牛也一怒之下跑去找玉面狐狸不跟铁扇玩了。
猴子被搞过了几百年开始西游认为反天可能不是好办法,觉得可能进编制才是正道,火焰山又碰上牛,用尽手段逼牛进编制,牛本来也认命了,猪跳出来说你老婆我杀了还扒光看干净了,牛又怒了,结果一个没干赢一群又跪了,进编制干活去了。
最后猴进了编制发现不是自己想的那回事,该被人搞还得被人搞,又开始闹了,这时候牛也是成熟的编制人员了,就跟着二郎神把猴子搞了分尸了。
然后红孩儿发现了自己不是牛的种,自己差不多被人灭门了,找牛要猴的尸体牛不给,反手把牛给搞了,牛不愿意真弄死红孩儿也不敢真给他尸体就干脆不反抗让红孩儿囚禁,然后天明人来搞事了。
牛一辈子全选错是说
猴和牛反天的时候顾及老婆怀孕选择半路跑路,他不跑难说成了,选错了第一次。
猴逼着牛归顺的时候为了老婆被杀选择反抗,他忍了就没后面的事了,选错第二次。
牛跟着天庭搞死猴的时候为了讲兄弟义气不肯下死手,真玩命把猴弄个形神俱灭,给天庭当狗也就没后面啥事了。选错第三次。
结果就是家破人亡,妻离子散​

看看你吃的加生命的延寿仙丹是用什么材料做的,玲珑内丹,有修为的妖怪才能结出的内丹,天庭众神想长生不老除了九千年的蟠桃会,就只有延寿仙丹,仙丹是妖怪内丹做的,你仔细想想​
大圣戴上金箍,箍住的不但是大圣的自由身,更是大圣逍遥自在,不服强权,敢一棍子打上凌霄宝殿的侠肝义胆;唐三藏几逐悟空,逐的是悟空嫉恶如仇,要将魑魅魍魉全都打的魂飞魄散的血性,从花果山回来的是悟空,但是是没有心的悟空;灵山一释,摘下的是孙猴子的金箍,换回去的却不是孙猴子的自由身,早在船上褪去凡胎之时,那金箍就随着沉没的肉体,一起沉入了孙猴子的心,九九八十一难,难的是唐三藏?难的是不会斗战的猴子,没有佛心的圣佛,这本书成书的年代,正是佛道鼎盛之时,可见南朝四百八十寺的盛景,无论皇帝尊道灭佛,还是尊佛灭道,为了皇权而服务的佛道都已经变了味道,它们不是祈福的咒语,不是慈悲的心怀,而是天王老子禁锢万民的无形金箍,所以做书之时,其心中必是怀着对神佛害国的厌恶,怀着对被箍着的百姓的怜悯所做的。​

那些神仙需要的永远只是弼马温,弼马温永远只能管理马匹,想要升迁绝无可能。神位就是金箍。猴子说他能摘了金箍,二郎神杨戬也想摘了自己的金箍所以他暗中帮了猴子一把

其实可以简单看作,各种超能力者打架,而这些超能力者大多数都是蔑视人命的,不管是佛教的自生自灭,还是道教的清净无为,本质上就是超能力者(神仙佛魔妖)对普通人类(人界)的剥削,
佛道里面也不是铁板一块,像是弥勒和须菩提,就像个中立单位。但其实神仙佛和普通人是一样的,也有七情六欲,只是自诩为神仙佛高人一等,所以仗势欺人,不管是天庭还是灵山。​

要搞这套阴谋论是吧,那好你们tm神仙妖怪都是一帮什么货色?你孙悟空又是什么货色?反抗?斗争?革命?革个几把毛!你悟空天生就是灵猴妖王,地方豪强,目的就只有一个摆脱朝廷掌控,想自由发展。跟人类有什么关系,人类纯给这帮神仙妖怪艹的,真要反抗就该人类荡平了这些什么神仙妖魔,包括你孙悟空,什么玩意儿?争来争取谁坐皇位有什么区别,更何况猴子就是像打破现有秩序,自己仗着自己的资本去逍遥自在。独留给世间一片混沌,要革命第一个杀悟空。你还想着自己是孙悟空呢?还是先挑挑自己用那种方式被烹调吧。​
Forwarded from Rachel 碎碎念 (Rachel 🐨)
最近才发现 ffmpeg 提供了 Android 设备的 MediaCodec 支持,可以调用底层硬件加速编解码,兴冲冲地用手上的小米 13 压缩 Big Buck Bunny,结果发现高通提供的 h264 编码单元质量就是一坨…

如果各位想试试看的话,可以在 Termux 里安装 ffmpeg,使用 ffmpeg -codecs | grep mediacodec 看 ffmpeg 支持的编解码器,然后将视频的 codec 换成对应 mediacodec 的版本即可,例如一个 libx264 的视频可能是这样:

ffmpeg -i input.mp4 -c:v libx264 -vf "format=yuv420p" output.mp4

使用 h264_mediacodec 编码的话,就写成这样:

ffmpeg -i input.mp4 -c:v h264_mediacodec -vf "format=yuv420p" output.mp4

它应该会自动调用最合适的硬件编码器,如果需要手动指定,也可以下载一个 Codec info ,或使用 Device Info HW 这类工具查看设备的编解码器信息,例如我希望指定图 2 中高通提供的 avc 编码器 c2.qti.avc.encoder ,那么:

ffmpeg -i input.mp4 -c:v h264_mediacodec -codec_name c2.qti.avc.encoder -vf "format=yuv420p" output.mp4

上述工具还可以查看编码器具体支持的参数等,例如高通这个就支持恒定/可变比特率,但不支持 CQ/CRF;当然,不同厂商甚至同厂商不同芯片的硬件编解码器,都可能有巨大的差异,欢迎各位尝试后分享在评论区!

视频来源: https://bbb3d.renderfarming.net/download.html ,感谢群友提供
Codec wiki 中关于 MediaCodec 的文档: https://wiki.x266.mov/docs/encoders_hw/mediacodec
Android 官方的 MediaCodec 文档: https://developer.android.com/reference/android/media/MediaCodec
#linux #java duangsuse, [11/25/24 9:35 PM]
我也可以直接贴个 {@type:com.sun.rowset.JdbcRowSetImpl, dataSourceName: "rmi://localhost:1099/Exploit"}

你们觉得这对技术水平有帮助吗? 所以你打算怎么修, blacklist it?

Science Yuan, [11/25/24 9:36 PM]
他是想说 fastjson 的作者完全不懂什么是面相对象

duangsuse, [11/25/24 9:36 PM]
fastjson 的安全问题确实出在AutoType,但问题不在这几个exploit上

duangsuse, [11/25/24 9:37 PM]
总而言之,这作者就是个性能迷,偏偏它还不如Rust懂数据结构

duangsuse, [11/25/24 9:39 PM]
javaer一直有个错得离谱的观点是,只要劳资写的都比JDK或apache快,tmd

dragove, [11/25/24 9:39 PM]
反正后面的版本默认关闭autotype,有白名单机制,fastjson2也是,感觉都是旧事了

duangsuse, [11/25/24 9:40 PM]
怎么不说PHP SQLi后来PDO也防了呢? 没有直接拼字符串方便,他们不会修的。关键是这人连APT或KSP都不会写,还处理静态结构

duangsuse, [11/25/24 9:42 PM]
Spring最开始还要写好XML才能玩,后来有人做了SB自动配置, 这货是刚学会Tokenizer就想揽瓷器活,真是不给下游加班的着着想

duangsuse, [11/25/24 9:43 PM]
C又没有C++ RTTI,啥都是指针啊,数组也是

Linux 的进程隔离,就是为了修C的这些毛病和while(true)给libc弄出来的虚拟机

Sherlock Holo, [11/25/24 9:44 PM]
那么为什么有方法和接口的语言还这样搞呢

duangsuse, [11/25/24 9:44 PM]
没办法,先辈的罪,你看Rust和py的最佳实践有没有%s

duangsuse, [11/25/24 9:45 PM]
fastjson不就是这种「自己造轮子,别人背黑锅」的典范么
我看Google写一次就行了,就像Blink,别人啥都不要写,省得出bug

有几个人能写出 ffmpeg 作者 Bellard.org 那样优美的代码

duangsuse, [11/25/24 9:48 PM]
JS可以抛弃掉alert()和XHR这些卡调栈API, 不会影响任何应用正常运行, VSCode单线活得好好的

duangsuse, [11/25/24 9:52 PM]
我看到的是,现在包括go func; Kotlinx.coroutine,都为了「高并发」把与 userspace 分离的线程拉回了 userspace
至于Android呢,它的存储管理是用FUSE, 又是 userspace

duangsuse, [11/25/24 9:53 PM]
而Linux自己呢,被syscall(CGroup)沙盒容器化得不成样子,好像每个pid都root也能正常工作
我还发现有人喜欢玩eBPF ,这是一种在「内核里」eval用户脚本的方法,比油猴高级不到哪去
完全不需要是现在这个样子

duangsuse, [11/25/24 9:56 PM]
只是取信于轻量化的技术罢了,比如 a.filt(x=>x<0) 胜于 select x from a where x<0

duangsuse, [11/25/24 9:58 PM]
他没说错啊,那时候Docker还没火呢。

现在Python和NPM都开venv,难受死了,真是麻烦

isekiのChannel, [11/25/24 9:59 PM]
https://www.yinwang.org/blog-cn/2019/08/19/microkernel

isekiのChannel, [11/25/24 9:59 PM]
我的理解是他试图利用编程语言的高层次抽象机制,来保证安全性

duangsuse, [11/25/24 10:00 PM]
错了吗? eBPF, WASM, 甚至前段时间出问题的 CrowdStrike ,哪个不是这样

duangsuse, [11/25/24 10:02 PM]
以前我们以为有apt;rpm这些就不用打包apk,exe
没想到面对 AppImage.org 和npm黑洞,传统容器化一败涂地……

duangsuse, [11/25/24 10:04 PM]
行业百草枯,啧啧
我看过ArkTS,只能说设计模式,脑子被驴踢了
Java8好的精髓没学到,融合上TS的类型体操,糟粕抄了一堆,也配叫仓颉

duangsuse, [11/25/24 10:09 PM]
也不全对,比如,你学Android开发就会知道 Activity, Bundle, Fragment 这些,学React就知道状态保存管理
这些UNIX里都有,但都不精。 Bundle就是URLParams或os.environ,Intent就是PATH.so.的main(..) ,State就是各种rc,/etc/conf ,其实每个日用的系统,都有一套自己的「UNIX」

最典型的就是Plan9,它为Linux贡献的/{proc,sys} 文件系统与叠合挂载(bind, overlay..),今天还被用于Termux等跨端容器
Termux.org 首页的那个htop, 就是依靠这种真·一切皆文件 获得的跨平台性
duangsuse, [11/26/24 10:25 AM] #java
因为OOP强制要求你override方法签名相同, FP只要有 x:Coin as Money 就够了

duangsuse, [11/26/24 10:26 AM]
我也是今天才知道有这么个要求,应该是避免人 override fun f(xx:Any) 设计的

duangsuse, [11/26/24 10:30 AM]
我是有点不喜欢OOP把一个kwargs补齐写成override这么麻烦, 和public一样凑字数
JVM这个getXX文化有意思,因为JS都是用defineProp元编程从不手写,另一种凑字数。

无非是为了子类能加算式,但实际上DTO根本不会有那么多逻辑,最多有ext fun ,所以这「封装」就是写着搞笑的,安全是自欺欺人,害了Kotlin

这种非常不好的习惯影响了pwsh和Qt,可谓Java的隐形八股,Gson这些东西非常清楚地摒弃它们
因为有这玩意 Javaer 还以 XXBuilder().new() 为自豪呢,大家都懂那连 T().apply{}/copy{} 都不如,更不必kwargs

abstract fun f; class T(val x) 和 T({f: wtf}) (0) 是没有啥区别的

C++修正了C语言".so对象" 不能跨线程、跨配置的问题,我看Java也没有修正abstract函数的这个低 compose 问题

duangsuse, [11/26/24 10:36 AM]
包括 ext fun or class 的设计,比如 InputStream$Filter 吧,我觉得很适合写成
inner class InputStream.Filter(x:Char) {
fun read()= if(super!=x)...
}


而不是extends,既浪费命名空间也要手动加 fun File().inpStream().. ,但OOP就有这个限制
如果Kotlin要这么糖, 就需要额外生成一个 override fun 去代理构造器

duangsuse, [11/26/24 10:42 AM]
嗨,感觉这协变没翻译的必要, ?extends Any 有啥不好理解
duangsuse, [11/26/24 2:01 PM]
你说的不就是到处getset造成的问题吗,JSON读写下直接用不成了, is get has 的都不一样

duangsuse, [11/26/24 2:07 PM]
你说的3个class common val 必然是继承之外,多态的情况,那就是 sealed class 呗
如果单纯给每个class生成getXX, 其实和 fastjson 给每个对象@autotype 一样蠢,那就是JVM现在的尿性

duangsuse, [11/26/24 2:09 PM]
Ruby 的设计才真是天才,人家没有SQL注入问题,因为 eval(s) 会检查 s.taint? ,人家都有污点分析,直接从根源知道什么是安全的值,啥能是攻击者构造的

Ruby class 可以外部扩充,有元类单例,那才叫类,java的顶多叫 newtype / struct ,而且Ruby有区分编译期:sym ,有 Crystal-lang.org ,Java20都想不明白

duangsuse, [11/26/24 2:12 PM]
那只能说是RoR的开发者不懂这些对象内部机制, 反正Ruby的元编程技术是有目共睹的

duangsuse, [11/26/24 2:16 PM]
Vue和React对ES6 Proxy({}, 语法重载) 有所了解,作为架构师,这当然是必要的, 你不检查开销也在那

duangsuse, [11/26/24 2:17 PM]
不过它们有个问题,就是Proxy实际上不如defineProp明确,vdom实际上不如Signals细粒度绑定, 但喜欢玩魔法是人类的共性,能用就行

duangsuse, [11/26/24 2:19 PM]
React hooks 更蠢,还有一群数字人捧得跟神似的, 加个var都靠useState(0),真神经

ES6和kt为什么没想出这么能凑字数的术语, Java八股文写了20年也写出这种省脑筋费命的框架啊
duangsuse, [11/28/24 11:51 AM] #kt #plt
$$"$${order.product} costs $ $${order.price}"


好像就是为了解决标价&bash内嵌格式化的问题…… 呃,js Intl API
挺鸡肋

https://github.com/Kotlin/KEEP/issues/375#issuecomment-2052211773

非本地的 “break” 和 “continue” 挺好的,while 可以扔进历史垃圾堆了
[1 2 3].forEach{ if(it>2)break }
[1 2 3].filter@cont{ if(it>2)return@cont; print(it) }
//vs
let {
[1 2 3].forEach{ if(it>2)return@let }
}
[1 2 3].filter{ if(it>2)continue; print(it) }


duangsuse, [11/28/24 11:55 AM]
btw. 主题在 “when” 中的保护条件 这啥鬼翻译诶,不是说和 when(x){in}, when(x){is} 对仗吗

.: IfAnimal
- Cat-mouseHunter [YY]
- Dog-breed [""]

feed-u [IfAnimal]: u :.
Dog: feedDog(u)
Cat, u mouseHunter not: feedCat(u)
\: say: "Unknown animal"

feed (Dog "Snoppy")



sealed interface Animal {
data class Cat(val mouseHunter: Boolean) : Animal
data class Dog(val breed: String) : Animal
}

fun feedAnimal(animal: Animal) {
when (animal) {
// Branch with only primary condition. Calls `feedDog()` when `Animal` is `Dog`
is Animal.Dog -> feedDog()
// Branch with both primary and guard conditions. Calls `feedCat()` when `Animal` is `Cat` and is not `mouseHunter`
is Animal.Cat if !animal.mouseHunter -> feedCat()
// Prints "Unknown animal" if none of the above conditions match
else -> println("Unknown animal")
}
}


duangsuse, [11/28/24 12:03 PM]
-- Haskell code using pattern matching for comparison
data Animal = Cat { mouseHunter :: Bool } | Dog { breed :: String }

feedAnimal :: Animal -> IO ()
feedAnimal animal = case animal of
Dog {} -> feedDog
Cat { mouseHunter = False } -> feedCat
_ -> putStrLn "Unknown animal"


和Haskell比一下:总的来说,Kotlin 中的模式匹配在处理简单的类型检查场景中更直观明了,而 Haskell 的模式匹配则更加灵活和强大,能够处理更复杂的情况。每种语言在不同的情境下都有其优势和适用性。

duangsuse, [11/28/24 12:07 PM]
kotlin 挺有意思的,我还以为是 when(u.age) { >18 -> {} < 4 -> } 那种
看来避坑了
不过对这种情况是有类似for(x=;;) 的 when(val x=u.age) { x>18 的,没人用而已

duangsuse, [11/28/24 12:17 PM]
要我说,kt 应该把 when-is/in 语法数据化,就像把 when(x){A-> B->} 换成常量mapOf(),这样再加API来写序列化器、宏,不就没kapt那么多破事了?

现在 id=when(u) {is Animal.Cat if !animal wtf} 加if,如果再支持 infix fun, isEmpty 啥的,不好看, 如果一开始就是 val getID={ when it -> listOf(), notEmpty -> ; mapOf(), size>10 -> } ..
好吧,还是现在的语法简单

duangsuse, [11/28/24 12:32 PM]
Kotlin 对我来说有点像矮子里最高挑的, Haskell 这些的理论看起来很完备,在极少情况下语法很漂亮,其实连可变性(useState)和脚本自动化(py..)都无法处理 💭

kt在理论上虽比Go强太多(那货泛型/特化reifyT都是舶来品),看起来是默认不可变的OOP,API用起来像比FP更懂FP,却无法很好黏合二者。 Result,mapTo, let also apply run 并不简单, listOf for-in val var override 写起来也心累

我对它最大的印象停留在 T?. xx ?: !! infix/operator fun T. T.()-> 和 when-is/in 这些必要特性上(也包括这次KT2.1更新的 inlined nonlocal jump),似乎只在这些地方它比py更好,而OOP class的扩展完全是拖后腿

比方说, Exception 明明可以默认用 Nullbility 的方法处理,就像 runCatching{}?. 做的;sealed 明明应该写成 enum Lit { A(str) B(int) } 那样 —Kt enum 本来就可以带field,而 inner class 明明可以用于生成 override fun A.PairTo(:B) 这种原型工厂
这些都是OOP的三脚猫语法,因此 OOP有十几种「设计模式」,意味着语言比工程需求,落后了七八种语法/数据模型
Kt很巧妙的只解决了null, ext fun/DSL, Lombok 这几个问题,甚至跨平台、协程、就连最基本的序列化和CLI(vs fire.py ?)都是残的, 完全悖离了语法简明性,变成Java第二 ,在这些领域败给了民科Go

现在有Rust吹觉得它们可以在性能和内存安全上胜过py,就像 mojo-lang? 科学家们不会在乎这些不影响语意的符号的。 其实「多美元字符串插值」 是什么? .. 只能说,和ES6的防SQL注入字符串,没法比。
#plt duangsuse, [12/2/24 6:49 PM]
其实中国 OS/compiler 还挺好的,就是冷门而,今天就看到一个挺出乎意料的文,推荐

duangsuse, [12/2/24 6:53 PM]
AI在这方面最初挺好的, 恐怕比科班更简洁明确,现在不知道怎么样

duangsuse, [12/2/24 6:55 PM]
说起来玩东方和JOJO的技术人也挺多,acg人均好奇心爆棚吧

duangsuse, [12/2/24 7:00 PM]
这作者还被一个莫名黑子骂过呢,哈哈

def:yield 就是自动生成的 iter()able 啦, 做题家就是喜欢在茴字的写法和那两块钱上说气化……
https://t.iss.one/dsuse/20203 讲过他说的内容

https://mp.weixin.qq.com/s?__biz=Mzg3NTczMDU2Mg==&mid=2247531983&idx=1&sn=2d05ea71d3f45cf2ab08151f640a496c

duangsuse, [12/2/24 7:14 PM]
没有什么正反馈很难坚持。拿我自己来说, 我目前毕业即失业,虽然日常开销就吃饭,但经济主导权不在我,连继续都难。 对在职开发者,做文章都是有开销的

而且单纯从 C source 来分析一个 parser+codegen+bytecode 并不好。拿《Lua的设计与实现》说,C连 enum Val{A(int)B(str)} 都没有,char s[N]里N运行时都能被擦除,又有作秀般的 _M_ 啊._wtf 啊的无意义变量名,自己分析起来废话难免多

应该多学几门语言,比如《Ruby元编程》《Ruby under microscope》,跳出语法和私货来分析它们,这样你才能站在和 Guido 平等的角度揣摩利弊,而不是作为CPythoneer在细节上被拖累死

_parse_string 建议外提一下, ESCAPE_CHARS[escape_char] 也可以用 if None 或 lookbehind Regex (?<\\) 的逻辑做,减少forin这样的硬结构

btw. py界标准做法好像是50行 https://github.com/pyparsing/pyparsing/blob/master/examples/jsonParser.py#L51
Forwarded from dnaugsuz
没有很厉害啊…… JSON.org 语法是这样,10行而已 ☺️
变量名基于 sikxfaned久类型: str idx kv any fn ary nItem eTree decimal

JSON  X
X (S|D|{S:X ,}|[X ,]|true|false|null)
S '"' ([^\\"]+|\\Esc)* '"' #G-
Esc ["\/nrtfb]|u hex{4} #Gk

D num (.int)? ([eE]int)? #Bn
num '-'? ([1-9]int|[0-9])#Bn

hex [0-9a-fA-F]
int \d+
ws ' \n\r\t'*
# ws:每小写符号前要跳空格, #高亮tag 内禁用


拿「语法D」为例,搞个流
strm=([s], i=0)=>(n,took)=>{ let k=s.slice(i,i+n); i+=n; return (took===NO)? k : (took)? took(k) :  (i-=n, k) }

NO=null, ps={parser:'json'}
ps.D=(s, it=0,shr=0)=>{ //D num (.int)?
while(+s(1)) it=it*10+(+s(1,NO))
if(s(1)=='.') { s(1,NO) // 这些逻辑可以靠Combinator复用
for(;+s(1); shr++) it=it*10+(+s(1,NO))
}
return it*Math.pow(10,-shr)
}
ps.D(strm(['123.45'])) //123.45

至于递归,我拿圆括号为例,就更是三行以内了;可以读到 print (+ 1 (* 2 3)); (exit 1) 。算式的话看我频道 带步骤的四则计算器 、 解释器(=深先改树改数) https://t.iss.one/dsuse/17410 https://t.iss.one/dsuse/19868
//Top  Str|[0-9]+| '(' Top* ')'
tok=(cod, s=cod.split(/\s+|([()]|\w+|\S+?)/).filter(x=>!!x).values())=>
()=>s.next().value

sexp=s=>{let a=[],x;for(;(x=s())&&x!=')';)a.push(x=='('?sexp(s):x); return a}
//^ 一般需配对')'。此省行数,F12 sexp(tok(prompt()))


需要注意的是,demo用的都是最practical的写法,没有LL1、ANTLR那些八股文。 C的话涉及无关的内存管理、抽象struct等问题,但只写EDSL(基本=fun调用.bind,能够晚or多次执行) 可以
datatype(Calc,
(A, int),
(Op, Calc*, int(op)(int,int), Calc*)
); //纯预处理宏ML99 ADT写法


总而言之,有多难,取决于你的做法。 如果不做多余的工作,可以很简单。
duangsuse, [12/17/24 4:20 PM]
现在CRUD boy都一票难求,还remote……

duangsuse, [12/17/24 4:25 PM]
得了吧现在国内经济你还换

duangsuse, [12/17/24 4:25 PM]
我换了我上个开遥控无人车的工作都后悔了

duangsuse, [12/17/24 4:26 PM]
遥控,景区的那种单路线车,配合东风的品牌宣传……

duangsuse, [12/17/24 4:29 PM]
是的,这几年毕业生工作难找,

duangsuse, [12/17/24 4:29 PM]
但是要装成是培训班服务,或者人力资源外包的这种玩意

duangsuse, [12/17/24 4:35 PM]
不是的,现在确实有这种急着找班上,被培训班钓鱼的

duangsuse, [12/17/24 7:16 PM]
老一背喜欢捡便宜,搞超前消费
不知道自己是吃时代红利,还因为全靠学历

duangsuse, [12/17/24 8:57 PM]
我没写过app。 2015那会安卓还流行createViewHolder呢, 当时看材料发现就是React diff 那套,重赋值复用旧View……
Svelte的Signal都把diff淘汰了,安卓Compose还在搞diff

duangsuse, [12/17/24 8:58 PM]
最要命的是,这纯粹是ListView的实现细节,过早优化,创造门槛,结果现在? 被超级简单的VueReact淘汰了……

duangsuse, [12/17/24 9:00 PM]
我倒是觉得安全系,除了搞Mods,AOP,破解, 没前途

最好吧网安当成OI&CTF。 哪里有 user=' or 1=1 这么弱智的内存安全漏洞钻……
duangsuse, [12/17/24 9:08 PM]
#ffi 好抽象
JDK21 jdk.incubator.foreign demo:
call them in "a.so"

byte inc(byte)
int sum(struct*{int x,int y})
char* add(char*, char*)

duangsuse, [12/17/24 9:12 PM]
Java每次都是这样,抄都不会,抄import cffi 不行吗? 上次抄Kt when{is} 也是,case Subtype x: 都没抄好, STR."" 抄ES6都不会

Java有一种WinAPI的傲慢,好像用那一长串函数名就可读了, 实际上爱写的早就写JNI去了,正常人根本懒得用

duangsuse, [12/17/24 9:15 PM]
        String result = switch (obj) {
case String s -> "Length of string: " + s.length();
case Integer i -> "Value is an integer";
default -> "Unknown type";
};

还真是会抄,现在又加上了 is Int, if it.. 守卫,哈哈
duangsuse, [12/20/24 8:17 PM] #oop
就是免指针啊,long实现IntRange(int A,B)什么的

duangsuse, [12/20/24 8:18 PM]
东西是好东西,就是感觉没啥必要, 高不成低不就。
swap(&a with &b) 零开销抽象,也做不到

duangsuse, [12/20/24 8:20 PM]
https://lanlan2017.github.io/JavaReadingNotes/b20bb69e/ 还是长姿势吧
Reflection和MethodHandle机制本质上都是在模拟方法调用,但是Reflection是在模拟Java代码层次 的方法调用,而MethodHandle是在模拟字节码层次的方法调用。

duangsuse, [12/20/24 8:33 PM]
https://developers.redhat.com/articles/2022/03/16/range-check-elimination-loops-openjdks-hotspot-jvm for循环优化

duangsuse, [12/20/24 8:37 PM]
变成值类型? pointer tagging?
Rust对 enum Option<T> 有这种优化,但对enum{str,int} 可做不到

duangsuse, [12/20/24 8:39 PM]
我能理解的没开销就是,把 val x=(A to B) 存储在泛型参数里,然后 x.swap直接翻转泛型参数,这样没有开销,当然就需要很怪的编程方式,符号也不能离开域

存储Int肯定有开销, 顶多是拿Long保存2int

duangsuse, [12/20/24 8:45 PM]
Rust本来就不是OOP,没有boxing和泛型皆Object带来的这种问题

rs只有enum才是带tag,OOP本来就基于data+tag双指针, Result<T>{Ok(T) Err} 又白白套了一层,其实标准库是有优化的,都合并到Object子类了

OOP基于data+tag双指针是范式的限制,为了访问绝对安全以及toStr等易用性
理论上Rust和C++模板泛型的模式才是正常的,Java太JS化了

duangsuse, [12/20/24 8:47 PM]
Rust可以写成有dyn双指针的形式,也可以只有struct,没有虚表
使用数组和接口仿subtype就是前者,默认是后者, 然后没有退化到Object的泛型和反射,就是编译期derive宏和奇奇怪怪的Named 结构泛型

duangsuse, [12/20/24 8:50 PM]
要分情况讨论,如果只是overload,包括template<on T>,mangle一下函数签名,叠合一下各处<T>的定义生成List::$of_int..就OK
如果有enum{str,int}就需要多态,一般是靠虚表,Rs是胖指针(&dyn)实现, C++是直接把虚表inline

duangsuse, [12/20/24 9:19 PM]
https://zhuanlan.zhihu.com/p/588932823

JIT OSR 就是的啊,如果compiler觉得自己比你聪明,那就是的
我是觉得 Int[] 这些泛型实化还需要优化,数组和局部分配JIT的挺好

duangsuse, [12/20/24 9:31 PM]
Java 值类型预览——Project Valhalla
好了,总结一下, Java 现在有 Option<T> 和 List<int>了,不写成T?而是ref T
然后equals可以写成(==)了,synchronize(obj)删了, 值相等不再强求new的容器是同一个,因此应该final以方便优化

JVM上面值类型没法实现C那种byte[] struct啊,value class 最多能存储2long的宽度,
>__int128 is passed either in two registers (if available) or in a 16 byte aligned stack slot

能够用来优化LongRange和Strumbra,包括Vec2 ,不可能保存俩指针。好像也没那么重要

你们需要的肯定是编译期计算,能够做 call(print, {ABCD}), if(Both(Eq(天蓝), Eq(云白)), tagUnionOp.. ) 的那种 value class
因为现在的值类型和一个大号 typealias 没区别

duangsuse, [12/21/24 12:57 PM]
我一直认为 json.load/dump 应该是标准库支持,如果这都做不到,实在是无法言表的弱
与numpy相比缺的类型太多了

duangsuse, [12/21/24 12:59 PM]
XML的数据模型太迷了,<list> <user> </></> 这样么?list的tagName又有何意义呢

duangsuse, [12/21/24 1:01 PM]
后来发现XML就是有{type: A|B}的json,DOM多有个list,俩特性基本都用不到,好了。

XML用这种区分{type: A|B} 的tagName当"key":v 嵌套用,不被淘汰才怪呢。
https://gist.github.com/ericis/463e850a9fb10cbac0eb326d70a43ef8

Java界容忍了XML这么久,铸币吧,人机格式当成best practice,我怀疑他们是伪人

html表示为json,是这样
[{type:div, hide:true},  [p, 'Hi', name], 'textnode']

有些人不这么认为
很明显,直接stringify DOM树 API 是错误的, html的本质是吧 <div k=v> 视为child0
[:div {:class "Class"} [:p "text]]
非常幽默的是有些人写 <input /> 还是不影响解析流程的,控制不了什么是有child的

XML整个工具链都非常幽默,完全没有CSS的美感

没话说,java js 各自的build都十分铸币
py基本不需要test打包和分模块版本,又显得和make一样轻量

总之,现在若要部署一种调了很多API的技术,还是Web最省心。 发布、依赖、 minify、fatJar 都是1行解决,模板很多,没有各种奇奇怪怪的配置

duangsuse, [12/21/24 1:40 PM]
xml搞closetag是为了方便阅读,但强制这么设计十分人机

duangsuse, [12/21/24 1:50 PM]
没话说,java js 各自的build都十分铸币
py基本不需要test打包和分模块版本,又显得和make一样轻量

总之,现在若要部署一种调了很多API的技术,还是Web最省心。 发布、依赖、 minify、fatJar 都是1行解决,模板很多,没有各种奇奇怪怪的配置

Zika Tang, [12/21/24 2:11 PM]
Python和yaml因为这个问题,我都不喜欢

duangsuse, [12/21/24 2:12 PM]
你不喜欢没关系,科学界和做DNN的喜欢,比任何其他语言都简洁

duangsuse, [12/21/24 3:13 PM]
得了吧 val var 分半天的,也就class(var)比OOP简洁,但是py元编程容易的很,@data class 这些模式比JVM墙太多了

duangsuse, [12/21/24 6:49 PM]
可不是依赖,这是有原因的。 没人喜欢程序员那一套玩意, py与任何语言相比都更自然,印书本上也不会有机翻的感觉

duangsuse, [12/21/24 6:51 PM]
py和C生态走的近,又没有Lua和Ruby的end等怪癖, 和需要虚拟机的Java相比非常有黏力,Java就是速度快点的py而已
#china 李老师
15:48 「他(最近)一直做这个事情是挺辛苦的」,
谨言慎行,没毛病,
确实辛苦,因此,他在这个团队中的份量不会轻,团队的言行也必然和他的言行强相关,

17:11 「不是说他现在的影响力的一个背书」,
他可不只是用他的影响力为这个项目背书,而且亲自下场深度操作,他的大号小号都已经有多个帖子表达个人观点了,是个人观点!不是往常的接稿发稿,
不必一面肯定方脸和徐某人是团队里确定的物理真身,一面认为李只是一个抽像的符号,只是团队的一份子,这样似乎李是被团队强行架上去推到前台的? 或者只是借助李的人气?
如果我没记错的话, 曾经在别人转贴里看到过徐某人和李线下多次外出游玩,那么两人关系并不只是纯粹线上公开交流,

28:24 「现在有好几个李老师,你信任的究竟是李颖这个人,还是他们这个币里说的呃旅居意大利的这个艺术家李...」,
「李老师不是你老师」,「李颖」,「旅居意大利的这个艺术家李」,「Lee1ng」,这四个名词对应的就是同一个人,大号可能只是有新人加入他,而不是他带着大号加入别人,这个顺序不能搞反,难道还有人冒充他的可能? 这事发酵初期确实有人怀疑他被盗.d号了, 然而,
至于「Li」这个为发币项目建立的新号, 背後是团队还是他个人,无所谓,反正他是这个项目的团队中的一员是确定无疑的,有他自己的帖子为证,
那么,没必要用抽像语言主观强行将这 5 个名词做切割,真.虚拟分身? 真.不同物理肉身人? 撇清关系? 为何对李如此纠结的袒护?
因为屏幕网线背後都是活生生的物理世界的真实的肉身人,
有网友考古到他几个月前的一个帖子就已经透露了开始谋划了,这应该是李深度参与甚至主谋之一的一个证据,或许是间接证据,更多证据正在浮出水面,

这并不是项目白皮书,没有哪个正规的团队和项目--无论什么行业领域--会通过在 x 上发帖子的形式来发布白皮书,不仅如此,行文和内容也与正常白皮书规范相去甚远,
至于他帖文里泛泛空谈的口号噱头,过去 100+ 多年里,这些滑稽少了吗?
不说远的,就是最近 30+ 年里,轮子,各派民运,郭蚂蚁帮,哪个不是喊着这些口号,表演着同样的滑稽?
老实说,这些前辈还真做了一些实事,包括援助和解救墙内受迫的人,当然伴随着人气和流量的增长,越往後越变质,打着动听的旗号和乐于助人的姿态收钱办事,
然而,反观李和他的团队呢?只是接投稿,发投稿,可曾线下物理实体的帮助过哪怕一个人?就急不可耐的表态说「需要更多钱才能维持的了运作这样子」,
(ps 如果他和他的团队有线下帮助过具体,恕我无知,可请告知,毕竟我早就不关注他了,要不是这事,也不会想要看他表演新的滑稽),
高调玩这些游戏的玩家,可以说,殊途同归就是他们的宿命,就像黑洞,坠落到同一个目的地--割韭菜,流量变现就是宇宙尽头吧,民运圈的这样的烂事还少了吗?
x 上有人怂恿刘姨也发币,
就因为每一代人都是懵懂无知的成年进入到社会?因为总有社会经验丰富的深谙人性欲望的大佬去收割鲜嫩的社会萌新?如果是这样,墙.q国和这些所谓的「華人」或什么各种「独」永远不会有希望和出路,有的只是轮回罢了,当然,不可否认,历史的真相几乎都是肮脏的,肮脏的博弈中也可以逐渐冒出正常,但这是小概率事件,
缺钱可以理解,粉丝流量变现有无数种方式,嫌弃太慢?所以选择发币?到底是捐款募资?还是以盈利为目的呢?他和他的团队并没说清楚,
李并不特殊,庞大粉丝和流量也不会是他必须享有特权和特殊对待的理由,不必双标,
题外话,米帝对外的双标是公开的,米帝大佬精英对内的双标是隐晦的,并不是没有。慕强是刻在生物基因里的,不仅仅是武力 智力 资源 的慕强,也包括对名气 人气 名望 威望 流量 影响力 的慕强,尤其是群居的社会化动物,包括人,只有良好的制度才能让人得到公平的保护,并且放心的甩掉慕强这种病态言行,

币圈发币,尤其是网红 大v kol 发币,名人站台,等等,杀猪盘的概率有多大,不说精确的统计数字,肉身体感都有明确的感知,这不是针对李一个人,谁发都一样,
pump.fun 是什么平台, 简单粗暴的说就是一个低规则甚至原始规则下的猎.l杀游乐场,里面充斥着经验丰富工具丰富的玩家,也充斥着懵懂的韭菜玩家,欲望是贯穿其中的唯一驱动力,
这平台上有没有冲起来的标的?有没有上架cex的标的?当然有,但非常x3少,完全看做市商和或大户是否有意愿持续托底,然而meme币的性质决定了绝大多数标的都不会有持续性的周期性的托底和哄抬拉抬,
就算这个标的能够走出来,就算大部份筹码都已在市场流通--并没有,就能避免割韭菜了吗?他和他的团队能控制行情和走势?参与这个盘子的玩家是附和他口号噱头的多?还是投机的多?无论哪个多,最终都只是大户又一个割韭菜的工具而已,

和平台也无关,平台并不重要,类似的平台也有很多,重要的是李和他的团队的行为,
一个标榜民主自由的人,自我打造的如此人设,和币圈惯常割韭菜的风俗苟合在一起,借助币圈工具来募资?盈利?现今时代,「反差」果然就是流量,矛盾冲突是艺术表现力的重要来源,他果然是艺术家,
如今大号主业只是接投稿发投稿,在人气流量暴火之後,大号几乎不再发任何个人言论,猥琐在小号里发自己的三观,任何一个正常的自媒体,比如大体上同类型的如「大声」也不是这样吧,他这样做是有什么刻意的安排吗?
诡异的是,最近一天,也就是 12h 前,他用专门发投稿的大号发了一篇个人言论的帖子,评论关于某交.易.所对他和他团队的 meme 币的「恶意」标注一事,这就很滑稽了,他为了平衡或纠正舆论,特意用人气和流量暴表的大号来发这个帖子,有力量,用心良苦,
已有热心网友考古翻出他以前的关于币圈的言论,和如今的他对照,又一次戏剧冲突,当然,他不在乎,既然他都不在乎,那么瓜众为何要在乎他?社会关系是相对的,公平公正才有可能,
人性经不起考验,不是瓜众和或他的粉丝要考验他,而是他选择用发币的方式来考验粉丝的忠诚度是否能表现在行动力上,这是粉丝提纯的操作吗?那么,事情的发展就由不得他和他的团队能完全控制了,

这几天,已经有很多人从各种角度审视他的项目和细节了,包括从币圈技术角度,是什么形状,明眼人心知肚明,
另外,早有人说过,他只是接投稿,发投稿,即便一天的量再怎么多,从他大号每天发帖数量看,只需 2-3 个人的团队就可以完成,
当然他还有在做频道,现在借助 ai 一样可以把素材和想法高效率的快速串起来,甚至还能帮助润色,有专门网站根据脚本内容来自动匹配出提供对应的视频画面素材,因此,并不会消耗太多精力,当然我没看过他节目,
他包括他发币团队的另外 2 个人,我都没关注,2-3 年前首入眼帘看了几个帖子後就已全部静音,直觉或许偶尔也有一定合理性,包括诸如什么五毒散人,王亚军,大老王,王志安,米帝大兵,二大爷,... 等大v都是一眼假,只有徒步骑手,老雷,公子沈,懵了很久,直到他们主动暴露,
为何对李不感冒?李做的事,无论是接投稿,还是发币,都是典型的中心化行为,这与自香港抵抗以来的去中心化或多中心化的理念和实践,严重背道而驰,对于参与者来说也伴随着更大的风险,而在面对同样的风险时,那个中心,更容易全身而退,甚至有很高的价值被统战,

还是那句话,任何时候,任何场景,不以粉丝量流量改变评价标准,不双标,
如果对方势力弥天,慑于对方实力和能量,可以沉默,可以择机,完全正常,

自媒体无论个人还是团队,是否有资金支持,都正常,在这一点上纠结的人应该不多,

其实多伦多方脸的说法是没问题的:反贼当然要构建自己的经济体系,要赚钱养活自己。不仅要赚钱,还得要赚大钱。

但反贼想要赚钱,可以做自媒体,办社区,收会员费;也可以炒美股做空中国

发币,其实是他们所能选择的赚钱方式中的下下策。原因有三:

1)币圈参与者基本上90%都是赌狗,昨天就有人自豪的说:币圈天天都在割韭菜,我们已经习以为常,被李颖割又何尝不可?将自己的“反共大业”构建在赌狗的信仰之上,这是对自己支持者极大的不尊重:让原本对民主尚有一丝信仰的支持者去接受赌狗的价值观,享受一夜归零的快感,让受众群体下沉,进而扭曲他们的心智。这本质上是承认反共大业失败,“7步民主”只能骗到币圈赌狗。

2)币圈融资的优势是门槛低,借助区块链技术,募捐也变得非常容易:不论你身在何方,是否实名,只要有一个sol钱包即可参与,符合时代趋势。但募款人既没有“反共”计划书,可供查阅的路线图,也没有任何需要资金的重大项目,金元流向也毫无监管可言。这表明,这群人的“反共大业”实际上并不严肃,如同儿戏,得来全不费功夫。降低集资门槛,事实才是对所谓“反贼大赚钱”计划最大的伤害。

3)meme 价值波动非常大,纵然可以一天翻100倍,也完全可以1天之内归零。将“反共”基金置于如此无保障、无监管、无底线的高波动市场之下,无异于孙中山将同盟会费取出来去买荷兰郁金香,然后一个月内爆仓。在一个归零率高达98%的平台上发布如此重要的项目,很显然也是对自己的储备丝毫不负责任——如果他们没有提前老鼠仓割一波走人的话,或者从来就没想过要真的用这笔钱。

综上所述,李颖、多伦多方脸、徐某人。如果不是真的被币圈项目方骗了,以为自己的市值可以维持住超过7天,而且还可以1:1变现按照20%资助反共大业的话

那他们就是1个月前早就密谋圈钱,已经在昨天的pvp市场中捞到100万u,正在小号钱包里转账分赃走人

不是蠢,就是彻底的坏

到底是哪一个,我们一个月内应该就能见分晓。