V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Ketteiron  ›  全部回复第 26 页 / 共 30 页
回复总数  600
1 ... 18  19  20  21  22  23  24  25  26  27 ... 30  
2025 年 8 月 26 日
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
@bronyakaka #7 在实践中,一般会将加密方法放在 wasm 中,然后在 wasm 环境判断当前客户端是否可信,不可信就返回虚假的结果。当然这个理论无法实现,因为所有客户端必然不可信,而且 wasm 几乎获取不到什么关键信息能用来区分是否是恶意调用。这只能给逆向的玩家们增加一点难度,或者说时间成本。如果只能通过特定参数、算法、环境因素等等才能获取到正确结果,那逆向的思路就换成了模拟出这些前置要求,防是防不住的。
2025 年 8 月 26 日
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
是的,并不需要知道它实现了什么,只要找到调用入口就行了。这个逻辑在 js 也是一样。
混淆其实分为两种,混淆调用实现,混淆调用入口。js 层面的混淆同时做了这两件事,破解者要还原逻辑只要耐心点是一定能成功的,本质上是增加了破解成本。但是目前可以通过反混淆工具+AI 轻易还原,至少对我个人来说是没有成本的。虽然混淆后代码是多样的,但是混淆的方案是已知的可预测可学习的,这点是 AI 的强项。
wasm 在这里是增加了阅读调用实现的代价,从高度混淆的 js 转成更难处理的 wasm 文件,但是调用入口无法隐藏,有些时候并不需要知道里面实现了什么逻辑,只需要 hook 调用就行了。
还可以从另一个方向入手,魔改 javascript-obfuscator ,自己实现的 js 混淆 AI 不好还原,因为它的训练材料里没这玩意。这个可以跟 wasm 方案合起来,逆向成本足以让大多数人止步了。
再进一步,实现一个虚拟机,应该是目前最安全的。想给逆向增加多少成本,自己就得投入更多成本,没有上限。
2025 年 8 月 26 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
@635925926 #25 0.1.2 版本已经修复了这个问题了。
除此之外还有相关的 3 个 pr ,都是用的 toFixed ,简单易懂可以去除一堆边界条件,但是作者都没有接受,依旧采用土法硬算舍入值。
我对浮点计算没有深入研究,理论上 toFixed 处理 x.xxx9 和 x.xxx0 是完全正确的,而作者看起来似乎在硬扣性能,只有某些条件下才会回退到 toFixed 。
作者的代码实现还有个多余的
if (result === '0') {
result = '0'
}
完全没看懂在干啥
现在我是选了个其中一个 fork ,copy 一下放进 utils 里。
2025 年 8 月 25 日
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
@bronyakaka #3
https://go.dev/wiki/WebAssembly
看了下 go 的 wiki ,起步确实是 2m ,应该是 go 运行时打进去了。
下面有推荐一些减少体积的办法,手动优化几百 k ,TinyGo 可以优化到 10k 。
或者看看 rust
https://github.com/wasm-bindgen/wasm-bindgen
2025 年 8 月 25 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
@bli22ard #20
0.3399999999999999 = 0.34 是预期行为,这个库就是用来做这件事的。
这已经是第四遍回答了,当你需要显示/计算标准浮点/decimal 时,请使用原生 js 或者 decimal.js, bignumber.js 。
#16 已经说的很清楚了,这个库的作用是
`解决数字格式化的问题,避免因为精度误差导致显示的数字过长或过早使用科学计数法`。
设计上超过一定数量的连续 0 or 9 会直接截断,很显然这样才能实现 0.1 + 0.2 = 0.3 ,而带来的代价就是无法表达含有超过一定数量的连续 0 or 9 。
这个库的适用场景应该是大屏、统计页面等等各种数据可视化,四位以内小数运算是正确的,连续 0 or 9 超过一定次数就会自动四舍五入,严格计算老实去用 decimal.js, bignumber.js ,这只是解决了非严格 decimal 数据的展示问题,让编写显示浮点计算结果的代码更简单易懂适合人类阅读。
2025 年 8 月 24 日
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
wasm 最安全
没事别玩 js 混淆了,人类很难阅读高度混淆的 js 代码,但是 AI 可以轻松还原语义,js 层面的混淆已经可以说毫无用处了,仅仅是让所有用户打开网站卡得半死而已。js 不会让全球变暖,但是 javascript-obfuscator 会。
2025 年 8 月 24 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
@UnluckyNinja #16
我以前项目也写过类似的东西
```ts
function n_str(
value: number,
options: { fractionDigits?: number } = {},
): string {
const { fractionDigits = 3 } = options
const str = value.toFixed(fractionDigits).replace(/(\.?|(?<=\.\d+))0+$/, '')
return str === '-0' ? '0' : str
}
```
toFixed()的问题是无法智能判断精度,需要传入参数指定精度
nstr(1.123456) -> 1.123456
n_str(1.123456) -> 1.123
n_str(1.123456, { fractionDigits: 6 }) -> 1.123456
这里的难点是无法简单判断出浮点数计算的小数位数,比如 0.1+0.2 ,人类都知道应该是 1 位小数点,但是如何从 0.30000000000000004 解析出来,还有科学计数法把这个问题搞得更加复杂,而 nstr 能解决这个问题。手动指定精度 2 行就解决了,为了少写这个参数我不介意在项目里多 install 一个包。

