Web AssemblyImageMagick

在净土上搞了一个用 WASM 实现的功能

放在了这里:https://www.eliseos.org/en/tools/home

是用 WASM-ImageMagick 实现了把 jpg 转成 progressive jpg(就是可以从模糊到清晰逐渐加载的那种)

原图:原图

转换成果:转换成果

Colliot9/9/2019, 3:50:48 PM


Preview:

Cancel

Elsewhere

Colliot replied to 我终于找到 CI fail 的原因了!

这次终于彻彻底底搞明白原因了,我之前说的可能并不正确。当然现在这个新的理论似乎也无法解释前面 serve-static 包失败的原因——也许那还有待调查…… 这次我发现一些 @types scope 下的包频繁出现安装失败,以及另一种更有意思的现象——被装成了不带 @types 的那个包,比如 @types/prop-types 被装成了 prop-types。这会导致 TypeScript 编译的时候频繁报告一些奇怪的错误,比如 TypeScript error: Cannot find type definition file for 'prop-types'. TS2688,TypeScript error: Cannot find type definition file for 'retry'. TS2688,以及在净土本身的项目里似乎遇到过 TypeScript error: Cannot find type definition file for 'express'. TS2688,这个最后我发现也是因为@types/express 被装成了 express。 前几天我忍无可忍,去调试了 yarn 的源码,发现 yarn 第二步去 fetch 包的步骤是这样的: 试图在 yarn 的缓存目录(macOS 下是 ~/Library/Caches/Yarn/v4/)里寻找缓存,比如 @types/prop-types 的缓存可能叫~/Library/Caches/Yarn/v4/npm-@types-prop-types-15.7.2-0e58ae66773d7fd7c372a493aff740878ec9ceaa/。 如果这个缓存存在,那就使用这个缓存。如果启用了 yarn-offline-mirror,那么就把这个缓存移动到 offline mirror 里。(实际上这个缓存目录里的 node_modules/@types/prop-types 文件夹里除了存在包展开后的内容,还有一个压缩包 .yarn-tarball.tgz,它是直接拷贝过去的。 如果没有缓存,那就试图走离线缓存,即检查指定的 yarn-offline-mirror 目录里是否存在对应的压缩包。如果有,就用它。 如果啥都没有,那只能从网络上获取了,就是走指定的 npm/yarn 源下载咯。 在调试过程中,我还发现一些奇怪的现象,最终通过这些现象彻底搞清楚了问题在哪里(其实修法很简单,但真的是画一条线只值一美元,知道在哪里值 999999 美元……)。这些奇怪的现象有: 如果不用淘宝 npm 源,而用 npm 官方源或者 yarn 官方源,并把 yarn 缓存、yarn.lcok 和离线缓存清掉重装,就没有问题。 yarn.lock 里的 integrity 字段竟然是不带 @types 那个包的 把 yarn.lock 里带 @types 那个包的内容删掉(或者干脆整个文件都删掉)再装,不会出现 Integrity check failed,但是装上去的包还是错的 yarn 缓存里的包就是错的…… ~/Library/Caches/Yarn/v4/npm-@types-prop-types-15.7.2-0e58ae66773d7fd7c372a493aff740878ec9ceaa/ 里的包竟然是 prop-types-15.7.2,而不是@types-prop-types-15.7.2` 删掉 yarn 缓存里的这条缓存之后再装,这个缓存竟然又变成了 prop-types…… 把发网络请求那一段打出来,发现发的网络请求是对的。保存了网络请求的结果,发现结果也是对的(shasum 结果跟正确的压缩包相同)。那么 yarn 到底是从哪里搞到这个错误的包的内容的呢?yarn 试图装 prop-types 的时候,是从哪里搞到这个 prop-types 的内容的呢? 好了,高潮就要来了,咱们先歇会儿……

Colliot replied to "allowSyntheticDefaultImports" 的作用到底是啥?

这次还真遇到一个库因为没开这个选项导致使用失败的案例:fix(tsconfig): Allow default style import in the commonjs version build. 不过这个 pull request 似乎我也没完全搞定……

Colliot replied to 为什么非 root 用户在启用了 Gnome 的 socks5 代理后执行 `curl`,会报告 `curl: (7) Failed to receive SOCKS4 connect request ack.`?

经过叶子哥哥的提醒,发现是因为 GNOME 的 SOCKS5 代理仅仅是设置了一个环境变量而已……而 root 的环境变量并无法受到 GNOME 的影响,所以其实这个代理就是坏的,root 是因为没有设置代理所以是好的……

Colliot replied to 为什么用 `Obervable.create` 和 `observer.next` 简单创建的 `Observable`,在有多个订阅者的情况下只能生效一次?

这么写的: admin = Observable.create((observer) => { let value = true; observer.next(value);

this.toggleAdmin = () => { value = !value; console.log('changing to ', value) observer.next(value); } });

Colliot replied to 什么是 Young Tableau?

require{mhchem} ce{Zn^2+ <=>[+ 2OH-][+ 2H+] underset{text{zinc hydroxide}}{ce{Zn(OH)2 v}} <=>[+ 2OH-][+ 2H+] nderset{text{tetrahydroxozincate(II)}}{ce{[Zn(OH)4]^2-}}}

Colliot replied to 我们也许需要从邮件提醒功能做起

I hope you are wrong, too.

Colliot replied to 虎哥牛逼,竟然解决了净土网站的bug

我已经注意到了。谢谢!

ice1000 replied to 虎哥牛逼,竟然解决了净土网站的bug

本质原因是不知道是 WebStorm 还是啥给虎哥自动 import 了一个 from 是 import { from } from 'rxjs/internal/observable/from'; 但是 rxjs 实际上打包的时候用的是 esm5 里的。

Colliot replied to 求助帖,需要网站管理员帮助

我等会儿给你处理吧。

xiang replied to 一台电脑如何利用另一台电脑上网?

优质解决方案: 买个好的台式机无线网卡