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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
#Learn #daily duangsuse -j4...
duangsuse::Echo
#life 电脑要回来了 🌝 今天开始全职写代码....
升级了 918 个软件包,新安装了 37 个软件包,要卸载 0 个软件包,有 5 个软件包未被升级。
需要下载 171 MB/1,020 MB 的归档。
解压缩后会消耗 1,047 MB 的额外空间。

#daily
#daily 大佬吊打我,我隐式吊打小白
#daily #life in #China #school s
三线小城的 duangsuse 也终于通过 @lexuge 知道一些学校里的怪物是如何炼成的了
他们从小就加入编程社团,至少是在初一初二,而 duangsuse 是初三即将毕业时才写了一个简单的 Java Android 应用
之后的发展我就不用说了,部分类似 duangsuse 这样的会自己发现新世界,然而他们发现之后有很多时间学习和发展
(而 duangsuse 不在学校而且有 GeekApk 等拖不算是真的在用心学习。之前在上学的时候用电视看 Rust 手册,真的学习效率很高。我当时只有一点微不足道的 Java 基础)
几年中他们中的一些人会写很多博客,也写完了很多可用的项目,之后再根据个人的性格可能有分支

而排除 duangsuse 自身的主要原因(学习不用功、数学垃圾)在外
襄阳没有学校实际执行了社团这种教学设计,每个人的兴趣很不受重视,就是这样。
#PL #code #guide #daily #scheme

关于 Lice lice-lang/lice 解释器的分析

我们只看解释器实现,不看测试和文档什么的,目标为理解官方 Lice 解释器实现和汲取精华、以及提出充分利用 Kotlin 特性的建议

