--- url: /article/20250717/index.md --- 「Rust 重写一切,UV 管理 Python 的一切。」在 Python 生态中,包管理一直是一个复杂且多样化的问题。随着项目的增长和依赖关系的增加,管理这些包变得越来越具有挑战性。UV 作为一个新兴的包管理工具,旨在简化这一过程,并提供更高效的解决方案。 Windows 用户使用管理员模式的 PowerShell 执行下面的命令安装即可,如果有报错问问 GPT 就可以了,多半是权限的问题。 ```shell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" ``` 其他方式和操作系统安装参考: ## 简单尝试 ### Python 管理 `uv python`+ 命令,一般是先 `list` 看哪些版本可以下,`find` 看安装了什么版本,`install` 安装,`uninstall` 卸载,`pin` 特定版本到项目。 安装最新版 cpython ```shell 是 uv python install [版本号] --reinstall(可选,覆盖安装) ``` 升级 python 版本 ```shell uv python upgrade ``` ### 代理执行 :::note 前提是.py 文件中导入的包为 [标准类库](https://docs.python.org/3/library/index.html),例如 `import os`、`import sys` 等等 ::: ```shell uv run [参数] ``` 有特定依赖项使用以下命令: ```shell uv run --with < 依赖项 > [参数] ``` ### 显式声明依赖 > 2023 年 10 月,python 官方发布了 [PEP 723](https://peps.python.org/pep-0723/),引入了声明式内敛元数据以及 `pyproject.toml` 文件来声明项目的依赖项。 初始化 ```shell uv init --script --python ``` 声明脚本依赖,这里向 `example.py` 文件添加了 `requests` 和 `rich` 这两个依赖项,版本限制为小于 3 的版本。 ```shell uv add --script example.py 'requests<3' 'rich' ``` ### 修改下载地址(包索引) 如果你想使用其他镜像源,可以通过以下命令修改包索引地址: ```shell uv add --index "https://example.com/simple" --script example.py 'requests<3' 'rich' ``` 会一并写入 `pyproject.toml` 文件中。 ```toml # [[tool.uv.index]] # url = "https://example.com/simple" ``` 到这里,我们就可以看出它的长处了,可以显示定义下载源,版本依赖,甚至可以指定脚本文件。 ### 锁定脚本依赖 与项目不同,脚本依赖是指特定脚本所需的依赖项。可以通过以下命令锁定脚本依赖: ```shell uv lock --script example.py ``` 生成的结构如下 @[code-tree title="Example" height="400px" entry="test.py.lock"](docs/.vuepress/public/code/20250717/test) ### 使用不同 python ```shell uv run --python [参数] ``` ## UV 工具 ### uvx 只有当在无关紧要的测试、扁平化项目中用这个比较合适,`uvx` 等价于下面的命令:这样做是为了预先测试检查兼容 python 包版本,你知道的,python 的包管理就和重庆的天气一样糟糕( ```shell uv tool run ``` ```shell $ uvx pycowsay nb -- < nb > -- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ``` > 这个用的比较少,暂时写到这里。链接: ## 项目管理 常用 ```shell uv init hello-world cd hello-world ``` 生成的目录结构如下: @[code-tree title="hello-world" height="400px" entry="main.py"](docs/.vuepress/public/code/20250717/hello-world) ### 项目结构 ::: file-tree * ++ .venv * Scripts * include ## 包含的头文件 * lib ## 所有的包安装位置 * ... * python.exe ## 当前版本 python 执行程序 * pyvenv.cfg * .python-version * README.md * main.py * pyproject.toml * uv.lock ::: #### pyproject.toml > 查看 [所有字段](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/) ```toml title="pyproject.toml" [project] name = "hello-world" ## 项目名称 version = "0.1.0" ## 项目版本 description = "Add your description here" ## 项目描述 readme = "README.md" ## 项目说明文件 requires-python = ">=3.13" ## 需要的 python 版本 dependencies = [] ## 依赖项列表 ``` 现在我们来试试 [安装 yolo](https://docs.ultralytics.com/zh/quickstart/) 的依赖项,PYPI 的镜像站点下载最好把代理关了或者设置镜像。 ```shell title="install.sh" uv add ultralytics ``` ![20250719.png](/assets/20250719.png) 非常快,10 秒内完成几百兆的文件下载和索引!(不过网速足够可能才行) 变化如下: ```toml title="pyproject.toml" [project] name = "hello-world" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.13" dependencies = [ "matplotlib>=3.10.3", # [!code ++] "tqdm>=4.67.1", # [!code ++] "ultralytics>=8.3.168", # [!code ++] ] ``` #### .python-version 告诉项目使用的 Python 版本号,初始化后自带,也可自定义 #### .venv 项目的虚拟环境,即与系统其余部分隔离的 Python 环境。这是 uv 将安装项目依赖项的位置。 #### uv.lock 重要 uv.lock 是一个跨平台的 lockfile,其中包含有关项目依赖项的确切信息,类似与 npm 中的 `package.lock` 或 `pnpm.lock`, 由 uv 自动化控制和生成,不要修改它。它可以: * 声明项目的开发平台 * 声明项目所需的 Python 版本 * 声明包及其依赖的下载地址、文件哈希等 :::note 文件哈希 通过哈希校验算法确认包未被篡改,保障包的完整性和安全性。 ::: 这样做的好处是让不同平台的开发者在安装依赖时获得相同的结果,确保项目在不同环境中的一致性。(哇,安装包很头疼的好吗?) 坏处是若下载地址失效或包被删除,可能会导致安装失败,可以 \[手动尝试修改下载地址]\(/article/20250717/# 修改下载地址 - 包索引)。 ````toml title="pyproject.toml" ```lock title="uv.lock" version = 1 revision = 2 requires-python = ">=3.13" resolution-markers = [ "sys_platform == 'win32'", "sys_platform == 'darwin'", "platform_machine == 'aarch64' and sys_platform == 'linux'", "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", ] [[package]] name = "certifi" version = "2025.7.14" source = { registry = "https://mirrors.cernet.edu.cn/pypi/web/simple" } sdist = { url = "https://cmcc.mirrors.ustc.edu.cn/pypi/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" } wheels = [ { url = "https://cmcc.mirrors.ustc.edu.cn/pypi/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" }, ] ```` ### 添加、移除依赖 > add、remove ```shell uv add requests uv remove requests # Specify a version constraint uv add 'requests==2.31.0' # Add a git dependency, 手动指定 uv add git+https://github.com/psf/requests ``` ### 从 requirements.txt 中同步 在常见的 pip 管理的项目中,我们会用到 `requiremts.txt` 来管理项目,uv 支持迁移 ```shell uv add -r requirements.txt -c constraints.txt ``` ### 升级某个包 正常的流程是先锁定其他包的版本,再执行某个包的升级任务 ```shell uv lock --upgrade-package ``` ### 查询项目版本 ```shell uv version hello-world 0.1.0 uv version --short 0.1.0 uv version --output-format json { "package_name": "hello-world", "version": "0.1.0", "commit_info": null } ``` ### 同步依赖 一般而言,写好代码后为了运行起来,新增的依赖我们自然而然就把依赖装好了,比如 `uv add`。但是如果是团队协作中,其他人可能没有安装你新增的依赖(反之亦然),这时候就需要同步依赖了。 ```shell uv sync # [!code warning] 同步依赖到 uv.lock 和 pyproject.toml .venv\Scripts\activate ## windows source .venv/bin/activate ## linux/macOS flask run -p 3000 python example.py ``` :::note 激活环境后,无需再使用 `uv` 前缀,直接使用 `python` 命令即可运行脚本。 ::: ### 造轮子 ```shell uv build ``` 默认在当前目录生成 `dist` 目录,里面包含了打包好的文件。 :::file-tree title="dist" collapsed=true * .venv * Scripts * include * lib * python.exe * pyvenv.cfg * ++ dist * hello\_world-0.1.0-py3-none-any.whl // wheel 包,也就是所谓的轮子 * hello\_world-0.1.0.tar.gz // 源码包 * hello\_world.egg-info // hutch 包信息 * dependency\_links.txt * PKG-INFO * requires.txt * SOURCES.txt * top\_level.txt * main.py * pyproject.toml * uv.lock * README.md * .python-version * .gitignore * LICENSE ::: ## 发布包 ### 升级项目版本号 ```shell uv version n.e.w ``` 平级升级,uv 划分的标准从大到小为:major, minor, patch, stable, alpha, beta, rc, post, and dev ```shell # 从稳定版到预发布版 uv version --bump patch --bump [alpha/beta/rc/post/dev] # 预发布版的内部升级 uv version --bump [alpha/beta/rc/post/dev] # 预发布版到稳定版 uv version --bump stable ``` :::note 同步注意 执行 `uv version` 后会自动更新 `pyproject.toml` 和 `uv.lock` 文件中的版本号。不升级请执行 `--frozen` 参数 ::: [//]: # "TODO: 写一下发布包的流程 https://docs.astral.sh/uv/guides/package/#publishing-your-package https://docs.pypi.org/trusted-publishers/adding-a-publisher/#github-actions" [//]: # "### 发布到 Github" [//]: # [//]: # "### 发布到 PyPI" [//]: # [//]: # "### 发布到 Gitlab" ## 迁移 ### pip2uv 我们都知道,pip 使用 requirements.txt 来管理依赖。例如,写入当前项目的依赖使用: :::note 环境隔离 考虑使用 venv 虚拟环境来隔离项目依赖,避免某个 Python 版本全局安装包的冲突(想哭了😭)。 ```shell python -m venv source .venv/bin/activate pip ... ``` ::: 其中一种管理依赖的方式是 `pip-compile` 编译规则集 requirements.in [+requirements.in] 文件 [+requirements.in]: 在项目最容易出现兼容性问题的地方最好测试人员写一个这样的文件,手动控制特别软件包的版本。 例如,`requirements.in` 文件内容如下: ```text title="requirements.in" fastapi pydantic>2 ``` 表示 `fastapi` 无版本约束, `pydantic` 版本大于 2.0.0。 执行下面的命令来生成 `requirements.txt` 文件: ```shell pip-compile requirements.in -o requirements.txt ``` ```text title="requirements.txt" annotated-types==0.7.0 # via pydantic anyio==4.8.0 # via starlette fastapi==0.115.11 # via -r requirements.in // [!code warning] idna==3.10 # via anyio pydantic==2.10.6 # via # -r requirements.in // [!code warning] # fastapi pydantic-core==2.27.2 # via pydantic sniffio==1.3.1 # via anyio starlette==0.46.1 # via fastapi typing-extensions==4.12.2 # via # fastapi # pydantic # pydantic-core ``` 这个等同于 `uv pip compile `,也是 `pip-tools` 中的 `pip-compile` 命令。 *** 另外一种比较不常见的方式是使用 `pip freeze` 命令来生成当前环境的依赖列表。 ```shell pip freeze > requirements.txt ``` ```text title="requirements.txt" annotated-types==0.7.0 anyio==4.8.0 fastapi==0.115.11 idna==3.10 pydantic==2.10.6 pydantic-core==2.27.2 sniffio==1.3.1 starlette==0.46.1 typing-extensions==4.12.2 ``` 豪了,有以上的思路,我们就可以: :::steps 1. 划分各种依赖环境 比如项目有 dev | prod | staging 等环境,我们可以将依赖分为不同的文件,例如 `requirements-dev.in`、`requirements-prod.in` 等。 2. 编写这些文件中的特殊依赖 写好后分别保存到 `requirements-dev.in` 和 `requirements-prod.in` 文件中。 3. 使用 `uv pip compile` 命令编译每个环境的依赖 ```shell uv pip compile requirements-dev.in -o requirements-dev.txt # 或者 pip-compile requirements-dev.in -o requirements-dev.txt uv pip compile requirements-prod.in -o requirements-prod.txt ``` 4. 安装依赖 ```shell pip install -r requirements-dev.txt pip install -r requirements-prod.txt ``` ::: 上面讨论的同一个项目中不同开发环境的依赖管理。再扩展下,不同的操作系统也是一样的。 不过 uv 支持跨平台解析,非常方便,比如 `tqdm` ```requirements.in tqdm ``` 两个平台的解析为 :::tabs @tab ::skill-icons:linux-dark::Linux ```text tqdm==4.67.1 # via -r requirements.in ``` @tab ::logos:microsoft-windows-icon::Windows ```text colorama==0.4.6 # via tqdm tqdm==4.67.1 # via -r requirements.in ``` ::: > colorama: Windows 平台下的 tqdm 需要 colorama 包来支持终端颜色输出 这样每个平台间是不兼容的, 如果使用 uv 的 `universal` 选项 ,则会声明 colorama 的平台: ```shell uv pip compile --universal requirements.in ``` ```text title="requirements.txt" colorama==0.4.6 ; sys_platform == 'win32' # 这里就声明了 # via tqdm tqdm==4.67.1 # via -r requirements.in ``` --- --- url: /article/20260515/index.md --- # 在 Claude Code 中使用 DeepSeek V4 系列 ## 安装 Claude Code Windows 用户可以通过 Microsoft Store 安装 Claude Code,搜索 "Claude Code" 即可找到并安装。 或者打开 PowerShell,输入以下命令安装: ```shell winget install Anthropic.ClaudeCode ``` 其他系统看官网就行了。 ## 获取 DeepSeek API Key 去 DeepSeek 官网注册账号并[获取 API Key](https://platform.deepseek.com/api_keys),不再赘述。注意 API 不要泄露了。 ## 配置环境变量 打开「用户目录」,就是 `C:\Users\你的用户名`,找到`.claude`目录,在此目录下创建一个名为 `settings.json` 的文件,内容如下: ```json { "env": { "ANTHROPIC_AUTH_TOKEN": "你的 DeepSeek API Key,sk开头", "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic", "ANTHROPIC_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_OPUS_MODEL": "=deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_SONNET_MODEL": "=deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "=deepseek-v4-pro[1m]", "CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-v4-flash", "CLAUDE_CODE_EFFORT_LEVE": "max" }, "permissions": { "allow": [], "deny": [] }, "alwaysThinkingEnabled": false } ``` 最后重启终端,输入 `claude` 显示有 `deepseek-v4-pro[1m]` 相关信息就说明配置成功了。 --- --- url: /article/20260610/index.md --- # React 竞态问题排查:一次练习模式闪烁 bug 的修复之旅 ## 问题现象 [刷题网](https://github.com/rand777gg/practice-web)的练习模式下,点击进入后会出现一道题,然后**马上闪烁成另一道题**。用户看到的是: > 题目 A 出现 → 瞬间变成题目 B 不是 loading 状态闪了一下,而是两道不同的题在极短时间内先后渲染。 ![jingtai.png](../../.vuepress/public/blog-covers/jingtai.png) ## 排查过程 ### Step 1:定位可疑组件 问题出在 `PracticeSession.tsx`。这个组件挂载后会调用 `fetchRandomQuestion` 随机抽一道题。 ```tsx title="PracticeSession.tsx" const fetchRandomQuestion = useCallback(async () => { setIsLoading(true) // ... const { data: ids } = await supabase.from('questions').select('id') const pickedId = ids[Math.floor(Math.random() * ids.length)].id // ... setQuestion(data) setIsLoading(false) }, [selectedSubject, selectedCategory, selectedType, profile?.daily_targets, profile?.plan_subjects]) useEffect(() => { fetchRandomQuestion() }, [fetchRandomQuestion]) ``` 核心模式很常见:`useCallback` 包装 async 函数 → 作为 `useEffect` 的依赖。依赖变化时自动重新请求。 问题在于 `Math.floor(Math.random() * ids.length)` —— **每次调用会随机选不同的 ID**。如果这个函数被调用了两次,且第二次在第一次渲染完成后才 resolve,就会造成"闪烁"。 ### Step 2:找谁触发了两次调用 第一反应是 React 18 的 StrictMode。在开发模式下,StrictMode 会 mount → unmount → remount 组件,effect 执行两次。两次 `fetchRandomQuestion` 并发执行,各自随机选了不同的题。 但用户反馈的是**生产环境**。生产环境下 StrictMode 不会 double-invoke effect。所以还有别的原因。 ### Step 3:追踪 profile 引用变化 仔细看依赖数组: ```tsx [selectedSubject, selectedCategory, selectedType, profile?.daily_targets, profile?.plan_subjects] ``` `profile` 来自 Zustand store。Auth 初始化时,如果用户没有昵称,会自动分配一个: ```tsx title="App.tsx" if (profile && !profile.nickname) { const nickname = `刷题网用户${Math.random().toString(36).slice(2, 10)}` supabase.from('profiles').update({ nickname }).eq('id', userId).then(() => { setProfile({ ...profile, nickname }) // 异步回调,新的对象引用 }) } ``` 这个 `.then()` 回调在组件挂载**之后**才执行。虽然 `daily_targets` 的值没变,但 `profile` 对象引用变了。在某些时序下,这会导致 `fetchRandomQuestion` 被重新创建,effect 再次触发。 ### Step 4:确认根因 综合来看,有两层原因: 1. **StrictMode(开发环境)**:effect 被 double-invoke,两次 fetch 并发执行 2. **profile 引用变化(生产环境边缘情况)**:异步昵称设置导致 profile 对象引用改变,触发第二轮 fetch 但归根结底,**真正的问题是 `fetchRandomQuestion` 没有取消上一次请求的机制**。无论触发源是什么,只要函数被多次调用,就应该只有最后一次调用的结果生效。 ## 修复方案:代数计数器 思路很简单——用一个 ref 记录当前是第几代调用,每次 `await` 返回后检查一下有没有更新的调用进来: ```tsx title="PracticeSession.tsx" const fetchGenRef = useRef(0) const fetchRandomQuestion = useCallback(async () => { fetchGenRef.current++ const myGen = fetchGenRef.current // 记录"我是第几代" setIsLoading(true) // ... const { data: ids } = await idQuery if (fetchGenRef.current !== myGen) return // 有更新的调用了,我退场 // ... 每次 await 后都检查一次 ... const [qRes, statsRes] = await Promise.all([...]) if (fetchGenRef.current !== myGen) return setQuestion(qRes.data) setIsLoading(false) }, [...]) ``` :::tip 这个模式本质上是一个**轻量级的 AbortController**,但不需要修改 Supabase 调用(Supabase 本身不支持 AbortSignal 传入)。比 `AbortController` 更简单,只是静默丢弃过期结果。 ::: ## 全仓库排查 修完这个后,我用同样的模式扫了一遍整个仓库,发现了另外 **6 个高严重度**的同类型问题: | 文件 | 问题描述 | |------|----------| | `use-favorites.ts` | `fetchFavorites` 无竞态防护,user 变化时可能展示过期的收藏列表 | | `WrongReviewPage.tsx` | 切换筛选模式(全部/练习/考试)时,旧请求可能覆盖新数据 | | `PublicNotesPage.tsx` | 切换学科下拉时请求竞态,可能显示不匹配的笔记。还有 `selectedSubject` 闭包过期问题 | | `ExamSession.tsx` | 分类加载和考试恢复检查两个 effect 都没有 cleanup | | `DashboardPage.tsx` | 200 行的 `load()` 函数无任何竞态防护,且闭包内读取的 `profile` 值可能过期 | 修复策略统一用代数计数器,模式完全一致。DashboardPage 那个最复杂,里面还有个 fire-and-forget 的 IndexedDB 预取 IIFE,也需要代数检查防止并发写入交织。 ## 总结 这类 bug 的共性特征: 1. **async 函数在 useEffect 中被调用**,且没有返回清理函数 2. **函数内部修改 state**,多次调用的 setState 会互相覆盖 3. **依赖了对象属性**(如 `profile?.daily_targets`),对象引用变化可能在意料之外的时机触发 4. **随机性操作**(如 `Math.random()`)让问题更加明显——如果不是随机选题,两次调用设置了同样的结果,用户就不会注意到 修复的核心思路一句话:**每次 async 调用带一个代数标记,await 之后检查自己是不是最新的,不是就退场。** 目前所有修复已经提交到 [practice-web](https://github.com/rand777gg/practice-web) 的 v1.9.0 版本。 --- --- url: /article/24091101/index.md --- [Corepack](https://nodejs.cn/api/Corepack.html) 是一个 NodeJS 自带的包管理器的管理工具,主要是用来管理诸多的包管理器的。当在多人开发环境中,不同开发者用的包管理器不同、版本不同,这时候就可以用到 `Corepack` 了,正如官网所言,充当「桥梁」的作用。 从 14.19.0 到 25.0.0, Corepack 已经随 Node 一起安装,就如同 npm 一样,但如何使用 Corepack 安装 pnpm,并在之后可以更换包管理器呢? ```shell title="pnpm.sh" Corepack enable Corepack install --global pnpm@latest ``` 在 `package.json` 中添加 `"packageManager": "pnpm@8.6.6"`,删除 `node_modules` 并用 `pnpm` 重新安装依赖。之后如需换为 `npm` 则删除 `node_modules` ,`pnpm-lock.yml` ,`packageManager 字段 `,然后重新用 `npm` 安装依赖即可。 ## 手动安装 先卸载掉全局的 Yarn 和 pnpm 二进制文件,如果是单独安装的 Yarn 可能需要手动卸载。 ```shell title="uninstall.sh" npm uninstall -g yarn pnpm # That should be enough, but if you installed Yarn without going through npm it might # be more tedious - for example, you might need to run `brew uninstall yarn` as well. ``` 然后使用 npm 安装 Corepack ```shell title="install.sh" npm install -g corepack ``` 如果 Corepack 是使用 Node.js Windows Installer `.msi` 包安装在系统上的,则可能需要先将其删除,然后才能尝试使用 npm 安装不同版本的 Corepack。 ## 使用 Corepack 非常简单,项目使用什么包管理运行什么命令即可。在 Yarn 项目中运行 `yarn install`,在 pnpm 项目中运行 `pnpm install`,在 npm 项目中运行 `npm`,Corepack 将捕获这些调用。 --- --- url: /article/24121401/index.md --- # Vue3 部分组件导入时爆红 在 *Webstorm* 中导入部分组件时 IDE TypeScript 检查错误,运行正常,但会导致构建错误的解决办法。 在使用 `WebStorm` 开发 Vue3 + TS 项目时,编辑器一直有一个报错,因为不影响运行,所以就一直没在意,但有天准备部署到 `Netlify` 时在 `build` 阶段出现错误,查看日志之后发现是 找不到 *.vue* 的声明文件 的错误,同时错误位置指向 `import SearchInput from "@/components/SearchInputResult.vue"` ,随后尝试在 IDE 构建时也出现了相同的错误。 ![24121401\_01.png](/assets/24121401_01.png) 最终找到错误原因为在 `.d.ts` 中缺少了对 `*.vue` 的 声明,解决办法是在 `env.d.ts` 加入以下代码: ```ts title="env.d.ts" declare module '*.vue' { import type {ComponentOptions} from 'vue' const comp: ComponentOptions export default comp } ``` 这段代码是一个 TypeScript 的模块声明文件(通常以 `.d.ts` 扩展名保存), 用于告诉 `TypeScript` 编译器如何处理以 `.vue` 为后缀的模块导入。在使用 `Vue.js` 进行项目开发, 尤其是结合 `TypeScript` 时,`Vue` 单文件组件(`.vue` 文件)需要有相应的类型定义, 以便 `TypeScript` 能够正确理解其结构和类型,这段声明就是起到这样的作用。但为什么导入其他组件没有出现这样的错误?我还没有找到原因所在。 --- --- url: /article/hf69s8vu/index.md --- # JetBrains Junie: 深度集成的 AI 编程助手尝鲜 Junie 的官网底部有一个图标,点击会启动贪吃蛇游戏。 @[bilibili](BV1C9hozhEVa) 不过嘛,跟 Claude、ChatGPT、Gemini 一样,在国内还是用不了的,需要一些魔法。 订阅可以到电商平台购买,官网价格不划算。我在 TB 买到的价格是 19 元子,包含整个 JetBrains Pack 和一个月的 AI Pro。 ![2025-09-20\_20-44-26.png](/blog-imgs/2025-09-20_20-44-26.png) AI Pro 版每个月限额 10 AI Credit,也就是 10 美元的 API 额度,不同模型单次耗额不同。后续加 Credits 也可以使用 PayPal 或者再去电商平台,在 JetBrains Account 操作。 和 GitHub Copilot 不同,Junie 默认为 Agent 编码模式,即基于项目的问答交互,而非单个文件。在高强度使用半个月后,问了大概 20 个问题额度耗尽,主要使用 Claude 4 模型,整体体验较好,下面聊一下使用体验。 ![2025-09-20\_20-25-16.png](/blog-imgs/2025-09-20_20-25-16.png) 只要输入我想要达到的效果,Junie 会自动生成对应的 `.html` 测试样例供我查看,例如首页的 canva 绘图就是反复确认了 4 个版本后才确定的,并不是它给出的结果不好,纯粹是我太挑剔了。后续开启 *Brave Mode* 后我就不需要在终端确认,Junie 会自动完成编码、测试任务。 当然,作为大陆网民,访问时遇到网络问题是在所难免的,好几次因为此都强制中断了对话。好在 Junie 支持本地私有化部署的大模型,右上角自助开启。 ![2025-09-20\_20-54-31.png](/blog-imgs/2025-09-20_20-54-31.png) ![2025-09-20\_20-56-23.png](/blog-imgs/2025-09-20_20-56-23.png) 总的来说,有待进步,在交互体验上没有达到预期,和同类竞品 Cursor, Trae 相比响应时间慢些,想来也和自己的网络有关。JBs 的底蕴在这儿,相信他们能针对性优化。 当然,它也支持 MCP,不过目前我没怎么用过 IDE 中的 MCP,后面有时间再看看。 --- --- url: /article/npn0jnls/index.md --- # 博客简介 ## 编写类型 博客大抵三类, 「学文」偏新手向,讲解较细致; 「技文」偏进阶向,内容专业,方便复盘; 「杂文」偏随笔向,可能涉及一些主观感受。 当然,这里的「新手」、「专业」是相较于昨天的「我」而言,学习过程中难免谬误与短见。 站点基于 pengzhanbo 开发的 [vuepress-plume-theme](https://github.com/pengzhanbo/vuepress-theme-plume) 主题,遵循 MIT 开源协议,感谢。 更新频率的话,如果不忙的情况下,每周至少会写一篇。 ## 编写规范 使用 *Markdown* 编写 ### 排版 遵循「中文排版规范」 ### 状态规范 设计状态组件,在大部分文章的上方可见,定义如下: * `draft`:草稿,尚未开始编写。 * `writing`:编写中,尚未完成初稿。 * `optimizing`:优化中,已完成初稿,正在润色与校对。 * `published`:已发布,已完成校对与发布。 * `archived`:已存档,内容过时或不再维护。 ## 个性化 ### 字体支持 支持字体选择、大小调整,推荐使用 Inter 或 Georgia,默认为 Georgia。 代码和 `` 设置为 JetBrains Mono ## 站点统计 * Vercount 阅读量统计 [Vercount](https://vercount.one) 给出的阅读量统计,每篇文章底部可见,显示 Loading 请刷新,开始统计于 2025-08-30。 --- --- url: /article/r2b9r7l2/index.md --- # Minecraft - 我的世界 我的ID是:rand777 --- --- url: /article/uw01sg5r/index.md --- # Typst:新一代文档排版工具 LaTeX 虽然强大,但语法晦涩难懂,复杂工程如「毕业设计」、「期刊论文」编译耗时较长,Typst 则是一款现代化的文档排版工具,语法简洁易学,支持实时预览,更适合写论文、报告、书籍等各种文档。 最重要的是,基于 Rust 语言开发的 Typst 拥有极高的性能,编译速度快,支持跨平台使用。许多高校、组织已经开始采用 Typst 作为主要的文档排版工具,这里记录下 Typst 的日常使用指南。 ## 安装 VS Code 打开终端,执行以下命令: ```shell winget install --id Typst.Typst ``` ## Typst 推荐插件 ```json { "recommendations": [ "myriad-dreamin.tinymist", "CalebFiggers.typst-companion", "surv.typst-math", "orangex4.vscode-typst-sync", "orangex4.vscode-typst-sympy-calculator" ] } ``` * typst companion * Tynimist Typst * Typst Sympy Calculator * Typst Sync * Typst Preview * Typst Math ## 我的配置文件 ```json { "[typst]": { "editor.formatOnSave": true, "editor.defaultFormatter": "myriad-dreamin.tinymist", "editor.wordSeparators": "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?" }, "tinymist.completion.triggerOnSnippetPlaceholders": true, "tinymist.exportPdf": "onDocumentHasTitle", "tinymist.formatterMode": "typstyle", "tinymist.lint.enabled": true, "tinymist.outputPath": "$dir/output/$name", "tinymist.preview.cursorIndicator": true, "tinymist.preview.invertColors": { "image": "never", "rest": "auto" } } ``` --- --- url: /hobby/correct-assets/bad-hobbies/index.md --- # 改掉这些坏习惯 学习自 [JavaGuide](https://javaguide.cn/high-quality-technical-articles/advanced-programmer/20-bad-habits-of-bad-programmers.html), 警钟长鸣。 ## 1、技术名词拼写不规范 无论是个人简历,还是技术文档,我经常看到拼写不规范的技术名词,例如 JAVA、javascript、python、MySql、Hbase、restful。 正确的拼写应该是 Java、JavaScript、Python、MySQL、HBase、RESTful,不要小看这个问题,很多面试官很有可能因为这一点刷掉你的简历。 ## 2、写文档,中英文混排不规范 中文描述使用英文标点符号,英文和数字使用了全角字符,中文与英文、数字之间没有空格等等。 其中很多人会忽视中文和英文、数字之间加一个「空格」,这样排版阅读起来会更舒服。之前我的文章排版,都是遵循了这些细节。 ## 3、重要逻辑不写注释,或写得很拖沓 复杂且重要的逻辑代码,很多程序员不写注释,除了自己能看懂代码逻辑,其他人根本看不懂。或者是注释虽然写了,但写得很拖沓,没有逻辑可言。 重要的逻辑不止要写注释,还要写得简洁、清晰。如果是一眼就能读懂的简单代码,可以不加注释。 ## 4、写复杂冗长的函数 一个函数几百行,一个文件上千行代码,复杂函数不做拆分,导致代码变得越来越难维护,最后谁也不敢动。 基本的设计模式还是要遵守的,例如单一职责,一个函数只做一件事,开闭原则,对扩展开放,对修改关闭。 如果函数逻辑确实复杂,也至少要保证主干逻辑足够清晰。 ## 5、不看官方文档,只看垃圾博客 很多人遇到问题不先去看官方文档,而是热衷于去看垃圾博客,这些博客的内容都是互相抄袭,错误百出。 其实很多软件官方文档写得已经非常好了,常见问题都能找到答案,认真读一读官方文档,比看垃圾博客强一百倍,要养成看官方文档的好习惯。 ## 6、宣扬内功无用论 有些人天天追求日新月异的开源项目和框架,却不肯花时间去啃一啃底层原理,常见问题虽然可以解决,但遇到稍微深一点的问题就束手无策。 很多高大上的架构设计,思路其实都源于底层。想一想,像计算机体系结构、操作系统、网络协议这些东西,经过多少年演进才变为现在的样子,演进过程中遇到的复杂问题比比皆是,理解了解决这些问题的思路,再看上层技术会变得很简单。 ## 7、乐于炫技 有些人天天把「高大上」的技术名词挂在嘴边,生怕别人不知道自己学了什么高深技术,嘴上乐于炫技,但别人一问他细节就会哑口无言。 ## 8、不接受质疑 自己设计的方案,别人提出疑问时只会回怼,而不是理性分析利弊,抱着学习的心态交流。 这些人学了点东西就觉得自己很有本事,殊不知只是自己见识太少。 ## 9、接口协议不规范 和别人定 API 协议全靠口头沟通,不给规范的文档说明,甚至到了测试联调时会发现,竟然和协商的还不一样,或者改协议了却不通知对接方,合作体验极差。 ## 10、遇到问题自己死磕 很初级程序员容易犯的问题,遇到问题只会自己死磕,拖到 deadline 也没有产出,领导来问才知道有问题解决不了。 有问题及时反馈才是对自己负责,对团队负责。 ## 11、一说就会,一写就废 平时技术方案吹得天花乱坠,一让他写代码就废,典型的眼高手低选手。 ## 12、表达没有逻辑,不站在对方角度看问题 讨论问题不交代背景,上来就说自己的方案,别人听得云里雾里,让你从头描述你又讲不明白。 学会沟通和表达,是合作的基础。 ## 13、不主动思考,伸手党 遇到问题不去 google,不做思考就向别人提问,喜欢做伸手党。 每个人的时间都很宝贵,大家都更喜欢你带着自己的思考来提问,一来可以规避很多低级问题,二来可以提高交流质量。 ## 14、经常犯重复的错误 出问题后说下次会注意,但下次问题依旧,对自己不负责任,说到底是态度问题。 ## 15、加功能不考虑扩展性 加新功能只关注某一小块业务,不考虑系统整体的扩展性,堆代码行为严重。 要学会分析需求和未来可能发生的变化,设计更通用的解决方案,降低后期开发成本。 ## 16、接口不自测,出问题不打日志 自己开发的接口不自测就和别人联调,出了问题又说没打日志,协作效率极低。 ## 17、提交代码不规范 很多人提交代码不写描述,或者写的是无意义的描述,尤其是修改很少代码时,这种情况会导致回溯问题成本变高。 制定代码提交规范,能让你在每一次提交代码时,不会做太随意的代码修改。 ## 18、手动修改生产环境数据库 直连生产环境数据库修改数据,更有 UPDATE / DELETE SQL 忘写 WHERE 条件的情况,产生数据事故。 修改生产环境数据库一定要谨慎再谨慎,建议操作前先找同事 review 代码再操作。 ## 19、没理清需求就直接写代码 很多程序员接到需求后,不怎么思考就开始写代码,需求和自己理解的有偏差,造成无意义返工。 多花些时间梳理需求,能规避很多不合理的问题。 ## 20、重要设计不写文档 重要的设计没有文档输出,和别人交接系统时只做口头描述,丢失关键信息。 有时候理解一个设计方案,一个好的文档要比看几百行代码更高效。 ## 总结 以上这些不良习惯,你命中几个呢?或者你身边有没有碰到这样的人? 我认为提早规避这些问题,是成为一个优秀程序员必须要做的。这些习惯总结起来大致分为这 4 个方面: * 良好的编程修养 * 谦虚的学习心态 * 良好的沟通和表达 * 注重团队协作 优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。 希望你我可以有则改之,无则加勉。 --- --- url: /hobby/journal-weekly/August-2025/index.md --- # August 2025 ## *Use of Artificial Intelligence tools in supporting decision-making in hospital management* ::: collapse expand * Click to expand or collapse @[pdf zoom="95" ratio="21:29"](/bibs/HCS02.pdf) ::: ## *Smart Healthcare: The Role of Digital Health in Modern Medicine* ### Summary Digital health is transforming healthcare by integrating advanced technologies to make healthcare more accessible, efficient, and personalized. From electronic health records, telemedicine, wearable devices, and artificial intelligence to the recent smart hospitals, digital health is improving patient care and outcomes while reducing healthcare costs. However, the integration of digital health faces several challenges, including data privacy, cybersecurity risks, and inequitable access to technology. This article provides an overview of the current state of digital health, key challenges in implementation, and potential solutions to maximize the benefits of digital health and ensure efficient, equitable, and patient‐centered healthcare in the future. ::: collapse expand * Click to expand or collapse @[pdf zoom="95" ratio="21:29"](/bibs/HCS01.pdf) ::: ## [*New Poll: Americans Say the U.S. Is in a Leadership Crisis*](https://www.usnews.com/news/articles/new-poll-trust-deficit-threatening-u-s-leadership) :::center *Americans are largely disappointed in leaders across public service, business, education and health care, according to a U.S. News survey.* ::: :::right Aug. 12, 2025, at 10:00 a.m. | US News survey ::: From the White House to the courthouse, the emergency room and the classroom, Americans are losing trust in institutions – ==illuminating==\[^1] a leadership crisis across the United States, according to a new survey by U.S. News and World Report. The disappointment is most acutely felt ==when it comes to==\[^2] public service leaders. More than 4 of 5 adults (85%) say government officials and other community leaders care more about their own power and influence than what is best for the people they represent. Trust in specific public institutions varies widely but reveals a relative bright spot when it comes to confidence in the Supreme Court. The distrust and ==disenchantment==\[^3] ==permeates==\[^4] other major ==sectors==\[^5] of society as well, with 73% disappointed in health care leaders, 72% disappointed in business leaders and 68% disappointed in education leaders. *“It's gotten really, really hard to be in leadership roles right now,”* says Columbia Business School Professor Michael Morris. *“It’s difficult work to be a leader. It's service to be a leader. It's not as fun to be a leader as it is to do a lot of other things that these people could do. It's become so fashionable in conversation and in our writing to ==tear down==\[^6] leaders, to try to expose them as ==buffoons==\[^7] or as ==malevolent==\[^8] actors.”* The poll\[^9] also asked what people look for in a good leader, and several key characteristics emerged across all types of leadership – particularly ==trustworthiness== and honesty. Other characteristics were unique to specific sectors. ==Respondents== identified the following desirable \==traits== in leaders: * Public service leaders: Loyal, ==authentic==\[^10], collaborative * Business leaders: Strategic, driven, innovative * Education leaders: Passionate, innovative, authentic * Health care leaders: Empathetic, passionate, innovative The poll was conducted by The Harris Poll in conjunction with [U.S. News' 2025 Best Leaders](https://www.usnews.com/news/best-leaders) in *America. U.S. News* gathered ==nominees==\[^11] for Best Leaders in four categories: health, education, business and public service. They will be ranked based on the attributes identified by the cross-section of Americans surveyed. *“Our method is unique from other rankings in a couple of critical ways,”* said Erica Parker, managing director at The Harris Poll. *“We began with a ==robust==\[^12] set of leadership characteristics and let the public tell us how important these were in defining a leader. We then let the data drive how these attributes grouped together to come up with characteristics that specific leaders are being rated on.”* The poll was conducted April 14-17 and reflects a nationally representative sample of 1,500 U.S. adults. From the poll’s results, *U.S. News* identified the following leadership personas: * Game-changer: Driven, strategic, innovative * Servant leader: Loyal, optimistic, generous, humble * \==Altruist==\[^13]: Empathetic, selfless * Bridge-builder: Collaborative, diplomatic, inclusive * Realist: Authentic, ==pragmatic==\[^14], analytical Politicians overwhelmingly ==come to mind first==\[^15] when Americans are asked about leaders (56%), but those surveyed had little positive to say. The public rated political leaders’ trustworthiness among the lowest of any leader group at 31%, and 75% said they have too much power. The ==vast majority== ( 87%) said there is a leadership crisis in public service, above the rates for health care (79%), education (79%) and business (72%). Across the public service sector (which includes politicians), 85% of respondents said leaders care more about their own power and influence than what’s best for the people they serve. The 2023 iteration of the U.S. News-Harris Poll survey, asking more specifically about politicians, found 75% believed politicians cared more about their own power and influence. In the latest survey, confidence in specific public institutions ranges, as two-thirds of the public trust the Supreme Court to act in the best interest of the American public, but less than half of respondents said the same of the Trump administration (47%) or Republicans in Congress (47%), who are now in the ==midst== of a summer ==recess==. Democrats in Congress didn’t ==fare much better== (52%). The leadership ==void== isn’t helped by the fact that most Americans don’t ==aspire to== follow in the leaders’ footsteps. More than 3 in 5 say they don’t see leaders today in any sector whom they aspire to emulate. The poll ==revealed== the public is particularly hesitant to trust political leaders and social media influencers (29% rated very or somewhat trustworthy). Community, military, nonprofit and education leaders were among those listed as most trustworthy, with 76-80% of respondents calling them very or somewhat trustworthy. \==Notably==, the poll found a ==divide== between who the public identified as leaders and who they considered to be trustworthy – ==underscoring== a potential desire for a different kind of leader. The types of individuals Americans think of as leaders are often rated the lowest in trustworthiness, while they give higher marks to entities they don’t often think of as leaders. This mirrored the poll’s findings that politicians and social media influencers are considered to have too much power, while education and nonprofit leaders don’t have enough. Other notable findings by sector: * In the public service sector, over 80% of the public says the current leaders aren't prepared to adequately respond to the new crises of today. ==Echoing this==, less than half of respondents say those leaders are effectively addressing key issues like health care access (49% agree), global competitiveness (48%), mental health and well-being (47%), climate change (46%), political division (45%) and trust in institutions (44%). * For the business landscape, 82% of respondents said that the values held by today’s business leaders don’t match those of everyday Americans. * When it comes to education, 7 in 10 people said leadership needs to be more diverse to represent the \==entirety== of the U.S., and three-quarters said having more diverse educational leaders would yield better outcomes. * The leadership crisis persists in the health care industry, with 77% of respondents saying that current health care leaders care more about their own power and influence than what’s best for the people they represent. In the coming weeks, ==a panel of experts== representing health care, education, business and public service will evaluate Best Leaders submissions from the public and *U.S. News* subject matter experts. The experts will rank nominees based on how well they align with the traits and key leadership characteristics identified in the survey. The final list will be our award winners. \[^1]: 此处理解为揭示, to shine light on something, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/illuminate?q=illuminate) \[^2]: 当提到 \[^3]: 幻灭, 就是觉得一件事不再值得去做, a lack of belief that something is good or worth doing, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/disenchantment) \[^4]: 渗透, to spread to every part of an object or a place, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/permeate) \[^5]: 此处应理解为阶级, a part of an area of activity, especially of a country’s economy, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/sector?q=sector) \[^6]: 推翻 \[^7]: 🤡, a person who does silly things that make people laugh, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/buffoon) \[^8]: 恶毒的, having or showing a desire to harm other people, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/malevolent) \[^9]: 民意调查, the process of questioning people who are representative of a larger group in order to get information about the general opinion, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/poll?q=poll) \[^10]: 真实的, known to be real and what somebody claims it is and not a copy, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/authentic) \[^11]: 提名者, a person who has been formally suggested for a job, a prize, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/nominee?q=nominee) \[^12]: 强大的,健康的, strong and healthy, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/robust) \[^13]: 利他主义者 \[^14]: 务实的,solving problems in a practical and sensible way rather than by having fixed ideas or theories, [OD reference](https://www.oxfordlearnersdictionaries.com/definition/english/pragmatic) \[^15]: 首先想到的是 \[^16]: 大多数 \[^17]: \[^18]: \[^19]: --- --- url: /hobby/journal-weekly/begin/index.md --- # Collects Motivation Each week I search web like *US News, Springer Nature, IEEE, web.dev* articles, and write a journal or summary in English. This is a good way to practice my English writing skills and learn new vocabulary, get to know the BIG in the world by the way. For advance or uncommon words, sentences and expressions, I use ==underlines== to highlight them, give out the *[Oxford Dictionary](https://www.oxfordlearnersdictionaries.com/)* definition, annotate \[+annotate] and add external relative links. This helps me remember the context and usage of those. \[+annotate]: You can click on the underlined words to see their definitions or explanations, may refer to [external links](/hobby/journal-weekly/begin/). --- --- url: /hobby/professional-words-spell/index.md --- # 正确地拼写与发音 ::: note 中国程序员容易发音、拼写错误的单词 数据来源 [chinese-programmer-wrong-pronunciation](https://github.com/shimohq/chinese-programmer-wrong-pronunciation) ::: 你说得对,我经常读错/不规范拼写。 是的,第一个单词我就读错了。(怪不好意思的) | 单词 | 正确发音(英音) | 正确发音(美音) | 错误发音 | |---------------|------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|-------------------------| | access | /'ækses/ @[audioReader](https://dict.youdao.com/dictvoice?audio=access\&type=1) | /ˈækses/ @[audioReader](https://dict.youdao.com/dictvoice?audio=access\&type=2) | ❌ /ək'ses/ | | Adobe | /ə'dəʊbi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Adobe\&type=1) | /ə'dəʊbi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Adobe\&type=2) | ❌ /əˈdub/ | | admin | /'ædmɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=admin\&type=1) | /ˈædmɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=admin\&type=2) | ❌ /ɜ:d'mɪn/ | | adversarial | /ˌædvəˈseəriəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=adversarial\&type=1) | /ˌædvərˈseriəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=adversarial\&type=2) | ❌ /ədˈvɜːrsəriəl/ | | agile | /'ædʒaɪl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=agile\&type=1) | /ˈædʒl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=agile\&type=2) | ❌ /ə'dʒaɪl/ | | amazon | /'æməzən/ @[audioReader](https://dict.youdao.com/dictvoice?audio=amazon\&type=1) | /ˈæməzɑːn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=amazon\&type=2) | ❌ /'əmeizən/ /ə'meizən/ | | analogy | /əˈnælədʒi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=analogy\&type=1) | /əˈnælədʒi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=analogy\&type=2) | ❌ /ænə'lɒdʒi/ | | Angular | /'æŋgjʊlə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Angular\&type=1) | /ˈæŋɡjələr/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Angular\&type=2) | ❌ /'æŋɡələ/ /'æŋdʒʌlə/ | | AJAX | /'eidʒæks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=AJAX\&type=1) | /'eidʒæks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=AJAX\&type=2) | ❌ /ə'dʒʌks/ | | alias | /ˈeɪliəs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=alias\&type=1) | /ˈeɪliəs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=alias\&type=2) | ❌ /ə'lais/ | | align | /əˈlaɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=align\&type=1) | /əˈlaɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=align\&type=2) | ❌ /ə'lidʒen/ | | Apache | /ə'pætʃɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Apache\&type=1) | /əˈpætʃi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Apache\&type=2) | ❌ /ʌpʌtʃ/ | | app | /æp/ @[audioReader](https://dict.youdao.com/dictvoice?audio=app\&type=1) | /æp/ @[audioReader](https://dict.youdao.com/dictvoice?audio=app\&type=2) | ❌ /eipi'pi/ | | archive | /'ɑːkaɪv/ @[audioReader](https://dict.youdao.com/dictvoice?audio=archive\&type=1) | /'ɑːkaɪv/ @[audioReader](https://dict.youdao.com/dictvoice?audio=archive\&type=2) | ❌ /'ətʃɪv/ | | array | /ə'rei/ @[audioReader](https://dict.youdao.com/dictvoice?audio=array\&type=1) | /əˈreɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=array\&type=2) | ❌ /æ'rei/ | | ASCII | /'æski/ @[audioReader](https://dict.youdao.com/dictvoice?audio=ascii\&type=1) | /ˈæski/ @[audioReader](https://dict.youdao.com/dictvoice?audio=ascii\&type=2) | ❌ /ɑːsk/ | | aspect | /'æspekt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=aspect\&type=1) | /ˈæspekt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=aspect\&type=2) | ❌ /ə'spekt/ | | async | /əˈsɪŋk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=async\&type=1) | /æˈsɪŋk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=async\&type=2) | ❌ /'æsɪŋk/ | | avatar | /'ævətɑː/ @[audioReader](https://dict.youdao.com/dictvoice?audio=avatar\&type=1) | /ˈævətɑːr/ @[audioReader](https://dict.youdao.com/dictvoice?audio=avatar\&type=2) | ❌ /ə'vʌtɑ/ | | Azure | /'æʒə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=azure\&type=1) | /ˈæʒər/ @[audioReader](https://dict.youdao.com/dictvoice?audio=azure\&type=2) | ❌ /ˈæzʊʒə/ | | Bazel | /ˈbeɪzəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=bazel\&type=1) | /ˈbeɪzəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=bazel\&type=1) | ❌ /bæ zəl/ | | bind | /baɪnd/ @[audioReader](https://dict.youdao.com/dictvoice?audio=bind\&type=1) | /baɪnd/ @[audioReader](https://dict.youdao.com/dictvoice?audio=bind\&type=2) | ❌ /bɪnd/ | | BIOS | /ˈbaɪɒs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=bios\&type=1) | /'baɪɑs/ | ❌ /ˈbɪɒs/ | | cache | /kæʃ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=cache\&type=1) | /kæʃ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=cache\&type=2) | ❌ /kætʃ/ | | canal | /kəˈnæl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=canal\&type=1) | /kəˈnæl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=canal\&type=2) | ❌ /ˈkænl/ | | chaos | /ˈkeɪɒs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=chaos\&type=1) | /ˈkeɪɑːs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=chaos\&type=2) | ❌ /ˈtʃoʊs/ | | Chrome | /krəʊm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=chrome\&type=1) | /kroʊm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=chrome\&type=2) | ❌ /tʃɔːm/ | | clang | /klæŋ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=clang\&type=1) | /klæŋ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=clang\&type=2) | ❌ /sɪlæŋ/ | | context | /ˈkɒntekst/ @[audioReader](https://dict.youdao.com/dictvoice?audio=context\&type=1) | / ˈkɑːntekst/ @[audioReader](https://dict.youdao.com/dictvoice?audio=context\&type=2) | ❌ /kənˈtekst/ | | Coq | IPA French \['kɔkʲ] 读若拼音“goq” @[audioReader](https://upload.wikimedia.org/wikipedia/commons/4/47/Fr-coq.ogg) | | ❌ IPA English \['kʰɒk] | | daemon | /'diːmən/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Daemon\&type=1) | /ˈdiːmən/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Daemon\&type=2) | ❌ /dæmən/ | | debt | /det/ @[audioReader](https://dict.youdao.com/dictvoice?audio=debt\&type=1) | /det/ @[audioReader](https://dict.youdao.com/dictvoice?audio=debt\&type=2) | ❌ /de'bit/ | | deny | /dɪ'naɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=deny\&type=1) | /dɪˈnaɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=deny\&type=2) | ❌ /'dæni/ | | deprecate | /ˈdeprəkeɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=deprecate\&type=1) | /ˈdeprəkeɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=deprecate\&type=2) | | | deque | /'dek/ @[audioReader](https://dict.youdao.com/dictvoice?audio=deque\&type=1) | /dɛk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=deque\&type=2) | ❌ /di'kju/ | | digest | n. /'dɑɪdʒɛst/ v. /dɑɪ'dʒɛst/ @[audioReader](https://dict.youdao.com/dictvoice?audio=digest\&type=1) | /daɪˈdʒest,dɪˈdʒest/ @[audioReader](https://dict.youdao.com/dictvoice?audio=digest\&type=2) | ❌ /'dɪgɛst/ | | Dijkstra | Dutch:/ˈdɛikstra/ English:/ˈdaɪkstrə/ @[audioReader](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg) | @[audioReader](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg) | | | Django | /ˈdʒæŋɡoʊ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Django\&type=1) | /ˈdʒæŋɡoʊ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Django\&type=2) | ❌ /diˈdʒæŋɡoʊ/ | | doc | /dɒk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=doc\&type=1) | /dɒk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=doc\&type=2) | ❌ /daʊk/ | | dotnet | /dɒtnet/ @[audioReader](https://dict.youdao.com/dictvoice?audio=dotnet\&type=1) | /dɑːtnet/ @[audioReader](https://dict.youdao.com/dictvoice?audio=dotnet\&type=2) | ❌ /daʊtnet/ | | edition | /ɪˈdɪʃ(ə)n/ @[audioReader](https://dict.youdao.com/dictvoice?audio=edition\&type=1) | /ɪˈdɪʃn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=edition\&type=2) | ❌ /eˈdɪʃn/ | | ephemeral | /ɪˈfemərəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=ephemeral\&type=1) | /ɪˈfemərəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=ephemeral\&type=2) | ❌ /efe'merəl/ | | epoch | /ˈiːpɒk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=epoch\&type=1) | /ˈepək/ @[audioReader](https://dict.youdao.com/dictvoice?audio=epoch\&type=2) | ❌ /'ɛpətʃ/ | | execute | /ˈeksɪkjuːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=execute\&type=1) | /ˈeksɪkjuːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=execute\&type=2) | | | executor | /ɪɡˈzekjətə(r)/ @[audioReader](https://dict.youdao.com/dictvoice?audio=executor\&type=1) | /ɪɡˈzekjətər/ @[audioReader](https://dict.youdao.com/dictvoice?audio=executor\&type=2) | | | event | /ɪ'vent/ @[audioReader](https://dict.youdao.com/dictvoice?audio=event\&type=1) | /ɪˈvent/ @[audioReader](https://dict.youdao.com/dictvoice?audio=event\&type=2) | ❌ /'ɪvənt/ | | exit | /ˈeksɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=exit\&type=1) | /ˈeksɪt; ˈeɡzɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=exit\&type=2) | ❌ /ig'zit/ | | facade | /fə'sɑːd/ @[audioReader](https://dict.youdao.com/dictvoice?audio=facade\&type=1) | /fəˈsɑːd/ @[audioReader](https://dict.youdao.com/dictvoice?audio=facade\&type=2) | ❌ /'feikeid/ | | fedora | /fɪ'dɔːrə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=fedora\&type=1) | /fɪˈdɔːrə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=fedora\&type=2) | ❌ /'fedərə/ | | format | /'fɔːmæt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=format\&type=1) | /ˈfɔːrmæt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=format\&type=2) | ❌ /fɔ'mæt/ | | gauge | /ɡeɪdʒ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=gauge\&type=1) | /ɡeɪdʒ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=gauge\&type=2) | ❌ /ɡɑudʒ/ | | Git | /ɡɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=git\&type=1) | /ɡɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=git\&type=2) | ❌ /dʒɪt/ | | GNU | /gnu:/ @[audioReader](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg) | /gnuː,gnjuː/ @[audioReader](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg) | | | Grafana | /grəˈfɑːnˌɑː/ @[audioReader](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3) | /grəˈfɑːnˌɑː/ @[audioReader](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3) | | | GraphQL | /græf kju ɛl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=GraphQL\&type=1) | /græf kju ɛl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=GraphQL\&type=2) | ❌ /dʒɪgræf kju ɛl/ | | GUI | /ˈɡu:i/ @[audioReader](https://dict.youdao.com/dictvoice?audio=GUI\&type=1) | /ˈɡu:i/ @[audioReader](https://dict.youdao.com/dictvoice?audio=GUI\&type=2) | | | Haskell | /ˈhæskəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=haskell\&type=1) | /ˈhæskəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=haskell\&type=2) | ❌ /hæˈskəl/ | | height | /haɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=height\&type=1) | /haɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=height\&type=2) | ❌ /heɪt/ | | hidden | /'hɪdn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=hidden\&type=1) | /ˈhɪdn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=hidden\&type=2) | ❌ /'haɪdn/ | | IEEE | /aɪ ˈtrɪpəl i/ @[audioReader](https://dict.youdao.com/dictvoice?audio=I_triple_e\&type=1) | /aɪ ˈtrɪpəl i/ @[audioReader](https://dict.youdao.com/dictvoice?audio=I_triple_e\&type=2) | ❌ /'aɪ'iː'iː'iː/ | | image | /'ɪmɪdʒ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=image\&type=1) | /ˈɪmɪdʒ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=image\&type=2) | ❌ /ɪ'meɪdʒ/ | | implement | /'ɪmplɪm(ə)nt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=implement\&type=1) | /ˈɪmplɪmənt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=implement\&type=2) /ˈɪmpləˌment/ | ❌ /ɪm'plem(ə)nt/ | | integer | /'ɪntɪdʒə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=integer\&type=1) | /ˈɪntɪdʒər/ @[audioReader](https://dict.youdao.com/dictvoice?audio=integer\&type=2) | ❌ /ˈɪntaɪgə/ | | issue | /'ɪʃuː/ @[audioReader](https://dict.youdao.com/dictvoice?audio=issue\&type=1) | /ˈɪʃuː/ @[audioReader](https://dict.youdao.com/dictvoice?audio=issue\&type=2) | ❌ /ˈaɪʃuː/ | | Java | /'dʒɑːvə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=java\&type=1) | /ˈdʒɑːvə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=java\&type=2) | | | jpg | /'dʒeɪpeɡ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=JPEG\&type=1) | /'dʒeɪpeɡ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=JPEG\&type=2) | ❌ /ˈdʒeɪˈpi:ˈdʒiː/ | | key | /kiː/ @[audioReader](https://dict.youdao.com/dictvoice?audio=key\&type=1) | /kiː/ @[audioReader](https://dict.youdao.com/dictvoice?audio=key\&type=2) | ❌ /kei/ | | kubernetes\* | /kubз'netɪs/ @[audioReader](https://content.swncdn.com/biblestudytools/audio/lexicons/greek-mp3/2942g.mp3) | /kuːbə˞'netiz/ @[audioReader](https://content.swncdn.com/biblestudytools/audio/lexicons/greek-mp3/2942g.mp3) | | | lambda | /ˈlæmdə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=lambda\&type=1) | /ˈlæmdə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=lambda\&type=2) | ❌ /ˈlɒŋmdɑ/ | | Ldap | /el'dæp/ @[audioReader](https://dict.youdao.com/dictvoice?audio=ldap\&type=1) | /el'dæp/ @[audioReader](https://dict.youdao.com/dictvoice?audio=ldap\&type=2) | ❌ /el'daːp/ | | legacy | /'leɡəsi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=legacy\&type=1) | /'leɡəsi/ @[audioReader](https://dict.youdao.com/dictvoice?audio=legacy\&type=2) | ❌ /'li:gasi/ | | linear | /'lɪnɪə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=linear\&type=1) | /ˈlɪniər/ @[audioReader](https://dict.youdao.com/dictvoice?audio=linear\&type=2) | ❌ /'laɪə/ | | LINQ | /lɪŋk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=link\&type=1) | /lɪŋk/ @[audioReader](https://dict.youdao.com/dictvoice?audio=link\&type=2) | ❌ /lɪŋkju:/ | | Linux | /'lɪnəks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=linux\&type=1) | /ˈlaɪnəks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=linux\&type=2) /ˈlɪnəks/ | ❌ /ˈlɪnʌks/ /ˈlɪnjuːks/ | | locale | /ləʊ'kɑːl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=locale\&type=1) | /loʊˈkæl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=locale\&type=2) | ❌ /ˈloʊk(ə)l/ | | Lucene | /lu'siːn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=lucene\&type=1) | /lu'siːn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=lucene\&type=2) | ❌ /'lu:sən/ | | macro | /ˈmækrəʊ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=macro\&type=1) | /ˈmækroʊ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=macro\&type=2) | ❌ /ˈmakroʊ/ | | main | /meɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=main\&type=1) | /meɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=main\&type=2) | ❌ /mɪn/ | | margin | /'mɑːdʒɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=margin\&type=1) | /ˈmɑːrdʒɪn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=margin\&type=2) | ❌ /'mʌgɪn/ | | matrix | /ˈmeɪtrɪks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=matrix\&type=1) | /ˈmeɪtrɪks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=matrix\&type=2) | ❌ /ˈmɑ:trɪks/ | | maven | /'meɪvn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=maven\&type=1) | /ˈmeɪvn/ @[audioReader](https://dict.youdao.com/dictvoice?audio=maven\&type=2) | ❌ /'maːvn/ | | max | /mæks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=max\&type=1) | /mæks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=max\&type=2) | ❌ /mɑ:ks/ | | Microsoft | /'maikrəusɔft/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Microsoft\&type=1) | /ˈmaɪkrəsɔːft/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Microsoft\&type=2) | ❌ /'mikrəusɔft/ | | migrate | /maɪˈɡreɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=migrate\&type=1) | /ˈmaɪɡreɪt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=migrate\&type=2) | ❌ /ˈmɪɡreɪt/ | | miscellaneous | /ˌmɪsəˈleɪniəs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=miscellaneous\&type=1) | /ˌmɪsəˈleɪniəs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=miscellaneous\&type=2) | | | module | /'mɒdjuːl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=module\&type=1) | /ˈmɑːdʒuːl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=module\&type=2) | ❌ /'məʊdl/ | | native | /ˈneɪtɪv/ @[audioReader](https://dict.youdao.com/dictvoice?audio=native\&type=1) | /ˈneɪtɪv/ @[audioReader](https://dict.youdao.com/dictvoice?audio=native\&type=2) | ❌ /ˈnætɪv/ | | nginx | Engine X | Engine X | | | null | /nʌl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=null\&type=1) | /nʌl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=null\&type=2) | ❌ /naʊ/ | | obsolete | /ˈɒbsəliːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=obsolete\&type=1) | /ˌɑːbsəˈliːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=obsolete\&type=2) | | | OS X | OS ten | OS ten | ❌ /ɔs eks/ | | phantom | /'fæntəm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=phantom\&type=1) | /ˈfæntəm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=phantom\&type=2) | ❌ /'pæntəm/ | | parameter | /pə'ræmɪtə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=parameter\&type=1) | /pəˈræmɪtər/ @[audioReader](https://dict.youdao.com/dictvoice?audio=parameter\&type=2) | ❌ /'pærəmɪtə/ | | premise | /ˈpremɪs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=premise\&type=1) | /ˈpremɪs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=premise\&type=2) | ❌ /prɪ'mɪs/ | | privilege | /'prɪvəlɪdʒ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=privilege\&type=1) | /ˈprɪvəlɪdʒ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=privilege\&type=2) | ❌ /'prɪvɪlɪdʒ/ | | probe | /prəʊb/ @[audioReader](https://dict.youdao.com/dictvoice?audio=probe\&type=1) | /proʊb/ @[audioReader](https://dict.youdao.com/dictvoice?audio=probe\&type=2) | ❌ /proʊbi/ | | Prometheus | /prə-ˈmē-thē-əs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=prometheus\&type=1) | /pro'miθɪəs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=prometheus\&type=2) | | | putty | /ˈpʌti/ @[audioReader](https://dict.youdao.com/dictvoice?audio=putty\&type=1) | /ˈpʌti/ @[audioReader](https://dict.youdao.com/dictvoice?audio=putty\&type=2) | ❌ /ˈpuːti/ | | Qt | /kjuːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=cute\&type=1) | /kjuːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=cute\&type=2) | | | query | /'kwɪəri/ @[audioReader](https://dict.youdao.com/dictvoice?audio=query\&type=1) | /ˈkwɪri/ @[audioReader](https://dict.youdao.com/dictvoice?audio=query\&type=2) | ❌ /'kwaɪri/ | | Realm | /relm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=realm\&type=1) | /relm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=realm\&type=2) | ❌ /riəlm/ | | reconcile | /ˈrekənsaɪl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=reconcile\&type=1) | /ˈrekənsaɪl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=reconcile\&type=2) | | | Redux | /ri'dʌks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=redux\&type=1) | /ri'dʌks/ @[audioReader](https://dict.youdao.com/dictvoice?audio=redux\&type=2) | ❌ /'ridju:ks/ | | resume | /rɪ'zju:m/ @[audioReader](https://dict.youdao.com/dictvoice?audio=resume\&type=1) | /rɪˈzuːm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=resume\&type=2) | ❌ /rɪ'sju:m/ | | résumé | /rezjumeɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=résumé\&type=1) | /ˈrezəmeɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=résumé\&type=2) | ❌ /rɪ'sju:m/ | | resolved | /rɪ'zɒlvd/ @[audioReader](https://dict.youdao.com/dictvoice?audio=resolved\&type=1) | /rɪˈzɑːlvd/ @[audioReader](https://dict.youdao.com/dictvoice?audio=resolved\&type=2) | ❌ /rɪ'səʊvd/ | | resort | /rɪˈzɔ:t/ @[audioReader](https://dict.youdao.com/dictvoice?audio=resort\&type=1) | /rɪˈzɔːrt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=resort\&type=2) | ❌ /rɪˈsɔ:t/ | | retina | /'retɪnə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=retina\&type=1) | /ˈretɪnə/ @[audioReader](https://dict.youdao.com/dictvoice?audio=retina\&type=2) | ❌ /ri'tina/ | | RISC-V | /'rɪsk faɪv/ @[audioReader](https://dict.youdao.com/dictvoice?audio=risk-five\&type=1) | /'rɪsk faɪv/ @[audioReader](https://dict.youdao.com/dictvoice?audio=risk-five\&type=2) | ❌ /'rɪsk v/ | | route | /ruːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=route\&type=1) | /ruːt,raʊt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=route\&type=2) | ❌ /rəʊt/ | | San Jose | /sænhəu'zei/ @[audioReader](https://dict.youdao.com/dictvoice?audio=san%20jose\&type=1) | /sænhəu'zei/ @[audioReader](https://dict.youdao.com/dictvoice?audio=san%20jose\&type=2) | ❌ /sæn'ju:s/ | | safari | /sə'fɑːrɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=safari\&type=1) | /səˈfɑːri/ @[audioReader](https://dict.youdao.com/dictvoice?audio=safari\&type=2) | ❌ /sæfərɪ/ | | scheme | /skiːm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=scheme\&type=1) | /skiːm/ @[audioReader](https://dict.youdao.com/dictvoice?audio=scheme\&type=2) | ❌ /s'kæmə/ | | scala | /ˈskɑːlɑ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=scala\&type=1) | /ˈskɑːlɑ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=scala\&type=2) | ❌ /ˈskæːlɑ/ | | segue | /'sɛɡwe/ @[audioReader](https://dict.youdao.com/dictvoice?audio=segue\&type=1) | /ˈseɡweɪ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=segue\&type=2) | ❌ /se'dʒ/ | | SQL | /ˈsiːkwəl/ /ˈesˈkjuːˈel/ | /ˈsiːkwəl/ /ˈesˈkjuːˈel/ | ❌ /sərk(ə)l/ | | sudo | /'suːduː/ | /'suːduː/ | | | suite | /swiːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=suite\&type=1) | /swiːt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=suite\&type=2) | ❌ /sjuːt/ | | telemetry | /təˈlemətri/ @[audioReader](https://dict.youdao.com/dictvoice?audio=telemetry\&type=1) | /təˈlemətri/ @[audioReader](https://dict.youdao.com/dictvoice?audio=telemetry\&type=2) | ❌ /ˈtelɪmətri/ | | thymeleaf | /ˈtaɪmˌlɪːf/ @[audioReader](https://dict.youdao.com/dictvoice?audio=thymeleaf\&type=1) | /ˈtaɪmˌlɪːf/ @[audioReader](https://dict.youdao.com/dictvoice?audio=thymeleaf\&type=2) | ❌ /θiːmɪlɪːf/ | | tuple | /tjʊpəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=tuple\&type=1) | /tuːpəl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=tuple\&type=2) | | | typical | /'tɪpɪkl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=typical\&type=1) | /ˈtɪpɪkl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=typical\&type=2) | ❌ /'taɪpɪkəl/ | | Ubuntu | /ʊ'bʊntʊ/ @[audioReader](https://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga) | /ʊ'bʊntʊ/ @[audioReader](https://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga) | ❌ /juː'bʊntʊ/ | | UEFI | U-E-F-I | U-E-F-I | ❌ /jufi/ /ɔːfi/ | | Vagrant | /ˈveɪɡrənt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Vagrant\&type=1) | /ˈveɪɡrənt/ @[audioReader](https://dict.youdao.com/dictvoice?audio=Vagrant\&type=2) | /ˈvagɹent/ | | variable | /'veəriəbl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=variable\&type=1) | /ˈveriəbl,ˈværiəbl/ @[audioReader](https://dict.youdao.com/dictvoice?audio=variable\&type=2) | ❌ /və'raiəbl/ | | verbose | /vɜːˈbəʊs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=verbose\&type=1) | /vɜːrˈboʊs/ @[audioReader](https://dict.youdao.com/dictvoice?audio=verbose\&type=2) | ❌ /'vɜːrboʊs/ | | vue | /v'ju:/ @[audioReader](https://dict.youdao.com/dictvoice?audio=vue\&type=1) | /v'ju:/ @[audioReader](https://dict.youdao.com/dictvoice?audio=vue\&type=2) | ❌ /v'ju:i/ | | width | /wɪdθ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=width\&type=1) | /wɪdθ,wɪtθ/ @[audioReader](https://dict.youdao.com/dictvoice?audio=width\&type=2) | ❌ /waɪdθ/ | | YouTube | /'juː'tjuːb/ @[audioReader](https://dict.youdao.com/dictvoice?audio=youtube\&type=1) | /'juː'tjuːb/ @[audioReader](https://dict.youdao.com/dictvoice?audio=youtube\&type=2) | ❌ /'juː'tʊbɪ/ | | Vite | /vit/ @[audioReader](https://dict.youdao.com/dictvoice?audio=vite\&type=1) | /vit/ @[audioReader](https://dict.youdao.com/dictvoice?audio=vite\&type=2) | ❌ /vaɪt/ | --- --- url: /learn/0nrvkjd8/index.md --- # JetBrains 系列 JetBrains 是一家知名的软件开发工具公司,提供了一系列强大的集成开发环境(IDE)和工具,支持多种编程语言和平台。 官方文档已经非常详细了,这里不再赘述,直接上链接: --- --- url: /learn/3m38blgy/index.md --- # Typst 「Rust 重写一切」,LaTeX 有不少毛病,比如大文档项目编译时间很长、报错返回弱、宏包停止维护等等,让无数开发者和学术界人士苦不堪言。而 Typst 的出现,正好弥补了 LaTeX 的不足。 * 语法简洁:上手难度跟 Markdown 相当,文本源码阅读性高,不会像 LaTeX 一样充斥着反斜杠与花括号。 * 编译速度快:Typst 使用 Rust 语言编写,即 typ(e+ru)st,目标运行平台是 WASM,即浏览器本地离线运行;也可以编译成命令行工具,采用一种增量编译算法和一种有约束的版面缓存方案,文档长度基本不会影响编译速度,且一般编译速度与常见 Markdown 渲染引擎渲染速度相当,在几十页以上的大文件的时候增量编译会比 Markdown 更快。 * 环境搭建简单:不需要像 LaTeX 一样折腾几个 G 的开发环境,原生支持中日韩等非拉丁语言,无论是官方 Web App 在线编辑,还是使用 VS Code 安装 Typst LSP 和 Typst Preview 插件进行本地开发,都是开箱即用。 * 现代编程语言:Typst 是可用于出版的可编程标记语言,拥有变量、函数、包管理与错误检查等现代编程语言的特性,同时也提供了闭包等特性,便于进行函数式编程。以及包括了 \[标记模式]、{脚本模式} 与 $ 数学模式 $ 等多种模式的作用域,并且它们可以不限深度地、交互地嵌套。通过包管理,你不再需要像 TexLive 一样在本地安装一大堆并不必要的宏包,而是按需自动从云端下载。 希望学术界尽早接受 Typst 格式,相较下 LaTeX 已经落后,历史包袱是其最后的优点了。 安装相对简单,可以参考官方文档的 [安装指南](https://github.com/typst/typst),也可以直接使用 Web App 在线编辑器 [typst.app](https://typst.app)。 --- --- url: /learn/5tafj6qc/index.md --- # GitLab GitLab 在国内叫「极狐」,和 logo 挺搭的,相较于其他平台,GitLab 的交互目的性更强,围绕代码存储和业务展开,失去了 GitHub 那样的「社交属性」。 GitLab 最大的好处是可以自行部署,安全性高。CE 和 EE 版、科学许可证官方文档都有,我若干月前写了一篇自行部署 GitLab EE 的博客,其实就是跟着官方文档走一遍。 --- --- url: /learn/8aqvyhnx/index.md --- # AutoMQ --- --- url: /learn/984t18vg/index.md --- # Calculus「微积分」 * Video Resource: ## ECharts 3D Surface Plot Example ::: echarts 3D Curve Surface Plot Example ```js await window.__echartsGlReady; var data = []; var min = -1, max = 1, step = 0.05; for (var x = min; x <= max; x += step) { for (var y = min; y <= max; y += step) { var z = Math.sin(x * Math.PI) * Math.sin(y * Math.PI); data.push([x, y, z]); } } option = { tooltip: {}, backgroundColor: 'transparent', visualMap: { show: false, dimension: 2, min: -1, max: 1, inRange: { color: [ '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026' ] } }, xAxis3D: { type: 'value' }, yAxis3D: { type: 'value' }, zAxis3D: { type: 'value' }, grid3D: { viewControl: {}, boxHeight: 80 }, series: [{ type: 'surface', wireframe: {}, data: data }] }; setTimeout(function () { var dom = myChart.getDom(); var wrapper = dom.parentElement; wrapper.style.position = 'relative'; var btnCss = 'padding:4px 8px;cursor:pointer;border:1px solid #ccc;border-radius:4px;background:rgba(255,255,255,0.85);font-size:12px;line-height:1.4'; var bar = document.createElement('div'); bar.style.cssText = 'position:absolute;top:6px;right:6px;z-index:10'; wrapper.appendChild(bar); }, 100); ``` ::: :::echarts ```js await window.__echartsGlReady; var data = []; for (var i = 0; i <= 20; i++) { for (var j = 0; j <= 20; j++) { for (var k = 0; k <= 20; k++) { var value = Math.sin(i / 3) * Math.cos(j / 3) * Math.sin(k / 3) + Math.cos(i / 5) * Math.sin(j / 5) * Math.cos(k / 5) + 4; data.push([i, j, k, value]); } } } option = { visualMap: { show: false, min: 2, max: 6, inRange: { symbolSize: [0.5, 25], color: [ '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026' ], colorAlpha: [0.2, 1] } }, xAxis3D: { type: 'value' }, yAxis3D: { type: 'value' }, zAxis3D: { type: 'value' }, grid3D: { axisLine: { lineStyle: { color: '#fff' } }, axisPointer: { lineStyle: { color: '#fff' } } }, series: [{ type: 'scatter3D', data: data }] }; ``` ::: --- --- url: /learn/academic-road/index.md --- # 你真的爱「科研」吗? 科研这条路,比想象中难很多。如果导师乐意帮助你,就如在黑夜中灯塔亮起,但,海面的波涛汹涌仍需自己面对。 本科时,我们每个人只需按部就班,完成任务就达到了学校的要求。研究生以上的科研,路大概率是要自己走的,特别是「博士研究生」,需要在一个极度细致的领域深耕 4-8 年。 科研的过程,往往伴随着孤独与挫折。你可能会遇到实验失败、数据不理想、论文被拒等情况,这些都需要你有足够的心理准备和坚韧的毅力去面对。 加油吧,研究生!就算是在学历贬值的大背景下,科研的能力依然是非常宝贵的。无论你未来选择继续深造还是进入职场,科研经历都会为你提供独特的视角和解决问题的能力。 对于钻研机器学习的研究生们,这里推荐西湖大学「[科学模拟与发现的 AI 实验室](https://ai4s.lab.westlake.edu.cn/)」旗下的科研工具推荐,相信对你有所帮助,具体请查看 GitHub 仓库。 --- --- url: /learn/backend/index.md --- # 「服务器端」开发 「后端开发」是指 Web 开发的服务器端方面,专注于创建和管理服务器逻辑、数据库和 API。它涉及处理用户身份验证、授权和处理用户请求,通常使用 Python、Java、Ruby、PHP、JavaScript (Node.js) 和 .NET 等后端开发语言 。 后端开发人员专注于创建和维护 Web 应用程序的服务器端组件。他们的主要任务是开发服务器端 API、处理数据库作并确保后端能够有效地管理高流量。主要职责包括集成支付网关和云服务等外部服务,以及增强系统的性能和可扩展性。该角色对于处理和保护数据至关重要,是支持前端开发人员提供无缝用户体验的支柱。 后端框架是为 Web 应用程序的服务器端提供支持的框架。他们负责管理数据、处理请求以及生成对应用程序客户端的响应。一些最流行的后端框架包括 Django for Python、Ruby on Rails for Ruby、Spring Boot for Java 和 Gin for Go。 这些框架与 PostgreSQL、MySQL 和 MongoDB 等数据库以及 Docker、Kubernetes 和 Jenkins 等工具配合使用。后端框架与其他服务器端组件协同工作,以创建用户在 Web 应用程序的客户端上与之交互的功能。 如果你是一个刚刚入门的初学者,你可以从学习后端编程语言开始,如 Python、Ruby、Java、Go 等。一旦您对该语言有了基本到中级的了解,请了解该语言的「包管理器」,并了解如何在应用程序中安装和使用外部包。学习一些关系数据库(例如 PostgreSQL)的基础知识,并学习如何运行简单的 CRUD 作。或者,您也可以为所选语言学习 Web 框架。了解如何构建一个简单的 RESTful API 并在其中实现简单的身份验证/授权。在学习上述所有项目时,不要忘记了解 Git 和 GitHub。 --- --- url: /learn/backend/api/auth/JWT/index.md --- # JWT JSON Web 令牌 (JWT) 是一种开放标准 ([RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519)),它定义了一种紧凑且独立的方式,用于在各方之间安全地将信息作为 JSON 对象传输。此信息是经过数字签名的,因此可以验证和信任。JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥 / 私钥对进行签名。 尽管 JWT 可以加密以在各方之间提供保密性,但我们将重点关注签名令牌。签名令牌可以验证其中包含的声明的完整性 ,而加密令牌则对其他方隐藏这些声明。当使用公钥 / 私钥对对令牌进行签名时,签名还证明只有持有私钥的一方是签名者。 ## 实操案例 ### Node.js 实现 JWT @[youtube](mbsmsi7l3r4) VS Code Shell 初始化项目 ```shell mkdir auth-jwt-tutorial npm init -y ``` 安装 Express 框架、JWT 以及虚拟环境管理工具 ```shell npm i express jsonwebtoken dotenv ``` 安装开发依赖,热重载 Node 的 nodemon ```shell npm i --save-dev nodemon ``` --- --- url: /learn/backend/api/styles/JSON/index.md --- # JSON https://jsonapi.org/ @[youtube](N-4prIh7t38) --- --- url: /learn/backend/api/styles/REST/index.md --- # RESTful @[youtube](-mN3VyJuCjM) * visit: REpresentational State Transfer, 即「表现层状态转移」,是一种软件架构风格,通常用于分布式系统中的网络应用程序设计。RESTful API 是基于 REST 架构风格的 API,使用 HTTP 协议进行通信。 举个例子,使用 shell 命令 `curl` 访问 ITuns RESTful API: ```shell curl -i 'https://itunes.apple.com/search?term=radiohead&media=music&limit=3' ``` 或者本博客的 [访问统计](https://events.vercount.one/api/v2/log?url=http://blog.rand777.space) 返回了类似以下 JSON 响应: ```json { "resultCount": 3, "results": [ { "wrapperType": "track", "kind": "song", "artistId": 657515, "collectionId": 1109714933, "trackId": 1109715066, "artistName": "Radiohead", "collectionName": "In Rainbows", "trackName": "15 Step", "collectionCensoredName": "In Rainbows", "trackCensoredName": "15 Step", "artistViewUrl": "https://music.apple.com/us/artist/radiohead/657515?uo=4", "collectionViewUrl": "https://music.apple.com/us/album/15-step/1109714933?i=1109715066&uo=4", "trackViewUrl": "https://music.apple.com/us/album/15-step/1109714933?i=1109715066&uo=4", "previewUrl": "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/af/72/85/af728523-8048-4a8b-9e13-e8f4f64e9d69/mzaf_8205306206851675436.plus.aac.p.m4a", "artworkUrl30": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/30x30bb.jpg", "artworkUrl60": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/60x60bb.jpg", "artworkUrl100": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/100x100bb.jpg", "collectionPrice": 9.99, "trackPrice": 1.29, "releaseDate": "2007-10-10T07:00:00Z", "collectionExplicitness": "notExplicit", "trackExplicitness": "notExplicit", "discCount": 1, "discNumber": 1, "trackCount": 10, "trackNumber": 1, "trackTimeMillis": 237293, "country": "USA", "currency": "USD", "primaryGenreName": "Alternative", "isStreamable": true }, { "wrapperType": "track", "kind": "song", "artistId": 657515, "collectionId": 1109714933, "trackId": 1109715161, "artistName": "Radiohead", "collectionName": "In Rainbows", "trackName": "Bodysnatchers", "collectionCensoredName": "In Rainbows", "trackCensoredName": "Bodysnatchers", "artistViewUrl": "https://music.apple.com/us/artist/radiohead/657515?uo=4", "collectionViewUrl": "https://music.apple.com/us/album/bodysnatchers/1109714933?i=1109715161&uo=4", "trackViewUrl": "https://music.apple.com/us/album/bodysnatchers/1109714933?i=1109715161&uo=4", "previewUrl": "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/ba/e4/ac/bae4ac59-3bfa-e4b9-4f4c-03f667324fc0/mzaf_14837742185575446625.plus.aac.p.m4a", "artworkUrl30": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/30x30bb.jpg", "artworkUrl60": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/60x60bb.jpg", "artworkUrl100": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/100x100bb.jpg", "collectionPrice": 9.99, "trackPrice": 1.29, "releaseDate": "2007-10-10T07:00:00Z", "collectionExplicitness": "notExplicit", "trackExplicitness": "notExplicit", "discCount": 1, "discNumber": 1, "trackCount": 10, "trackNumber": 2, "trackTimeMillis": 242293, "country": "USA", "currency": "USD", "primaryGenreName": "Alternative", "isStreamable": true }, { "wrapperType": "track", "kind": "song", "artistId": 657515, "collectionId": 1109714933, "trackId": 1109715168, "artistName": "Radiohead", "collectionName": "In Rainbows", "trackName": "Weird Fishes / Arpeggi", "collectionCensoredName": "In Rainbows", "trackCensoredName": "Weird Fishes / Arpeggi", "artistViewUrl": "https://music.apple.com/us/artist/radiohead/657515?uo=4", "collectionViewUrl": "https://music.apple.com/us/album/weird-fishes-arpeggi/1109714933?i=1109715168&uo=4", "trackViewUrl": "https://music.apple.com/us/album/weird-fishes-arpeggi/1109714933?i=1109715168&uo=4", "previewUrl": "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/6c/e9/79/6ce9792e-c06a-b49b-6efe-60b96a690af8/mzaf_5478326228427438939.plus.aac.p.m4a", "artworkUrl30": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/30x30bb.jpg", "artworkUrl60": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/60x60bb.jpg", "artworkUrl100": "https://is2-ssl.mzstatic.com/image/thumb/Music115/v4/9a/4f/8a/9a4f8a4b-0254-d5ab-74b5-ebe39bbbe85d/634904032463.png/100x100bb.jpg", "collectionPrice": 9.99, "trackPrice": 1.29, "releaseDate": "2007-10-10T07:00:00Z", "collectionExplicitness": "notExplicit", "trackExplicitness": "notExplicit", "discCount": 1, "discNumber": 1, "trackCount": 10, "trackNumber": 4, "trackTimeMillis": 318187, "country": "USA", "currency": "USD", "primaryGenreName": "Alternative", "isStreamable": true } ] } ``` ## 六大约束 REST 架构风格描述了六个约束条件。 ### 1 统一接口 统一接口约束定义了客户端与服务器之间的接口。它简化并解耦架构,使每个部分能够独立演进。统一接口的四个指导原则是: 1. 基于资源的:在请求中,使用 *URI* 作为资源标识符来识别单个资源。资源本身在概念上与返回给客户的表示是分开的。例如,服务器不发送数据库,而是发送一些 HTML、XML 或 JSON,这些记录代表某些数据库记录,例如用芬兰语表达并以 UTF-8 编码,具体取决于请求细节和服务器实现。 2. 通过表征作资源: 当客户端持有资源表示,包括附加的任何元数据时,只要有权限,它就拥有足够的信息修改或删除服务器上的资源。 3. 自我描述信息: 每条消息都包含足够的信息来描述如何处理该消息。例如,调用哪个解析器可以通过互联网媒体类型(以前称为 MIME 类型)来指定。响应也会明确表示其可缓存性。 4. 超媒体作为应用状态引擎:客户端通过正文内容、查询字符串参数、请求头部和请求的 URI(资源名称)传递状态。服务通过正文内容、响应代码和响应头向客户端传递状态。这在技术上被称为超媒体(或超文本中的超链接)。 ### 2 无状态 由于 REST 是再表述状态转移(REpresentational State Transfer)的缩写,无状态性是关键。本质上,这意味着处理请求所需的状态包含在请求本身,无论是作为 URI、查询字符串参数、正文还是头部的一部分。URI 唯一标识资源,主体包含该资源的状态(或状态变化)。然后,在服务器完成处理后,适当的状态或重要的状态片段会通过头部、状态和响应正体传回给客户端。 ### 3 可缓存 与万维网一样,客户端可以缓存响应。因此,响应必须隐式或显式地定义自己是否可缓存,以防止客户端在响应进一步请求时重复使用过时或不合适的数据。良好管理的缓存部分或完全消除部分客户端 - 服务器交互,进一步提升可扩展性和性能。 ### 4 客户端 - 服务器分离 统一的接口将客户端与服务器分开。这种关注点的分离意味着,例如客户端无需关注数据存储,数据存储仍存储在每个服务器内部,从而提升客户端代码的可移植性。服务器不关心用户界面或用户状态,因此服务器可以更简单、更具可扩展性。服务器和客户端也可以被替换和独立开发,只要接口不被更改。 ### 5 分层系统 客户端通常无法判断自己是直接连接到终端服务器,还是连接到途中的中介。中介服务器可以通过支持负载均衡和提供共享缓存来提升系统可扩展性。层级也可以强制执行安全策略。 ### 6 按需代码(可选) 服务器可以通过传输可执行的逻辑来临时扩展或定制客户端的功能。例如编译组件如 Java 小程序和客户端脚本如 JavaScript。 ## REST 快速入门 ### HTTP Methods API 使用者能够发送 GET、POST、PUT、PATCH 和 DELETE 方法(或动词),这大大提升了请求的清晰度。因此,建议 URL 中不出现动词(动作词)。相反,利用 HTTP 方法来提供动词。 通常,五种主要的 HTTP 方法如下: | 方法 | 描述 | |--------|----------------------------------------------------| | GET | 通过标识符读取特定资源或资源集合。 | | PUT | 用标识符替换特定资源或资源集合。如果资源标识符事先已知,也可以用于创建特定资源。 | | PATCH | 通过标识符更新特定资源或资源集合。这在某种程度上可以看作是“部分更新”,而替换则是 PUT 执行的。 | | DELETE | 通过标识符移除 / 删除特定资源。 | | POST | 创建一个新的资源。也是一个涵盖不属于其他类别的作的通用动词。 | ### 取个好名字 制作一个优秀的 API 需要 80% 的艺术和 20% 的科学。创建代表合理资源的 URL 层级是艺术部分。拥有合理的资源名称(即 URL 路径,如 /customers/12345/orders)能提高对请求功能的清晰度。由于人类参与理解 API,这种清晰度非常重要。 以下是一些命名资源的建议: * 在你的 URL 中使用标识符,而不是在查询字符串中。使用 URL 查询字符串参数对过滤非常有效,但用于资源名称就不行。 * Good: /users/12345 * Poor: /api?type=user\&id=23 * 利用 URL 的层级性质来暗示结构。 * 设计是为客户而非数据。 * 资源名称应为名词。避免将动词作为资源名称,以提高清晰度。使用 HTTP 方法指定请求中的动词部分。 * 在 URL 段中使用复数,以保持所有 HTTP 方法中 API URI 的一致性,使用集合的比喻。 * Recommended: /customers/33245/orders/8769/lineitems/1 * Not: /customer/33245/order/8769/lineitem/1 * 避免在 URL 中使用集合式的措辞。比如用“customer\_list”作为资源。使用复数表示集合隐喻(例如客户与 customer\_list)。 * 在 URL 段中使用小写字母,用下划线 ('\_') 或连字符('-')分隔单词。有些服务器会忽略大写,所以最好说清楚。 * 尽量保持网址简短,尽可能少的分段。 ### HTTP Status Codes 响应状态码是 HTTP 规范的一部分。针对最常见的情况,有相当多的选择。为了让我们的 RESTful 服务拥抱 HTTP 规范,我们的 Web API 应返回相关的 HTTP 状态码。例如,当资源成功创建(例如通过 POST 请求)时,API 应返回 HTTP 状态码 201。这里提供了一份有效的 HTTP 状态码列表,详细描述了每个代码。 “Top 10” HTTP 响应状态码的建议用法如下: | 状态码 | 描述 | |---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| | 200 OK | 通用成功状态代码。这是最常见的代码。用来表示成功。 | | 201 CREATED | 成功创建(通过 POST 或 PUT)。将位置头设置为包含指向新创建资源的链接(在 POST 上)。回应正文内容可能存在也可能不存在。 | | 204 NO CONTENT | 表示成功,但响应正体中没有任何内容,通常用于删除和执行。 | | 400 BAD REQUEST | 当满足请求时,会出现无效状态的通用错误。域名验证错误、缺失数据等是一些例子。 | | 401 UNAUTHORIZED | 因缺少或无效认证令牌而出现错误代码响应。 | | 403 FORBIDDEN | 当用户未被授权执行作或资源因时间限制等原因不可用时,错误代码。 | | 404 NOT FOUND | 当请求的资源未被找到时,无论该资源不存在,还是存在 401 或 403,出于安全原因服务想要隐藏。 | | 405 METHOD NOT ALLOWED | 用于表示请求的 URL 存在,但请求的 HTTP 方法不适用。例如,POST /users/12345,API 不支持以这种方式创建资源(并提供 ID)。返回 405 时必须设置 Allow HTTP 头,以表示支持的 HTTP 方法。在之前的情况中,头部看起来像“允许:GET, PUT, DELETE” | | 409 CONFLICT | 每当满足请求时会引发资源冲突。重复条目,比如尝试创建两个拥有相同信息的客户,以及在不支持级联删除时删除根对象,都是例子。 | | 500 INTERNAL SERVER ERROR | 服务器端抛出异常时的通用错误。 | ### JSON 优先 除非你所在的行业高度标准化且受监管,需要 XML、模式验证和命名空间,否则建议优先支持 JSON。如果必须同时提供 JSON 和 XML,允许用户使用 HTTP Accept 头在格式间切换:`application/json` 或 `application/xml`。 ### 小而美 刚开始时,最好创建模拟系统底层应用域或数据库架构的 API。最终,你会需要利用多种底层资源来减少聊天的聚合服务。然而,从单个资源中以后创造更大资源要比从较大聚合中创造细粒度或单个资源要容易得多。让自己轻松点,从小而易定义的资源开始,并在这些资源上提供 CRUD 功能。你可以以后创建那些以用例为导向、减少聊天内容的资源。 ## HTTP Methods in Practice ### POST POST 动词最常用于创建新的资源。特别是用来创建从属资源。也就是说,它从属于其他(例如父)资源。换句话说,创建新资源时,POST 给父资源,服务负责将新资源与父资源关联,分配 ID(新资源 URI)等。 成功创建后,返回 HTTP 状态 201,返回一个位置头部,并返回指向新创建资源的链接,该资源为 201 HTTP 状态。 POST 既不安全,也不等于幂等。因此,推荐用于非幂零资源请求。发送两个相同的 POST 请求,很可能会得到两个包含相同信息的资源。 ### GET HTTP GET 方法用于读取 (或检索)资源的表示。在“满意”(或非错误)路径中,GET 返回 XML 或 JSON 表示和 HTTP 响应码 200(OK)。在错误情况下,通常返回 404(未找到)或 400(错误请求)。 根据 HTTP 规范的设计,GET 请求(以及 HEAD)仅用于读取数据,不能更改数据。因此,以这种方式使用时,它们被认为是安全的。也就是说,调用它们时不会有数据篡改或损坏的风险——调用一次的效果等同于调用 10 次,甚至完全不调用。此外,GET 和 HEAD 是幂冪等的,这意味着多次发送相同请求的结果与单一请求相同。 不要通过 GET 暴露不安全的操作——它绝不应修改服务器上的任何资源。 ### PUT PUT 最常用于更新功能,即对已知资源 URI 进行 PUT,请求体包含原始资源的新更新表示。 然而,在资源 ID 由客户端选择而非服务器时,PUT 也可用于创建资源。换句话说,如果 PUT 是指向包含不存在资源 ID 值的 URI。同样,请求体包含资源表示。许多人觉得这很复杂且让人困惑。因此,这种创作方法应当谨慎使用,甚至根本不使用。 或者,使用 POST 创建新资源,并在正文表示中提供客户端定义的 ID——大概是给不包含资源 ID 的 URI(见上文 POST)。 成功更新后,从 PUT 返回 200(若不返回正文内容则返回 204)。如果使用 PUT 创建,成功创建时返回 HTTP 状态 201。响应中的正体是可选的——前提是其中一个会消耗更多带宽。在创建情况下,无需通过 Location 头返回链接,因为客户端已经设置了资源 ID。 PUT 不是一个安全的操作,因为它修改(或创建)服务器上的状态,但它是幂等的。换句话说,如果你用 PUT 创建或更新一个资源,然后再次调用同样的调用,资源依然存在,状态和第一次调用时一样。 例如,如果调用资源上的 PUT 会递增资源中的计数器,那么该调用不再是幂等的。有时确实会发生这种情况,这可能就足以证明该呼声不是幂级的。不过,建议将 PUT 请求保持幂等。强烈建议非幂等元请求使用 POST。 ### PATCH PATCH 用于修改功能。PATCH 请求只需包含资源的变更,而不必包含完整的资源。 这类似于 PUT,但主体包含一组指令,描述当前服务器上的资源应如何修改以生成新版本。这意味着 PATCH 主体不应仅仅是资源的修改部分,而是应以某种补丁语言形式存在,如 JSON Patch 或 XML Patch。 PATCH 既不安全,也不等于幂律。然而,PATCH 请求可以以幂等的方式发出,这也有助于防止同一资源上在相似时间内发生两次 PATCH 请求碰撞的不良结果。多重 PATCH 请求的碰撞可能比 PUT 碰撞更危险,因为某些补丁格式必须从已知基点运行,否则会破坏资源。使用此类补丁应用的客户端应使用条件请求,使得如果资源自客户端上次访问以来已被更新,请求将失败。例如,客户端可以在 PATCH 请求的 If-Match 头中使用强 ETag。 ### DELETE DELETE 其实很容易理解。它用于删除由 URI 识别的资源。 成功删除后,返回 HTTP status 200(OK),并返回响应正体,可能是已删除项的表示(通常带宽过大),或是包裹响应(见下文返回值)。要么返回 HTTP 状态 204(无内容),且没有响应正体。换句话说,推荐的响应是无正体的 204 状态,或者 JSEND 风格的响应和 HTTP 状态 200。 从 HTTP 规范角度看,DELETE 作是幂等的。如果你删除了一个资源,它就会被移除。反复调用该资源的 DELETE 结果也是一样:资源消失了。如果调用 DELETE 时,比如在资源中递减计数器,则 DELETE 调用不再是幂等元。如前所述,使用统计和测量数据可以更新,同时仍视服务为幂级,只要资源数据不被更改。建议对非幂零资源请求使用 POST。 不过,关于删除幂等性有一个警告。第二次调用资源的 DELETE 通常会返回 404(未找到),因为该资源已被移除,因此无法再被查找。据某些观点,这使得 DELETE 作不再是幂等的,但资源的终极状态是相同的。退回 404 是可以接受的,并且准确传达了通话状态。 ## 怎么取个好名字 Inspirations could be found at: ## 啊?幂等? 幂等性是一个有趣的词,常常吸引人。幂等性有时是一个令人困惑的概念,至少从学术定义来看是这样。 从 RESTful 服务的角度来看,为了使作(或服务调用)成为幂零,客户端可以反复执行相同调用,同时产生相同的结果。换句话说,发送多个相同的请求与发送单一请求的效果相同。注意,虽然幂等等作在服务器上产生相同结果(无副作用),但响应本身可能不同(例如资源状态在请求间可能发生变化)。 PUT 和 DELETE 方法被定义为幂等。不过,删除有个警告。DELETE 的问题是,如果成功,通常会返回 200(OK)或 204(无内容),但后续调用时往往会返回 404(未找到),除非服务配置为“标记”删除资源但未实际删除。然而,当服务实际删除该资源时,下一次调用找不到该资源来删除它,也不会返回 404。然而,每次 DELETE 调用后服务器上的状态是相同的,但响应不同。 > 确保 PUT 和 DELETE HTTP 方法的 API 实现保持幂等性。 GET、HEAD、OPTIONS 和 TRACE 方法被定义为安全 ,意味着它们仅用于检索数据(因此不修改数据)。这也使它们成为幂零的,因为多个相同的请求会表现相同。 ## 安全 HTTP 规范中将安全性定义为一种不修改服务器资源的方法。当客户端使用安全方法发出请求时,服务器不应产生任何副作用。被认为“安全”的 HTTP 方法包括 GET、HEAD、OPTIONS 和 TRACE。 使用安全方法的关键好处是它们可缓存且幂零。 特别是 GET 请求可以通过缓存来提升性能。这意味着多个相同的 GET 请求应该会返回相同的响应。安全方法也是幂等方法,意味着多次发送同一请求在服务器端会产生相同的结果。 对于 API 和 Web 服务,尽量使用安全方法是最佳实践。例如,GET 应用于检索资源,OPTIONS 可用于检索元数据,等等。不安全的方法如 POST、PUT、PATCH 和 DELETE 会修改数据,因此不可缓存或幂零 。 保持方法安全有助于提升网络服务的可扩展性、缓存和整体可靠性。它还防止客户端多次意外发送非幂等请求所带来的意外后果。采用主要安全方法设计的 API 更容易缓存和横向扩展。 总之,安全的 HTTP 方法避免修改服务器状态,这带来了幂等和可缓存性等好处。正确使用安全方法是 API 设计的重要方面。它提升了性能、可扩展性,并防止客户端非幂等元请求的问题。 ## Dive Deeper ### 重试 Retry 部分 HTTP 状态码表示暂时性问题,可能随着时间解决,因此非常适合调用客户端自动重试。实现这些重试可以增强分布式 API 系统的韧性和可靠性。 应触发自动重试的 HTTP 状态码包括: * 408(Request Timeout): 服务器回复太慢了。重试可能会有帮助。 * 429(Too Many Requests): 表示速率限制。在 Retry-After 头中指定的延迟后重试。 * 500(Internal Server Error): 服务器端的问题可能会自行解决。重试是可选的。 * 502 (Bad Gateway): 这表明可能是暂时的网络问题或服务栈中断,可能会自我纠正。 * 503 (Service Unavailable): 可能是由于临时服务中断或正在进行的部署。 * 504 (Gateway Timeout): 下游服务器(例如 DNS)未能及时响应。重试可能解决问题。 对这些状态码实现重试(理想情况下是指数回撤和重试限制)可以提升应用程序处理网络卡顿和临时服务器错误的能力。代价是额外的延迟。API 网关和堆栈的其他元素可能会限制客户端等待的时间。 ### No Retry 部分 HTTP 状态码代表永久性错误或客户端问题,自动重试无法解决。在这种情况下,自动重试请求会导致不必要的资源消耗,甚至使情况更糟。这些包括: * 400 (Bad Request): 客户发送了一个无效的请求。在再次尝试之前,先修复请求中的问题。 * 401 (Unauthorized): 认证是必需的,否则不通过。在再次尝试之前先修复认证问题(例如重新获得一个新的令牌)。 * 403 (Forbidden): 客户端没有权限访问该资源。重试不会改变服务器的响应。先修复授权问题,比如先获得带有额外范围的新令牌再尝试。 * 404 (Not Found): 请求的资源不存在。除非资源因后台处理而变得可用 ,否则重试不会成功。 * 405 (Method Not Allowed): 所用的 HTTP 方法不被支持。用同样的方法重试也解决不了问题。 * 409 (Conflict): 表示请求存在冲突,例如对引用完整性的唯一约束。如果不解决冲突问题就重试,结果会继续失败。 * 422 (Unprocessable Entity): 服务器理解请求,但因语义错误无法处理。在再次尝试之前,先修复请求中的问题。 对于这些状态代码,客户端需要在重新尝试请求前进行调整或更正。 --- --- url: /learn/backend/database/more/ACID/index.md --- # ACID https://retool.com/blog/whats-an-acid-compliant-database --- --- url: /learn/backend/database/more/transaction/index.md --- # 数据库事务 @[youtube](wHUOeXbZCYA) @[youtube](GAe5oB742dw) --- --- url: /learn/backend/database/no-sql/Redis/index.md --- # Redis https://redis.io/docs/latest/ @[youtube](XCsS_NVAa1g) --- --- url: /learn/backend/database/relational/PostgresSQL/index.md --- # PostgresSQL PGSQL 已经成为了事实上的开源数据库「Goat」,超越了 MySQL,来自于加州大学伯克利分校的 Postgres 项目。在兼容性上,Postgres 已经做到了目前的最好。 > PostgreSQL 试图符合 SQL 标准 ,其中这种一致性不会与传统功能相矛盾,也可能导致糟糕的架构决策。支持 SQL 标准所需的许多功能,尽管有时语法或功能略有不同。随着时间的推移,预计会进一步实现一致性。截至 2023 年 9 月发布的版本 16,PostgreSQL 至少符合 SQL:2023 Core 一致性的 177 个强制性功能中的 170 个。在撰写本文时,没有关系数据库完全符合该标准。 安装方法参考:[Windows](https://www.enterprisedb.com/docs/supported-open-source/postgresql/installing/windows/) [Debian12](https://www.enterprisedb.com/docs/supported-open-source/postgresql/installing/linux_x86_64/postgresql_debian_12/) PGSQL 是经典的 C/S 架构。服务器进程,用于管理数据库文件,接受来自客户端应用程序到数据库的连接,并代表客户端执行数据库作。数据库服务器程序称为 postgres。 用户想要执行数据库作的客户端(前端)应用程序。客户端应用程序本质上可以非常多样化:客户端可以是面向文本的工具、图形应用程序、访问数据库以显示网页的 Web 服务器或专门的数据库维护工具。一些客户端应用程序随 PostgreSQL 发行版一起提供;大多数是由用户开发的。 `select version()` 查看版本号; 创建 weather 和 cities 表 ```sql CREATE TABLE weather ( city varchar(80), temp_lo int, -- low temperature temp_hi int, -- high temperature prcp real, -- precipitation date date ); CREATE TABLE cities ( name varchar(80), location point ); ``` 常规 SQL 就不赘述了,熟能生巧的事。 --- --- url: /learn/backend/dev-langs/Go/index.md --- # Golang Golang 是一种开源编程语言,由 Rob Pike 等开发人员在 Google 开发。作为一个有趣的琐事,Golang 通常被称为“go 语言”。 Golang 背后的设计理念围绕着简单、高效和性能的概念,使其成为软件开发的绝佳工具。事实上,Go 代码是编译的,这意味着它在执行前需要被翻译成机器代码,使其运行速度比编写脚本 / 解释代码快得多。 就编程语言而言,Golang 开箱即用,具有成熟的标准库(这意味着它几乎可以做任何你想做的事情,而无需额外的模块)和注重清晰度的简洁语法。Golang 旨在提供一个高效的编程环境,具有内置的垃圾收集和对并发编程的强大支持,如果您正在构建复杂的系统和可扩展的服务,这至关重要。 Golang 用于后端开发和平台编程,特别是在需要效率和可扩展性的场景中。鉴于其设计原则,这种语言非常适合创建微服务、API 和其他需要稳定作和适当资源管理的服务器端应用程序。该语言具有非常强大的并发模型,使其直观且非常适合开发可以处理大规模数据处理和网络作的软件。 公司,尤其是那些位于旧金山和纽约等技术中心的公司(例如 Uber、Dropbox、Trivago 等),使用 Golang 构建可扩展且性能非常高的服务,这些服务与其他技术很好地集成并提供他们所需的高性能后端。实现从头到尾的顺利流程。 --- --- url: /learn/backend/web-server/Apache/index.md --- # Apache Apache HTTP 服务器(通常简称为 Apache)是一个开源的跨平台 Web 服务器软件,由 Apache 软件基金会维护。它是世界上使用最广泛的 Web 服务器之一,支持多种操作系统,包括 Linux、Windows 和 macOS。 --- --- url: /learn/backend/web-server/Caddy/index.md --- # Caddy https://caddyserver.com/ 与 Nginx 类似,Caddy 是一个用 Go 语言编写的开源 Web 服务器,支持自动 HTTPS 配置和反向代理等功能。Caddy 的配置文件采用简洁的语法,使得配置过程更加直观和易于理解。 但 Caddy 的配置相对简单,内置证书自动化管理功能,适合需要快速部署 HTTPS 网站的用户,非常适合新手上手体验 HTTPS 的魅力。 --- --- url: /learn/backend/web-server/Nginx/index.md --- # Nginx Nginx 作为 Web 开发肯定都不陌生,主要是相较其他 Web 服务器它有点太全能了,无论是「反向代理」、「内容缓存」、「负载均衡」、「邮件服务器」亦或是简单的 TCP/UDP 都能搞定。这里给出一些常用的 Nginx 用法和配置。 ## 基本的 HTTP 服务器功能 ### 静态文件索引 `ngx_http_index_module` 模块处理以 / 结尾的请求 ``` http { server { location / { index index.$geo.html index.html; } } } ``` ### 反向代理 Nginx 最常用的功能 ``` location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ``` ### 响应压缩 ``` gzip on; gzip_min_length 1000; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain application/xml; ``` ### 负载均衡 ``` upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } } ``` ### HTTPS 支持 ``` http { ... server { listen 443 ssl; keepalive_timeout 70; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; ssl_certificate /usr/local/nginx/conf/cert.pem; ssl_certificate_key /usr/local/nginx/conf/cert.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ... } } ``` ## TCP/UDP 反向代理 ### 基本 ``` server { listen 127.0.0.1:12345; proxy_pass 127.0.0.1:8080; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 1m; proxy_pass example.com:12345; } server { listen 53 udp reuseport; proxy_timeout 20s; proxy_pass dns.example.com:53; } server { listen [::1]:12345; proxy_pass unix:/tmp/stream.socket; } ``` ### SNI ``` map $ssl_preread_server_name $name { backend.example.com backend; default backend2; } upstream backend { server 192.168.0.1:12345; server 192.168.0.2:12345; } upstream backend2 { server 192.168.0.3:12345; server 192.168.0.4:12345; } server { listen 12346; proxy_pass $name; ssl_preread on; } ``` ## 其他功能 ### IP 地理查询 需要 [GeoIP](https://www.maxmind.com/app/c) 库 ``` http { geoip_country GeoIP.dat; geoip_city GeoLiteCity.dat; geoip_proxy 192.168.100.0/24; geoip_proxy 2001:0db8::/32; geoip_proxy_recursive on; ... ``` ### A/B 测试 ``` http { split_clients "${remote_addr}AAA" $variant { 0.5% .one; 2.0% .two; * ""; } server { location / { index index${variant}.html; ``` ### 访问控制 ``` location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } ``` ### 请求头验证 ``` valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.; if ($invalid_referer) { return 403; } ``` ### 错误重定向 ``` error_page 404 /404.html; error_page 500 502 503 504 /50x.html; ``` --- --- url: /learn/design-system/index.md --- # 这是「看脸」的时代 之前制作网页、设计 PPT、弄 VIS 时一心图快,忽略了真正的「专业设计」应该怎么下手,遂决定从头开始系统性学一遍。现代的设计软件、Web 前端、UX 交互都离不开「设计系统」(Design System),简单来说,它是单一事实来源,它将所有元素分组,使团队能够设计、实现和开发产品。 下面的摘选自原文章,本来想翻译消化的,有些句子始终不对味,概念先行,后面再说。 ## Everything you need to know about Design Systems ### What is a Design System? A Design System is the single source of truth which groups all the elements that will allow the teams to **design, realize and develop a product**. *Design System* is not a deliverable, but **a set of deliverables**. It will evolve constantly with the *product, the tools and the new technologies*. ### Style Guide or Pattern Library: what’s the difference? * A Style Guide: as indicated by its name, will focus on graphic styles (colours, fonts, illustrations…) and their usage. * A Pattern Library will integrate functional components and their usage. ### What’s inside? The fundamental purpose of a Design System is to facilitate the work of the teams. So the first question we need to ask ourselves is not “What should I put inside my Design System?” but “**Who is going to use it and how?**”. ### 1.Purpose and shared values > Where are we going? Why? And How? Before starting anything, it’s essential to align teams around a clear set of shared goals. It will help to build a vision and making sure everyone looks in the same direction. These goals will evolve with time and it’s normal. We just have to make sure that changes are broadly communicated. As for the values, they are like great ideals that will guide our choices, according to the brand objectives. We need to make sure that what we’re designing does not differ from these key values. Beside these brand and product values, we could also define some team values that will bring each collaborator around a shared state of mind. ### 2. Design Principles First thing to keep in mind: Design principles are so much more than just the visual aspect of a product… > Design principles are the guiding sentences that helps the teams to reach the purpose of the product thanks to the design. They will help the teams to make meaningful Design decisions. Design Principles must guide design choices I will take the example of Medium. One of their Design principles is “Direction over choice”. Thanks to that principle, instead of designing a regular text editor with unlimited choices of colours and fonts, they opted for a simpler one. That allows the author to focus on the content of his article rather than on its visual aspect. ### 3. Brand identity & language --- --- url: /learn/fe6e832d/index.md --- # GitHub Actions 官方文档: GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,用于自动化构建、测试和部署流水线。 可以创建工作流来构建和测试每个拉取请求到您的仓库,或将合并的拉取请求部署到生产环境。 GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,也可以在自己的数据中心或云基础架构中托管自己的自托管运行器。 ## 基础概念 ### Workflows Workflow 「工作流」 是一个「可配置的自动化流程」,将运行一个或多个作业。工作流由签入到存储库的 YAML 文件定义,并在存储库中的事件触发时运行,也可以手动触发或按定义的计划触发。 定义在项目存储库的 `.github/workflows` 目录 :::file-tree * .github * husky * config.yaml * workflows * ++ config.yaml * demo.py * project.toml * uv.lock ::: ### Event Event 「事件」是存储库中触发工作流运行的特定活动。例如,当有人创建拉取请求、打开问题或将提交推送到存储库时,活动可以源自 GitHub。 触发工作流的事件的 [完整列表](https://docs.github.com/zh/actions/reference/workflows-and-actions/events-that-trigger-workflows). ### Job Job 「任务」是工作流中在同一运行器上执行的一组步骤 。每个步骤要么是将要执行的 shell 脚本,要么是将要运行的作 。步骤按顺序执行,并且相互依赖。 由于每个步骤都在同一个 Runner 上执行,因此您可以将数据从一个步骤共享到另一个步骤。例如,可以有一个构建应用程序的步骤,然后是一个测试已构建的应用程序的步骤。 默认情况下,作业没有依赖关系并并行运行。当作业依赖于另一个作业时,它会等待依赖作业完成后再运行。 还可以使用 Matrix「矩阵」多次运行同一作业,每次作业都有不同的变量组合,例如作系统或语言版本。 ### Action Action「行为」是一组预定义的、可重用的作业或代码,用于在工作流中执行特定任务,从而减少您在工作流文件中编写的重复代码量。可以执行以下任务: * 从 GitHub 拉取 Git 存储库 * 为构建环境设置正确的工具链 * 设置对云提供商的身份验证 可以编写自己的 Action,也可以在 [GitHub Marketplace](https://github.com/marketplace?type=actions) 中找到要在工作流中使用的作。 ### Runner Runner「运行器」是在触发工作流时运行工作的服务器。每个运行器一次可以运行一个作业 。 GitHub 提供 Ubuntu Linux、Microsoft Windows 和 macOS 运行器来运行工作流 。每个工作流运行都在新置备的全新虚拟机中执行。 ## 一些示例 ### 推送事件 --- --- url: /learn/frontend/index.md --- # 真是「切图仔」吗? ## 常见问题 ### 前端开发真的是编码吗? 前端开发人员真的编码吗?答案是肯定的,绝对。 前端开发人员是全职开发人员,他们产生具有视觉吸引力的输出(由于其他人提供的设计)这一事实有时会让其他人感到困惑,让他们相信前端开发人员并不是真正的编码。然而,这与事实相去甚远。 作为前端开发人员,您将一直在编码。 虽然在某些公司中,前端开发人员也是熟练的设计师或用户体验工程师,但这些并不是典型的配置文件。作为前端开发人员,您的学习重点应该与编码相关(即编码最佳实践、软件设计模式、前端架构等) *** ### 前端开发的前景如何? 随着 Web 空间和技术的不断发展,前端开发人员的角色变得更加重要。最后,提供应用程序的 Web 版本有很多好处,使其成为大多数系统的明显版本(除非有特定的原生开发要求),这意味着前端开发人员有可能参与所有类型的项目和公司。 这使得前端开发人员的职业成为 Web 技术行业中最通用和最受欢迎的道路之一。 *** ### 如何准备前端面试? 如果您想准备前端开发人员面试,请确保您已经掌握了您将使用的技术的基础知识。 虽然这是您可以为前端职业生涯做的最有影响力的事情之一,但也要考虑关注以下几点: 1. 掌握基础知识 :确保对 HTML、CSS 和 JavaScript 有深入的了解,因为它们对于前端开发人员的角色至关重要。 2. 练习编码 :通过 LeetCode 等平台上的迷你项目或编码挑战来提高您的技能,尤其是那些专注于前端开发的平台。使用这些技能创建 Web 开发人员组合可以在很多方面为您提供帮助。 3. 学习现代框架 :熟悉 React、Angular 或 Vue.js 等流行框架。 4. 了解您的工具 :熟悉版本控制系统、测试和构建工具,这些工具对于包括前端在内的所有类型的开发都至关重要。 5. 了解 UI/UX 原则 :了解可访问性、响应式设计和直观的界面以脱颖而出。 6. 研究公司 :通过了解公司的业务和产品来表现出兴趣。 7. 增强沟通技巧 :良好的沟通技巧对于在任何角色中取得成功都至关重要,因此请务必努力提高这些技巧。 *** ### 前端和后端的区别是什么? 前端开发和后端开发的主要区别在于,前端开发侧重于 UI,而后端开发更侧重于服务器端逻辑。 您会看到,前端开发与用户界面和用户体验一起工作,使用 HTML、CSS 和 JavaScript(或 TypeScript)处理网站或应用程序的设计、布局和交互性。 另一方面,后端开发处理服务器端逻辑、数据库和应用程序功能,确保数据得到正确处理和服务。后端开发的技术堆栈要大得多,有更多的选择,例如 Python、Java 或 Node.js。 这两种选择都同样有趣且具有挑战性,因此这并不是真正的后端与前端的问题,而是了解您在哪里感觉更舒服以及您喜欢创建什么类型的系统。 *** ### 前端开发人员的职位是什么? 前端开发人员也称为前端工程师、前端 Web 开发人员、JavaScript 开发人员、HTML/CSS 开发人员、前端 Web 设计师和前端 Web 架构师。 这些角色中的每一个大多包含相同的前端开发技能,但需要不同前端开发技能的不同水平的专业知识。最好查看职位描述以了解职位要求。 *** ### 如何成为前端开发人员? 您可以通过从学习 HTML 和 CSS 开始成为前端开发人员 。不要等待完全掌握这些并尽快开始构建简单的项目。您可以尝试使用 HTML 和 CSS 重新构建您喜爱的网站的前端。在不断学习的同时,尽可能多地做这些项目。一旦您对 HTML 和 CSS 有所熟悉,就开始学习一些基本的 JavaScript(DOM 作、使用 Fetch 或 Axios 进行后端调用等)并学习如何为您的网站添加交互性。同时,学习 Git 和 GitHub 的一些基础知识。此时,您应该能够获得入门级前端开发工作。不断重新审视此路线图,并尝试填补您知识的空白。 *** ### 需要大概多久时间? 成为前端开发人员所需的时间可能会因多种因素而异,例如您的学习进度、以前的经验以及您能够投入学习的时间。 但是,为了给您一个粗略的想法,如果您是一个完全的初学者,您可能需要 3 到 6 个月的时间才能找到一份入门级前端开发人员的工作。如果您已经熟悉一些前端技术,则可能需要 1 到 3 个月的时间。重要的是在学习时尽可能多地练习,即尽可能多地构建项目。您还应该参与在线社区并向更有经验的开发人员寻求反馈,以加快您的学习过程。 *** ### 前端框架是什么? 前端框架是工具和库的集合,可帮助开发人员更有效地构建 Web 应用程序。它们为代码提供了结构,使构建和维护复杂的应用程序变得更加容易。 一些流行的前端框架包括 React、Angular 和 Vue.js。这些框架提供了一组工具和库,可帮助开发人员构建用户界面、管理状态以及与 API 交互。 --- --- url: /learn/glg6bujw/index.md --- # 数据库扩容 ## 数据库索引 数据库索引是一种数据结构,它通过创建对表数据的引用来加快数据检索速度,而无需进行全表扫描。包括 B 树、位图和哈希类型。增强查询性能,但会增加存储要求,并因索引维护而减慢写入速度。 --- --- url: /learn/k6dboi2z/index.md --- # 概念 ## CI Continuous Integration「持续集成」是一种需要频繁提交代码到共享仓库的软件实践。 频繁提交代码能较早检测到错误,减少在查找错误来源时开发者需要调试的代码量。 频繁的代码更新也更便于从软件开发团队的不同成员合并更改。 这对开发者非常有益,他们可以将更多时间用于编写代码,而减少在调试错误或解决合并冲突上所花的时间。 提交代码到仓库时,可以持续创建并测试代码,以确保提交未引入错误。 测试可以包括代码语法检查(检查样式格式)、安全性检查、代码覆盖率、功能测试及其他自定义检查。 创建和测试代码需要服务器。 您可以在推送代码到仓库之前在本地创建并测试更新,也可以使用 CI 服务器检查仓库中的新代码提交。 ## CD Continuous Deployment/Delivery「持续部署」是使用自动化发布和部署软件更新的做法。 作为典型 CD 过程的一部分,代码在部署之前会自动构建并测试。 --- --- url: /learn/Linux/index.md --- # 「自由」的操作系统 早在 1969 年,贝尔实验室发明了 Unix 操作系统,起初免费授权给许可授权给教育机构,后面 AT\&A 公司意识到其商业价值,遂闭源并取消了授权。此行径招致许多用户不满,「GNU 通用公共许可证」 应运而生,Linus (公然嘲讽英伟达的那位)也是他们中的一员,他在大学期间编写了第一代 「Linux 内核」,成为了如今 各种 Linux发行版的基石。 现在,全世界的程序员都在和 Linus 努力维护着这个内核,开源社区也因此兴盛繁荣,世界上最大的开源软件组织 Apache 你可能没听说过,但 1000% 的概率你正在使用 Apache 开发的软件。现在我们称所有基于 Linux 内核衍生的各种操作系统为 「Linux」发行版。 所以,开源的精神就在这里,教育理应是公平的,每个人都有能力改变世界、追求自由。 对于新手而言,黑乎乎的终端似乎特别无聊,中科大的 [101](https://101.lug.ustc.edu.cn/) 和 [201](https://201.ustclug.org/) 教程足以学会大部分日常所需的 Shell 命令并理解其中的各种概念,这里强烈推荐。他们也运营着目前最大的国内镜像站,为 CQMU Mirror 提供了宝贵的经验参考。 有基础后可以试着自己编译一个内核,写一个操作系统,或者加入 LUG (Linux User Group) 的开源社区,成为像 Linus 那样的高手! --- --- url: /learn/math/discrete-mathematics/index.md --- # Discrete Mathematics「离散数学」 @[bilibili](BV1dh4y1o7x9) ## Graph Example ```mermaid graph LR 1((1)) --- 2((2)) 1((1)) --- 3((3)) 2((2)) --- 4((4)) 3((3)) --- 4((4)) 4((4)) --- 5((5)) 5((5)) --- 6((6)) 6((6)) --- 1((1)) ``` --- --- url: /learn/math/linear-algebra/index.md --- # Linear Algebra「线性代数」 [MIT Course 18.06 Linear Algebra](https://www.bilibili.com/video/BV1rH4y1N7BW) 是麻省理工学院开设的一门线性代数课程,课程内容涵盖了线性代数的基础知识和应用,包括矩阵运算、向量空间、特征值和特征向量等。该课程由 Gilbert Strang 教授讲授,他是线性代数领域的权威专家,课程内容深入浅出,适合初学者和有一定基础的学习者。 ## Chap01 - 方程组的几何解释 @[bilibili p1](BV1rH4y1N7BW) 假如有以下方程组: $$\begin{cases}2x-y=0\\-x+2y=3&\end{cases}$$ 我们可以把它写成矩阵的形式: $$\begin{bmatrix}2&-1\\-1&2\end{bmatrix}\begin{bmatrix}x\y\end{bmatrix}=\begin{bmatrix}0\3\end{bmatrix}$$ 换一种理解方式,我们可以把它们看成是二维空间中的两个列向量 $\overrightarrow{col\_{1}}=(2,-1)$ 和 $\overrightarrow{col\_{2}}=(-1,2)$ ,对于列向量 $\begin{bmatrix}2\\-1\end{bmatrix}$ 和 $\begin{bmatrix}-1\2\end{bmatrix}$ ,方程组就可以看成是这两个向量的「线性组合 *linear combination* 」,等于 $\begin{bmatrix}0\3\end{bmatrix}$,也就是 $$x\begin{bmatrix}2\\-1\end{bmatrix} + y\begin{bmatrix}-1\2\end{bmatrix}=\begin{bmatrix}0\3\end{bmatrix}$$ :::note 行向量的线性组合 国内教程多使用行向量进行计算,即 $\begin{bmatrix}2&-1\\-1&2\end{bmatrix}\begin{bmatrix}x\y\end{bmatrix}=\begin{bmatrix}a\b\end{bmatrix}$ 行向量的线性组合表示为 $2x-y=a$,$-x+2y=b$,这样的表示方式在计算机科学中更为常见,而在数学领域则更倾向于使用列向量进行表示。 ::: 我们把系数矩阵 $\begin{bmatrix}2&-1\\-1&2\end{bmatrix}$ 记为 $A$ ,未知数向量 $\begin{bmatrix}x\y\end{bmatrix}$ 记为 $\mathbf{x}$ ,常数向量 $\begin{bmatrix}0\3\end{bmatrix}$ 记为 $\mathbf{b}$,那么方程组就可以写成: $$A\mathbf{x}=\mathbf{b}$$ ## Chap02 - 矩阵消元 @[bilibili p2](BV1rH4y1N7BW) --- --- url: /learn/ml/index.md --- # 不止于「0到1」的概率 我们是这个时代的见证者,人工智能正在以惊人的速度发展,改变着我们的生活和工作方式。机器学习作为人工智能的核心技术之一,正在引领着这一变革的浪潮。 「机器学习」顾名思义,就是让计算机通过数据学习,从而能够做出预测或决策。它的应用范围非常广泛,从推荐系统、图像识别、自然语言处理,到自动驾驶、医疗诊断等领域,都离不开机器学习的支持。 机器学习核心在于算法和数据。通过不断地训练和优化,机器学习模型能够从大量的数据中提取有用的信息,发现隐藏的模式,并做出准确的预测。这种能力使得机器学习成为解决复杂问题的强大工具。 所以,线性代数、概率论、统计学等数学知识是学习机器学习的基础。同时,编程能力也是必不可少的,Python 是目前最流行的机器学习编程语言,拥有丰富的库和工具,如 TensorFlow、PyTorch、Scikit-learn 等。 就从数学基础和 Python 开始吧!最后试着自己训练一个简单的机器学习模型,看看它是如何工作的。并尝试在 Minecraft 中使用「红石电路」复刻出来,相信我,这将是一个令人兴奋的旅程! --- --- url: /learn/ml5ssblk/index.md --- # LaTeX > Everything should be made as simple as possible, but not simpler. 作为世界上最早的排版引擎, LaTeX 自 1984 年由莱斯利·兰伯特 (Leslie Lamport) 基于 Donald E. Knuth 的 TeX 系统开发以来,一直是学术界和出版界的首选排版工具。LaTeX 以其强大的数学公式排版能力和对复杂文档结构的支持而闻名,广泛应用于科学论文、技术文档和书籍的编写。 例如著名期刊 Nature 和 Science 都接受 LaTeX 格式的投稿,许多学术会议和出版社也提供 LaTeX 模板以确保稿件符合其排版要求。 * [Nature LaTeX 模板](https://www.springernature.com/gp/authors/campaigns/latex-author-support#c17590862) * [Science LaTeX 模板](https://www.science.org/content/page/preparing-manuscripts-using-latex) 有了模板,作者只需专注于内容创作,而无需担心排版细节,这大大提高了学术写作的效率和质量。当然,现在越来越多高校也在引进 LaTeX 作为课程的一部分,帮助学生掌握这一强大的工具,帮助他们完成「实验报告」或「毕业设计」。 而在 AI 时代,代码形式的 LaTeX 依然保持其重要地位。许多 AI 研究论文和技术文档仍然采用 LaTeX 格式,越来越多的工具开始支持 LaTeX 格式的生成和编辑,使得学术写作变得更加便捷。 不过,LaTeX 的学习曲线相对较陡峭,初学者可能会觉得难以入门,且对于大型文档项目,过长的编译时长和宏包生态导致的「无 / 弱报错提示」也让新手望而生畏。然而,一旦掌握了 LaTeX 的基本语法和结构,用户就能充分利用其强大的排版功能,创建出专业且美观的文档。 ## LaTeX Online 推荐的在线 LaTeX 编辑器: * [Overleaf](https://www.overleaf.com/) (推荐,功能强大且免费额度充足) * [KeepResearch](https://www.keepresearch.com/) (界面简洁,适合快速编辑,完全免费) * [LoongTeX](https://www.loongtex.com/)(国内用户推荐,速度较快,但功能相对较少) * [Papeeria](https://www.papeeria.com/) (支持多人协作,适合团队项目) ## LaTeX in VS Code 可参照 [知乎用户](https://zhuanlan.zhihu.com/p/166523064) 进行本地 LaTeX 环境的搭建,相对有难度就 TeX Live 的安装,下载 .iso 镜像安装会更快,这里不再展开。 --- --- url: /learn/p8v6vw2w/index.md --- # Visual Studio Visual Studio 官方文档和 2026 版的推荐配置一样抽象,不适合新手阅读,这里还是自行整理一遍。 --- --- url: /learn/pv8ahawu/index.md --- # Statistics「统计学」 Resource: PDF by [OpenStax](https://openstax.org/). [//]: # "::: collapse expand" [//]: # "- Click to expand or collapse" [//]: # [//]: # " @[pdf zoom=\"95\" ratio=\"21:29\"](https://assets.openstax.org/oscms-prodcms/media/documents/IntroductoryStatistics-OP_i6tAI7e.pdf)" [//]: # [//]: # ":::" ## Chap01 - 抽样与数据 :::note Chapter Objectives * 认识、辨别关键术语 * 将不同采样方法与不同类型的数据联系起来 * 制作频率分布表 ::: ### 统计学、概率论及相关术语的定义 统计学是一门研究数据的收集、分析、解读和呈现的学科。在日常生活中,我们无时无刻不在接触和使用数据。 :::echarts ```js option = { title: { text: 'Male and female height and weight distribution', subtext: 'Data from: Heinz 2003' }, grid: { left: '3%', right: '7%', bottom: '7%', containLabel: true }, tooltip: { // trigger: 'axis', showDelay: 0, formatter: function (params) { if (params.value.length > 1) { return ( params.seriesName + ' :
' + params.value[0] + 'cm ' + params.value[1] + 'kg ' ); } else { return ( params.seriesName + ' :
' + params.name + ' : ' + params.value + 'kg ' ); } }, axisPointer: { show: true, type: 'cross', lineStyle: { type: 'dashed', width: 1 } } }, toolbox: { feature: { dataZoom: {}, brush: { type: ['rect', 'polygon', 'clear'] } } }, brush: {}, legend: { data: ['Female', 'Male'], left: 'center', bottom: 10 }, xAxis: [ { type: 'value', scale: true, axisLabel: { formatter: '{value} cm' }, splitLine: { show: false } } ], yAxis: [ { type: 'value', scale: true, axisLabel: { formatter: '{value} kg' }, splitLine: { show: false } } ], series: [ { name: 'Female', type: 'scatter', emphasis: { focus: 'series' }, // prettier-ignore data: [[161.2, 51.6], [167.5, 59.0], [159.5, 49.2], [157.0, 63.0], [155.8, 53.6], [170.0, 59.0], [159.1, 47.6], [166.0, 69.8], [176.2, 66.8], [160.2, 75.2], [172.5, 55.2], [170.9, 54.2], [172.9, 62.5], [153.4, 42.0], [160.0, 50.0], [147.2, 49.8], [168.2, 49.2], [175.0, 73.2], [157.0, 47.8], [167.6, 68.8], [159.5, 50.6], [175.0, 82.5], [166.8, 57.2], [176.5, 87.8], [170.2, 72.8], [174.0, 54.5], [173.0, 59.8], [179.9, 67.3], [170.5, 67.8], [160.0, 47.0], [154.4, 46.2], [162.0, 55.0], [176.5, 83.0], [160.0, 54.4], [152.0, 45.8], [162.1, 53.6], [170.0, 73.2], [160.2, 52.1], [161.3, 67.9], [166.4, 56.6], [168.9, 62.3], [163.8, 58.5], [167.6, 54.5], [160.0, 50.2], [161.3, 60.3], [167.6, 58.3], [165.1, 56.2], [160.0, 50.2], [170.0, 72.9], [157.5, 59.8], [167.6, 61.0], [160.7, 69.1], [163.2, 55.9], [152.4, 46.5], [157.5, 54.3], [168.3, 54.8], [180.3, 60.7], [165.5, 60.0], [165.0, 62.0], [164.5, 60.3], [156.0, 52.7], [160.0, 74.3], [163.0, 62.0], [165.7, 73.1], [161.0, 80.0], [162.0, 54.7], [166.0, 53.2], [174.0, 75.7], [172.7, 61.1], [167.6, 55.7], [151.1, 48.7], [164.5, 52.3], [163.5, 50.0], [152.0, 59.3], [169.0, 62.5], [164.0, 55.7], [161.2, 54.8], [155.0, 45.9], [170.0, 70.6], [176.2, 67.2], [170.0, 69.4], [162.5, 58.2], [170.3, 64.8], [164.1, 71.6], [169.5, 52.8], [163.2, 59.8], [154.5, 49.0], [159.8, 50.0], [173.2, 69.2], [170.0, 55.9], [161.4, 63.4], [169.0, 58.2], [166.2, 58.6], [159.4, 45.7], [162.5, 52.2], [159.0, 48.6], [162.8, 57.8], [159.0, 55.6], [179.8, 66.8], [162.9, 59.4], [161.0, 53.6], [151.1, 73.2], [168.2, 53.4], [168.9, 69.0], [173.2, 58.4], [171.8, 56.2], [178.0, 70.6], [164.3, 59.8], [163.0, 72.0], [168.5, 65.2], [166.8, 56.6], [172.7, 105.2], [163.5, 51.8], [169.4, 63.4], [167.8, 59.0], [159.5, 47.6], [167.6, 63.0], [161.2, 55.2], [160.0, 45.0], [163.2, 54.0], [162.2, 50.2], [161.3, 60.2], [149.5, 44.8], [157.5, 58.8], [163.2, 56.4], [172.7, 62.0], [155.0, 49.2], [156.5, 67.2], [164.0, 53.8], [160.9, 54.4], [162.8, 58.0], [167.0, 59.8], [160.0, 54.8], [160.0, 43.2], [168.9, 60.5], [158.2, 46.4], [156.0, 64.4], [160.0, 48.8], [167.1, 62.2], [158.0, 55.5], [167.6, 57.8], [156.0, 54.6], [162.1, 59.2], [173.4, 52.7], [159.8, 53.2], [170.5, 64.5], [159.2, 51.8], [157.5, 56.0], [161.3, 63.6], [162.6, 63.2], [160.0, 59.5], [168.9, 56.8], [165.1, 64.1], [162.6, 50.0], [165.1, 72.3], [166.4, 55.0], [160.0, 55.9], [152.4, 60.4], [170.2, 69.1], [162.6, 84.5], [170.2, 55.9], [158.8, 55.5], [172.7, 69.5], [167.6, 76.4], [162.6, 61.4], [167.6, 65.9], [156.2, 58.6], [175.2, 66.8], [172.1, 56.6], [162.6, 58.6], [160.0, 55.9], [165.1, 59.1], [182.9, 81.8], [166.4, 70.7], [165.1, 56.8], [177.8, 60.0], [165.1, 58.2], [175.3, 72.7], [154.9, 54.1], [158.8, 49.1], [172.7, 75.9], [168.9, 55.0], [161.3, 57.3], [167.6, 55.0], [165.1, 65.5], [175.3, 65.5], [157.5, 48.6], [163.8, 58.6], [167.6, 63.6], [165.1, 55.2], [165.1, 62.7], [168.9, 56.6], [162.6, 53.9], [164.5, 63.2], [176.5, 73.6], [168.9, 62.0], [175.3, 63.6], [159.4, 53.2], [160.0, 53.4], [170.2, 55.0], [162.6, 70.5], [167.6, 54.5], [162.6, 54.5], [160.7, 55.9], [160.0, 59.0], [157.5, 63.6], [162.6, 54.5], [152.4, 47.3], [170.2, 67.7], [165.1, 80.9], [172.7, 70.5], [165.1, 60.9], [170.2, 63.6], [170.2, 54.5], [170.2, 59.1], [161.3, 70.5], [167.6, 52.7], [167.6, 62.7], [165.1, 86.3], [162.6, 66.4], [152.4, 67.3], [168.9, 63.0], [170.2, 73.6], [175.2, 62.3], [175.2, 57.7], [160.0, 55.4], [165.1, 104.1], [174.0, 55.5], [170.2, 77.3], [160.0, 80.5], [167.6, 64.5], [167.6, 72.3], [167.6, 61.4], [154.9, 58.2], [162.6, 81.8], [175.3, 63.6], [171.4, 53.4], [157.5, 54.5], [165.1, 53.6], [160.0, 60.0], [174.0, 73.6], [162.6, 61.4], [174.0, 55.5], [162.6, 63.6], [161.3, 60.9], [156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6], [169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8], [176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3] ], markArea: { silent: true, itemStyle: { color: 'transparent', borderWidth: 1, borderType: 'dashed' }, data: [ [ { name: 'Female Data Range', xAxis: 'min', yAxis: 'min' }, { xAxis: 'max', yAxis: 'max' } ] ] }, markPoint: { data: [ { type: 'max', name: 'Max' }, { type: 'min', name: 'Min' } ] }, markLine: { lineStyle: { type: 'solid' }, data: [{ type: 'average', name: 'AVG' }, { xAxis: 160 }] } }, { name: 'Male', type: 'scatter', emphasis: { focus: 'series' }, // prettier-ignore data: [[174.0, 65.6], [175.3, 71.8], [193.5, 80.7], [186.5, 72.6], [187.2, 78.8], [181.5, 74.8], [184.0, 86.4], [184.5, 78.4], [175.0, 62.0], [184.0, 81.6], [180.0, 76.6], [177.8, 83.6], [192.0, 90.0], [176.0, 74.6], [174.0, 71.0], [184.0, 79.6], [192.7, 93.8], [171.5, 70.0], [173.0, 72.4], [176.0, 85.9], [176.0, 78.8], [180.5, 77.8], [172.7, 66.2], [176.0, 86.4], [173.5, 81.8], [178.0, 89.6], [180.3, 82.8], [180.3, 76.4], [164.5, 63.2], [173.0, 60.9], [183.5, 74.8], [175.5, 70.0], [188.0, 72.4], [189.2, 84.1], [172.8, 69.1], [170.0, 59.5], [182.0, 67.2], [170.0, 61.3], [177.8, 68.6], [184.2, 80.1], [186.7, 87.8], [171.4, 84.7], [172.7, 73.4], [175.3, 72.1], [180.3, 82.6], [182.9, 88.7], [188.0, 84.1], [177.2, 94.1], [172.1, 74.9], [167.0, 59.1], [169.5, 75.6], [174.0, 86.2], [172.7, 75.3], [182.2, 87.1], [164.1, 55.2], [163.0, 57.0], [171.5, 61.4], [184.2, 76.8], [174.0, 86.8], [174.0, 72.2], [177.0, 71.6], [186.0, 84.8], [167.0, 68.2], [171.8, 66.1], [182.0, 72.0], [167.0, 64.6], [177.8, 74.8], [164.5, 70.0], [192.0, 101.6], [175.5, 63.2], [171.2, 79.1], [181.6, 78.9], [167.4, 67.7], [181.1, 66.0], [177.0, 68.2], [174.5, 63.9], [177.5, 72.0], [170.5, 56.8], [182.4, 74.5], [197.1, 90.9], [180.1, 93.0], [175.5, 80.9], [180.6, 72.7], [184.4, 68.0], [175.5, 70.9], [180.6, 72.5], [177.0, 72.5], [177.1, 83.4], [181.6, 75.5], [176.5, 73.0], [175.0, 70.2], [174.0, 73.4], [165.1, 70.5], [177.0, 68.9], [192.0, 102.3], [176.5, 68.4], [169.4, 65.9], [182.1, 75.7], [179.8, 84.5], [175.3, 87.7], [184.9, 86.4], [177.3, 73.2], [167.4, 53.9], [178.1, 72.0], [168.9, 55.5], [157.2, 58.4], [180.3, 83.2], [170.2, 72.7], [177.8, 64.1], [172.7, 72.3], [165.1, 65.0], [186.7, 86.4], [165.1, 65.0], [174.0, 88.6], [175.3, 84.1], [185.4, 66.8], [177.8, 75.5], [180.3, 93.2], [180.3, 82.7], [177.8, 58.0], [177.8, 79.5], [177.8, 78.6], [177.8, 71.8], [177.8, 116.4], [163.8, 72.2], [188.0, 83.6], [198.1, 85.5], [175.3, 90.9], [166.4, 85.9], [190.5, 89.1], [166.4, 75.0], [177.8, 77.7], [179.7, 86.4], [172.7, 90.9], [190.5, 73.6], [185.4, 76.4], [168.9, 69.1], [167.6, 84.5], [175.3, 64.5], [170.2, 69.1], [190.5, 108.6], [177.8, 86.4], [190.5, 80.9], [177.8, 87.7], [184.2, 94.5], [176.5, 80.2], [177.8, 72.0], [180.3, 71.4], [171.4, 72.7], [172.7, 84.1], [172.7, 76.8], [177.8, 63.6], [177.8, 80.9], [182.9, 80.9], [170.2, 85.5], [167.6, 68.6], [175.3, 67.7], [165.1, 66.4], [185.4, 102.3], [181.6, 70.5], [172.7, 95.9], [190.5, 84.1], [179.1, 87.3], [175.3, 71.8], [170.2, 65.9], [193.0, 95.9], [171.4, 91.4], [177.8, 81.8], [177.8, 96.8], [167.6, 69.1], [167.6, 82.7], [180.3, 75.5], [182.9, 79.5], [176.5, 73.6], [186.7, 91.8], [188.0, 84.1], [188.0, 85.9], [177.8, 81.8], [174.0, 82.5], [177.8, 80.5], [171.4, 70.0], [185.4, 81.8], [185.4, 84.1], [188.0, 90.5], [188.0, 91.4], [182.9, 89.1], [176.5, 85.0], [175.3, 69.1], [175.3, 73.6], [188.0, 80.5], [188.0, 82.7], [175.3, 86.4], [170.5, 67.7], [179.1, 92.7], [177.8, 93.6], [175.3, 70.9], [182.9, 75.0], [170.8, 93.2], [188.0, 93.2], [180.3, 77.7], [177.8, 61.4], [185.4, 94.1], [168.9, 75.0], [185.4, 83.6], [180.3, 85.5], [174.0, 73.9], [167.6, 66.8], [182.9, 87.3], [160.0, 72.3], [180.3, 88.6], [167.6, 75.5], [186.7, 101.4], [175.3, 91.1], [175.3, 67.3], [175.9, 77.7], [175.3, 81.8], [179.1, 75.5], [181.6, 84.5], [177.8, 76.6], [182.9, 85.0], [177.8, 102.5], [184.2, 77.3], [179.1, 71.8], [176.5, 87.9], [188.0, 94.3], [174.0, 70.9], [167.6, 64.5], [170.2, 77.3], [167.6, 72.3], [188.0, 87.3], [174.0, 80.0], [176.5, 82.3], [180.3, 73.6], [167.6, 74.1], [188.0, 85.9], [180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1], [170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1], [180.3, 83.2], [180.3, 83.2] ], markArea: { silent: true, itemStyle: { color: 'transparent', borderWidth: 1, borderType: 'dashed' }, data: [ [ { name: 'Male Data Range', xAxis: 'min', yAxis: 'min' }, { xAxis: 'max', yAxis: 'max' } ] ] }, markPoint: { data: [ { type: 'max', name: 'Max' }, { type: 'min', name: 'Min' } ] }, markLine: { lineStyle: { type: 'solid' }, data: [{ type: 'average', name: 'Average' }, { xAxis: 170 }] } } ] }; ``` ::: #### 概率 > 一枚硬币抛 4 次,结果不一定是 2 次正面和 2 次反面。但如果是 4000 次,结果就很可能是 2000 次正面和 > 2000 次反面。 概率是一种用于研究随机现象的数学工具。它用来描述某事件发生的概率或可能性。 「概率论」最初是随着对扑克等概率游戏的研究而产生的。各种预测实际上都是以概率的形式来表达的。无论是预测地震或降雨的可能性,还是预测你在这门课程中能否取得 A 级成绩,我们都使用概率来进行分析。医生们也利用概率来评估接种疫苗后,是否有可能反而引发该疫苗原本旨在预防的疾病。 #### 关键术语 在统计学中,我们通常希望研究整个总体。所谓「总体」,指的是我们所研究的所有人、物或对象的集合。 为了研究这个总体,我们需要选取一个样本。「抽样」的目的就是从总体中挑选出一部分作为样本,通过研究这个样本来了解总体的情况。数据其实就是从总体中抽样所得的结果。 > 由于对整个人群进行调查需要耗费大量时间和金钱,因此抽样是一种非常实用的方法。如果你想计算学校全体学生的平均成绩,那么选取一部分在校学生作为样本是比较合理的。 从样本数据中,我们可以计算出各种「统计量」。统计量是一种用来表示样本特征的数值。例如,如果我们把某个数学班视为所有数学班的样本,那么该班级学生在学期末的平均成绩就是一个统计量的例子。 统计量实际上是对总体参数的估计。「参数」是指整个总体的某种数值特征,而统计量则可以用来估计这些参数。由于我们将所有数学班视为总体,那么所有数学班中每名学生的平均成绩则属于参数的范畴。 > 在「英雄联盟」中,某些版本英雄与总体英雄的参数严重不符(梅尔),我们称之为「超标」。 在统计学领域,人们最关心的问题之一就是:某个统计量在估计某个参数时的「准确性」如何。这种准确性实际上取决于样本在多大程度上能够代表总体。只有当样本具备总体的各种特征时,它才能被视为具有代表性的样本。在推断统计学中,我们既关注样本统计量,也关注总体参数。在后面的章节中,我们将利用样本统计量来检验所估计的总体参数是否准确。 「变量」通常用大写字母来表示,比如 X 和 Y。变量指的是可以针对总体中的每一个成员来确定的某种特征或数值。变量可以是数值型的,也可以是分类型的。 数值型变量具有相同的计量单位,比如以磅为单位的重量、以小时为单位的时间等。分类型变量则将人或事物归入不同的类别。 > 如果让 X 表示某位数学学生在学期末所获得的分数,那么 X 就是数值型变量。如果让 Y 表示一个人的政治党派归属,那么 > Y 的值可以是共和党、民主党或无党派人士。Y 就是分类型变量。我们可以对 X 的值进行数学运算(比如计算平均分),但对 > Y 的值进行数学运算则没有意义(因为无法计算出“平均党派归属”这样的概念)。 切比雪夫不等式 $$\mu({x\in X:|f(x)|\geq t})\leq\frac{1}{t^2}\int\_Xf^2d\mu.$$ --- --- url: /learn/rjtrdxr0/index.md --- # Rocky Linux 自 2020 年 12 月 8 日 [*CentOS 7* 停止维护](https://www.redhat.com/zh-cn/topics/linux/centos-linux-eol) 后,社区为了兼容 CentOS 的软件仓库及实现操作系统「开源愿景」,格雷戈里·库尔泽 (Gregory Kurtzer) 启动了 Rocky Linux 项目,更详细的历史请前往 [官网查看](https://rockylinux.org/zh-CN/about)。 Rocky Linux 是一个开源的企业级操作系统,旨在与 Red Hat Enterprise Linux® 100% 完全兼容。Rocky Linux 非常稳定,对开源软件的生态及其上游仓库负责,对于 Cent OS Stream 前的用户而言,可以使用官方提供的脚本实现一步迁移。 ## 虚拟机安装 虚拟机平台推荐 VMWare WorkStation 或 Oracle VirtualBox,这里以 VMWare 示例,WSL 暂不支持 Rocky Linux。 --- --- url: /learn/vc/platform/GitHub/index.md --- # GitHub 作为全球最大的「程序员交友平台」,GitHub 可以存储代码、与「开源社区」互动、提出想法等,掌握如何使用 GitHub 成为了现代程序员必备的素质。 注意,是 GitHub,而不是 Github 或者 github 哦!国内网络行情,上 GitHub 需要企业开通「专线」或一点魔法,你不知道这些那真是太可惜了。 平台是国际性的,大部分用户都用英语进行交流,事实上大伙平时不会用六级或者考研那种「莎士比亚式」的交流方式,一般 `hello`, `how are you` 都是能被接受的,大佬们也很乐意解决你提出的问题。 > 除非你蠢到 / 幼稚到犯了 [提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md) 中的错误,有很大可能有人来问候或者无视你。 了解怎么正确使用 GitHub,可以参考他们的官方文档,多使用 Git 来管理自己的代码、克隆他人的开源项目,为开源社区提出你的 issue ,也许你就是下一个改变世界的人。 国内用户可能会遇到访问缓慢的问题,可以考虑使用一些加速工具(如 [WattToolkit](https://steampp.net/))提升访问速度。 * [GitHub 官方文档](https://docs.github.com/zh) --- --- url: /learn/version-control/Git/index.md --- # Git 官方文档: Git 是一个免费的开源分布式版本控制系统, 旨在处理从小型到非常大的项目,提升速度和效率。 Git 是「分布式」的,fork 「仓库」后,每位开发者都可以拥有一份代码的「副本」,并在各自的「分支」上进行开发,通过 Pull Request 进行 Merge 操作。 ```mermaid flowchart LR Dev[Developer] -->|create branch| Feature[feature/*] Feature -->|commit \& push| RemoteFeature[origin/feature/*] RemoteFeature -->|open PR| PR[Pull Request] PR -->|CI runs| CI[CI / Tests] CI -->|passes| Review[Code Review] Review -->|approved| MergeDev[Merge into develop] MergeDev -->|deploy| Staging[Staging] Staging -->|QA OK| Release[release/*] Release -->|merge| Main[main\/master] Main -->|tag \& deploy| Prod[Production] Main -->|create hotfix| Hotfix[hotfix/*] Hotfix -->|commit \& push| RemoteHotfix[origin/hotfix/*] RemoteHotfix -->|open PR| PRHotfix[Hotfix PR] PRHotfix -->|merge| Main PRHotfix -->|also merge into| MergeDev Main -->|merge back into| MergeDev ``` 每个开发者提交的 Commit 都是独一无二的,每个文件和提交都会被校验和,并在检出时通过其校验和进行检索。 「暂存区」是介于本地「工作区」与远程「仓库」的地带,使用 `git add ` 添加文件到「暂存区」,再 `git commit` 到本地仓库并 `push` 到远程仓库。当然,你可以直接 `git commit -a` 添加所有。 Git 使用 GNUv2.0 进行开发,这是 Linus 和 Git 的核心理念,即你用了这种开源许可证的软件中的代码,那你也得开源,著名项目事件 `OpenWRT`。 ## Git 命令 手册: ```text git [-v | --version] [-h | --help] [-C ] [-c =] [--exec-path[=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch] [--no-optional-locks] [--no-advice] [--bare] [--git-dir=] [--work-tree=] [--namespace=] [--config-env==] [] ``` ## giteveryday 常用 git 命令 ### Individual 自己写项目使用这些 > init,log,switch,branch,add,diff,status,commit,restore,merge,rebase,tag e.g.1. 使用 tarball 作为新存储库的起点。 ```shell $ tar zxf frotz.tar.gz $ cd frotz $ git init $ git add . (1) $ git commit -m "import of frotz source tree." $ git tag v2.43 (2) ``` e.g.2. 创建主题分支并开发。 ```shell $ git switch -c alsa-audio (1) $ edit/compile/test $ git restore curses/ux_audio_oss.c (2) $ git add curses/ux_audio_alsa.c (3) $ edit/compile/test $ git diff HEAD (4) $ git commit -a -s (5) $ edit/compile/test $ git diff HEAD^ (6) $ git commit -a --amend (7) $ git switch master (8) $ git merge alsa-audio (9) $ git log --since='3 days ago' (10) $ git log v2.43.. curses/ (11) ``` ### Individual Developer (Participant) > clone,pull,fetch,push,format-patch,send-email,request-pull e.g.1.克隆上游并处理它。将更改馈送到上游。 ```shell $ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6 $ cd my2.6 $ git switch -c mine master (1) $ edit/compile/test; git commit -a -s (2) $ git format-patch master (3) $ git send-email --to="person " 00*.patch (4) $ git switch master (5) $ git pull (6) $ git log -p ORIG_HEAD.. arch/i386 include/asm-i386 (7) $ git ls-remote --heads http://git.kernel.org/.../jgarzik/libata-dev.git (8) $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL (9) $ git reset --hard ORIG_HEAD (10) $ git gc (11) ``` e.g.2.推送到另一个存储库。 ```shell satellite$ git clone mothership:frotz frotz (1) satellite$ cd frotz satellite$ git config --get-regexp '^(remote|branch)\.' (2) remote.origin.url mothership:frotz remote.origin.fetch refs/heads/*:refs/remotes/origin/* branch.master.remote origin branch.master.merge refs/heads/master satellite$ git config remote.origin.push \ +refs/heads/*:refs/remotes/satellite/* (3) satellite$ edit/compile/test/commit satellite$ git push origin (4) mothership$ cd frotz mothership$ git switch master mothership$ git merge satellite/master (5) ``` e.g.3.从特定标记分支出来。 ```shell $ git switch -c private2.6.14 v2.6.14 (1) $ edit/compile/test; git commit -a $ git checkout master $ git cherry-pick v2.6.14..private2.6.14 (2) ``` ### Integrator 在小组项目中充当集成者的相当核心的人接收其他人所做的更改,审查和集成它们,并发布结果供其他人使用,除了参与者需要的命令之外,还使用这些命令。 > am,pull,format-patch,revert,push CR 的日常,审审又查查,bug找代码,找到背锅侠,真是快活啊。 ```shell $ git status (1) $ git branch --no-merged master (2) $ mailx (3) & s 2 3 4 5 ./+to-apply & s 7 8 ./+hold-linus & q $ git switch -c topic/one master $ git am -3 -i -s ./+to-apply (4) $ compile/test $ git switch -c hold/linus && git am -3 -i -s ./+hold-linus (5) $ git switch topic/one && git rebase master (6) $ git switch -C seen next (7) $ git merge topic/one topic/two && git merge hold/linus (8) $ git switch maint $ git cherry-pick master~4 (9) $ compile/test $ git tag -s -m "GIT 0.99.9x" v0.99.9x (10) $ git fetch ko && for branch in master maint next seen (11) do git show-branch ko/$branch $branch (12) done $ git push --follow-tags ko (13) ``` ### Repository Administration 个人使用场景较少,可以自行了解。 > daemon,shell,http-backend,instaweb --- --- url: /learn/x00u9kfq/index.md --- # Apache Kafka --- --- url: /learn/y5fr0111/index.md --- # Git 规范 当然,随着人工智能技术的发展,Commit Message 已经可以自动生成了,但我们还是得知道基本的格式和背后的道理。 ## Git 提交规范 业内普遍采用 Conventional Commits「约定式提交」规范,[中文站点](https://www.conventionalcommits.org/zh-hans/v1.0.0/)。 很简单,它长这样: ``` [optional scope]: [optional body] [optional footer(s)] ``` * ``: 此次提交的「类型」,**BREAKING CHANGE**「破坏性更新」 应该在其后加一个 `!`,包括: * feat: 表示在代码库中修复了一个 bug * fix: 表示在代码库中新增了一个功能 * build: 用于修改项目构建系统,例如修改依赖库、外部接口或者升级 Node 版本等; * chore: 用于对非业务性代码进行修改,例如修改构建流程或者工具配置等; * ci: 用于修改持续集成流程,例如修改 Travis、Jenkins 等工作流配置; * docs: 用于修改文档,例如修改 README 文件、API 文档等; * style: 用于修改代码的样式,例如调整缩进、空格、空行等; * refactor: 用于重构代码,例如修改代码结构、变量名、函数名等但不修改功能逻辑; * perf: 用于优化性能,例如提升代码的性能、减少内存占用等; * test: 用于修改测试用例,例如添加、删除、修改代码的测试用例等。 * `[optional scope]`: 可选,本次更改代码涉及的范围,如视图层 view * ``: 描述更改 * `[optional body]`: 正文,可选,进一步阐述更改的细节,如 ` 修复 #666` * `[optional footer(s)]`: 脚注,可选,可以写上协作者的细节 `Signed-off-by: someone`; `BREAKING CHANGE: ...` ## 示例 ### 包含了描述并且脚注中有破坏性变更的提交说明 ``` feat: allow provided config object to extend other configs BREAKING CHANGE: `extends` key in config file is now used for extending other config files ``` ### 包含了 ! 字符以提醒注意破坏性变更的提交说明 ```gitignore feat!: send an email to the customer when a product is shipped ``` ### 包含了范围和破坏性变更 ! 的提交说明 ``` feat(api)!: send an email to the customer when a product is shipped ``` ### 包含了 ! 和 BREAKING CHANGE 脚注的提交说明 ``` chore!: drop support for Node 6 BREAKING CHANGE: use JavaScript features not available in Node 6. ``` ### 不包含正文的提交说明 ``` docs: correct spelling of CHANGELOG ``` ### 包含范围的提交说明 ``` feat(lang): add polish language ``` ### 包含多行正文和多行脚注的提交说明 ``` fix: prevent racing of requests Introduce a request id and a reference to latest request. Dismiss incoming responses other than from latest request. Remove timeouts which were used to mitigate the racing issue but are obsolete now. Reviewed-by: Z Refs: #123 ``` ## 注意事项 勾选项容易搞混或遗忘,警钟长鸣。 1. \[ ] 每个提交都必须使用类型字段前缀,它由一个名词构成,诸如 feat 或 fix , 其后接可选的范围字段,可选的 !,以及必要的冒号(英文半角)和空格。 2. \[ ] 当一个提交为应用或类库实现了新功能时,必须使用 feat 类型。 3. \[ ] 当一个提交为应用修复了 bug 时,必须使用 fix 类型。 4. \[ ] 范围字段可以跟随在类型字段后面。范围必须是一个描述某部分代码的名词,并用圆括号包围,例如: fix(parser): 5. \[ ] 描述字段必须直接跟在 `<类型>(范围)` 前缀的冒号和空格之后。 描述指的是对代码变更的简短总结,例如: fix: array parsing issue when multiple spaces were contained in string 。 6. \[ ] 在简短描述之后,可以编写较长的提交正文,为代码变更提供额外的上下文信息。正文必须起始于描述字段结束的一个空行后。 7. \[x] 提交的正文内容自由编写,并可以使用空行分隔不同段落。 8. \[x] 在正文结束的一个空行之后,可以编写一行或多行脚注。每行脚注都必须包含一个令牌(token),后面紧跟 `:` 或 `#` 作为分隔符,后面再紧跟令牌的值(受 git trailer convention 启发)。 9. \[x] 脚注的令牌必须使用 - 作为连字符,比如 Acked-by (这样有助于 区分脚注和多行正文)。有一种例外情况就是 BREAKING CHANGE,它可以被认为是一个令牌。 10. \[x] 脚注的值可以包含空格和换行,值的解析过程必须直到下一个脚注的令牌/分隔符出现为止。 11. \[x] 破坏性变更必须在提交信息中标记出来,要么在`<类型>(范围)` 前缀中标记,要么作为脚注的一项。 12. \[x] 包含在脚注中时,破坏性变更必须包含大写的文本 BREAKING CHANGE,后面紧跟着冒号、空格,然后是描述,例如: BREAKING CHANGE: environment variables now take precedence over config files 。 13. \[x] 包含在 `<类型>(范围)` 前缀时,破坏性变更必须通过把 ! 直接放在 : 前面标记出来。 如果使用了 !,那么脚注中可以不写 BREAKING CHANGE:, 同时提交信息的描述中应该用来描述破坏性变更。 14. \[x] 在提交说明中,可以使用 feat 和 fix 之外的类型,比如:docs: updated ref docs. 。 15. \[ ] 工具的实现必须不区分大小写地解析构成约定式提交的信息单元,只有 BREAKING CHANGE 必须是大写的。 16. \[x] BREAKING-CHANGE 作为脚注的令牌时必须是 BREAKING CHANGE 的同义词。 --- --- url: /learn/ztkbwyny/index.md --- # VS Code [VS Code 是全世界程序员使用最多的集成开发环境](https://survey.stackoverflow.co/2024/technology#1-integrated-development-environment),以 Python, JavaScript, TypeScript, Go, Rust 等语言的开发为主。相较 JetBrains 等更加轻量化,插件市场丰富。 官方文档: ### 用户和工作区设置 文档参考: VS Code 分为两种配置文件: #### 用户设置 作用于「全局」实例,保存在微软账户云同步。 > 以下是我的用户设置,查看这些被修改的配置使用 `@modified` ```json title="settings.json" { // ===== Explorer / Files ===== "explorer.confirmDelete": false, "explorer.confirmDragAndDrop": false, "explorer.confirmPasteNative": false, "files.autoSave": "afterDelay", // ===== Git ===== "git.autofetch": true, "git.confirmSync": false, "git.enableSmartCommit": true, // ===== Security ===== "security.workspace.trust.untrustedFiles": "prompt", // ===== Editor ===== "editor.cursorBlinking": "phase", "editor.cursorSmoothCaretAnimation": "on", "editor.cursorStyle": "block", "editor.fontFamily": "Fira Code", "editor.fontLigatures": true, "editor.fontSize": 12.5, "editor.formatOnSave": true, "editor.insertSpaces": true, "editor.lineHeight": 1.5, "editor.mouseWheelZoom": true, // "editor.renderWhitespace": "all" // ===== Terminal ===== "terminal.integrated.cursorStyleInactive": "line", "terminal.integrated.enableMultiLinePasteWarning": "never", "terminal.integrated.fontFamily": "Fira Code", // ===== Workbench ===== "workbench.colorTheme": "i3 - Dark+ - Github Dark", "workbench.iconTheme": "ayu" } ``` *** #### 工作区设置 存储在「工作区」内的设置,仅在打开工作区时适用,工作区设置是针对项目特定的,可以覆盖用户设置。 `.vscode` 配置文件规定 WorkSpace「工作区」的各种行为 ## 技巧和窍门 ### Windows 快捷键 @[pdf](/bibs/keyboard-shortcuts-windows.pdf) ### 键盘映射 这里仅讨论 *Emacs* 及 *Vim* 的 Keymap 设置,其他编辑器参考 [键盘映射文档](https://code.visualstudio.com/docs/getstarted/tips-and-tricks#_keymaps) ## 终端 Shell 终端可以使用计算机上安装的各种 Shell。Shell 是一种通过与操作系统交互来解释和执行命令的程序。Shell 的示例包括 Bash、Zsh 和 PowerShell。 ### 主题设置 VS Code 官方推荐使用 starship 终端主题。 Powershell 是默认的 Shell,安装脚本 ```shell winget install starship ``` 在 `C:\Users\>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1` 中修改启动脚本。 ```shell Invoke-Expression (&starship init powershell) # [!code ++] ``` --- --- url: /life/manbo/collection/index.md --- # 曼波合集 曼波合集,来自全民制作人 ## Top 10 @[bilibili](BV1QNgHzRE1m) > 建议一起打开,锻炼听力(不是) ## 高难度 ### ⚡约 德 尔 曼 波⚡ @[bilibili](BV1KUMAzdEaZ) @[bilibili](BV1AMgVzQE9T) ### 哈基米:我无怨无悔 @[bilibili](BV1HuJWzPEKa) ### 夜来哈 @[bilibili](BV1SGjSzLEG7) --- --- url: /more/about-blog/index.md --- # about ## 站点结构 --- --- url: /more/analytics/index.md --- # analytics :::warning 此页面开发中 ::: ::: echarts 网站访问量 ```js var xAxisData = []; var data1 = []; var data2 = []; for (var i = 0; i < 100; i++) { xAxisData.push('A' + i); data1.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5); data2.push((Math.cos(i / 5) * (i / 5 - 10) + i / 6) * 5); } option = { title: { text: 'Bar Animation Delay' }, legend: { data: ['bar', 'bar2'] }, toolbox: { // y: 'bottom', feature: { magicType: { type: ['stack'] }, dataView: {}, saveAsImage: { pixelRatio: 2 } } }, tooltip: {}, xAxis: { data: xAxisData, splitLine: { show: false } }, yAxis: {}, series: [ { name: 'bar', type: 'bar', data: data1, emphasis: { focus: 'series' }, animationDelay: function (idx) { return idx * 10; } }, { name: 'bar2', type: 'bar', data: data2, emphasis: { focus: 'series' }, animationDelay: function (idx) { return idx * 10 + 100; } } ], animationEasing: 'elasticOut', animationDelayUpdate: function (idx) { return idx * 5; } }; ``` ::: :::echarts ```js option = { title: { text: 'Rainfall and Flow Relationship', left: 'center' }, grid: { bottom: 80 }, toolbox: { feature: { dataZoom: { yAxisIndex: 'none' }, restore: {}, saveAsImage: {} } }, tooltip: { trigger: 'axis', axisPointer: { type: 'cross', animation: false, label: { backgroundColor: '#505765' } } }, legend: { data: ['Flow', 'Rainfall'], left: 10 }, dataZoom: [ { show: true, realtime: true, start: 65, end: 85 }, { type: 'inside', realtime: true, start: 65, end: 85 } ], xAxis: [ { type: 'category', boundaryGap: false, axisLine: { onZero: false }, // prettier-ignore data: [ '2009/6/12 2:00', '2009/6/12 3:00', '2009/6/12 4:00', '2009/6/12 5:00', '2009/6/12 6:00', '2009/6/12 7:00', '2009/6/12 8:00', '2009/6/12 9:00', '2009/6/12 10:00', '2009/6/12 11:00', '2009/6/12 12:00', '2009/6/12 13:00', '2009/6/12 14:00', '2009/6/12 15:00', '2009/6/12 16:00', '2009/6/12 17:00', '2009/6/12 18:00', '2009/6/12 19:00', '2009/6/12 20:00', '2009/6/12 21:00', '2009/6/12 22:00', '2009/6/12 23:00', '2009/6/13 0:00', '2009/6/13 1:00', '2009/6/13 2:00', '2009/6/13 3:00', '2009/6/13 4:00', '2009/6/13 5:00', '2009/6/13 6:00', '2009/6/13 7:00', '2009/6/13 8:00', '2009/6/13 9:00', '2009/6/13 10:00', '2009/6/13 11:00', '2009/6/13 12:00', '2009/6/13 13:00', '2009/6/13 14:00', '2009/6/13 15:00', '2009/6/13 16:00', '2009/6/13 17:00', '2009/6/13 18:00', '2009/6/13 19:00', '2009/6/13 20:00', '2009/6/13 21:00', '2009/6/13 22:00', '2009/6/13 23:00', '2009/6/14 0:00', '2009/6/14 1:00', '2009/6/14 2:00', '2009/6/14 3:00', '2009/6/14 4:00', '2009/6/14 5:00', '2009/6/14 6:00', '2009/6/14 7:00', '2009/6/14 8:00', '2009/6/14 9:00', '2009/6/14 10:00', '2009/6/14 11:00', '2009/6/14 12:00', '2009/6/14 13:00', '2009/6/14 14:00', '2009/6/14 15:00', '2009/6/14 16:00', '2009/6/14 17:00', '2009/6/14 18:00', '2009/6/14 19:00', '2009/6/14 20:00', '2009/6/14 21:00', '2009/6/14 22:00', '2009/6/14 23:00', '2009/6/15 0:00', '2009/6/15 1:00', '2009/6/15 2:00', '2009/6/15 3:00', '2009/6/15 4:00', '2009/6/15 5:00', '2009/6/15 6:00', '2009/6/15 7:00', '2009/6/15 8:00', '2009/6/15 9:00', '2009/6/15 10:00', '2009/6/15 11:00', '2009/6/15 12:00', '2009/6/15 13:00', '2009/6/15 14:00', '2009/6/15 15:00', '2009/6/15 16:00', '2009/6/15 17:00', '2009/6/15 18:00', '2009/6/15 19:00', '2009/6/15 20:00', '2009/6/15 21:00', '2009/6/15 22:00', '2009/6/15 23:00', '2009/6/15 0:00', '2009/6/16 1:00', '2009/6/16 2:00', '2009/6/16 3:00', '2009/6/16 4:00', '2009/6/16 5:00', '2009/6/16 6:00', '2009/6/16 7:00', '2009/6/16 8:00', '2009/6/16 9:00', '2009/6/16 10:00', '2009/6/16 11:00', '2009/6/16 12:00', '2009/6/16 13:00', '2009/6/16 14:00', '2009/6/16 15:00', '2009/6/16 16:00', '2009/6/16 17:00', '2009/6/16 18:00', '2009/6/16 19:00', '2009/6/16 20:00', '2009/6/16 21:00', '2009/6/16 22:00', '2009/6/16 23:00', '2009/6/15 0:00', '2009/6/17 1:00', '2009/6/17 2:00', '2009/6/17 3:00', '2009/6/17 4:00', '2009/6/17 5:00', '2009/6/17 6:00', '2009/6/17 7:00', '2009/6/17 8:00', '2009/6/17 9:00', '2009/6/17 10:00', '2009/6/17 11:00', '2009/6/17 12:00', '2009/6/17 13:00', '2009/6/17 14:00', '2009/6/17 15:00', '2009/6/17 16:00', '2009/6/17 17:00', '2009/6/17 18:00', '2009/6/17 19:00', '2009/6/17 20:00', '2009/6/17 21:00', '2009/6/17 22:00', '2009/6/17 23:00', '2009/6/18 0:00', '2009/6/18 1:00', '2009/6/18 2:00', '2009/6/18 3:00', '2009/6/18 4:00', '2009/6/18 5:00', '2009/6/18 6:00', '2009/6/18 7:00', '2009/6/18 8:00', '2009/6/18 9:00', '2009/6/18 10:00', '2009/6/18 11:00', '2009/6/18 12:00', '2009/6/18 13:00', '2009/6/18 14:00', '2009/6/18 15:00', '2009/6/18 16:00', '2009/6/18 17:00', '2009/6/18 18:00', '2009/6/18 19:00', '2009/6/18 20:00', '2009/6/18 21:00', '2009/6/18 22:00', '2009/6/18 23:00', '2009/6/15 0:00', '2009/6/19 1:00', '2009/6/19 2:00', '2009/6/19 3:00', '2009/6/19 4:00', '2009/6/19 5:00', '2009/6/19 6:00', '2009/6/19 7:00', '2009/6/19 8:00', '2009/6/19 9:00', '2009/6/19 10:00', '2009/6/19 11:00', '2009/6/19 12:00', '2009/6/19 13:00', '2009/6/19 14:00', '2009/6/19 15:00', '2009/6/19 16:00', '2009/6/19 17:00', '2009/6/19 18:00', '2009/6/19 19:00', '2009/6/19 20:00', '2009/6/19 21:00', '2009/6/19 22:00', '2009/6/19 23:00', '2009/6/20 0:00', '2009/6/20 1:00', '2009/6/20 2:00', '2009/6/20 3:00', '2009/6/20 4:00', '2009/6/20 5:00', '2009/6/20 6:00', '2009/6/20 7:00', '2009/6/20 8:00', '2009/6/20 9:00', '2009/6/20 10:00', '2009/6/20 11:00', '2009/6/20 12:00', '2009/6/20 13:00', '2009/6/20 14:00', '2009/6/20 15:00', '2009/6/20 16:00', '2009/6/20 17:00', '2009/6/20 18:00', '2009/6/20 19:00', '2009/6/20 20:00', '2009/6/20 21:00', '2009/6/20 22:00', '2009/6/20 23:00', '2009/6/21 0:00', '2009/6/21 1:00', '2009/6/21 2:00', '2009/6/21 3:00', '2009/6/21 4:00', '2009/6/21 5:00', '2009/6/21 6:00', '2009/6/21 7:00', '2009/6/21 8:00', '2009/6/21 9:00', '2009/6/21 10:00', '2009/6/21 11:00', '2009/6/21 12:00', '2009/6/21 13:00', '2009/6/21 14:00', '2009/6/21 15:00', '2009/6/21 16:00', '2009/6/21 17:00', '2009/6/21 18:00', '2009/6/21 19:00', '2009/6/21 20:00', '2009/6/21 21:00', '2009/6/21 22:00', '2009/6/21 23:00', '2009/6/22 0:00', '2009/6/22 1:00', '2009/6/22 2:00', '2009/6/22 3:00', '2009/6/22 4:00', '2009/6/22 5:00', '2009/6/22 6:00', '2009/6/22 7:00', '2009/6/22 8:00', '2009/6/22 9:00', '2009/6/22 10:00', '2009/6/22 11:00', '2009/6/22 12:00', '2009/6/22 13:00', '2009/6/22 14:00', '2009/6/22 15:00', '2009/6/22 16:00', '2009/6/22 17:00', '2009/6/22 18:00', '2009/6/22 19:00', '2009/6/22 20:00', '2009/6/22 21:00', '2009/6/22 22:00', '2009/6/22 23:00', '2009/6/23 0:00', '2009/6/23 1:00', '2009/6/23 2:00', '2009/6/23 3:00', '2009/6/23 4:00', '2009/6/23 5:00', '2009/6/23 6:00', '2009/6/23 7:00', '2009/6/23 8:00', '2009/6/23 9:00', '2009/6/23 10:00', '2009/6/23 11:00', '2009/6/23 12:00', '2009/6/23 13:00', '2009/6/23 14:00', '2009/6/23 15:00', '2009/6/23 16:00', '2009/6/23 17:00', '2009/6/23 18:00', '2009/6/23 19:00', '2009/6/23 20:00', '2009/6/23 21:00', '2009/6/23 22:00', '2009/6/23 23:00', '2009/6/24 0:00', '2009/6/24 1:00', '2009/6/24 2:00', '2009/6/24 3:00', '2009/6/24 4:00', '2009/6/24 5:00', '2009/6/24 6:00', '2009/6/24 7:00', '2009/6/24 8:00', '2009/6/24 9:00', '2009/6/24 10:00', '2009/6/24 11:00', '2009/6/24 12:00', '2009/6/24 13:00', '2009/6/24 14:00', '2009/6/24 15:00', '2009/6/24 16:00', '2009/6/24 17:00', '2009/6/24 18:00', '2009/6/24 19:00', '2009/6/24 20:00', '2009/6/24 21:00', '2009/6/24 22:00', '2009/6/24 23:00', '2009/6/25 0:00', '2009/6/25 1:00', '2009/6/25 2:00', '2009/6/25 3:00', '2009/6/25 4:00', '2009/6/25 5:00', '2009/6/25 6:00', '2009/6/25 7:00', '2009/6/25 8:00', '2009/6/25 9:00', '2009/6/25 10:00', '2009/6/25 11:00', '2009/6/25 12:00', '2009/6/25 13:00', '2009/6/25 14:00', '2009/6/25 15:00', '2009/6/25 16:00', '2009/6/25 17:00', '2009/6/25 18:00', '2009/6/25 19:00', '2009/6/25 20:00', '2009/6/25 21:00', '2009/6/25 22:00', '2009/6/25 23:00', '2009/6/26 0:00', '2009/6/26 1:00', '2009/6/26 2:00', '2009/6/26 3:00', '2009/6/26 4:00', '2009/6/26 5:00', '2009/6/26 6:00', '2009/6/26 7:00', '2009/6/26 8:00', '2009/6/26 9:00', '2009/6/26 10:00', '2009/6/26 11:00', '2009/6/26 12:00', '2009/6/26 13:00', '2009/6/26 14:00', '2009/6/26 15:00', '2009/6/26 16:00', '2009/6/26 17:00', '2009/6/26 18:00', '2009/6/26 19:00', '2009/6/26 20:00', '2009/6/26 21:00', '2009/6/26 22:00', '2009/6/26 23:00', '2009/6/27 0:00', '2009/6/27 1:00', '2009/6/27 2:00', '2009/6/27 3:00', '2009/6/27 4:00', '2009/6/27 5:00', '2009/6/27 6:00', '2009/6/27 7:00', '2009/6/27 8:00', '2009/6/27 9:00', '2009/6/27 10:00', '2009/6/27 11:00', '2009/6/27 12:00', '2009/6/27 13:00', '2009/6/27 14:00', '2009/6/27 15:00', '2009/6/27 16:00', '2009/6/27 17:00', '2009/6/27 18:00', '2009/6/27 19:00', '2009/6/27 20:00', '2009/6/27 21:00', '2009/6/27 22:00', '2009/6/27 23:00', '2009/6/28 0:00', '2009/6/28 1:00', '2009/6/28 2:00', '2009/6/28 3:00', '2009/6/28 4:00', '2009/6/28 5:00', '2009/6/28 6:00', '2009/6/28 7:00', '2009/6/28 8:00', '2009/6/28 9:00', '2009/6/28 10:00', '2009/6/28 11:00', '2009/6/28 12:00', '2009/6/28 13:00', '2009/6/28 14:00', '2009/6/28 15:00', '2009/6/28 16:00', '2009/6/28 17:00', '2009/6/28 18:00', '2009/6/28 19:00', '2009/6/28 20:00', '2009/6/28 21:00', '2009/6/28 22:00', '2009/6/28 23:00', '2009/6/29 0:00', '2009/6/29 1:00', '2009/6/29 2:00', '2009/6/29 3:00', '2009/6/29 4:00', '2009/6/29 5:00', '2009/6/29 6:00', '2009/6/29 7:00', '2009/6/29 8:00', '2009/6/29 9:00', '2009/6/29 10:00', '2009/6/29 11:00', '2009/6/29 12:00', '2009/6/29 13:00', '2009/6/29 14:00', '2009/6/29 15:00', '2009/6/29 16:00', '2009/6/29 17:00', '2009/6/29 18:00', '2009/6/29 19:00', '2009/6/29 20:00', '2009/6/29 21:00', '2009/6/29 22:00', '2009/6/29 23:00', '2009/6/30 0:00', '2009/6/30 1:00', '2009/6/30 2:00', '2009/6/30 3:00', '2009/6/30 4:00', '2009/6/30 5:00', '2009/6/30 6:00', '2009/6/30 7:00', '2009/6/30 8:00', '2009/6/30 9:00', '2009/6/30 10:00', '2009/6/30 11:00', '2009/6/30 12:00', '2009/6/30 13:00', '2009/6/30 14:00', '2009/6/30 15:00', '2009/6/30 16:00', '2009/6/30 17:00', '2009/6/30 18:00', '2009/6/30 19:00', '2009/6/30 20:00', '2009/6/30 21:00', '2009/6/30 22:00', '2009/6/30 23:00', '2009/7/1 0:00', '2009/7/1 1:00', '2009/7/1 2:00', '2009/7/1 3:00', '2009/7/1 4:00', '2009/7/1 5:00', '2009/7/1 6:00', '2009/7/1 7:00', '2009/7/1 8:00', '2009/7/1 9:00', '2009/7/1 10:00', '2009/7/1 11:00', '2009/7/1 12:00', '2009/7/1 13:00', '2009/7/1 14:00', '2009/7/1 15:00', '2009/7/1 16:00', '2009/7/1 17:00', '2009/7/1 18:00', '2009/7/1 19:00', '2009/7/1 20:00', '2009/7/1 21:00', '2009/7/1 22:00', '2009/7/1 23:00', '2009/7/2 0:00', '2009/7/2 1:00', '2009/7/2 2:00', '2009/7/2 3:00', '2009/7/2 4:00', '2009/7/2 5:00', '2009/7/2 6:00', '2009/7/2 7:00', '2009/7/2 8:00', '2009/7/2 9:00', '2009/7/2 10:00', '2009/7/2 11:00', '2009/7/2 12:00', '2009/7/2 13:00', '2009/7/2 14:00', '2009/7/2 15:00', '2009/7/2 16:00', '2009/7/2 17:00', '2009/7/2 18:00', '2009/7/2 19:00', '2009/7/2 20:00', '2009/7/2 21:00', '2009/7/2 22:00', '2009/7/2 23:00', '2009/7/3 0:00', '2009/7/3 1:00', '2009/7/3 2:00', '2009/7/3 3:00', '2009/7/3 4:00', '2009/7/3 5:00', '2009/7/3 6:00', '2009/7/3 7:00', '2009/7/3 8:00', '2009/7/3 9:00', '2009/7/3 10:00', '2009/7/3 11:00', '2009/7/3 12:00', '2009/7/3 13:00', '2009/7/3 14:00', '2009/7/3 15:00', '2009/7/3 16:00', '2009/7/3 17:00', '2009/7/3 18:00', '2009/7/3 19:00', '2009/7/3 20:00', '2009/7/3 21:00', '2009/7/3 22:00', '2009/7/3 23:00', '2009/7/4 0:00', '2009/7/4 1:00', '2009/7/4 2:00', '2009/7/4 3:00', '2009/7/4 4:00', '2009/7/4 5:00', '2009/7/4 6:00', '2009/7/4 7:00', '2009/7/4 8:00', '2009/7/4 9:00', '2009/7/4 10:00', '2009/7/4 11:00', '2009/7/4 12:00', '2009/7/4 13:00', '2009/7/4 14:00', '2009/7/4 15:00', '2009/7/4 16:00', '2009/7/4 17:00', '2009/7/4 18:00', '2009/7/4 19:00', '2009/7/4 20:00', '2009/7/4 21:00', '2009/7/4 22:00', '2009/7/4 23:00', '2009/7/5 0:00', '2009/7/5 1:00', '2009/7/5 2:00', '2009/7/5 3:00', '2009/7/5 4:00', '2009/7/5 5:00', '2009/7/5 6:00', '2009/7/5 7:00', '2009/7/5 8:00', '2009/7/5 9:00', '2009/7/5 10:00', '2009/7/5 11:00', '2009/7/5 12:00', '2009/7/5 13:00', '2009/7/5 14:00', '2009/7/5 15:00', '2009/7/5 16:00', '2009/7/5 17:00', '2009/7/5 18:00', '2009/7/5 19:00', '2009/7/5 20:00', '2009/7/5 21:00', '2009/7/5 22:00', '2009/7/5 23:00', '2009/7/6 0:00', '2009/7/6 1:00', '2009/7/6 2:00', '2009/7/6 3:00', '2009/7/6 4:00', '2009/7/6 5:00', '2009/7/6 6:00', '2009/7/6 7:00', '2009/7/6 8:00', '2009/7/6 9:00', '2009/7/6 10:00', '2009/7/6 11:00', '2009/7/6 12:00', '2009/7/6 13:00', '2009/7/6 14:00', '2009/7/6 15:00', '2009/7/6 16:00', '2009/7/6 17:00', '2009/7/6 18:00', '2009/7/6 19:00', '2009/7/6 20:00', '2009/7/6 21:00', '2009/7/6 22:00', '2009/7/6 23:00', '2009/7/7 0:00', '2009/7/7 1:00', '2009/7/7 2:00', '2009/7/7 3:00', '2009/7/7 4:00', '2009/7/7 5:00', '2009/7/7 6:00', '2009/7/7 7:00', '2009/7/7 8:00', '2009/7/7 9:00', '2009/7/7 10:00', '2009/7/7 11:00', '2009/7/7 12:00', '2009/7/7 13:00', '2009/7/7 14:00', '2009/7/7 15:00', '2009/7/7 16:00', '2009/7/7 17:00', '2009/7/7 18:00', '2009/7/7 19:00', '2009/7/7 20:00', '2009/7/7 21:00', '2009/7/7 22:00', '2009/7/7 23:00', '2009/7/8 0:00', '2009/7/8 1:00', '2009/7/8 2:00', '2009/7/8 3:00', '2009/7/8 4:00', '2009/7/8 5:00', '2009/7/8 6:00', '2009/7/8 7:00', '2009/7/8 8:00', '2009/7/8 9:00', '2009/7/8 10:00', '2009/7/8 11:00', '2009/7/8 12:00', '2009/7/8 13:00', '2009/7/8 14:00', '2009/7/8 15:00', '2009/7/8 16:00', '2009/7/8 17:00', '2009/7/8 18:00', '2009/7/8 19:00', '2009/7/8 20:00', '2009/7/8 21:00', '2009/7/8 22:00', '2009/7/8 23:00', '2009/7/9 0:00', '2009/7/9 1:00', '2009/7/9 2:00', '2009/7/9 3:00', '2009/7/9 4:00', '2009/7/9 5:00', '2009/7/9 6:00', '2009/7/9 7:00', '2009/7/9 8:00', '2009/7/9 9:00', '2009/7/9 10:00', '2009/7/9 11:00', '2009/7/9 12:00', '2009/7/9 13:00', '2009/7/9 14:00', '2009/7/9 15:00', '2009/7/9 16:00', '2009/7/9 17:00', '2009/7/9 18:00', '2009/7/9 19:00', '2009/7/9 20:00', '2009/7/9 21:00', '2009/7/9 22:00', '2009/7/9 23:00', '2009/7/10 0:00', '2009/7/10 1:00', '2009/7/10 2:00', '2009/7/10 3:00', '2009/7/10 4:00', '2009/7/10 5:00', '2009/7/10 6:00', '2009/7/10 7:00', '2009/7/10 8:00', '2009/7/10 9:00', '2009/7/10 10:00', '2009/7/10 11:00', '2009/7/10 12:00', '2009/7/10 13:00', '2009/7/10 14:00', '2009/7/10 15:00', '2009/7/10 16:00', '2009/7/10 17:00', '2009/7/10 18:00', '2009/7/10 19:00', '2009/7/10 20:00', '2009/7/10 21:00', '2009/7/10 22:00', '2009/7/10 23:00', '2009/7/11 0:00', '2009/7/11 1:00', '2009/7/11 2:00', '2009/7/11 3:00', '2009/7/11 4:00', '2009/7/11 5:00', '2009/7/11 6:00', '2009/7/11 7:00', '2009/7/11 8:00', '2009/7/11 9:00', '2009/7/11 10:00', '2009/7/11 11:00', '2009/7/11 12:00', '2009/7/11 13:00', '2009/7/11 14:00', '2009/7/11 15:00', '2009/7/11 16:00', '2009/7/11 17:00', '2009/7/11 18:00', '2009/7/11 19:00', '2009/7/11 20:00', '2009/7/11 21:00', '2009/7/11 22:00', '2009/7/11 23:00', '2009/7/12 0:00', '2009/7/12 1:00', '2009/7/12 2:00', '2009/7/12 3:00', '2009/7/12 4:00', '2009/7/12 5:00', '2009/7/12 6:00', '2009/7/12 7:00', '2009/7/12 8:00', '2009/7/12 9:00', '2009/7/12 10:00', '2009/7/12 11:00', '2009/7/12 12:00', '2009/7/12 13:00', '2009/7/12 14:00', '2009/7/12 15:00', '2009/7/12 16:00', '2009/7/12 17:00', '2009/7/12 18:00', '2009/7/12 19:00', '2009/7/12 20:00', '2009/7/12 21:00', '2009/7/12 22:00', '2009/7/12 23:00', '2009/7/13 0:00', '2009/7/13 1:00', '2009/7/13 2:00', '2009/7/13 3:00', '2009/7/13 4:00', '2009/7/13 5:00', '2009/7/13 6:00', '2009/7/13 7:00', '2009/7/13 8:00', '2009/7/13 9:00', '2009/7/13 10:00', '2009/7/13 11:00', '2009/7/13 12:00', '2009/7/13 13:00', '2009/7/13 14:00', '2009/7/13 15:00', '2009/7/13 16:00', '2009/7/13 17:00', '2009/7/13 18:00', '2009/7/13 19:00', '2009/7/13 20:00', '2009/7/13 21:00', '2009/7/13 22:00', '2009/7/13 23:00', '2009/7/14 0:00', '2009/7/14 1:00', '2009/7/14 2:00', '2009/7/14 3:00', '2009/7/14 4:00', '2009/7/14 5:00', '2009/7/14 6:00', '2009/7/14 7:00', '2009/7/14 8:00', '2009/7/14 9:00', '2009/7/14 10:00', '2009/7/14 11:00', '2009/7/14 12:00', '2009/7/14 13:00', '2009/7/14 14:00', '2009/7/14 15:00', '2009/7/14 16:00', '2009/7/14 17:00', '2009/7/14 18:00', '2009/7/14 19:00', '2009/7/14 20:00', '2009/7/14 21:00', '2009/7/14 22:00', '2009/7/14 23:00', '2009/7/15 0:00', '2009/7/15 1:00', '2009/7/15 2:00', '2009/7/15 3:00', '2009/7/15 4:00', '2009/7/15 5:00', '2009/7/15 6:00', '2009/7/15 7:00', '2009/7/15 8:00', '2009/7/15 9:00', '2009/7/15 10:00', '2009/7/15 11:00', '2009/7/15 12:00', '2009/7/15 13:00', '2009/7/15 14:00', '2009/7/15 15:00', '2009/7/15 16:00', '2009/7/15 17:00', '2009/7/15 18:00', '2009/7/15 19:00', '2009/7/15 20:00', '2009/7/15 21:00', '2009/7/15 22:00', '2009/7/15 23:00', '2009/7/16 0:00', '2009/7/16 1:00', '2009/7/16 2:00', '2009/7/16 3:00', '2009/7/16 4:00', '2009/7/16 5:00', '2009/7/16 6:00', '2009/7/16 7:00', '2009/7/16 8:00', '2009/7/16 9:00', '2009/7/16 10:00', '2009/7/16 11:00', '2009/7/16 12:00', '2009/7/16 13:00', '2009/7/16 14:00', '2009/7/16 15:00', '2009/7/16 16:00', '2009/7/16 17:00', '2009/7/16 18:00', '2009/7/16 19:00', '2009/7/16 20:00', '2009/7/16 21:00', '2009/7/16 22:00', '2009/7/16 23:00', '2009/7/17 0:00', '2009/7/17 1:00', '2009/7/17 2:00', '2009/7/17 3:00', '2009/7/17 4:00', '2009/7/17 5:00', '2009/7/17 6:00', '2009/7/17 7:00', '2009/7/17 8:00', '2009/7/17 9:00', '2009/7/17 10:00', '2009/7/17 11:00', '2009/7/17 12:00', '2009/7/17 13:00', '2009/7/17 14:00', '2009/7/17 15:00', '2009/7/17 16:00', '2009/7/17 17:00', '2009/7/17 18:00', '2009/7/17 19:00', '2009/7/17 20:00', '2009/7/17 21:00', '2009/7/17 22:00', '2009/7/17 23:00', '2009/7/18 0:00', '2009/7/18 1:00', '2009/7/18 2:00', '2009/7/18 3:00', '2009/7/18 4:00', '2009/7/18 5:00', '2009/7/18 6:00', '2009/7/18 7:00', '2009/7/18 8:00', '2009/7/18 9:00', '2009/7/18 10:00', '2009/7/18 11:00', '2009/7/18 12:00', '2009/7/18 13:00', '2009/7/18 14:00', '2009/7/18 15:00', '2009/7/18 16:00', '2009/7/18 17:00', '2009/7/18 18:00', '2009/7/18 19:00', '2009/7/18 20:00', '2009/7/18 21:00', '2009/7/18 22:00', '2009/7/18 23:00', '2009/7/19 0:00', '2009/7/19 1:00', '2009/7/19 2:00', '2009/7/19 3:00', '2009/7/19 4:00', '2009/7/19 5:00', '2009/7/19 6:00', '2009/7/19 7:00', '2009/7/19 8:00', '2009/7/19 9:00', '2009/7/19 10:00', '2009/7/19 11:00', '2009/7/19 12:00', '2009/7/19 13:00', '2009/7/19 14:00', '2009/7/19 15:00', '2009/7/19 16:00', '2009/7/19 17:00', '2009/7/19 18:00', '2009/7/19 19:00', '2009/7/19 20:00', '2009/7/19 21:00', '2009/7/19 22:00', '2009/7/19 23:00', '2009/7/20 0:00', '2009/7/20 1:00', '2009/7/20 2:00', '2009/7/20 3:00', '2009/7/20 4:00', '2009/7/20 5:00', '2009/7/20 6:00', '2009/7/20 7:00', '2009/7/20 8:00', '2009/7/20 9:00', '2009/7/20 10:00', '2009/7/20 11:00', '2009/7/20 12:00', '2009/7/20 13:00', '2009/7/20 14:00', '2009/7/20 15:00', '2009/7/20 16:00', '2009/7/20 17:00', '2009/7/20 18:00', '2009/7/20 19:00', '2009/7/20 20:00', '2009/7/20 21:00', '2009/7/20 22:00', '2009/7/20 23:00', '2009/7/21 0:00', '2009/7/21 1:00', '2009/7/21 2:00', '2009/7/21 3:00', '2009/7/21 4:00', '2009/7/21 5:00', '2009/7/21 6:00', '2009/7/21 7:00', '2009/7/21 8:00', '2009/7/21 9:00', '2009/7/21 10:00', '2009/7/21 11:00', '2009/7/21 12:00', '2009/7/21 13:00', '2009/7/21 14:00', '2009/7/21 15:00', '2009/7/21 16:00', '2009/7/21 17:00', '2009/7/21 18:00', '2009/7/21 19:00', '2009/7/21 20:00', '2009/7/21 21:00', '2009/7/21 22:00', '2009/7/21 23:00', '2009/7/22 0:00', '2009/7/22 1:00', '2009/7/22 2:00', '2009/7/22 3:00', '2009/7/22 4:00', '2009/7/22 5:00', '2009/7/22 6:00', '2009/7/22 7:00', '2009/7/22 8:00', '2009/7/22 9:00', '2009/7/22 10:00', '2009/7/22 11:00', '2009/7/22 12:00', '2009/7/22 13:00', '2009/7/22 14:00', '2009/7/22 15:00', '2009/7/22 16:00', '2009/7/22 17:00', '2009/7/22 18:00', '2009/7/22 19:00', '2009/7/22 20:00', '2009/7/22 21:00', '2009/7/22 22:00', '2009/7/22 23:00', '2009/7/23 0:00', '2009/7/23 1:00', '2009/7/23 2:00', '2009/7/23 3:00', '2009/7/23 4:00', '2009/7/23 5:00', '2009/7/23 6:00', '2009/7/23 7:00', '2009/7/23 8:00', '2009/7/23 9:00', '2009/7/23 10:00', '2009/7/23 11:00', '2009/7/23 12:00', '2009/7/23 13:00', '2009/7/23 14:00', '2009/7/23 15:00', '2009/7/23 16:00', '2009/7/23 17:00', '2009/7/23 18:00', '2009/7/23 19:00', '2009/7/23 20:00', '2009/7/23 21:00', '2009/7/23 22:00', '2009/7/23 23:00', '2009/7/24 0:00', '2009/7/24 1:00', '2009/7/24 2:00', '2009/7/24 3:00', '2009/7/24 4:00', '2009/7/24 5:00', '2009/7/24 6:00', '2009/7/24 7:00', '2009/7/24 8:00', '2009/7/24 9:00', '2009/7/24 10:00', '2009/7/24 11:00', '2009/7/24 12:00', '2009/7/24 13:00', '2009/7/24 14:00', '2009/7/24 15:00', '2009/7/24 16:00', '2009/7/24 17:00', '2009/7/24 18:00', '2009/7/24 19:00', '2009/7/24 20:00', '2009/7/24 21:00', '2009/7/24 22:00', '2009/7/24 23:00', '2009/7/25 0:00', '2009/7/25 1:00', '2009/7/25 2:00', '2009/7/25 3:00', '2009/7/25 4:00', '2009/7/25 5:00', '2009/7/25 6:00', '2009/7/25 7:00', '2009/7/25 8:00', '2009/7/25 9:00', '2009/7/25 10:00', '2009/7/25 11:00', '2009/7/25 12:00', '2009/7/25 13:00', '2009/7/25 14:00', '2009/7/25 15:00', '2009/7/25 16:00', '2009/7/25 17:00', '2009/7/25 18:00', '2009/7/25 19:00', '2009/7/25 20:00', '2009/7/25 21:00', '2009/7/25 22:00', '2009/7/25 23:00', '2009/7/26 0:00', '2009/7/26 1:00', '2009/7/26 2:00', '2009/7/26 3:00', '2009/7/26 4:00', '2009/7/26 5:00', '2009/7/26 6:00', '2009/7/26 7:00', '2009/7/26 8:00', '2009/7/26 9:00', '2009/7/26 10:00', '2009/7/26 11:00', '2009/7/26 12:00', '2009/7/26 13:00', '2009/7/26 14:00', '2009/7/26 15:00', '2009/7/26 16:00', '2009/7/26 17:00', '2009/7/26 18:00', '2009/7/26 19:00', '2009/7/26 20:00', '2009/7/26 21:00', '2009/7/26 22:00', '2009/7/26 23:00', '2009/7/27 0:00', '2009/7/27 1:00', '2009/7/27 2:00', '2009/7/27 3:00', '2009/7/27 4:00', '2009/7/27 5:00', '2009/7/27 6:00', '2009/7/27 7:00', '2009/7/27 8:00', '2009/7/27 9:00', '2009/7/27 10:00', '2009/7/27 11:00', '2009/7/27 12:00', '2009/7/27 13:00', '2009/7/27 14:00', '2009/7/27 15:00', '2009/7/27 16:00', '2009/7/27 17:00', '2009/7/27 18:00', '2009/7/27 19:00', '2009/7/27 20:00', '2009/7/27 21:00', '2009/7/27 22:00', '2009/7/27 23:00', '2009/7/28 0:00', '2009/7/28 1:00', '2009/7/28 2:00', '2009/7/28 3:00', '2009/7/28 4:00', '2009/7/28 5:00', '2009/7/28 6:00', '2009/7/28 7:00', '2009/7/28 8:00', '2009/7/28 9:00', '2009/7/28 10:00', '2009/7/28 11:00', '2009/7/28 12:00', '2009/7/28 13:00', '2009/7/28 14:00', '2009/7/28 15:00', '2009/7/28 16:00', '2009/7/28 17:00', '2009/7/28 18:00', '2009/7/28 19:00', '2009/7/28 20:00', '2009/7/28 21:00', '2009/7/28 22:00', '2009/7/28 23:00', '2009/7/29 0:00', '2009/7/29 1:00', '2009/7/29 2:00', '2009/7/29 3:00', '2009/7/29 4:00', '2009/7/29 5:00', '2009/7/29 6:00', '2009/7/29 7:00', '2009/7/29 8:00', '2009/7/29 9:00', '2009/7/29 10:00', '2009/7/29 11:00', '2009/7/29 12:00', '2009/7/29 13:00', '2009/7/29 14:00', '2009/7/29 15:00', '2009/7/29 16:00', '2009/7/29 17:00', '2009/7/29 18:00', '2009/7/29 19:00', '2009/7/29 20:00', '2009/7/29 21:00', '2009/7/29 22:00', '2009/7/29 23:00', '2009/7/30 0:00', '2009/7/30 1:00', '2009/7/30 2:00', '2009/7/30 3:00', '2009/7/30 4:00', '2009/7/30 5:00', '2009/7/30 6:00', '2009/7/30 7:00', '2009/7/30 8:00', '2009/7/30 9:00', '2009/7/30 10:00', '2009/7/30 11:00', '2009/7/30 12:00', '2009/7/30 13:00', '2009/7/30 14:00', '2009/7/30 15:00', '2009/7/30 16:00', '2009/7/30 17:00', '2009/7/30 18:00', '2009/7/30 19:00', '2009/7/30 20:00', '2009/7/30 21:00', '2009/7/30 22:00', '2009/7/30 23:00', '2009/7/31 0:00', '2009/7/31 1:00', '2009/7/31 2:00', '2009/7/31 3:00', '2009/7/31 4:00', '2009/7/31 5:00', '2009/7/31 6:00', '2009/7/31 7:00', '2009/7/31 8:00', '2009/7/31 9:00', '2009/7/31 10:00', '2009/7/31 11:00', '2009/7/31 12:00', '2009/7/31 13:00', '2009/7/31 14:00', '2009/7/31 15:00', '2009/7/31 16:00', '2009/7/31 17:00', '2009/7/31 18:00', '2009/7/31 19:00', '2009/7/31 20:00', '2009/7/31 21:00', '2009/7/31 22:00', '2009/7/31 23:00', '2009/8/1 0:00', '2009/8/1 1:00', '2009/8/1 2:00', '2009/8/1 3:00', '2009/8/1 4:00', '2009/8/1 5:00', '2009/8/1 6:00', '2009/8/1 7:00', '2009/8/1 8:00', '2009/8/1 9:00', '2009/8/1 10:00', '2009/8/1 11:00', '2009/8/1 12:00', '2009/8/1 13:00', '2009/8/1 14:00', '2009/8/1 15:00', '2009/8/1 16:00', '2009/8/1 17:00', '2009/8/1 18:00', '2009/8/1 19:00', '2009/8/1 20:00', '2009/8/1 21:00', '2009/8/1 22:00', '2009/8/1 23:00', '2009/8/2 0:00', '2009/8/2 1:00', '2009/8/2 2:00', '2009/8/2 3:00', '2009/8/2 4:00', '2009/8/2 5:00', '2009/8/2 6:00', '2009/8/2 7:00', '2009/8/2 8:00', '2009/8/2 9:00', '2009/8/2 10:00', '2009/8/2 11:00', '2009/8/2 12:00', '2009/8/2 13:00', '2009/8/2 14:00', '2009/8/2 15:00', '2009/8/2 16:00', '2009/8/2 17:00', '2009/8/2 18:00', '2009/8/2 19:00', '2009/8/2 20:00', '2009/8/2 21:00', '2009/8/2 22:00', '2009/8/2 23:00', '2009/8/3 0:00', '2009/8/3 1:00', '2009/8/3 2:00', '2009/8/3 3:00', '2009/8/3 4:00', '2009/8/3 5:00', '2009/8/3 6:00', '2009/8/3 7:00', '2009/8/3 8:00', '2009/8/3 9:00', '2009/8/3 10:00', '2009/8/3 11:00', '2009/8/3 12:00', '2009/8/3 13:00', '2009/8/3 14:00', '2009/8/3 15:00', '2009/8/3 16:00', '2009/8/3 17:00', '2009/8/3 18:00', '2009/8/3 19:00', '2009/8/3 20:00', '2009/8/3 21:00', '2009/8/3 22:00', '2009/8/3 23:00', '2009/8/4 0:00', '2009/8/4 1:00', '2009/8/4 2:00', '2009/8/4 3:00', '2009/8/4 4:00', '2009/8/4 5:00', '2009/8/4 6:00', '2009/8/4 7:00', '2009/8/4 8:00', '2009/8/4 9:00', '2009/8/4 10:00', '2009/8/4 11:00', '2009/8/4 12:00', '2009/8/4 13:00', '2009/8/4 14:00', '2009/8/4 15:00', '2009/8/4 16:00', '2009/8/4 17:00', '2009/8/4 18:00', '2009/8/4 19:00', '2009/8/4 20:00', '2009/8/4 21:00', '2009/8/4 22:00', '2009/8/4 23:00', '2009/8/5 0:00', '2009/8/5 1:00', '2009/8/5 2:00', '2009/8/5 3:00', '2009/8/5 4:00', '2009/8/5 5:00', '2009/8/5 6:00', '2009/8/5 7:00', '2009/8/5 8:00', '2009/8/5 9:00', '2009/8/5 10:00', '2009/8/5 11:00', '2009/8/5 12:00', '2009/8/5 13:00', '2009/8/5 14:00', '2009/8/5 15:00', '2009/8/5 16:00', '2009/8/5 17:00', '2009/8/5 18:00', '2009/8/5 19:00', '2009/8/5 20:00', '2009/8/5 21:00', '2009/8/5 22:00', '2009/8/5 23:00', '2009/8/6 0:00', '2009/8/6 1:00', '2009/8/6 2:00', '2009/8/6 3:00', '2009/8/6 4:00', '2009/8/6 5:00', '2009/8/6 6:00', '2009/8/6 7:00', '2009/8/6 8:00', '2009/8/6 9:00', '2009/8/6 10:00', '2009/8/6 11:00', '2009/8/6 12:00', '2009/8/6 13:00', '2009/8/6 14:00', '2009/8/6 15:00', '2009/8/6 16:00', '2009/8/6 17:00', '2009/8/6 18:00', '2009/8/6 19:00', '2009/8/6 20:00', '2009/8/6 21:00', '2009/8/6 22:00', '2009/8/6 23:00', '2009/8/7 0:00', '2009/8/7 1:00', '2009/8/7 2:00', '2009/8/7 3:00', '2009/8/7 4:00', '2009/8/7 5:00', '2009/8/7 6:00', '2009/8/7 7:00', '2009/8/7 8:00', '2009/8/7 9:00', '2009/8/7 10:00', '2009/8/7 11:00', '2009/8/7 12:00', '2009/8/7 13:00', '2009/8/7 14:00', '2009/8/7 15:00', '2009/8/7 16:00', '2009/8/7 17:00', '2009/8/7 18:00', '2009/8/7 19:00', '2009/8/7 20:00', '2009/8/7 21:00', '2009/8/7 22:00', '2009/8/7 23:00', '2009/8/8 0:00', '2009/8/8 1:00', '2009/8/8 2:00', '2009/8/8 3:00', '2009/8/8 4:00', '2009/8/8 5:00', '2009/8/8 6:00', '2009/8/8 7:00', '2009/8/8 8:00', '2009/8/8 9:00', '2009/8/8 10:00', '2009/8/8 11:00', '2009/8/8 12:00', '2009/8/8 13:00', '2009/8/8 14:00', '2009/8/8 15:00', '2009/8/8 16:00', '2009/8/8 17:00', '2009/8/8 18:00', '2009/8/8 19:00', '2009/8/8 20:00', '2009/8/8 21:00', '2009/8/8 22:00', '2009/8/8 23:00', '2009/8/9 0:00', '2009/8/9 1:00', '2009/8/9 2:00', '2009/8/9 3:00', '2009/8/9 4:00', '2009/8/9 5:00', '2009/8/9 6:00', '2009/8/9 7:00', '2009/8/9 8:00', '2009/8/9 9:00', '2009/8/9 10:00', '2009/8/9 11:00', '2009/8/9 12:00', '2009/8/9 13:00', '2009/8/9 14:00', '2009/8/9 15:00', '2009/8/9 16:00', '2009/8/9 17:00', '2009/8/9 18:00', '2009/8/9 19:00', '2009/8/9 20:00', '2009/8/9 21:00', '2009/8/9 22:00', '2009/8/9 23:00', '2009/8/10 0:00', '2009/8/10 1:00', '2009/8/10 2:00', '2009/8/10 3:00', '2009/8/10 4:00', '2009/8/10 5:00', '2009/8/10 6:00', '2009/8/10 7:00', '2009/8/10 8:00', '2009/8/10 9:00', '2009/8/10 10:00', '2009/8/10 11:00', '2009/8/10 12:00', '2009/8/10 13:00', '2009/8/10 14:00', '2009/8/10 15:00', '2009/8/10 16:00', '2009/8/10 17:00', '2009/8/10 18:00', '2009/8/10 19:00', '2009/8/10 20:00', '2009/8/10 21:00', '2009/8/10 22:00', '2009/8/10 23:00', '2009/8/11 0:00', '2009/8/11 1:00', '2009/8/11 2:00', '2009/8/11 3:00', '2009/8/11 4:00', '2009/8/11 5:00', '2009/8/11 6:00', '2009/8/11 7:00', '2009/8/11 8:00', '2009/8/11 9:00', '2009/8/11 10:00', '2009/8/11 11:00', '2009/8/11 12:00', '2009/8/11 13:00', '2009/8/11 14:00', '2009/8/11 15:00', '2009/8/11 16:00', '2009/8/11 17:00', '2009/8/11 18:00', '2009/8/11 19:00', '2009/8/11 20:00', '2009/8/11 21:00', '2009/8/11 22:00', '2009/8/11 23:00', '2009/8/12 0:00', '2009/8/12 1:00', '2009/8/12 2:00', '2009/8/12 3:00', '2009/8/12 4:00', '2009/8/12 5:00', '2009/8/12 6:00', '2009/8/12 7:00', '2009/8/12 8:00', '2009/8/12 9:00', '2009/8/12 10:00', '2009/8/12 11:00', '2009/8/12 12:00', '2009/8/12 13:00', '2009/8/12 14:00', '2009/8/12 15:00', '2009/8/12 16:00', '2009/8/12 17:00', '2009/8/12 18:00', '2009/8/12 19:00', '2009/8/12 20:00', '2009/8/12 21:00', '2009/8/12 22:00', '2009/8/12 23:00', '2009/8/13 0:00', '2009/8/13 1:00', '2009/8/13 2:00', '2009/8/13 3:00', '2009/8/13 4:00', '2009/8/13 5:00', '2009/8/13 6:00', '2009/8/13 7:00', '2009/8/13 8:00', '2009/8/13 9:00', '2009/8/13 10:00', '2009/8/13 11:00', '2009/8/13 12:00', '2009/8/13 13:00', '2009/8/13 14:00', '2009/8/13 15:00', '2009/8/13 16:00', '2009/8/13 17:00', '2009/8/13 18:00', '2009/8/13 19:00', '2009/8/13 20:00', '2009/8/13 21:00', '2009/8/13 22:00', '2009/8/13 23:00', '2009/8/14 0:00', '2009/8/14 1:00', '2009/8/14 2:00', '2009/8/14 3:00', '2009/8/14 4:00', '2009/8/14 5:00', '2009/8/14 6:00', '2009/8/14 7:00', '2009/8/14 8:00', '2009/8/14 9:00', '2009/8/14 10:00', '2009/8/14 11:00', '2009/8/14 12:00', '2009/8/14 13:00', '2009/8/14 14:00', '2009/8/14 15:00', '2009/8/14 16:00', '2009/8/14 17:00', '2009/8/14 18:00', '2009/8/14 19:00', '2009/8/14 20:00', '2009/8/14 21:00', '2009/8/14 22:00', '2009/8/14 23:00', '2009/8/15 0:00', '2009/8/15 1:00', '2009/8/15 2:00', '2009/8/15 3:00', '2009/8/15 4:00', '2009/8/15 5:00', '2009/8/15 6:00', '2009/8/15 7:00', '2009/8/15 8:00', '2009/8/15 9:00', '2009/8/15 10:00', '2009/8/15 11:00', '2009/8/15 12:00', '2009/8/15 13:00', '2009/8/15 14:00', '2009/8/15 15:00', '2009/8/15 16:00', '2009/8/15 17:00', '2009/8/15 18:00', '2009/8/15 19:00', '2009/8/15 20:00', '2009/8/15 21:00', '2009/8/15 22:00', '2009/8/15 23:00', '2009/8/16 0:00', '2009/8/16 1:00', '2009/8/16 2:00', '2009/8/16 3:00', '2009/8/16 4:00', '2009/8/16 5:00', '2009/8/16 6:00', '2009/8/16 7:00', '2009/8/16 8:00', '2009/8/16 9:00', '2009/8/16 10:00', '2009/8/16 11:00', '2009/8/16 12:00', '2009/8/16 13:00', '2009/8/16 14:00', '2009/8/16 15:00', '2009/8/16 16:00', '2009/8/16 17:00', '2009/8/16 18:00', '2009/8/16 19:00', '2009/8/16 20:00', '2009/8/16 21:00', '2009/8/16 22:00', '2009/8/16 23:00', '2009/8/17 0:00', '2009/8/17 1:00', '2009/8/17 2:00', '2009/8/17 3:00', '2009/8/17 4:00', '2009/8/17 5:00', '2009/8/17 6:00', '2009/8/17 7:00', '2009/8/17 8:00', '2009/8/17 9:00', '2009/8/17 10:00', '2009/8/17 11:00', '2009/8/17 12:00', '2009/8/17 13:00', '2009/8/17 14:00', '2009/8/17 15:00', '2009/8/17 16:00', '2009/8/17 17:00', '2009/8/17 18:00', '2009/8/17 19:00', '2009/8/17 20:00', '2009/8/17 21:00', '2009/8/17 22:00', '2009/8/17 23:00', '2009/8/18 0:00', '2009/8/18 1:00', '2009/8/18 2:00', '2009/8/18 3:00', '2009/8/18 4:00', '2009/8/18 5:00', '2009/8/18 6:00', '2009/8/18 7:00', '2009/8/18 8:00', '2009/8/18 9:00', '2009/8/18 10:00', '2009/8/18 11:00', '2009/8/18 12:00', '2009/8/18 13:00', '2009/8/18 14:00', '2009/8/18 15:00', '2009/8/18 16:00', '2009/8/18 17:00', '2009/8/18 18:00', '2009/8/18 19:00', '2009/8/18 20:00', '2009/8/18 21:00', '2009/8/18 22:00', '2009/8/18 23:00', '2009/8/19 0:00', '2009/8/19 1:00', '2009/8/19 2:00', '2009/8/19 3:00', '2009/8/19 4:00', '2009/8/19 5:00', '2009/8/19 6:00', '2009/8/19 7:00', '2009/8/19 8:00', '2009/8/19 9:00', '2009/8/19 10:00', '2009/8/19 11:00', '2009/8/19 12:00', '2009/8/19 13:00', '2009/8/19 14:00', '2009/8/19 15:00', '2009/8/19 16:00', '2009/8/19 17:00', '2009/8/19 18:00', '2009/8/19 19:00', '2009/8/19 20:00', '2009/8/19 21:00', '2009/8/19 22:00', '2009/8/19 23:00', '2009/8/20 0:00', '2009/8/20 1:00', '2009/8/20 2:00', '2009/8/20 3:00', '2009/8/20 4:00', '2009/8/20 5:00', '2009/8/20 6:00', '2009/8/20 7:00', '2009/8/20 8:00', '2009/8/20 9:00', '2009/8/20 10:00', '2009/8/20 11:00', '2009/8/20 12:00', '2009/8/20 13:00', '2009/8/20 14:00', '2009/8/20 15:00', '2009/8/20 16:00', '2009/8/20 17:00', '2009/8/20 18:00', '2009/8/20 19:00', '2009/8/20 20:00', '2009/8/20 21:00', '2009/8/20 22:00', '2009/8/20 23:00', '2009/8/21 0:00', '2009/8/21 1:00', '2009/8/21 2:00', '2009/8/21 3:00', '2009/8/21 4:00', '2009/8/21 5:00', '2009/8/21 6:00', '2009/8/21 7:00', '2009/8/21 8:00', '2009/8/21 9:00', '2009/8/21 10:00', '2009/8/21 11:00', '2009/8/21 12:00', '2009/8/21 13:00', '2009/8/21 14:00', '2009/8/21 15:00', '2009/8/21 16:00', '2009/8/21 17:00', '2009/8/21 18:00', '2009/8/21 19:00', '2009/8/21 20:00', '2009/8/21 21:00', '2009/8/21 22:00', '2009/8/21 23:00', '2009/8/22 0:00', '2009/8/22 1:00', '2009/8/22 2:00', '2009/8/22 3:00', '2009/8/22 4:00', '2009/8/22 5:00', '2009/8/22 6:00', '2009/8/22 7:00', '2009/8/22 8:00', '2009/8/22 9:00', '2009/8/22 10:00', '2009/8/22 11:00', '2009/8/22 12:00', '2009/8/22 13:00', '2009/8/22 14:00', '2009/8/22 15:00', '2009/8/22 16:00', '2009/8/22 17:00', '2009/8/22 18:00', '2009/8/22 19:00', '2009/8/22 20:00', '2009/8/22 21:00', '2009/8/22 22:00', '2009/8/22 23:00', '2009/8/23 0:00', '2009/8/23 1:00', '2009/8/23 2:00', '2009/8/23 3:00', '2009/8/23 4:00', '2009/8/23 5:00', '2009/8/23 6:00', '2009/8/23 7:00', '2009/8/23 8:00', '2009/8/23 9:00', '2009/8/23 10:00', '2009/8/23 11:00', '2009/8/23 12:00', '2009/8/23 13:00', '2009/8/23 14:00', '2009/8/23 15:00', '2009/8/23 16:00', '2009/8/23 17:00', '2009/8/23 18:00', '2009/8/23 19:00', '2009/8/23 20:00', '2009/8/23 21:00', '2009/8/23 22:00', '2009/8/23 23:00', '2009/8/24 0:00', '2009/8/24 1:00', '2009/8/24 2:00', '2009/8/24 3:00', '2009/8/24 4:00', '2009/8/24 5:00', '2009/8/24 6:00', '2009/8/24 7:00', '2009/8/24 8:00', '2009/8/24 9:00', '2009/8/24 10:00', '2009/8/24 11:00', '2009/8/24 12:00', '2009/8/24 13:00', '2009/8/24 14:00', '2009/8/24 15:00', '2009/8/24 16:00', '2009/8/24 17:00', '2009/8/24 18:00', '2009/8/24 19:00', '2009/8/24 20:00', '2009/8/24 21:00', '2009/8/24 22:00', '2009/8/24 23:00', '2009/8/25 0:00', '2009/8/25 1:00', '2009/8/25 2:00', '2009/8/25 3:00', '2009/8/25 4:00', '2009/8/25 5:00', '2009/8/25 6:00', '2009/8/25 7:00', '2009/8/25 8:00', '2009/8/25 9:00', '2009/8/25 10:00', '2009/8/25 11:00', '2009/8/25 12:00', '2009/8/25 13:00', '2009/8/25 14:00', '2009/8/25 15:00', '2009/8/25 16:00', '2009/8/25 17:00', '2009/8/25 18:00', '2009/8/25 19:00', '2009/8/25 20:00', '2009/8/25 21:00', '2009/8/25 22:00', '2009/8/25 23:00', '2009/8/26 0:00', '2009/8/26 1:00', '2009/8/26 2:00', '2009/8/26 3:00', '2009/8/26 4:00', '2009/8/26 5:00', '2009/8/26 6:00', '2009/8/26 7:00', '2009/8/26 8:00', '2009/8/26 9:00', '2009/8/26 10:00', '2009/8/26 11:00', '2009/8/26 12:00', '2009/8/26 13:00', '2009/8/26 14:00', '2009/8/26 15:00', '2009/8/26 16:00', '2009/8/26 17:00', '2009/8/26 18:00', '2009/8/26 19:00', '2009/8/26 20:00', '2009/8/26 21:00', '2009/8/26 22:00', '2009/8/26 23:00', '2009/8/27 0:00', '2009/8/27 1:00', '2009/8/27 2:00', '2009/8/27 3:00', '2009/8/27 4:00', '2009/8/27 5:00', '2009/8/27 6:00', '2009/8/27 7:00', '2009/8/27 8:00', '2009/8/27 9:00', '2009/8/27 10:00', '2009/8/27 11:00', '2009/8/27 12:00', '2009/8/27 13:00', '2009/8/27 14:00', '2009/8/27 15:00', '2009/8/27 16:00', '2009/8/27 17:00', '2009/8/27 18:00', '2009/8/27 19:00', '2009/8/27 20:00', '2009/8/27 21:00', '2009/8/27 22:00', '2009/8/27 23:00', '2009/8/28 0:00', '2009/8/28 1:00', '2009/8/28 2:00', '2009/8/28 3:00', '2009/8/28 4:00', '2009/8/28 5:00', '2009/8/28 6:00', '2009/8/28 7:00', '2009/8/28 8:00', '2009/8/28 9:00', '2009/8/28 10:00', '2009/8/28 11:00', '2009/8/28 12:00', '2009/8/28 13:00', '2009/8/28 14:00', '2009/8/28 15:00', '2009/8/28 16:00', '2009/8/28 17:00', '2009/8/28 18:00', '2009/8/28 19:00', '2009/8/28 20:00', '2009/8/28 21:00', '2009/8/28 22:00', '2009/8/28 23:00', '2009/8/29 0:00', '2009/8/29 1:00', '2009/8/29 2:00', '2009/8/29 3:00', '2009/8/29 4:00', '2009/8/29 5:00', '2009/8/29 6:00', '2009/8/29 7:00', '2009/8/29 8:00', '2009/8/29 9:00', '2009/8/29 10:00', '2009/8/29 11:00', '2009/8/29 12:00', '2009/8/29 13:00', '2009/8/29 14:00', '2009/8/29 15:00', '2009/8/29 16:00', '2009/8/29 17:00', '2009/8/29 18:00', '2009/8/29 19:00', '2009/8/29 20:00', '2009/8/29 21:00', '2009/8/29 22:00', '2009/8/29 23:00', '2009/8/30 0:00', '2009/8/30 1:00', '2009/8/30 2:00', '2009/8/30 3:00', '2009/8/30 4:00', '2009/8/30 5:00', '2009/8/30 6:00', '2009/8/30 7:00', '2009/8/30 8:00', '2009/8/30 9:00', '2009/8/30 10:00', '2009/8/30 11:00', '2009/8/30 12:00', '2009/8/30 13:00', '2009/8/30 14:00', '2009/8/30 15:00', '2009/8/30 16:00', '2009/8/30 17:00', '2009/8/30 18:00', '2009/8/30 19:00', '2009/8/30 20:00', '2009/8/30 21:00', '2009/8/30 22:00', '2009/8/30 23:00', '2009/8/31 0:00', '2009/8/31 1:00', '2009/8/31 2:00', '2009/8/31 3:00', '2009/8/31 4:00', '2009/8/31 5:00', '2009/8/31 6:00', '2009/8/31 7:00', '2009/8/31 8:00', '2009/8/31 9:00', '2009/8/31 10:00', '2009/8/31 11:00', '2009/8/31 12:00', '2009/8/31 13:00', '2009/8/31 14:00', '2009/8/31 15:00', '2009/8/31 16:00', '2009/8/31 17:00', '2009/8/31 18:00', '2009/8/31 19:00', '2009/8/31 20:00', '2009/8/31 21:00', '2009/8/31 22:00', '2009/8/31 23:00', '2009/9/1 0:00', '2009/9/1 1:00', '2009/9/1 2:00', '2009/9/1 3:00', '2009/9/1 4:00', '2009/9/1 5:00', '2009/9/1 6:00', '2009/9/1 7:00', '2009/9/1 8:00', '2009/9/1 9:00', '2009/9/1 10:00', '2009/9/1 11:00', '2009/9/1 12:00', '2009/9/1 13:00', '2009/9/1 14:00', '2009/9/1 15:00', '2009/9/1 16:00', '2009/9/1 17:00', '2009/9/1 18:00', '2009/9/1 19:00', '2009/9/1 20:00', '2009/9/1 21:00', '2009/9/1 22:00', '2009/9/1 23:00', '2009/9/2 0:00', '2009/9/2 1:00', '2009/9/2 2:00', '2009/9/2 3:00', '2009/9/2 4:00', '2009/9/2 5:00', '2009/9/2 6:00', '2009/9/2 7:00', '2009/9/2 8:00', '2009/9/2 9:00', '2009/9/2 10:00', '2009/9/2 11:00', '2009/9/2 12:00', '2009/9/2 13:00', '2009/9/2 14:00', '2009/9/2 15:00', '2009/9/2 16:00', '2009/9/2 17:00', '2009/9/2 18:00', '2009/9/2 19:00', '2009/9/2 20:00', '2009/9/2 21:00', '2009/9/2 22:00', '2009/9/2 23:00', '2009/9/3 0:00', '2009/9/3 1:00', '2009/9/3 2:00', '2009/9/3 3:00', '2009/9/3 4:00', '2009/9/3 5:00', '2009/9/3 6:00', '2009/9/3 7:00', '2009/9/3 8:00', '2009/9/3 9:00', '2009/9/3 10:00', '2009/9/3 11:00', '2009/9/3 12:00', '2009/9/3 13:00', '2009/9/3 14:00', '2009/9/3 15:00', '2009/9/3 16:00', '2009/9/3 17:00', '2009/9/3 18:00', '2009/9/3 19:00', '2009/9/3 20:00', '2009/9/3 21:00', '2009/9/3 22:00', '2009/9/3 23:00', '2009/9/4 0:00', '2009/9/4 1:00', '2009/9/4 2:00', '2009/9/4 3:00', '2009/9/4 4:00', '2009/9/4 5:00', '2009/9/4 6:00', '2009/9/4 7:00', '2009/9/4 8:00', '2009/9/4 9:00', '2009/9/4 10:00', '2009/9/4 11:00', '2009/9/4 12:00', '2009/9/4 13:00', '2009/9/4 14:00', '2009/9/4 15:00', '2009/9/4 16:00', '2009/9/4 17:00', '2009/9/4 18:00', '2009/9/4 19:00', '2009/9/4 20:00', '2009/9/4 21:00', '2009/9/4 22:00', '2009/9/4 23:00', '2009/9/5 0:00', '2009/9/5 1:00', '2009/9/5 2:00', '2009/9/5 3:00', '2009/9/5 4:00', '2009/9/5 5:00', '2009/9/5 6:00', '2009/9/5 7:00', '2009/9/5 8:00', '2009/9/5 9:00', '2009/9/5 10:00', '2009/9/5 11:00', '2009/9/5 12:00', '2009/9/5 13:00', '2009/9/5 14:00', '2009/9/5 15:00', '2009/9/5 16:00', '2009/9/5 17:00', '2009/9/5 18:00', '2009/9/5 19:00', '2009/9/5 20:00', '2009/9/5 21:00', '2009/9/5 22:00', '2009/9/5 23:00', '2009/9/6 0:00', '2009/9/6 1:00', '2009/9/6 2:00', '2009/9/6 3:00', '2009/9/6 4:00', '2009/9/6 5:00', '2009/9/6 6:00', '2009/9/6 7:00', '2009/9/6 8:00', '2009/9/6 9:00', '2009/9/6 10:00', '2009/9/6 11:00', '2009/9/6 12:00', '2009/9/6 13:00', '2009/9/6 14:00', '2009/9/6 15:00', '2009/9/6 16:00', '2009/9/6 17:00', '2009/9/6 18:00', '2009/9/6 19:00', '2009/9/6 20:00', '2009/9/6 21:00', '2009/9/6 22:00', '2009/9/6 23:00', '2009/9/7 0:00', '2009/9/7 1:00', '2009/9/7 2:00', '2009/9/7 3:00', '2009/9/7 4:00', '2009/9/7 5:00', '2009/9/7 6:00', '2009/9/7 7:00', '2009/9/7 8:00', '2009/9/7 9:00', '2009/9/7 10:00', '2009/9/7 11:00', '2009/9/7 12:00', '2009/9/7 13:00', '2009/9/7 14:00', '2009/9/7 15:00', '2009/9/7 16:00', '2009/9/7 17:00', '2009/9/7 18:00', '2009/9/7 19:00', '2009/9/7 20:00', '2009/9/7 21:00', '2009/9/7 22:00', '2009/9/7 23:00', '2009/9/8 0:00', '2009/9/8 1:00', '2009/9/8 2:00', '2009/9/8 3:00', '2009/9/8 4:00', '2009/9/8 5:00', '2009/9/8 6:00', '2009/9/8 7:00', '2009/9/8 8:00', '2009/9/8 9:00', '2009/9/8 10:00', '2009/9/8 11:00', '2009/9/8 12:00', '2009/9/8 13:00', '2009/9/8 14:00', '2009/9/8 15:00', '2009/9/8 16:00', '2009/9/8 17:00', '2009/9/8 18:00', '2009/9/8 19:00', '2009/9/8 20:00', '2009/9/8 21:00', '2009/9/8 22:00', '2009/9/8 23:00', '2009/9/9 0:00', '2009/9/9 1:00', '2009/9/9 2:00', '2009/9/9 3:00', '2009/9/9 4:00', '2009/9/9 5:00', '2009/9/9 6:00', '2009/9/9 7:00', '2009/9/9 8:00', '2009/9/9 9:00', '2009/9/9 10:00', '2009/9/9 11:00', '2009/9/9 12:00', '2009/9/9 13:00', '2009/9/9 14:00', '2009/9/9 15:00', '2009/9/9 16:00', '2009/9/9 17:00', '2009/9/9 18:00', '2009/9/9 19:00', '2009/9/9 20:00', '2009/9/9 21:00', '2009/9/9 22:00', '2009/9/9 23:00', '2009/9/10 0:00', '2009/9/10 1:00', '2009/9/10 2:00', '2009/9/10 3:00', '2009/9/10 4:00', '2009/9/10 5:00', '2009/9/10 6:00', '2009/9/10 7:00', '2009/9/10 8:00', '2009/9/10 9:00', '2009/9/10 10:00', '2009/9/10 11:00', '2009/9/10 12:00', '2009/9/10 13:00', '2009/9/10 14:00', '2009/9/10 15:00', '2009/9/10 16:00', '2009/9/10 17:00', '2009/9/10 18:00', '2009/9/10 19:00', '2009/9/10 20:00', '2009/9/10 21:00', '2009/9/10 22:00', '2009/9/10 23:00', '2009/9/11 0:00', '2009/9/11 1:00', '2009/9/11 2:00', '2009/9/11 3:00', '2009/9/11 4:00', '2009/9/11 5:00', '2009/9/11 6:00', '2009/9/11 7:00', '2009/9/11 8:00', '2009/9/11 9:00', '2009/9/11 10:00', '2009/9/11 11:00', '2009/9/11 12:00', '2009/9/11 13:00', '2009/9/11 14:00', '2009/9/11 15:00', '2009/9/11 16:00', '2009/9/11 17:00', '2009/9/11 18:00', '2009/9/11 19:00', '2009/9/11 20:00', '2009/9/11 21:00', '2009/9/11 22:00', '2009/9/11 23:00', '2009/9/12 0:00', '2009/9/12 1:00', '2009/9/12 2:00', '2009/9/12 3:00', '2009/9/12 4:00', '2009/9/12 5:00', '2009/9/12 6:00', '2009/9/12 7:00', '2009/9/12 8:00', '2009/9/12 9:00', '2009/9/12 10:00', '2009/9/12 11:00', '2009/9/12 12:00', '2009/9/12 13:00', '2009/9/12 14:00', '2009/9/12 15:00', '2009/9/12 16:00', '2009/9/12 17:00', '2009/9/12 18:00', '2009/9/12 19:00', '2009/9/12 20:00', '2009/9/12 21:00', '2009/9/12 22:00', '2009/9/12 23:00', '2009/9/13 0:00', '2009/9/13 1:00', '2009/9/13 2:00', '2009/9/13 3:00', '2009/9/13 4:00', '2009/9/13 5:00', '2009/9/13 6:00', '2009/9/13 7:00', '2009/9/13 8:00', '2009/9/13 9:00', '2009/9/13 10:00', '2009/9/13 11:00', '2009/9/13 12:00', '2009/9/13 13:00', '2009/9/13 14:00', '2009/9/13 15:00', '2009/9/13 16:00', '2009/9/13 17:00', '2009/9/13 18:00', '2009/9/13 19:00', '2009/9/13 20:00', '2009/9/13 21:00', '2009/9/13 22:00', '2009/9/13 23:00', '2009/9/14 0:00', '2009/9/14 1:00', '2009/9/14 2:00', '2009/9/14 3:00', '2009/9/14 4:00', '2009/9/14 5:00', '2009/9/14 6:00', '2009/9/14 7:00', '2009/9/14 8:00', '2009/9/14 9:00', '2009/9/14 10:00', '2009/9/14 11:00', '2009/9/14 12:00', '2009/9/14 13:00', '2009/9/14 14:00', '2009/9/14 15:00', '2009/9/14 16:00', '2009/9/14 17:00', '2009/9/14 18:00', '2009/9/14 19:00', '2009/9/14 20:00', '2009/9/14 21:00', '2009/9/14 22:00', '2009/9/14 23:00', '2009/9/15 0:00', '2009/9/15 1:00', '2009/9/15 2:00', '2009/9/15 3:00', '2009/9/15 4:00', '2009/9/15 5:00', '2009/9/15 6:00', '2009/9/15 7:00', '2009/9/15 8:00', '2009/9/15 9:00', '2009/9/15 10:00', '2009/9/15 11:00', '2009/9/15 12:00', '2009/9/15 13:00', '2009/9/15 14:00', '2009/9/15 15:00', '2009/9/15 16:00', '2009/9/15 17:00', '2009/9/15 18:00', '2009/9/15 19:00', '2009/9/15 20:00', '2009/9/15 21:00', '2009/9/15 22:00', '2009/9/15 23:00', '2009/9/16 0:00', '2009/9/16 1:00', '2009/9/16 2:00', '2009/9/16 3:00', '2009/9/16 4:00', '2009/9/16 5:00', '2009/9/16 6:00', '2009/9/16 7:00', '2009/9/16 8:00', '2009/9/16 9:00', '2009/9/16 10:00', '2009/9/16 11:00', '2009/9/16 12:00', '2009/9/16 13:00', '2009/9/16 14:00', '2009/9/16 15:00', '2009/9/16 16:00', '2009/9/16 17:00', '2009/9/16 18:00', '2009/9/16 19:00', '2009/9/16 20:00', '2009/9/16 21:00', '2009/9/16 22:00', '2009/9/16 23:00', '2009/9/17 0:00', '2009/9/17 1:00', '2009/9/17 2:00', '2009/9/17 3:00', '2009/9/17 4:00', '2009/9/17 5:00', '2009/9/17 6:00', '2009/9/17 7:00', '2009/9/17 8:00', '2009/9/17 9:00', '2009/9/17 10:00', '2009/9/17 11:00', '2009/9/17 12:00', '2009/9/17 13:00', '2009/9/17 14:00', '2009/9/17 15:00', '2009/9/17 16:00', '2009/9/17 17:00', '2009/9/17 18:00', '2009/9/17 19:00', '2009/9/17 20:00', '2009/9/17 21:00', '2009/9/17 22:00', '2009/9/17 23:00', '2009/9/18 0:00', '2009/9/18 1:00', '2009/9/18 2:00', '2009/9/18 3:00', '2009/9/18 4:00', '2009/9/18 5:00', '2009/9/18 6:00', '2009/9/18 7:00', '2009/9/18 8:00', '2009/9/18 9:00', '2009/9/18 10:00', '2009/9/18 11:00', '2009/9/18 12:00', '2009/9/18 13:00', '2009/9/18 14:00', '2009/9/18 15:00', '2009/9/18 16:00', '2009/9/18 17:00', '2009/9/18 18:00', '2009/9/18 19:00', '2009/9/18 20:00', '2009/9/18 21:00', '2009/9/18 22:00', '2009/9/18 23:00', '2009/9/19 0:00', '2009/9/19 1:00', '2009/9/19 2:00', '2009/9/19 3:00', '2009/9/19 4:00', '2009/9/19 5:00', '2009/9/19 6:00', '2009/9/19 7:00', '2009/9/19 8:00', '2009/9/19 9:00', '2009/9/19 10:00', '2009/9/19 11:00', '2009/9/19 12:00', '2009/9/19 13:00', '2009/9/19 14:00', '2009/9/19 15:00', '2009/9/19 16:00', '2009/9/19 17:00', '2009/9/19 18:00', '2009/9/19 19:00', '2009/9/19 20:00', '2009/9/19 21:00', '2009/9/19 22:00', '2009/9/19 23:00', '2009/9/20 0:00', '2009/9/20 1:00', '2009/9/20 2:00', '2009/9/20 3:00', '2009/9/20 4:00', '2009/9/20 5:00', '2009/9/20 6:00', '2009/9/20 7:00', '2009/9/20 8:00', '2009/9/20 9:00', '2009/9/20 10:00', '2009/9/20 11:00', '2009/9/20 12:00', '2009/9/20 13:00', '2009/9/20 14:00', '2009/9/20 15:00', '2009/9/20 16:00', '2009/9/20 17:00', '2009/9/20 18:00', '2009/9/20 19:00', '2009/9/20 20:00', '2009/9/20 21:00', '2009/9/20 22:00', '2009/9/20 23:00', '2009/9/21 0:00', '2009/9/21 1:00', '2009/9/21 2:00', '2009/9/21 3:00', '2009/9/21 4:00', '2009/9/21 5:00', '2009/9/21 6:00', '2009/9/21 7:00', '2009/9/21 8:00', '2009/9/21 9:00', '2009/9/21 10:00', '2009/9/21 11:00', '2009/9/21 12:00', '2009/9/21 13:00', '2009/9/21 14:00', '2009/9/21 15:00', '2009/9/21 16:00', '2009/9/21 17:00', '2009/9/21 18:00', '2009/9/21 19:00', '2009/9/21 20:00', '2009/9/21 21:00', '2009/9/21 22:00', '2009/9/21 23:00', '2009/9/22 0:00', '2009/9/22 1:00', '2009/9/22 2:00', '2009/9/22 3:00', '2009/9/22 4:00', '2009/9/22 5:00', '2009/9/22 6:00', '2009/9/22 7:00', '2009/9/22 8:00', '2009/9/22 9:00', '2009/9/22 10:00', '2009/9/22 11:00', '2009/9/22 12:00', '2009/9/22 13:00', '2009/9/22 14:00', '2009/9/22 15:00', '2009/9/22 16:00', '2009/9/22 17:00', '2009/9/22 18:00', '2009/9/22 19:00', '2009/9/22 20:00', '2009/9/22 21:00', '2009/9/22 22:00', '2009/9/22 23:00', '2009/9/23 0:00', '2009/9/23 1:00', '2009/9/23 2:00', '2009/9/23 3:00', '2009/9/23 4:00', '2009/9/23 5:00', '2009/9/23 6:00', '2009/9/23 7:00', '2009/9/23 8:00', '2009/9/23 9:00', '2009/9/23 10:00', '2009/9/23 11:00', '2009/9/23 12:00', '2009/9/23 13:00', '2009/9/23 14:00', '2009/9/23 15:00', '2009/9/23 16:00', '2009/9/23 17:00', '2009/9/23 18:00', '2009/9/23 19:00', '2009/9/23 20:00', '2009/9/23 21:00', '2009/9/23 22:00', '2009/9/23 23:00', '2009/9/24 0:00', '2009/9/24 1:00', '2009/9/24 2:00', '2009/9/24 3:00', '2009/9/24 4:00', '2009/9/24 5:00', '2009/9/24 6:00', '2009/9/24 7:00', '2009/9/24 8:00', '2009/9/24 9:00', '2009/9/24 10:00', '2009/9/24 11:00', '2009/9/24 12:00', '2009/9/24 13:00', '2009/9/24 14:00', '2009/9/24 15:00', '2009/9/24 16:00', '2009/9/24 17:00', '2009/9/24 18:00', '2009/9/24 19:00', '2009/9/24 20:00', '2009/9/24 21:00', '2009/9/24 22:00', '2009/9/24 23:00', '2009/9/25 0:00', '2009/9/25 1:00', '2009/9/25 2:00', '2009/9/25 3:00', '2009/9/25 4:00', '2009/9/25 5:00', '2009/9/25 6:00', '2009/9/25 7:00', '2009/9/25 8:00', '2009/9/25 9:00', '2009/9/25 10:00', '2009/9/25 11:00', '2009/9/25 12:00', '2009/9/25 13:00', '2009/9/25 14:00', '2009/9/25 15:00', '2009/9/25 16:00', '2009/9/25 17:00', '2009/9/25 18:00', '2009/9/25 19:00', '2009/9/25 20:00', '2009/9/25 21:00', '2009/9/25 22:00', '2009/9/25 23:00', '2009/9/26 0:00', '2009/9/26 1:00', '2009/9/26 2:00', '2009/9/26 3:00', '2009/9/26 4:00', '2009/9/26 5:00', '2009/9/26 6:00', '2009/9/26 7:00', '2009/9/26 8:00', '2009/9/26 9:00', '2009/9/26 10:00', '2009/9/26 11:00', '2009/9/26 12:00', '2009/9/26 13:00', '2009/9/26 14:00', '2009/9/26 15:00', '2009/9/26 16:00', '2009/9/26 17:00', '2009/9/26 18:00', '2009/9/26 19:00', '2009/9/26 20:00', '2009/9/26 21:00', '2009/9/26 22:00', '2009/9/26 23:00', '2009/9/27 0:00', '2009/9/27 1:00', '2009/9/27 2:00', '2009/9/27 3:00', '2009/9/27 4:00', '2009/9/27 5:00', '2009/9/27 6:00', '2009/9/27 7:00', '2009/9/27 8:00', '2009/9/27 9:00', '2009/9/27 10:00', '2009/9/27 11:00', '2009/9/27 12:00', '2009/9/27 13:00', '2009/9/27 14:00', '2009/9/27 15:00', '2009/9/27 16:00', '2009/9/27 17:00', '2009/9/27 18:00', '2009/9/27 19:00', '2009/9/27 20:00', '2009/9/27 21:00', '2009/9/27 22:00', '2009/9/27 23:00', '2009/9/28 0:00', '2009/9/28 1:00', '2009/9/28 2:00', '2009/9/28 3:00', '2009/9/28 4:00', '2009/9/28 5:00', '2009/9/28 6:00', '2009/9/28 7:00', '2009/9/28 8:00', '2009/9/28 9:00', '2009/9/28 10:00', '2009/9/28 11:00', '2009/9/28 12:00', '2009/9/28 13:00', '2009/9/28 14:00', '2009/9/28 15:00', '2009/9/28 16:00', '2009/9/28 17:00', '2009/9/28 18:00', '2009/9/28 19:00', '2009/9/28 20:00', '2009/9/28 21:00', '2009/9/28 22:00', '2009/9/28 23:00', '2009/9/29 0:00', '2009/9/29 1:00', '2009/9/29 2:00', '2009/9/29 3:00', '2009/9/29 4:00', '2009/9/29 5:00', '2009/9/29 6:00', '2009/9/29 7:00', '2009/9/29 8:00', '2009/9/29 9:00', '2009/9/29 10:00', '2009/9/29 11:00', '2009/9/29 12:00', '2009/9/29 13:00', '2009/9/29 14:00', '2009/9/29 15:00', '2009/9/29 16:00', '2009/9/29 17:00', '2009/9/29 18:00', '2009/9/29 19:00', '2009/9/29 20:00', '2009/9/29 21:00', '2009/9/29 22:00', '2009/9/29 23:00', '2009/9/30 0:00', '2009/9/30 1:00', '2009/9/30 2:00', '2009/9/30 3:00', '2009/9/30 4:00', '2009/9/30 5:00', '2009/9/30 6:00', '2009/9/30 7:00', '2009/9/30 8:00', '2009/9/30 9:00', '2009/9/30 10:00', '2009/9/30 11:00', '2009/9/30 12:00', '2009/9/30 13:00', '2009/9/30 14:00', '2009/9/30 15:00', '2009/9/30 16:00', '2009/9/30 17:00', '2009/9/30 18:00', '2009/9/30 19:00', '2009/9/30 20:00', '2009/9/30 21:00', '2009/9/30 22:00', '2009/9/30 23:00', '2009/10/1 0:00', '2009/10/1 1:00', '2009/10/1 2:00', '2009/10/1 3:00', '2009/10/1 4:00', '2009/10/1 5:00', '2009/10/1 6:00', '2009/10/1 7:00', '2009/10/1 8:00', '2009/10/1 9:00', '2009/10/1 10:00', '2009/10/1 11:00', '2009/10/1 12:00', '2009/10/1 13:00', '2009/10/1 14:00', '2009/10/1 15:00', '2009/10/1 16:00', '2009/10/1 17:00', '2009/10/1 18:00', '2009/10/1 19:00', '2009/10/1 20:00', '2009/10/1 21:00', '2009/10/1 22:00', '2009/10/1 23:00', '2009/10/2 0:00', '2009/10/2 1:00', '2009/10/2 2:00', '2009/10/2 3:00', '2009/10/2 4:00', '2009/10/2 5:00', '2009/10/2 6:00', '2009/10/2 7:00', '2009/10/2 8:00', '2009/10/2 9:00', '2009/10/2 10:00', '2009/10/2 11:00', '2009/10/2 12:00', '2009/10/2 13:00', '2009/10/2 14:00', '2009/10/2 15:00', '2009/10/2 16:00', '2009/10/2 17:00', '2009/10/2 18:00', '2009/10/2 19:00', '2009/10/2 20:00', '2009/10/2 21:00', '2009/10/2 22:00', '2009/10/2 23:00', '2009/10/3 0:00', '2009/10/3 1:00', '2009/10/3 2:00', '2009/10/3 3:00', '2009/10/3 4:00', '2009/10/3 5:00', '2009/10/3 6:00', '2009/10/3 7:00', '2009/10/3 8:00', '2009/10/3 9:00', '2009/10/3 10:00', '2009/10/3 11:00', '2009/10/3 12:00', '2009/10/3 13:00', '2009/10/3 14:00', '2009/10/3 15:00', '2009/10/3 16:00', '2009/10/3 17:00', '2009/10/3 18:00', '2009/10/3 19:00', '2009/10/3 20:00', '2009/10/3 21:00', '2009/10/3 22:00', '2009/10/3 23:00', '2009/10/4 0:00', '2009/10/4 1:00', '2009/10/4 2:00', '2009/10/4 3:00', '2009/10/4 4:00', '2009/10/4 5:00', '2009/10/4 6:00', '2009/10/4 7:00', '2009/10/4 8:00', '2009/10/4 9:00', '2009/10/4 10:00', '2009/10/4 11:00', '2009/10/4 12:00', '2009/10/4 13:00', '2009/10/4 14:00', '2009/10/4 15:00', '2009/10/4 16:00', '2009/10/4 17:00', '2009/10/4 18:00', '2009/10/4 19:00', '2009/10/4 20:00', '2009/10/4 21:00', '2009/10/4 22:00', '2009/10/4 23:00', '2009/10/5 0:00', '2009/10/5 1:00', '2009/10/5 2:00', '2009/10/5 3:00', '2009/10/5 4:00', '2009/10/5 5:00', '2009/10/5 6:00', '2009/10/5 7:00', '2009/10/5 8:00', '2009/10/5 9:00', '2009/10/5 10:00', '2009/10/5 11:00', '2009/10/5 12:00', '2009/10/5 13:00', '2009/10/5 14:00', '2009/10/5 15:00', '2009/10/5 16:00', '2009/10/5 17:00', '2009/10/5 18:00', '2009/10/5 19:00', '2009/10/5 20:00', '2009/10/5 21:00', '2009/10/5 22:00', '2009/10/5 23:00', '2009/10/6 0:00', '2009/10/6 1:00', '2009/10/6 2:00', '2009/10/6 3:00', '2009/10/6 4:00', '2009/10/6 5:00', '2009/10/6 6:00', '2009/10/6 7:00', '2009/10/6 8:00', '2009/10/6 9:00', '2009/10/6 10:00', '2009/10/6 11:00', '2009/10/6 12:00', '2009/10/6 13:00', '2009/10/6 14:00', '2009/10/6 15:00', '2009/10/6 16:00', '2009/10/6 17:00', '2009/10/6 18:00', '2009/10/6 19:00', '2009/10/6 20:00', '2009/10/6 21:00', '2009/10/6 22:00', '2009/10/6 23:00', '2009/10/7 0:00', '2009/10/7 1:00', '2009/10/7 2:00', '2009/10/7 3:00', '2009/10/7 4:00', '2009/10/7 5:00', '2009/10/7 6:00', '2009/10/7 7:00', '2009/10/7 8:00', '2009/10/7 9:00', '2009/10/7 10:00', '2009/10/7 11:00', '2009/10/7 12:00', '2009/10/7 13:00', '2009/10/7 14:00', '2009/10/7 15:00', '2009/10/7 16:00', '2009/10/7 17:00', '2009/10/7 18:00', '2009/10/7 19:00', '2009/10/7 20:00', '2009/10/7 21:00', '2009/10/7 22:00', '2009/10/7 23:00', '2009/10/8 0:00', '2009/10/8 1:00', '2009/10/8 2:00', '2009/10/8 3:00', '2009/10/8 4:00', '2009/10/8 5:00', '2009/10/8 6:00', '2009/10/8 7:00', '2009/10/8 8:00', '2009/10/8 9:00', '2009/10/8 10:00', '2009/10/8 11:00', '2009/10/8 12:00', '2009/10/8 13:00', '2009/10/8 14:00', '2009/10/8 15:00', '2009/10/8 16:00', '2009/10/8 17:00', '2009/10/8 18:00', '2009/10/8 19:00', '2009/10/8 20:00', '2009/10/8 21:00', '2009/10/8 22:00', '2009/10/8 23:00', '2009/10/9 0:00', '2009/10/9 1:00', '2009/10/9 2:00', '2009/10/9 3:00', '2009/10/9 4:00', '2009/10/9 5:00', '2009/10/9 6:00', '2009/10/9 7:00', '2009/10/9 8:00', '2009/10/9 9:00', '2009/10/9 10:00', '2009/10/9 11:00', '2009/10/9 12:00', '2009/10/9 13:00', '2009/10/9 14:00', '2009/10/9 15:00', '2009/10/9 16:00', '2009/10/9 17:00', '2009/10/9 18:00', '2009/10/9 19:00', '2009/10/9 20:00', '2009/10/9 21:00', '2009/10/9 22:00', '2009/10/9 23:00', '2009/10/10 0:00', '2009/10/10 1:00', '2009/10/10 2:00', '2009/10/10 3:00', '2009/10/10 4:00', '2009/10/10 5:00', '2009/10/10 6:00', '2009/10/10 7:00', '2009/10/10 8:00', '2009/10/10 9:00', '2009/10/10 10:00', '2009/10/10 11:00', '2009/10/10 12:00', '2009/10/10 13:00', '2009/10/10 14:00', '2009/10/10 15:00', '2009/10/10 16:00', '2009/10/10 17:00', '2009/10/10 18:00', '2009/10/10 19:00', '2009/10/10 20:00', '2009/10/10 21:00', '2009/10/10 22:00', '2009/10/10 23:00', '2009/10/11 0:00', '2009/10/11 1:00', '2009/10/11 2:00', '2009/10/11 3:00', '2009/10/11 4:00', '2009/10/11 5:00', '2009/10/11 6:00', '2009/10/11 7:00', '2009/10/11 8:00', '2009/10/11 9:00', '2009/10/11 10:00', '2009/10/11 11:00', '2009/10/11 12:00', '2009/10/11 13:00', '2009/10/11 14:00', '2009/10/11 15:00', '2009/10/11 16:00', '2009/10/11 17:00', '2009/10/11 18:00', '2009/10/11 19:00', '2009/10/11 20:00', '2009/10/11 21:00', '2009/10/11 22:00', '2009/10/11 23:00', '2009/10/12 0:00', '2009/10/12 1:00', '2009/10/12 2:00', '2009/10/12 3:00', '2009/10/12 4:00', '2009/10/12 5:00', '2009/10/12 6:00', '2009/10/12 7:00', '2009/10/12 8:00', '2009/10/12 9:00', '2009/10/12 10:00', '2009/10/12 11:00', '2009/10/12 12:00', '2009/10/12 13:00', '2009/10/12 14:00', '2009/10/12 15:00', '2009/10/12 16:00', '2009/10/12 17:00', '2009/10/12 18:00', '2009/10/12 19:00', '2009/10/12 20:00', '2009/10/12 21:00', '2009/10/12 22:00', '2009/10/12 23:00', '2009/10/13 0:00', '2009/10/13 1:00', '2009/10/13 2:00', '2009/10/13 3:00', '2009/10/13 4:00', '2009/10/13 5:00', '2009/10/13 6:00', '2009/10/13 7:00', '2009/10/13 8:00', '2009/10/13 9:00', '2009/10/13 10:00', '2009/10/13 11:00', '2009/10/13 12:00', '2009/10/13 13:00', '2009/10/13 14:00', '2009/10/13 15:00', '2009/10/13 16:00', '2009/10/13 17:00', '2009/10/13 18:00', '2009/10/13 19:00', '2009/10/13 20:00', '2009/10/13 21:00', '2009/10/13 22:00', '2009/10/13 23:00', '2009/10/14 0:00', '2009/10/14 1:00', '2009/10/14 2:00', '2009/10/14 3:00', '2009/10/14 4:00', '2009/10/14 5:00', '2009/10/14 6:00', '2009/10/14 7:00', '2009/10/14 8:00', '2009/10/14 9:00', '2009/10/14 10:00', '2009/10/14 11:00', '2009/10/14 12:00', '2009/10/14 13:00', '2009/10/14 14:00', '2009/10/14 15:00', '2009/10/14 16:00', '2009/10/14 17:00', '2009/10/14 18:00', '2009/10/14 19:00', '2009/10/14 20:00', '2009/10/14 21:00', '2009/10/14 22:00', '2009/10/14 23:00', '2009/10/15 0:00', '2009/10/15 1:00', '2009/10/15 2:00', '2009/10/15 3:00', '2009/10/15 4:00', '2009/10/15 5:00', '2009/10/15 6:00', '2009/10/15 7:00', '2009/10/15 8:00', '2009/10/15 9:00', '2009/10/15 10:00', '2009/10/15 11:00', '2009/10/15 12:00', '2009/10/15 13:00', '2009/10/15 14:00', '2009/10/15 15:00', '2009/10/15 16:00', '2009/10/15 17:00', '2009/10/15 18:00', '2009/10/15 19:00', '2009/10/15 20:00', '2009/10/15 21:00', '2009/10/15 22:00', '2009/10/15 23:00', '2009/10/16 0:00', '2009/10/16 1:00', '2009/10/16 2:00', '2009/10/16 3:00', '2009/10/16 4:00', '2009/10/16 5:00', '2009/10/16 6:00', '2009/10/16 7:00', '2009/10/16 8:00', '2009/10/16 9:00', '2009/10/16 10:00', '2009/10/16 11:00', '2009/10/16 12:00', '2009/10/16 13:00', '2009/10/16 14:00', '2009/10/16 15:00', '2009/10/16 16:00', '2009/10/16 17:00', '2009/10/16 18:00', '2009/10/16 19:00', '2009/10/16 20:00', '2009/10/16 21:00', '2009/10/16 22:00', '2009/10/16 23:00', '2009/10/17 0:00', '2009/10/17 1:00', '2009/10/17 2:00', '2009/10/17 3:00', '2009/10/17 4:00', '2009/10/17 5:00', '2009/10/17 6:00', '2009/10/17 7:00', '2009/10/17 8:00', '2009/10/17 9:00', '2009/10/17 10:00', '2009/10/17 11:00', '2009/10/17 12:00', '2009/10/17 13:00', '2009/10/17 14:00', '2009/10/17 15:00', '2009/10/17 16:00', '2009/10/17 17:00', '2009/10/17 18:00', '2009/10/17 19:00', '2009/10/17 20:00', '2009/10/17 21:00', '2009/10/17 22:00', '2009/10/17 23:00', '2009/10/18 0:00', '2009/10/18 1:00', '2009/10/18 2:00', '2009/10/18 3:00', '2009/10/18 4:00', '2009/10/18 5:00', '2009/10/18 6:00', '2009/10/18 7:00', '2009/10/18 8:00' ].map(function (str) { return str.replace(' ', '\n'); }) } ], yAxis: [ { name: 'Flow(m³/s)', type: 'value' }, { name: 'Rainfall(mm)', nameLocation: 'start', alignTicks: true, type: 'value', inverse: true } ], series: [ { name: 'Flow', type: 'line', areaStyle: {}, lineStyle: { width: 1 }, emphasis: { focus: 'series' }, markArea: { silent: true, itemStyle: { opacity: 0.3 }, data: [ [ { xAxis: '2009/9/12\n7:00' }, { xAxis: '2009/9/22\n7:00' } ] ] }, // prettier-ignore data: [ 0.97, 0.96, 0.96, 0.95, 0.95, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.93, 0.92, 0.91, 0.9, 0.89, 0.88, 0.87, 0.87, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.87, 0.88, 0.9, 0.93, 0.96, 0.99, 1.03, 1.06, 1.1, 1.14, 1.17, 1.2, 1.23, 1.26, 1.29, 1.33, 1.36, 1.4, 1.43, 1.45, 1.48, 1.49, 1.51, 1.51, 1.5, 1.49, 1.47, 1.44, 1.41, 1.37, 1.34, 1.3, 1.27, 1.24, 1.22, 1.2, 1.19, 1.18, 1.16, 1.15, 1.14, 1.13, 1.12, 1.11, 1.11, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.09, 1.09, 1.08, 1.07, 1.06, 1.05, 1.04, 1.03, 1.03, 1.02, 1.01, 1.01, 1, 0.99, 0.98, 0.97, 0.96, 0.96, 0.95, 0.95, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.93, 0.92, 0.91, 0.9, 0.89, 0.88, 0.87, 0.87, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.85, 0.84, 0.83, 0.82, 0.81, 0.8, 0.8, 0.79, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.77, 0.75, 0.73, 0.71, 0.68, 0.65, 0.63, 0.61, 0.59, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.57, 0.57, 0.57, 0.56, 0.55, 0.55, 0.54, 0.54, 0.53, 0.52, 0.52, 0.51, 0.51, 0.5, 0.5, 0.49, 0.48, 0.48, 0.47, 0.47, 0.47, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.52, 0.67, 0.9, 1.19, 1.52, 1.87, 2.22, 2.55, 2.84, 3.07, 3.22, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.24, 3.13, 2.97, 2.77, 2.54, 2.3, 2.05, 1.82, 1.62, 1.46, 1.35, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.3, 1.26, 1.21, 1.14, 1.06, 0.97, 0.89, 0.81, 0.74, 0.69, 0.65, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.63, 0.63, 0.62, 0.62, 0.61, 0.6, 0.59, 0.59, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.59, 0.61, 0.63, 0.65, 0.68, 0.71, 0.73, 0.75, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.77, 0.75, 0.73, 0.71, 0.68, 0.65, 0.63, 0.61, 0.59, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.59, 0.59, 0.6, 0.61, 0.62, 0.62, 0.63, 0.63, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.66, 0.68, 0.69, 0.71, 0.73, 0.74, 0.76, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.79, 0.81, 0.82, 0.84, 0.86, 0.88, 0.9, 0.92, 0.93, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.93, 0.92, 0.91, 0.9, 0.89, 0.88, 0.87, 0.87, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.85, 0.84, 0.82, 0.8, 0.78, 0.76, 0.75, 0.73, 0.72, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.72, 0.73, 0.74, 0.76, 0.78, 0.79, 0.82, 0.84, 0.86, 0.89, 0.91, 0.94, 0.97, 1, 1.02, 1.05, 1.08, 1.11, 1.14, 1.17, 1.19, 1.22, 1.25, 1.27, 1.29, 1.31, 1.33, 1.35, 1.36, 1.38, 1.39, 1.39, 1.4, 1.4, 1.4, 1.39, 1.37, 1.35, 1.32, 1.29, 1.26, 1.22, 1.18, 1.14, 1.1, 1.05, 1.01, 0.97, 0.93, 0.89, 0.85, 0.82, 0.78, 0.76, 0.74, 0.72, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.72, 0.73, 0.74, 0.75, 0.77, 0.78, 0.8, 0.82, 0.84, 0.87, 0.89, 0.92, 0.94, 0.97, 0.99, 1.02, 1.05, 1.08, 1.1, 1.13, 1.16, 1.18, 1.21, 1.23, 1.26, 1.28, 1.3, 1.32, 1.34, 1.35, 1.37, 1.38, 1.39, 1.4, 1.41, 1.41, 1.42, 1.42, 1.43, 1.43, 1.43, 1.44, 1.44, 1.44, 1.44, 1.45, 1.45, 1.45, 1.46, 1.46, 1.46, 1.47, 1.47, 1.48, 1.48, 1.49, 1.5, 1.51, 1.54, 1.62, 1.73, 1.88, 2.05, 2.24, 2.45, 2.67, 2.89, 3.11, 3.31, 3.51, 3.69, 3.86, 4.03, 4.18, 4.33, 4.48, 4.62, 4.76, 4.89, 5.02, 5.16, 5.29, 5.43, 5.57, 5.71, 5.86, 6.02, 6.18, 6.36, 6.54, 6.73, 6.93, 7.15, 7.38, 7.62, 7.88, 8.16, 8.46, 8.77, 9.11, 9.46, 9.84, 10.24, 10.67, 11.12, 11.6, 12.3, 13.66, 16, 38.43, 82.21, 146.6, 218.7, 226, 225.23, 223.08, 219.78, 212, 199.82, 184.6, 168, 151.65, 137.21, 126.31, 119.94, 115.52, 112.06, 108.92, 105.44, 101, 94.56, 86.36, 77.67, 69.76, 63.9, 60.38, 57.41, 54.84, 52.57, 50.56, 48.71, 46.97, 45.25, 43.48, 41.6, 39.5, 37.19, 34.81, 32.46, 30.27, 28.36, 26.85, 25.86, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.27, 24.65, 23.7, 22.52, 21.17, 19.75, 18.33, 16.98, 15.8, 14.85, 14.23, 14, 14.02, 14.08, 14.17, 14.29, 14.44, 14.61, 14.8, 15.01, 15.23, 15.47, 15.71, 15.95, 16.19, 16.43, 16.67, 16.89, 17.1, 17.29, 17.46, 17.61, 17.73, 17.82, 17.88, 17.9, 17.63, 16.88, 15.75, 14.33, 12.71, 10.98, 9.23, 7.56, 6.05, 4.81, 3.92, 3.47, 3.28, 3.1, 2.93, 2.76, 2.61, 2.46, 2.32, 2.19, 2.07, 1.96, 1.85, 1.75, 1.66, 1.58, 1.51, 1.44, 1.39, 1.34, 1.29, 1.26, 1.23, 1.22, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.21, 1.21, 1.21, 1.21, 1.22, 1.22, 1.22, 1.23, 1.23, 1.23, 1.24, 1.24, 1.25, 1.25, 1.25, 1.26, 1.26, 1.27, 1.27, 1.27, 1.28, 1.28, 1.28, 1.29, 1.29, 1.29, 1.29, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.29, 1.29, 1.29, 1.29, 1.28, 1.28, 1.28, 1.27, 1.27, 1.26, 1.25, 1.25, 1.24, 1.23, 1.23, 1.22, 1.21, 1.2, 1.16, 1.06, 0.95, 0.83, 0.74, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.66, 0.68, 0.69, 0.71, 0.73, 0.74, 0.76, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.8, 0.86, 0.95, 1.08, 1.25, 1.46, 1.7, 1.97, 2.28, 2.63, 3.01, 3.42, 3.87, 4.35, 4.86, 5.4, 5.98, 6.59, 7.92, 10.49, 14.04, 18.31, 23.04, 27.98, 32.87, 37.45, 41.46, 44.64, 46.74, 47.5, 46.86, 45.16, 42.77, 40.04, 37.33, 35, 32.74, 30.21, 27.7, 25.5, 23.9, 23.2, 23.06, 22.94, 22.84, 22.77, 22.72, 22.7, 22.8, 23.23, 23.95, 24.91, 26.04, 27.3, 28.76, 30.7, 33.39, 37.12, 42.15, 48.77, 65.22, 252.1, 257, 237.32, 221.19, 212, 208.67, 206.89, 205.2, 202.15, 189.82, 172, 165.3, 160.49, 156.8, 153.44, 149.62, 144.6, 138.27, 131, 123.11, 114.9, 106.69, 98.79, 91.5, 85.13, 80, 75.53, 71.03, 66.65, 62.54, 58.85, 55.73, 53.31, 51.75, 51.2, 56.53, 68.25, 80, 91.01, 102.03, 109, 112.37, 115.29, 117.68, 119.48, 120.61, 121, 119.45, 115.57, 110.52, 105.47, 101.58, 100, 99.97, 99.94, 99.92, 99.9, 99.88, 99.86, 99.85, 99.84, 99.83, 99.82, 99.81, 99.81, 99.8, 99.8, 99.8, 122.15, 163.65, 186, 182.96, 175.15, 164.56, 153.18, 143, 136, 131.37, 126.98, 122.81, 118.85, 115.09, 111.52, 108.13, 104.9, 101.83, 98.9, 96.11, 93.44, 90.87, 88.41, 86.04, 83.74, 81.51, 79.33, 77.2, 75.1, 73.02, 70.95, 68.88, 66.8, 64.87, 63.14, 61.4, 59.53, 57.67, 56, 54.6, 53.36, 52.2, 51.05, 49.85, 48.5, 46.87, 44.92, 42.74, 40.42, 38.04, 35.69, 33.46, 31.44, 29.72, 28.38, 27.51, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.14, 26.97, 26.7, 26.35, 25.95, 25.49, 25.02, 24.53, 24.04, 23.58, 23.16, 22.8, 22.46, 22.11, 21.75, 21.39, 21.03, 20.69, 20.36, 20.05, 19.78, 19.54, 19.35, 19.2, 19.09, 19, 18.92, 18.85, 18.79, 18.74, 18.68, 18.62, 18.56, 18.49, 18.4, 18.3, 18.17, 18.02, 17.83, 17.63, 17.41, 17.18, 16.93, 16.68, 16.43, 16.18, 15.93, 15.7, 15.47, 15.22, 14.97, 14.71, 14.45, 14.18, 13.93, 13.68, 13.44, 13.21, 13, 12.8, 12.62, 12.46, 12.31, 12.16, 12.03, 11.89, 11.76, 11.62, 11.48, 11.33, 11.17, 11, 10.81, 10.59, 10.36, 10.12, 9.86, 9.61, 9.36, 9.12, 8.89, 8.68, 8.5, 8.35, 8.21, 8.08, 7.94, 7.81, 7.68, 7.56, 7.46, 7.36, 7.29, 7.23, 7.19, 7.18, 7.51, 8.42, 9.81, 11.58, 13.63, 15.86, 18.16, 20.44, 22.58, 24.49, 26.06, 27.2, 28.08, 28.95, 29.81, 30.65, 31.48, 32.28, 33.07, 33.82, 34.55, 35.25, 35.92, 36.56, 37.15, 37.71, 38.23, 38.7, 39.13, 39.5, 39.83, 40.1, 40.31, 40.47, 40.57, 40.6, 40.49, 40.16, 39.64, 38.94, 38.09, 37.1, 36, 34.79, 33.51, 32.17, 30.79, 29.39, 27.99, 26.6, 25.25, 23.96, 22.75, 21.63, 20.63, 19.76, 19.04, 18.49, 18.14, 18, 17.97, 17.95, 17.94, 17.92, 17.91, 17.9, 17.89, 17.88, 17.87, 17.85, 17.83, 17.8, 17.7, 17.46, 17.13, 16.7, 16.21, 15.68, 15.13, 14.57, 14.04, 13.56, 13.14, 12.8, 12.52, 12.27, 12.02, 11.79, 11.57, 11.37, 11.16, 10.97, 10.78, 10.59, 10.39, 10.2, 10.01, 9.81, 9.63, 9.44, 9.26, 9.08, 8.9, 8.73, 8.56, 8.39, 8.22, 8.06, 7.9, 7.73, 7.57, 7.41, 7.25, 7.09, 6.94, 6.79, 6.65, 6.52, 6.4, 6.28, 6.17, 6.08, 5.98, 5.9, 5.81, 5.73, 5.65, 5.57, 5.49, 5.41, 5.32, 5.23, 5.14, 5.04, 4.94, 4.84, 4.74, 4.63, 4.53, 4.43, 4.33, 4.23, 4.13, 4.03, 3.93, 3.81, 3.69, 3.57, 3.45, 3.33, 3.22, 3.12, 3.04, 2.98, 2.93, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.9, 2.86, 2.8, 2.71, 2.62, 2.52, 2.42, 2.33, 2.24, 2.18, 2.14, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.1, 2.06, 2, 1.91, 1.82, 1.71, 1.61, 1.5, 1.4, 1.32, 1.25, 1.2, 1.16, 1.13, 1.1, 1.06, 1.03, 1, 0.97, 0.93, 0.9, 0.87, 0.85, 0.82, 0.79, 0.77, 0.74, 0.72, 0.69, 0.67, 0.65, 0.63, 0.61, 0.59, 0.58, 0.56, 0.54, 0.53, 0.52, 0.51, 0.5, 0.49, 0.48, 0.48, 0.47, 0.47, 0.46, 0.46, 0.47, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.64, 0.67, 0.69, 0.7, 0.71, 0.71, 0.71, 0.71, 0.7, 0.7, 0.7, 0.69, 0.69, 0.69, 0.68, 0.68, 0.67, 0.67, 0.67, 0.66, 0.66, 0.65, 0.65, 0.65, 0.65, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.65, 0.65, 0.66, 0.66, 0.67, 0.68, 0.69, 0.69, 0.7, 0.71, 0.73, 0.74, 0.75, 0.76, 0.78, 0.8, 0.81, 0.83, 0.85, 0.87, 0.89, 0.92, 0.94, 0.97, 0.99, 1.02, 1.05, 1.08, 1.11, 1.15, 1.18, 1.32, 1.66, 2.21, 2.97, 3.94, 5.11, 6.5, 8.1, 9.9, 11.92, 14.15, 16.6, 22.3, 22.8, 24.48, 30.38, 35.74, 42.4, 57.14, 94.04, 112.9, 123.4, 130.4, 130, 119.4, 120.7, 116.8, 118.1, 119.4, 124.8, 143.5, 204, 294, 319.2, 328.4, 365, 350.8, 347.6, 347.6, 325, 331.6, 319.2, 308, 308, 308, 308, 296.8, 300, 281, 278.4, 270.6, 271, 253.6, 233.5, 219.2, 207.8, 205.9, 204, 189.6, 178.8, 173.4, 160, 154.4, 146, 145, 140.5, 130.4, 126.2, 116.8, 112.9, 106.5, 101.6, 98.51, 82.67, 67.3, 80.05, 76.12, 72.3, 71.02, 69.78, 67.3, 67.3, 68.54, 57.6, 71.02, 66.06, 59.12, 57.14, 55.16, 55.16, 52.19, 52.19, 51.2, 48.56, 44.16, 43, 45.92, 49.44, 44.16, 36.48, 35.74, 35, 32.36, 37.22, 32.36, 32.36, 32.36, 33.68, 32.36, 31.7, 35.74, 29.72, 32.36, 30.38, 29.72, 28.4, 28.4, 28.4, 27.28, 25.6, 25.04, 23.92, 22.3, 21.8, 21.8, 21.8, 22.8, 21.8, 25.6, 22.8, 22.8, 17.8, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 15.02, 14, 14.03, 14.11, 14.25, 14.45, 14.72, 15.06, 15.46, 15.95, 16.51, 17.15, 17.87, 18.69, 19.59, 20.59, 21.69, 22.88, 24.18, 25.59, 27.1, 28.73, 30.48, 32.34, 34.33, 36.44, 38.69, 41.06, 43.57, 46.22, 49.01, 51.95, 55.04, 58.27, 61.66, 65.21, 68.92, 72.8, 88.09, 104.9, 105.7, 110.3, 111.6, 110.3, 106.5, 105.7, 103.3, 100, 97.02, 98.8, 91.07, 83.98, 88.09, 81.36, 78.74, 77.43, 77.43, 73.5, 74.81, 72.63, 68.58, 66.4, 68.54, 69.78, 67.3, 64.82, 61.1, 59.12, 56.15, 53.18, 50.32, 49.44, 44.16, 36.5, 42.4, 37.96, 37.22, 33.68, 36.48, 35.74, 35, 35, 37.22, 37.22, 39.44, 32.6, 34.54, 36.48, 35.74, 34.34, 33.68, 33.02, 31.04, 29.72, 29.72, 29.72, 26.16, 25.6, 29.72, 18.3, 22.3, 21.3, 21.8, 21.8, 20.3, 20.8, 25.04, 25.04, 25.6, 25.6, 25.04, 25.6, 25.04, 25.6, 23.92, 25.04, 21.3, 21.8, 22.3, 21.8, 20.8, 16.1, 20.3, 18.3, 13.22, 19.3, 19.3, 18.3, 14.4, 13.86, 13.36, 12.9, 12.48, 12.1, 11.75, 11.43, 11.15, 10.9, 10.67, 10.48, 10.31, 10.16, 10.04, 9.93, 9.85, 9.78, 9.73, 9.69, 9.67, 9.65, 9.65, 12.08, 8.67, 11.7, 11.38, 10.65, 9.84, 9.32, 9.07, 8.85, 8.66, 8.49, 8.35, 8.22, 8.1, 7.98, 7.86, 7.74, 7.61, 7.47, 7.31, 7.14, 6.96, 6.78, 6.58, 6.39, 6.19, 5.99, 5.78, 5.58, 5.39, 5.2, 5.01, 4.83, 4.67, 4.51, 4.37, 4.24, 4.12, 4.02, 3.95, 3.89, 3.85, 3.84, 4.41, 5.77, 7.39, 8.75, 9.32, 9.18, 9, 8.94, 8.88, 8.83, 8.78, 8.73, 8.68, 8.64, 8.6, 8.56, 8.53, 8.5, 8.47, 8.45, 8.42, 8.4, 8.39, 8.37, 8.36, 8.35, 8.35, 8.34, 8.34, 8.67, 9.65, 9.62, 9.53, 9.4, 9.21, 8.98, 8.7, 8.4, 8.06, 7.69, 7.3, 6.89, 6.47, 6.03, 5.59, 5.14, 4.7, 4.26, 3.83, 3.42, 3.02, 2.65, 2.3, 1.98, 1.7, 1.45, 1.25, 1.09, 0.99, 0.94, 0.92, 0.91, 0.89, 0.87, 0.85, 0.84, 0.82, 0.81, 0.79, 0.78, 0.77, 0.75, 0.74, 0.73, 0.72, 0.71, 0.7, 0.69, 0.68, 0.67, 0.66, 0.65, 0.64, 0.64, 0.63, 0.63, 0.62, 0.62, 0.61, 0.61, 0.61, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.62, 0.62, 0.62, 0.62, 0.63, 0.63, 0.63, 0.63, 0.63, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.64, 0.63, 0.62, 0.6, 0.59, 0.57, 0.55, 0.54, 0.53, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.51, 0.51, 0.51, 0.5, 0.5, 0.49, 0.48, 0.47, 0.47, 0.46, 0.45, 0.45, 0.44, 0.43, 0.42, 0.42, 0.41, 0.41, 0.41, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.41, 0.42, 0.43, 0.44, 0.46, 0.48, 0.5, 0.53, 0.55, 0.58, 0.61, 0.64, 0.67, 0.7, 0.73, 0.77, 0.8, 0.83, 0.87, 0.9, 0.93, 0.96, 0.99, 1.02, 1.05, 1.08, 1.1, 1.12, 1.14, 1.16, 1.17, 1.18, 1.19, 1.2, 1.2, 1.2, 1.19, 1.17, 1.15, 1.12, 1.09, 1.06, 1.02, 0.98, 0.94, 0.9, 0.86, 0.82, 0.78, 0.74, 0.7, 0.66, 0.63, 0.6, 0.57, 0.55, 0.53, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.51, 0.51, 0.5, 0.5, 0.49, 0.49, 0.48, 0.47, 0.47, 0.47, 0.46, 0.46, 0.45, 0.45, 0.45, 0.44, 0.44, 0.44, 0.43, 0.43, 0.43, 0.42, 0.42, 0.42, 0.41, 0.41, 0.41, 0.41, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.45, 0.45, 0.45 ] }, { name: 'Rainfall', type: 'line', yAxisIndex: 1, areaStyle: {}, lineStyle: { width: 1 }, emphasis: { focus: 'series' }, markArea: { silent: true, itemStyle: { opacity: 0.3 }, data: [ [ { xAxis: '2009/9/10\n7:00' }, { xAxis: '2009/9/20\n7:00' } ] ] }, // prettier-ignore data: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0.017, 0.017, 0.017, 0.017, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.021, 0.026, 0.03, 0.036, 0.036, 0.195, 0.221, 0.019, 0.013, 0.017, 0.03, 0.03, 0.03, 0.046, 0.045, 0.038, 0.084, 0.045, 0.045, 0.037, 0.034, 0.035, 0.036, 0.044, 0.052, 0.048, 0.109, 0.033, 0.029, 0.04, 0.042, 0.042, 0.042, 0.073, 0.076, 0.062, 0.066, 0.066, 0.075, 0.096, 0.128, 0.121, 0.128, 0.14, 0.226, 0.143, 0.097, 0.018, 0, 0, 0, 0, 0, 0.018, 0.047, 0.054, 0.054, 0.054, 0.036, 0.185, 0.009, 0.038, 0.061, 0.077, 0.091, 0.126, 0.69, 0.182, 0.349, 0.231, 0.146, 0.128, 0.167, 0.1, 0.075, 0.071, 0.071, 0.117, 0.01, 0.002, 0.002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0.026, 0.038, 0.038, 0.038, 0.076, 0.086, 0.109, 0.213, 0.276, 0.288, 0.297, 0.642, 1.799, 1.236, 2.138, 0.921, 0.497, 0.685, 0.828, 0.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.018, 0.024, 0.024, 0.024, 0.024, 0.006, 0.003, 0.046, 0.046, 0.046, 0.046, 0.043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.204, 0.303, 1.028, 1.328, 1.524, 1.41, 1.362, 1.292, 1.191, 0.529, 0.501, 0.944, 1.81, 2.899, 0.859, 0.126, 0.087, 0.047, 0, 0, 0, 0, 0.011, 0.028, 0.028, 0.028, 0.028, 0.017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.099, 0.159, 0.297, 0.309, 0.309, 0.614, 0.818, 1.436, 1.195, 0.553, 0.542, 0.955, 0.898, 0.466, 0.386, 0.556, 0.388, 0.221, 0.192, 0.192, 0.187, 0.166, 0.18, 0.302, 0.158, 0.009, 0.009, 0.009, 0.009, 0.009, 0.007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0.032, 0.032, 0.032, 0.032, 0.082, 0.149, 0.204, 0.247, 0.262, 0.49, 0.51, 0.533, 0.746, 0.847, 2.393, 1.188, 1.114, 0.475, 0.043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.017, 0.017, 0.021, 0.042, 0.079, 0.111, 0.126, 0.122, 0.133, 0.846, 0.102, 0.077, 0.067, 0.056, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.011, 0.017, 0.017, 0.017, 0.017, 0.006, 0, 0, 0, 0, 0, 0.01, 0.03, 0.054, 0.067, 0.07, 0.25, 0.251, 0.494, 0.065, 0.054, 0.054, 0.064, 0.084, 0.077, 0.101, 0.132, 0.248, 0.069, 0.117, 0.115, 0.087, 0.326, 0.036, 0.009, 0.009, 0.009, 0.009, 0.009, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02, 0.039, 0.04, 0.04, 0.04, 0.229, 0.079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.023, 0.069, 0.082, 0.082, 0.082, 0.503, 0.774, 0.038, 0.012, 0.012, 0.012, 0.016, 0.02, 0.028, 0.051, 0.06, 0.064, 0.19, 0.15, 0.164, 0.139, 0.13, 0.085, 0.031, 0.023, 0.022, 0.007, 0.005, 0.005, 0.001, 0, 0.02, 0.048, 0.048, 0.053, 0.056, 0.036, 0.008, 0.008, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.013, 0.017, 0.036, 0.068, 0.095, 0.233, 0.272, 0.377, 0.722, 1.494, 3.756, 0.954, 0.439, 0.442, 0.462, 0.373, 0.249, 0.214, 0.1, 0.044, 0.037, 0.023, 0.002, 0, 0, 0, 0, 0, 0, 0.02, 0.024, 0.024, 0.024, 0.024, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.008, 0.017, 0.017, 0.045, 0.186, 0.308, 0.241, 0.241, 0.893, 4.067, 4.494, 5.015, 3.494, 2.057, 1.411, 0.718, 0.407, 0.313, 0.339, 1.537, 1.105, 0.218, 0.136, 0.03, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.037, 0.448, 1.2, 1.309, 1.309, 1.425, 1.223, 0.471, 0.767, 0.423, 0.273, 0.412, 0.646, 0.481, 0.239, 0.131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.044, 0.15, 0.223, 0.388, 0.513, 0.883, 2.828, 4.786, 5.959, 4.95, 6.434, 6.319, 3.35, 2.806, 4.204, 1.395, 1.015, 1.015, 0.836, 0.74, 0.72, 0.615, 0.477, 0.192, 0.046, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.008, 0.005, 0.005, 0.005, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.012, 0.012, 0.012, 0.012, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.012, 0.028, 0.028, 0.028, 0.138, 0.092, 0.082, 0.082, 0.096, 0.719, 0.155, 0.042, 0.047, 0.129, 0.021, 0.021, 0.014, 0.009, 0.029, 0.067, 0.088, 0.095, 0.095, 0.138, 0.091, 0.032, 0.025, 0.025, 0.003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.045, 0.228, 0.297, 0.325, 0.339, 0.581, 1.244, 0.796, 0.517, 0.227, 0.053, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.003, 0.005, 0.005, 0.005, 0.005, 0.081, 0.129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.014, 0.041, 0.041, 0.041, 0.041, 0.027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.009, 0.017, 0.017, 0.017, 0.017, 0.355, 0.174, 0.009, 0.009, 0.012, 0.136, 0.208, 0.208, 0.208, 0.215, 7.359, 1.858, 0.458, 0.053, 0.053, 0.047, 0.045, 0.045, 0.059, 0.136, 0.188, 0.206, 0.21, 0.588, 1.517, 6.02, 4.688, 4.42, 0.624, 0.326, 0.359, 0.553, 0.899, 0.94, 2.95, 9.415, 5.752, 1.092, 0.096, 0.035, 0.026, 0.018, 0.015, 0.011, 0.011, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.056, 0.27, 0.314, 0.351, 0.354, 0.609, 0.796, 1.857, 0.848, 0.538, 0.214, 0.178, 0.178, 0.201, 0.231, 0.227, 0.272, 0.397, 0.45, 1.014, 2.917, 1.675, 0.081, 0.059, 0.059, 0.148, 0.075, 0.075, 0.078, 0.236, 0.784, 0.784, 0.784, 0.784, 0.741, 0.115, 0.058, 0.058, 0.058, 0.029, 0.015, 0.015, 0.015, 0.015, 0.012, 0.008, 0.604, 0.985, 1.305, 2.273, 2.528, 2.336, 2.496, 2.281, 1.397, 1.713, 3.259, 1.167, 0.745, 0.548, 1.058, 0.684, 0.728, 0.392, 0.179, 0.283, 0.283, 0.46, 0.08, 0.099, 0.099, 0.099, 0.1, 0.143, 0.137, 0.238, 0.317, 0.262, 0.225, 0.792, 0.426, 0.332, 0.261, 0.11, 0.093, 0.102, 0.171, 0.292, 0.504, 0.605, 1.745, 2.485, 1.964, 0.33, 0.171, 0.259, 0.242, 0.215, 0.366, 0.354, 0.205, 0.203, 0.262, 0.153, 0.13, 0.137, 0.362, 0.691, 0.295, 0.433, 0.154, 0.056, 0.053, 0.053, 0.053, 0.051, 0.047, 0.065, 0.078, 0.091, 0.206, 0.813, 0.102, 0.151, 0.05, 0.024, 0.004, 0.001, 0, 0, 0, 0.021, 0.021, 0.021, 0.021, 0.021, 0.013, 0.013, 0.013, 0.013, 0.013, 0.013, 0.013, 0.013, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.018, 0.021, 0.021, 0.021, 0.021, 0.003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.024, 0.173, 0.261, 0.267, 0.267, 0.534, 1.354, 1.772, 0.72, 0.218, 0.018, 0.018, 0.028, 0.036, 0.032, 0.194, 0.082, 0.035, 0.286, 0.027, 0.038, 0.038, 0.027, 0.021, 0.014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.016, 0.017, 0.017, 0.031, 0.047, 0.043, 0.056, 0.104, 0.149, 0.179, 0.205, 0.328, 0.998, 0.522, 1.851, 3.727, 3.273, 2.204, 1.169, 1.006, 1.179, 0.74, 0.741, 1.065, 0.925, 0.671, 0.497, 0.431, 0.327, 0.277, 0.126, 0.581, 0.207, 0.359, 2.485, 0.038, 0.036, 0.003, 0.003, 0.003, 0.003, 0.004, 0.098, 0.023, 0.021, 0.021, 0.022, 0.041, 0.041, 0.043, 0.045, 0.043, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.031, 0.046, 0.063, 0.119, 0.107, 0.092, 0.085, 0.065, 0.06, 0.054, 0.042, 0.039, 0.046, 0.044, 0.028, 0.028, 0.02, 0.013, 0.013, 0.013, 0.013, 0.016, 0.032, 0.031, 0.031, 0.031, 0.028, 0.011, 0.011, 0.011, 0.011, 0.011, 0.023, 0.024, 0.024, 0.024, 0.019, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.013, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.011, 0.017, 0.024, 0.026, 0.061, 0.172, 0.206, 0.213, 0.267, 0.511, 0.668, 0.157, 0.017, 0.017, 0.017, 0.046, 0.054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.017, 0.017, 0.017, 0.017, 0.016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0.017, 0.017, 0.017, 0.017, 0.012, 0.017, 0.017, 0.017, 0.017, 0.012, 0, 0, 0, 0, 0, 0.003, 0.031, 0.066, 0.093, 0.112, 0.122, 0.202, 0.068, 0.041, 0.022, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.005, 0.012, 0.021, 0.021, 0.019, 0.033, 0.03, 0.026, 0.026, 0.034, 0.095, 0.024, 0.024, 0.024, 0.023, 0.019, 0.018, 0.018, 0.018, 0.011, 0.03, 0.045, 0.044, 0.044, 0.044, 0.022, 0.009, 0.024, 0.033, 0.033, 0.033, 0.024, 0.009, 0, 0, 0, 0, 0, 0, 0.003, 0.017, 0.017, 0.017, 0.017, 0.014, 0, 0, 0, 0, 0, 0.032, 0.032, 0.032, 0.032, 0.032, 0.005, 0.008, 0.009, 0.014, 0.014, 0.009, 0.005, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.007, 0.009, 0.009, 0.009, 0.009, 0.043, 0.063, 0.084, 0.098, 0.101, 0.213, 0.334, 0.383, 0.43, 0.448, 0.511, 0.801, 0.835, 1.642, 1.614, 1.496, 1.496, 1.476, 1.068, 0.481, 0.22, 0.119, 0.099, 0.07, 0.072, 0.063, 0.076, 0.14, 0.205, 0.28, 0.297, 0.3, 0.479, 0.877, 1.098, 1.611, 1.629, 1.686, 1.686, 1.631, 1.528, 1.862, 1.703, 1.531, 2.196, 0.395, 0.416, 0.453, 0.728, 0.917, 0.986, 1.17, 2.171, 3.011, 2.909, 3.301, 1.377, 0.778, 0.799, 0.947, 1.039, 0.879, 0.76, 1.372, 1.674, 1.674, 1.68, 1.823, 1.793, 1.162, 0.783, 0.216, 0.152, 0.152, 0.152, 0.049, 0, 0, 0, 0.117, 0.127, 0.127, 0.127, 0.127, 0.127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.003, 0.005, 0.005, 0.005, 0.005, 0.003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.309, 0.364, 0.364, 0.364, 0.364, 0.063, 0.01, 0.01, 0.01, 0.012, 0.015, 0.015, 0.11, 0.55, 0.824, 0.825, 0.829, 1.39, 1.429, 1.342, 1.43, 1.636, 1.717, 2.135, 2.203, 3.191, 3.022, 1.589, 0.86, 0.807, 0.645, 0.595, 0.588, 0.557, 0.552, 1.271, 0.708, 0.677, 0.629, 0.714, 0.203, 0.133, 0.061, 0.062, 0.018, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.072, 0.29, 0.438, 0.53, 0.557, 0.873, 1.039, 1.04, 0.208, 0.049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0.039, 0.039, 0.039, 0.039, 0.098, 0.008, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.056, 0.062, 0.065, 0.065, 0.065, 0.047, 0.216, 0.256, 0.315, 0.4, 0.502, 0.449, 0.47, 0.571, 0.814, 1.153, 0.774, 0.202, 0.086, 0.075, 0.071, 0.032, 0.019, 0.003, 0.004, 0.004, 0.004, 0.004, 0.004, 0.004, 0.007, 0.072, 0.153, 0.256, 0.306, 0.404, 0.698, 0.733, 0.823, 0.715, 0.563, 0.404, 0.293, 0.217, 0.213, 0.202, 0.202, 0.294, 0.704, 0.797, 1.359, 1.101, 0.72, 0.514, 0.539, 0.434, 0.389, 0.387, 0.386, 0.375, 0.369, 0.319, 0.239, 0.183, 0.136, 0.062, 0.052, 0.096, 0.119, 0.119, 0.114, 0.127, 0.132, 0.139, 0.169, 0.191, 0.278, 0.254, 0.214, 0.237, 0.221, 0.143, 0.129, 0.125, 0.109, 0.1, 0.087, 0.06, 0.038, 0.029, 0.029, 0.028, 0.048, 0.053, 0.053, 0.111, 0.125, 0.102, 0.097, 0.097, 0.039, 0.02, 0.02, 0.02, 0.014, 0.004, 0.031, 0.043, 0.047, 0.052, 0.08, 0.144, 0.182, 0.176, 0.171, 0.149, 0.112, 0.025, 0, 0, 0, 0, 0, 0, 0, 0.016, 0.031, 0.031, 0.031, 0.031, 0.015, 0, 0, 0, 0, 0, 0.005, 0.005, 0.005, 0.005, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0.005, 0.005, 0.005, 0.005, 0.001, 0, 0, 0 ] } ] }; ``` ::: :::echarts ```js const builderJson = { all: 10887, charts: { map: 3237, lines: 2164, bar: 7561, line: 7778, pie: 7355, scatter: 2405, candlestick: 1842, radar: 2090, heatmap: 1762, treemap: 1593, graph: 2060, boxplot: 1537, parallel: 1908, gauge: 2107, funnel: 1692, sankey: 1568 }, components: { geo: 2788, title: 9575, legend: 9400, tooltip: 9466, grid: 9266, markPoint: 3419, markLine: 2984, timeline: 2739, dataZoom: 2744, visualMap: 2466, toolbox: 3034, polar: 1945 }, ie: 9743 }; const downloadJson = { 'echarts.min.js': 17365, 'echarts.simple.min.js': 4079, 'echarts.common.min.js': 6929, 'echarts.js': 14890 }; const themeJson = { 'dark.js': 1594, 'infographic.js': 925, 'shine.js': 1608, 'roma.js': 721, 'macarons.js': 2179, 'vintage.js': 1982 }; const waterMarkText = 'ECHARTS'; const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = canvas.height = 100; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.globalAlpha = 0.08; ctx.font = '20px Microsoft Yahei'; ctx.translate(50, 50); ctx.rotate(-Math.PI / 4); ctx.fillText(waterMarkText, 0, 0); option = { backgroundColor: { type: 'pattern', image: canvas, repeat: 'repeat' }, tooltip: {}, title: [ { text: '在线构建', subtext: '总计 ' + builderJson.all, left: '25%', textAlign: 'center' }, { text: '各版本下载', subtext: '总计 ' + Object.keys(downloadJson).reduce(function (all, key) { return all + downloadJson[key]; }, 0), left: '75%', textAlign: 'center' }, { text: '主题下载', subtext: '总计 ' + Object.keys(themeJson).reduce(function (all, key) { return all + themeJson[key]; }, 0), left: '75%', top: '50%', textAlign: 'center' } ], grid: [ { top: 50, width: '50%', bottom: '45%', left: 10, containLabel: true }, { top: '55%', width: '50%', bottom: 0, left: 10, containLabel: true } ], xAxis: [ { type: 'value', max: builderJson.all, splitLine: { show: false } }, { type: 'value', max: builderJson.all, gridIndex: 1, splitLine: { show: false } } ], yAxis: [ { type: 'category', data: Object.keys(builderJson.charts), axisLabel: { interval: 0, rotate: 30 }, splitLine: { show: false } }, { gridIndex: 1, type: 'category', data: Object.keys(builderJson.components), axisLabel: { interval: 0, rotate: 30 }, splitLine: { show: false } } ], series: [ { type: 'bar', stack: 'chart', z: 3, label: { position: 'right', show: true }, data: Object.keys(builderJson.charts).map(function (key) { return builderJson.charts[key]; }) }, { type: 'bar', stack: 'chart', silent: true, itemStyle: { color: '#eee' }, data: Object.keys(builderJson.charts).map(function (key) { return builderJson.all - builderJson.charts[key]; }) }, { type: 'bar', stack: 'component', xAxisIndex: 1, yAxisIndex: 1, z: 3, label: { position: 'right', show: true }, data: Object.keys(builderJson.components).map(function (key) { return builderJson.components[key]; }) }, { type: 'bar', stack: 'component', silent: true, xAxisIndex: 1, yAxisIndex: 1, itemStyle: { color: '#eee' }, data: Object.keys(builderJson.components).map(function (key) { return builderJson.all - builderJson.components[key]; }) }, { type: 'pie', radius: [0, '30%'], center: ['75%', '25%'], data: Object.keys(downloadJson).map(function (key) { return { name: key.replace('.js', ''), value: downloadJson[key] }; }) }, { type: 'pie', radius: [0, '30%'], center: ['75%', '75%'], data: Object.keys(themeJson).map(function (key) { return { name: key.replace('.js', ''), value: themeJson[key] }; }) } ] }; ``` ::: :::echarts ```js option = { tooltip: { trigger: 'item', formatter: '{a}
{b}: {c} ({d}%)' }, legend: { data: [ 'Direct', 'Marketing', 'Search Engine', 'Email', 'Union Ads', 'Video Ads', 'Baidu', 'Google', 'Bing', 'Others' ] }, series: [ { name: 'Access From', type: 'pie', selectedMode: 'single', radius: [0, '30%'], label: { position: 'inner', fontSize: 14 }, labelLine: { show: false }, data: [ { value: 1548, name: 'Search Engine' }, { value: 775, name: 'Direct' }, { value: 679, name: 'Marketing', selected: true } ] }, { name: 'Access From', type: 'pie', radius: ['45%', '60%'], labelLine: { length: 30 }, label: { formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ', backgroundColor: '#F6F8FC', borderColor: '#8C8D8E', borderWidth: 1, borderRadius: 4, rich: { a: { color: '#6E7079', lineHeight: 22, align: 'center' }, hr: { borderColor: '#8C8D8E', width: '100%', borderWidth: 1, height: 0 }, b: { color: '#4C5058', fontSize: 14, fontWeight: 'bold', lineHeight: 33 }, per: { color: '#fff', backgroundColor: '#4C5058', padding: [3, 4], borderRadius: 4 } } }, data: [ { value: 1048, name: 'Baidu' }, { value: 335, name: 'Direct' }, { value: 310, name: 'Email' }, { value: 251, name: 'Google' }, { value: 234, name: 'Union Ads' }, { value: 147, name: 'Bing' }, { value: 135, name: 'Video Ads' }, { value: 102, name: 'Others' } ] } ] }; ``` ::: :::echarts ```js // prettier-ignore const hours = [ '12a', '1a', '2a', '3a', '4a', '5a', '6a', '7a', '8a', '9a', '10a', '11a', '12p', '1p', '2p', '3p', '4p', '5p', '6p', '7p', '8p', '9p', '10p', '11p' ]; // prettier-ignore const days = [ 'Saturday', 'Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday', 'Sunday' ]; // prettier-ignore const data = [[0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 2], [0, 12, 4], [0, 13, 1], [0, 14, 1], [0, 15, 3], [0, 16, 4], [0, 17, 6], [0, 18, 4], [0, 19, 4], [0, 20, 3], [0, 21, 3], [0, 22, 2], [0, 23, 5], [1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 5], [1, 11, 2], [1, 12, 2], [1, 13, 6], [1, 14, 9], [1, 15, 11], [1, 16, 6], [1, 17, 7], [1, 18, 8], [1, 19, 12], [1, 20, 5], [1, 21, 5], [1, 22, 7], [1, 23, 2], [2, 0, 1], [2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0], [2, 6, 0], [2, 7, 0], [2, 8, 0], [2, 9, 0], [2, 10, 3], [2, 11, 2], [2, 12, 1], [2, 13, 9], [2, 14, 8], [2, 15, 10], [2, 16, 6], [2, 17, 5], [2, 18, 5], [2, 19, 5], [2, 20, 7], [2, 21, 4], [2, 22, 2], [2, 23, 4], [3, 0, 7], [3, 1, 3], [3, 2, 0], [3, 3, 0], [3, 4, 0], [3, 5, 0], [3, 6, 0], [3, 7, 0], [3, 8, 1], [3, 9, 0], [3, 10, 5], [3, 11, 4], [3, 12, 7], [3, 13, 14], [3, 14, 13], [3, 15, 12], [3, 16, 9], [3, 17, 5], [3, 18, 5], [3, 19, 10], [3, 20, 6], [3, 21, 4], [3, 22, 4], [3, 23, 1], [4, 0, 1], [4, 1, 3], [4, 2, 0], [4, 3, 0], [4, 4, 0], [4, 5, 1], [4, 6, 0], [4, 7, 0], [4, 8, 0], [4, 9, 2], [4, 10, 4], [4, 11, 4], [4, 12, 2], [4, 13, 4], [4, 14, 4], [4, 15, 14], [4, 16, 12], [4, 17, 1], [4, 18, 8], [4, 19, 5], [4, 20, 3], [4, 21, 7], [4, 22, 3], [4, 23, 0], [5, 0, 2], [5, 1, 1], [5, 2, 0], [5, 3, 3], [5, 4, 0], [5, 5, 0], [5, 6, 0], [5, 7, 0], [5, 8, 2], [5, 9, 0], [5, 10, 4], [5, 11, 1], [5, 12, 5], [5, 13, 10], [5, 14, 5], [5, 15, 7], [5, 16, 11], [5, 17, 6], [5, 18, 0], [5, 19, 5], [5, 20, 3], [5, 21, 4], [5, 22, 2], [5, 23, 0], [6, 0, 1], [6, 1, 0], [6, 2, 0], [6, 3, 0], [6, 4, 0], [6, 5, 0], [6, 6, 0], [6, 7, 0], [6, 8, 0], [6, 9, 0], [6, 10, 1], [6, 11, 0], [6, 12, 2], [6, 13, 1], [6, 14, 3], [6, 15, 4], [6, 16, 0], [6, 17, 0], [6, 18, 0], [6, 19, 0], [6, 20, 1], [6, 21, 2], [6, 22, 2], [6, 23, 6]]; option = { title: { text: 'Punch Card of Github' }, legend: { data: ['Punch Card'], left: 'right' }, polar: {}, tooltip: { formatter: function (params) { return ( params.value[2] + ' commits in ' + hours[params.value[1]] + ' of ' + days[params.value[0]] ); } }, angleAxis: { type: 'category', data: hours, boundaryGap: false, splitLine: { show: true }, axisLine: { show: false } }, radiusAxis: { type: 'category', data: days, axisLine: { show: false }, axisLabel: { rotate: 45 } }, series: [ { name: 'Punch Card', type: 'scatter', coordinateSystem: 'polar', symbolSize: function (val) { return val[2] * 2; }, data: data, animationDelay: function (idx) { return idx * 5; } } ] }; ``` ::: :::echarts ```js // prettier-ignore const hours = [ '12a', '1a', '2a', '3a', '4a', '5a', '6a', '7a', '8a', '9a', '10a', '11a', '12p', '1p', '2p', '3p', '4p', '5p', '6p', '7p', '8p', '9p', '10p', '11p' ]; // prettier-ignore const days = [ 'Saturday', 'Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday', 'Sunday' ]; // prettier-ignore const data = [[0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 2], [0, 12, 4], [0, 13, 1], [0, 14, 1], [0, 15, 3], [0, 16, 4], [0, 17, 6], [0, 18, 4], [0, 19, 4], [0, 20, 3], [0, 21, 3], [0, 22, 2], [0, 23, 5], [1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 5], [1, 11, 2], [1, 12, 2], [1, 13, 6], [1, 14, 9], [1, 15, 11], [1, 16, 6], [1, 17, 7], [1, 18, 8], [1, 19, 12], [1, 20, 5], [1, 21, 5], [1, 22, 7], [1, 23, 2], [2, 0, 1], [2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0], [2, 6, 0], [2, 7, 0], [2, 8, 0], [2, 9, 0], [2, 10, 3], [2, 11, 2], [2, 12, 1], [2, 13, 9], [2, 14, 8], [2, 15, 10], [2, 16, 6], [2, 17, 5], [2, 18, 5], [2, 19, 5], [2, 20, 7], [2, 21, 4], [2, 22, 2], [2, 23, 4], [3, 0, 7], [3, 1, 3], [3, 2, 0], [3, 3, 0], [3, 4, 0], [3, 5, 0], [3, 6, 0], [3, 7, 0], [3, 8, 1], [3, 9, 0], [3, 10, 5], [3, 11, 4], [3, 12, 7], [3, 13, 14], [3, 14, 13], [3, 15, 12], [3, 16, 9], [3, 17, 5], [3, 18, 5], [3, 19, 10], [3, 20, 6], [3, 21, 4], [3, 22, 4], [3, 23, 1], [4, 0, 1], [4, 1, 3], [4, 2, 0], [4, 3, 0], [4, 4, 0], [4, 5, 1], [4, 6, 0], [4, 7, 0], [4, 8, 0], [4, 9, 2], [4, 10, 4], [4, 11, 4], [4, 12, 2], [4, 13, 4], [4, 14, 4], [4, 15, 14], [4, 16, 12], [4, 17, 1], [4, 18, 8], [4, 19, 5], [4, 20, 3], [4, 21, 7], [4, 22, 3], [4, 23, 0], [5, 0, 2], [5, 1, 1], [5, 2, 0], [5, 3, 3], [5, 4, 0], [5, 5, 0], [5, 6, 0], [5, 7, 0], [5, 8, 2], [5, 9, 0], [5, 10, 4], [5, 11, 1], [5, 12, 5], [5, 13, 10], [5, 14, 5], [5, 15, 7], [5, 16, 11], [5, 17, 6], [5, 18, 0], [5, 19, 5], [5, 20, 3], [5, 21, 4], [5, 22, 2], [5, 23, 0], [6, 0, 1], [6, 1, 0], [6, 2, 0], [6, 3, 0], [6, 4, 0], [6, 5, 0], [6, 6, 0], [6, 7, 0], [6, 8, 0], [6, 9, 0], [6, 10, 1], [6, 11, 0], [6, 12, 2], [6, 13, 1], [6, 14, 3], [6, 15, 4], [6, 16, 0], [6, 17, 0], [6, 18, 0], [6, 19, 0], [6, 20, 1], [6, 21, 2], [6, 22, 2], [6, 23, 6]]; const title = []; const singleAxis = []; const series = []; days.forEach(function (day, idx) { title.push({ textBaseline: 'middle', top: ((idx + 0.5) * 100) / 7 + '%', text: day }); singleAxis.push({ left: 150, type: 'category', boundaryGap: false, data: hours, top: (idx * 100) / 7 + 5 + '%', height: 100 / 7 - 10 + '%', axisLabel: { interval: 2 } }); series.push({ singleAxisIndex: idx, coordinateSystem: 'singleAxis', type: 'scatter', data: [], symbolSize: function (dataItem) { return dataItem[1] * 4; } }); }); data.forEach(function (dataItem) { series[dataItem[0]].data.push([dataItem[1], dataItem[2]]); }); option = { tooltip: { position: 'top' }, title: title, singleAxis: singleAxis, series: series }; ``` ::: :::echarts ```js var data = [ { name: 'Flora', itemStyle: { color: '#da0d68' }, children: [ { name: 'Black Tea', value: 1, itemStyle: { color: '#975e6d' } }, { name: 'Floral', itemStyle: { color: '#e0719c' }, children: [ { name: 'Chamomile', value: 1, itemStyle: { color: '#f99e1c' } }, { name: 'Rose', value: 1, itemStyle: { color: '#ef5a78' } }, { name: 'Jasmine', value: 1, itemStyle: { color: '#f7f1bd' } } ] } ] }, { name: 'Fruity', itemStyle: { color: '#da1d23' }, children: [ { name: 'Berry', itemStyle: { color: '#dd4c51' }, children: [ { name: 'Blackberry', value: 1, itemStyle: { color: '#3e0317' } }, { name: 'Raspberry', value: 1, itemStyle: { color: '#e62969' } }, { name: 'Blueberry', value: 1, itemStyle: { color: '#6569b0' } }, { name: 'Strawberry', value: 1, itemStyle: { color: '#ef2d36' } } ] }, { name: 'Dried Fruit', itemStyle: { color: '#c94a44' }, children: [ { name: 'Raisin', value: 1, itemStyle: { color: '#b53b54' } }, { name: 'Prune', value: 1, itemStyle: { color: '#a5446f' } } ] }, { name: 'Other Fruit', itemStyle: { color: '#dd4c51' }, children: [ { name: 'Coconut', value: 1, itemStyle: { color: '#f2684b' } }, { name: 'Cherry', value: 1, itemStyle: { color: '#e73451' } }, { name: 'Pomegranate', value: 1, itemStyle: { color: '#e65656' } }, { name: 'Pineapple', value: 1, itemStyle: { color: '#f89a1c' } }, { name: 'Grape', value: 1, itemStyle: { color: '#aeb92c' } }, { name: 'Apple', value: 1, itemStyle: { color: '#4eb849' } }, { name: 'Peach', value: 1, itemStyle: { color: '#f68a5c' } }, { name: 'Pear', value: 1, itemStyle: { color: '#baa635' } } ] }, { name: 'Citrus Fruit', itemStyle: { color: '#f7a128' }, children: [ { name: 'Grapefruit', value: 1, itemStyle: { color: '#f26355' } }, { name: 'Orange', value: 1, itemStyle: { color: '#e2631e' } }, { name: 'Lemon', value: 1, itemStyle: { color: '#fde404' } }, { name: 'Lime', value: 1, itemStyle: { color: '#7eb138' } } ] } ] }, { name: 'Sour/\nFermented', itemStyle: { color: '#ebb40f' }, children: [ { name: 'Sour', itemStyle: { color: '#e1c315' }, children: [ { name: 'Sour Aromatics', value: 1, itemStyle: { color: '#9ea718' } }, { name: 'Acetic Acid', value: 1, itemStyle: { color: '#94a76f' } }, { name: 'Butyric Acid', value: 1, itemStyle: { color: '#d0b24f' } }, { name: 'Isovaleric Acid', value: 1, itemStyle: { color: '#8eb646' } }, { name: 'Citric Acid', value: 1, itemStyle: { color: '#faef07' } }, { name: 'Malic Acid', value: 1, itemStyle: { color: '#c1ba07' } } ] }, { name: 'Alcohol/\nFremented', itemStyle: { color: '#b09733' }, children: [ { name: 'Winey', value: 1, itemStyle: { color: '#8f1c53' } }, { name: 'Whiskey', value: 1, itemStyle: { color: '#b34039' } }, { name: 'Fremented', value: 1, itemStyle: { color: '#ba9232' } }, { name: 'Overripe', value: 1, itemStyle: { color: '#8b6439' } } ] } ] }, { name: 'Green/\nVegetative', itemStyle: { color: '#187a2f' }, children: [ { name: 'Olive Oil', value: 1, itemStyle: { color: '#a2b029' } }, { name: 'Raw', value: 1, itemStyle: { color: '#718933' } }, { name: 'Green/\nVegetative', itemStyle: { color: '#3aa255' }, children: [ { name: 'Under-ripe', value: 1, itemStyle: { color: '#a2bb2b' } }, { name: 'Peapod', value: 1, itemStyle: { color: '#62aa3c' } }, { name: 'Fresh', value: 1, itemStyle: { color: '#03a653' } }, { name: 'Dark Green', value: 1, itemStyle: { color: '#038549' } }, { name: 'Vegetative', value: 1, itemStyle: { color: '#28b44b' } }, { name: 'Hay-like', value: 1, itemStyle: { color: '#a3a830' } }, { name: 'Herb-like', value: 1, itemStyle: { color: '#7ac141' } } ] }, { name: 'Beany', value: 1, itemStyle: { color: '#5e9a80' } } ] }, { name: 'Other', itemStyle: { color: '#0aa3b5' }, children: [ { name: 'Papery/Musty', itemStyle: { color: '#9db2b7' }, children: [ { name: 'Stale', value: 1, itemStyle: { color: '#8b8c90' } }, { name: 'Cardboard', value: 1, itemStyle: { color: '#beb276' } }, { name: 'Papery', value: 1, itemStyle: { color: '#fefef4' } }, { name: 'Woody', value: 1, itemStyle: { color: '#744e03' } }, { name: 'Moldy/Damp', value: 1, itemStyle: { color: '#a3a36f' } }, { name: 'Musty/Dusty', value: 1, itemStyle: { color: '#c9b583' } }, { name: 'Musty/Earthy', value: 1, itemStyle: { color: '#978847' } }, { name: 'Animalic', value: 1, itemStyle: { color: '#9d977f' } }, { name: 'Meaty Brothy', value: 1, itemStyle: { color: '#cc7b6a' } }, { name: 'Phenolic', value: 1, itemStyle: { color: '#db646a' } } ] }, { name: 'Chemical', itemStyle: { color: '#76c0cb' }, children: [ { name: 'Bitter', value: 1, itemStyle: { color: '#80a89d' } }, { name: 'Salty', value: 1, itemStyle: { color: '#def2fd' } }, { name: 'Medicinal', value: 1, itemStyle: { color: '#7a9bae' } }, { name: 'Petroleum', value: 1, itemStyle: { color: '#039fb8' } }, { name: 'Skunky', value: 1, itemStyle: { color: '#5e777b' } }, { name: 'Rubber', value: 1, itemStyle: { color: '#120c0c' } } ] } ] }, { name: 'Roasted', itemStyle: { color: '#c94930' }, children: [ { name: 'Pipe Tobacco', value: 1, itemStyle: { color: '#caa465' } }, { name: 'Tobacco', value: 1, itemStyle: { color: '#dfbd7e' } }, { name: 'Burnt', itemStyle: { color: '#be8663' }, children: [ { name: 'Acrid', value: 1, itemStyle: { color: '#b9a449' } }, { name: 'Ashy', value: 1, itemStyle: { color: '#899893' } }, { name: 'Smoky', value: 1, itemStyle: { color: '#a1743b' } }, { name: 'Brown, Roast', value: 1, itemStyle: { color: '#894810' } } ] }, { name: 'Cereal', itemStyle: { color: '#ddaf61' }, children: [ { name: 'Grain', value: 1, itemStyle: { color: '#b7906f' } }, { name: 'Malt', value: 1, itemStyle: { color: '#eb9d5f' } } ] } ] }, { name: 'Spices', itemStyle: { color: '#ad213e' }, children: [ { name: 'Pungent', value: 1, itemStyle: { color: '#794752' } }, { name: 'Pepper', value: 1, itemStyle: { color: '#cc3d41' } }, { name: 'Brown Spice', itemStyle: { color: '#b14d57' }, children: [ { name: 'Anise', value: 1, itemStyle: { color: '#c78936' } }, { name: 'Nutmeg', value: 1, itemStyle: { color: '#8c292c' } }, { name: 'Cinnamon', value: 1, itemStyle: { color: '#e5762e' } }, { name: 'Clove', value: 1, itemStyle: { color: '#a16c5a' } } ] } ] }, { name: 'Nutty/\nCocoa', itemStyle: { color: '#a87b64' }, children: [ { name: 'Nutty', itemStyle: { color: '#c78869' }, children: [ { name: 'Peanuts', value: 1, itemStyle: { color: '#d4ad12' } }, { name: 'Hazelnut', value: 1, itemStyle: { color: '#9d5433' } }, { name: 'Almond', value: 1, itemStyle: { color: '#c89f83' } } ] }, { name: 'Cocoa', itemStyle: { color: '#bb764c' }, children: [ { name: 'Chocolate', value: 1, itemStyle: { color: '#692a19' } }, { name: 'Dark Chocolate', value: 1, itemStyle: { color: '#470604' } } ] } ] }, { name: 'Sweet', itemStyle: { color: '#e65832' }, children: [ { name: 'Brown Sugar', itemStyle: { color: '#d45a59' }, children: [ { name: 'Molasses', value: 1, itemStyle: { color: '#310d0f' } }, { name: 'Maple Syrup', value: 1, itemStyle: { color: '#ae341f' } }, { name: 'Caramelized', value: 1, itemStyle: { color: '#d78823' } }, { name: 'Honey', value: 1, itemStyle: { color: '#da5c1f' } } ] }, { name: 'Vanilla', value: 1, itemStyle: { color: '#f89a80' } }, { name: 'Vanillin', value: 1, itemStyle: { color: '#f37674' } }, { name: 'Overall Sweet', value: 1, itemStyle: { color: '#e75b68' } }, { name: 'Sweet Aromatics', value: 1, itemStyle: { color: '#d0545f' } } ] } ]; option = { title: { text: 'WORLD COFFEE RESEARCH SENSORY LEXICON', subtext: 'Source: https://worldcoffeeresearch.org/work/sensory-lexicon/', textStyle: { fontSize: 14, align: 'center' }, subtextStyle: { align: 'center' }, sublink: 'https://worldcoffeeresearch.org/work/sensory-lexicon/' }, series: { type: 'sunburst', data: data, radius: [0, '95%'], sort: undefined, emphasis: { focus: 'ancestor' }, levels: [ {}, { r0: '15%', r: '35%', itemStyle: { borderWidth: 2 }, label: { rotate: 'tangential' } }, { r0: '35%', r: '70%', label: { align: 'right' } }, { r0: '70%', r: '72%', label: { position: 'outside', padding: 3, silent: false }, itemStyle: { borderWidth: 3 } } ] } }; ``` ::: :::echarts ```js option = { legend: {}, tooltip: {}, dataset: { source: [ ['product', '2012', '2013', '2014', '2015'], ['Matcha Latte', 41.1, 30.4, 65.1, 53.3], ['Milk Tea', 86.5, 92.1, 85.7, 83.1], ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4] ] }, xAxis: [ { type: 'category', gridIndex: 0 }, { type: 'category', gridIndex: 1 } ], yAxis: [{ gridIndex: 0 }, { gridIndex: 1 }], grid: [{ bottom: '55%' }, { top: '55%' }], series: [ // These series are in the first grid. { type: 'bar', seriesLayoutBy: 'row' }, { type: 'bar', seriesLayoutBy: 'row' }, { type: 'bar', seriesLayoutBy: 'row' }, // These series are in the second grid. { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 }, { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 }, { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 }, { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 } ] }; ``` ::: :::echarts ```js option = { graphic: { elements: [ { type: 'group', left: 'center', top: 'center', children: new Array(7).fill(0).map((val, i) => ({ type: 'rect', x: i * 20, shape: { x: 0, y: -40, width: 10, height: 80 }, style: { fill: '#5470c6' }, keyframeAnimation: { duration: 1000, delay: i * 200, loop: true, keyframes: [ { percent: 0.5, scaleY: 0.3, easing: 'cubicIn' }, { percent: 1, scaleY: 1, easing: 'cubicOut' } ] } })) } ] } }; ``` ::: --- --- url: /more/friends/index.md description: 我的好友们 --- # 友情链接 ## 我的好友们 ## 申请友链 ### *我的友链信息* ``` 我的名称: rand777 网站地址: https://www.rand777.com 描述: 摇摇晃晃,也能到达目的地。 头像: https://www.rand777.com/avatar.jpg 站点图片: https://www.rand777.com/siteshot.jpg ``` ### *友情链接申请* 欢迎各位朋友添加友链! 😄 * 由于本博客暂未有添加评论系统的计划,**因此添加友情链接需要你将 你的信息 发送至我的邮箱:** `losmosga@foxmail.com` , 看到消息后我会尽快回复并添加你的友链。 * 你的发送内容必须包含 `你的名称`、`网站地址`、`描述`、`头像地址`,**请确保你的链接地址正确且处于能够访问的状态。** ``` name: 你的名称 link: 网站地址 desc: 描述。 avatar: 头像地址 ``` * 本站==只添加个人博客站=={.important},不添加 `论坛站`、`采集站`、`说明文档类` 等 **非个人博客的站点**,若收到以上类别站点的友链请求,会直接忽略。 * 网站内容**必须符合** `中国大陆法律法规`。 * 若站点处于**长期不可访问状态** 或 **违反上述规定**,本站将会在无告知的情况下删除。 --- --- url: /more/projects/index.md --- # Open Source 已签署 [DORA](https://sfdora.org/read/read-the-declaration-chinese/),适用于个人「知识产权」与「学术研究成果及相关项目源程序」,做到:文章开放获取、代码开源、文档开源、许可协议开源、公开透明、社区自治,并履行附属条款。 ## 个人开源项目 ### Tutorial 系列 用于记录学习「某种编程语言」、「框架技术」等的仓库。 ### react-practice-web ::logos:react =1.5em::::skill-icons:typescript =1.5em::::logos:vitejs =1.5em::::logos:tailwindcss-icon =1.5em::::logos:supabase-icon =1.5em:: 「刷题网站」*Practice Web* 是一个基于 React 19 + TypeScript + Supabase 的单选刷题练习平台,支持练习模式、考试模式(随机 50 题 / 60 分钟限时,刷新恢复、超时自动提交)、错题回顾(按练习/考试模式筛选)及题目管理(CRUD + CSV/JSON 批量导入)。首个注册用户自动成为管理员,界面支持中英文切换、系统深色模式自适应及移动端响应式布局。使用 Zustand 状态管理、React Router v7 懒加载路由、shadcn/ui (Radix UI) 组件库、Tailwind CSS 4 样式方案,并集成 Vite PWA 插件支持离线访问。 ### @ROS2/drivers 为 机器人操作系统 2 (ROS2) 编写的一些「小驱动」。 WIP (working in progress) ### @LaTeX/templates 一些使用 LaTeX 编写的模板 WIP ### @Typst/templates 一些使用 Typst 编写的模板 WIP ### @Emacs/plugins 为 Emacs 编写的插件 WIP ## 团队开源项目 [//]: # ":: =1.5em::" ### @PGuideDev/PGuide-Docs ::logos:vue =1.5em::::skill-icons:typescript =1.5em::::catppuccin:markdown =1.5em:: 「项导文档」*PGuide-Docs* 是一个开源的文档类项目,旨在为想要从事计算机领域的新同学提供本地化的文档支持,促进开源生态建设与不同组织间交流,仍在开发中。 国际站点: [//]: # "### @PGuideDev/smart-tmc" ### @PGuideDev/when2eat ::file-icons:flask =1.5em::::logos:python =1.5em::::devicon:influxdb =1.5em::::logos:vue =1.5em::::simple-icons:yolo =1.5em::::vscode-icons:file-type-cuda =1.5em::::logos:docker-icon =1.5em:: 「啥时候吃饭」 *when2eat* 是一个开源的餐饮预约推荐与可视化系统,使用机器学习算法预测合理的吃饭时间区间,减少排队带来的烦躁感,仍在开发中。 ### @PGuideDev/SmartCar-v2 ::devicon:spring =1.5em::::logos:vue =1.5em::::skill-icons:typescript =1.5em::::logos:docker-icon =1.5em:: 智能小车二代管理后台,基于 *JeecgBoot* 二次开发,集成了车辆管理、任务管理、用户管理、权限管理等功能,支持多用户协同操作,提升了智能小车的使用效率和管理便捷性,仍在开发中。 ### @PGuideDev/plant-cure WIP ### @DingGe3/oh-my-api ::logos:vue =1.5em::::logos:python =1.5em::::devicon:mysql =1.5em:: *oh-my-api* 为各大人工智能厂商设计余额预警、查询及 Apache Echarts 可视化看板,使用了逆向、cookie 等获取用户登录信息,来提醒用户珍惜自己的 api,除各家标准的 *OpenAI API* 接口外 整合中间商 (OpenRouter、硅基流动、TogetherAI 等),仍在开发中。 ### @CQMUtug/cqmu-theis ::file-icons:latex =1.5em:: 重庆医科大学本科生毕业论文 LaTeX 模板,符合学校最新的论文格式 「2025 版」 要求,集成了 Zotero 参考文献管理、图表插入、章节结构等功能,帮助学生高效完成毕业论文撰写任务。 ### @CQMUtug/CQMU-experiments-homework-template ::file-icons:latex =1.5em:: 重庆医科大学平时作业和小论文模板 ### @CQMUtug/CQMU-resume This template was forked from [::fa7-brands:github =1.2em:: LeyuDame/BNUCV/](https://github.com/LeyuDame/BNUCV/tree/main), and modified to fit the needs of Chongqing Medical University students. It is a LaTeX resume template that adheres to modern design principles, ensuring a clean and professional appearance. ### @CQMUA/typst ::material-icon-theme:rust =1.5em::::material-icon-theme:typst =1.5em::::material-icon-theme:html =1.5em:: 魔改 typst 核心,加入并行与分布式编译算法与 GPU 加速渲染,结合 Rust 的稳定特性,极致 typst 的编译速度与渲染质量,仍在开发中。 ## 社区贡献项目 ### @LoongTeX/docs 为「龙文」添加文档支持,WIP ### @Overleaf/toolkit 1. Mention one docker naming issue([#352](https://github.com/overleaf/toolkit/issues/352)) and add error processing logic PR(WIP). 2. Rewrite the User Interface, make it more user-friendly PR(WIP). ### @AutoMQ/automq Documentation of Apache AutoMQ, a powerful, efficient, and easy-to-use messaging and integration platform. ### @pengzhanbo/vuepress-theme-plume * reported one text overflow issue[(#698)](https://github.com/pengzhanbo/vuepress-theme-plume/issues/698) * reported one shiki inline highlight issue([#667](https://github.com/pengzhanbo/vuepress-theme-plume/issues/667)) * reached out for a table feature request([#660](https://github.com/pengzhanbo/vuepress-theme-plume/issues/660)) ## 已归档项目 业务调整,以下组织的项目不再维护 @CQMUA @CQMULug ## 他人优秀开源项目 --- --- url: /more/sites-collect/index.md --- # 网址导航 ### 趋势 ## 库/框架 *** *** *** ## Vue相关 *** ## CSS相关 *** *** ## JavaScript ## 小程序 ## 图标 ## 构建工具 ## 站点生成工具 ## 其他 --- --- url: >- /read/introduction-to-medicine/correspondent-index-of-chinese-and-english-terms/index.md --- # 中英文名词对照索引 没错,医学也有 ~~黑话~~ 标准术语 ## 总表 ::: table max-content title="中英文名词对照索引表" hl-rows="note:1,4,6,9,14,16,20,28,40,44,47,50,57,59,67,72,80,87," | 中文名词 | 英文对照 | 页码 | |:---------------|:-------------------------------------------------------|:--------| | 2000 年人人享有卫生保健 | health for all by the year 2000, HFA / 2000 | 169 | | 21 世纪人人享有卫生保健 | health for all in the twenty first century | 169 | | **B** | | | | 濒死期 | ==agonal stage== | 138 | | **C** | | | | 残疾 | disability | 174 | | 初级卫生保健 | primary health care | 171 | | **D** | | | | 蛋白质组学 | ==proteomics== | 27 | | 第二级预防 | secondary prevention | 165 | | 第三级预防 | ==tertiary prevention== | 166 | | 第一级预防 | primary prevention | 163 | | **F** | | | | 分子生物学 | molecular biology | 19 | | **G** | | | | 个体预防 | individual prevention | 162 | | 构建人类卫生健康共同体 | global community of health for all | 170 | | 国际护士理事会 | International Council of Nurses, ICN | 93 | | **J** | | | | 机构康复 | institution - based rehabilitation, IBR | 172 | | 疾病控制与预防中心 | Center for Disease Control and Prevention (CDC 或 CDCP) | 96 | | 家庭医生 | ==family practitioner== | 99 | | 假肢与矫形器师 | ==prosthetist and orthosis==, P\&O | 174 | | 教育康复 | educational rehabilitation | 172 | | 精准医学 | precision medicine | 32 | | 居家康复 | home - based rehabilitation | 172 | | **K** | | | | 咖啡因 | ==caffeine== | 13 | | 康复 | rehabilitation | 172 | | 康复工程 | rehabilitation engineering | 172 | | 康复评定 | rehabilitation evaluation, assessment | 177 | | 康复心理学 | rehabilitation psychology | 178 | | 康复医师 | ==physiatrist== | 174 | | 康复医学 | rehabilitation medicine | 173 | | 康复治疗 | rehabilitation treatment, rehabilitation care | 178 | | 可持续发展目标 | sustainable development goals, SDGs | 170 | | 可卡因 | ==cocaine== | 15 | | 奎宁 | ==quinine== | 13 | | **L** | | | | 联合国千年发展目标 | ==millennium development goals, MDGs== | 170 | | 《联合国千年宣言》 | ==United Nations Millennium Declaration== | 170 | | 临床死亡期 | clinical death stage | 138 | | **M** | | | | 美国护士协会 | American Nurses Association, ANA | 93 | | 免疫系统 | immune system | 26 | | **N** | | | | 纳米技术 | nanotechnology | 29 | | 脑死亡 | brain death | 138 | | **Q** | | | | 器官移植 | ==organ transplantation== | 26 | | 青蒿素 | ==artemisinin== | 41 | | 全科医生 | general practitioner | 99 | | 全面康复 | comprehensive rehabilitation | 172 | | 全面医学 | comprehensive medicine | 173 | | 群体预防 | ==colony prevention== | 163 | | **R** | | | | 人工器官 | artificial organ | 21 | | **S** | | | | 三级预防 | preventions at three levels | 163 | | 上门康复服务 | ==out-reaching rehabilitation service, ORS== | 172 | | 社会工作者 | social worker, SW | 174 | | 社会康复 | social rehabilitation | 172 | | 社区康复 | community - based rehabilitation, CBR | 172 | | 生物死亡期 | biological death stage | 138 | | 失能者 | person with disability | 174 | | **W** | | | | 卫生学 | ==hygiene== | 159 | | 文体治疗师 | ==recreation therapist, RT== | 174 | | 物理疗法 | ==physical therapy, physiotherapy, PT== | 179 | | 物理治疗师 | ==physiotherapist, PT== | 174 | | **X** | | | | 系统生物学 | systems biology | 30 | | 系统生物医学 | system biomedicine | 30 | | 心理治疗 | psychotherapy | 179 | | 心理治疗师 | psychological therapist | 174 | | 《心血运动论》 | The Movement of the Heart and the Blood | 11 | | 虚拟现实 | virtual reality, VR | 179 | | 循证医学 | ==evidence-based medicine, EBM== | 149 | | **Y** | | | | 言语治疗 | speech therapy | 179 | | 言语治疗师 | speech therapist, ST | 174 | | 医疗康复 | ==medical rehabilitation== | 172 | | 医学模式 | medical model | 21 | | 预防康复 | preventive rehabilitation | 174 | | 预防医学 | preventive medicine | 29, 159 | | **Z** | | | | 再生医学 | ==regenerative medicine== | 28 | | 整体康复 | ==integral rehabilitation== | 174 | | 职业康复 | ==vocational rehabilitation== | 172 | | 治未病 | ==preventive treatment of disease== | 36 | | 中国疾病预防控制中心 | China Center for Disease Control and Prevention | 96 | | 中世纪 | middle ages | 9 | | 中医学 | traditional Chinese medicine, TCM | 34 | | 转化医学 | translational medicine | 31 | | 作业疗法 | ==occupational therapy, OT== | 179 | | 作业治疗师 | ==occupational therapist, OT== | 174 | ::: ## B 濒死期 agonal stage 138 ## C 残疾 disability 174 初级卫生保健 primary health care 171 ## D 蛋白质组学 proteomics 27 第二级预防 secondary prevention 165 第三级预防 tertiary prevention 166 第一级预防 primary prevention 163 ## F 分子生物学 molecular biology 19 ## G 个体预防 individual prevention 162 构建人类卫生健康共同体 global community of health for all 170 国际护士理事会 International Council of Nurses,ICN 93 ## J 机构康复 institution - based rehabilitation,IBR 172 疾病控制与预防中心 Center for Disease Control and Prevention,简称 CDC 或 CDCP 96 家庭医生 family practitioner 99 假肢与矫形器师 prosthetist and orthosis,P\&O 174 教育康复 educational rehabilitation 172 精准医学 precision medicine 32 居家康复 home - based rehabilitation 172 ## K 咖啡因 caffeine 13 康复 rehabilitation 172 康复工程 rehabilitation engineering 172 康复评定 rehabilitation evaluation,assessment 177 康复心理学 rehabilitation psychology 178 康复医师 physiatrist 174 康复医学 rehabilitation medicine 173 康复治疗 rehabilitation treatment,rehabilitation care 178 可持续发展目标 sustainable development goals,SDGs 170 可卡因 cocaine 15 奎宁 quinine 13 ## L 联合国千年发展目标 millennium development goals,MDGs 170 《联合国千年宣言》 United Nations Millennium Declaration 170 临床死亡期 clinical death stage 138 ## M 美国护士协会 American Nurses Association,ANA 93 免疫系统 immune system 26 ## N 纳米技术 nanotechnology 29 脑死亡 brain death 138 ## Q 器官移植 organ transplantation 26 青蒿素 artemisinin 41 全科医生 general practitioner 99 全面康复 comprehensive rehabilitation 172 全面医学 comprehensive medicine 173 群体预防 colony prevention 163 ## R 人工器官 artificial organ 21 ## S 三级预防 preventions at three levels 163 上门康复服务 out - reaching rehabilitation service,ORS 172 社会工作者 social worker,SW 174 社会康复 social rehabilitation 172 社区康复 community - based rehabilitation,CBR 172 生物死亡期 biological death stage 138 失能者 person with disability 174 ## W 卫生学 hygiene 159 文体治疗师 recreation therapist,RT 174 物理疗法 physical therapy,physiotherapy,PT 179 物理治疗师 physiotherapist,PT 174 ## X 系统生物学 systems biology 30 系统生物医学 system biomedicine 30 心理治疗 psychotherapy 179 心理治疗师 psychological therapist 174 《心血运动论》 The Movement of the Heart and the Blood 11 虚拟现实 virtual reality,VR 179 循证医学 evidence - based medicine,EBM ## Y 言语治疗 speech therapy 179 言语治疗师 speech therapist,ST 174 医疗康复 medical rehabilitation 172 医学模式 medical model 21 预防康复 preventive rehabilitation 174 预防医学 preventive medicine 29,159 ## Z 再生医学 regenerative medicine 28 整体康复 integral rehabilitation 174 职业康复 vocational rehabilitation 172 治未病 preventive treatment of disease 36 中国疾病预防控制中心 China Center for Disease Control and Prevention 96 中世纪 middle ages 9 中医学 traditional Chinese medicine,TCM 34 转化医学 translational medicine 31 作业疗法 occupational therapy,OT 179 作业治疗师 occupational therapist,OT 174 --- --- url: /read/ordinary-logic/index.md --- # 《普通逻辑学》(第5版) > 普通逻辑编写组,《普通逻辑学》,上海人民出版社; --- --- url: /read/ordinary-logic/concept/index.md --- # 概念 ## 概念的两个基本特征 P111 「概念」是反映对象特有属性或本质属性的思维形式。 概念反映对象的特有属性或本质属性, 同时也就反映了具有这种特有属性或本质属性的对象,因而概念有自身的内容和确定 的范围。==这两方面就构成了概念的两个基本逻辑特征,即内涵和外延=={.tip}。 概念的「内涵」是指 反映在概念中的对象的特有属性或本质==属性=={.important}。 概念的「外延」是指 具有概念所反映的特有属性或本质属性的==对象=={.important}。 例如,「商品」这个概念,它的内涵是「为交换而生产的劳动产品」、「具有使用价值和价值」等;它的外延是『「指具有上述属性的对象」, 即投入市场交换的、各种各样的商品,包括供生产使用的商品和供生活消费的商品。』 概念的内涵与外延是概念的基本特征,它们同对象的属性和对象本身既有联系又有区别。 就内涵来说,对象的各种特有属性本质属性都可以反映在特定概念中成为该概念的内涵,任何概念的内涵也都是反映特定对象一定方面的特有属性或本质属性。 > 彭于晏的内涵是 “一个公认的帅哥” 但是,并非对象的特有属性或本质属性就是概念的内涵,而是只有当对象的特有属性或本质属性被反映到概念之中时, 才转化成为概念的内涵。 > 屏幕前的你也是一个帅哥,但比较「低调」,这是你区别于彭于晏的特有属性。所以别人夸你长得像彭于晏,是说你长得帅,反映出你具有彭于晏的内涵。 就外延来说,任何事物都可以反映在特定概念中成为其外延,概念的外延就是指适用于该概念的对象。 但是,并非客观对象就是概念的外延,而是只有当客观事物被反映到概念之中成为其对象时,才转化为概念的外延。 > 彭于晏的外延是“彭于晏本人”,而屏幕前的你也是一个帅哥,但并不是彭于晏,所以你不是彭于晏的外延。反之亦然,你的外延是“屏幕前的你”,而不是彭于晏。 > 在网络社交平台上,经常发现帅哥美女发视频时,评论区会说 『我老公/老婆』 。 ## 概念的种类 P112 ### 单独概念和普遍概念 > 概念反映的对象数量 「单独概念」是指反映某==一个==事物的概念,它的外延仅指一个单独的对象。拿地名来举例,『北京』反映的是一个单独的城市;一些专有名词也是单独概念,如「珠穆朗玛峰」。 「普遍概念」是指反映某==一类==事物的概念,它的外延不是由一个单独的分子构成的,而是由两个以上分子组成的类。如“矛盾”、“规律”、等等,由于它们的外延都是包括许多分子的类,因而是普遍概念;此外,动词、形容词也常常表达普遍概念,如坐、立、打、聪明、勇敢等。 ### 集合概念和非集合概念 > 概念反映的对象是否为同一种事物个体组成的群体 「集合概念」就是以事物的群体为反映对象的概念,如“森林”、“丛书”、“工人阶级”等。集合概念只适用于它所反映的群体,而不适用于该群体内的个体。 「非集合概念」就是不以事物的群体为反映对象的概念。例如“工人”、“树”、“书”等都是非集合概念,适用于它所反映的类,也可以适用与该类中的分子。 鲁迅的作品不是一天能读完的:「鲁迅的作品」是一个集合概念; 《祝福》是鲁迅的作品:「鲁迅的作品」是就是「鲁迅作品」这个类中一个一个的分子,表达非集合概念。 所以,不能简单地做等价代换,==不可以说《祝福》不是一天能读完的。=={.danger} ### 正概念和负概念 > 概念反映的对象是否具有某种属性 在思维中==反映对象具有某种属性==的概念就叫做「正概念」,关键在于怎么定义这个「正」,虽然一般情况下负概念(如「非」「不」「无」等)的词和语句看起来是负概念,但并不一定是负概念(如「无产阶级」)。 事物必定具有某些属性的同时也不具有某种属性。拿「战争」举例,有侵略性质的正概念为「侵略战争」,具有「侵略性质」;而「侵略战争」是不正义的,不具有「正义性」,形成负概念「非正义战争」。 同时也要注意负概念的内涵和外延,了解和掌握其「论域」,其总是相对于一个特定范围而言的。上面的负概念「非正义战争」的内涵是「不具有正义性的战争」,它的外延是「所有不具有正义性的战争」,包括「侵略战争」及其他「非正义战争」。 ### 小结 一个概念可以有多种分类方式,例如: 「中国共产党」是一个单独概念、集合概念、正概念。 「非机动车」是一个普遍概念、非集合概念、负概念。 ## 概念的逻辑方法 *Wandering through inked whispers, breathing in the scent of stories.* --- --- url: /read/ordinary-logic/proposition-and-inference/index.md --- # 命题及推理 ## 复合命题及推理 P23 ### 命题与判断、语句 ## 性质命题及推理 P154 ## 关系命题及推理 P196 --- --- url: /read/OS/guidance/chap01/index.md --- # 第一章 关于本书的对话 「不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。[+1]」 [+1]: 没有听到不如听到,听到不如看到,看到不如了解,了解它不如实践,学习到了实践就终止了。 ::: chat title="操作系统导论" {:2025-09-15} {教授} 欢迎阅读这本书,本书英文书名为《Operating Systems: Three Easy Pieces》,由我来讲授关于操作系统的知识。请做一下自我介绍。 {.} 教授,您好,我是学生,您可能已经猜到了,我已经准备好开始学习了! {教授} 很好。有问题吗? {.} 有!本书为什么讲“3个简单部分”? {教授} 这很简单。理查德·费曼有几本关于物理学的讲义,非常不错…… {.} 啊,是《别闹了,费曼先生》的作者吗?那本书很棒!这书也会像那本书一样搞笑吗? {教授} 呃……不。那本书的确很棒,很高兴你读过它。我希望这本书更像他关于物理学的讲义。将一些基本内容汇集成一本书,名为《Six Easy Pieces》。他讲的是物理学,而我们将探讨的主题是操作系统的 3 个简单部分。这很合适,因为操作系统的难度差不多是物理学的一半。 {.} 懂了,我喜欢物理学。是哪3个部分呢? {教授} 虚拟化(virtualization)、并发(concurrency)和持久性(persistence)。这是我们要学习的 3 个关键概念…… {.} 对于您说的这些,我都没有概念。 {教授} 好极了,这说明你来对了地方。 {.} 我还有一个问题:学习这些内容最好的方法是什么? {教授} 好问题!……就像孔子说的那样…… {.} 我知道!“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。” {教授} (惊讶)你怎么知道我要说这个? {.} 这样似乎很连贯。我是孔子的粉丝,更是荀子的粉丝,实际上荀子才是说这句话的人。 {教授} (愕然)我猜我们会相处得很愉快。 {.} 教授,我还有一个问题,我们这样的对话有什么用的?我是说如果这仅是一本书,为什么您不直接上来就讲述知识呢? {教授} 好问题!我觉得有的时候将自己从叙述中抽离出来,然后进行一些思考会更有用。这些对话就是思考。我们将协作探究所有这些复杂的概念。你是为此而来的吗? {.} 所以我们必须思考?好的,我正是为此而来。不过我还有什么要做的吗?看来我好像就是为此书而生。 {教授} 我也是。我们开始学习吧! ::: --- --- url: /read/OS/guidance/chap02/index.md --- 「程序」在运行发生了什么?处理器先从内存中获取一条指令,对其进行解码 decode,然后执行 execute 该指令。然后处理器获取下一条指令,依此类推,直到程序终止。这便是「冯·诺依曼」计算模型的基本概念。 ```mermaid graph TD A[程序开始运行] --> B[处理器从内存获取指令] B --> C[解码(decode)指令] C --> D[执行(execute)指令] D --> E{程序是否终止?} E -- 否 --> B E -- 是 --> F[程序终止] ``` 但是如果程序需要等待某些程序(例如 I/O 操作完成)才能继续执行怎么办?处理器会一直等待吗?这显然不是一个好主意,因为处理器资源是宝贵的,应该被充分利用。所以一类软件被设计出来,称为「操作系统」(Operating System, OS),它负责管理计算机的硬件资源,并为其他软件提供服务。 操作系统在管理资源时,使用了一种称为「虚拟化」(virtualization)的技术。虚拟化允许操作系统将物理资源(如 CPU、内存、存储等)抽象成多个虚拟资源,使得多个程序可以同时运行,而不会相互干扰。 除此之外,操作系统还提供了一些接口,供程序调用,以便它们可以请求操作系统执行某些任务,例如文件读写、网络通信等。这些接口通常被称为「系统调用」(system calls)。有时,我们也会说操作系统为应用程序提供了一个标准库(standard library)。 最后,操作系统的共享机制(如共享 CPU、内存、磁盘等),有时也被称为资源管理器(resource manager)。 ## 2.1 虚拟化CPU 我们来看看一些实际的例子。假设我们有一个简单的程序 `cpu.c`,它会不断打印传入的字符串参数: ```c title="cpu.c" #include #include #include #include #include "common.h" int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "usage: cpu \n"); exit(1); } char *str = argv[1]; while (1) { Spin(1); printf("%s\n", str); } return 0; } ``` --- --- url: /templates/index.md --- # Templates Ctrl // { // text: '', // icon: '', // collapsed: , // badge: '', // prefix: '', // items: \[ // { // text: '', // icon: '', // collapsed: , // badge: '', // prefix: '', // items: \[ // '', // ] // } // ] // }, 这里有常用的组件和语法糖的使用示例。 @[code-tree title="Project Name" height="400px" entry="filepath"](dir_path) // \[!code focus] LANGUAGE :::tip 待完善 ::: ::noto:red-heart:: /friends/persons/ /friends/organizations/ ::: collapse expand * Click to expand or collapse @[pdf zoom="95" ratio="21:29"]() ::: \[:[noto:red-heart::rand777](/friends/persons/) :::: steps 1. 步骤 1 ```ts console.log('Hello World!') ``` 2. 步骤 2 这里是步骤 2 的相关内容 3. 步骤 3 ::: tip 提示容器 ::: 4. 结束 ::::