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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
我还是理解的,毕竟从JavaScript系开源社区的角度看,我的项目还没 README 呢,也没 examples,都是代码往上贴,有人看才怪。

而且涉及到二进制会的人估计也少,就是一群只用 for (int i=0; i<size; i++);class User { int age; } 这种的,不做二进制读写更别提手书 java.io.DataInputStream 了,更有甚者连 Java 的 int 有几二进制位甚至 IEEE754 都不知道。

本项目使用到许多函数式风格,以及对 Kotlin property/method extension、in/out variance、inline/crossinline、takeIf/also 这类东西的使用,其实在工程界实属罕见,有些框架的设计者会一点,但应用层的人基本都是能写死写死了,不会想着怎么好看。
或许在许多开发者眼里,类型就是 val x: Int = 1,但我的理解会更深刻一点,我的直觉是类型为程序静态规范性服务,所以用得比较随性一些(包括尽可能多泛型化,不常见一点的 overloading 使用方式什么的),虽然这也很菜但其实『很高』了。
duangsuse::Echo
我还是理解的,毕竟从JavaScript系开源社区的角度看,我的项目还没 README 呢,也没 examples,都是代码往上贴,有人看才怪。 而且涉及到二进制会的人估计也少,就是一群只用 for (int i=0; i<size; i++); 和 class User { int age; } 这种的,不做二进制读写更别提手书 java.io.DataInputStream 了,更有甚者连 Java 的 int 有几二进制位甚至 IEEE754 都不知道。 本项目使用到许多函数式风格,以及对 Kotlin…
所以说他们怎么那么菜啊!这其实也没多难的好不好…… (跑
唉。

其实本项目也不是为了给那些小白写的,如果有机会以后用 Literate Kotlin 重写了就能让小白看懂了,但是不得不废话很多东西,现在主要是让知道自己要干什么的人能写少点、写直白点。
duangsuse::Echo
因为 duangsuse 太大佬了 咱弱鸡看不懂
Rachel 高考顺利。很久没看见你了,感谢一直关注本频道~(怎么感觉好像很稀奇订阅者一样,真是贪 star 太少成病了么……)
当知道要重写的代码分成 data/operation,而且不同的部分在不同的文件里,且解析器是高耦合的时候,我非常惊恐。
当知道要重写的代码没有严格面向对象,而是使用 singleton data storage + clear(),并且使用 subsequence 式解析数据提取法,我更慌了。
StringChunk 和 style 的 offset 计算方式扑朔迷离,令人窒息…… 原来 copyByte 的第一个参数是 offset,第二个是 size…… 我还以为是 index range 呢
我感觉我在一大堆 magic number 里尝试揣度这到底是要提取哪个位置的数据。
让自己觉得看懂这样的代码非常简单,但想理解很烧脑,尤其是我这种人在看 4, 8, ... 4??? 这些参数的时候。
我去,这注释位置也太离奇了吧!为什么不注释在下面呢?上面谁知道那个 8 是啥意思啊?
awsl
太难了!
这扑朔迷离的名词 stylePool,在是 int 的同时又是 byte[]
这个特化处理也太难了吧!我感觉我是在写 radare2 脚本。
我死了,今天肯定做不完的
duangsuse::Echo
我死了,今天肯定做不完的
但是,这里所认为的 AXML 文件基本结构,我们之前写的复用库里可全都包含在内呦。上面的例子就是经典的 Cond(flag, item), 这里 flag = int32
我最后考虑了一下,好像 Writer 还是必须支持 position 的…… Java 的 ByteArrayOutputStream 在内部就保留有…… 然后就可以有 aligned 这个 pattern

为了 Cond 的 flag 在一些极端情况下的可用性(比如 flag 的 index 是从 1000+ 开始编列的)
必须有一个 map 的 pattern helper,来把输出映射到特定值,再映射回来。
aligned 不应该作为一个 pattern 出现,因为它实在不好取类型,Nothing? 是错误的办法
但可以作为类似 EndianSwitch (PrePost) 的东西出现
特立独行的 pattern
#dev 汲取之前的教训,我再也不为了让测试通过而想当然地改代码了,至少在调试分析以后找出问题根本原因所在,才能算成功。
任何可能出错的地方都会出错……
当时我还检查了很多遍,自以为该 update 某变量的所有地方都检查了,看来好眼睛不如好实例代码、熟练的 IDE 分析工具使用,重点是难以抓住的,肯定要多测试。