V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Ketteiron  ›  全部回复第 21 页 / 共 26 页
回复总数  504
1 ... 13  14  15  16  17  18  19  20  21  22 ... 26  
100 天前
回复了 milala 创建的主题 互联网 一直不得其解天涯论坛为什么会负债 2 亿
@yikyo #4 个个年薪百万?
100 天前
回复了 waiaan 创建的主题 Vue.js 请问 vue 的 defineEmits 类型如何使用动态键名
应该实现不了,defineXxxx 是编译器宏,会在编译阶段把 setup/props/emits/model 等展开转换成更低级的写法,如果是 TypeScript ,会在这个阶段进行类型检查并生成对应的运行时值。
为了能在编译阶段做这件事,类型必须是静态的(虽然后面开始支持泛型了),不然编译器毛都找不到怎么给你转换成运行时值。
另外建议不要在 Typescritp 用 enum ,绝大多数场景
'a' | 'b' | 'c' 比
enum BaseEvent {
a = 'a',
b = 'b',
c = 'c',
} 更好,还省去了一堆 import
枚举唯一的好处就是改名不用重构,但这玩意谁没事会去改,经手过几个项目都是枚举用得飞起,我自己写的就完全不用。

又试了下
type Test = 'a' | 'b' | 'c'
type CustomEvent = {
[K in Test]: string
}
defineEmits<CustomEvent>()
这样写是不会有警告的,说明编译器在编译阶段确实拿到了三个字面量,顺利生成代码。不过我懒得检查是否功能正常了,我不会写这种玩意,而且 eslint 会警告要改成 Record ,Record 写法无法通过编译。
101 天前
回复了 dsd2077 创建的主题 程序员 在生产环境服务器中使用 AI,你怎么看?
AI 作为辅助没毛病啊,检查一下命令效果,总结一下用法之类的。但是敢在生产环境执行一个并不熟悉的命令,或者未认真检查 AI 写的脚本就开 run ,这个人一定不应该拥有生产环境的权限。
我写 java/kotlin 是 cursor 对话和生成,idea 里看代码,不冲突
写其他语言也是 vscode 和 cursor 各开一个
104 天前
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
@bronyakaka #7 在实践中,一般会将加密方法放在 wasm 中,然后在 wasm 环境判断当前客户端是否可信,不可信就返回虚假的结果。当然这个理论无法实现,因为所有客户端必然不可信,而且 wasm 几乎获取不到什么关键信息能用来区分是否是恶意调用。这只能给逆向的玩家们增加一点难度,或者说时间成本。如果只能通过特定参数、算法、环境因素等等才能获取到正确结果,那逆向的思路就换成了模拟出这些前置要求,防是防不住的。
104 天前
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
是的,并不需要知道它实现了什么,只要找到调用入口就行了。这个逻辑在 js 也是一样。
混淆其实分为两种,混淆调用实现,混淆调用入口。js 层面的混淆同时做了这两件事,破解者要还原逻辑只要耐心点是一定能成功的,本质上是增加了破解成本。但是目前可以通过反混淆工具+AI 轻易还原,至少对我个人来说是没有成本的。虽然混淆后代码是多样的,但是混淆的方案是已知的可预测可学习的,这点是 AI 的强项。
wasm 在这里是增加了阅读调用实现的代价,从高度混淆的 js 转成更难处理的 wasm 文件,但是调用入口无法隐藏,有些时候并不需要知道里面实现了什么逻辑,只需要 hook 调用就行了。
还可以从另一个方向入手,魔改 javascript-obfuscator ,自己实现的 js 混淆 AI 不好还原,因为它的训练材料里没这玩意。这个可以跟 wasm 方案合起来,逆向成本足以让大多数人止步了。
再进一步,实现一个虚拟机,应该是目前最安全的。想给逆向增加多少成本,自己就得投入更多成本,没有上限。
104 天前
回复了 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 里。
104 天前
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
@bronyakaka #3
https://go.dev/wiki/WebAssembly
看了下 go 的 wiki ,起步确实是 2m ,应该是 go 运行时打进去了。
下面有推荐一些减少体积的办法,手动优化几百 k ,TinyGo 可以优化到 10k 。
或者看看 rust
https://github.com/wasm-bindgen/wasm-bindgen
105 天前
回复了 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 数据的展示问题,让编写显示浮点计算结果的代码更简单易懂适合人类阅读。
105 天前
回复了 bronyakaka 创建的主题 前端开发 求推荐前端混淆算法/库/工具
wasm 最安全
没事别玩 js 混淆了,人类很难阅读高度混淆的 js 代码,但是 AI 可以轻松还原语义,js 层面的混淆已经可以说毫无用处了,仅仅是让所有用户打开网站卡得半死而已。js 不会让全球变暖,但是 javascript-obfuscator 会。
106 天前
回复了 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
最小成本是找个大学生兼职。
AI 想低成本玩 moba 游戏你先等个十年吧,十年不够就二十年。
106 天前
回复了 cmos 创建的主题 Rust rust 程序员的硬盘是多大的? nodejs 继任者?
现代化 nodejs 已经没这么大了,我打开包含前后端的全栈项目看了下,60 多个依赖包,总大小 358M ,去掉 typescript 还能再少一半。
nodejs 体积庞大的基本都是陈年屎山,而且大概率换个电脑就跑不起来。
106 天前
回复了 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
需要一个更稳健的进位方法来解决这个问题
106 天前
回复了 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)
106 天前
回复了 wniming 创建的主题 OpenAI chatgpt 是不是不把免费用户当用户了?
毕竟 chatgpt 手上没有计算器,也无法调用资源去进行运算,chatgpt 只是一个文本生成大模型,如果训练材料里有正确答案,那大概率可以输出正确答案,没有的话只能瞎猜了。
我之前的做法是封装一个 js 沙盒计算接口,让 chatgpt 生成输入条件,遇到数字处理基本都能解决。而后来这种类似操作有个专门的名词,叫 function call ,用于处理大模型不擅长的地方,例如计算、联网搜索等等,至于为什么 chatgpt 免费版没有这功能,你的标题已经说了,免费用户不是用户。
另外我刚问了 chatgpt ,计算是对的,当出现"思考"动作就会去调用计算程序,只是免费的有额度,瞎几把乱算是完全正常的。
106 天前
回复了 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 ,就是数字转字符串,字符串是用来看的不是计算的,不需要严谨小数点计算的前端纯展示场景非常非常多
107 天前
回复了 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 。
1 ... 13  14  15  16  17  18  19  20  21  22 ... 26  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5275 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 07:54 · PVG 15:54 · LAX 23:54 · JFK 02:54
♥ Do have faith in what you're doing.