2025-02-02

18 篇热帖

1. 又一个闲鱼受害者,还是一个自以为很懂的垃圾佬
买了个 T480S.准备 40G 内存插满装个 linux 以后当上网开发本用.
本来寻思了一下,这种货按理说应该全都是商家走私进来的洋垃圾,那么就无所谓商家还是个人卖家了.然后这一寻思,就坏事了.

买之前还专门确认了两遍,是不是全原装,来自广州的商家也确认了是全原装.那我寻思你既然都这么明确的告诉我说全原装那就没问题了,让商家发了个没硬盘(我也不想要商家那边发的垃圾硬盘)的空机过来.,还提前要了他拍视频把机器的序列号拍了发过来.
到手立马拍了拆包到拆机的全程视频对 SN 码,越对越心凉,主板,网卡,后盖,全部都不是原装的.屏幕和键盘不好拆就先没看,估计也够呛.

然后就去找商家,说好的全原装,你卖我一组装机,那么你得给我退货啊.
商家表示,虽然你拍了视频,但是一定是你偷偷换了我的零件.我一看你这还倒打一耙,那就找闲鱼客服呗.
客服总不能不认我拍的视频.

结果还真就不认.
闲鱼客服电话里表示虽然商家发给你的是没装硬盘开不了机的组装机,但是你没有经过商家同意就拆机,那么你的一切售后要求不可能,无脑判卖家赢.

那我寻思以后以后在闲鱼买的一切数码产品都可以默认是组装机了.
如果你没拆机,那么你无法验证是否是原装.
如果你拆机了,那么即使商家卖的是组装机,因为你未经过卖家同意就拆机你依然无法要求退货.


QED,逻辑毫无漏洞.


又一个新的致富道路出现了.
2. 讲讲为什么认为自己是一个失败者
  1. 初一第一天报道,老师莫名让我做班长和体育委员,我个性软弱,只坚持了半个学期就被老师换人。
  2. 初中体育老师让我和另一个男生在操场画「 T 」字,用来帮助同学每一列站的很齐,但是我画的「 T 」每一列都歪歪扭扭没有对齐,最终体育老师怀恨在心,只给我 60 分。
  3. 有一次三人成游,朋友 A 一直在问我去某个景点行不行,我有纠结恐惧症,然后盆友 B 直接生气说:你别问他,他根本没有主意!
  4. 成年以后工作总是面试表现非常优秀,进入公司以后就露馅,被冷眼相待,甚至辞退。

随便说了几点,不止如此,总觉得自己是个失败者,性格软弱,老实巴交,讨好型人格,工作能力差,一事无成。

3. 人类应该减少直接使用笔记本电脑

笔记本的键盘与屏幕整合在一起的设计,会让人类使用的时候,非常违反生理结构。

除了小孩外的正常成年人,眼睛与小臂水平后的垂直距离相差太大了。

你想保持手肩姿势正常,你眼睛就得向下看,才能使用笔记本。这样对颈部不好。

你想保持眼睛平视屏幕,你手就得抬起来还要前伸使用,对肩膀后背都很不好。

键盘和屏幕分离,才是正确使用电脑的方式。人类应该减少直接使用笔记本电脑。

4. NAS 要不要组 Raid, NAS 是否不能用来存放重要数据

自组的 NAS 还在路上,最近做了很多功课,我发现大家对 NAS 要不要组 Raid 有很大争议,一般的教程上来就是硬盘插满然后 Raid5 ,我了解到如果不是企业级硬盘,Raid5 重组成功概率很低,而且每次扩容都需要很长时间进行重组,重组失败的结果就是数据全丢。那我不得不作出一个假设:硬盘是一定会坏的,数据是一定会丢的。

数据按重要程度分组+多个备份应该是比较合理的。这样的话 NAS 的用途变成了: 1 、一个下载器 2 、家庭影院 3 、数据中转站 4 、照片查看器 5 、Docker

