const result = await Promise.race([promise1, promise2])(go (let [[result chan] ;; result the value and while chan won
(<! (alts! [chan1
[value chan2] ;; even can wait a value >! chan| #!/usr/bin/env ts-node | |
| /** | |
| * Usage: | |
| * | |
| * pnpm ts-node scripts/generate-btc-ordinal-addresses.ts 'mainnet | testnet' 'mnemonic' 0 1000 | jq -r 'map(.address) | join("\n")' > /save/to/some/file | |
| */ | |
| import { BIP32Factory } from 'bip32'; | |
| import * as bip39 from 'bip39'; |
| type UnknownObject = Record<string, unknown> | |
| /** | |
| * 一个 EventEmitter ,当注册事件的对象(`gcTarget`)被 GC 时,会自动取消注册事件 | |
| * | |
| * WARNING: 使用这个 EventEmitter 时需要注意,为了避免 `callback` 里可能会引用 | |
| * `gcTarget` 导致 `gcTarget` 本身不被回收,所以代码实现中对 `callback` 是持有的弱引用, | |
| * 因此 `gcTarget` 本身需要持有 `callback` 的强引用 | |
| * | |
| * @example |
| import { textBreakLinesInCanvas } from "./textBreakLinesInCanvas" | |
| const maxWidth = 300 | |
| const lineHeight = 24 | |
| document.querySelectorAll('canvas').forEach((e) => e.remove()) | |
| const canvas = document.createElement('canvas') | |
| canvas.width = maxWidth | |
| canvas.height = 300 | |
| canvas.style.lineHeight = `${lineHeight}px` |
| 我的翻译内容基于 CC BY-NC-SA 3.0 协议 | |
| https://creativecommons.org/licenses/by-nc-sa/3.0/cn/deed.zh | |
| launchd.plist(5) BSD File Formats Manual launchd.plist(5) | |
| NAME | |
| launchd.plist -- System wide and per-user daemon/agent configuration | |
| files | |
| launchd.plist -- 系统范围和用户级的守护进程/代理程序配置文件。 |
| # 1 | |
| curl -o yarn -L `curl -s 'https://api.github.com/repos/yarnpkg/yarn/releases/latest' | jq -r '.assets | map(select(.name | test("legacy.*js$")) | .browser_download_url) | .[0] | tostring'` && chmod u+x yarn | |
| # 2 | |
| VERSION=$(curl https://yarnpkg.com/latest-version) | |
| curl -L -o yarn https://github.com/yarnpkg/yarn/releases/download/v$VERSION/yarn-legacy-$VERSION.js |
| // modified from https://mixmax.com/blog/chrome-back-button-cache-no-store | |
| /** | |
| * Run this by downloading this script to your computer, then: | |
| * 1. $ npm install express | |
| * 2. $ node thisscript.js | |
| * 3. Open localhost:8030/nocache and then localhost:8030/nostore | |
| */ | |
| const app = require('express')() |
| <html> | |
| <div style="width: 100px"> | |
| <img src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 24 24"><text x="0" y="12" font-size="12">你好</text></svg>' style="width: 50%" /> | |
| </div> | |
| </html> |
| (def RATE_LIMIT 5) | |
| (defn operate [n] | |
| (println "test-operate" n (.now js/Date)) | |
| (async/timeout 1000)) | |
| (defn -test [] | |
| (let [limit-chan (async/chan (- RATE_LIMIT 1))] | |
| (go (doseq [n (range 20)] | |
| (let [operate-chan (operate n)] |
| import co from 'co' // or whatever like co | |
| import fetch from './fetch_data_synchronously' | |
| import fetchAsync from './fetch_data_asynchronously' | |
| export function process() { | |
| const generator = processAlgorithmGenerator(fetch) | |
| let next = { done: false } | |
| while(!next.done) { | |
| next = generator.next(next.value) | |
| } |