duangsuse::Echo
#OOP #plt 学点设计模式 https://iota.huohuo.moe/OO-in-C.html#:~:text=一种设计模式对应一种语言特性%20%20By%20千里冰封 函数式人有许多「过度设计」,例如美 kotlin.Any.let 其名曰 #FP Functor.fmap (Arrow-KT.io)。这种(私货+算法)的泛滥,给IT带来了灾难,让许多初学者不明觉厉,也当然不能提升其应用能力(毕竟只是"指针别名"嘛) https://kotlinlang.org/docs/scope-functions.html…
## 增添性-Structural
这些模式封装了既有对象(如
4. Adapter
又称Polyfill或shim,例如将Typec插座转为USB:
不难看出,JDK8里很少写明"Adapter"一词。就像class的构造签名一样,Adapter只是toStr这样的类型转换,本不该太复杂
与它对立的是trait impl。 因为(statics)接口不能外部扩展,ktx可能要手写 Int.serializer() 等奇妙的序列化配置API https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/
而不能像 enumValues<RegexOption>() 那样"工厂"化
见 https://discuss.kotlinlang.org/t/extension-types-for-kotlin/1390
好吧,已经有了一种写法,但没法自动调用
5. Decorator和动态类型Proxy
上面的Adapter,如果是转换到相同类型(如 InputStreamFilter),就是『装饰器』了。
Python 里,使用@修饰def ,其实是在模仿Kotlin的花括号参数如 val by
与它对立的是高阶函数(let{}等处理函数的函数) 和编译期生成函数
你可能觉得这像javapoet那样复杂,它实际却和
在JS里一句话省new:
6. Facade
非静态Utils,可以混合多个this
与它对立的是 f: context(Home,Str).()->Str 这样的扩展函数
这些模式封装了既有对象(如
Reader(InputStream) ),提供一致的接口4. Adapter
又称Polyfill或shim,例如将Typec插座转为USB:
客户.手机.charge(USBcAdapter(livinRoom.table.USBA[0]))interface DataInput {
fun read4(): Int
}
class DataInputStream (x:InputStream):DataInput {
override fun read4()=x.readInt()
}
//class ArrayList <T>(x:Array<T>):List<T> {..}
fun IntArray.asList():List<Int> =TODO()不难看出,JDK8里很少写明"Adapter"一词。就像class的构造签名一样,Adapter只是toStr这样的类型转换,本不该太复杂
与它对立的是trait impl。 因为(statics)接口不能外部扩展,ktx可能要手写 Int.serializer() 等奇妙的序列化配置API https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/
而不能像 enumValues<RegexOption>() 那样"工厂"化
见 https://discuss.kotlinlang.org/t/extension-types-for-kotlin/1390
override class InputStream: DataInput {} //^讨论区
open InputFactory by DataInput.Companion {
fun url(:URL)=..
}
impl DataInput for InputStream {
fn read4..
}好吧,已经有了一种写法,但没法自动调用
fun InputStream.as=object: DataInput{..}5. Decorator和动态类型Proxy
上面的Adapter,如果是转换到相同类型(如 InputStreamFilter),就是『装饰器』了。
Python 里,使用@修饰def ,其实是在模仿Kotlin的花括号参数如 val by
lazy{}xs=range(0,10)
@kt(xs).map
def ys(x):
return x+1
@kt(xs).filter
def even(x):
return x%2==0
def flip(f):
return lambda x0,*a: [* f(*a,x0)]
import dataclasses as D
@D.dataclass
class kt:
o: None
def __getattr__(o,k):
f=getattr(o.o,k,None) or flip(vars(__builtins__)[k]) #py里小写类型没__dict__ var
return lambda*a: f(o.o, *a) #bind(this)
与它对立的是高阶函数(let{}等处理函数的函数) 和编译期生成函数
你可能觉得这像javapoet那样复杂,它实际却和
for(k of "ABCD")eval('obj.${k}=()=>1') 一样简单。在Python里可以这么写:class Echo:
for k in "god bad boy".split():
def f(self,x,k=k): print('主=6' if k[0]=='g' else x)
exec(k+"=f")
Echo().god(42)
Echo().boy(42)
在JS里一句话省new:
mk=new Proxy(self, {get:(o,k)=>(f=self[k],f.call? ((...a)=>new f(...a)) : f) })6. Facade
非静态Utils,可以混合多个this
typealias V=Any?
class JSMap(private val a: List<V>, private val k: Map<String,V>) {
val size get()=k["length"]?.toString()?.toInt() ?: a.size+k.size
//对于连续键用a 否则用k
}
与它对立的是 f: context(Home,Str).()->Str 这样的扩展函数
duangsuse::Echo
#OOP #plt 学点设计模式 https://iota.huohuo.moe/OO-in-C.html#:~:text=一种设计模式对应一种语言特性%20%20By%20千里冰封 函数式人有许多「过度设计」,例如美 kotlin.Any.let 其名曰 #FP Functor.fmap (Arrow-KT.io)。这种(私货+算法)的泛滥,给IT带来了灾难,让许多初学者不明觉厉,也当然不能提升其应用能力(毕竟只是"指针别名"嘛) https://kotlinlang.org/docs/scope-functions.html…
## 切换性-Behavioral
这些模式应用性很强,如 Iterator 被ES5用于集合和协程,Event向上冒泡实现了责任链
7. ListIterator
8. Interceptor责任链
可以多def几次,你会找到bug,所以责任链是用一个dict传递上文环境的。
与它对立的是 list.firstNotNull{} 。你可能听说过 ClassLoader 模式,它其实用链表(super优先)的方法实现了
就像上文的getModule,这种模式已被可反射jar/树的Jigsaw取代
对热替换来说,不同PATH的同名类不能自动转换,但像jshell那样从头调用最后一个版本就可以。
9. State状态机-也叫DFA
一个视频稿件只能在有草稿的状态下发布,在修改后,需要重新审核
最典型的例子是MP3播放器的RadioButton(播放-暂停-停止并seek0),很明显,它们是对播放速度和列表的调整。
不难发现,用
实际上,状态机有很多等价物-fun Scanner.nextInt 这些调用对class Lexer{}来说就是状态编号
10. Strategy函数值
让我们重新思考@override:之前提到的 new Proxy(js) 在Java反射里也有效。
这说明,Java的class{}本质上是一个默认函数字典(kt添加了var get等语法糖) ,准确点说是两个Grouping,因为支持static和多写查找(overloads)
而 override fun 就是向它的copy().set(静态赋值),但只能写入 open fun(虚函数) ,不为空(子类>父类)
与filter,map 等函数式编程对照,不难发现
这也是为何PyJS里少有类,却总能描述相应的需求
那么,如果我们有很复杂的操作组合,可以用这class{}函数字典,而不是更易复用的默认参数:
class{}本质上是一个默认函数字典,就像filterNotNull{}的默认参数,所以OOP和FP的能力相同,而 fun 与 data class 间的差别其实也很小,只是var引用在栈还是在堆上
如果强制添加 User(age,name){name!="Jumping"} 这样的验证函数, data class 其实就是能修改参数再执行的普通fun
单方法的能力比大家想象的强。就像println() 利用多写对Int,Str值分别优化, 一个准确设计的系统,其实不需要那么多fun,多写几个class当参数或许更易复用呢?
以上就是主要内容啦
"OVDEP" Observer Visitor(深先iterator) decorator(单参compose) EitherAB Proxy 里还有3个没写,大家自己搜吧
毕竟读完本文就很厉害了~
这些模式应用性很强,如 Iterator 被ES5用于集合和协程,Event向上冒泡实现了责任链
7. ListIterator
var a=List.of("Amy", "Bob");
var s=a.listIterator();
void dd(Object x){System.out.println(x);}
while(s.hasNext()) dd(s.next());
while(s.hasPrevious()) dd(s.previous());
var mo = Object.class.getModule(); // java.base
mo.getPackages().forEach(x->dd(x));
mo.getLayer().configuration()
.findModule(mo.getName()).orElseThrow().reference()
.open().list().toList()def cat():
x=None
while True:
x=yield(x)
s=cat(); next(s) #忽视x=空
assert s.send(0)==0 #回应给yield, continue
assert s.send(1)==1
8. Interceptor责任链
import json,sys #典型用途是hook系统函数
@lambda f: f(eval(f.__name__))
def print(f0):
return lambda*a: f0(*a) if isinstance(a[0],str) else (json.dump(a, sys.stdout) or f0())
print(2,3,sys)
可以多def几次,你会找到bug,所以责任链是用一个dict传递上文环境的。
与它对立的是 list.firstNotNull{} 。你可能听说过 ClassLoader 模式,它其实用链表(super优先)的方法实现了
export PATH=$PATH:./new就像上文的getModule,这种模式已被可反射jar/树的Jigsaw取代
对热替换来说,不同PATH的同名类不能自动转换,但像jshell那样从头调用最后一个版本就可以。
9. State状态机-也叫DFA
一个视频稿件只能在有草稿的状态下发布,在修改后,需要重新审核
enum class State{Edit,Mod, Real}
class BVideo(val av:Int) {
var st=State.Edit
var text=""
set(v)=go(Edit){text=v}
fun 发布()=go(Edit to Mod){}
//fun onPoll(s:ServerResp){st=s["state"]}
fun <R>go(to:State, f:()->R)=let{st=to; f()}
fun <R>go(req:Pair<State,State>, f:()->R)= req.let{(A,B)->
require(st==A){"state $A"}
st=B; f()
}
}
class Player {
fun play(speed: Float=+1.0)
fun playlist(pos: Int=+1)
fun lock(ui:Boolean)
val onplay=mutableListOf<(Float)->Unit>()
//val play=Observer<Float>() 对既能修改又能监听的值,更准确的建模
}最典型的例子是MP3播放器的RadioButton(播放-暂停-停止并seek0),很明显,它们是对播放速度和列表的调整。
不难发现,用
var draft: BVideo? =this 也可以实现此状态机。实际上,状态机有很多等价物-fun Scanner.nextInt 这些调用对class Lexer{}来说就是状态编号
10. Strategy函数值
让我们重新思考@override:之前提到的 new Proxy(js) 在Java反射里也有效。
import java.lang.reflect.*;
interface HiMap {
fun Amy():String
}
var ks=(HiMap::class).java.let{T->Proxy.newProxyInstance(
T.getClassLoader(),arrayOf(T),
{o,k,a -> k.getName()}
)} as HiMap
//括号外的部分相对于<HiMap>是可复用的,很明显。只需外提为 inline fun<reified T>
ks.Amy()=="Amy"
ks==ks //cast fail
这说明,Java的class{}本质上是一个默认函数字典(kt添加了var get等语法糖) ,准确点说是两个Grouping,因为支持static和多写查找(overloads)
而 override fun 就是向它的copy().set(静态赋值),但只能写入 open fun(虚函数) ,不为空(子类>父类)
与filter,map 等函数式编程对照,不难发现
class T{open fun f} 其实和 fun T(f:()->Unit={}) 有基本相同的语意,区别仅仅在是否仅提供 invoke()这也是为何PyJS里少有类,却总能描述相应的需求
那么,如果我们有很复杂的操作组合,可以用这class{}函数字典,而不是更易复用的默认参数:
val Jumping="""
Σoo=0.5
主=6
中专数学:83分
""".split("\n")
interface FilterMap<T,R> { //铁杆 Javaer 一般是用 abstract class :)
fun accept(x:T): Boolean
fun add(x:T): R
}
object 主6Strategy: FilterMap<String,Number> {
override fun accept(x:String)= '=' in x
override fun add(x:String)= x.substringAfter("=").toFloat()
}
operator fun <T,R>List<T>.invoke(f:FilterMap<T,R>)=filter(f::accept).map(f::add)
Jumping (主6Strategy)
class{}本质上是一个默认函数字典,就像filterNotNull{}的默认参数,所以OOP和FP的能力相同,而 fun 与 data class 间的差别其实也很小,只是var引用在栈还是在堆上
如果强制添加 User(age,name){name!="Jumping"} 这样的验证函数, data class 其实就是能修改参数再执行的普通fun
单方法的能力比大家想象的强。就像println() 利用多写对Int,Str值分别优化, 一个准确设计的系统,其实不需要那么多fun,多写几个class当参数或许更易复用呢?
以上就是主要内容啦
"OVDEP" Observer Visitor(深先iterator) decorator(单参compose) EitherAB Proxy 里还有3个没写,大家自己搜吧
毕竟读完本文就很厉害了~
duangsuse::Echo
#life 这次应该是言出法随了😊 做好准备刷身份证上网,管网信办叫亲爷爷 但大家在墙内发帖,如果想曝光烂尾楼水电费什么的,大概就会被赋红马喽,受害者是自己也不行。 《历史的垃圾时间》 可以藏好自己,但清理做得太好,个人权利也会万劫不复。 https://m.youtube.com/watch?v=hatVCKjTY30 #评论 “你心里没有鬼,你为什么害怕监控“ 你心里没有鬼,你为什么不敢把你家门钥匙交给可疑的陌生人? “你听说了吗,他们要把驴都阉了!”。 “你又不是驴,慌什么?” “等你被阉了以后再想办法证明自己不是驴吧”…
YouTube
戶晨風這次是真的完了!居然公開討論“習”獨裁!七七叭叭TALK隨機掉落彩蛋
加入會員頻道的開通鏈接,每個月都有專屬Q&A,期待朋友們有趣的好問題~:https://www.youtube.com/channel/UCFvCQZqv9fMBHDWAqlNDEBg/join
有趣相關視頻:
https://youtu.be/npuNjUDylxQ
https://youtu.be/kzVG1lWP35g
https://youtu.be/9QFF9npgGRg
https://youtu.be/bkM2-bcJ_5Y
https://youtu.be/fF9YNJXJX7s…
有趣相關視頻:
https://youtu.be/npuNjUDylxQ
https://youtu.be/kzVG1lWP35g
https://youtu.be/9QFF9npgGRg
https://youtu.be/bkM2-bcJ_5Y
https://youtu.be/fF9YNJXJX7s…
Forwarded from 科技圈🎗在花频道📮
Apple Intelligence被发现存在安全缺陷,可通过提示注入攻击成功操纵AI
在MacOS 15.1的Beta测试版中,开发人员Evan Zhou发现了重大安全缺陷。通过提示注入攻击,Zhou能够操纵Apple Intelligence绕过预期指令,使AI对任意提示做出响应。这种攻击方式可以导致数据泄露、生成恶意内容和传播错误信息。OWASP组织将提示词注入攻击列为大语言模型可能面临的主要漏洞之首。技术安全专家Bruce Schneier指出,这种安全问题源于数据和控制路径没有分开。Zhou在GitHub上分享了他的代码,演示了如何通过特殊token覆盖系统提示,成功实施攻击。
此外,Andrej Karpathy在推特上也指出了LLM存在的类似SQL注入的安全漏洞,建议不要信任用户输入的字符串,并始终使用两个附加的flag值来处理特殊token。Karpathy强调了可视化token和测试代码的重要性,以避免LLM漏洞引发的安全问题。
新智元
☘️ 关注频道 @ZaiHuaPd
📮 投稿爆料 @ZaiHuabot
在MacOS 15.1的Beta测试版中,开发人员Evan Zhou发现了重大安全缺陷。通过提示注入攻击,Zhou能够操纵Apple Intelligence绕过预期指令,使AI对任意提示做出响应。这种攻击方式可以导致数据泄露、生成恶意内容和传播错误信息。OWASP组织将提示词注入攻击列为大语言模型可能面临的主要漏洞之首。技术安全专家Bruce Schneier指出,这种安全问题源于数据和控制路径没有分开。Zhou在GitHub上分享了他的代码,演示了如何通过特殊token覆盖系统提示,成功实施攻击。
此外,Andrej Karpathy在推特上也指出了LLM存在的类似SQL注入的安全漏洞,建议不要信任用户输入的字符串,并始终使用两个附加的flag值来处理特殊token。Karpathy强调了可视化token和测试代码的重要性,以避免LLM漏洞引发的安全问题。
新智元
☘️ 关注频道 @ZaiHuaPd
📮 投稿爆料 @ZaiHuabot
#linux #design #statement
最近在设计OSon(一个基于JSON的类lisp计算图语言) 的一种强类型根rootfs 标准,打算用cbor(json zip),flatbuf 作为sysfs和etc的标准编码,它们的标准很简洁, cbor甚至只用0b111(7)种情况编码了可变结构
https://cstriker1407.info/blog/cbor-simple-note/
https://flatbuffers.dev/flatbuffers_internals.html#:~:text=scalar%20data%20is%20stored%20with%20a%20variable
这对JS是有用的,因为要搞 await uu.com.google 即 //com/google //$http//google ,也要想办法修改各种语言作为shell,像 coreutil.cat(/txt/a) 什么的
幸运的是,http和本地文件类型(MIME Content&file magics) 普遍被程序员尊重 👍,让网络和本地路径、音视频等格式的API统一化不太难,我只添加environ.T_PATH='array' /sys/T/*.flat,ALL.py 两个和一些util就能完成
不过我要吐槽一下UNIX的多用户和权限: 这根本就是废物,就像 ls -l 里跟在mug(drwx--- root root) 后的硬链接数一样。
就连UNIX自己的 /lib 也不用硬链模式,也包括 /sbin 不是su, /usr 不是user..
实际上,硬链接只是 protected Rc<inode> nlink; 而已,对任何UNIX外的文件系统都无用,是实现细节!然而tar;cpio 都包含了类似的变量,真不知道照着文件管理器画瓢为啥那么难
绝大部分情况下,UNIX是“双用户模式”:PID1(root)+UID 1k(wheel) ,最多加个普通用户做后台服务 😄
UNIX的“先知们” 则是幻想着youtube集群该调用 useradd 去创建数据库用户,或是让http跟着unix的属主属组鉴权…… 然而,它只留下了 chmod +x
http ftp 没人这么玩,甚至http都被 {code:,msg:} 篡了。Windows的公共/本地视频文件夹 被xdg抄过来了,但只有前面一半,所以Linux的安全只是区分root么?
$ id 会显示用户和组——基本上gid==uid,就像进程组和多线程,用 strace echo 你会发现调用的是 exit_group(0) ——所以设计exit是干什么?
syscall 这些东西倒无所谓(libc,msvc 都被Python.NET淘汰了),groups 我是要用docker容器名换掉了。 实际上,即便如此,组的权限也没有用处
HOME/视频 现在分为 ./my.v/ ./.prot.v/; 除了 .{local/bin,etc} 等隐藏文件外都是public
这样UNIX的用户/组和权限就都有意义了: 用户=app, 组=依赖的服务。 对于uid<1000 的容器可以自动支持setcap httpd 什么的
//{sys用以支持引导和PATH里的CLI/API/UI, dev编程虚拟设备(系统级ffmpeg支持),v服务(根目录叠加层sndo),etc配置,UID/家目录}/ 运行时五项堆叠
整个内核只隔离两个地址空间: app+Chrome等解释器 在受管, Apache等可信ELF+WASMbpf等解释器+驱动+调度/分配器 在Ring0
整个系统只使用四个权限: //USER/*/.{*,prot.*} 是711和771 其他不含//sys/bin,lib64是777,反正也会被容器随便覆盖掉。
"可执行权"其实已经被setcap位细分好了,SUID这些trick被用于决定是否可信
- 任何对sys,dev,etc的读写总是允许的,只是有不可见项且限制于shell,要用 sndo -U 应用到用户
- v,HOME照常鉴权,只是照上表弱化UNIX的文件本位
大家都知道,对于OS这样历史悠久的app,ancestors' evil 真的不可修复,也有些人吐槽mp4编码容器设计得很烂,webp压缩率很好,但小白只知道mp4和png
不过,假定有JetBrains或荷兰人那样的技术,实现 kt=javaAPI, java->kt; py3=2, py2to3 的前后兼容虽然麻烦,但也是可能的 😅
//$http/ 被设计为实现URI的另一种字面,不与URL冲突(href=//example.org/ 总是带点),可以借助浏览器和编译器插件实现
不过 /txt/a ./HOME //sys 这是与旧格式混淆的,但它们仍然比(ls -a 只添加俩 . ..)优雅。URL似乎不需要./
很少人知道 overlayfs(Dockers) 的功能甚至是Linux自带的:
https://github.com/openthos/printer-analysis/blob/master/移植/PRoot一种用户态chroot实现简介.md
最近在设计OSon(一个基于JSON的类lisp计算图语言) 的一种强类型根rootfs 标准,打算用cbor(json zip),flatbuf 作为sysfs和etc的标准编码,它们的标准很简洁, cbor甚至只用0b111(7)种情况编码了可变结构
https://cstriker1407.info/blog/cbor-simple-note/
https://flatbuffers.dev/flatbuffers_internals.html#:~:text=scalar%20data%20is%20stored%20with%20a%20variable
这对JS是有用的,因为要搞 await uu.com.google 即 //com/google //$http//google ,也要想办法修改各种语言作为shell,像 coreutil.cat(/txt/a) 什么的
//$http/info/cstriker1407/blog/cbor-simple-note/ 上面的链接看起来就会更跨平台幸运的是,http和本地文件类型(MIME Content&file magics) 普遍被程序员尊重 👍,让网络和本地路径、音视频等格式的API统一化不太难,我只添加environ.T_PATH='array' /sys/T/*.flat,ALL.py 两个和一些util就能完成
不过我要吐槽一下UNIX的多用户和权限: 这根本就是废物,就像 ls -l 里跟在mug(drwx--- root root) 后的硬链接数一样。
就连UNIX自己的 /lib 也不用硬链模式,也包括 /sbin 不是su, /usr 不是user..
实际上,硬链接只是 protected Rc<inode> nlink; 而已,对任何UNIX外的文件系统都无用,是实现细节!然而tar;cpio 都包含了类似的变量,真不知道照着文件管理器画瓢为啥那么难
绝大部分情况下,UNIX是“双用户模式”:PID1(root)+UID 1k(wheel) ,最多加个普通用户做后台服务 😄
UNIX的“先知们” 则是幻想着youtube集群该调用 useradd 去创建数据库用户,或是让http跟着unix的属主属组鉴权…… 然而,它只留下了 chmod +x
http ftp 没人这么玩,甚至http都被 {code:,msg:} 篡了。Windows的公共/本地视频文件夹 被xdg抄过来了,但只有前面一半,所以Linux的安全只是区分root么?
$ id 会显示用户和组——基本上gid==uid,就像进程组和多线程,用 strace echo 你会发现调用的是 exit_group(0) ——所以设计exit是干什么?
syscall 这些东西倒无所谓(libc,msvc 都被Python.NET淘汰了),groups 我是要用docker容器名换掉了。 实际上,即便如此,组的权限也没有用处
HOME/视频 现在分为 ./my.v/ ./.prot.v/; 除了 .{local/bin,etc} 等隐藏文件外都是public
这样UNIX的用户/组和权限就都有意义了: 用户=app, 组=依赖的服务。 对于uid<1000 的容器可以自动支持setcap httpd 什么的
/a pwd路径
/blk/a pwd字节(均覆盖无扩展名情况)
///google 网络路径,基于HTTP类型和编码
//$http/com/google 完整URI
./{my,prot}.[agevzmM]/ 用户,小组的 a音频 g图像 e文档 v视频 z下载和压缩 m项目 M设计和3D 。自动带有.前缀//{sys用以支持引导和PATH里的CLI/API/UI, dev编程虚拟设备(系统级ffmpeg支持),v服务(根目录叠加层sndo),etc配置,UID/家目录}/ 运行时五项堆叠
整个内核只隔离两个地址空间: app+Chrome等解释器 在受管, Apache等可信ELF+WASMbpf等解释器+驱动+调度/分配器 在Ring0
整个系统只使用四个权限: //USER/*/.{*,prot.*} 是711和771 其他不含//sys/bin,lib64是777,反正也会被容器随便覆盖掉。
"可执行权"其实已经被setcap位细分好了,SUID这些trick被用于决定是否可信
- 任何对sys,dev,etc的读写总是允许的,只是有不可见项且限制于shell,要用 sndo -U 应用到用户
- v,HOME照常鉴权,只是照上表弱化UNIX的文件本位
大家都知道,对于OS这样历史悠久的app,ancestors' evil 真的不可修复,也有些人吐槽mp4编码容器设计得很烂,webp压缩率很好,但小白只知道mp4和png
不过,假定有JetBrains或荷兰人那样的技术,实现 kt=javaAPI, java->kt; py3=2, py2to3 的前后兼容虽然麻烦,但也是可能的 😅
//$http/ 被设计为实现URI的另一种字面,不与URL冲突(href=//example.org/ 总是带点),可以借助浏览器和编译器插件实现
不过 /txt/a ./HOME //sys 这是与旧格式混淆的,但它们仍然比(ls -a 只添加俩 . ..)优雅。URL似乎不需要./
很少人知道 overlayfs(Dockers) 的功能甚至是Linux自带的:
https://github.com/openthos/printer-analysis/blob/master/移植/PRoot一种用户态chroot实现简介.md
cstriker1407.info
【转】物联网专用数据交换格式CBOR | cstriker1407的笔记本
本文转自【 https://www.jianshu.com/p/76adec5e61f8 】,有删改
duangsuse::Echo
#linux #design #statement 最近在设计OSon(一个基于JSON的类lisp计算图语言) 的一种强类型根rootfs 标准,打算用cbor(json zip),flatbuf 作为sysfs和etc的标准编码,它们的标准很简洁, cbor甚至只用0b111(7)种情况编码了可变结构 https://cstriker1407.info/blog/cbor-simple-note/ https://flatbuffers.dev/flatbuffers_internals.html#…
#linux cgroup 是对KVM的改进, 但这个功能很早就被live发行版们使用了
https://zh.wikipedia.org/wiki/貝爾實驗室九號計畫
对进程内存(而不是整个系统)的swapoff、根树、ulimit 的叠层, 只留下 -p 80:80 bind
这样的功能,近20年前已经被内核开发者意识到了
https://zh.wikipedia.org/wiki/貝爾實驗室九號計畫
对进程内存(而不是整个系统)的swapoff、根树、ulimit 的叠层, 只留下 -p 80:80 bind
这样的功能,近20年前已经被内核开发者意识到了
👍1
#china #news 最近的杭州骑手罢工取得了成果,资本家把吃下去的吐出来了☺️
实际上,2019中国外卖员在北上广有个全国串联的工会,被党妈收回公有了
希望以后外卖员的待遇通过示威能越来越好, 这不仅是对裁员风险的保障,更是捡起劳动法爆资本家金币的开始
https://m.youtube.com/watch?v=Z_GrvcAXqPQ&t=2m
实际上,2019中国外卖员在北上广有个全国串联的工会,被党妈收回公有了
希望以后外卖员的待遇通过示威能越来越好, 这不仅是对裁员风险的保障,更是捡起劳动法爆资本家金币的开始
https://m.youtube.com/watch?v=Z_GrvcAXqPQ&t=2m
❤3
https://www.ruanyifeng.com/blog/2016/11/byte-order.html #meme #bin
Berkeley套接字定义了一组转换函数,用于16和32位整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。
https://gist.github.com/fffaraz/9d9170b57791c28ccda9255b48315168#file-dns-c-L123-L132
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
小端模式更适合系统内部,大端模式更适合网络数据传递,加上一些历史引领的原因,
导致现在两种字节序方式并存。
>算加减乘除要从LSB到MSB进位。如果先把小位算完了再算大位,直接把carry out加到大位里就可以了,这个在8位CPU上尤其重要
>“程序中不应该出现大小字节序的问题,只有‘网络字节序’和‘本机字节序’。应该使用ntohl,ntohs,htonl,htons进行转换"。我很受用,感觉一下子就掌握到了问题的本质,即在什么地方需要注意什么问题。
Berkeley套接字定义了一组转换函数,用于16和32位整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。
https://gist.github.com/fffaraz/9d9170b57791c28ccda9255b48315168#file-dns-c-L123-L132
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
小端模式更适合系统内部,大端模式更适合网络数据传递,加上一些历史引领的原因,
导致现在两种字节序方式并存。
>算加减乘除要从LSB到MSB进位。如果先把小位算完了再算大位,直接把carry out加到大位里就可以了,这个在8位CPU上尤其重要
>“程序中不应该出现大小字节序的问题,只有‘网络字节序’和‘本机字节序’。应该使用ntohl,ntohs,htonl,htons进行转换"。我很受用,感觉一下子就掌握到了问题的本质,即在什么地方需要注意什么问题。
Forwarded from Garyの梦呓
Telegraph
南京17岁学生带头组织近千人“反卷联盟”,引公安警告
整理编辑/Iris 近日,南京市,一名17岁的重点中学学生因不满学校提前开学补课,组建了近千人“反卷联盟”,吸引多所学校学生参与,引发社会广泛关注和讨论。公安部门介入后,该学生认识到错误并承诺解散相关群组,而此事件所涉及的教育内卷及学生学习与休息平衡问题,成为大众探讨焦点。 2024年7月中下旬,南京市的公办学校在补课问题上基本按兵不动。然而,在7月底,原计划于8月10号开学的扬子中学等众多中等学校,却传来了将在8月4号提前一周开学补课的小道消息。 7月31日,一名17岁的南京重点中学学生,在获得众多学…
Forwarded from Hacker News
The brain simulates actions and their consequences during REM sleep (Score: 150+ in 16 hours)
Link: https://readhacker.news/s/6d6PT
Comments: https://readhacker.news/c/6d6PT
Link: https://readhacker.news/s/6d6PT
Comments: https://readhacker.news/c/6d6PT
bioRxiv
The brain simulates actions and their consequences during REM sleep
Vivid dreams mostly occur during a phase of sleep called REM[1][1]–[5][2]. During REM sleep, the brain’s internal representation of direction keeps shifting like that of an awake animal moving through its environment[6][3]–[8][4]. What causes these shifts…
duangsuse::Echo
#linux #design #statement 最近在设计OSon(一个基于JSON的类lisp计算图语言) 的一种强类型根rootfs 标准,打算用cbor(json zip),flatbuf 作为sysfs和etc的标准编码,它们的标准很简洁, cbor甚至只用0b111(7)种情况编码了可变结构 https://cstriker1407.info/blog/cbor-simple-note/ https://flatbuffers.dev/flatbuffers_internals.html#…
https://blog.csdn.net/dog250/article/details/100998838 #net #os #design
POSIX 中实际上有3种类型的文件: hex=block=buffer读写, ktty=char=内核终端文件, ptty=基于pid的终端文件, syn=socket=分pid/fd生成的文件
分别用于管理磁盘和内存(/dev/mem)、kmodule(ioctls)、虚拟终端(就是有width的,能控速的hex, $ stty)、socket(tcp/udp)
“一切皆文件”和其它的原则比如“组合小程序”等是相辅相成的。如果“一切皆文件”被破坏,那么便很难简单串接小程序实现复杂逻辑
socket没有标准文件的open和close操作,不能cat一个socket,也没法向一个socket里echo数据。因此就出现了socat,netcat这种大家都说好,但实际上没有必要的微型网络程序。
系统内核,其实就是会用MMU 4K页表保护自己的libc。
这就像,js要用 eval() import PATH 里的模块对象,同时需要沙箱技巧(setInterval..) 保证自身的设备和CPU不被独占
但因为C的代码都是unsafe{}, 需要用一种丑陋的方法隔离"syscall, ioctl" 这些类似于HTTP的调用,不能像WASM那样,内核和PATH里的代码存在一个地方。
你们可能听说过 gopkg/mvn 和 goroutine/jvm线程 ,那就是safe的PATH/函数对象和线程(池)调度器,这些虚拟机都有等同于操作系统的功能
而且更快速,例如, Looper() 调度不同的 ()=>函数 不需要保存和恢复>4K调用栈, 仅仅=闭包.call(返回地址在回调里)
这也是为什么有libuv这些东西
POSIX 中实际上有3种类型的文件: hex=block=buffer读写, ktty=char=内核终端文件, ptty=基于pid的终端文件, syn=socket=分pid/fd生成的文件
分别用于管理磁盘和内存(/dev/mem)、kmodule(ioctls)、虚拟终端(就是有width的,能控速的hex, $ stty)、socket(tcp/udp)
“一切皆文件”和其它的原则比如“组合小程序”等是相辅相成的。如果“一切皆文件”被破坏,那么便很难简单串接小程序实现复杂逻辑
socket没有标准文件的open和close操作,不能cat一个socket,也没法向一个socket里echo数据。因此就出现了socat,netcat这种大家都说好,但实际上没有必要的微型网络程序。
系统内核,其实就是会用MMU 4K页表保护自己的libc。
这就像,js要用 eval() import PATH 里的模块对象,同时需要沙箱技巧(setInterval..) 保证自身的设备和CPU不被独占
但因为C的代码都是unsafe{}, 需要用一种丑陋的方法隔离"syscall, ioctl" 这些类似于HTTP的调用,不能像WASM那样,内核和PATH里的代码存在一个地方。
你们可能听说过 gopkg/mvn 和 goroutine/jvm线程 ,那就是safe的PATH/函数对象和线程(池)调度器,这些虚拟机都有等同于操作系统的功能
而且更快速,例如, Looper() 调度不同的 ()=>函数 不需要保存和恢复>4K调用栈, 仅仅=闭包.call(返回地址在回调里)
这也是为什么有libuv这些东西
blog.csdn.net
Linux socket文件系统体现“一切皆文件”-CSDN博客
文章浏览阅读1.3w次,点赞12次,收藏46次。来自《实例演绎Unix/Linux的"一切皆文件"思想》大家习惯了使用socket来编写网络程序,socket是网络编程事实上的标准。我们知道,在Unix/Linux系统中“一切皆文件”,socket也被认为是一种文件,socket被表示成文件描述符。但socket的行为并不很像文件。比如:无法用 “open一个路径” 的方式打开一个socket,必须用socket系统调用来创建。文件..._linux socket文件
#film #jp #bilibili 龙猫画风 《你想活出怎么样的人生/苍鹭与少年/2024》
https://zh.wikipedia.org/zh-cn/蒼鷺與少年
下午在B站发现有人上传了汉化组资源,写码之余就看了下,
评价:和《千与千寻》《寻梦环游记》一样治愈系,剧中充满了 和善 风趣 的小动物,无人员伤亡
一千个读者眼中有一千个哈姆雷特,所以「看不懂」其实也是一种正常的解读。
或许片尾有一些日本风俗文化,中国人因西化已经缺少了相关背景。只需共赏这个关于家庭、责任、冒险、梦想与海洋的「跨时空神隐物语」,享受2.5D的奇特观影体验
千万不要做成国影一样,讲什么故事都要「有意义」「能教育小孩」,甚至「人民群众都看不懂,你算老几」,那样做事情就完蛋喽(
剧情存在着时地人的主线: 邵和日本/后妈产子中失踪、别墅旁哲人王的白塔、真人(不是Trueman,意味真诚的人)+蓝鹭
剧透警告!
下面是故事的概况,但画风真的值得大家一看(尤其是在下架前……)
战中的日本,一座医院起火,母亲永远留在了z小时候
父亲娶了双胞胎的姐姐夏子,让z搬进有七八个佣人婆婆的别墅里,住进去的那天,婆婆们说,后院的高塔里总有离奇的事发生
住进去的z很困,没听见“初次靠近宅子的”蓝鹭敲窗户,之后,怀孕的夏子进来为他端水。
z醒了,看见蓝鹭口吐人言,认为它是妖怪,奋力关上窗户;之后出门散心
z看见蓝鹭以滑稽的姿势住进高塔,便朝那个方向寻到一个狭窄的“狗洞”,发现了几根羽毛,但没能钻进去就被仆人叫了回去
她们说,那是离奇之地,z也会失踪的。
z去了小学,因为父亲是少数开的起车的,被其他学生孤立。 z打了回去,但寡不敌众,生气地拿石头砸了自己的左脑勺,流了很多血
之后他病了,在某天清晨借着如厕的机会,他拿着棍子去了后院
蓝鹭俯冲下来,咬碎木棍。
它召唤着鱼、青蛙……森林深处一切不怀好意的生物,趁着这时以母亲还活着引诱了z。夏子带着婆婆们赶来,用弓箭吓跑了它们。蓝鹭说它会等着z
z倒进了湖水里……最后水退去,他发现自己仍在床上。 梦中的一切仿佛在重演,但是拿起那时的木棍,却在手中节节破碎!
之后几天,乘着向孕吐的夏子问好的功夫,z用收集到的资源偷偷制作一个竹弓羽箭,想要消灭这不安定的妖怪。
但似乎,它却先一步将夏子引入了那片离奇森林里。
婆婆们说,这别墅里总有离奇的事发生,而秘密与失踪的夏子,似乎就藏在蓝鹭居住的,很久以前叔姑父痴迷并失踪于的高塔里……
---剩下70%奇幻世界和帅婆婆、“哇啦哇啦”灵魂们、白鹭们、塔主、滑稽的食人鹦鹉的篇幅,观感都不错
最后是我对主角选择的想法。
「你想活出怎么样的人生?」,为什么不继承这两天一块石头维持起的这片美术世界?为什么要回到即将有战争和灾难的人间?这是大叔父问真人的话
「下面的世界」虽然看起来很美好,就像那片大海一样,还有着那些外太空飞来的陨石、有一个鸟类的王国
但却住着明明五谷丰登还要吃人的鹦鹉、住着代代饥饿,却要与大海奋斗,又被火美烧的Pelican们。 这里依旧到处是争端
鹦鹉们守卫着“产房”,却要吃了不是婴儿的人,这些都是上面的世界和家庭里没有的。 海的世界虽然美而高贵,它的景色却大多是海市蜃楼
经过这次历险,z坚定选择了他选择的人生,一行人平安地回到他们原先的世界,与正好在外头寻找他们的父亲重逢。
一段时间后,战争也跟着结束。剧情最后是在真人听见父亲胜一的呼唤,离开自己的房间,与家人一起返回东京的场景下落幕。
https://zh.wikipedia.org/zh-cn/蒼鷺與少年
下午在B站发现有人上传了汉化组资源,写码之余就看了下,
评价:和《千与千寻》《寻梦环游记》一样治愈系,剧中充满了 和善 风趣 的小动物,无人员伤亡
一千个读者眼中有一千个哈姆雷特,所以「看不懂」其实也是一种正常的解读。
或许片尾有一些日本风俗文化,中国人因西化已经缺少了相关背景。只需共赏这个关于家庭、责任、冒险、梦想与海洋的「跨时空神隐物语」,享受2.5D的奇特观影体验
千万不要做成国影一样,讲什么故事都要「有意义」「能教育小孩」,甚至「人民群众都看不懂,你算老几」,那样做事情就完蛋喽(
剧情存在着时地人的主线: 邵和日本/后妈产子中失踪、别墅旁哲人王的白塔、真人(不是Trueman,意味真诚的人)+蓝鹭
剧透警告!
下面是故事的概况,但画风真的值得大家一看(尤其是在下架前……)
战中的日本,一座医院起火,母亲永远留在了z小时候
父亲娶了双胞胎的姐姐夏子,让z搬进有七八个佣人婆婆的别墅里,住进去的那天,婆婆们说,后院的高塔里总有离奇的事发生
住进去的z很困,没听见“初次靠近宅子的”蓝鹭敲窗户,之后,怀孕的夏子进来为他端水。
z醒了,看见蓝鹭口吐人言,认为它是妖怪,奋力关上窗户;之后出门散心
z看见蓝鹭以滑稽的姿势住进高塔,便朝那个方向寻到一个狭窄的“狗洞”,发现了几根羽毛,但没能钻进去就被仆人叫了回去
她们说,那是离奇之地,z也会失踪的。
z去了小学,因为父亲是少数开的起车的,被其他学生孤立。 z打了回去,但寡不敌众,生气地拿石头砸了自己的左脑勺,流了很多血
之后他病了,在某天清晨借着如厕的机会,他拿着棍子去了后院
蓝鹭俯冲下来,咬碎木棍。
它召唤着鱼、青蛙……森林深处一切不怀好意的生物,趁着这时以母亲还活着引诱了z。夏子带着婆婆们赶来,用弓箭吓跑了它们。蓝鹭说它会等着z
z倒进了湖水里……最后水退去,他发现自己仍在床上。 梦中的一切仿佛在重演,但是拿起那时的木棍,却在手中节节破碎!
之后几天,乘着向孕吐的夏子问好的功夫,z用收集到的资源偷偷制作一个竹弓羽箭,想要消灭这不安定的妖怪。
但似乎,它却先一步将夏子引入了那片离奇森林里。
婆婆们说,这别墅里总有离奇的事发生,而秘密与失踪的夏子,似乎就藏在蓝鹭居住的,很久以前叔姑父痴迷并失踪于的高塔里……
---剩下70%奇幻世界和帅婆婆、“哇啦哇啦”灵魂们、白鹭们、塔主、滑稽的食人鹦鹉的篇幅,观感都不错
最后是我对主角选择的想法。
「你想活出怎么样的人生?」,为什么不继承这两天一块石头维持起的这片美术世界?为什么要回到即将有战争和灾难的人间?这是大叔父问真人的话
「下面的世界」虽然看起来很美好,就像那片大海一样,还有着那些外太空飞来的陨石、有一个鸟类的王国
但却住着明明五谷丰登还要吃人的鹦鹉、住着代代饥饿,却要与大海奋斗,又被火美烧的Pelican们。 这里依旧到处是争端
鹦鹉们守卫着“产房”,却要吃了不是婴儿的人,这些都是上面的世界和家庭里没有的。 海的世界虽然美而高贵,它的景色却大多是海市蜃楼
经过这次历险,z坚定选择了他选择的人生,一行人平安地回到他们原先的世界,与正好在外头寻找他们的父亲重逢。
一段时间后,战争也跟着结束。剧情最后是在真人听见父亲胜一的呼唤,离开自己的房间,与家人一起返回东京的场景下落幕。
❤1
duangsuse::Echo
#film #jp #bilibili 龙猫画风 《你想活出怎么样的人生/苍鹭与少年/2024》 https://zh.wikipedia.org/zh-cn/蒼鷺與少年 下午在B站发现有人上传了汉化组资源,写码之余就看了下, 评价:和《千与千寻》《寻梦环游记》一样治愈系,剧中充满了 和善 风趣 的小动物,无人员伤亡 一千个读者眼中有一千个哈姆雷特,所以「看不懂」其实也是一种正常的解读。 或许片尾有一些日本风俗文化,中国人因西化已经缺少了相关背景。只需共赏这个关于家庭、责任、冒险、梦想与海洋的「跨时…
https://movie.douban.com/review/15618283/ 🤔 然后影评说是反战,这么说也有道理 #china #tw
https://movie.douban.com/review/15618283/
鹈鹕是男主角进入塔内世界后第一个出现的生物。当时真人发现一个写着“学我者死”的铁门,门内的区域有一个巨大的墓碑。这句话是从齐白石的名言 “学我者生,似我者亡”而来,我看到这句话能想到的就是宫崎骏在告诫后继者,也就是新一代的导演们,不要试图一味的模仿。但从日本历史的角度出发,也可以理解为“学我者死”在暗示日本近代化中模仿西方文明的殖民扩张发展道路,导致覆灭的必然性。铁门锁着的墓碑,就象征着危险的军国主义,一旦打开就像是潘多拉的魔盒,注定会带来灾难。
但即便「内核」是沉重的,片中鹦鹉的样子也很憨态可掬,
https://movie.douban.com/review/15618283/
鹈鹕是男主角进入塔内世界后第一个出现的生物。当时真人发现一个写着“学我者死”的铁门,门内的区域有一个巨大的墓碑。这句话是从齐白石的名言 “学我者生,似我者亡”而来,我看到这句话能想到的就是宫崎骏在告诫后继者,也就是新一代的导演们,不要试图一味的模仿。但从日本历史的角度出发,也可以理解为“学我者死”在暗示日本近代化中模仿西方文明的殖民扩张发展道路,导致覆灭的必然性。铁门锁着的墓碑,就象征着危险的军国主义,一旦打开就像是潘多拉的魔盒,注定会带来灾难。
但即便「内核」是沉重的,片中鹦鹉的样子也很憨态可掬,
豆瓣
宫崎骏的理想国和反法西斯主义
故事背景在二战,宫崎骏明面上讲了一个异世界下的奇幻故事,实际上却是用这个异世...
This media is not supported in your browser
VIEW IN TELEGRAM
Josef Dean:
Sure matplotlib is cool, but what if I want to load my loss curves into the 2006 hit Flash game LineRider?
https://twitter.com/JosefDeanGC/status/1825818784495554693
Sure matplotlib is cool, but what if I want to load my loss curves into the 2006 hit Flash game LineRider?
https://twitter.com/JosefDeanGC/status/1825818784495554693
#js #code https://blog.axlight.com/posts/how-valtio-was-born/ jotai作者的博客
React 虽然很流行,很“FP”,但我不得不指出,它对“不可变”或者说「静态」的理解是有问题的…… 这点上居然输给了被它打败的MVP,MVVM等八股文
div(input(n=0)) 包含可变状态吗? 许多人觉得n是一个变数,那么, class ModelThis(var n=0) 凭什么能被称为「静态类型」呢? 视图的模型,到底是静态还是动态?
React 没有意识到,作为一个框架的职责,是维护JSON所对应的HTML模板;而函数式的作用,仅限于用mapfilter取代 forif 这些缺乏表现力的套路
“不可变”并不包含更多的超能力,实际上,它只是对「静态结构」的误解。JSON总是可变的,但它的Schema(struct,'type':union..)则永远是固定的!
集合类型,也包括函数,都能包含树洞。只要你定义了字典与HTML里树洞间的「对应关系」,并不需要什么设计模式就能秒杀各种UIUX。
>https://gist.github.com/duangsuse/c2703fae87c92826a482ef2dd9f523c6#file-note-woj-js-L35
这样就是一个Counter了 (代码比较烂就不贴完了,许多相关数据结构都还在设计中…… 相信最终会很优雅
我在React里看不到这种“口->口”(对象和箭头)构成的范畴,所以说它纯函数在哪呢?
如果React是基于关系式列表字典设计的,它只需要请 cage({n}) 把app所用到所有的洞锁起来就可以达成“状态树持久化”
何必解决什么View可变性的挑战?
btw. 冷知识: F12 是怎么显示函数源码 ƒ Object() { [native code] } 的? 🧐
https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts
https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/panels/event_listeners/EventListenersUtils.ts
React 虽然很流行,很“FP”,但我不得不指出,它对“不可变”或者说「静态」的理解是有问题的…… 这点上居然输给了被它打败的MVP,MVVM等八股文
div(input(n=0)) 包含可变状态吗? 许多人觉得n是一个变数,那么, class ModelThis(var n=0) 凭什么能被称为「静态类型」呢? 视图的模型,到底是静态还是动态?
React 没有意识到,作为一个框架的职责,是维护JSON所对应的HTML模板;而函数式的作用,仅限于用mapfilter取代 forif 这些缺乏表现力的套路
“不可变”并不包含更多的超能力,实际上,它只是对「静态结构」的误解。JSON总是可变的,但它的Schema(struct,'type':union..)则永远是固定的!
集合类型,也包括函数,都能包含树洞。只要你定义了字典与HTML里树洞间的「对应关系」,并不需要什么设计模式就能秒杀各种UIUX。
>https://gist.github.com/duangsuse/c2703fae87c92826a482ef2dd9f523c6#file-note-woj-js-L35
口=holey
let A=口(0), B=A(x=>x+1)
A(2)
JSON.stringify({A,B}) //B: A+1 永远成立,无论保存在什么结构里
el(doc.body, el("div",{onclick:A((x,to)=>+x+1)}, el("input",{value:A}), el("u",B)))
这样就是一个Counter了 (代码比较烂就不贴完了,许多相关数据结构都还在设计中…… 相信最终会很优雅
我在React里看不到这种“口->口”(对象和箭头)构成的范畴,所以说它纯函数在哪呢?
如果React是基于关系式列表字典设计的,它只需要请 cage({n}) 把app所用到所有的洞锁起来就可以达成“状态树持久化”
何必解决什么View可变性的挑战?
btw. 冷知识: F12 是怎么显示函数源码 ƒ Object() { [native code] } 的? 🧐
https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts
https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/panels/event_listeners/EventListenersUtils.ts
Daishi Kato's blog
How Valtio Was Born
Introduction There was a discussion in our team after releasing Zustand v3 and the brand new Jotai. It was about whether we could develop another library for global state.
In this post, I will reflect on the start of Valtio’s development and its API design.…
In this post, I will reflect on the start of Valtio’s development and its API design.…