日期: 2021 年 8 月 26 日

苹果新算法已混进 iOS 14.3!CSAM 检测技术再遭网友争议

苹果宣布即将推出 CSAM 检测系统时,遭到了 4000 多个组织及个人的公开反对,他们质疑苹果会破坏用户隐私和端到端加密机制。一位 Reddit 用户发现 CSAM 算法竟已被悄悄地隐藏在 iOS 14.3 里。算法公开几小时后,一位英特尔实验室的研究员就发现了其存在的缺陷:哈希冲突。

 

苹果宣布计划推出 CSAM 检测技术,该功能本该在今年 9-10 月份上线,将利用一种名为 NeuralHash 的加密算法,不会直接查看用户相册。

本以为这个神秘的 NeuralHash 会在苹果力排众议真正推出 CSAM 检测系统时才能感受到,不曾想却被 Reddit 网友发现 CSAM 检测技术的算法 NeuralHash 已经混进了现在的系统里。这位网友并在 GitHub 上分享了他用 Python 重建的整个 NeuralHash 算法,甚至在 macOS 和 Linux 上都可以尝试体验。

%title插图%num

这还没完,在  NeuralHash 算法被公开的几个小时后,一件令苹果更为头疼的事发生了:一位英特尔实验室的研究人员 Cory Cornelius 发现 NeuralHash 存在“哈希冲突”的问题。

%title插图%num

网友发现隐藏在 iOS 14.3 的秘密

8月18日,据 Asuhariet Ygvar 在 Reddit 上的说法,NeuralHash 算法早就存在于 iOS 14.3,只不过藏在了模糊的类名之下因此难以发现。

在对隐藏的 API 进行挖掘时,Asuhariet Ygvar 发现了 NeuralHash,随后通过逆向工程将其模型(在 iOS 14.3 中名为 MobileNetV3)导出到 ONNX,并用 Python 进行重新构建,甚至可以在Linux上测试NeuralHash。(注:ONNX 是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。)

经 Asuhariet Ygvar 研究,总体来说 NeuralHash 就是一种基于神经网络的图像感知哈希,具体步骤如下:

%title插图%num

代码:https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX。

AsuharietYgvar则列举了这就是苹果所采用的算法的证据。

  • 首先,模型文件的前缀“NeuralHashv3b-”与苹果文档中所提到的术语相同。
  • 其次,苹果文档中 Technology Overview -> NeuralHash 章节所描述的算法细节与 Asuhariet Ygvar 提取的模型完全一致。

例如,文档中提到:“其次,描述符通过哈希方案将 N 个浮点数转换为 M 位。这里,M 比表示 N 个浮点数所需的位数要小得多。”

这点可从以下 Asuhariet Ygvar 在 GitHub 上分享的代码得出:N=128,M=96。

%title插图%num

此外,Asuhariet Ygvar 在 iOS 14.3 中发现的 NeuralHash 也能完美实现苹果文档中所描述的“无论调整图像大小或压缩图像,哈希值几乎不会改变”。

虽然不同设备生成的哈希值会有几位的差异,是由于神经网络基于浮点计算,精度在很大程度上取决于硬件。对于NeuralHash这种有200多层的网络来说,会导致大量的累积误差。

%title插图%num

哈希算法存在 Bug

公开代码后的短短几小时内,英特尔实验室的研究人员Cory Cornelius就发现了两张毫无关联的照片竟然有一样的哈希值!

Cory Cornelius 在 Asuhariet Ygvar 的 GitHub 下评论:你能验证下面这两张图存在哈希冲突吗?

%title插图%num

%title插图%num

Cory Cornelius 补充道,他根据  Asuhariet Ygvar 给出的 NeuralHash 用法进行操作,结果发现这两张迥然不同的图像的哈希值居然一模一样!

  1. $ python3 nnhash.py NeuralHash / model.onnx neuralhash_128x96_seed1.dat beagle360.png
  2. 59a34eabe31910abfb06f308
  3. $ python3 nnhash.py NeuralHash / model.onnx neuralhash_128x96_seed1.dat collision.png
  4. 59a34eabe31910abfb06f308

Asuhariet Ygvar 随后也证实了这个问题:“是的!我可以确认这两个图像在我的 iPhone 上生成了完全相同的哈希值,与你生成的一样。”

这种情况的出现,显然推翻了苹果在介绍 CSAM 检测系统文件所提到的描述“名为 NeuralHash 的哈希技术会分析图像并将其转换为特定于该图像的唯一编号”。有开发者向 Cory Cornelius 提问能否因此制造哈希冲突,Cory Cornelius 给予了肯定回答:“我相信可以根据一些所需的哈希值,生成对应的灰度图像。”

通常来说,哈希算法具有以下特点

相同的输入一定得到相同的输出;

不同的输入大概率得到不同的输出。

但是由于通过哈希函数产生的哈希值是有限的,当输入数据量达到一定的程度时,就会导致不同的数据在经过哈希函数处理之后产生相同的值。

这也就产生了哈希冲突。

如果有人利用被 NCMEC 标注的图片的哈希值改变其他图片,那么任何存储这些图片的人都将拥有这些图片。

%title插图%num

苹果:这只是一个早期版本罢了

有媒体向苹果询问了这个问题,苹果的回应却是:“用户在 GitHub 上分析的那个版本只是一个早期通用版本,并非是用于对 iCloud 照片进行 CSAM 检测的*终版本。”

此外,苹果还解释称,他们不仅依靠 CSAM 检测系统,还有“人工审查”这个「双保险」。

当用户上传 iCloud 照片时,苹果系统会进行扫描确定是否有与CSAM 照片匹配的哈希值,如果匹配的次数超过 30,系统将其进行标记,并交由苹果团队人工审核

但苹果始终没有正面回应 NeuralHash 算法可制造“哈希冲突”的疑问。

有什么“有道云笔记”的替代品?

有道的问题: 1,搜索功能太烂,只能定位到笔记,不能定位到行,还得自己 ctrl-F 在页内搜索 2,隔三差五的莫名其妙的“网络错误”

