“分封制” 代替RBAC权限管理模型
作为开发狗,手上堆的系统和任务多了,开权限就变成了一件麻烦的事。 一开始做一个功能X,给甲用,就做一个简单的权限关联表:功能key,人员id就完事大吉 后来人员调整流动,换人换得勤快,得考虑一个功能给一个团队使用,于是引入 RBAC,基于角色的鉴权控制。说到底就是个三元组 功能key,角色,成员id。 我也一度迷信这样的设计。用了这么久还是麻烦了。在一个正常官僚程度的大中型组织里,压根没人知道自己角色是啥。 你说他是管理人员吧,他也就管一部分;你说他负责这事吧,也就负责一阵。该给他放到哪个角色呢? 如果做一个自动化角色申请审批流程,他会跑来问你,该申请哪个角色啊? 所以问题又回到了原点。因此我琢磨出来一套具有大汉封建主义特色的,「分封制」权限控制体系。 系统超管:普天之下,莫非王土;率土之宾,莫非王臣。..
更多Install mosh for macOS arm64 with Miniconda3
I always hate compiling and building. It's an error-prone path filled with riddles and unknowns. mosh is a great tool replacing ssh in many cases, sadly it does not provide an arm64 binary download or installer for M1/M2/M3 MacBooks. Moreover I dont like XCode and protected /usr/bin shit so I prefer isolated envs like miniconda3. Anyway, for such a detour..
更多javascript 节拍器
娃学琴,节奏感糊成一坨了。老师让抖腿打节拍,显然不work。码农特有的穷B气质让我舍不得买个实体的;去找个节拍器app,结果各大市场都是各种广告,怕给娃用不正经;甚至找了很多公众号版的,小程序版的,网页版的,普遍都是各种跳转诱导点击。 失望之余,想起来上次JS播放DTMF对 WebAudio 有点感觉,要不这次自己干脆再手搓一个。调研了一圈发现这玩意没那么容易,主要就是javascript在浏览器里 setInterval 是有时间抖动(jitter)的,不能保证节奏精确。如何才能做到精准采样打节拍呢?连续精心编排 AudioContext 时间轴! 搜了一圈发现一位叫 Grant James 已经写好放在 github 了。那还等什么直接拿来~~针对性的改进了: 无广告 去掉 .js .css 依赖,..
更多

Edge找回丢失的右上角Copilot侧边栏图标
右上角图标和侧边栏的官方截图: 如果不小心关掉了,找回办法: 打开 edge://settings/sidebar/appSettings?hubApp=cd4688a9-e888-48ea-ad81-76193d56b1be F12 或者 Opt+Cmd+I,找到第一个“Show Copilot”开关,把它改成关闭。 如果第二步不会搞,输入 document.querySelector('input[aria-label="Show Copilot"]').removeAttribute('disabled') 可破 为什么会有这个问题,因为政策的原因,Microsoft Copilot 不能在简中使用,于是右上角的按钮点一下会消失;但是开发或者集成测试的为了省事儿,就直接给隐藏掉,导致侧边栏无法..
更多Valid HTTP verbs
从这里 想到,fetch/xhr 可以发起哪些 http verb 呢? python -m http.server 随手测试了下,发现连 !,$ 这种符号都可以作为 http verb,比如 fetch('/asdf', {method:"$"}) 这样的请求是能发起的。于是去 chromium 搜了下 "is not a valid HTTP method" 相关的解析放在 blink/renderer/platform/network/http_parsers.cc // See RFC 7230, Section 3.2.6. bool IsValidHTTPToken(const String& characters) { if (characters.empty()) re..
更多Cappy in a Haystack locations
For the mission from the beloved Fallout 4 Nuka-World DLC coc DLC04KiddieKingdomFunHouse01; player.moveto 06015A94 coc NukaWorldWildWestExt02; player.moveto 06015A8A coc DLC04BottlingPlant01; player.moveto 060445DF coc DLC04BottlingPlant01; player.moveto 0604A812 coc DLC04GalacticZoneExt04; player.moveto 06015A8E coc DLC04GalacticZoneExt04; player.moveto ..
更多Making subprocess async friendly in Python
It's been a while since i wrote something in English, mostly because there's nothing really interesting, until now. Occasionally, when facing a long running task in Python, I would choose either a distrubuted tasks queue system, or for the convenience, just the subprocess module. It's built-in and well designed for grabbing outputs of a child process runn..
更多人声分离简单评测
娃要去表演唱歌,老师要求提供MTV。。 视频是这个,需要去掉人声部分 先用 ffmpeg 提音轨 ffmpeg -i v.mp4 -ac 1 1.mp3 微信小程序上的全是骗充值的,网上的服务: 没卵用 https://vocalremover.org/ 名气很大,搜出来第一就这个 没用 https://www.conversion-tool.com/karaoke/ 卡死 https://www.songpeel.com/song-to-karaoke 要安装 https://github.com/adefossez/demucs 要6G显存 https://github.com/Anjok07/ultimatevocalremovergui 效果很好! https://tunebat.com/Vo..
更多吐槽pynsq,另外给subprocess糊了一个异步
pynsq太烂了 起初是因为需要在 Web API 里消费一个消息队列(nsq),给浏览器返回 EventSource 做实时输出。但是没想到官方库pynsq居然写得这么渣: def _handle_term_signal(sig_num, frame): logging.getLogger(__name__).info( 'TERM Signal handler called with signal %r', sig_num) tornado.ioloop.IOLoop.current().stop() def run(): """ Starts any instantiated :class:`nsq.Reader` or :class:`nsq.Wr..
更多如何删除 C:\Windows\WinSxS 文件
天气热得心慌,看Win10不爽,决定删几个文件玩玩 首先你需要以 SYSTEM 用户启动 cmd.exe Win+R 敲入: "\\live.sysinternals.com@SSL\DavWWWRoot\tools\PsExec.exe" -i -s cmd.exe 回车。确认当前身份敲入 whoami 夺权:takeown /F "C:\Windows\WinSxS\Backup" /A /R /D Y 授权:cacls "C:\Windows\WinSxS\Backup" /T /G SYSTEM:F /C 开删:rd /s /q "C:\Windows\WinSxS\Backup" 爽! 当然,你也可以让系统代替你清理: Dism.exe /online /Cleanup-Image /Sta..
更多