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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
在修复了 TreeWidget.TreeItem 的 id 问题后(但它的tuple第一项就只限str了 和用UUID的效果差别大),终于又完成对 Scale(slider) 的 TTk interval 支持移植(原版不支持的特性) ,我添加了一个简单的roundInterval查找算法解决这个库里的显示不准确问题,但目前还没能完成纵向的渲染(有一部分原因是它的代码质量太差了!水平线以下!害得我没时间写 code object cache)
This media is not supported in your browser
VIEW IN TELEGRAM
虽然我写得很累,但我觉得应该改正下自己的坏脾气。 别人的代码即便不好,也是可以帮忙更改的。 虽然混乱的代码给我造成了麻烦,但他们设计逻辑也是很累的,代码质量不好不能全怪他们,也怪环境不好。
如果别人的库有可以改进的部分,你会费 15 分钟来提交 Pull Request 吗
Anonymous Poll
60%
会。开源就该支持
40%
会,但只改影响功能的部分
0%
不会。不好维护的代码应该由他们的创建者负责到底
也要看我有没有能力改。
https://github.com/microsoft/pyright/blob/da39a2a78a442d2a6b29d664b32475c361c853f1/packages/pyright-internal/src/tests/samples/dataclass8.py
@dataclass
class BaseClass:
my_ref: "ReferredClass"

欸,有更新 data class 支持,而且还内部支持 typing 实现 gradual typing 不像 Ruby 太 duck typing 了,看来 Py 还是有点东西
https://github.com/microsoft/pyright/blob/930c2021c63531248c6a979e3d3afdbcca14f16b/packages/pyright-internal/src/analyzer/types.ts#L530
export function hasUnknownBaseClass(classType: ClassType)
欸,原来不报类型错误必须要在超类链上啊... 真是过分呢,我只是想面向对象 Mixin 啊
啊…… 看来数学不好果然难呢。 重构的时候我把 xs[a:-1] 的 exclusive end -1 省略了(那就包括末项了)、 map(it*b, round(n/b)) 给理解成 range(a, n, b) 了,我加的 while a%b != 0 查找其实就是 (a/b) *b ... 虽然都是很简单的倍数关系啊
不过,在我经历无数烂代码的洗礼后,终于找到了bug的源头(一个str属性配置没适配...) 现在终于可以移植过来了emmmm...
duangsuse::Echo
不过,在我经历无数烂代码的洗礼后,终于找到了bug的源头(一个str属性配置没适配...) 现在终于可以移植过来了emmmm...
有意思的是这位大神作者(可惜代码质量怎么那么差) 写出的代码虽然很好用,但其实它是薛定谔程序! 测试里应用范围内无变量,但程序行为却间隔1次时好时坏!
This media is not supported in your browser
VIEW IN TELEGRAM
这个故事告诉我们,不要尝试复制粘贴自己的代码然后做出改动。多抽提出函数调用。不然出了问题会非常麻烦。(这位大佬是把 横向纵向 的所有区别代码都用 self.op = 的形式支持,这又走另一个极端了... )
This media is not supported in your browser
VIEW IN TELEGRAM
不过说起来这次重构限制也蛮大的。目的只是要支持的几个控件里的一小个,因为原代码质量和工具不好 费了一天时间才移植一个 Widget, 而且还阻塞了我其他任务
也是因为重构时要求在完整正确的代码上改。不然一边改一边加特性还要修问题,在自己不熟悉UI框架的情况下很难正确。

要是这个作者能把他 a = initial; a = op(a, b) | a = initial; if p(a): a = b 的这种坏习惯改一改,学会多建立私有方法/局部函数 就好了,我看充满重赋值的代码时是相当头疼的……
不能怪我抱怨 ,因为这代码真的是让人无法忍受…… 你看这个,只有 anchor 一个变量,他竟然在一个循环里,给这个玩意写了两遍, 而且if体只引用到了self.... 面向对象的优势何在
唉真是头疼呢。要是这些大佬能在写的时候注意点,就不会出现这么多难以复用的代码了
不过这也不能,如果只是修改代码风格、压行的话,是起不到简化作用的,不同的调用参数太多了。 我吐嘈的是这个人没做到一些最基础的复用,看起来就像是 python wtf.py 的面向查错编程一样(当然对 Tk 的 GUI 有些问题也迷所以必须测试,但不意味着你可以把冗余逻辑复制粘贴而不是化作复用函数)

如果要进一步提升代码质量,不使用高阶函数是很难实现的(那意味着你没法把模板化函数命名作动词,然后用另一些动词调用它从而实现更高层次的复用)