第 1 条附言 · 1 天前
有道的搜索:

只能搜word开头,搜中间不行,例如文档中有16384,搜“16384”可以,搜“384”搜不到
稍微大点的文档跳转不到搜到的行,乱跳
笔记 替代品 道云 ctrl-f111 条回复 • 2021-08-26 13:54:57 +08:00
1 2
2
❮ ❯
nicebird 101
nicebird 8 小时 8 分钟前
@yveJohn 基本一样,我的是 onedriver 。书写体验很好,但是不满足楼主的需求,他要搜索。因为是 markdown,纯文本内容,可以用外置的搜索解决。
AKAMichael 102
AKAMichael 8 小时 6 分钟前
onenote
crazjieb 103
crazjieb 7 小时 59 分钟前
语雀
yveJohn 104
yveJohn 7 小时 56 分钟前
@nicebird #101 typora 自带全文搜索的
huangmingyou 105
huangmingyou 7 小时 44 分钟前
https://www.ruanyifeng.com/blog/2021/08/best-note-taking-software-for-programmers.html

github.dev/youname/yourepo
网页版的 vs code 直接编辑。
WUWENZE 106
WUWENZE 6 小时 2 分钟前
@huangmingyou 怎么一直是 Setting up your web editor,卡住进不去
huangmingyou 107
huangmingyou 4 小时 12 分钟前
@WUWENZE 难道是要*才行?或者换浏览器试试。
nbstoner 108
nbstoner 4 小时 7 分钟前
onenote.
polestarx 109
polestarx 4 小时 1 分钟前
Typora + Github
young1lin 110
young1lin 3 小时 59 分钟前 via Android
Github/iCloud + Obsidian

wvitas 111
wvitas 3 小时 33 分钟前
Google Keep

nicebird 101
nicebird 8 小时 10 分钟前
@yveJohn 基本一样,我的是 onedriver 。书写体验很好,但是不满足楼主的需求,他要搜索。因为是 markdown,纯文本内容,可以用外置的搜索解决。
AKAMichael 102
AKAMichael 8 小时 7 分钟前
onenote
crazjieb 103
crazjieb 8 小时 1 分钟前
语雀
yveJohn 104
yveJohn 7 小时 58 分钟前
@nicebird #101 typora 自带全文搜索的
huangmingyou 105
huangmingyou 7 小时 46 分钟前
https://www.ruanyifeng.com/blog/2021/08/best-note-taking-software-for-programmers.html

github.dev/youname/yourepo
网页版的 vs code 直接编辑。
WUWENZE 106
WUWENZE 6 小时 4 分钟前
@huangmingyou 怎么一直是 Setting up your web editor,卡住进不去
huangmingyou 107
huangmingyou 4 小时 14 分钟前
@WUWENZE 难道是要*才行?或者换浏览器试试。
nbstoner 108
nbstoner 4 小时 8 分钟前
onenote.
polestarx 109
polestarx 4 小时 3 分钟前
Typora + Github
young1lin 110
young1lin 4 小时 0 分钟前 via Android
Github/iCloud + Obsidian

wvitas 111
wvitas 3 小时 35 分钟前
Google Keep

Vue 所有请求都应该放在 Vuex 里面吗?

*近在定一些代码开发规范,有一个前端同学坚持要把所有请求按模块都放到 Vuex 里面?请问合理吗?
vuex 请求 vue 请问88 条回复 • 2021-08-26 16:36:25 +08:00
duan602728596 1
duan602728596 1 天前
不合理
murmur 2
murmur 1 天前
放哪里都一样,只要维护方便就行
musi 3
musi 1 天前 ❤️ 2
vuex 不是用来管理状态的么,难不成你们所有的请求都是状态?
请求分模块能理解,全放到 vuex 里就不能理解了
Twinkle 4
Twinkle 1 天前 ❤️ 1
大部分放 vuex 里面感觉没啥问题,还要看你们的页面数据是不是都从 vuex 里拿。单独提出一个 service 或者 api 的文件夹放下面也可以,都是便于维护的方式。
qwe520liao 5
qwe520liao 1 天前
就是把数据源进行封装,有一定的好处,方便测试,就看这样做值还是不值,如果变化非常频繁就比较费事。
SxqSachin 6
SxqSachin 1 天前
我们公司是把所有接口放到 api 文件夹中,再按不同功能模块继续细分文件夹。把所有请求放到 vuex 里是头一回听说
murmur 7
murmur 1 天前
@musi vuex 两层封装简单理解点就是一层修改 state,一层可以是异步操作,修改一堆 state,当然也可以无聊封装直接调 commit
从这个角度来看,远程请求是 promise,会修改一些 state,这个封装是没问题的
iikebug 8
iikebug 1 天前
头一回听说还能这么用的
ccyu220 9
ccyu220 1 天前
我个人认为只有涉及到基础信息或者全局公共的请求才放到 vuex 里面。

比如:session 、login 、logout 以及页面上报、记录信息等。

适时而定,一条路走死那叫*端。
murmur 10
murmur 1 天前
@SxqSachin 这当然可以,但是换个角度想,你 api 里就写一个 axios({url: xxxx, params: xxxx}),和把这玩意直接塞 action 里,差别不大,为了三五行代码封装一个函数,说多余也多余

Vegetable 11
Vegetable 1 天前
统一管理是对的,但是 vuex 显然不是*好的选择。
keepeye 12
keepeye 1 天前 ❤️ 3
vuex 是管理全局状态的,反对将所有状态一股脑塞进去,更不用说将所有接口都塞进去了
learnshare 13
learnshare 1 天前
见过这么做的,能运行
但完全不可以,*对不可以

状态管理是用来存储、修改、共享和分发数据的,不应该包含任何副作用、异步过程和其他多余操作

