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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from dnaugsuz
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from dnaugsuz
Ring.xcf
102.9 KB
源文件,动画是我一帧一帧拿 VisualGimp 工具肝的
Ring.kt
2.3 KB
#Kotlin #code Ring buffer
Forwarded from dnaugsuz
加上了 mark/reset 就很迷,但是为了保护之前还没出队的数据的(markDistance 对 avaliable 从数值大小上看和 free 是一样的,可是用 markDistance 会导致 add 不能使用(锁住了 freeSpaces),加 free 就不会)
如果完全不加注释还真的是有点莫名其妙
一般的话加个『可视化』文本注释会比较好吧
Forwarded from dnaugsuz
再写了一遍,花了 8 分钟居然一遍编译过,开心(虽然还是看不清楚……)
Forwarded from dnaugsuz
🤔 看起来 mark 以后已经读取的数据还是不能遍历第二次,如果想的话,就要把 distance 减去 markerPosition,或者不看 free;基本理清了
duangsuse Throws
我曾经写的『倒序』(那时候我连字节序到底是什么都不知道) 我记得就这程序我当时至少写了 5 分钟,当然现在我优化了自己对 bound 模型的理解力,所以会快很多(不过写错了,Kotlin 也骗我,我以为 a..b 是 (a, b] 区间的意思……Kotlin 变成全开区间了) def rev(hex); l = hex.length; "#{hex[0..l-(2*3 +1)]}#{hex[l-(2*3 +1)..l-(2*2 +1)]}#{hex[l-(2*2 +1)..l-(2*1 +1)]}#{hex[l…
template <typename T>
void reverse(T *ptr, size_t len) {
size_t lastIdx = len -1;
size_t end = (len / 2) +1; // 其实这个 +1 可以去掉,因为即便输入是单数个,最中间的一个也不存在顺序之说,无须逆序
for (unsigned i = 0; i < end; ++i)
{ std::swap(ptr[i], ptr[lastIdx-i]); }
}
#Cplusplus
此外,有些程序员还通过 (a + (a-1)) / b 的方式来 div_ceil, 此时只要有余数,结果自动加一
duangsuse::Echo
Ring.kt
🤔 #Duava 打算加入迫真豪华套餐
#China 梯子国庆活动
Forwarded from null
[CloudHammer 国庆活动公告]

庆祝中华人民共和国成立 70 周年,CloudHammer 特推出全站 7 折优惠码:国庆70,7 天时间,全场 7 折,迎 70 华诞!

https://console.cloudhammer.site/user/shop
Forwarded from dnaugsuz
function os.execute 在 LuaJIT 2.1 和 Lua 5.3 里的行为好像是不一样的

okay, status, code = os.execute('exit 1')

Lua 官方解释器的实现在这里注册在这里),Lua 的 OS library(luaL_)
这里可以看到如果输入不为 nil 之类,只要有 shell,就会执行并且返回 luaL_execresult
辅助的 luaL_execresult这里
这里可以看到
+ 默认 status 是 "exit"
+ 如果 system libc API 调用失败,则自动 fmt strerror
+ 如果编译目标是 POSIX 系统,会自动区分子进程 exit 和 signal received
what = singaled(stat)? signo(stat) : exited(stat)? exitcode(stat) : "exit"
push(ok? true:luaFail) push(what) push(stat)

Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> os.execute('sleep 5')
^Cnil signal 2


LuaJIT 的返回类型则是 (number | boolean),这么做是为了方便,因为 Lua 里 falsey 是 nil, false,其他都是 truthy value

okay, _, code = os.execute('systemctl start prc90')
if not okay then print(code)…… end

如果和官方一样用 okay 而不是 hasError,在 truthy 和 falsey 的层面(直接用 if 来判断)就无法区分两种 case 了,就必须得这么写

res = os.execute('systemctl stop winnie')
if type(res) == 'boolean' and res then -- okay
print('Okay, winnie is stopped 🐻')
else if type(res) == 'number' then
print('failed: ' .. res)
end

不然的话直接用 if not res 就可以处理错误退出码
不时发一些容易被忽视的技(dao) 术(de) 问题 #statement
用 Telegraph 怎么样,会不会被枪毙
Forwarded from duangsuse Throws
#INFO #News #tencent #China duangsuse 的(绝望)QQ 空间现在是开放的
https://user.qzone.qq.com/3323659619
但愿不会被枪毙
#Kotlin #code 我真的不想再去考虑 markReset 的 Ring 是怎么保证『不重复』这件事了,无用的努力…… 现在已经够好了
Ring.kt
3 KB
#Kotlin #code #Duava 全家桶
Ring.kt
3.3 KB
#Kotlin #code #Duava 新版本的 Ring,支持 Viewport: List<E>
Ring.kt
3.3 KB
又做了一点修改(其实就是改了个名字… Kotlin 的 a..b 还真是 有点…… 不过我自己都没注意到 avaliable 的结果其实是包含了 position 的部分,本身就属于瞎猫 x 死耗子,面向 REPL 编程
This media is not supported in your browser
VIEW IN TELEGRAM
稍微对这种距离数值依赖关系比较迷的问题有了一点「可视化」的理解,想必数轴也会算了吧…… #Math

Ring 不存在死的 Index,不存在的,所以不能 <=k 什么的,必须得用 free/avaliable,因为索引不存在硬性性质所以才叫『环』
每次 pop 也得依赖 position,可是不知道什么时候和队首指针撞上,所以得先看 avaliable,也是 markedRead 变量存在的原因

当然我之前说使用 distanceR2W 损失了 capacity 数据,其实虽然它的确没有记录,但不意味着我们不能用对象状态本身包含的 capacity 来计算(freeSpace)
只要在 distanceR2W >=capacity 的时候不允许继续 add,就可以避免溢出的数据被覆盖了

markedRead 的长度没被算进 free(可以认为它是另外一种项目『被保护的项目』),但为了避免 pop 重复,被算进了 avaliable
在后来的版本里,直接吧 markedRead++, freeSpace-- 了,更突出 marking pop 的时候空闲和长度计算的目的
Ring.kt
3.9 KB
#Duava #Kotlin 真的不能继续改下去了……