/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
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 那段时间的消息
🤔 我又考虑了下绝句的语言特性

语言层次:常量(literal)、言元(atom expression)、言(expression)、句(statement)、段(block)、构(item)、书(file)
面向对象构件:常(const val)、变(var)、量(val) 取者(getter) 置者(setter)、事(fun)、造于(constructor) 初(init)、例(object)、物(class) 伴生例(companion object)、类(interface)
特化物:扩物、内物(inner class)、储物(data class)、例物(enum class)、况物(sealed class)、标物(annotation class)、抽象物(abstract class)
预定义引用:亲(super)、我(this)、你、它
预定义常量:真、假、空
类型系统:函数重载、子类型多态、参数化多态、入/出 生产消费型变性声明、交集上界限制、可空性、『我属』预定义类型变量
语言特性:面向对象编程、构件可见性、函数及属性扩展、闭包、多态、操作符重载、Annotation

可见性:公开、族内、私下、内部
外部定义:待例、实际
标记:【(类型) {(名=)? (常量/常量组)}、】

函数及属性修饰:抽象、实现、内联、记法 「(记法)」
函数修饰:算符、尾递归
参数修饰:许多、跨嵌、不嵌
变参修饰:晚成
类型参数修饰:实化、入、出

— 定义
包(复合名)为
引(复合名) [的(名)].[成(名)]
引全(复合名) [的].[除(名或行)]

常(类型).(名)=(常量)
属别名(名)=(类型)
对何<(类型形参)> [其中 {(类型参数):(类型)}、] 皆有

事 (名)"(" (形参) ")" 为 …其中块
事 (名)"(" (形参) ")" = (言) …其中块

其中块
其中,{局部定义}
局部定义
(量/变参/事)
顶部定义
(局部定义/常参/例/物/类)
文件
Shell行? 包? {引记法}? {引入}? {文件标记}? {属别名}? {顶部定义}?

注意这里那个 (类型) 啊不是说这个在解析器里就检查,这里 (类型) 全都视为 (复合名)。

— 缩进和文法布局

类似「事」「例」「物」「类」的定义构件,都是使用「为」来限定起止部分的。

绝句里有两个形式开启新布局:「,」及「为」
新布局由它们开启,小于后随布局空格数的缩进结束。

绝句里有可以换行的语法形式:
(缩进)要求比当前布局宽:参数切分「、」和「。」
要求持平当前布局:「;」

— 记法(自定义中及后缀)
引记法(复合名) 「(记法)」
引记法(复合名).除 「(记法)」
定记法 「(记法)」

记法可以包含任何名字本身可以包含的部分,以及符号、数学符号区段的字符。
'~' 前缀的记法是后缀记法

— 基本控制流
—— 变量
量(名)[:(类型)]=(言)
量 提(模式)=(言)
变(类型).(名) [初(言)]
变参(名)[:(类型)] [初(言)]
—— 判断
若(你?) (言)…… [ 否则…… ] (第二人称)
判断,{ (言或列)…… } [ 否则…… ]
判(你?) (言),{ (言或列)…… } [ 否则…… ] (第二人称)
判(你?) (言)属,{ 于(类型或列)…… } [ 否则…… ] (第二人称)
判(你?) (言)存,{ 于(言或列)…… } [ 否则…… ] (第二人称)
—— 重复
对(言)里的(名)……
对(言)里的 提(模式)……
对(言)里的 你…… (第二人称)
对(言)里的…… (第三人称)
重复 若(言)……
重复…… 若(言)。
—— 返回
回(标签?) (言?)
回 交(言)
回 重写(参数列表)
—— 跳转
停下(标签?)
略过(标签?)
— 结构化异常
尝试…… { 接迎(类型)…… } [ 终焉…… ] (第三人称)
抛下(言)
— 中缀链
「它 (记法及的链)」 (第三人称)
例:「它的名字+1」、「它前」

记法包括中缀记法如「以」和后缀记法「~上面」「~为零」
中及后缀记法有否定修饰,如「是」前跟“不”构成「不是」、「为零」前跟“不”构成「不为零」

「」形式可以在需要函数的地方被提供。

— 中缀简记

你(言) {(且/或) 记法链} (第二人称)

— 逗号表示法

逗号表示法可以用于「若」「判断」这样结构「段」的表达,也可以用于创建闭包。
逗号表示法有两种形式,逗号布局、逗顿句简写。

若此人的名字是"林则徐",
说("苟利国家生死以")

这是逗号布局。

若此人的名字是"林则徐",说("民族大义")、说("苟利国家生死以")。

这是逗顿句简写。

如果用于闭包则还有一种指定闭包参数的扩展。

人们 映为,〖他〗他的名字。
人们 映为,〖他〗
他的名字


— 可空性
(~)? // 空访问
(~)!! // 非空断言
(~)空则(言)
(~)空则……
— 访问语法
(~)的(名)
(~)去(名)(参数列表)
(~)去::(名)
(~)"["(言)"]"
(~)(参数列表)
::(名)
— 前缀
非(言)
— 连接词
且 // (&&)
或 // (||)
是 // (==) 试等
即是 // (===)
存于 // (in) 试含
.. // (..) 取至
(~)属于(类型) // (is)
(~)作成(类型) // (as)
(~)试成(类型) // (as?)
— 数学计算
+ // 加
- // 减
* // 乘
/ // 除

— 标签
「事」及逗号闭包的接收者会引入隐式标签
「对」「重复」后可以在后面加 [] 引入标签
逗号闭包可以用 ,[label] 引入标签

— 常量
真假 Boolean
数 Int、长数 Long
— 符号 (+/-)?、后缀 (L/l)?
— 支持 0x 0b 表示法
— 支持汉字数
短浮 Float、浮 Double
— 支持 (+/-)? (E/e)? exponents
— 后缀 (F/f)?
字 Char
文 String
— 支持 \"\'\t\b\n\r\$\\ escape
— 支持 $(名)${(言)} 嵌入
— 支持 """ """ 跨行文本
名(标识符)
换 Kotlin 的 `` 成 『』
注释
— 支持可嵌套 “” 全角双引号,‘’ 不可用

— 保留构词
模板、类实例、性质推导

— 一些非语法细节
to ~ 到;upTo ~ 至;until ~ 止