/tmp/duangsuse.sock
https://github.com/rubenlagus/TelegramBotsExample/blob/master/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java#L60 咱吐了。咱从很早以前都不写这种程序了,如今见教、见教。
我真是不想对这种代码说什么了。 #Java #statement
从 Eclipse 上都可以看得出,『Java 软件工程』简直是个笑话,通通的过度设计。
从设计模式上来讲,Eclipse IDE 可以说是很遵循教科书了,可惜还是 IDEA 技高一筹,不仅提供花样繁多的 refactor,而且带各种 inspection、quick fix、智能感知,界面还简洁、不是像宇宙一样过度混杂,这点 Eclipse 可以说是数十年没有长进。
我不是很了解,当前也没啥资料可以翻阅,不过 IDEA 既然做得好,当然是有做得好的缘由的。
坦白吧。之前我在给某个 Qt 5.14 的 C++ 程序加功能的时候,也是这个熊样,我当时感觉自己复制了许多相当冗长用于设置 UI 的代码,然后补充了少数为了给程序引入一个参数的代码,最后完成了,但最核心的改动不过是加了一个映射到 QSlider 的变量。
Java 的 Checked Exceptions,我也坦白了,当年啥都不懂的我第一反应是记下这个名词,因为它好大佬啊,那是我对 Java 语言一些『深层次』的设计细节第一次的了解,要是我能稍微把它和 Haskell 的 Either、Rust 和 Kotlin 的 Result,能联系起来也好啊。
当年我不是写不出小应用,尽管的确是连 Android 的 ArrayAdapter 都不会用,但还是写得出来点 EditText 文本处理什么的,尽管是抄基础模式,不自己理解。
以前我是觉得越多越好,现在我是觉得越少越好。少能分出主次,与人方便自己方便,我再也不做机器该做的工作。
就是这样,毫不在意别人的可读性和项目的可维护性,现在是如此,以后假如要换一个持久化存储的数据和操作模型,或者换成 Future 的 request 接口,那些代码,通通不能用、是废物。通通得重写、再改。
这个过程往往会引入更多新 bug,我都不敢想修完一个,再自动甚至手动测试后发现不能用,而且是因为另一个地方同类的问题忘改了,再返工,那是一种什么样的工作。
能把代码写成这样,只有一种原因,就是你完全是『见机行事』,先觉得需要是那样做,然后丝毫不多想想有哪些通用模式,就去霸王硬上弓,
或者干脆就是仿冒别人的代码喽,抄过来的你当然不知道怎么裁剪以使之适体,当然更没有那个功夫了。
能把代码写成这样,说明你从来没有重写,以及在很大的层面上重构你的代码。何谓「很大的层面」?比如给一个广泛使用的 class 添加方法,比如把所有阻塞操作改成异步的,比如让你的代码可以在很多个底层抽象平台上工作。
promise & future, observer, task 什么的我不说,就说说 await/async 吧,让看起来顺序执行的代码可以被打断,可以异步,你不需要改原来代码加 then 指定回调,简单吧?
而「可打断的程序」是 Melvin Conway 于 1958 年引入的『协程 coroutine』概念,Kotlin 消灭了 Java 和 Python 的 try with resource 语法的
最关键的问题永远不在你写了多少行,而在你把看起来简单至极的东西表达出了多重的分量。
我想说对于这样生硬的代码来说,基本上就没有复用、移植的可能性,一旦情况稍微有变,或者想要改变一点点数据的获取方式,都“牵一发而动全身”,每次重构都疲于奔波,除了符号重命名基本就没啥了。
可维护性?安全性?鬼知道呢,反正有新功能加新代码就好了,你管它是一个新功能 10 行还是 4 行。
倒不如说是这样的程序员自己的迷信,他们会觉得写的越多、看着越复杂越密集越好,所以喜欢把一些 IDE 都检测不出来的 dead code,比如把默认是那样的属性再显式设一遍,或者严格按照「工程的代码风格」来,大量赋值也不懂得为了可读性加几个分号,换换布局套路,跟个机器人一样,还和电脑抢饭吃。
谁开始的时候不是那样呢,当好一个码农,当然是手工管的地越大越好,王道征途。
谁稀罕函数式的一亩三分地,切。
它根本不知道编程该是什么样,就是往上瞎加代码。
又怎么样。
从 Eclipse 上都可以看得出,『Java 软件工程』简直是个笑话,通通的过度设计。
从设计模式上来讲,Eclipse IDE 可以说是很遵循教科书了,可惜还是 IDEA 技高一筹,不仅提供花样繁多的 refactor,而且带各种 inspection、quick fix、智能感知,界面还简洁、不是像宇宙一样过度混杂,这点 Eclipse 可以说是数十年没有长进。
我不是很了解,当前也没啥资料可以翻阅,不过 IDEA 既然做得好,当然是有做得好的缘由的。
坦白吧。之前我在给某个 Qt 5.14 的 C++ 程序加功能的时候,也是这个熊样,我当时感觉自己复制了许多相当冗长用于设置 UI 的代码,然后补充了少数为了给程序引入一个参数的代码,最后完成了,但最核心的改动不过是加了一个映射到 QSlider 的变量。
Java 的 Checked Exceptions,我也坦白了,当年啥都不懂的我第一反应是记下这个名词,因为它好大佬啊,那是我对 Java 语言一些『深层次』的设计细节第一次的了解,要是我能稍微把它和 Haskell 的 Either、Rust 和 Kotlin 的 Result,能联系起来也好啊。
当年我不是写不出小应用,尽管的确是连 Android 的 ArrayAdapter 都不会用,但还是写得出来点 EditText 文本处理什么的,尽管是抄基础模式,不自己理解。
以前我是觉得越多越好,现在我是觉得越少越好。少能分出主次,与人方便自己方便,我再也不做机器该做的工作。
就是这样,毫不在意别人的可读性和项目的可维护性,现在是如此,以后假如要换一个持久化存储的数据和操作模型,或者换成 Future 的 request 接口,那些代码,通通不能用、是废物。通通得重写、再改。
这个过程往往会引入更多新 bug,我都不敢想修完一个,再自动甚至手动测试后发现不能用,而且是因为另一个地方同类的问题忘改了,再返工,那是一种什么样的工作。
能把代码写成这样,只有一种原因,就是你完全是『见机行事』,先觉得需要是那样做,然后丝毫不多想想有哪些通用模式,就去霸王硬上弓,
或者干脆就是仿冒别人的代码喽,抄过来的你当然不知道怎么裁剪以使之适体,当然更没有那个功夫了。
能把代码写成这样,说明你从来没有重写,以及在很大的层面上重构你的代码。何谓「很大的层面」?比如给一个广泛使用的 class 添加方法,比如把所有阻塞操作改成异步的,比如让你的代码可以在很多个底层抽象平台上工作。
promise & future, observer, task 什么的我不说,就说说 await/async 吧,让看起来顺序执行的代码可以被打断,可以异步,你不需要改原来代码加 then 指定回调,简单吧?
而「可打断的程序」是 Melvin Conway 于 1958 年引入的『协程 coroutine』概念,Kotlin 消灭了 Java 和 Python 的 try with resource 语法的
File("wtf").use { } 用的是 Scheme 编程语言 1975 就实现的『闭包 closure』。最关键的问题永远不在你写了多少行,而在你把看起来简单至极的东西表达出了多重的分量。
我想说对于这样生硬的代码来说,基本上就没有复用、移植的可能性,一旦情况稍微有变,或者想要改变一点点数据的获取方式,都“牵一发而动全身”,每次重构都疲于奔波,除了符号重命名基本就没啥了。
可维护性?安全性?鬼知道呢,反正有新功能加新代码就好了,你管它是一个新功能 10 行还是 4 行。
倒不如说是这样的程序员自己的迷信,他们会觉得写的越多、看着越复杂越密集越好,所以喜欢把一些 IDE 都检测不出来的 dead code,比如把默认是那样的属性再显式设一遍,或者严格按照「工程的代码风格」来,大量赋值也不懂得为了可读性加几个分号,换换布局套路,跟个机器人一样,还和电脑抢饭吃。
谁开始的时候不是那样呢,当好一个码农,当然是手工管的地越大越好,王道征途。
谁稀罕函数式的一亩三分地,切。
它根本不知道编程该是什么样,就是往上瞎加代码。
又怎么样。
才想起来那个是叫『侵入式协程』…… 还记得那有个『透明XX』的名词,比如『透明代理』是都无法区别有没有 的代理……
然后,我忘记 coroutine 名词的创立时间了
Scheme 的也忘了,都是后来查的
ADCE 好像也是说『侵入式』的 dead code elimination
然后,我忘记 coroutine 名词的创立时间了
Scheme 的也忘了,都是后来查的
ADCE 好像也是说『侵入式』的 dead code elimination
/tmp/duangsuse.sock
我真是不想对这种代码说什么了。 #Java #statement 从 Eclipse 上都可以看得出,『Java 软件工程』简直是个笑话,通通的过度设计。 从设计模式上来讲,Eclipse IDE 可以说是很遵循教科书了,可惜还是 IDEA 技高一筹,不仅提供花样繁多的 refactor,而且带各种 inspection、quick fix、智能感知,界面还简洁、不是像宇宙一样过度混杂,这点 Eclipse 可以说是数十年没有长进。 我不是很了解,当前也没啥资料可以翻阅,不过 IDEA 既然做得好,当然是有做得好的缘由的。…
Java 的 checked exception 主要问题还是,
(1) 我们经常明明知道异常在调用正常时不会发生,但还不得不被迫『检查』它们出现的情况
有人说 Java 的 checked exception 更像包含 Ok, Err 两个情况的 Result,反正都必须定义所有情况的处理方式,不会未定义就是了。
不检查相当于断言一定成功,失败了大概就是选择死亡
检查了相当于静态判断成功与否,但很冗长
(2) 有时候你只是想
(3) 有的异常其实本来可以是不受检的 RuntimeException,但 Java 给了框架滥用强制检查的可能性,
或许一些 Java 类并不占多大地方,但每个类源文件,都必须 import 某个 Exception subclass,或者干脆一个包的全引入进来,导致余赘、含过长命名代码的产生。
或许 Kotlin 不用 checked exception,也是一种滥用,但它的确是最佳 workaround
最重要的是,Kotlin 的 nullability T? 在类型和基本分支操作层面完全解决了许多 Exception 的问题,让能写一行的代码写进一行里,而不是只能用 Excepion,不会造成过度设计、区分太开但从不实际使用的问题。
Java8 加了 lambda,可惜根本不能和 Kotlin 式能直接支持 EDSL 的 "block" 比。
emmm
(1) 我们经常明明知道异常在调用正常时不会发生,但还不得不被迫『检查』它们出现的情况
有人说 Java 的 checked exception 更像包含 Ok, Err 两个情况的 Result,反正都必须定义所有情况的处理方式,不会未定义就是了。
不检查相当于断言一定成功,失败了大概就是选择死亡
检查了相当于静态判断成功与否,但很冗长
(2) 有时候你只是想
e.printStackTrace(); 但每个 catch 都要把这个写下来,即便明明知道 catch 的都是 Exception 的子类型(1.7 引入 multi-catch 解决了这个问题)(3) 有的异常其实本来可以是不受检的 RuntimeException,但 Java 给了框架滥用强制检查的可能性,
或许一些 Java 类并不占多大地方,但每个类源文件,都必须 import 某个 Exception subclass,或者干脆一个包的全引入进来,导致余赘、含过长命名代码的产生。
或许 Kotlin 不用 checked exception,也是一种滥用,但它的确是最佳 workaround
最重要的是,Kotlin 的 nullability T? 在类型和基本分支操作层面完全解决了许多 Exception 的问题,让能写一行的代码写进一行里,而不是只能用 Excepion,不会造成过度设计、区分太开但从不实际使用的问题。
Java8 加了 lambda,可惜根本不能和 Kotlin 式能直接支持 EDSL 的 "block" 比。
emmm
Forwarded from Deleted Account
Wikipedia
Model-free (reinforcement learning)
type of machine learning algorithm
Forwarded from 提皮tp ┃
紧急扩散。昏睡红茶消灭病毒非常非常有效。
114.514%的昏睡粉末装在胶囊或小块里,每次1919毫克,每天810粒 可以杀灭肺炎病毒。
这是下北泽野兽学家 李田所 在自家阳台研发出的偏方。已经治愈了各种病。
扩散,让大家自救
114.514%的昏睡粉末装在胶囊或小块里,每次1919毫克,每天810粒 可以杀灭肺炎病毒。
这是下北泽野兽学家 李田所 在自家阳台研发出的偏方。已经治愈了各种病。
扩散,让大家自救
Forwarded from 🌕🌖🌗🌘🌑🌒🌓🌔🌕
MMS使用手册.pdf
5.9 MB
紧急扩散。次氯酸消灭病毒非常非常有效。
75%的次氯酸钙粉末装在胶囊里,每次800毫克,每天8粒 可以杀灭肺炎病毒。
这是美国冶金学家吉姆汉博的偏方。已经治愈了各种病。
扩散,让大家自救。🥺🥺🥺🥺
75%的次氯酸钙粉末装在胶囊里,每次800毫克,每天8粒 可以杀灭肺炎病毒。
这是美国冶金学家吉姆汉博的偏方。已经治愈了各种病。
扩散,让大家自救。🥺🥺🥺🥺
Forwarded from 2019-nCoV疫情实时播报🅥
永久封存 | Yuuta 台 | 😷 #Pray4Wuhan
https://t.me/status_is_changing/26417 🌚
dev 现在没 IDEA
络老出故障,name lookup error,很恼人
键盘连个 (2+1) 都打不出来
真的很困难啊。
还是当萌豚好了
络老出故障,name lookup error,很恼人
键盘连个 (2+1) 都打不出来
真的很困难啊。
还是当萌豚好了
Forwarded from 《一天世界》博客 (Lawrence Li)
对于这次新型冠状病毒,作为普通人(即职业不是记者),应该把「不转任何截图」作为原则。要传递任何信息,只发链接。若认为对方有可能打不开链接,可以补发截图。但链接不能少。
/tmp/duangsuse.sock
Kotlin 基本写不出来,速度太慢了
悼念一下开发: #dev #PLT
其实这一次我的速度很慢,不过就一些掺杂进的小思考而言,智商是没有下降的(迫真
本苏这几天也有点心累,要知道我现在的设备性能很差,而且键盘也有 dead key 的问题(经常出现、偶尔正常)。
况且网络虽然基本认为可用但偶尔断线,这其中也有zf愚民政策和最近 nCoV 导致 GFW 激突的原因。
就理论而言,我觉得是没什么难的,包括 Lua 使用的是和我这次一样的 Lexical Scoping、存储分配方案。
解析器的架构上,就之前我在 jison、《看完这段 Kotlin 代码我哭了》相比,我抽提出了 Input 里所用的
(易混),就是在一个流里可递归 mark/reset 的时候,[a b c] [d e f] 需要在 reset 后能够按后入先出的顺序(因为栈是按逆序 pop 的,[d e f] 反而是先入栈)按照原有顺序弹出,
Input 还是分 RawInput: Feed, MarkReset 和 Input: RawInput, SourceLocated
大概咸久了也会导致动手能力下降、怕这怕那吧,我会振作起来的。
— UPDATE
ReverseStack 不该叫那名,addAll 容易造成在出队顺序上的混淆——Collection 里优先的项目在 Stack 里本该后弹出
该叫
mark/reset 的 stack 本身回溯被 ListStack 储存下来的流的过程,类似两个栈互相弹压逆序的过程
栈是后进先出,两个栈互相,第二个栈后面的项就是先进后出,回到原顺序了。
其实这一次我的速度很慢,不过就一些掺杂进的小思考而言,智商是没有下降的(迫真
本苏这几天也有点心累,要知道我现在的设备性能很差,而且键盘也有 dead key 的问题(经常出现、偶尔正常)。
况且网络虽然基本认为可用但偶尔断线,这其中也有zf愚民政策和最近 nCoV 导致 GFW 激突的原因。
就理论而言,我觉得是没什么难的,包括 Lua 使用的是和我这次一样的 Lexical Scoping、存储分配方案。
解析器的架构上,就之前我在 jison、《看完这段 Kotlin 代码我哭了》相比,我抽提出了 Input 里所用的
ReverseStack 结构(易混),就是在一个流里可递归 mark/reset 的时候,[a b c] [d e f] 需要在 reset 后能够按后入先出的顺序(因为栈是按逆序 pop 的,[d e f] 反而是先入栈)按照原有顺序弹出,
interface ReverseStack<T> { fun addAll(items: Collection<T>); fun removeLast(): T }
至于 Feed 的 peek/consume、SliceFeed/IteratorFeed、JVM 特例的 InputStreamFeed 就不必说,和以前一样Input 还是分 RawInput: Feed, MarkReset 和 Input: RawInput, SourceLocated
大概咸久了也会导致动手能力下降、怕这怕那吧,我会振作起来的。
— UPDATE
ReverseStack 不该叫那名,addAll 容易造成在出队顺序上的混淆——Collection 里优先的项目在 Stack 里本该后弹出
该叫
ListStack<E>, addAll(Collection<E>) + removeLast():E mark/reset 的 stack 本身回溯被 ListStack 储存下来的流的过程,类似两个栈互相弹压逆序的过程
栈是后进先出,两个栈互相,第二个栈后面的项就是先进后出,回到原顺序了。