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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo pinned «当然我也看过 LIF 的消息, #Statement 频道主在此建议在座的各位一起维护良好的交流氛围,不要让更多的人心寒。 但我还是决定,即便没有用,我不会像以前一样,把所有错都归在自己身上。 没错,我不该尝试逆向分析纯纯写作,即便它的作者之前三次在频道上说它的反破解(代码保护)技术有多么多么高大上,令人心动, 然而现在我不仅完全可以自己手动从 x86 汇编代码和 Java 字节码里还原本来的程序逻辑,也开始自己独立研究学习基于抽象执行、表达式收束和基本块、模式匹配的反编译器算法了,你照样可以拿着…»
duangsuse::Echo
对了,看到 drakeet 的这个广播,我突然想起来我本周有一个应该纠错和反省的东西得提到,不能忘了(虽然马上要放暑假) 有朋友说他会反复看我写的东西,令我很感动,因为我也是这样,我也会无数遍不停看自己写的东西或分享,所以当有人细心一点会发现我的内容即使有错别字或不妥的内容,但最终都会相对改正和变得相对得当,这点上我也很佩服王垠,他的博客文章,我从来没有发现错别字,即使我是一个很敏锐且阅读文章特别慢的人 ... 只是说人的东西永远都会成为黑历史,经典是非常难得的,因为一个好的人应该是不断飞速成长的,如果…
其实 Ra 之前的类型语法一直有严重的问题... 开始直接 adopt 了很多数学操作符的简记法(比如 * 对应 ×)

