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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
#info #service #linux 后知后觉 数据变成云了欸
《欧洲最大云服务公司 OVH 法国机房着火:1个数据中心被完全烧毁、部分客户数据完全丢失且无法恢复》
https://www.oschina.net/news/132638/france-ovh-fire

字面意义上的 数据上云
Forwarded from 今日份的豆酱 (TigerBeanst | 想去碎空星)
Forwarded from 神奇的笔记 (立音喵)
Forwarded from 神奇的笔记 (立音喵)
x86 模拟都出来了?!
#Kotlin #design 提问!怎么写 matcher 库呢?

你需要了解如何写可组合的操作,这里是 predicate: (T) -> Boolean ,当然实际上必须维护可阅读的结果报告(String path, Map mismatchs)

接着,考虑是 val 还是 fun,用不用 receiver 参数或带 receiver 参数的 Scope 闭包即可。

组合很简单,用函数的闭包(即 #OOP 对象)拼凑实际表达式
1.match { all(eq(1), lt(5)) } 其中 lt 是 lessThan 的意思。
const eq=a=>b=>(a==b), //lt也是一样模式,除了(b,a)=>(a<b)倒个语序
all=(...ps)=>x=>{ for(let p of ps) if(!p(x))return false; return true; }


咱可以看到,这个「高复用」办法本质只是在隐式化、拼凑参数罢了,其实 ==,!=,<>,in 等二元逻辑算符的引入都是预提供一个参数,等另一个参数 ,而 all, any, none (&|, !|) 则是在组合 Predicate 类型,用 for 循环解释 && 等算符短路(即惰性)求值的语义(any,all 等列表处理操作本是如此性质)。

当然,它们本身也是可被组合的,就像程序结构本身一样;但,原来十行代码的东西就只用写一行了,多快好省。

如果只是这样根本没必要单独开项目,反正计算开销小,可以取消 all 等组合器的部分求值,即便已知 mismatch 也只是存到一个结果报告(Map+path 足矣)里继续测试,这只需要让 all matcher 能知道自己的「路径」并且给子项们接上「新路径」。

只需把只能 apply() 的 function value 变成带构造器和 .var 的 interface ,在构造器里给子项进行 .path= 的「注入」隐式提供其路径,它之后的生命里全复用即可。
不过,这么一来就变成 interface Matcher { var name:String, fun test(x:T, m:Map<String,ErrMsg>) } 了,不需要给父组合器提示返回值了呢。
不过,这也照应了程序本身树穷尽遍历的性质,不再是逻辑表达式的「解释器」了。
Forwarded from Sauro 🍏 邮包在哪里
Forwarded from dnaugsuz
https://t.me/dsuse/16941 早上没起床就写了点相关知识……

嘛其实我觉得 mvc.perform(httpOp).andExpect(matcher) 挺冗余的, mvc.expect(arrayOf(httpOp to matcher)) 合适点

status=>ResultMatcher { AssertionErrors.assertNotEqual("status", status.value(), it.response.status) }

mockMvc.perform(post(path)).andExpect(status().isNotFound) 不能 Matcher.not() 是肯定的,如果要的话需要更改最下层的(==)命题,直接否决(不对…… ParserKt 的问题是 Repeat.not 的肯定要 rewrap ,但是这个的数据类型没有不同(不对,这个靠 ErrList 依然会有变换后否决错误信息缺失的问题……

如果让动苏来设计就不会有这种问题
Forwarded from dnaugsuz
有时候虽然他们只是在吐槽过于简单,我都觉得有点太爱秀了的意思,大概是老「反向偏见」了
可能是我对数学的一些人的某些作风有一些成见吧,不过本苏也不会算法和 DP 动态规划,当然递归和缓存是会的。

不过这道题 JavaScript 里也可这样答:
const
int2float=(n)=>applyKeepSign(n, i=>digitCat(0.0, [...digitPop(i)].reverse())),
digitPop=function*(n){ let acc=n; while(acc>0) { yield acc%10; acc=Math.floor(acc/10); } },
digitCat=(init,ds)=>{ let acc=init; for(let d of ds)acc=acc*10+d; return acc },
applyKeepSign=(n,op)=>Math.sign(n)*op(Math.abs(n));

然后 [-10, 251, 0].map(int2float) == [-10,251,0]

其实我最大的成见就是,算法在实际应用中不是最重要的;学会设计和编程调试在大部分应用/服务里对性能及健壮性、易用性的影响更显著,很多时候看似简单的算法反而有更低时间复杂度;人的能力不是通过「不明觉历」能评价的。 🤔💭
Forwarded from 浪人新闻
AI:你们卷吧,我先去赛博坦了