/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
Forwarded from NF^2在播剧集频道
美國籃球明星科比在直升機意外中身亡

美國傳媒報道,美國NBA籃球明星科比在直升機意外中身亡,享年41歲。意外在美國星期日發生,報道表示,科比與另外至少三人,乘坐他的私人直升機,據報期間發生火警,之後墜毀,事件中無人生還。報道表示,科比的妻子並不在機上。
Forwarded from Deleted Account
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Deleted Account
默哀
Forwarded from Deleted Account
虽然我很难打篮球,而且跳跃能力和综合身体素质有严重问题
Forwarded from Deleted Account
但是科比的传奇是谁都知道的
而且他也很努力,『你见过凌晨四点的洛杉矶吗?每天洛杉矶早上四点仍然在黑暗中,我就起床行走在黑暗的洛杉矶街道上。』
世界上又少了个天才
Forwarded from Deleted Account
我帮你把 structure 整理一下吧,还是看你自己,我看番。

interface ChatObject {
constructor(user, msg, replyTo)
val sendAt: Time
val id: ObjectID
val user: UserId
val msg: String
val replyTo: ObjectID
val edited: EditedInfo
fun delete()
fun revise(newMsg: String) //edit
interface EditedInfo {
val edited: Boolean
val editedTime: Time
}
}

interface ChatObjectsCenter {
val db: Database
val replies: Replies get
interface Database { // CRUD
fun register(id: ObjectID, value: ChatObject) //Create,Update
fun query(id: ObjectID) //Read
fun unregister(id: ObjectID) //Delete
}
fun setReplyTo(target, m)
fun search(info: SearchFields)
interface SearchFields {
val user: UserId?
val msgPattern: Pattern?
}
} 

个人建议,反正我们只记录最近一次编辑,EditedInfo 整个可以用特殊值设计
它实际上是记录一个时间,但也可能没有(代表未编辑的情况),我们用 Optional<Time> 就可以表达了。
如果你要使用 Telegram 一样的设计,那势必要加上一个时间轴,就不是上面的那种形式了

另外 setReplyTo(target, m) 是『设m的 replyTo 为 target』的意思,这是一种比较不符合直觉的表达法,
读起来找感觉的时候,先把注意力放在 setReplyTo(target, ... 这一部分,再轻读后面的 m,你就熟悉了。

关于 SearchInfo,你也可以分 type 来建模,参考我的这条

如果你写不出来,可以先看看我老早之前的东西 Timelines

祝好,另外,许多人在写得出来任何东西之前都会经过看起来「即得易见平凡」写起来「混沌难解NP完全」的问题,解决困难的最好方法是面对更多困难,坚持下去、多读书,奥力给!
Forwarded from Deleted Account
如果你对自制语言感兴趣的话,可以看看我那三个
https://duangsuse-valid-projects.github.io/Share/Others/essay-kotlin-parser
https://github.com/duangsuse-valid-projects/jison/blob/master/src/commonMain/kotlin/org/jison/JsonParser.kt
https://github.com/duangsuse-valid-projects/Share/blob/master/%E5%AF%B9drakeet%E7%9A%84%E4%B8%80%E4%BA%9B%E8%AF%9D/DefLang/DefLang.js

很快你就会发现自己的语言可能会有写错但因为它本身没被形式化,所以找不出来的问题比较多了。
缩排很好,不过写起来有点麻烦,解析器只需要加一个 layoutSpaceCountStack 就可以了,每层一个 layoutSpaceCount
不过恕我直言你现在想写应该有点困难,还是先写个 JSON 解析器练手吧。
Forwarded from Deleted Account
关键是,有些东西比较容易眼高手低
理论很重要,但实践指导理论往往更重要,因为理论经常有瑕疵,必须靠实践去打磨、靠测试去验证
所以说简单列一下数据结构就可以了,重要的还是写出来,写不出来就继续往底层抽象,抽象到对接 Browser、Node、Filesystem 和底层框架的 API 为止。
Forwarded from Deleted Account
两年前以来我写的 Specification 可以认为是比你多了,甚至我还弄出了 GeekSpec
可是我也没实际得到什么,所以说,Specification,够用就行,没必要太重视。就像有些 Java 程序员喜欢吹设计模式和 UML,其实吹到头了什么都没有,就像 Eclipse 一样,十年如一日。

这个应用,我花了六个小时才写出来,但设计的时候我就想了一个 data class Record(val place: String, val name: String, val status: Boolean)
Map<PlaceId, Map<StudentID, Boolean>>
至于 findIn(place, name), findAllIn(place), runSubmit(data) 上面的 CRUD 操作(虽然我不太喜欢这个名词)都是后来动手的时候想的,我只需总结一下用到的 tag 有 <input placeholder value> <textarea> <button onclick> <table> <thead> <tbody> <tr> <td> 就好了,

对应到 Android 上 input, textarea 就是 EditText、button 就是 Button,table 我不知道,反正知道了写出来就可以,实践会慢慢往上堆…… 不对,不能堆,要经常简化和归纳。
Forwarded from Deleted Account
代码复用也是很重要的,我讲不清楚,这两张图可以拿作例子。
runRefresh 渲染视图,用的是很 legacy 的方法,但我加了两个函数看起来就好很多了(第二幅 49 行)
导入导出数据的操作,也是由 enableDataConvert 函数执行的,假设我要再支持导入导出 YAML 也很简单,只需要在对这个函数的调用里加行代码就够了,而不是改完 HTML 再加 onclick listener

没有魔法,就是 JavaScript ES6 而已。
)你们至于吗你们 我惹了谁了……
Forwarded from Deleted Account
这是谁滥用权限设计比较开放
越过我加的验证码,三秒钟就给删完了
就是批评我的验证码不够有用也不必这么搞吧 过分了
搞错了,貌似 LC 的后端表示还是没问题的,大概是网络问题(注:人名信息本身是开放的)
最后的解答:其实是我没填列表名字…… LC 的后端控制台可能包含了和谐敏感词的设计
Forwarded from Deleted Account
众里寻它千百度,木然 PageDown,那消息却在数猜未见中。 🤪
Forwarded from duangsuse Throws
讲道理,如果你不想锻炼的话,你应该在一所寝室 6 个室友全都玩手机修仙的情况下不带手机,然后你就会无聊的做锻炼了...
我就是这样的...

#trick #China #school #life #Haha
Forwarded from Deleted Account
这么一看『很久很久以前』是在 2019 年 1 月左右
那年 7 月放的暑假,
熬夜记得是一个暑假熬的,之后又弄了几次…… 我都记不清了
这么说也是坚持锻炼蛮长的时间,直到 2019 年 7 月一直熬夜……

记得那时候一个月经常是两三四点不睡 也不长痘 不觉得胸闷 不觉得困
想起来也是怪可怜的 😢
最后一段时间这种情况一直连了一个星期,而且熬夜居然都是刷 Telegram…… 之后锻炼就少了
现在基本和最开始的时候没太大区别

所以说沉迷知乎也不要沉迷 Telegram…… 😂 #life #school
https://t.me/dsuse/9602 那段时间的消息