目前 nstr 我测了所有情况,就剩 456.78999999456789=456.78 这个问题,其他的都正常
在 nstr 的方案上使用 toFixed 或许能解决这个问题同时不引入其他边缘情况,例如楼上的 pr
https://github.com/shuding/nstr/pull/2/commits/4713d6447bc8fd3af2e246e63ea2f0edb8445d07
2025 年 8 月 24 日
回复了 251 创建的主题 问与答 现在能小成本训练一个游戏 ai 吗,比如王者荣耀。
最小成本是找个大学生兼职。
AI 想低成本玩 moba 游戏你先等个十年吧,十年不够就二十年。
2025 年 8 月 24 日
回复了 cmos 创建的主题 Rust rust 程序员的硬盘是多大的? nodejs 继任者?
现代化 nodejs 已经没这么大了,我打开包含前后端的全栈项目看了下,60 多个依赖包,总大小 358M ,去掉 typescript 还能再少一半。
nodejs 体积庞大的基本都是陈年屎山,而且大概率换个电脑就跑不起来。
2025 年 8 月 23 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
@mrlmh00 #13 研究了一下
https://github.com/shuding/nstr/blob/main/src/index.ts#L64-L77
进位失败是因为
451.78+0.01 = 451.78999999999996
而不是期望的 451.79
需要一个更稳健的进位方法来解决这个问题
2025 年 8 月 23 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
@chesha1 #10 我觉得我在 4#的例子已经很有说服力了,在你想展示几个浮点数的计算结果时,你希望写的是
new Decimal(a).plus(new Decimal(b).times(new Decimal(c))).minus(new Decimal(d))
还是
nstr(a+b*c-d)
2025 年 8 月 23 日
回复了 wniming 创建的主题 OpenAI chatgpt 是不是不把免费用户当用户了?
毕竟 chatgpt 手上没有计算器,也无法调用资源去进行运算,chatgpt 只是一个文本生成大模型,如果训练材料里有正确答案,那大概率可以输出正确答案,没有的话只能瞎猜了。
我之前的做法是封装一个 js 沙盒计算接口,让 chatgpt 生成输入条件,遇到数字处理基本都能解决。而后来这种类似操作有个专门的名词,叫 function call ,用于处理大模型不擅长的地方,例如计算、联网搜索等等,至于为什么 chatgpt 免费版没有这功能,你的标题已经说了,免费用户不是用户。
另外我刚问了 chatgpt ,计算是对的,当出现"思考"动作就会去调用计算程序,只是免费的有额度,瞎几把乱算是完全正常的。
2025 年 8 月 23 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
@mrlmh00 #7
这个库只是用来处理 0.1+0.2=0.30000000000000004 这种问题的,让简单的浮点计算适合人类阅读
产生这种问题的浮点数都有个共同的特点:一连串的 0 或者 9 ,所以这个库就检测 0/9 连续出现的次数,超过判断条件后截断全部 0/9 最后简单处理一下进位
需要多位小数严谨计算的应该用 decimal.js, bignumber.js
这个库我觉得已经说得很清楚了,nstr ,就是数字转字符串,字符串是用来看的不是计算的,不需要严谨小数点计算的前端纯展示场景非常非常多
2025 年 8 月 23 日
回复了 Livid 创建的主题 JavaScript nstr - number → string, but looks good
确实 looks good, 源码才 113 行,实现方法很巧妙。

