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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
#emmm #tech 居然也有个大佬和咸鱼一起写虚拟机…
#life #emmm #tech http://www.hostloc.com/thread-452946-1-1.html
这就是传说中的李平先生,学习了,我不参加撕逼,我只围观撕逼

宽安撕逼都已经把宽安毁了
#emmm #China TIM 群聊
神奇的笔记
对不起 我的电脑不足以预览海面模拟……… 更别提完整渲染了………
#media #blender #emmm
Cycles 当然不足以预览啊..( 可惜需要 Cycles 特有的,不然 Eevee 或许可以试试?

之前测试 Eevee 使用玻璃 BSDF 貌似没有啥效果
#emmm 不仅只有类型论、还有用户界面和并行计算... 算法也不会... OS 实现也不了解...
duangsuse::Echo
#daily #tech #cs #pl 又是一周的 duangsuse 随机瞎想集合 今天的格言是 想给你一个拥抱,让全世界知道。 ——微微一笑很倾城 via 一言 API (闲的了) + #Rust 奇怪的 ty 标记类型名称 对 Rust 宏稍微有一点了解的人(比如我)(但我只限于·一点·了解)(我还会学)知道宏可以按标记类型匹配(其实是我搞错了... Rust 这个宏处理过程有点奇葩弄得我糊涂了) 宏模式中还可以包含捕获。这允许输入匹配在某种通用语法基础上进行,并使得结果被捕获进某个变量中。此变量可在输出中被替换使用。…
+ #oop 垃圾 duangsuse 才知道为什么 #Java 子类转型基类是类型安全的

简单点来说(我不讲什么面向对象的 is_a(class) 什么 can_do(interface)无关的):

我们知道,有一种类型理论叫做「Duck Typing(动态类型)」「一个动物走起来像鸭子、叫起来像鸭子,那它就是鸭子」

abstract class Animal {
boolean is_sleeping = false;
public Animal() {}
public void sleep() { is_sleeping = true; }
public void wakeUp() { is_sleeping = false; }
public boolean isSleeping() { return is_sleeping; }
public void makeNoise() {
if (!is_sleeping)
System.out.println("Animal making noise");
else
System.out.println("Sleeping animal making noise");
}
}

这是我们对「动物」的定义:可以睡觉、可以发声,同时这个封装保存了 boolean is_sleeping 状态,允许 Animal 的子类实现根据情况(动物是否醒着) makeNoise

class Duck extends Animal {
final String name;

public Duck(String name) { this.name = name; }
public String getName() { return name; }

@Override public void makeNoise() {
System.out.print("[Duck ");
System.out.print(name);
System.out.print("] ");
if (!is_sleeping) System.out.println("Quack!");
else System.out.println();
}
}

这是我们对鸭子(Duck)的定义:它定义为依赖 Animal 类(从此类派生(Derived)),并且有一个扩展字段:name 以允许我们给鸭子命名
鸭子的叫声是 Quack,并且它叫唤的时候,我们假设能够获得它的名字 — 并且知道它是只鸭(肯定的)

现在我们有个函数,它接受一只动物(Animal)并且会先确保它醒着(如果已经睡着就把它弄醒),让它叫。然后会再让它睡着,再让它叫(打呼噜 233)

public static void playWithAnimal(final Animal animal) {
if (animal.isSleeping()) animal.wakeUp();
animal.makeNoise();
animal.sleep();
animal.makeNoise();
}

我们来测试一下(假设下面的代码是 Groovy 写的)

animal = new Duck("Doddle")
animal.makeNoise()
// [Duck Doddle] Quack!
animal.sleep()
animal.makeNoise()
// [Duck Doddle]

playWithAnimal(animal)
// [Duck Doddle] Quack!
// [Duck Doddle]

... 好吧,我承认我的例子举得比较失败,但有上面的例子我想你已经知道为啥这种类型转换(type casting)是安全的了

playWithAnimal 接受一个 Animal 作为它的参数,而 DuckAnimal 的子类却也可以被传递进去,为什么呢?我智商比较低一直不明白

因为 Duck 「继承」了 Animal 的所有公开方法和公共属性,将 Duck 转换为 Animal 会让对象不能 getName()(Animal 类没有这个方法),而不管怎么样,都不会让 Animal 类原有的 sleep() wakeUp() 方法被 *删除* 而无法调用

Duck *是*(is_a) 一个 Animal,只不过它有自己额外的特性(name)而已!所以将它隐式转型为 Animal 是完全可以的

Duck is JUST an Animal AND MORE

我们再回到「Duck Typing」动态类型的理论上来,因为 Animal 类「派生」到的对象,他们都拥有的 Animal 所拥有行为(睡觉、发出叫声),所以他们都 *是* Animal
因为我们只知道可以在 Animal 对象上做这些操作:sleep、wakeUp、isSleeping、makeNoise,而这个类的实例对象实现了所有这些 *行为*,就说它 *是* Animal

而反观 Duck 呢?它从 Animal 那里继承到了所有这些操作,所以它当然是一只 Animal

我们反过来看,DuckAnimal 多了一项操作:getName,而 Animal *没有* 实现此操作,所以 Animal 不是一个 Duck

我们都知道了,Animal 并不是一个 Duck,所以在运行时将它(一个相对的基类)转型为 Duck(相对的子类)自然是不可能实现的。同时这也不是类型安全的行为

+ #emmm 菜鸡要啃草才能... 变成肉鸡

duangsuse 比较菜呢... 好好学习吧,菜鸡虽然菜... 多吃点总会变成... 肉鸡(删除)战斗鸡的吧 当然也要注意身体啊(现在我明显没有...)

+ #cs #pl 读 Lice 动态作用域实现后我才知道 Lime 主动实现的是动态作用域...

动态作用域... 就是那种只是在特殊操作的时候维护作用域「Environment」栈的方法吧,比如在进行函数调用的时候,至于作用域嵌不嵌套是另一回事

冰冰这篇博文说的是 let var = valExpr 这种作用域优化。就是说在求值的时候可以只在全局放一个 Hashtable 因为一旦放多(每层 scope 一个 hashtable,*访问(read/write)* 还是带锁的(这是他原话我也不知道是写带锁还是全都带锁))了他会很心疼(Hashtable 这种空间换时间的数据结构... allocate 一大堆 bins 会爆炸的)

于是就这么做:我在进入新嵌套作用域时已经知道了那个作用域有哪些符号,然后我检查冲突并且把冲突的符号(包含符号的名字和值)给备份一下(集合类型引用备份到栈上),然后再进入作用域,这样就可以简单的 put() 和 get() 了(不过你依然得记录新产生的键值对,等到离开这层作用域时删除他们,不能让符号「泄漏」到作用域外面)

就是说它看重时序,而不是「定义域」

我看完博客后自己又草稿了几种不同的作用域实现,我感觉帅炸了:

\+ PrefillScope
\+ PrefixScope (NamespaceMap)
\+ IndexedScope
\+ ArrayOrHashScope (AutoArrayOrHashMap)
\+ CollisionScope (CollisionMap, ByPlaceCollisionMap)

+ #android #tech #dev Android 的保护(反 crack)技术

六个我还记得(真的有六个?)

1. 手动验证 OkHttp SSL 证书以 filter 掉系统 CA 证书信任「bypass 绕过检验」问题
2. Mess 混淆 XML
3. Proguard 混淆 repackage
4. 核心代码用 native 语言写
5. JNI_OnLoad 验证环境
6. 忘记了一个... 哦是用第三方库加密 assets 运行时解密,这个也很常见

+ #pl #cs 常见的程序语言实现优化技术,扫盲

1. 常量传播
2. 常量折叠
3. 函数内联
4. 指令顺序调整
5. 公共子表达式消除
6. 逃逸分析
7. 循环常量外提
8. 循环展开
9. 死代码消除
10. 表达式重组

啊啊啊懒得写了
duangsuse::Echo
🐱 Sticker
所以说啊成天写了那么多字在自己的频道上,如果哪天 Telegram 爆炸了,王八蛋 leader durov 跑路了,然后我的数据写了这么多个月的东西全部爆炸 lost 了我都可以进抢救室了... 还是备份一下吧 #telegram #emmm #life #tech
http://bbs.seewoedu.cn/search.php?mod=forum&searchid=30258&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E7%82%B9%E5%90%8D

#emmm #recommended #life #school #dev

... 官方逼死同人系列.... 😭

说实在话,我真的不敢搜... 其实想想也知道这么常见的功能怎么可能不做呢...
duangsuse::Echo
#include <stdio.h> int main(int argc, char *argv[]); inline linked_list parse_input(FILE *fp); inline void recur_dump_list(FILE *out, linked_list *list); typedef struct node_st { void *obj; node *next; } node; typedef struct linked_list_st { size_t…
#c #dev #emmm 🌝 不对啊,我怎么知道一个 void * 是不是 node ...

struct item_st {
_Bool is_list;
union {
linked_list *ls;
size_t ptr;
};
}
Forwarded from duangsuse Throws
#gfw #freedom #net #emmm #tech #sysadmin

又暂时使用了 SS(一直 MTProto Proxy 的)上 P 站什么的

[DuangSUSE@duangsuse]~% ssurl -d "ss://xxxxxxxxx/#Mercury" | sslocal -c /dev/stdin
INFO: loading config from /dev/stdin
2018-12-01 15:56:41 INFO loading libcrypto from libcrypto.so.10
2018-12-01 15:56:41 INFO starting local at 127.0.0.1:1080
photo.jpg
2.2 MB
#CTF #security #Haha #sysadmin #emmm #PL 🐱 ,里面绝对没有其他奇奇怪怪的东西,作为文件发是想避开 Telegram 那个过分的压缩( 好吧,其实是简单的游戏,里面有什么呢?
duangsuse Throws
#School 这周马上就要放寒假了(还有一个月) 🤔 duangsuse 的安排嘛... 其他的都好了,本来每周就是讲东西为主,然后本周买了别的东西,画了几张画,最后书什么的基本没看。嗯嗯。 这周就是讲点东西,发点照片,没了。 顺便说一下,推荐有打印机又看过书的大家可以没事带几张 papper (比如之前那个代数程序逻辑的 fold.pdf,我在 USTC 中科大学生的分享里淘到的,当然论文基本都是公开的你们可以随便找个大学比如 Illinois 的 CS 系看...)到例如公交车的地方看看,因为…
#emmm 这周我发的一些东西... 因为都是『超常发挥』(其实都是我不了解的东西,然后我暴力硬讲)

一些水平比较高的人可能可以注意到我讲得都有点民科感了(其实还不如民科///,比如那个『哥巴赫猜想证明』我就写不出来,这里无讽意味

👆 这里就体现出一个 trivialnontrivial 的区别了,本频道会告诉大家他的证明为什么是错误的,while 一些关注此事的其他频道都只是发个链接而已,根本懒得去看什么证明原文,更不会拿 XeTeX 特地排版个 PDF 出来给大家看了


对于能看出我这次讲得很迫真的人来说,说句抱歉,请多包涵... (
也非常感谢一些同行者的理解,虽然我们水平会相差很大,但我这个不算是乌龟的家伙正在努力的赶上前面的兔子,我不想特别去比较,但我要赶上前面的大家。

当时那样幼稚的话,要是还发给了 @drakeet 肯定早被长者们拉黑了,可是有些人虽然因为永远在学习所以不能特别的去关心其他 naive 一点的爱好者,却每次都愿意给予帮助,实在是发自真心的热爱 CS 啊


因为我其实对 FP 还有 Haskell 的一些东西都不是特别了解,然后又硬想讲
然后就出这种笑话,当然我其实不怕出笑话的( 🤔


我的水平其实一直不是特别高,目前算是打了个理解力基础,书什么的我还要再看第三遍

我还要尝试打字更快,然后我会再开一个频道专门放我对一些书知识的理解,到̶时̶候文̶体̶两̶开̶花̶,̶多̶多̶支̶持̶...

谢谢大家对我的关注。Thank Q Thank Q!(指 XM

今后也会努力做到曾经想的『工̸程̸理̸论̸两̸开̸花̸、信̸息̸生̸活̸两̸开̸花̸』同时 DSP、Net、信息编码、计算机图形学、人工智能这类边角科也得学好。