为什么是这样的用途,1 和 2 我想应该不用解释了,主要是 3 和 4 在我的使用场景里,并不是所有数据都是重要的,比如照片(重要),下载的电影(不重要),保存的密码(非常重要),工作文档文件(重要) 其中照片是占用空间最大的,我的方案是,OneDrive 自动同步+NAS 自动同步,NAS 因为是本地数据可以方便照片查看,也就是上述 4 的功能,除此之外,并不寄希望于 NAS 可以用来永久储存照片,OneDrive 目前来说没有删除过用户数据吧,我用着目前来说没有,如果不信任任何云存储的话,那就需要加密备份了 对于除了照片之外的其他提及不大但是重要数据,我的方案是定时加密备份,具体来说我写了个 shell 脚本,每周或每天或每小时,直接对某个目录进行 7z 加密压缩,之后将压缩文件 cp 到 NAS 自动云同步到目录里,删除压缩包。云同步的目录里设置了多个文件夹,根据重要级别,对压缩包同步到腾讯云对象存储、百度网盘、OneDrive ,这就是上面的功能 3 ,数据中转站的功能。

这样看来,NAS 就不应该组 Raid ,原因:1 、重组成功率不高; 2 、空间浪费; 3 、不能自由增删硬盘。 缺点: 1 、无法享受 Raid 到读写加速了 2 、没有考虑到多人使用的场景,目前只有自己一个人在用 3 、网盘会员,COS 存储费等额外等费用

发帖只是想分享下自己的使用方案,同时看看有没有更好的方案我借鉴借鉴。

5. 过年回个老家,服务器 ip 被墙了
香港服务器,用 vless+ws 伪装成普通 https 过墙,深圳打工一直在用非常稳定,不管是住处电信宽带还是联通和电信手机网络,高峰期延迟稳定 50ms 以内,体验非常爽。



过年回老家河南,第二天发现 443 端口直接被封了,所有正常网页也打不开了。交叉对比发现是老家的移动宽带封的。彼时其它端口还能访问,于是切换成了其它端口的 ss ,想着临时用几天。



结果过了两天,这个端口也不行了,再一看完蛋了,不管哪个网络环境哪个端口统统连不上。返深也不行了。线上全球 ping 了一下彻底死心,除了港台和国外,国内全部节点都是红的。



最后无奈套了个 cf 的壳,算是抢救了一把,现在延迟变成了 300ms ,肉眼可见的卡顿感,体验很不爽。



只能感慨一下,我大河南局域网建设工作遥遥领先啊
6. 安卓 16 支持 Linux 子系统了

开发者设置打开 linux 支持,会有一个 terminal app ,打开安装,详见 https://www.bilibili.com/video/BV1TgFReREfe

但是楼主在 android studio 上表示安装 termial 失败了,看起来目前只有 pixel 实机能用,亦或者我没搞清怎么在虚拟机上安装

如果推广了 termux 要 G 了

7. IOS 装反炸了,就放手机里摆设被注册,被 pc 电话通知有风险,有人知道原理吗?
1.手机苹果 ios ,巨魔。卡一流量 卡二主卡
2.手机里有 X telegram
3.手机里有反诈 app ,但是没打开过,就是摆在应付

原由:接到 PC 电话说涉嫌被诈骗,浏览了什么网站,叫我在村里等他们你来,现在去另外一个村也有一个。来这只有加我不要刷单,翻了我手机浏览器,不要下载国外的 app ,帮我反诈的实名认证了,微信关注了反诈。没了

a.我想知道什么原理,那天登录一个 telegram 的账号,但是不在这个手机上的手机号,获取验证码收不到。点了什么网站我忘记了,可能是点了一些不三不四的网站,我都没有输入什么手机号,怎么发现的。
b.我用的是卡一流量卡,卡二是我的主卡,打电话通知我卡二
c.如何避免这个,最近先不卸载反诈了
d.网上说 ios 改香港地区 语言会好点真假
e.如何避免这些,x 和 telegram 都是正版的,里面的聊天记录应该是不知道的
9. 是否大部分人最后都在医院里面?

所有人最后的归宿都一样!无疾而终是福报!生老病死自然规律。

10. iOS 18.3、丝滑又回来了:

基本能做到一天一充

11. 一加 ace5 能不能刷氢 OS?

RT,coloros15 自带的东西太多了。。。。喜欢类原生,能不能氢 OS ?酷安没找到教程,有没有推荐的教程什么的?

12. 家庭宽带测速正常,但是就是很慢,微信发不出去,朋友圈缩略图加载不出来

如题,请问怎么办?