console.log(new Decimal('0.1').plus(new Decimal('0.2')).toString())
vs
console.log(nstr(0.1+0.2))

因为设计使然,超过 4 位(可自行设定)的 9 和 0 会被认为是噪音然后截断处理,不适用多位小数严格计算场景,其他场景都不错。
@wangtian2020 #22 这就得问 noble 为什么不采用预编译或者 rs-napi 或者 wasm 而使用 node-gyp 去现场编译了,当然大部分项目是因为历史包袱甩不掉,还能更新就已经很不错了。node-gyp 依赖 python 运行时环境,本机上找到什么版本就用什么,毕竟重新下载一个指定的 python 版本去构建太蛋疼了,真要这样说不定有些项目 npm install 吭哧吭哧下好几个不同版本 python 下来,而 python 运行时对基础环境有要求,node-gyp 对 python 版本有要求,Node.js -> node-gyp -> Python -> C++ 编译器 -> 核心系统库 -> 目标产物,这是一个十分不稳定且脆弱的流程,无论发生什么都可以算预期行为。
真要说起来这也是 nodejs 的锅,因为原生模块性能比 js 好,那注重性能的都会去写原生,但是 c++产物无法跨平台运行,你在 A 平台写好了,别的平台也想用但没有精力去适配,就有了 gyp ,就有了封装专注 nodejs 的 node-gyp ,就有了 node-sass 等包带来的一地鸡毛。
nodejs 毕竟蛋疼的是破坏性变更、不向后/向前兼容
本地开发建议用 nvm 切换各个 node 版本
对于一些不兼容所有包管理器的项目,可以用 corepack 解决 (例如你的 pnpm 是 10.x ,项目 A 只能在 pnpm 8.x 下跑,可以不改动本地包管理版本去解决)。不过 corepack 是个实验性功能,并不稳定,未来还可能从 nodejs 移除变成单独的项目。
线上部署用 docker 。
2025 年 8 月 21 日
回复了 mizuhashi 创建的主题 程序员 我覺得 Ruby 最優秀的地方(RSpec)
ror 最优秀的地方在于极致地实现约定大于配置,以及魔法般的 DSL 。
有什么好处?就是极致地少写代码。

不同人有不同的喜好,就像我追求的是接近完美的类型安全,多写代码无所谓,反正现在大部分活是 AI 干的。而类型安全让我几乎杜绝各种傻逼运行时错误,可以安心地睡觉。你要说人菜那我无话可说,我本来就是一名普通的程序员,一定会犯错误,我只能希望能少犯错误。Ruby 很优秀与 Ruby 不适合团队协作并不冲突。
2025 年 8 月 20 日
回复了 69partner 创建的主题 程序员 框架选型问题 React Native、Flutter、uniappx?
@ninjaJ tauri2.0 稳定版对移动端的支持依旧非常差,很多人连构建一个安卓/IOS 的 helloworld 都会失败。rust/js 对移动端没有多少可用的 api ,很多功能只能写原生代码,web 端和移动端复用逻辑非常困难。一堆构建失败的 issue 都没有解决,碰上了毫无办法。
2025 年 8 月 20 日
回复了 sxszzhrrt 创建的主题 数据库 不限语言,你觉得最好用的框架和 ORM 是什么?
@cloudzhou JavaScript 不值得投入,TypeScript 才值得投入,无类型的脚本语言只适合一个人编写,在团队协作上表现太差了,永远无法知道某个人在某个地方施放了什么恐怖的魔法。
2025 年 8 月 20 日
回复了 69partner 创建的主题 程序员 框架选型问题 React Native、Flutter、uniappx?
大部分情况下 flutter 性能更佳,写前端更费劲点,Dart 表达画面的能力被 CSS 吊打; RN 性能稍差,前端部分更好实现,但是样式在不同平台不一致。硬要比就是半斤八两,确实很难抉择。uniapp 也不是不行,除此之外还有 KMM/KMP 也可以看看。
尝试过 Tauri mobile ,完全生产不可用,只能作为内部工具使用。
如果你们有 react 的历史包袱,或者更注重开发效率,那就选 RN ,如果 java 仔多,或者愿意仔细打磨产品就 flutter 。
不过当下原生或许是个更佳选择。
1 ... 18  19  20  21  22  23  24  25  26  27 ... 30  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   906 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 21:04 · PVG 05:04 · LAX 14:04 · JFK 17:04
♥ Do have faith in what you're doing.