Ra 里(虽然目前因为还没有设计到 Type Constructor 的类型所以没有一些其他的操作符,也忘记设计代表所有类型的标记了,在 Kotlin 和 Haskell 里是 *
目前有这些类型项目(但不是类型相关的项目,比如说 Lambda Abstraction 和 Application):

+ Type 某一个普通的类型,Ra 有内部和 FFI 的类型 extern type 和用户自定义的类型 data
data
可以定义单实例类型,也就是 Rust 的 Zero-sized types

data zero, one

forall T: Type.
+ T * T 是 Ra 的 Product type,用 name :: T 指定名字,这必须使用 data 语法定义
data Animal { name :: Str }
Ra 里也有匿名的 Product type,被称为元组(Tuple)
+ type Point2D = <Int, Int>
+ T ^n 是 Ra 的 Homogenus product type,也可以作为 Array 来用
+ T + R 是 Ra 的 Sum type, tagged union

type bit = zero + one where
data zero, one

Ra 还支持子类型

type bit where
data zero, one is bit

Ra 还支持一些高级一点只在 checker 里讨论的类型

+ Union type

Ra 的 union type 是取两个类型的并集 A∪B,比如 (Walk | Sleep)Human 的超类型 Human ⊂ (Walk ∪ Sleep)
实际上这表示所有人 (Human) 都实现了 WalkSleep 类型所有的操作

let showdump :: (Show | Dump)

+ Intersection type

Ra 的 Insect type 就是取可能值集合的交集 A∩B,比如 (Cat & Dog) 是空集(世界上不存在猫狗兽)、(Donkey & Horse)Mule (骡子)

let destroyable :: (Object & Destroyable)

/// 😫 才发现弄错了啊....

我刚才走在路上以为 Ra 的 union 和 insect 搞混了,我把

+ Union 当成了 (&),这也无可厚非,毕竟 1 :: (Show & Num) 看起来语义还是正确的吧?
可其实呢?add1 不可作用于 (Show & Num), 何况数学上看起来这很不对,两个非空集合的 Union 结果会导致 card “长度”增加,弄错这完全是因为我太菜。

+ Insect 当成了 (+),这还是对的,因为 Rust 里就是这个样子的...

看来还是自己实际在电脑前写下来的准。
duangsuse::Echo
Current settled on this. 关于某排序问题,我最终总结『为什么会有这个误解』的结论就是: (原问题来自 drakeet 的 Android 应用 PureWriter 文章列表实现『同时自动/手动排序』功能) drakeet 想了这个问题,然后举了一个类似 a > b > c 的(可主观自动排序列表,降序排列, ord=(>))例子 其中 b 是被用户安排的项目,且用户希望 b > c 5 没有被手动排序过,5 排在 1 前面 (5 > 1) 4 被*手动排序*过,4 也在 1…
#fix UPDATE: 我在写文的时候看见了他给的一点额外的信息(虽然其实也没有那么刻意)
发现还有一点资料没有看到(刚才我还以为我审题审错了... 两个都是手动,所以序可能是 (<) lessThan,那例子就是非序列的)

[Forwarded from Drakeet]
就是我我们要的是那样的结果,但你找不到一个逻辑能够让程序去实现

[Forwarded from Drakeet]
这里面有矛盾

不过对我来说好像没有太大帮助... 我开始猜的就是这种情况,正好符合他
找不到一个逻辑能够让程序去实现
的表达。而我的条件也没有弄错。

不过我是找到逻辑让程序去实现了,也不过是为每一项定义一个 lessThan 集合(Map<Item, Set<Item>>),每次去动态判断序,我不知道除了我枚举出的那个情况,是不是还有别的矛盾,但反正没人愿意告诉我了。

『要求』怎么抽象?其实可以做一个 lessThanC 集合,如果右项目是 c,则直接判断左项目是否在 lessThanC 布耳映射内否则返回 True(满足序列)
Forwarded from duangsuse Throws
对 drakeet 的一些话 by duangsuse 现在已经可以在 Telegraph 上访问... 懒得统计字数行数链接数了,虽然写的时候也快写完了,但是因为字数有限制,还是不得不裁了很多本来打算加上的内容。
duangsuse Throws
对 drakeet 的一些话 by duangsuse 现在已经可以在 Telegraph 上访问... 懒得统计字数行数链接数了,虽然写的时候也快写完了,但是因为字数有限制,还是不得不裁了很多本来打算加上的内容。
这篇文章我写了大概一天多的时间,开始的排版比较随便,现在的格式是一般的论文格式了,你能看到 Abstract、Footnote 和 References,虽然我还不知道真正的论文格式是啥子...
羽毛的小白板
https://www.zhihu.com/question/329153374/answer/716655357
#db #fix 才看到自己曾经的消息,这里其实 ORM 的问题,真的不是问题...
#Java JavaEE 的 JPA javax.persistence 规范提供了解决这种问题的思路,我以为只能那样解决是我太菜,仅此而已。

图数据库解决的问题,是提供非规范化视图,用以进行快速的 bfs, dfs 图搜索操作,这样就可以找到诸如『你和某人共同的 follower 是哪些人』一类问题的答案,而无须(在语义上)存储所有临时结果,不是 ORM 所谓的 N:N 问题,它不存在,ORM 支持 RDBMS 的关系模型。

上面的例子里,这根本不是一个问题,这种 N:N 多—多 (而非 1:N / N:1)关系问题对 ORM,很简单。

@MappedSuperclass
public abstract class BaseEntity implements Identifible, Serializable, Timestampable {}

因为首先可以定义一个复用的公共『ORM 对象』接口规范,那么 Identifible 的接口定义如下

/* 32-bit Integeral identifible object */
protected interface Identifible { int getIdentity(); }

Timestampable
则是所有可以拿到 creationDate 和 updatedDate 的对象
protected interface Timestampable { Date getCreated(); Date getUpdated(); }

就可以开始定义基本的 Domain Object 们,他们装数据

@Entity @Table(name = "users")
class User extends BaseEntity {
@GeneratedValue(stategy = GenerationType.Identity)
private @Id int id;
@NotNull private final String name;
@NotNull private String nick;

@ManyToMany(mappedBy = "stargazer", cascade = CascadeType.ALL)
private @Column(name = "stared") Set<App> publicApplicationStars;
}

@Entity @Table(name = "apps")
class App extends BaseEntity {
@GeneratedValue(stategy = GenerationType.Identity)
private @Id int id;
@NotNull private final String package;
@NotNull private String name;

@ManyToMany(mappedBy = "stared", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval=true)
private @Column(name = "stargazer") Set<User> stargazers;
}

另外,王垠说的『等价 RPC』我也想到了一种可能。
他假设的就是,数据库的『数据结构部分』就放在某台计算机上;
“查询的本质,就是在那台计算机上执行一个程序,这个程序负责把结果搞出来,然后响应对应的 RPC 请求。”
所以说是 RPC。

不过是不是真的这样,上面说过了我不想重复一遍。

— References
Baeldung::Hibernate Many to Many Annotation Tutorial
#tasks 明天希望能完成的任务:

+ 把这篇文章转移到 GitHub 上,这需要一个使用 Telegraph API 的 HTML->Markdown 翻译器
+ 实现不能完成的任务,用 merge 和客观序的方法解决逻辑相悖的问题
+ 写之前考虑好了的 Java 解析组合子框架


— 再一天
+ 写一篇关于链式(计算机科学的图)音频信号处理结构的文章
duangsuse Throws
对 drakeet 的一些话 by duangsuse 现在已经可以在 Telegraph 上访问... 懒得统计字数行数链接数了,虽然写的时候也快写完了,但是因为字数有限制,还是不得不裁了很多本来打算加上的内容。
修订文章的过程中,发现了一个有趣的事情

因为我有刻意去斟酌文字,希望尽可能让标点符号用的更符合直觉。

对 drakeet 的一些话(内联)

有一段话:

“黑历史”是曾经不完美的见证,但它对自己而言也不是没有用处的,因为一个优秀的人时常要复习一下自己的黑历史、记住自己曾经的误解、不确定,来为自己的未来提供一个完整的排除名单。错误不再重复第二遍。

我给它的第一段修改成了

“黑历史”是曾经不完美的见证,但它对自己而言也不是没有用处的

我做了一件事情:
+ “独立”了一个句子,把『因为』连词去掉
+ 然后把逗号改成了句号

因为我之前一直思量着有一个基于 NLP 的软件内被设计出来,所以也一直有在想它功能的一些事情,其中就应该要包含类似语法检查的功能,但是语法自动重构可不可以呢?

这类句子应该怎么泛化抽提出其模式,来用于模式匹配和重构呢? #NLP
很复杂... 我语文水平不好的,这个例子本身没有那么 trivial
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
😂 Sticker
我也是一个很热爱生活的人,现在我要立刻继续我的付出了,睡觉。
Forwarded from duangsuse Throws
#life #tech 修整了两三天。暑假,duangsuse 可能回老家过... 🤔

修好了一台旧笔记本电脑,顺便被换了个硬盘,换掉了坏的风扇... 之前因为养尊处优就一直没有想修,没有拿电表查也没有示波器这种高端仪器,怀疑只是电源按钮坏了...

暑假也没啥安排,有通网,就是做一点之前计划了没完成的事情吧。

眼见着自己对编译原理和杂七杂八应用设计的理解也开始向深发展了,大概之前费了点力气 GeekApk 可以重新启动了吧,大不了我再抄两三次书。

老系统用的是 OpenSUSE,大概先换上 Arch + XFCE 吧。
duangsuse::Echo
我也是一个很热爱生活的人,现在我要立刻继续我的付出了,睡觉。
其实这是一个计划的三天适应性休息,不过因为一些事情没有完成延长了一天。期间我看了 N 集的三大民工漫之一 — 《火影忍者 疾风传》
duangsuse::Echo
其实这是一个计划的三天适应性休息,不过因为一些事情没有完成延长了一天。期间我看了 N 集的三大民工漫之一 — 《火影忍者 疾风传》
(不过,看起来坏习惯还是依然存在嘛。还是不擅于管理时间,唉。
而且虽然没有上线,前两天也是有熬夜到 12 点左右的,这么说,只是比写代码讲 XXXX 的时候好一点点。 🤪
[In reply to ...]
啊,对不起,现在基本了解了;Python 的确提供了很多方便的列表操作语法

list[0] 这是最简单的 list.at(0) 解索引
list[0:10] 这是依据 slice 取 subsequence

list[0:-1:2] 就是 list.take(Range(from=0, to=list.length-1, step=2))

Python 因为比较『灵活』所以索引有两种:
+ 0..lastIndex, 数学里的 (0, size]
+ -1..-size, 代表 (size-1, -size]

比如,

xs=[1,2,3]; ys=[2,4,6]

Python 里可以用 List comprehension 定义 ys
ys = [x *2 for x in xs]

索引:

xs[-1] #=> 3
xs[-3] #=> 1

子序列:

xs[0:1] #=> [1,2]

加上 Range with step 后可以按『步』跳着复制

xs[0:-1:2] #=> [1,3]

list[:]
实际上是 list.subsequence(range(0, list.size-1))
list[::-1]
实际上是 list.subsequence(range(list.size-1, 0, -1))

-1 为步长复制的话,就是这个颠倒序的结果
啊,可惜我现在还是 2G 的说(马上
Forwarded from 荔枝木
2019 年了,温习一下:4GB 在电脑上绝对称不上大内存,8GB 都称不上大内存。最近想要购买笔记本电脑的朋友们,尤其是高中毕业准备走进大学的朋友们,如果对自己专业软件所需的硬件配置不清楚,请咨询自己专业的学长学姐们。
#TT #PLT ... Typescript 渐进类型果然爽炸,Type notation 就可以讨论 value level 的事情,随便创建类型集合,甚至可以是 ("+" | "-")[] 这种...