13. bybit 卡无需 LV2
快冲啊
注册账号没要求什么地区都可以,申请 bybit 卡的时候选择澳大利亚,无需地址秒审批通过
有护照的可以注册两个账户,问过 bybit 客服了他们系统设计的就支持双开,可以申请两张欧元一张美元一张
14. LG Ultrafine 4k 出现图像残留

差不多 4 年前苹果官网买了 2 台 LG Ultrafine 4k ,今天回来打开用了一段时间发现其中一块有图像残留,有点震惊,之前一直以为 oled 屏才会烧屏。网上查了资料了解到 ips 也会有类似问题,但是是可逆的,静置一会儿会恢复。实际试了下确实会慢慢恢复。推测是房间太冷了,我开空调后冷热反应把显示器整出问题了。

感觉出现这种问题已经说明这显示器快坏了吧。我对它还是很满意的,之前还想着用个十年没问题呢,现在这样让我哪里去找 24 寸 4k 还带 macOS 适配的显示器。

现在关了有问题这台,用另一块显示器在 v 站写帖子。停下来想了想,感叹这年过的,真多灾多难。

15. 发现 NAT 这东西挺好用啊

发现 NAT 这东西挺好用啊,做一层 nat ,不做端口映射,后面的服务器基本不用担心来自公网的爆破了。

16. 大家都用哪个键唤醒系统?

以前都是按几次空格键,没有问题。最近换到 mini ,发现屏幕点亮有点慢,点亮后密码框里已经输入几个字符了。

尝试改用其他键,但习惯一时半会改不过来。大家都是用什么键唤醒?

17. v2ex 发帖隐私性问题

咋们这地方发帖后无法删帖。 有些职场的问题,想来吐槽/咨询意见的,一说太细感觉很有可能就被定位了...这点怎么破。 但是又真切想得到大家的意见

18. 对于依赖注入的思考-二

之前写了 对于依赖注入的思考 一文,得到了许多网友的指点,发现自己的理解存在很大的偏差。

经过一段时间的学习,我发现我要解决的问题和依赖注入这个名词的关系不大,这块要解决的问题其实更像是 Algebraic Effects(代数效应),和依赖注入相同的地方在于,它们都是为了解决编程工程化上的一些难题(我简单的理解为在不修改旧代码的情况下可以替换其中的函数实现)

对于依赖注入的思考-代码示例

function baseFn_A(){}
function baseFn_B(){}
function higherFn_B(){
	baseFn_A()
	//other baseFn ...
}

function higherFn_C(){
	higherFn_B()
	//other baseFn / higherFn ...
}
// 这中间还可能有更多层次的这样的套娃

// 上面存在一个依赖链路 higherFn_C>higherFn_B>baseFn_A
// 如果我要实现一个新的函数 higherFn_C2 ,它和 higherFn_C 唯一的区别就是调用的是 baseFn_B 而非 baseFn_A
// 我认为依赖注入就是为了更方便的创建 higherFn_C2 而不需要改动特别多的代码

