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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
🤔 刚才在想,如果要定义 DOM 树的模式并同时允许正向组织和反向提取,一组动词叫什么,试了 unrender, extract, dump, match 等都觉得不合适,后来发现 render/scrape 是最合适的
请查阅源代码提交政策。 您使用了下列任何一种工具吗?

Code generators or minifiers
将多个文件合并为一的工具,例如 webpack
Web 模板引擎,对于 HTML 和 CSS
任何对代码或文件二次处理,并生成附加组件中的代码或文件的其他工具
🤔
function switcher(e) {
const url = new URL(e.url);
return { redirectUrl: url.href };
}

function update_switching() {
if(browser.webRequest.onBeforeRequest.hasListener(switcher))
browser.webRequest.onBeforeRequest.removeListener(switcher);

if (patterned.length == 0) return;
browser.webRequest.onBeforeRequest.addListener(switcher, {urls: patterned}, ["blocking"]);
}

🤔从隔壁一个扩展抄过来的东西
This media is not supported in your browser
VIEW IN TELEGRAM
https://www.mohu.club/question/2605 其实我就是为了让这个 URL 能自动重定向……
duangsuse::Echo
https://www.mohu.club/question/2605 其实我就是为了让这个 URL 能自动重定向……
https://github.com/duangsuse-valid-projects/WebExt-URLReplace/commit/6fc30563975b4a1116a7a084575a4b9e86f8db4d
支持了 <all_urls> pattern 的使用(不过由于 browser.storage API 相当难用以及我自己很在意是 ES6 还是 ES7 compat 的问题,实现代码很烂)
默认情况下为了减少开销以及(象征性)尊重用户的隐私,利用了 onBeforeRequest 的 RequestFilter 功能。
在设置里添加一项 source 为 <use_all_urls> 并且 destination 不为空("true")的项目后,就会转而开启面向所有域名的替换,比如可以把 (.*).com -> \1.org
duangsuse::Echo
https://www.zhihu.com/question/22081653
🤔数学不好的我看到第一个 P=NP (自己证明容易还是证明别人的证明正确容易)的时候还想了想为什么 P=NP 就 P=0 or N=1 了
后来我发现 P=NP 不就是 P*N==P 嘛…… 于是 N 可以为1 (*1 是 fixed point) 或者干脆为 0 (照样是 fixed point
然后乘法有交换律于是就…… 总之也很头疼是了。
duangsuse::Echo
🤔数学不好的我看到第一个 P=NP (自己证明容易还是证明别人的证明正确容易)的时候还想了想为什么 P=NP 就 P=0 or N=1 了 后来我发现 P=NP 不就是 P*N==P 嘛…… 于是 N 可以为1 (*1 是 fixed point) 或者干脆为 0 (照样是 fixed point) 然后乘法有交换律于是就…… 总之也很头疼是了。
fun onEntryMessage(msg: Message) {
val newbie = msg.sender
group.restrictWriting(newbie)
timer.scheduleFor(newbie, cfg.kickoutDelay) { group.kick(newbie) }
val (problem, decisions, truth) = randomProblem()
msg.replyWith(Photo(problem)
.withBoard(createRows(decisions)) {
if (it.index == truth) onEntryApproved(msg)
else onEntryFailed(msg)
})
//nothing
}
fun onEntryApproved(msg: Message) {
timer.cancalFor(msg.sender)
//congratulations
}
fun onEntryFailed(msg: Message) {
//so bad
}
fun Group.restrictWriting(user: User) = TODO()
//……N abstraction = TODO
🤔 可以不必 fixed index,每次 random 也好
关键在于问题的答案正确判定,可以用之前的 shuffleMerge()
fun <T> Collection<T>.shuffleMerge(value: T): Pair<Int, List<T>> {
val newRange = 0..lastIndex+1
val mergedIndex = Random.nextInt(range)
val iterator = iterator()
val newList = newRange.shuffled().map { if (it == mergedIndex) value else iterator.next() }
return mergedIndex to newList
}


题库建模为许多(问题和唯一正确答案,以及一些混淆答案)
编号直接 listOf("A","B", "C", "D").zipWith 或者 associateTo 之类的
API 结果只有编号就 find 一下出 index 即可对比相等了……感觉还是有点 complicated

不对…… 有一个 from 和一个 back(to) 不就万事大吉了
This media is not supported in your browser
VIEW IN TELEGRAM
那一刻整个程序似乎都在我眼前变清晰了,只在某个处理逻辑里注册一下事件监听然后立刻返回,
我看到那些被创建出来的闭包带着一个个 user 参数曾经的值,在适合的时候依照着合适的 UpValue 继续进行余下的工作。
我仿佛看到了 GC 里一个个对象的依赖图,等待着整件事情结束才可以被销毁
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from dnaugsuz
So, did you kept backup of your old blog (CN) somewhere?
Forwarded from Teslarend Zhang
Is it no longer accessible?
Forwarded from dnaugsuz
I can't find its link at https://ice1000.org/ :(
Forwarded from Teslarend Zhang
Oh, the blogs
Forwarded from Teslarend Zhang
Yes, they're cleaned up. Low quality posts don't deserve a place in my blog