Forwarded from duangsuse
我感觉 Kotlin 的工业化很有意义,已经把一些觉悟高的普通 Java 程序员(语言理解完全程度大概是小白)带成熟知面向对象继承、封装、抽象、多态,面向对象的基本可见性可变性原则、信号/行为、状态转移、抽象的一般化和特殊化、ORM/系数关系、生命周期、自理性、序列化,了解函数式编程和闭包,了解代理、状态、协程、CPS、Threads/Tasks 的进阶者了,有没有道理呢 🤔
顺路推荐 《软件工程导论》 #book 虽然感觉意义不是很大,而且软件工程往往不被重视,但其中提及的一些原则是十分有价值的,比如:拒绝暴力查错、以思考代替完全依赖调试数据的『瞎改直到修好』 (jiggle things randomly until they unbreak),因为这样耗时而且容易引入更多的错误、难看的修复方案,也有可能导致严重的错误被更晚发现
《软件工程导论》虽然是『专科』书籍,但是我感觉其内容物超所值,总比谭老师的《谭 C》强很多 应该。
为什么部分本科用落后的书籍
顺路推荐 《软件工程导论》 #book 虽然感觉意义不是很大,而且软件工程往往不被重视,但其中提及的一些原则是十分有价值的,比如:拒绝暴力查错、以思考代替完全依赖调试数据的『瞎改直到修好』 (jiggle things randomly until they unbreak),因为这样耗时而且容易引入更多的错误、难看的修复方案,也有可能导致严重的错误被更晚发现
《软件工程导论》虽然是『专科』书籍,但是我感觉其内容物超所值,总比谭老师的《谭 C》强很多 应该。
为什么部分本科用落后的书籍
duangsuse::Echo
最近也在很努力的,虽然明明,感觉脑子也有点过度使用了吧…… 也可能是错觉,因为我不沾电脑的时间太多却总是想编程的问题 enum class Gender { BOY, GIRL } enum class Person(val sex: Gender, var age: Int) { duangsuse (BOY, 17) } fun <T: Number> List<T>.average() = this.sum() / this.size inline infix fun <A, B, C> ((A)…
#book #statement 其实虽然也很努力,我没看太多书…… 我相信很多人都能理解,就像一个游戏打了一半的小孩突然被人要求去写作业一样,我当然没办法在写作业的过程中背套招啦…… 伤心处
总是感觉什么没有完成,所以喜欢看小说、睡觉什么的,也不会再去碰计算机科学、信息学、无线电、微电子几大件的书和资料啦(虽然我主要是想要编译原理和函数式编程…… 虽然函数式也蛮难)
就是这样,结果物理老师还不理解我了,因为当时在『睡觉』的我看起来不够努力?其实我在学校里也就把自己当个笑话看的……
我真的不是懒散惯了,是怕努力了还伤身体,而且无处可以努力啊…… 即便是熬夜到凌晨一点,如果是在『学习』的话大概有不少人会觉得很用功吧。那编程到凌晨呢? 😊
总是感觉什么没有完成,所以喜欢看小说、睡觉什么的,也不会再去碰计算机科学、信息学、无线电、微电子几大件的书和资料啦(虽然我主要是想要编译原理和函数式编程…… 虽然函数式也蛮难)
就是这样,结果物理老师还不理解我了,因为当时在『睡觉』的我看起来不够努力?其实我在学校里也就把自己当个笑话看的……
我真的不是懒散惯了,是怕努力了还伤身体,而且无处可以努力啊…… 即便是熬夜到凌晨一点,如果是在『学习』的话大概有不少人会觉得很用功吧。那编程到凌晨呢? 😊
📝 这周末的任务(反正一定不能完成的!) #task
- 重写 Montage
- 直接重写 Doku 库,删掉所有我不用的代码
留给上帝可怜它们吧
- 三个关于函数式 #FP 的小贴士
(1) 尾递归版本的 skipBytes 可读性比较
(2) 尾递归版本的十进制位数计算
(3) Tail-call-optimization: C 里面怎么做、翻译成循环怎么做、JavaScript 的 tco 调用管理器
- 一个关于函数式 flatMap 的小贴士
(1) (eta :: a -> t a) 和 (mu :: t t a -> t a) 是什么
- Kotlin 的 Job 抽象
- CustomOrd 序(order) 类
- Kotlin 的 Drip 上下文依赖注入
- 写文交流一下思想,谈谈关于编程学习的一些小建议
#book 《平凡的世界》这本书相当不错,推荐阅读。 #China
最近人越来越懒了…… 唉,不知道该怎么办,难道在学校里手闲会影响到写代码的热情?
还是说,该设计的都没有写成 11110101,失去新鲜感了?
想太多,什么都做不了,大概总有一天会麻木的吧。最怕找不到目标了,消遣的人也越来越少了。
当然我不是说大家都在做自己的『事』(其实我没看见几个人在特别地写什么新项目的),只是莫名其妙好像都没人了一样……
- 重写 Montage
- 直接重写 Doku 库,删掉所有我不用的代码
留给上帝可怜它们吧
- 三个关于函数式 #FP 的小贴士
(1) 尾递归版本的 skipBytes 可读性比较
(2) 尾递归版本的十进制位数计算
(3) Tail-call-optimization: C 里面怎么做、翻译成循环怎么做、JavaScript 的 tco 调用管理器
- 一个关于函数式 flatMap 的小贴士
(1) (eta :: a -> t a) 和 (mu :: t t a -> t a) 是什么
- Kotlin 的 Job 抽象
- CustomOrd 序(order) 类
- Kotlin 的 Drip 上下文依赖注入
- 写文交流一下思想,谈谈关于编程学习的一些小建议
#book 《平凡的世界》这本书相当不错,推荐阅读。 #China
最近人越来越懒了…… 唉,不知道该怎么办,难道在学校里手闲会影响到写代码的热情?
还是说,该设计的都没有写成 11110101,失去新鲜感了?
想太多,什么都做不了,大概总有一天会麻木的吧。最怕找不到目标了,消遣的人也越来越少了。
当然我不是说大家都在做自己的『事』(其实我没看见几个人在特别地写什么新项目的),只是莫名其妙好像都没人了一样……
duangsuse::Echo
😊 Sticker
#life 这几天虽然我的 Doku 必须要修 bug(当然还有数个我本想继续写的东西),但我打算写点字,所谓名不正言不顺…… 我也是很想被人理解的,毕竟那样我就可以花更多的时间待在电脑前面了,而且也不必因为每周过分聚少离多而损伤视力什么的了……
这个短片小说名字叫《抓周》,大致以不连续的时间顺序给『自然语言处理』方面的计算机科学爱好者陆凌风从少年到中年的历史做了注释
本书的最终主旨就是 —— 追求自己的热爱、保持自己的本心,不要被外物所迷惑 也不要因为看不到希望、不被人理解而放弃
本书打算利用我之前写《drake....》的函数库提供诸如 footnote、night mode 的功能,继续在 GitHub 上以 Pages 的形式写,不过初稿完成之前我不会加 HTML tags 的。
在完成之前可能没时间做其他事情了…… #book
这个短片小说名字叫《抓周》,大致以不连续的时间顺序给『自然语言处理』方面的计算机科学爱好者陆凌风从少年到中年的历史做了注释
本书的最终主旨就是 —— 追求自己的热爱、保持自己的本心,不要被外物所迷惑 也不要因为看不到希望、不被人理解而放弃
本书打算利用我之前写《drake....》的函数库提供诸如 footnote、night mode 的功能,继续在 GitHub 上以 Pages 的形式写,不过初稿完成之前我不会加 HTML tags 的。
在完成之前可能没时间做其他事情了…… #book
#book 这是本书的后记
后记
本书的内容无聊透顶,本书的作者,我们这里暂且称之为『动苏』吧(原名是英文,有点拗口……),他的爱好却不是写小说,而是写代码。
一滴不在大海里的水,从不会停止缓慢但坚决的游荡
一块切错了形状的木料,无论如何也砌不牢仙宫的栋梁
一个放错了地方的人才,怎么看也自然百无一用(当然你得先是个人才)
是马也,虽有千里之能,食不饱,力不足,才美不外见,且欲与常马等不可得,安求其能千里也?
这位动苏家境也不过中产工薪阶层,『读书』无用主义者但爱看 CS(计算机科学) 书、逃课厌学但是很爱写烂代码。日常从来不缺后面死缠烂打的活魏征和再世雷锋、亲爷爷的劝学书信几乎能把整个台式机盖住、讽刺不信任的话可以成为封杀乔碧萝的最后一条评论,家中有人以各种理由要求不缺课,也不得不完成高中的学业,至于其他的个人情况,不方便透露。
然而即便有这么多人不计耗时的这么多次劝谏,动苏也死性不改地在学校里字面意义上地『混』日子! 这是因为有一天,我要写出类似这样一本小说,来 回绝 你们的善意:谢谢你
但是这是我的人生,即便听了你的良言而达到预期,也不能指望我有所感激
即便你的劝诫毁了我,毁了的也只是我,与你不会有太大的关系
说到底,祸福不与共,听起来是很无情,实际上也的确无情。
可在我心里,亲戚就是这样的存在, 对不起 ,我甚至连你们的名字都不会记住,因为我对姓名、数字的记忆已经差到了自己的生日都不太清楚、爸爸的电话号码都要想一想才能记起的程度了,我,是天生没有能力处理人际关系。
可能是注定记不住太多事情,所以可能才要把那一点剩下的可能性,留给自己唯一的爱好吧。
我本来不具有太多的感情,很感谢你们百忙之中能有心,可我就是这么不领情,相信看完这篇小说,个中缘由你们也已经洞悉。
每个人都有自己的人生,我有父母,也有亲戚,可是即便我会继承父母的基因、继承父母的衣钵,我不能继承他们的记忆、不能继承他们的志向,更不可能继承他们的生命历程
如果真的能了的话,恐怕世界上也就不再有所说的『林肯』、『毛泽东』、『比尔·盖茨』、『拿破仑』、『阿姆斯特朗』了吧。
要知道,林肯的父亲只是微不足道的农民,甚至还做过鞋匠
毛泽东的父亲毛贻昌只是个农民,给不了毛泽东打胜仗的能力和治国的魄力
比尔·盖茨的父母很普通,最开始创业时也免不了要借钱
拿破仑的父亲不过是个律师
尼尔·奥尔登·阿姆斯特朗只是出于美国的公务员家庭
既然『坏的』都不能继承,为什么『好的』就能继承了呢? 逻辑还真是有点奇怪啊。
或许有些人是『成功』的,成功是什么?有钱、有权、出名,俗世的定义也不过这三种,但成功,为什么不可能只是 做自己?
如果你找不到自己,或许会把别人的掌声、鼓励、点赞,社会的目光、正面报道、上层的接纳甚至嫉妒当成成功,但如果找到了呢?
吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。 —— 孔子 · 《为政》
被尊为古代圣贤的孔子,恐怕是当今成功学最『无志』的人生观了吧,你看他 —— 三十才自立、五十岁就大谈『天命』不干人事了!和某些十七岁风口浪尖,迎取高富帅白富美、走上人生颠峰的才子总管一比,是否缺了点为师的底气呢?
成功不一定是抛大的、干大的、赚大的。找到自己,健康快乐地生活、做好属于自己的每一件事,『傻气』亦是成功、『佛系』亦是成功。
不过…… 本书…… 无聊透顶?其实对所有无聊的人来说,不会有比自己更无聊的东西吧,这本书的『书语』只有一句:追求自己的热爱、保持自己的本心,不要被外物所迷惑,也不要因为看不到希望、不被人理解而放弃
即便是作为已经『堕落』到了在曾经相信自己的人面前,都会被他们失望地叹口气的人,也依然还没有忘记自己的目的,这样的动苏,应该鼓励吧?
上古时有一种体型极小的飞鸟,浑身灰白,是鸟类中最不起眼的一种,还经常被其他同类嘲笑。
可是,它从不将这些嘲笑放在心里,因为它知道自己有天下最美的嗓子,并深深为自己自豪。
当天地遭逢大劫,阳光被黑色毒雾遮蔽,所有的鸟兽都惊恐得躲起来时。只有这只小鸟,执著地站在离天空最近的一根树枝上,对着东方不断鸣唱。 它天下无双的歌声,驱散了毒雾,让阳光重现大地。
可是,当第一缕阳光照到它身上时,它的生命已经因为不断的鸣唱而耗尽。一颗眼泪从树身上落下,笼住了它从树枝上坠下的尸体,将它永远包裹在一颗泪状的琥珀石里。这颗沉睡着世上最自豪的心的石头,被后人称作枝上雀。 —— 《浮生物语3·上》 第二章 千机.13
其实,本文有很多部分部分学习了《浮生》系列的风格,在此向浮生物语的更新家致敬!不过,毕竟笔触上的偶尔雷同,并不牵涉著作权问题。
记得网络上曾流传的一句话:『愿你走出半生,归来仍是少年。』
既然已经过去数十个年头,人的样貌、阅历,怎么可能毫无变化呢?人间不是天界,活人也不是神仙,人的容颜自会老去、也有天生不可磨灭的欲望。
可是,如果说一个人的心能够数十载不生变化,不忘记曾经的风雨、不失其本来的灵心,又有没有这种可能呢?
动苏一直习惯在国外某即时通讯平台随便发点笔记、讨论什么的…… 什么时候突然想起来要写小说了?嗯…… 故事要从一个月前说起……
好吧,时间不等人,鉴于写作的时间实在不多,长话短说了:
这个动苏的(亲)爷爷某党员干部书记一个月前来家探亲,然后和他的儿子一起对他儿子的儿子加强『学习』上的管束,而且很成功的逼着我在一周唯一的半天假里,还不得不趴在电脑屏幕前 20 小时+,而且还啥都做不完
这篇文章里的 所有 故事情节 纯属捏造,不少看起来很有道理的片段其实并没有事实依据和实现的可能。请看到文章的小朋友不要激动,安全就是生命 0w0!
不过,尽管故事里的陆凌风生在一个对他来说很杯具的家庭里,稍有常识的读者显然可以发现身为作者的我其实对生活的改变是蛮赋予期待的呢!相信以后,总会变得更好吧。
IT 界一个比较知名也比较有个人魅力的工程师,Linus Torvalds 说,他编程是 "Just for fun."
他是 Linux 的开发者和现如今的主要开发者之一,所谓内核(os kernel) 者,操作系统必备组件,是和计算机最底层、最隐秘的电子实现相关度第二高的软件组成成分了,负责管理信息、管理硬件和外设、分配处理资源、提供基本的并行计算辅助操作、提供由对应协议解释的网络访问、保护程序运行和数据安全。它几乎是从被处理器执行的第一条指令开始,肩负起最大的责任,也是所有『程序』运行时视角的最后一瞥。
所有的程序都是存在其设计质量需求的。作为操作系统的内核,它的性能开销、它的稳定性、设计安全性 就是对用户嘱托和重要数据的保险、它的扩展性和代码质量就是未来其上应用、函数库作者编程时可有可无的一抹微笑。
不用说,世界是不会容忍任何一个充满问题和瑕疵的内核的。不少在内核级别工作的程序都曾经在历史上留下过自己的名字,又消失在市场上、消失在研究者的数据里,原因不过是对应的机器没落了、对应的用户离开了、最后的开发者也失望了。可是在不为利益工作的世界里,Linux 一直火到了现在。
Linux Kernel,毫不夸张的说是从网络时代到现今世界上使用之处最为广泛的 os kernel 了,它和它衍生版本的兼容就是各种类型 MCU 以上硬件的基本要求、它所服务的应用程序、处理任务,大到服务集群、数据中心、超算,小到智能手机、冰箱、机顶盒、摄像机,即便是当今算力亚洲第一的神威·太湖之光,也是倚仗着下面一只一只『可爱』热情又好客的小企鹅,搭建而来。
应用程序的质量参差不齐,操作系统内核却是铁打的硬要求。 马虎不得、随便不得,更不能存在半分没弄懂、瞎改写的代码,一次轻微的错误,便是声誉扫地与永远的失信。
所以 Linux 就这样在保证了核心质量的同时滚动下来,很难想像一大群不是为了金钱利益的人,甘愿拿自己本来可以『刷微信、聊微博、刷抖音、看头条、逛B站、划水摸鱼』的时间,贡献了占相当多份量的内核代码。
Linux 成功了。也许这是因为它的开放和应景,可是,如果没有当年的 Linus,那么『废青』地不顾炫耀他老师就是大名鼎鼎的 Minix 开发者,也懒得把自己运行 Minix 的机器『拍照发朋友圈』,反而还去弄他的 Linux 来『反对』他老师的 Minix,然后不拿去发动商业头脑大卖,却万恶地公开了源代码,让所有人都能参与进来加入修改和移植???
天哪,要是他申请了专利,这该有多少钱啊!他对得起他的努力奋斗吗?
可是他,甚至连『自由软件教会』FSF 的会议也没参加太多,好像根本不在乎自己已经出了多大的风头,他只是一个一个电子邮件地回、继续每天站在他的跑步机上敲代码。
只是因为那一句 "Just for fun",我想有些人会说他傻!为什么不在许可证上下点功夫,成为大名鼎鼎的 Bill Gates 的竞争者?
不过。我也就想这么当一个傻子,不是因为我不想『成功』,只是对我来说,钱、权、别人羡慕的眼光,你们哪有我眼前的一条条子程序、一个个抽象重要?
一辈子能留给自己喜欢事情的时间不多,如果你决定了,就不要反悔。
此间乐,不思蜀。
我不知道这和少儿编程、速成培训班、民营专科、选择『挣钱快』专业的初衷有什么出入。或许它们也是殊途同归吧,不过,至少在中国的前沿,总该有点变化吧。
或许『快』的东西才是最浪费时间的,学的时候你节约的那几天的时间,会在未来的几十年里,以长百倍、痛苦百倍的经历,一分不差地归还回来。
很少有人心存机缘能接受真正的快,但它却是最轻松、最能持续的一种速度,可以继续到不惑之年,而不是少白头乃至英年早逝。
不常苦,何有甘?未知寒,焉知暖?
是的,爱不能拿来发电、爱不能填饱肚子、爱不能堵住三姑六婆鄙夷的目光,只是心中未曾给 事业 两个字留出空缺的人啊,何尝能体会到这『爱』字的重量?何尝得到这个 "fun" 背后真正的乐趣?
后记
本书的内容无聊透顶,本书的作者,我们这里暂且称之为『动苏』吧(原名是英文,有点拗口……),他的爱好却不是写小说,而是写代码。
一滴不在大海里的水,从不会停止缓慢但坚决的游荡
一块切错了形状的木料,无论如何也砌不牢仙宫的栋梁
一个放错了地方的人才,怎么看也自然百无一用(当然你得先是个人才)
是马也,虽有千里之能,食不饱,力不足,才美不外见,且欲与常马等不可得,安求其能千里也?
这位动苏家境也不过中产工薪阶层,『读书』无用主义者但爱看 CS(计算机科学) 书、逃课厌学但是很爱写烂代码。日常从来不缺后面死缠烂打的活魏征和再世雷锋、亲爷爷的劝学书信几乎能把整个台式机盖住、讽刺不信任的话可以成为封杀乔碧萝的最后一条评论,家中有人以各种理由要求不缺课,也不得不完成高中的学业,至于其他的个人情况,不方便透露。
然而即便有这么多人不计耗时的这么多次劝谏,动苏也死性不改地在学校里字面意义上地『混』日子! 这是因为有一天,我要写出类似这样一本小说,来 回绝 你们的善意:谢谢你
但是这是我的人生,即便听了你的良言而达到预期,也不能指望我有所感激
即便你的劝诫毁了我,毁了的也只是我,与你不会有太大的关系
说到底,祸福不与共,听起来是很无情,实际上也的确无情。
可在我心里,亲戚就是这样的存在, 对不起 ,我甚至连你们的名字都不会记住,因为我对姓名、数字的记忆已经差到了自己的生日都不太清楚、爸爸的电话号码都要想一想才能记起的程度了,我,是天生没有能力处理人际关系。
可能是注定记不住太多事情,所以可能才要把那一点剩下的可能性,留给自己唯一的爱好吧。
我本来不具有太多的感情,很感谢你们百忙之中能有心,可我就是这么不领情,相信看完这篇小说,个中缘由你们也已经洞悉。
每个人都有自己的人生,我有父母,也有亲戚,可是即便我会继承父母的基因、继承父母的衣钵,我不能继承他们的记忆、不能继承他们的志向,更不可能继承他们的生命历程
如果真的能了的话,恐怕世界上也就不再有所说的『林肯』、『毛泽东』、『比尔·盖茨』、『拿破仑』、『阿姆斯特朗』了吧。
要知道,林肯的父亲只是微不足道的农民,甚至还做过鞋匠
毛泽东的父亲毛贻昌只是个农民,给不了毛泽东打胜仗的能力和治国的魄力
比尔·盖茨的父母很普通,最开始创业时也免不了要借钱
拿破仑的父亲不过是个律师
尼尔·奥尔登·阿姆斯特朗只是出于美国的公务员家庭
既然『坏的』都不能继承,为什么『好的』就能继承了呢? 逻辑还真是有点奇怪啊。
或许有些人是『成功』的,成功是什么?有钱、有权、出名,俗世的定义也不过这三种,但成功,为什么不可能只是 做自己?
如果你找不到自己,或许会把别人的掌声、鼓励、点赞,社会的目光、正面报道、上层的接纳甚至嫉妒当成成功,但如果找到了呢?
吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。 —— 孔子 · 《为政》
被尊为古代圣贤的孔子,恐怕是当今成功学最『无志』的人生观了吧,你看他 —— 三十才自立、五十岁就大谈『天命』不干人事了!和某些十七岁风口浪尖,迎取高富帅白富美、走上人生颠峰的才子总管一比,是否缺了点为师的底气呢?
成功不一定是抛大的、干大的、赚大的。找到自己,健康快乐地生活、做好属于自己的每一件事,『傻气』亦是成功、『佛系』亦是成功。
不过…… 本书…… 无聊透顶?其实对所有无聊的人来说,不会有比自己更无聊的东西吧,这本书的『书语』只有一句:追求自己的热爱、保持自己的本心,不要被外物所迷惑,也不要因为看不到希望、不被人理解而放弃
即便是作为已经『堕落』到了在曾经相信自己的人面前,都会被他们失望地叹口气的人,也依然还没有忘记自己的目的,这样的动苏,应该鼓励吧?
上古时有一种体型极小的飞鸟,浑身灰白,是鸟类中最不起眼的一种,还经常被其他同类嘲笑。
可是,它从不将这些嘲笑放在心里,因为它知道自己有天下最美的嗓子,并深深为自己自豪。
当天地遭逢大劫,阳光被黑色毒雾遮蔽,所有的鸟兽都惊恐得躲起来时。只有这只小鸟,执著地站在离天空最近的一根树枝上,对着东方不断鸣唱。 它天下无双的歌声,驱散了毒雾,让阳光重现大地。
可是,当第一缕阳光照到它身上时,它的生命已经因为不断的鸣唱而耗尽。一颗眼泪从树身上落下,笼住了它从树枝上坠下的尸体,将它永远包裹在一颗泪状的琥珀石里。这颗沉睡着世上最自豪的心的石头,被后人称作枝上雀。 —— 《浮生物语3·上》 第二章 千机.13
记得网络上曾流传的一句话:『愿你走出半生,归来仍是少年。』
既然已经过去数十个年头,人的样貌、阅历,怎么可能毫无变化呢?人间不是天界,活人也不是神仙,人的容颜自会老去、也有天生不可磨灭的欲望。
可是,如果说一个人的心能够数十载不生变化,不忘记曾经的风雨、不失其本来的灵心,又有没有这种可能呢?
动苏一直习惯在国外某即时通讯平台随便发点笔记、讨论什么的…… 什么时候突然想起来要写小说了?嗯…… 故事要从一个月前说起……
好吧,时间不等人,鉴于写作的时间实在不多,长话短说了:
这个动苏的(亲)爷爷某党员干部书记一个月前来家探亲,然后和他的儿子一起对他儿子的儿子加强『学习』上的管束,而且很成功的逼着我在一周唯一的半天假里,还不得不趴在电脑屏幕前 20 小时+,而且还啥都做不完
这篇文章里的 所有 故事情节 纯属捏造,不少看起来很有道理的片段其实并没有事实依据和实现的可能。请看到文章的小朋友
不过,尽管故事里的陆凌风生在一个对他来说很杯具的家庭里,稍有常识的读者显然可以发现身为作者的我其实对生活的改变是蛮赋予期待的呢!相信以后,总会变得更好吧。
IT 界一个比较知名也比较有个人魅力的工程师,Linus Torvalds 说,他编程是 "Just for fun."
他是 Linux 的开发者和现如今的主要开发者之一,所谓内核(os kernel) 者,操作系统必备组件,是和计算机最底层、最隐秘的电子实现相关度第二高的软件组成成分了,负责管理信息、管理硬件和外设、分配处理资源、提供基本的并行计算辅助操作、提供由对应协议解释的网络访问、保护程序运行和数据安全。它几乎是从被处理器执行的第一条指令开始,肩负起最大的责任,也是所有『程序』运行时视角的最后一瞥。
所有的程序都是存在其设计质量需求的。作为操作系统的内核,它的性能开销、它的稳定性、设计安全性 就是对用户嘱托和重要数据的保险、它的扩展性和代码质量就是未来其上应用、函数库作者编程时可有可无的一抹微笑。
不用说,世界是不会容忍任何一个充满问题和瑕疵的内核的。不少在内核级别工作的程序都曾经在历史上留下过自己的名字,又消失在市场上、消失在研究者的数据里,原因不过是对应的机器没落了、对应的用户离开了、最后的开发者也失望了。可是在不为利益工作的世界里,Linux 一直火到了现在。
Linux Kernel,毫不夸张的说是从网络时代到现今世界上使用之处最为广泛的 os kernel 了,它和它衍生版本的兼容就是各种类型 MCU 以上硬件的基本要求、它所服务的应用程序、处理任务,大到服务集群、数据中心、超算,小到智能手机、冰箱、机顶盒、摄像机,即便是当今算力亚洲第一的神威·太湖之光,也是倚仗着下面一只一只『可爱』热情又好客的小企鹅,搭建而来。
应用程序的质量参差不齐,操作系统内核却是铁打的硬要求。 马虎不得、随便不得,更不能存在半分没弄懂、瞎改写的代码,一次轻微的错误,便是声誉扫地与永远的失信。
所以 Linux 就这样在保证了核心质量的同时滚动下来,很难想像一大群不是为了金钱利益的人,甘愿拿自己本来可以『刷微信、聊微博、刷抖音、看头条、逛B站、划水摸鱼』的时间,贡献了占相当多份量的内核代码。
Linux 成功了。也许这是因为它的开放和应景,可是,如果没有当年的 Linus,那么『废青』地不顾炫耀他老师就是大名鼎鼎的 Minix 开发者,也懒得把自己运行 Minix 的机器『拍照发朋友圈』,反而还去弄他的 Linux 来『反对』他老师的 Minix,然后不拿去发动商业头脑大卖,却万恶地公开了源代码,让所有人都能参与进来加入修改和移植???
天哪,要是他申请了专利,这该有多少钱啊!他对得起他的努力奋斗吗?
可是他,甚至连『自由软件教会』FSF 的会议也没参加太多,好像根本不在乎自己已经出了多大的风头,他只是一个一个电子邮件地回、继续每天站在他的跑步机上敲代码。
只是因为那一句 "Just for fun",我想有些人会说他傻!为什么不在许可证上下点功夫,成为大名鼎鼎的 Bill Gates 的竞争者?
不过。我也就想这么当一个傻子,不是因为我不想『成功』,只是对我来说,钱、权、别人羡慕的眼光,你们哪有我眼前的一条条子程序、一个个抽象重要?
一辈子能留给自己喜欢事情的时间不多,如果你决定了,就不要反悔。
此间乐,不思蜀。
我不知道这和少儿编程、速成培训班、民营专科、选择『挣钱快』专业的初衷有什么出入。或许它们也是殊途同归吧,不过,至少在中国的前沿,总该有点变化吧。
或许『快』的东西才是最浪费时间的,学的时候你节约的那几天的时间,会在未来的几十年里,以长百倍、痛苦百倍的经历,一分不差地归还回来。
很少有人心存机缘能接受真正的快,但它却是最轻松、最能持续的一种速度,可以继续到不惑之年,而不是少白头乃至英年早逝。
不常苦,何有甘?未知寒,焉知暖?
是的,爱不能拿来发电、爱不能填饱肚子、爱不能堵住三姑六婆鄙夷的目光,只是心中未曾给 事业 两个字留出空缺的人啊,何尝能体会到这『爱』字的重量?何尝得到这个 "fun" 背后真正的乐趣?
#China #book #school #life 🏫📔 最近从本校的物理老师处得赠了一本 #Algorithm 算法书《算法》 Algorithms in C++ I-IV: Fundamentals, Data Structure, Sorting, and Searching by Robert Sedgewick
https://book.douban.com/subject/1116599/
这本书甚是有价值,不仅仅在它的三观、逻辑、数学、图示、新奇、编程实现上,我就不谈它的价格相比之下实在是不高了,质量上,高德纳(Donald Knuth)的学生,算法,不是盖的。
包括这本书的作者据称都是刚开始写 C++,一个离开计算机都能编程的人,又是计算机科学研究者、算法研究者…… emmm……
我从这本书(我第一次见到用 TeX 排版得这么好看的书,前一次是看 Kanru Hua 的信号处理(signal processing)论文和期刊切片,排版带内联的,虽然我没看懂)的代码块里了解到了原来还有人和我一样不那么遵循所谓的『代码风格』……
他们说,他们努力设计出了一套简洁、可移植的 C++ 编程模板(这里不是
尽管我不是很喜欢数学的表达方式,我还是得承认我实在找不出一点茬子了 — 比起我从其他书里,尤其是 LLVM Cookbook — 那简直无法入眼的 C++ 代码、类 — 那哪能叫设计啊?分明就是无序杂乱的方法定义!即便能够工作,却怎么也不可能达到 Algorithms 一书示例代码的层次。
虽然我的智商不高所以能实现的东西不多,但我觉得,我的代码依然相对而言较甜,而 Algorithms 一书的代码则是带点数学薄荷的咖啡,醇香微苦,不过 — 都从不油腻、不会拖泥带水让人无从入眼。
这本书里,我学(且暂时只学到)了快速查找、合并查找(不带权重和压缩的)(因为我智商低,而且最重要的是,我有别的事还要完成……)
这是快速查找(也可以作为实现集合数据结构的一种算法),怎么快速法呢?
是解决『传递性问题』的一种算法,它的合并操作速度较慢(所以也叫慢合并),不过判断速度很快。
我们知道,对于一个 M 个输入,它都只需要 O(1) 的时间复杂度来判断是否联通,可在更新时每次都要执行 O(N·M) 次比较
这个问题就是给你一堆『对』,如果它是新的,输出它,否则就继续下一个(C++ iostream 扫描器)。
因为快速查找(quick search)/合并(merge search)有 up(父树)所以也称树状数组。
1 R 2
2 R 3 => 1 R 3
4 R 0
0 R 1 => 0 R 2, 0 R 1 R 2 R 3 且 3 R 4
(因为
细心的同学可能会觉得奇怪:假如我有 b - a; d - a,他们在树上不是一个树支的,可是却被认为在一起了。
其实这很正常:传递性关系是对称(symmetric) 的,也就是说
至于为什么像是树,这是因为集合传递性就是树状的
问题是:这不是一个逻辑问题啊,
上面的实现被称为快速查找,你可以注意到它把离散的 a R b; b R c 传递来了,至于为什么没有 a,是因为我们的实现方式是
我不会算法可视化,所以没有图(不像那个,我艹还是算法可视化专业研究者,计算机图形学基础啊。
至于合并查找(我不知道两颗树的权重算法和路径压缩该怎么做)(题外话,我自己设计了一个类似 Dijkstra 的 DFS 算法当然还没实现,关于狄克斯特拉算法我也自己想了6个细节,只等着写文。)
它就是
(准确的说也没啥 parent 不 parent 的,一切都是临时的,比如我们每次把 c1 的 up 都置为 a,实际上只是需要一个『最大』的集合加入。换句话说,如果 c1 是以后被另一个 up=a 的 d 关联起来的,都一样)
如果他们有同一个太爷爷(也就是说,之前
就是
就像 Rc(refcount GC)、hashmap 一样,树状数组也是只记录部分信息的,就是传递的关系,而不实际保持「继承」关系,所以才能有优化啊(要不然你只能
至于那个 O(...) 呢,书上也有在 Fundamentals 一节讲到,定义是:
O(g(n)) = {f(n):存在正常量c和n0,使得对所有n>=n0,有0
唉,没一个讲清楚的,这些数学家真的会自然语言吗?真的知道啥是定语啥是状语吗?
看不懂的话,自己用反对称套一下给自己一个主语,不然算了,毕竟数学不是给常人用的。
书上还有讲状态机、形式化文法等常见计算机科学/算法问题的,不能不说是丰富丰富再丰富。
谈到算法:数组(二分查找、选择排序、冒泡排序、合并排序)、链表、递归(尾递归)、分治算法(快速排序)、哈希表、图(无向、有向无环、广度优先搜索bfs、深度优先搜索dfs、狄克斯特拉算法)、动态编程DP、线性规划、傅里叶变换、二项式、随机化、状态机、形式化文法、二分查找树BST、跳跃链表SkipList、哈希算法、非对称密钥系统……
现在时间比较不充裕,我只能暂时先写这么多。
尽管在学校里我几乎没读这本书,我还是非常感谢赠我这本书的老师,要不然,或许我自己是找不到它的,谢谢你!
更详细的书评/笔记等我以后,会慢慢发出来、写成文集。
但愿我能够理解那些烧脑精妙的算法、但愿我能设计出我所需要所有简单的算法、但愿不论我走到多远、多高,都能够保持不卑不亢,也不会忘记曾经那个真心爱着技术的自己。
https://book.douban.com/subject/1116599/
这本书甚是有价值,不仅仅在它的三观、逻辑、数学、图示、新奇、编程实现上,我就不谈它的价格相比之下实在是不高了,质量上,高德纳(Donald Knuth)的学生,算法,不是盖的。
包括这本书的作者据称都是刚开始写 C++,一个离开计算机都能编程的人,又是计算机科学研究者、算法研究者…… emmm……
我从这本书(我第一次见到用 TeX 排版得这么好看的书,前一次是看 Kanru Hua 的信号处理(signal processing)论文和期刊切片,排版带内联的,虽然我没看懂)的代码块里了解到了原来还有人和我一样不那么遵循所谓的『代码风格』……
他们说,他们努力设计出了一套简洁、可移植的 C++ 编程模板(这里不是
template<>
的意思)。尽管我不是很喜欢数学的表达方式,我还是得承认我实在找不出一点茬子了 — 比起我从其他书里,尤其是 LLVM Cookbook — 那简直无法入眼的 C++ 代码、类 — 那哪能叫设计啊?分明就是无序杂乱的方法定义!即便能够工作,却怎么也不可能达到 Algorithms 一书示例代码的层次。
虽然我的智商不高所以能实现的东西不多,但我觉得,我的代码依然相对而言较甜,而 Algorithms 一书的代码则是带点数学薄荷的咖啡,醇香微苦,不过 — 都从不油腻、不会拖泥带水让人无从入眼。
这本书里,我学(且暂时只学到)了快速查找、合并查找(不带权重和压缩的)(因为我智商低,而且最重要的是,我有别的事还要完成……)
#include <iostream>其中的
const size_t N = 1000;
int main() { unsigned up[N], b, c; size_t it;
while (cin >> b >> c) {
auto a = up[b]; // R(a, b): up[a] = up[b]
if (up[c] == a) continue; // c R b
for(it=0; it<N; it++)
if (up[it] == c) up[it] = a; // R(it, c)
cout << b << " " << c; } }
unsigned up[N];
也可以被泛化为 std::map<unsigned, unsigned>
这是快速查找(也可以作为实现集合数据结构的一种算法),怎么快速法呢?
是解决『传递性问题』的一种算法,它的合并操作速度较慢(所以也叫慢合并),不过判断速度很快。
我们知道,对于一个 M 个输入,它都只需要 O(1) 的时间复杂度来判断是否联通,可在更新时每次都要执行 O(N·M) 次比较
(==)
运算。这个问题就是给你一堆『对』,如果它是新的,输出它,否则就继续下一个(C++ iostream 扫描器)。
因为快速查找(quick search)/合并(merge search)有 up(父树)所以也称树状数组。
1 2我们的输入上有一个性质(property):
2 3
4 0
0 1 — 4-0-1-2-3
forall a b c. a R b, b R c => a R c
我们管叫逻辑断言的传递性(transitive)。1 R 2
2 R 3 => 1 R 3
4 R 0
0 R 1 => 0 R 2, 0 R 1 R 2 R 3 且 3 R 4
(因为
R(a=1, b=2, c=3)
得证 1 R 3
且 R(a=0, b=1, c=4)
得证 0 R 4
)细心的同学可能会觉得奇怪:假如我有 b - a; d - a,他们在树上不是一个树支的,可是却被认为在一起了。
其实这很正常:传递性关系是对称(symmetric) 的,也就是说
forall a b. a R b ≡ b R a
换句话说,这实际上不是一棵树,是一个树状的集合,因为集合关系 (a `是同集` b)
也具有传递性,即 『小鸡是小鸭同集、小鸭是小鹅同集,小鸡也是小鹅同集』。至于为什么像是树,这是因为集合传递性就是树状的
问题是:这不是一个逻辑问题啊,
上面的实现被称为快速查找,你可以注意到它把离散的 a R b; b R c 传递来了,至于为什么没有 a,是因为我们的实现方式是
unsigned up[N];
数组,如果我们用的是 strcut { unsigned *up; }
就也还是一样……我不会算法可视化,所以没有图(不像那个,我艹还是算法可视化专业研究者,计算机图形学基础啊。
至于合并查找(我不知道两颗树的权重算法和路径压缩该怎么做)(题外话,我自己设计了一个类似 Dijkstra 的 DFS 算法当然还没实现,关于狄克斯特拉算法我也自己想了6个细节,只等着写文。)
它就是
size_t i, j;也就是说,找到 a R b R c R … 里的这个 a,它的 parent 绝对是它自己,它就是最大的太爷爷。
for (i=0; up[i] != i; i = up[i]);
for (j=0; up[j] != j; j = up[j]);
if (i == j) continue; // common ancestor
else up[i] = up[j]; // merge ancestor
(准确的说也没啥 parent 不 parent 的,一切都是临时的,比如我们每次把 c1 的 up 都置为 a,实际上只是需要一个『最大』的集合加入。换句话说,如果 c1 是以后被另一个 up=a 的 d 关联起来的,都一样)
如果他们有同一个太爷爷(也就是说,之前
up[x] = a
c1 R a 的那种)就是
up[a] = up[b] = up[c]
的情况(有关系的,我们都应用了相等关系的传递性,和传递性伴生的对称性)就像 Rc(refcount GC)、hashmap 一样,树状数组也是只记录部分信息的,就是传递的关系,而不实际保持「继承」关系,所以才能有优化啊(要不然你只能
xs.filter { it.first == this }.exist { it.second == x }
递归下去[因为这一个表达式应该被叫做『存直接链接』],就不好了)(当然,也可以 dfs 或者 bfs。)至于那个 O(...) 呢,书上也有在 Fundamentals 一节讲到,定义是:
对于所有 c、N0,若有 g(N) 使得对于所有 N0 < N,g(N) < c·f(N) 成立,则说 g(N) 是 O(f(N))。就是说数学函数的变化率啦,数学喜欢 \lim_{n\to\infty}{\frac{a}{b}} 趋近于 0 表示 b 渐进地大于 a 什么的……
O(g(n)) = {f(n):存在正常量c和n0,使得对所有n>=n0,有0
唉,没一个讲清楚的,这些数学家真的会自然语言吗?真的知道啥是定语啥是状语吗?
看不懂的话,自己用反对称套一下给自己一个主语,不然算了,毕竟数学不是给常人用的。
书上还有讲状态机、形式化文法等常见计算机科学/算法问题的,不能不说是丰富丰富再丰富。
谈到算法:数组(二分查找、选择排序、冒泡排序、合并排序)、链表、递归(尾递归)、分治算法(快速排序)、哈希表、图(无向、有向无环、广度优先搜索bfs、深度优先搜索dfs、狄克斯特拉算法)、动态编程DP、线性规划、傅里叶变换、二项式、随机化、状态机、形式化文法、二分查找树BST、跳跃链表SkipList、哈希算法、非对称密钥系统……
现在时间比较不充裕,我只能暂时先写这么多。
尽管在学校里我几乎没读这本书,我还是非常感谢赠我这本书的老师,要不然,或许我自己是找不到它的,谢谢你!
更详细的书评/笔记等我以后,会慢慢发出来、写成文集。
但愿我能够理解那些烧脑精妙的算法、但愿我能设计出我所需要所有简单的算法、但愿不论我走到多远、多高,都能够保持不卑不亢,也不会忘记曾经那个真心爱着技术的自己。
Douban
算法Ⅰ~Ⅳ(C++实现):基础、数据结构、排序和搜索 (豆瓣)
图书算法Ⅰ~Ⅳ(C++实现):基础、数据结构、排序和搜索 介绍、书评、论坛及推荐
真想早点睡…… 不得不先带头谈谈学校里打算谈的事,虽然
改天我要不要回顾一下之前的历史?
我果然还是进步得太慢…… 最近也才开始看得懂《编译原理实践教程》(指USTC资料,虽然我不是很看得上)和《深入分析GCC》
一般来说, #school 里我记录的笔记(很多是比较逗逼的,比如上面的修错,虽然修久了我会发现我连逻辑推导都做不到了)都会讲一遍
没做笔记的不会讲。
首先当然是 #book 好书(文)推荐
—
《她是龙》小狱
|Telegraph
注:使用 online OCR 字符识别,哦不,没找到多好的工具。
https://ocr.wdku.net/#
技术还是 Google,MS 家强
排版还要花时间,暂时出不来
他不知道,这个世界没有人有名字,所有人都只有印着一大堆标签的别称。他更不知道的是,其实故事以外的人也是这样的,即便是每个人都有着属于自己的名字,可还是得在脑门上贴上无数的标签过活,他们看别人的时候离开这些纸条就会失去判断力,却埋怨别人不肯了解自己的内心。
—
改天我要不要回顾一下之前的历史?
我果然还是进步得太慢…… 最近也才开始看得懂《编译原理实践教程》(指USTC资料,虽然我不是很看得上)和《深入分析GCC》
一般来说, #school 里我记录的笔记(很多是比较逗逼的,比如上面的修错,虽然修久了我会发现我连逻辑推导都做不到了)都会讲一遍
没做笔记的不会讲。
首先当然是 #book 好书(文)推荐
—
《她是龙》小狱
|Telegraph
注:使用 online OCR 字符识别,哦不,没找到多好的工具。
https://ocr.wdku.net/#
技术还是 Google,MS 家强
排版还要花时间,暂时出不来
他不知道,这个世界没有人有名字,所有人都只有印着一大堆标签的别称。他更不知道的是,其实故事以外的人也是这样的,即便是每个人都有着属于自己的名字,可还是得在脑门上贴上无数的标签过活,他们看别人的时候离开这些纸条就会失去判断力,却埋怨别人不肯了解自己的内心。
—
Weibo
她是龙,短篇一个充满冷笑话的童话... 来自小狱Sinner - 微博
《她是龙》,短篇。一个充满冷笑话的童话。
duangsuse::Echo
自动粘滞(sticky)Regex 有点牛逼啊,我之前的都是那些一匹配啥都匹配的,也不可能用 ?! negative lookahead 断言
那我就照本宣科地念了:
+ (信息)声音:就是物体的震动,振子的振幅,就是信号。
+ (信息)图像:就是一堆『像素』的二维矩阵xy……
+ 24bpp:(色彩深度)24个二进制位per pixel
其中一般是 R(8bits), G(8bits), B(8bits); BGR 也有
最多显示 1677万 (R*G*B) 种颜色
+ 32bpp:(色彩深度)一般是带Alpha混成像素色值的颜色
+ 灰度:心理学灰度公式(线性)
+ 信息学、熵(shang1)、电子(electron)、热
密码学、加密、隐写、编码技术、千年虫、64k-intro、DEOM技术、huffman算法
最小公倍数、最大公约数(gcd, greatest common division)、fibonacci、函数变化率
我也不知道为什么有这些东西,大概是我看小说看到的,我物理和数学都不好
+ 谈谈 Base=64 是啥意思
这还准备教 Base=1000 呢
后来我觉得我佛系了,我就扔一个公式就走人。
两个未知数都在指数的位置
一个解是 n=4; x=3
那Base=1000呢
https://codon.com/hello-declarative-world
https://github.com/nd/mk.java/blob/master/src/main/java/MicroKanren.java
可是我不会啊…… 这里也有两个未知数呢
好像还是不行呢…… 可是第一个表达式是有办法的
+ 依照CFG(Control Flow Graph) 谈 return early
虽然我好像已经谈过了(而且这次显然我不会扯到SSA的PHI……),
就是说可以要在一个函数返回前添加固定的步骤,所以不能直接 return 这样
我们这里谈的不是和 calling convention 里栈帧末的收尾代码。
说点抽象的,如果我们一直用
但是如果你
那该怎么办呢?C宏(辣鸡宏)你可以很dirty的搞个
还有,内联(inline)、嵌套(nested)函数是不允许的
C++ 你可以用 object + finializer,直接RAII(Resource Aquring Is Initialization)
可是 C 里面貌似没更好的解决方法。
一般来说都是
第一时间
《区块链离我们有多远》
我只知道金仨字面意义上的书记有一大堆,所以单单一个书记想伪造敲诈公款是不可能的……
别人说什么造假成本高于造假收益,反正就是密码学啊计算机网络那一些(可信计算?)的东西?
+ 我做梦居然梦到华为EMUI的计算器应用升级
居然还能递等式,还把括号里的东西加了箭头…… 其实我本来可以学学画dot图的,还是直白一点算了
大概是我想 Calc.kt 的二元链解析算法想过分了。
1 + 2 * 3 (梦里比这个复杂得多,我记得当时还是设计质能公式的一个略繁琐的物理算式…… 居然能那样)
= 1 + 6 — 箭头指着上面的 2 [*] 3……
= 7 — 还是有箭头……
+ #book
《文章|书 名》 作者
《她是龙》 小狱
《手机城》 最安神
《盛夏方程式》 东野圭吾
《莫言谈教养》 任万杰
《生气有啥用,还不是在原地转圈圈》 程智超
+ 谈谈知识付费
有时候看到知识付费呢,总会觉得是『知识』要『付费』,付费修饰知识。
可是总觉得,很多人心里会是这么想,实际上却是理解为『能够付费的知识』呢。
就是说,『付费』以得到知识。
『付费』比知识更重要。
付费的东西一定比不付费的强吗?其实这是很大程度依赖上下文的,无法作概论。
知识付费其实不是新概念,实际上学术界也有不少不得不向出版社掏钱的情况,但付费从不是目的,只是为了取得知识不能不拿出来的一点小代价。
如果还看重的是知识的话,就要明白呢…… 不要叫『知识付费』,叫『付费的知识』。
+ 谈谈Calc.kt现在的(基于ADT栈的)解析算法错在哪里
比如,解析词条流 a + b * c + e % c * a
(优先级自己从下面我列的结果推)
然而实际上,解析器会认为是这样:
只是因为,a+b*c 里要先解析乘法,导致栈是这样:
Expected: (a + (b*c)) + (a*c)
Actual: (a + ((b*c) + (a*c)))
+ 写两个递推式子
我也不知道有啥用,但是笔记上有。
y_0 = (inputs)
y_{n+1} = let x = y_{n} in f_{n+1}(W_{n+1}·x+B_{n+1})
—
0! = 1
n! = (n-1)!·n
当然也可以这么写,可这好像不是递推式了?
0! = 1
(n+1)! = n!·(n+1)
好奇怪啊
+ PL/0 实践的重点『难点』
1. 实现内嵌函数的作用域嵌套(nested function, leveled stack storage……)
2. 『一个好的解析器应该接受所有输入的所有部分且不能抛出错误』这个不算难,实现『「同步」的keyword token』也不难,就是跳过认不出的token
3. source map (指令序列pc到源码)(其实原教程没有)
+ PL/0 实践教程上的扩展题
虽然我觉得很废
—基础
注释:加入C风格 // 和 /**/
数组:多维数组
函数:传值调用
控制流:加入C风格 for, return,if elif else、exit
判断:(1) 短路求值 (2) && || ! (3) 表达式非零即为真
—提高
提供函数:print(_), print(_, _), random(), random(_)
提供intrinsic:CALLSTACK()
数组多维初始化,var i, j 快速初始化
函数:传地址调用
函数:传procedure调用
do while, switch 和 break, continue 甚至 goto, label
C风格表达式:比如 &, |, <<, ? : ternary 三元表达式, 赋值表达式(愚蠢
虽然照本宣科而且语言设计的也不好,但可见编译原理还是比所谓的『精通』强太多,因为编译原理就可以直接把 if else, do while, swich, break continue goto 什么的结构直接枚举出来,精通还太浅。
+ (信息)声音:就是物体的震动,振子的振幅,就是信号。
+ (信息)图像:就是一堆『像素』的二维矩阵xy……
+ 24bpp:(色彩深度)24个二进制位per pixel
其中一般是 R(8bits), G(8bits), B(8bits); BGR 也有
最多显示 1677万 (R*G*B) 种颜色
+ 32bpp:(色彩深度)一般是带Alpha混成像素色值的颜色
+ 灰度:心理学灰度公式(线性)
Y = 0.2126R + 0.7152G + 0.0722B显而易见地,数学不好是不能做计算机视觉甚至数字图像处理的……
+ 信息学、熵(shang1)、电子(electron)、热
密码学、加密、隐写、编码技术、千年虫、64k-intro、DEOM技术、huffman算法
最小公倍数、最大公约数(gcd, greatest common division)、fibonacci、函数变化率
我也不知道为什么有这些东西,大概是我看小说看到的,我物理和数学都不好
+ 谈谈 Base=64 是啥意思
这还准备教 Base=1000 呢
后来我觉得我佛系了,我就扔一个公式就走人。
2**(8*n) = 64**x where n, x in N+看起来这个等式不是很好解啊
两个未知数都在指数的位置
一个解是 n=4; x=3
那Base=1000呢
2**(8*n) = 1000**x只能用miniKanren解了呢……
https://codon.com/hello-declarative-world
https://github.com/nd/mk.java/blob/master/src/main/java/MicroKanren.java
可是我不会啊…… 这里也有两个未知数呢
def solved(n, x); 2**(8*n) == 1000**x; end上枚举吧, n=(1, 10]; x=(1, 10]
(1..1000).to_a.combination(2).map { |nx| [solved(nx[0], nx[1])||solved(nx[1], nx[0]), nx] }.find_all { |it| it[0]}
好像还是不行呢…… 可是第一个表达式是有办法的
[[3, 4], [6, 8], [9, 12], [12, 16], [15, 20], [18, 24], [21, 28], [24, 32], [27, 36], [30, 40], [33, 44], [36, 48], [39, 52], [42, 56], [45, 60], [48, 64], [51, 68], [54, 72], [57, 76], [60, 80], [63, 84], [66, 88], [69, 92], [72, 96], [75, 100]]hhhhhh好无脑
+ 依照CFG(Control Flow Graph) 谈 return early
虽然我好像已经谈过了(而且这次显然我不会扯到SSA的PHI……),
就是说可以要在一个函数返回前添加固定的步骤,所以不能直接 return 这样
我们这里谈的不是和 calling convention 里栈帧末的收尾代码。
说点抽象的,如果我们一直用
if (p) {…} clean(); return;
实际上不管怎么样 if (p)
里面的东西,除非return跳转都会 fallthru 到 clean(); return;
(隐式return也一样)但是如果你
if(!p) return;就不一样了,显然直接 return 会跳过 clean();
if(!p1) return;
clean(); return;
那该怎么办呢?C宏(辣鸡宏)你可以很dirty的搞个
#define clean(x) { clean(); x; }很甜吧,但是稍微有点常识的人都不会用
void do_sth() {
if (!p) clean(return);
if (!p1) clean(return);
clean(return);
}
#undef
还有,内联(inline)、嵌套(nested)函数是不允许的
C++ 你可以用 object + finializer,直接RAII(Resource Aquring Is Initialization)
可是 C 里面貌似没更好的解决方法。
一般来说都是
if(!p) goto out;+ 语文课上居然都谈到区块链
out: clean(); return;
第一时间
《区块链离我们有多远》
我只知道金仨字面意义上的书记有一大堆,所以单单一个书记想伪造敲诈公款是不可能的……
别人说什么造假成本高于造假收益,反正就是密码学啊计算机网络那一些(可信计算?)的东西?
+ 我做梦居然梦到华为EMUI的计算器应用升级
居然还能递等式,还把括号里的东西加了箭头…… 其实我本来可以学学画dot图的,还是直白一点算了
大概是我想 Calc.kt 的二元链解析算法想过分了。
1 + 2 * 3 (梦里比这个复杂得多,我记得当时还是设计质能公式的一个略繁琐的物理算式…… 居然能那样)
= 1 + 6 — 箭头指着上面的 2 [*] 3……
= 7 — 还是有箭头……
+ #book
《文章|书 名》 作者
《她是龙》 小狱
《手机城》 最安神
《盛夏方程式》 东野圭吾
《莫言谈教养》 任万杰
《生气有啥用,还不是在原地转圈圈》 程智超
+ 谈谈知识付费
有时候看到知识付费呢,总会觉得是『知识』要『付费』,付费修饰知识。
可是总觉得,很多人心里会是这么想,实际上却是理解为『能够付费的知识』呢。
就是说,『付费』以得到知识。
『付费』比知识更重要。
付费的东西一定比不付费的强吗?其实这是很大程度依赖上下文的,无法作概论。
知识付费其实不是新概念,实际上学术界也有不少不得不向出版社掏钱的情况,但付费从不是目的,只是为了取得知识不能不拿出来的一点小代价。
如果还看重的是知识的话,就要明白呢…… 不要叫『知识付费』,叫『付费的知识』。
+ 谈谈Calc.kt现在的(基于ADT栈的)解析算法错在哪里
比如,解析词条流 a + b * c + e % c * a
(优先级自己从下面我列的结果推)
(a + (b * c)) + [(e % c) * a]这是正经情况。
然而实际上,解析器会认为是这样:
a (+) (b*c) (+) [(e%c) * a]看到区别了吗?ADT Stack 是右结合的,即便 (+) 的左优先级更大也是一样
(a + [(b * c) + (e%c * a)])
只是因为,a+b*c 里要先解析乘法,导致栈是这样:
a (+) (b*c)如果过一会又出现了加法会怎么样?答案是会归到 (b*c)里:
a (+) ((b*c)+a)如果又是加乘呢?
a (+) (b*c) (+) (a*c)所以遇到这种连续两次 (+) 的情况,就都会变成右结合(参考Recursion的reduce方法),实际上应该是左结合的
Expected: (a + (b*c)) + (a*c)
Actual: (a + ((b*c) + (a*c)))
+ 写两个递推式子
我也不知道有啥用,但是笔记上有。
y_0 = (inputs)
y_{n+1} = let x = y_{n} in f_{n+1}(W_{n+1}·x+B_{n+1})
—
0! = 1
n! = (n-1)!·n
当然也可以这么写,可这好像不是递推式了?
0! = 1
(n+1)! = n!·(n+1)
好奇怪啊
+ PL/0 实践的重点『难点』
1. 实现内嵌函数的作用域嵌套(nested function, leveled stack storage……)
2. 『一个好的解析器应该接受所有输入的所有部分且不能抛出错误』这个不算难,实现『「同步」的keyword token』也不难,就是跳过认不出的token
3. source map (指令序列pc到源码)(其实原教程没有)
+ PL/0 实践教程上的扩展题
虽然我觉得很废
—基础
注释:加入C风格 // 和 /**/
数组:多维数组
函数:传值调用
控制流:加入C风格 for, return,if elif else、exit
判断:(1) 短路求值 (2) && || ! (3) 表达式非零即为真
—提高
提供函数:print(_), print(_, _), random(), random(_)
提供intrinsic:CALLSTACK()
数组多维初始化,var i, j 快速初始化
函数:传地址调用
函数:传procedure调用
do while, switch 和 break, continue 甚至 goto, label
C风格表达式:比如 &, |, <<, ? : ternary 三元表达式, 赋值表达式(愚蠢
虽然照本宣科而且语言设计的也不好,但可见编译原理还是比所谓的『精通』强太多,因为编译原理就可以直接把 if else, do while, swich, break continue goto 什么的结构直接枚举出来,精通还太浅。
GitHub
nd/mk.java
Contribute to nd/mk.java development by creating an account on GitHub.
#book 这些是我在学校里想起曾经看过的书……
感觉还是没有什么进步啊
果然是这样吗?
— 注,书名作者名全都是我记忆里的版本,不对正确性作出担保
《ES6标准入门》by 阮一峰
《Kotlin极简教程》by 陈光剑
《The Little Scheme — 递归与函数式的奥妙》 虽然现在表述式(过程式,命令式)、定义式(函数式,声明式)、逻辑式(描述式)都不流行hhhh?就是那个 The Little Schemer 的中文版
《嵌入式Linux系统与工程实践》
《完美应用OpenSUSE》by 何晓龙
《算法图解》 Grokking Algorithms
《算法I-IV(C++实现)》 Algorithms in C++ I-IV: Fundamentals, Data Structure, Sorting, Searching by Robert Sedgewick
《Ruby元编程 II》 Metaprogramming Ruby II
《深入剖析Ruby虚拟机》 Ruby under a Microscope by Paolo Patrick
《CLR via C# 中文版》 CLR via C# by Jeff Richester
《快速轻量级JavaEE开发》 Continuous Enterprise Development in JavaEE
《Qt5.9 C++实战》
《操作系统笔记2019》
《一本通 二级C语言》
《软件工程导论》
《有趣的二进制》
《Internet原理与技术》
《手把手教你FPGA设计——基于大道至简的设计法》
《职场新生代 嵌入式600问》
《小白都能看懂的Python大数据分析》
《LLVM Cookbook中文版》 LLVM Cookbook
《深入分析GCC》
《深入理解Java虚拟机——JVM高级特性与最佳实践》by 周志明
《PHP内核分析》
《Lua设计与实践》by codedump
感觉还是没有什么进步啊
果然是这样吗?
— 注,书名作者名全都是我记忆里的版本,不对正确性作出担保
《ES6标准入门》by 阮一峰
《Kotlin极简教程》by 陈光剑
《The Little Scheme — 递归与函数式的奥妙》 虽然现在表述式(过程式,命令式)、定义式(函数式,声明式)、逻辑式(描述式)都不流行hhhh?就是那个 The Little Schemer 的中文版
《嵌入式Linux系统与工程实践》
《完美应用OpenSUSE》by 何晓龙
《算法图解》 Grokking Algorithms
《算法I-IV(C++实现)》 Algorithms in C++ I-IV: Fundamentals, Data Structure, Sorting, Searching by Robert Sedgewick
《Ruby元编程 II》 Metaprogramming Ruby II
《深入剖析Ruby虚拟机》 Ruby under a Microscope by Paolo Patrick
《CLR via C# 中文版》 CLR via C# by Jeff Richester
《快速轻量级JavaEE开发》 Continuous Enterprise Development in JavaEE
《Qt5.9 C++实战》
《操作系统笔记2019》
《一本通 二级C语言》
《软件工程导论》
《有趣的二进制》
《Internet原理与技术》
《手把手教你FPGA设计——基于大道至简的设计法》
《职场新生代 嵌入式600问》
《小白都能看懂的Python大数据分析》
《LLVM Cookbook中文版》 LLVM Cookbook
《深入分析GCC》
《深入理解Java虚拟机——JVM高级特性与最佳实践》by 周志明
《PHP内核分析》
《Lua设计与实践》by codedump
#book 《Kotlin 极简教程》怎么说用处也是蛮不小的。虽然内容新颖有深度,不过如果一定要提意见,就是有些东西的描述还可以再好好斟酌一下,是否足够简明、是否存在赘述或者该泛化没泛化的情况。