目前见过的一些状态管理使用状况,基本都是乱用,什么都放到状态管理中
实际上应该谨慎使用状态管理,尽量少用或不用,真需要状态管理的数据和场景并不多
qiaobeier 14
qiaobeier 1 天前
小项目随意,稍大点项目不推荐。
Shook 15
Shook 1 天前
不应该。而且我本身比较讨厌 Vuex,所以 Vue3 以后,我认为 Vuex 都可以不用了。
murmur 16
murmur 1 天前
@learnshare “不应该包含任何副作用、异步过程和其他多余操作”

action 本身就可以返回异步,为啥不能包含异步过程

我举个例子,https://github.com/PanJiaChen/vue-element-admin/blob/master/src/store/modules/user.js

action 里的 login,login({ username: username.trim(), password: password }),把这行直接改成
axios({url: “login.xxx”, params:{xxxx}})没任何问题,一个函数多了 3 行而已,考虑到拆分后 module 也不大,不会对代码整洁度和管理造成多少影响
Kusoku 17
Kusoku 1 天前
请求数据不是跟状态强关联的,放在 vuex 里属实有点欠妥,两个各自独立的东西只是在部分场景有耦合,强行放在一起有什么收益呢?如果涉及到状态管理方案的改造变更或者压根就不需要状态管理呢?
sxox 18
sxox 1 天前
@Kusoku 美其名曰是为了 api 的复用,我实在是理解不了
sxox 19
sxox 1 天前
@duan602728596
@murmur

