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
ring.kt
1.6 KB
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 的时候空闲和长度计算的目的