其实在 2021 年我就触碰过这个问题(js 一个函数执行的时候如何判断自己是否处于另一个的调用栈中?,这个提问现在看来显然是一个 XY problem

下面是我刚刚得到的一些灵感,记录在手机记事本中:

上下文传递方法使用一个同名变量 ctx,起始于一个全局变量 ctx 然后从这个全局变量派生出来一棵树,每个模块乃至于函数都会有自己的 ctx(从上级 ctx 派生),许多需要的方法都是要从这个上下文中来获取。

这个是实现一个类似代数效应以及依赖注入的方法,也等价于实现了一个可以操作的闭包环境,可以像在编码时替换一个闭包变量的实际指向一样容易的在运行时替换。最终就是为了部分的解决表达式问题(Expression Problem

需要解决的问题

在不修改旧代码的情况下修改他的逻辑

寻找解决方案

最显而易见的:参数传递

只要在编写旧代码的时候将需要被替换的函数作为参数就行了:

function baseFn_A(op){
    return op();
}

function higherFn_B(op){
    baseFn_A(op);
}

通过传递一个函数,就可以在不修改 higherFn_B 函数代码的前提下(不修改旧代码)来改变旧代码的逻辑了。这也是最简单的依赖倒置的实现。但它有一个重大的问题,那就是在很多层嵌套以及我需要传递很多参数的情况下,代码会非常的繁琐。

function baseFn_A(op,op2,op3,op4....){
	return [op(),op2(),op3(),op4()....()]
}
function higherFn_B(op,op2,op3,op4....){
	baseFn_A(op,op2,op3,op4....)
}

如果可以做到 baseFn_A 声明需要哪些参数,但中间的传递层可以选择覆盖其中的一些配置,也可以选择不用传递的话就好了,伪代码如下:

function baseFn_A(){
    const {op, op2, op3, op4} = requireFn();
    return [op(), op2(), op3(), op4()];
}

function higherFn_B(){
    // 覆盖 higherFn_C 传递的 op ,但不影响 op2, op3, op4...
    setRequireFn({op: () => {}})
    baseFn_A();
}

function higherFn_C(){
    setRequireFn({op, op2, op3, op4});
    higherFn_B();
}

CLS 来帮忙

CLS ( Continuation Local Storage ) 是一种在程序执行过程中,用于存储和传递跨异步操作的上下文数据的机制。在异步编程中,尤其是在像 Node.js 这样的环境中,跨越多个异步操作传递数据变得尤为复杂。CLS 允许你在不同的函数和异步任务中共享一些全局的上下文信息,而无需显式地将它们作为参数传递。CLS 的核心思想是:通过将数据与当前的执行上下文关联,确保在程序的控制流跨越异步边界时,这些数据能够随着控制流一起“传递”,而不需要通过显式的函数调用来传递。

在 Node.js 中,AsyncLocalStorage 提供了一个实现 CLS 的工具,允许在异步操作的生命周期内存储和访问上下文数据。

安装了 Node 的可以尝试运行以下代码:


const { AsyncLocalStorage } = require('async_hooks');
const asyncLocalStorage = new AsyncLocalStorage();

function setRequireFn(data) {
  const store = asyncLocalStorage.getStore() || {};
  asyncLocalStorage.enterWith({...store, ...data});
}

function requireFn() {
  return asyncLocalStorage.getStore() || {};
}

// -----------------------
function baseFn_A() {
  const { op, op2, op3, op4 } = requireFn();
  return [op(), op2(), op3(), op4()];
}

function higherFn_B() {
  setRequireFn({ op: () => 'New Op logic' });
  return baseFn_A();
}

function higherFn_C() {
  setRequireFn({
    op: () => 'op result',
    op2: () => 'op2 result',
    op3: () => 'op3 result',
    op4: () => 'op4 result'
  });
  return higherFn_B();
}

console.log(higherFn_C());  // 输出:['op result', 'op2 result', 'op3 result', 'op4 result']

看上去十分的美好了,但是... 我之所以喜欢 JS 就是因为代码可以运行在浏览器和 Node.js ,上面的代码只能支持 Node.js 但浏览器中是没有 async_hooks 模块的,[JavaScript 异步上下文提案讨论] 这个提案似乎还遥遥无期。

妥协的办法:传递上下文变量

这个算是 "最显而易见的:参数传递" 办法的一种变种: 这里理论上还可以通过利用 react 所实现的代数效应来实现不传递 ctx 参数(在 vue 中就是利用 inject )

function createContext() {
  return {
    op: () => 'default op logic',
    op2: () => 'default op2 logic',
    op3: () => 'default op3 logic',
    op4: () => 'default op4 logic',
  };
}

function baseFn_A(ctx) {
  const { op, op2, op3, op4 } = ctx;  // 从传入的上下文中获取操作
  return [op(), op2(), op3(), op4()];
}

// 高阶函数 B ,修改上下文并传递给 baseFn_A
function higherFn_B(ctx) {
  const newCtx = { ...ctx, op: () => 'New Op logic' };  // 创建新上下文
  return baseFn_A(newCtx);  // 将新的上下文传递给 baseFn_A
}

// 高阶函数 C ,设置完整的上下文数据并传递给 higherFn_B
function higherFn_C(ctx) {
  const newCtx = {
    ...ctx,
    op: () => 'op result',
    op2: () => 'op2 result',
    op3: () => 'op3 result',
    op4: () => 'op4 result'
  };
  return higherFn_B(newCtx);  // 将新的上下文传递给 higherFn_B
}

const initialCtx = createContext();  // 创建初始上下文
console.log(higherFn_C(initialCtx));  // 输出:[ 'New Op logic', 'op2 result', 'op3 result', 'op4 result' ]