你们是怎么做的
murmur 20
murmur 1 天前
@sxox 我们的项目小,api 这层封装都没有,action 也不用,就只用 state 和 commit
yamedie 21
yamedie 1 天前
我现在就是这样用的, actions 里面基本全是各种 api 调用, 有些回参需要缓存的, 在 action 里调用 commit 把字典接口的回参缓存到 state, 下次调 action 时发现 getters 里有这个字典的缓存, 就直接将它 return 出来, 很顺滑而且自然. (当然如果是列表之类一次性的请求, 直接将 promise 返出去就可以了
KouShuiYu 22
KouShuiYu 1 天前
一直放到 api 文件夹里面
https://github.com/chenkai0520/vite-template/tree/main/src/api
learnshare 23
learnshare 1 天前
@murmur 并不是能做,我们就要做。

项目简单的话,放一起不觉得乱。
但项目规模大,合作人员多的话,还是要追求模块分层清晰,代码逻辑简单。

我前边说 vue-element-admin:
>类似的项目通常缺乏*佳实践,配套工具和代码风格不太好,导致项目质量不高。
还被骂乱配、乱踩来着,神都吹上了
darknoll 24
darknoll 1 天前
你是不是看了 vue-element-admin, 他放归他放,你自己随便
learnshare 25
learnshare 1 天前
@learnshare 乱配 -> 乱喷
murmur 26
murmur 1 天前
@learnshare 你觉得为了所谓的清晰把 2 行代码封装成 1 个函数属于*佳实践么

现在基本上都是拦截器统一处理异常,也就是说 api 封装是没有 catch 部分的

那这个 2 变 1 的封装有何意义
yamedie 27
yamedie 1 天前
@murmur 我完全同意#16 楼的观点, 这样做能减少各种弯弯绕(比如甚至单独定义一个 MutationTypes.js)带来的心智负担. 肯定有人会说大型项目不能这么做, 我还真没有经手过什么大型项目… Vuex 按模块拆分并开启命名空间, 每个模块负责一个”实体”(例如订单 /联系人 /对话 /合同都是实体), 每个 action 对应一个后端接口, 每个 action 是名字尽量语义化 /自注释, vue 组件里用 mapActions 引入… 至少给我带来的开发体验是很不错的
cs419 28
cs419 1 天前
工业化讲究: 够用就好
结合实际情况再加两条: 领导要求的 避免负面作用

够用: 即保障基本需求
领导要求: 领导觉着加了某个东西风水好,虽然可能没啥用,但领导不高兴肯定影响工作
负面: 某个东西不能提供生产 反而导致老出问题 肯定也不行
sjzjams 29
sjzjams 1 天前
那你所有的状态管理后面需要维护的就很多
learnshare 30
learnshare 1 天前
@murmur 不是几行代码的问题,是为了保证模块专注在一件事上

项目越复杂,参与人员越多,就更需要
>模块分层清晰,代码逻辑简单。
xu2060 31
xu2060 1 天前
我们这就是这样做的把所有的请求都放在 vuex actions 里面 然后数据都存在 state 里面,虽然整齐,但是这么用肯定不对
PerFectTime 32
PerFectTime 1 天前
element-admin 似乎就是把 api 放在状态里面的
thtznet 33
thtznet 1 天前
所以,讨论到*后发现都是设计模式问题,那么干嘛用 VUE ? NG 就很香了对么?
violetlai 34
violetlai 1 天前
感觉不太合适吧 毕竟 vuex 就不是处理请求的东西 偶尔需要用共享数据才用它 请求还是同一拦截处理比较好

其次 vuex 是用的真的很难受
wht0522 35
wht0522 1 天前 via Android
*次见到这种方式属实惊呆了 所有接口都放到 vuex 很不方便 element-admin 只是退出 登录 获取用户信息 这几个接口放在这里边
SSSensational 36
SSSensational 1 天前
为什么不试试 swrv,以及 vue 下的 umi-hooks/useRequset 。这些只是取数的场景不需要用 store 的。
SZP1206 37
SZP1206 1 天前 via Android
不合理
Geo200 38
Geo200 1 天前
这明显是把 MVVM 当 MVC 来用了
Lemeng 39
Lemeng 1 天前
一般都有规范要求,不然怎么方便怎么来呗
cansiny0320 40
cansiny0320 1 天前
我觉得可以,全放在 action 里
liyg04120414 41
liyg04120414 1 天前
不需要维护状态的请求没必要放到 vuex 里
3wdddd 42
3wdddd 1 天前
副作用太大,不太好
gloye 43
gloye 1 天前
我看过一个国外的示例项目倒是这么做的,意思同一个业务模块可以对接多个业务来源,例如同一页面需要 A 部门接口,B 部门接口,那么可以放到一个 module 里统一管理。
voidWhyy 44
voidWhyy 1 天前
我认为只有 login 和 logout 相关的才需要放到 vuex 里
strangeFish 45
strangeFish 1 天前
完全不推荐,api 应该统一管理是对的。
如果你们后端使用 swagger,而且项目是不在意体积的,推荐使用 https://github.com/alibaba/pont,全自动生成请求和类型提示。
另外 vuex 非常不推荐使用。
fox2081 46
fox2081 1 天前
既然要定规范一定不是小项目了,建议请求实例、文档等相关内容放在一个 npm 私有仓库,用脚本实现后端触发自动构建更新版本,api 自动封装,其他项目直接 npm 安装使用,省去人工修改的烦恼。
和 vuex 混在一起这种方法我也见过,但是实在想不出来这样做图啥,vuex 是为了存储一个全局状态,一般也就存储个项目配置和用户相关。
项目随着时间推移,复杂度会逐渐上升,*好在一开始就降低耦合和依赖,尽量模块化,要不然早期一些糟糕的设计逐渐就变成了屎山,后面再想着维护的成本就是指数级别的。
gzf6 47
gzf6 1 天前 via Android
我接手过一个就是全放在里面的,改得想死,直接重构了一个
ChefIsAwesome 48
ChefIsAwesome 1 天前
我见过一堆人就拿这玩意当全局变量使。一个文件成百上千行。就这还觉得自己模块清晰。
anguiao 49
anguiao 1 天前
闻所未闻
toesbieya 50
toesbieya 1 天前
有一说一,我觉得 vuex 除了能配合 vue devtool 以外,真的垃圾,完全没有语法提示,不如自己用 Vue.observable 写
murmur 51
murmur 1 天前 ❤️ 1
@toesbieya 来了来了,拉不出屎赖框架,以前 jquery 年代都做大项目,现在换 vue 做不了了,是框架垃圾还是人太水
chouchoui 52
chouchoui 1 天前
@toesbieya 换 pinia 吧,解决一切烦恼
murmur 53
murmur 1 天前
自由和规矩只能选一个,自己场景搞不清楚赖框架垃圾是什么臭毛病

你这种自己封一个 dispatch(ACTION.SOME_ACTION, ACTION.SOME_ACTION_ARGS(arg1, arg2))…

能不能提示?
yor1g 54
yor1g 1 天前
涉及状态共享的变化放进去也没毛病 既然都上了 vuex 统一放进去也是应该吧
zhangjiancheng 55
zhangjiancheng 23 小时 34 分钟前
vuex 的语法提示不算差了 mapXXX 之类的都带好了 完全没语法提示简直是扯
TomatoYuyuko 56
TomatoYuyuko 23 小时 29 分钟前
放 vuex 既不合理又不方便,我 vue 项目加了 ts,axios 做一层总的过滤器,然后根据业务分别把 api 放到对应的 ts 文件里,需要调接口的时候直接 await api(params),还有参数提示,这不简单多了?
Melting 57
Melting 23 小时 26 分钟前
这样搞耦合性太大了,放在 api 文件夹下也很方便,而且项目切换前端语言的时候,api 下的文件可以直接用。vuex 可以适量的用,全部放进去我觉得没必要
varzy 58
varzy 23 小时 2 分钟前 via iPhone
反对。个人认为 vuex 里面的东西应该越少越好。
suzic 59
suzic 21 小时 45 分钟前 via Android
不合理,应该只放会频繁使用的请求,比如
zhwithsweet 60
zhwithsweet 21 小时 17 分钟前
vuex 替代产品 https://pinia.esm.dev/ 试试这个?
不是所有的请求都放 vuex,无状态的请求,直接写到组件逻辑即可。
zesenwu 61
zesenwu 18 小时 58 分钟前
不合理,vuex 本身就是用来存放全局状态的,应该少用,甚至不用
很多框架的东西,如果原项目已经可以满足,那就不要引入太多其他东西
不要为了用而用
Rocketer 62
Rocketer 17 小时 54 分钟前 via iPhone
@thtznet #33 就我见过的前端口水战而言,归根结底都是见的太少,又懒得学新,每个人都抱着自己会的那点东西拼命说它好。

包括那些所谓的主管。

由于历史包袱以及公司合并等原因,我三大 spa 框架都在用,所以我算是真正体会过三者的区别的。凭心而言,ng 是*优雅的,其 service 的概念*对碾压 redux 和 vuex,以至于我都想试试在 react 和 vue 项目里引入这个概念。只可惜我也懒,懒得修改屎山,所以迄今为止也就是想想。
jinwyp 63
jinwyp 15 小时 13 分钟前
95%的项目,都不需要用到 vuex, 除非你要做个在线 excel word 这种。 看了上面的回帖,vue2 还是很多问题,到现在也没有*佳实践。

我觉得不用 vuex 就是*佳实践。用了以后,根本无法区分哪些数据放到 vuex 里面, 哪些不放,*后就是乱成一锅粥
sjhhjx0122 64
sjhhjx0122 8 小时 54 分钟前
上 ts 就不用 vuex,上了 ts,直接用 ref 自己实现一个简易的 vuex,vuex 这个东西真的好维护嘛,…map 这种一点提示都没有,分了子模块也恶心
TimPeake 65
TimPeake 8 小时 25 分钟前
说实话 我现在*力推荐三大框架的作者去掉状态管理的相关功能, 为啥 ?状态管理已经被滥用到了恶心的地步….接收那种项目心里很排斥
TimPeake 66
TimPeake 8 小时 24 分钟前
天天还有一大帮人在问状态管理器的状态为啥刷新没了这种问题
daguaochengtang 67
daguaochengtang 8 小时 22 分钟前
阿这。。。
asiasky 68
asiasky 7 小时 51 分钟前
不建议这样 vuex 是状态管理 我猜你想放进去只是想可以直接调用 不用反复写或者引用了 但是其实这个用 require.context 去读文件实现
IanHo 69
IanHo 7 小时 50 分钟前
*对不能接受
ColdBird 70
ColdBird 7 小时 42 分钟前
接口层放在 api 文件,数据层根据是否需要共享决定放在 vue 文件里还是 vuex 里,大部分都在 vue,少部分共享数据放 vuex
yamedie 71
yamedie 7 小时 6 分钟前
@TimPeake #66 vuex 有 persistedState 这种持久化插件, 页面刷新了该保留的 state 都还在, 不想保留的键值也可以自己写 reducer 让它不持久化, 我用着挺开心的, 就想问你们这些*力推崇 ref 代替 vuex 的人是怎么解决”刷新页面状态丢失”这个问题的?
strangeFish 72
strangeFish 6 小时 33 分钟前
@yamedie 本质是把状态存在 sessionStorage 或者 localStorage,自己写对应逻辑不难。。。

“`ts
function usePersistState(key: string, initValue = {}) {
const str = localStorage.getItem(key)

const oldState = str && JSON.parse(str)
const someState = ref(oldState || initValue)

watch(() => someState.value, val => {
localStorage.setItem(key, JSON.stringify(val))
}, {
deep: true
})
return someState
}
“`
yamedie 73
yamedie 6 小时 7 分钟前
@strangeFish 这段代码能让散落在各处的 useFunction.js 都实现状态持久化吗?
TimPeake 74
TimPeake 6 小时 3 分钟前
@yamedie “”如何解决刷新页面状态丢失“” 就不应该有这种问题。我知道有持久化插件,但是这种持久化插件显然不够优雅。持久化注定是跟状态管理没一毛钱关系的 ,既然都持久化了 本地存储它不香。如果某个状态需要持久化,只能说明这个状态不适合放在状态里
yamedie 75
yamedie 6 小时 3 分钟前
而且代码里只看到了 watch 到改变->存 localStorage 的过程, “页面刷新后从 storage 中读取并恢复”的伪代码没有看到, 另外怎么复用到所有的 use 里?
yamedie 76
yamedie 5 小时 54 分钟前
@TimPeake 不太明白, 你的意思是往 localstorage 里存几十个键值对更优雅吗? 比如用户所属的部门和组的信息, 是不是一种状态? 我想存在 vuex 中全局共享, 刷新页面也不丢失, 只在希望主动更新时才调接口获取并更新, 否则一律使用缓存中的部门 /组别信息, 这是一种伪需求吗?
TimPeake 77
TimPeake 5 小时 45 分钟前
@yamedie 没记错的话,你说的 persistedState 实现原理也是通过本地存储辅助实现的吧,既然这样,有什么区别呢 ?如果你说 几十个键值对不优雅的话,那只是写法的问题罢了, 封装一些实现或者用 web sql 等也可以啊
yamedie 78
yamedie 5 小时 40 分钟前
@TimPeake 我是在反驳你这句话: “持久化注定是跟状态管理没一毛钱关系的 ,既然都持久化了 本地存储它不香。”
用户姓名 /头像 url/部门名 /组名等等, 这类不常变动的信息是不是属于状态的一种, 你可以选择单独存 localstorage 或者频繁调接口获取, 但好像无力反对别人存 vuex(并持久化)的做法吧, 在我看来 vuex 这个状态机主要就是用来维护这些状态的
TimPeake 79
TimPeake 5 小时 31 分钟前
@yamedie 你是不是忘记了状态管理的诞生初衷是为了解决跨组件数据沟通 你觉得跟“用户姓名 /头像 url/部门名 /组名”这个需求一致吗
yamedie 80
yamedie 5 小时 27 分钟前
@TimPeake 我举例的“用户姓名 /头像 url/部门名 /组名”这类信息本来就是需要跨组件共享的呀
yamedie 81
yamedie 5 小时 19 分钟前
我不知道 @murmur 有没有兴趣驳斥”vuex 状态管理就不应该存在 / 状态管理跟持久化没一毛钱关系 / ref 能完全取代 vuex”这类观点
shakukansp 82
shakukansp 4 小时 23 分钟前
全部存 vuex 里面……是没做过几百个页面每个页面的参数不一样的系统吗
murmur 83
murmur 3 小时 23 分钟前
@yamedie 有,你可以不用啊,vue 本身就是选词填空,你把空填到哪里能完成功能不就行了
SSSensational 84
SSSensational 3 小时 13 分钟前
@yamedie @TimPeake 别吵了。看看 swrv / vue-request
brookepe 85
brookepe 2 小时 56 分钟前
vuex 可能是因为 this 这种用起来方便
qq1340691923 86
qq1340691923 2 小时 45 分钟前
还真是前端娱乐圈
yunye 87
yunye 2 小时 43 分钟前
这也能吵起来吗
xqk111 88
xqk111 51 分钟前
不应该,下一个问题

有公网 IP 的情况下,*好的远程桌面是什么呢

单位电脑只能连单位内网,有台笔记本可以连外网,下行速度不超过 50mbps ;家里有台式机,上行带宽 40mbps,有动态公网 IP 。

*近一直在用 win10 自带的远程桌面,总感觉有点卡卡的,码字、切网页、浏览明显不如原生桌面流畅。

想请问下还有什么更好性能的,能跑满带宽的,公网直连的远程桌面推荐?

感谢各位!

公网 桌面 远程 Mbps81 条回复 • 2021-08-26 16:42:17 +08:00
xiaodongus 1
xiaodongus 1 天前 ❤️ 1
teamviewer
sparanoid 2
sparanoid V2EX Moderator 1 天前
可以试试 RDP + Remotix 客户端

https://remotix.com/
ch2 3
ch2 1 天前
自带的还算好的了
xuxuxu123 4
xuxuxu123 1 天前
自带的还卡卡的,估计是你公司网络问题吧;
可以考虑在其他网络环境好的情况测试一下自带远程桌面;
Cambra1n 5
Cambra1n 1 天前
@xuxuxu123 公司的网速确实不怎么样,但稳定性还行,远程桌面的设置已经拉到*低了,除了字体合成都关了。在家里 192 局域网连接,也明显能感到延迟,并且上下行*大也就 50mbps 左右。
zhangsanfeng2012 6
zhangsanfeng2012 1 天前
远程桌面 5Mbps 带宽就够用了,可能你的网络延迟比较大
https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/network-guidance
liaowm5 7
liaowm5 1 天前
anydesk 挺好用
leeyuzhe 8
leeyuzhe 1 天前
nomachine,另外自带的是真的好用,要不你排查下延迟问题,有个 10m 带宽就足够用了
ch2 9
ch2 1 天前
@Cambra1n #5 一点延迟都没有是不可能的,毕竟是走网络的协议,天生比 gpu 直出差很多。rdp 牛逼在下限很高,即使带宽只有几 M 也能用,但是带宽高了流畅度也提升不大
BiteDXH 10
BiteDXH 1 天前
省流+一般操作用 RDP 流畅+需要调用显卡的用 Moonlight

x940727 11
x940727 1 天前
我觉得 RDP *好……尤其是 Windows 连 Windows,大部分快捷键和显示配置都能同步,简直爽。
james2013 12
james2013 1 天前
我使用 RDP 连接国内云服务器,发现和本地使用差不多,体验比较好
xuboying 13
xuboying 1 天前
为啥要在远程桌面上码字?你的客户端弱到打字都不行么?打完另外复制过去。
goodryb 14
goodryb 23 小时 59 分钟前
RDP 一个是延迟,第二个也是看显示画面变化的程度,变化越剧烈对性能和带宽要求就越高, 显示静止画面几乎不耗费流量。
marktask 15
marktask 23 小时 50 分钟前
mstsc
lzk50136 16
lzk50136 23 小时 49 分钟前
微软的 RDP,我在武汉出差,笔记本连手机的中国联通的 4G 网络的热点,通过 frp 连广州公司的台式工作机,延迟很低,不敢说有多流畅,毕竟不是内网,起码能码代码,调试啥的,frp 的服务器是深圳阿里云的。
harde 17
harde 23 小时 45 分钟前
我都是 FRP + RDP,中转服务器才 3MB 带宽,已经觉得很不错了。。。
应该还是你的带宽有问题。
mxT52CRuqR6o5 18
mxT52CRuqR6o5 23 小时 43 分钟前
想要*低延迟可以试试 N 卡+moonlight
newmlp 19
newmlp 23 小时 42 分钟前
Windows 自带的远程桌面,开启 h264 编码,流畅的一批
SZP1206 20
SZP1206 23 小时 41 分钟前 via Android
自带的其实已经很优秀了
dejavuwind 21
dejavuwind 23 小时 39 分钟前
借楼问一下,远程控制 mac 啥软件比较好用的
myd 22
myd 23 小时 35 分钟前
自带的远程桌面,共享剪切板很好用。
darknoll 23
darknoll 23 小时 35 分钟前
借楼问一下,怎么才能让 rdp 共享桌面
kop1989 24
kop1989 23 小时 34 分钟前
RDP 、parsec 的压缩算法相近,都是画面不动的时候流量*低。
代价就是本地局域网情况下性能上限稍差。(保锐度)
尤其 RDP,画面变化幅度大、帧数高时,性能下降明显。

nv Shield (第三方客户端 moonLight )、steam 串流的技术特性取向正好相反,完全是为游戏串流而生。
代价是画面锐度相对差(保帧数),画面静止时流量节省不明显。

如果需要使用媒体串流向的方法实现远程桌面,可以参考我的 Tip 帖: https://www.v2ex.com/t/755819
kop1989 25
kop1989 23 小时 33 分钟前
还有就是 RDP 要考虑 windows 账户层面的一些问题。
stephenyin 26
stephenyin 23 小时 27 分钟前 ❤️ 2
@dejavuwind #21 感觉全世界只有我知道 nomachine: https://www.nomachine.com/
debuggerx 27
debuggerx 23 小时 24 分钟前
@stephenyin nx 确实是我能找到远程连 mac 桌面的效果*好的方案 但是对带宽要求是真的高
pytth 28
pytth 23 小时 16 分钟前
ngrok tcp 3389
opengps 29
opengps 23 小时 9 分钟前
自带的够用,但我更喜欢 mRemoteNG
desdouble 30
desdouble 22 小时 53 分钟前 via Android
安全*,中了病毒就麻烦。续断内网穿透有专项的 RDP 爆破防护。
desdouble 31
desdouble 22 小时 52 分钟前 via Android
另外,即使有公网 ip,如果访问者跨运营商的话,不见得快。反而穿透+mstsc 可能更快。
Felix96 32
Felix96 22 小时 51 分钟前 via iPhone
@dejavuwind Mac 之间用 iMessage 可直接屏幕共享 https://support.apple.com/zh-cn/guide/messages/icht11883/mac
如果无人值守的话可以用 Anydesk 。
Tink 33
Tink 22 小时 40 分钟前 via Android
mstsc
ssdde 34
ssdde 19 小时 35 分钟前
那必须得是 FastLook
iBugOne 35
iBugOne 13 小时 44 分钟前 via Android
RDP 要更好体验一定要开 UDP,纯 TCP 有时候就是感觉会卡一点
fantasylidong 36
fantasylidong 10 小时 54 分钟前 via Android
自带的好用,如果有延迟,那就是连接性问题或者带宽问题,连接性问题可以用商业软件解决‘带宽问题让公司加钱
WangYouGX 37
WangYouGX 8 小时 41 分钟前 via Android
用自带的,改一下端口,又或者用 teamview,但设置仅局域网模式,
cheng6563 38
cheng6563 8 小时 10 分钟前
远程桌面仅自带 RDP 一家,其他的都是远程控制。
自带 RDP 开 60 帧后可以流畅不少。
编辑主机注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations
新建 DWORD(32-bit)值,名为 DWMFRAMEINTERVAL,值为 15 ( 10 进制)
dreamage 39
dreamage 8 小时 1 分钟前
别在公司瞎搞(
tianzi123 40
tianzi123 7 小时 55 分钟前
显卡加速
首先打开远程主机上的组策略( Win+R 打开运行,输入 gpedit.msc )

依次找到计算机配置->管理模板->Windows 组件->远程桌面服务->远程桌面会话主机->远程会话环境

在右边选择将硬件图形适配器应用于所有远程桌面服务会话
raullf 41
raullf 7 小时 48 分钟前 via iPhone
用 web rdp,比如 freerdp 、guac
wysard 42
wysard 7 小时 33 分钟前
RDP 协议历史上出过一些安全问题,*好不要直接暴露在公网上,我比较喜欢套一层 WireGuard,配置很简单。
abcbuzhiming 43
abcbuzhiming 7 小时 32 分钟前
我用了很多远程桌面工具,可以确定在同样的网络条件下,目前没有比 RDP 更优的。其它工具有时候看起来更好,实则是他提供的线路比你自己的网络好。而类似 steam 的串流技术是为游戏准备的,响应速度更好,但是对网络质量要求更高
dejavuwind 44
dejavuwind 6 小时 51 分钟前
@Felix96 多谢回复? 回去试试
bluekz 45
bluekz 6 小时 39 分钟前
@ch2
@newmlp
@SZP1206
@myd
请教一下:自带的远程桌面控制如果没有独立外网 ip 是不是就没办法用了?
opentrade 46
opentrade 6 小时 36 分钟前
综合考虑,的确是没有比 RDP 更优的,虽然 RDP 有各种毛病。
opentrade 47
opentrade 6 小时 35 分钟前
@darknoll RDP 不能共享桌面
opentrade 48
opentrade 6 小时 33 分钟前
@darknoll VNC 才是共享桌面协议
newmlp 49
newmlp 6 小时 32 分钟前 ❤️ 1
@bluekz 可以 frp 转发,或者 *,
Geele 50
Geele 6 小时 30 分钟前
@lzk50136 这一般不都是红线吗。。
thtznet 51
thtznet 6 小时 23 分钟前
@cheng6563 不用 RemoteFX 的话,*高 30FPS 。
sbilly 52
sbilly 6 小时 23 分钟前
这些远程桌面支持用本地输入法在远端输入中文(不依靠复制 /粘贴)?
– 比如:远端 Windows 没有装中文输入法,但可以正常显示
thtznet 53
thtznet 6 小时 21 分钟前
如果不考虑成本的情况下,Citrix 是目前*好的远程解决方案,HDX 协议目前是全球*优。
opentrade 54
opentrade 6 小时 21 分钟前 ❤️ 1
@bluekz 大部分市面上的远控软件都支持端口转发,如果你想在没有外网的情况下使用 RDP,可以借用他们的端口转发功能,把远端的 3389 映射到你本地的某个端口,然后 RDP 本地这个端口就可以了。我的 RustDesk 也支持这个功能,而且 RustDesk 提供 RDP 快捷方式,不需要你去自动设置端口转发。
opentrade 55
opentrade 6 小时 20 分钟前
@thtznet RDP 也是 Citrix 搞得
opentrade 56
opentrade 6 小时 19 分钟前
@thtznet 当年 Citrix 拿到微软的授权,可以直接访问他们的源码,然后搞出 RDP
opentrade 57
opentrade 6 小时 18 分钟前
@sbilly 据我所知,都不可以,手机端除外。
NilChan 58
NilChan 6 小时 17 分钟前
码字可以 vscode + ssh 插件或者直接搭一个 code-server 。
darknoll 59
darknoll 5 小时 56 分钟前
@opentrade xrdp 好像可以共享桌面?
bluekz 60
bluekz 5 小时 38 分钟前
@newmlp #49 这个查到了,感觉就复杂化了,还不如直接用个远程软件,反正低频次使用。

@opentrade #54 “把远端的 3389 映射到你本地的某个端口,然后 RDP 本地这个端口”
不是没有外网,是外网没有独立 ip,我通过公网根本就没办法访问到我的路由网关。这种情况他们能把外网某个端口访问映射到我本地某端口来吗?
opentrade 61
opentrade 5 小时 20 分钟前 via Android
@bluekz 可以的
opentrade 62
opentrade 5 小时 19 分钟前 via Android
@darknoll linux 上的 xrdp 好像是可以
Lemeng 63
Lemeng 5 小时 12 分钟前
没人推荐向日葵吗
vinsony 64
vinsony 5 小时 4 分钟前
@opentrade #54 哪里有这种这种端口转发功能啊?我常用的 TeamViewer 、ToDesk 、向日葵我都没找到这个功能呢
xuboying 65
xuboying 5 小时 3 分钟前
@newmlp #19 RDP 哪里有关于 h264 编码的选项?
abcbuzhiming 66
abcbuzhiming 4 小时 37 分钟前
@newmlp 请问一下,这个 H264 编码的开启是否有什么条件,我开了发觉比不开还要慢
dreamtrail 67
dreamtrail 4 小时 33 分钟前
moonlight, 没有之一
200844333 68
200844333 4 小时 22 分钟前
自带的一点都不卡啊,用了两年了
fox0001 69
fox0001 4 小时 13 分钟前 via Android
@opentrade #62
@darknoll #59
Linux 上,我用 Remmina 。不过没有用过 xrdp
opentrade 70
opentrade 3 小时 56 分钟前 via Android
@vinsony AnyDesk 有,其他我没用过,我的 rustdesk 也有
opentrade 71
opentrade 3 小时 51 分钟前 via Android
@vinsony 这里有端口转发使用说明 https://www.pianshen.com/article/19032079319/
newmlp 72
newmlp 3 小时 34 分钟前
@xuboying 组策略,计算机配置,管理模板,Windows 组件,远程桌面服务,远程桌面会话主机,远程会话环境,为远程桌面连接设置 H264/avc 444 图形模式优的先级(开启配置)
@abcbuzhiming
abcbuzhiming 73
abcbuzhiming 3 小时 20 分钟前
@newmlp 我按照你说的设置了,结果我发现,画质变差了,尤其是颜色的场景非常明显,速度还变慢了。并没有变快,我现在怀疑是不是因为这东西需要什么硬件条件?硬解码是和显卡有关的对吧,我的显卡是 intel 的集显 630,是不是这玩意一定要用独显性能表现才好?
pony2335 74
pony2335 3 小时 20 分钟前
todesk 也不错,可以试试
Outliver0 75
Outliver0 3 小时 17 分钟前
remote desktop manager 这个也挺好用的
newmlp 76
newmlp 3 小时 12 分钟前
@abcbuzhiming 这个就不知道了,H264 编码确实会消耗一些资源,电脑配置低的话会卡,下面还有个开启硬编码的选项,可以降低编码的资源占用,我的电脑配置比较好,没发现什么问题,开启后降低了网络流量
disk 77
disk 3 小时 0 分钟前
@abcbuzhiming 630 有点老,视频串流吃显卡的,一般得独显表现才会好一点。
Zhang0577 78
Zhang0577 1 小时 36 分钟前
mstsc yyds
hydra35 79
hydra35 1 小时 0 分钟前
@cheng6563 实测有用。?
sbilly 80
sbilly 56 分钟前
@xuboying https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.TerminalServer::TS_SERVER_AVC_HW_ENCODE_PREFERRED
lzk50136 81
lzk50136 46 分钟前
@Geele 我这边小公司没限制,我用几年了都没出过事,包括公司的电脑,自己家里的电脑,我都是自定义用户名和二十几位的大小写字母数字标点符号的密码,再加个 IPban,除非 RDP 本身协议有漏洞,不然这个强度的密码怎么爆破。包括我还是小白的时候,不知道公网的危险性,也没出过事,那时候傻,3389 暴露到公网密码是 123456,居然没出事,后来想想,应该是爬虫猜不出我的自定义的 6 个字母的账号,不开 Administrator 和 Guest,要爬虫机器猜中 6 个字母的账号本身就不是容易的事,所以那时候 123456 的密码也没出事,更何况是现在的高强度密码了。

求助[vim]:有什么快捷键可以自动的在句尾添加分号;

A;ESC还是不太方便, google 了,但是由于是刚学 vim,还不太懂,就来这里向老哥先讨个答案,回头再慢慢了解

vim 句尾 esc 分号9 条回复 • 2021-08-26 17:17:35 +08:00
byzf 1
byzf 2 小时 57 分钟前
句号
korokke 2
korokke 2 小时 56 分钟前 ❤️ 1
加到.vimrc 里面,可以在句尾添加分号同时光标位置不变。再怎么样也要两个键,只用一个键的话没啥好办法,分号本身有自己的作用。
nnoremap <Leader>; m’A;<ESC>`’
Goooogle 3
Goooogle 2 小时 18 分钟前 ❤️ 1
#2 2 楼给是的正确的姿势,我稍微解释一下吧
这一行是在 normal mode 下,将 “<leader>;” 也就是 “,;” 映射成为 后面那堆按键。
其中 “m'” 和 “`'”分别是将当前位置标记为 “‘”,然后在执行完对应的操作后返回该位置。

上面提到的所有信息都可以在<<Learn Vimscript the Hard Way>>中找到,可以作为进阶资料
andy2415 4
andy2415 2 小时 15 分钟前
只有一次这种操作: A;ESC
重复几次: .
重复很多次: 宏录制 q
经常需要: nnoremap
2i2Re2PLMaDnghL 5
2i2Re2PLMaDnghL 1 小时 54 分钟前
如果要为连续的若干行都作此处理,可以 <c-v> 块状选中多行再 A;<ESC>,这样的话就是多行都这么处理。
或者<s-v> 选中以后 :s/$/;/ (按 : 后会自动补 ‘<,’> 表示选中范围,在那之后继续打 s 就成)
stimw 6
stimw 1 小时 48 分钟前 via Android ❤️ 1
可以看看 practical vim,中文书是 vim 实用技巧,可以对 vim 有个比较详细的了解。

之后遇到问题就可以自己摸索了。折腾 neovim 配置之类的。

现在不太想折腾了直接 vscode vim 和 ideavim 完事…
nickchenyx 7
nickchenyx 40 分钟前
@korokke nnoremap <leader>; A;<ESC>`^ 这样比较好,不会使用标记字段,`^ 会跳到上一次 insert mode 离开的地方
namelosw 8
namelosw 32 分钟前
A ; 还不方便?一般 VIM 的操作都要三个键,这两个都已经算比较方便的了。

如果你说要给多行加分号不方便,靠 . 就可以:
1. A ; Esc 先加上
2. j . j . j . j . j . 循环然后就把下面几行都加上了
Leviathann 9
Leviathann 7 分钟前 via iPhone
写 ts/js 的话一般是靠 eslint prettier 自动补上
配置一下 run on save 就行

用户匹配 排序问题请求

用户匹配 排序问题请求

需求是这样的。 用户 A (开始时间 结束时间) 用户 B (开始时间 结束时间) 。。。

用户 N (开始时间 结束时间)

匹配出用户 A 对应其他用户的优先级

首先匹配开始时间*相近的 然后匹配结束时间*相近的 *后进行排序

这个需求我该怎么设计

有公网 IP 的情况下,*好的远程桌面是什么呢

有公网 IP 的情况下,*好的远程桌面是什么呢

单位电脑只能连单位内网,有台笔记本可以连外网,下行速度不超过 50mbps ;家里有台式机,上行带宽 40mbps,有动态公网 IP 。

*近一直在用 win10 自带的远程桌面,总感觉有点卡卡的,码字、切网页、浏览明显不如原生桌面流畅。

想请问下还有什么更好性能的,能跑满带宽的,公网直连的远程桌面推荐?

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速