org/lice/api/scripting/*

javax.script 的 API 接口

我们可以看到,LiceScriptEngineFactory 类提供以下信息

LanguageVersion EngineVersion Extensions MimeTypes LanguageName Names EngineName

ScriptEngine()
OutputStatement(toDisplayString)
Program(statementsCode)

MethodCallSyntax(obj: String, mid: String, vararg args: String)

Parameter(paramString)
"javax.script.engine_version", "javax.script.language_version"
"javax.script.engine", "javax.script.language", "javax.script.name"

LiceScriptEngine 做这些

class LiceScriptEngine : JavaxScriptEngine
private var context: LiceContext = LiceContext()
getContext()
setContext(context)
setContextIfIsLiceContext()

getFactory()

eval(scriptString, context) = eval(script, context.bindings)
eval(script: String) = eval(script, context.bindings)

eval(reader: Reader) = eval(reader.readText(), context.bindings)
eval(reader: Reader, n: Bindings) = eval(reader.readText(), n)
eval(reader: Reader, context: ScriptContext)

eval(script: String, n: Bindings)

get(key: String?): Any? = context.bindings[key]
put(key: String, value: Any?)

createBindings() = SymbolList()
getBindings(scope: Int) = context.bindings
setBindings(bindings: Bindings?, scope: Int)

并且 LiceContext 做这些

bindings: SymbolList
reader: Reader
writer: Writer
errorWriter: Writer

getAttribute(name: String)
getAttribute(name: String, scope: Int)
setAttribute(name: String, value: Any?)
setAttribute(name: String, value: Any?, scope: Int)
removeAttribute(name: String) = bindings.removeVariable(name)
removeAttribute(name: String, scope: Int)

getScopes(): MutableList<Int>
getAttributesScope(name: String?): Int

getBindings(scope: Int)
setBindings(bindings: Bindings, scope: Int)

然后是 org/lice/core/*

AbstractBindings

variables: MutableMap<String, Any?>
provideFunctionWithMeta(name: String, node: ProvidedFuncWithMeta)
provideFunction
defineFunction
getVariable
defineVariable
isVariableDefined
removeVariable

containsValue
clear
putAll(from: Map<out String, Any>)
containsKey
get
put
isEmpty
remove
var size = fun ...
entries: MutableSet<LiceEntry>
keys
values
#cs #daily btw 我这周又双看了不少资料瞬间爆炸(删除)(怎么会说这种...)(emmmm)(好吧是「帽子戴不上了吧」 which 是 Sussman 就是那个 Scheme 作者之一【不是】是 Friedman 说的(儿童书 The Little Schemer 上))

这些资料包括,接下来频道江会发一些很多哲学讨论...(我真是苟改不了 **... 理由请翻我潵频道
同时 InScript 我都打算 freeze 1.0 设计了可上周还是啥都没做 emmm 以后有时间吧。我的设计都写在纸上
这周我自己的打算写好 aRsi(我也不知道 R 是啥的缩写,或许是 Rikka 逃跑(可是 Sexp Interpreter 和 Rikka 有什么干系 a: 希腊还是拉丁字符 "alpha")
还有 Gekyll(没错还是...)

impl 这些资料包括.... ........

呃其实嘛我总结一下包含博文、代码示例、嵌入式、函数式(此式非彼式)(好像的确是一样...)、操作系统、编译原理、逻辑式、程序语言相关的内容,因为比较多所以我不可能全都记得

(实际上到的时候我默写了一下,我记性还不错因为我只忘了三份资料分别是 《Agda 中的 coinductive type》 《GeekApk HTTPS API 枚举》 《(还是忘记了...)》
(很厉害哦,我足足默写下来了二十多份资料)(别拿某综艺栏目和世界纪录嘲讽我...)(233333)

我列举一下大概是(因为我使用了双面打印技术而且一个文件夹 slot 可能放了几份打印资料,所以有混淆不好看)(完整列表到时候放)

+ Rustonomicon (Rust 底层理念和 C 交互书)(里面囿教你怎么写 std 外面的 Vec ptr::Unique Box<T> Rc<T> (别问我为啥 T 只有两个)(别问我为啥没有 `'a`)(因为懒)
+ Rust 宏小册(TLMB 不 TBRM,The little Book of Rust Macros)讲 Rust 宏的,想必 @zhy0919 你也看过(Rust 民必备书籍)(当然,其实我很奇怪 why Rust 标记类型 ty 是 type 而 item 却没有缩写)(反直觉...)(你看我们光明正大的学逻辑式那叫有 B 格的反直觉在命名上反直觉很 low 的不是吗...)
+ GeekApk... 说真的,API 文档真的是莫名的好看,我觉得真 tm 好看啊... 可惜了 当然我现在是有能力实现了 (或许还要等半年吧哈哈)
+ 计算机网络复习笔记,其实我没看
+ Web 信息处理应用(信息技术经典嘛)(就是熊的 web.pdf)
+ fold.pdf 标题是 A tutorial on the universality and expressiveness of fold where fold 是函数式集合处理经典函子 which 定义得 like this (Kotlin code)

inline fun <T, R> Array<out T>.fold(
initial: R,
operation: (acc: R, T) -> R): R {
var accum = initial
forEach { x ->
accum = operation(accum, x)
}
}



:( 我也写不出来!)因为函数式内容还需练习 https://en.wikipedia.org/wiki/Fold_%28higher-order_function%29 (给个提示,它(fold)也叫 reduce)

 foldl :: (b -> a -> b) -> b -> [a] -> b
foldl f z [] = z
foldl f z (x:xs) = foldl f (f z x) xs

至于那行英文我也看不懂别问我(坏笑)(其实我是看得懂的)(废话)

+ Lice 的静态作用域实现(到今天我才知道啥是 lexical scoping 啥是 dynamic scoping 然后才知道 Lime 本质上虽然不内建作用域实现但其实是 dynamic,,,)(其实也算 lexical 吧我们的宏是 lexical 规则好的)(没错学术性的定义我还看得懂...什么动态作用域的时间是词法作用域的位置)(龙书很难吗?)

+ PL/0 就是那个编译原理实践的
+ MIPS CPU 设计,我没看懂
+ Huffman 编码压缩,我觉得我也可以写一个 2333
+ FoPL 的 GC 算法讨论(说到 GC,那个 bumpptr(指针碰撞分配)式 GC 的正式名称是什么)(我知道它只是 GC 分配方式的一部分不是整个算法)(alloca [i32 x 8] ....)non-overlapping~
+ R 大(Rednaxela)的解释器和 AST Walker Interpreter / VM 随谈,大佬啊,顺便学习了一波寄存器窗口什么的
+ Scheme IL、Sexp 语法,我设计的(自豪)(其实 MinVM 我早在半年前就设计过了...)
+ 一些 DOS 汇编代码,计算器之类的...
+ typesafe template printf 什么 value -> type = dependent type 啊 type -> value = parametric polymorphism constexpr 啊学些技术 terminology 别人看不懂就会不明觉历的 2333
+ METO 的 smms.js (node,ES6)(不过没有用 ES6 的编译期模块系统)(我跟你们讲啊会 functional 的 engineering Geeks 就是要有这种 data.trim().split("\n").map(x => x.split("\t")) 的自豪,别人几个 imperative 指令才写的出来的我一条 collection type method call chain 就顶别人一家,赋值都不用蛤蛤蛤 🐸📝
+ learn.hs,反正就是 Haskell 这 NB 著名 CS 系 Functional 语言的入门,一看前面小白还开心后面开始 Haskell 递归定义、currying 的时候就懵了,我目前还属于小白部分...
+ Ruiko.kt,冰冰翻译的 FSharp 到 Kotlin 的 LR(?) Combinator (?: 我也不知道 n 是几...)(学会了 data class .... 只有此?)
+ Agda 中的证明,感觉有点懵圈但是有点点懂了的样子,就是 pattern matching 然后重新 construct 什么的,但这很抽象... 我还亲手抄了代码到纸上
+ 字典树(Trie)的我没看,不过我设计过 ByteTrie 本频道之前有
+ Agda 的 coinductive type,面向工程派系就是 Iterable 是 coinductive 而 Collection 是 inductive,我目前连小学生看的 definition 都看不懂...
+ 从编程语言的角度看 deep learning,是冰冰「的(强调{3})」学姐的,我也搞不懂那是谁... 某 CS 系大学生吧,她大概开发了一款叫 DeepDarkFantasy(滑稽深邃黑暗幻象)的 NN (神经网络 NeuralNetworks)框架
+ Kotlin 强行 FP Point-Free 风格,就是「左右约掉一个参数」好像是说 Currying 的
+ 函数式 dfs 和 CS 偏序理论,冰封博客「知其变,守其恒」
+ 有趣的语法设计细节(低能)
+ Kotlin F**ks Java Again(可出本)(当然还是 @ice1000 的博客)
+ CMake with JNI 开发环境部署,注释同上
#daily #tech #cs #pl 又是一周的 duangsuse 随机瞎想集合

今天的格言是 想给你一个拥抱,让全世界知道。 ——微微一笑很倾城 via 一言 API (闲的了)

+ #Rust 奇怪的 ty 标记类型名称

对 Rust 宏稍微有一点了解的人(比如我)(但我只限于·一点·了解)(我还会学)知道宏可以按标记类型匹配(其实是我搞错了... Rust 这个宏处理过程有点奇葩弄得我糊涂了)

宏模式中还可以包含捕获。这允许输入匹配在某种通用语法基础上进行,并使得结果被捕获进某个变量中。此变量可在输出中被替换使用。

\+ item: 条目,比如函数、结构体、模组等。
\+ block: 区块(即由花括号包起的一些语句加上/或是一项表达式)。

但是 模式(Rust 支持模式匹配如 (_, 1)、类型、标记树的类型被称为是 pat、ty、tt 怎么说呢... 感觉还是称为 pattern、type、tree 好一些... (其实我也可以写一个宏修改 rust 的 macro_rules! 语法,但是现在太菜了写不了...)

+ #functional Haskell: 面向 Currying 编程和 right precedence "二元运算符右优先级"

Haskell 的确是一门比较复杂的语言... 比 Java 难学多了(毕竟 declarative),其名称是取自计算机科学家、逻辑学家 Haskell B. Curry 的 "Haskell" 名字 https://www.haskell.org

其实嘛... Haskell 在语言上还是很简洁的,但是函数式老是递归、集合处理 currying 什么的小白们就只能望 declaration 兴叹了(233 我下面给大家一下 Haskell 语法的资料)

\+ antlr/grammars-v4#210 btw. InScript 也不是 Context-free grammar 的,因为我们的语言结构是基于 indentation 缩进的... 虽说我们的分词器能够自动插入内部的 end 关键字以使它(狭义解析器层面的)变成 CFG

\+ https://www.haskell.org/onlinereport/haskell2010/haskellch10.html (Haskell 2010 的报告,语法部分)

稍微对 Haskell 函数定义有点了解的人会知道(初学者难度),假设我们有一个这样的函数

square x = x * x

它(符号 square)的类型是 Int -> Int 然后我们可以在 Haskell 里静态写明它的类型: square :: Int -> Int

大家可能和我一样菜到不行所以连 Haskell 的 -> (函数类型)声明都看不懂... 非常简单嘛,函数式 value -> value 态射(morphism)「在集合论中,态射就是函数」,简单的模式就是

arg1_type -> result_type

现在你别问是多参函数那怎么办,接下来才是重点,如果我们要定义一个有两个参数的函数 compose,在 Python 里等价(其实并不,区别易见平凡读者自己领悟)的代码:

def bcompose(f, g): # b means 'back'
return lambda x: g(f(x))

def add2(x):
return x + 2

def mul10(x):
return x * 10

add2mul10 = bcompose(add2, mul10)
print(add2mul10(2)) # prints 40: (2 + 2) * 10

Haskell(我们这里自动推导类型)(其实是我不了解 Haskell HM 类型系统所以... 没法显式写类型)(抄的,生而为码农我很抱歉...):

compose :: (b -> c) -> (a -> b) -> (a -> c) -- 貌似 REPL 会出问题,你们看定义就好了...
compose f g = \x -> f(g(x))

-- 我使用 do let add2 = (+2) in let mul10 = (*10) 的时候出问题了... 只能这样

add2 = (+2)
mul10 = (*10)
add2mul10 = compose mul10 add2
print(add2mul10 2)

我们来看看类型:

add2 :: Integer -> Integer
mul10 :: Integer -> Integer
add2mul10 :: Integer -> Integer
compose :: (b -> c) -> (a -> b) -> (a -> c)

add2mul10 = compose mul10 {- which 类型是 Int -> Int -} add2 {- 同左 -}
compose {- add2mul10 -} :: (b:Int -> c:Int) -> (a:Int -> b:Int) -> (a:Int c:Int)

-- 简单点来说
print add2mul10(1:type of a) -- 先计算的是 add2 which add2mul10 = compose(a->c) -> mul10(b -> c) add2(a -> b) (括号: 类型提示)

首先你已经知道了(并不) why compose 函数的类型是 (b->c) -> (a->b) -> (a->c) 因为我会告诉你下面这些代码 which Python 原 compose 函数根本写不出来

print' = compose print
print' (+1) 1
-- 2
printAddOne = print' (+1)
printAddOne 3
-- 4

那么现在我们终于知道了... 首先 Haskell 的 Currying 函数类型写法... 不是什么「最后一个是返回值」(实际上的确是,但容易误解为 Haskell 是为了「好看」而这么做的),而是天然的 Currying 导致每「填写」「填充」一个函数参数(假设函数是 a -> b -> c,你只给了 a),Haskell 再返回给你一个函数(b -> ca 的值已经拿到了),which 参数列表长度少了你已经填充完毕的那一项,直到最后返回 arg1 -> result 的时候,给你的才是真正的返回值(c)...(这就是 Currying,柯里化,btw. 其实它不是柯里本人发明的技巧,是 Moses Schönfinkel 发明的,但 Haskell 本人做了很大贡献)

同时我们也知道了,Haskell 类型声明里 -> 的右优先级(right precedence)比左优先级高,正如 Ruby 里的 :: 一样,因为我们知道 a -> b -> c 其实是 a -> (b -> c) which (b -> c) 是一个函数,就是说它返回一个函数。高阶函数(higer-order function)。

而 Ruby 里 Object::ObjectSpace::WeakMap (其实等于 ObejctSpace::WeakMap 为啥你自己猜)显然我们要先求值(假设没有优化,或者说不管有没有优化语义都不该发生变化) Object 然后 Object::ObjectSpace 最后才是获得常量 WeakMap 的引用,那也就是说 :: 的右优先级比左优先级高喽

+ #cs duangsuse 的九条命

曾经 duangsuse 很菜的时候(其实也就是六七个月前)认识了 @ice1000 等(好吧其实大体只有他一个)(现在都认识我了,当然第一印象全是负面的...)

这个标题是说什么呢... 就是说已经被很多 CS 讨论 (QQ)群给踢出去了(因为开始的时候技术很菜... 然后我又喜欢到处参与技术讨论... 然后说的全 TM 是错的... 大佬群容不得小白)

好吧,现在只剩下一个编译原理群了... 且行且珍惜,里面基本都是讨论编译原理、有时也有热点话题和操作系统、线程池什么的 😭

所以说吃瓜群众一定不要插话神仙打架:

一定不要参与自己 *完全* 不了解的讨论
一定不要参与自己 *完全* 不了解的讨论
一定不要参与自己 *完全* 不了解的讨论
duangsuse::Echo
+ #oop 垃圾 duangsuse 才知道为什么 #Java 子类转型基类是类型安全的 简单点来说(我不讲什么面向对象的 is_a(class) 什么 can_do(interface)无关的): 我们知道,有一种类型理论叫做「Duck Typing(动态类型)」「一个动物走起来像鸭子、叫起来像鸭子,那它就是鸭子」 abstract class Animal { boolean is_sleeping = false; public Animal() {} public void sleep()…
#notes #daily #tech #cs #pl 又是一周的 duangsuse 随机瞎想集合


+ #China #life 重庆公交车坠江事件

http://www.sohu.com/a/271969492_398039

简|一女子坐公交坐过站要求司机往回开,司机开始好好解释但后来与女子争吵,女子与司机争夺方向盘。司机未能及时刹车导致公交撞上对面过来的小轿车,公交坠入江中。无人生还。

一站错过,二人争执,三秒互殴,四轮悬空,无人身还,六亲悲痛,生命再无重来机会

小公交,大社会,戾气愤怒的怨妇,激愤无脑的司机,沉默麻木的看客,诱发了一场不该发生的惨祸,到底谁之错,或无可以置身度外者


+ Sketch

这个词,只是我某次晚自习时突然忘记了当年 @drakeet 那个软件叫啥名字来着?叫啥名字来着???然后我就死想了两个小时... 居然想出来了,然后我就特激动... (SketchUp!!!!!!!!)🤔
没有别的事情了
当然,感触就是... 有些东西想想还是能想到的,不过花了俩小时...

+ 44 路公交车(短电影) #video #Low #China

https://movie.douban.com/subject/1308627/

推荐观看,看客精神杰出教材

+ 韩寒《他的国》 #China

我打算给你们拷贝一下人们围观跳楼那段场面的... 算了

+ 数学和直觉 #math

我的意思大概是数学的有些表述方式简洁不易懂,往往要经过非常特殊的专业训练才能懂...

+ 昨日青空 #media

主题曲比较好听,想做 vocaloid 合成曲

+ javax.stream 和 ReactiveX

Rx 是最开始 C# 的一个扩展,现在已经不只是 C# 的扩展了
它的目的是提供统一的流处理模式 API
当然,它也是很好的异步/消息(aka. 广播、事件)式编程函数库
这被称为 Observable 「可观测的」
http://reactivex.io/documentation/operators.html

onNext(T)
onError(Exception)
onCompleted()

这是一种 Observable 的核心特征,实际上 RxJava 的 Observable 定义包括文档有 8k 行左右

Observable 上还允许发送集合处理消息(调用方法),类似 map flatMap join zip merge concat 这种

我只是想告诉你们它是做什么的(类似 Promise、Future)一样的工作
因为我之前根本懒得了解它...

+ 蓝真天白真云

一种 Yuda 表示法... (blue == sky.color && white == sky.clouds.color)

参考王垠博客「Surely I'm Joking」和游戏「崩坏 3」

+ Python 的独特语法

for ... in ... if
我以为是惰性数组?(跑
http://zetcode.com/lang/python/lists/
(其实是 Python 的语法糖,类似 Ruby puts while true 这种)
e.g.
a = [1, 2, 3]
b = [4, 2, 6]
c = [str(i) for i in a if (i in b)] #=> ['2']


<del>告诉你们一个你们不知道的 Python 语法</del>(迫真)
那么呢,每周回家都有每周的任务,要不然会非常无聊 #life #tech #dev #daily #Learn

#Java
每次呢看的书好像比较多,又都是轮流转结果可能最后一周完了枚举不出来自己看了什么书比较尴尬,大概是操作系统和嵌入式的,JVM 的也有,但大概是记住了吧。

📚 最近会开始掺杂一些文化课的书学习,由于 CS 的书看的比较多我发现自己的智商和认知理解至于记忆能力都有很大的提升(也可能是年龄关系,目前大概是 17 岁吧,和某 GAN(生成式对抗神经网络,14 年的)算法的 19 岁美国大佬少年还差两年,逃,当然和某些 17 岁就上博士的奇幻人生就比不了了)
主要的原因是有时候看 #CS/IT 系的书比较累

并且愿意尝试补习一下数学,数学里解析几何暂时还有点难理解,其他的代数问题大概都好,因为我现在也稍微有点工程数据结构算法分析能力。
之前一直觉得很难看的数学公式式的表达方式突然觉得没有那么难看了,觉得很自然,也有兴趣理解他们所表示的含义。

这周今天大概就是专门讲讲 r2 x86 架构逆向工程和 #Android Dalvik/Native 逆向工程顺便混杂一点信息工程理论、编译原理什么的,因为我不得不使笔记记录几乎停止,要不然的确有队爆的可能(跑)
#Book 顺便将会发点书单什么的(跑),当然之前我有资料单,不过很早之前了,你们可以自己在文件里面找(皮)
总之就四个字:逆向工程
逆向工程
逆向工程
逆向工程(

(我们可以 r2 - (malloc 512 bytes)
w 逆向工程
pr 3*4
(跑,因为我还不怎么会 r2lang,不知道循环怎么弄,他们那个蛮 #Unix-style 的,就是一切皆大部分可打印字符串,包括 ESIL(Evaluatable Strings Intermidiate Language)都是蛮像 Brainf**k 的字符串语言)

(出人意料吗?很多后端不是没有做前端的能力,比如 r2 的主要开发者 @pancake 就既写 CLI 的 Visual Viewer 也写 HTML
(讲道理,我觉得 Qt 的桌面开发者可能技术反而比 Android Views SDK 的要高

当然密码学之类的是不涉及的,如何解决别人反逆向工程(这里是说,那种高等 native 后端程序员的代码保护方法(比如 false disassembly 也即『花指令』),不是 JVM 开发者或者 Lua 这种托管给别人虚拟机运行的那种,而且不是不会去考虑什么指针不指针内存不内存分页不分页线程不线程分配不分配阻塞不阻塞堆不堆栈不栈动态链接不动态链接的什么混淆压缩然后用某某公司团队或者个人的加固工具『加固』『加密』(然后运行时类加载、虚拟机加载的时候解密载入内存,最后被人扫 file magic 再内存 dump 出来)的那种,不是内建虚拟机什么的,当然内建虚拟机解释不是说就不能 hack 了,记住所有程序逻辑都在你的机器上执行)也是不涉及的,目标是入门和简单的使用,以及给你一个运行时的视角,使你基本可以进行软件分析什么的(

#talk #backend #OS #PL #Sysadmin #CS
(这里底层素质的优势就显现出来了,虽然底层知识并不特殊,但它能给你更广阔的视角,而不是局限在应用的 Resources、Dalvik EXecutable、JNI 库接口和 HTTP 协议那层)

(说到这里忍不住感叹一下,现在又有多少开发者看得到 IL、汇编层面的东西?都是一群只知混淆处理模糊名称算法的,而且自己还不一定会写,自己连自己平台编译完后生成的东西文件结构都不知道的多的去了...)
(当然,这里能写 Java Annotation Processor 程度能力的自然也是明白人了,至少他们有学习能力吧?至少透过 Java 代码文本看到 AST 了吧?)
(好吧,AST、PSI(就是 JB 的 AST)什么的其实也是基本技能,编译优化那才是大佬... 什么逃逸分析、指针别名、代数化简指令合并、公共子表达式消除、向量化、积极虚方法内联的复杂算法...)
(那你这么说 ANN 那群 AI 开发者不是更 dalao 了么?(也不一定(现在编译优化都在用人工智能系算法了么?(启发式至少有吧
(成天批判术语... 其实还是躲不开吧,我所批判的大概是知识层次浅但是不知道自己知识层次浅的那些开发者吧...
(你的意思是你是大佬?(对不起我没有这个意思,我,duangsuse,菜鸡,菜爆了,啥算法都不会写,最讨厌图算法和动态规划(跑
(当然诸如 @RikkaW 这种 C++ 大佬自然也是大佬了(吐槽:有什么必然联系么?)
(当然,给编译原理的大佬们澄明一下,我不是带坏小白,编译是个非常抽象的翻译过程,不一定非得序列化生成文件存盘的,我只是想说明一个常用模式)

(最后:radare2 这种灭天地的逆向工程分析框架才是真理啊!世界上最好的『二进制编辑器、扇区编辑器、系统 I/O 工具、二进制可视化分析工具(like bindiff、base conversion)、反汇编器/JIT 替换汇编器、Shellcode 工具、逆向代码分析器、动态静态调试器、解析器』而且非常『可扩展、可移植、可嵌入』

(总结:Cross-platform unix-like multi-architecture reverse engineering framework and commandline toolchain for security/forensics. wow. debug.exe(MSDOS) for the 21ₛₜ century

(最后:真正的无知不是知识匮乏,你看我以前那么匮乏现在不都好很多了么?都是靠积累学习思考实践的,没有本本我能做到这么快吗?
(吐槽:你又飘了,菜鸡 (回:你的意思是我给 Echo 加了那么多 admin,随便他们发广播,可是他们没一个人评价我的广播... (不过,羽毛 @kodamasakuno 你不评价吗...)

(就是说,至少和那些专科高中的比,我学得很快了吧?不行吗?至少我是在身边完全没有电脑的情况下看书自学的,而且学的还不是应用层的东西,,, 而且我有做框架的能力他们只有用框架的份... 而且我会设计不那么线性一点的算法... 不是挺好么?而且我也会 #CG 画画... 而且我可能会写地图生成器这种随机自动生成的算法... 而且我有实用的数学和逻辑学基础.... 比方说... 呃... 偏序理论?(不会)好吧... well done...

(最后再澄明一下 #disclaimer 我真的真的不针对任何人,因为大家都是这样的,不要对号入座)

(如果要把 Lua 开发者(不是 Androlua 这种)的综合技术素质和 JVM 开发者比的话,我一般觉得 Lua 开发者的素质更好,理由是知道 #Lua 的人一般都会写 #C/C++,不是把 C/C++ 当成 Java 写的那种))

JVM 平台的一些东西可能也讲一下,如果顺手的话,可能明天也要写个 Android 应用 Reflector,尝试提供一个 Dalvik 反射类信息获取 API 的前端,模块化面向接口设计方便扩展。(别喷什么低级技能之类的...

其实每次学到的东西比较多,甚至 Android 开发上的也有(主要是带手机去学校,看一些 Androlua 开发手册上的有点 Android/Java API 使用讲解),只是知识不系统。可是,现在又有几个 Android 开发者的知识真正是系统的呢?(笑)不过是经验之谈而已吧。只是单单靠着自己本来的能力学,学到的知识基本都是 Implicit 的,你控制不了它,你『有那么一点点感觉』但『又的确不能说出它是什么』,这样弄了两三年工程发现都是自己作为搜索引擎和模式识别机器写出的代码,比较线性比较模式化,而且除了可能的名利没有什么太大的理论上的收获,可能也会比较尴尬(笑),当然我之前是不知道有所谓的理论的,我眼里只有应用编程。只有看代码看文档写代码,当然所谓学习其实也不过如此嘛。只是能看破封装的开销有点大了,不如哪怕自己的代码不那么 parallelism 也好(愉悦即可,什么留给后端吧... 反正各种线程同步、什么内核模式用户模式、同步块原子操作什么的都...

JVM 『著名』的双检锁技术(Double-checked Locking,DCL,一种用来解决 singleton 单件实例对象模式线程竞争问题的方案,虽然比较慢)都不知道有没有 Android Developer 会,大概是只知异步不懂并发了吧... 包装啊包装... 万能的包装... 万能的社区库... JMM(Java 内存模型)那(一 JVM 书)讲的什么 store、assign 和 write 这几个语义几乎一样的词用起来总是弄不清楚... 缓存同步啊缓存同步... 不会啊... ...

java.util.concurrent 这个包存不存在都不知道有没有人知道呢,或许(笑)
duangsuse::Echo
#Math #music 最近知道了两个之前不知道的芝士: 🤔 + 音高是什么! + x 的 (n 的倒数次方)等于开 x 的 n 次方根 where n 的倒数: 1 / n x 的 k 次方: x {* x} repeats for (k-1) times n 的 k 次方根: (x 的 k 次方 = n) => x + 数学函数和数学操作符是不一样的
#tech #daily #Java #JavaScript #dev

🐱 duangsuse 的学习日常 ⭐️

+ 程序设计语言::Closure、Pattern Matching、Stream、Generators #pl #cs

+ 程序设计语言类型::这些名词,你知道吗?(涉及 Parameteric Polymorphism 和 Empty Types(aka. Bottom types)、Product types、Subtyping 等内容)

+ 高性能计算::C 语言和高性能计算、x86 汇编和 SIMD(单指令多数据)运算、JNI 外置原生算法

+ 软件架构::FFMpeg av* 库水印程序

+ 数据库::关系代数 #db

+ {Android, 数据结构和算法}::Android 的离散数组 SparseArray 和 ArrayMap #algorithm

+ 数据结构和算法::这些算法和数据结构,忘记了吗?

+ Rust/数据结构和算法::Rust 的 Vector 实现
+ Rust::Hole 类型、snappy 绑定、Tree 类型、LinkedList、Box、Rc、std::thread 等

+ Java 的二进制流读写器 #bin
+ Java 的 Android android.content.SharedPreferences 代理库 Prefer
+ {软件架构, Android}::编写一个 Android 上的 Service!(感谢 @YuutaW 提供学习资源,ShutdownService 默写)
+ 软件项目管理::Gradle 的抽象总结

+ JavaScript ES6: sm.ms.js
+ JavaScript ES6: 基于 CheerIO 和 Requests.js-promise-native 的爬虫,默写(感谢 @ice1000 的原实现,这可能是冰封哥有史以来最奇怪的代码,因为他写了两个完全可以被替换为更有意义结构的没有用的控制结构...)
+ JavaScript ES6: ArrayBuffer, DataView 读 BMP、再看 ASCII 艺术画生成

+ Kotlin::简单的 Realm ORM + RecyclerView Android 应用
+ Kotlin::Shell execute
+ Kotlin::Coroutine
+ Kotlin::Kotlin Native 和 Kotlin JavaScript 与 Gradle/Groovy
+ Kotlin HTML DSL
+ Kotlin 内部代理类 (Delegates)
+ Kotlin OkHttp 同步/异步封装

+ C 程序设计语言::libBMP 和 libWAV
+ C 程序设计语言::OpenGL 体验

+ 无脑模式::线性代数::高斯·约当消元法(Gauss Jordan)解齐次线性方程组(Homogenuous Linear Equation Group)
+ 无脑模式::C++/Qt::拼音分词、英文音标转换和 TTS 合成
+ 无脑模式::Haskell 抄写 Haskell 的 AlgorithmW Hindley-Milner Type system type infer algorithm 实现

+ Javax Servlet 架构体验 🤔
#Ruby #daily 写了一个程序用来利用 CSS Selector 从 Telegram 导出的 HTML 里提取文本