` 标记和 `Alt` 属性。
36 |
37 | ### 呈现
38 | 用户输入查询时,机器会搜索索引查找匹配网页,并返回引擎认为与用户搜索最相关的结果。Google 在选择结果和对其进行排名时会考虑用户体验,确保网页能快速加载且适合移动设备有助于 SEO。
39 |
40 |
41 | ## 参考资料
42 | - [Search engine optimization][url-wiki-seo]
43 | - [How Google Search Works][url-docs-google-work]
44 | - [SEO Starter Guide][url-docs-google-seo]
45 |
46 |
47 | [url-base]:https://xxholic.github.io/segment
48 |
49 |
50 | [url-wiki-seo]:https://en.wikipedia.org/wiki/Search_engine_optimization
51 | [url-docs-google-work]:https://support.google.com/webmasters/answer/70897
52 | [url-docs-google-seo]:https://support.google.com/webmasters/answer/7451184?hl=en
53 |
54 |
55 |
56 | :wastebasket:
57 |
58 | 以下是一些无关紧要的内容。
59 |
60 | 记得在很久之前玩过什么是男人就上一百层之类的游戏,那个时候还是很简陋的画面,前段时间看游戏类解说的时候,发现了[《Catherine》][url-game]这款游戏,看了相关攻略视频后,感觉是个蛮有意思的游戏,有趣的点有:
61 | - 故事背景是成人向,一个男的跟两个美女之间的故事。让人羡慕的很!
62 | - 把推箱子、消消乐、向上爬很立体的结合起来,质量画面很不错。
63 | - 每过一关在类似忏悔室里面会有一个问题,问题跟人性有关,回答后会显示玩过游戏人选择的占比。
64 | - 官网有个页面很有意思,看着是一张图片显示,但你选择右键保存到本地,发现会是另外一张图片。
65 |
66 | 下面是一些海报,人物设计还是很漂亮的。
67 |
68 | ![53-waste-poster1][url-local-poster1]
69 |
70 | ![53-waste-poster2][url-local-poster2]
71 |
72 |
73 |
74 |
75 |
76 | [url-game]: https://store.steampowered.com/app/893180/Catherine_Classic/
77 | [url-local-poster1]:../images/53/poster1.jpg
78 | [url-local-poster2]:../images/53/poster2.jpg
--------------------------------------------------------------------------------
/draft/56.回车和换行.63.md:
--------------------------------------------------------------------------------
1 | # 56.回车和换行
2 | ## 引子
3 | 零散知识点。
4 |
5 | ## Carriage Return
6 | `Carriage Return` 中文是回车,经常缩写为 `CR` 或 `return`,是一个控制字符,用于将设备的位置重置为文本行的开头。在计算机里面,它命令打印机或其他输出系统(如系统控制台的显示)将光标位置移动到同一行的第一个位置。
7 |
8 | ## Line Feed
9 | `Line Feed` 中文是换行,还称为 `Newline`、`line ending`、`end of line(EOL)`、`line break`,是一个控制字符,用来表示文本行的结束和新行的开始。
10 |
11 | ## 关系
12 | 回车和换行的概念密切相关,可以单独考虑,也可以一起考虑。在打字机和打印机中,需要两个运动轴“向下”和“横向”来在页面上创建新行,尽管机器的设计必须要分别考虑它们,但软件的抽象逻辑可以将它们合并为一个事件。这就是为什么字符编码中的换行可以定义为一个字符(通常称为 CR+LF 或 CRLF)。
13 |
14 | 一些字符集提供单独的换行符代码。例如,EBCDIC 除了 `CR` 和 `LF` 代码之外,提供了 `NL` 字符代码。Unicode 除了提供 ASCII 的 `CR` 和 `LF` 控制代码外,还提供 `next line(NEL)` 控制代码,以及 `line separator` 和 `paragraph separator` 标记的控制代码。
15 |
16 | ![56-code][url-local-code]
17 |
18 | 表头依次是:系统 、 字符编码 、 缩写 、 十六进制 、 十进制 、 转义字符。
19 |
20 |
21 | ## 参考资料
22 | - [Carriage return][url-wiki-cr]
23 | - [Newline][url-wiki-newline]
24 |
25 |
26 |
27 | [url-base]:https://xxholic.github.io/segment
28 |
29 | [url-wiki-cr]:https://en.wikipedia.org/wiki/Carriage_return
30 | [url-wiki-newline]:https://en.wikipedia.org/wiki/Newline
31 |
32 | [url-local-code]:../images/56/code.png
33 |
34 |
35 | :wastebasket:
36 |
37 | 纯属瞎扯,如有雷同,纯属巧合。
38 |
39 | 最近看了[《克劳斯:圣诞节的秘密》](https://movie.douban.com/subject/26858510/?from=subject-page),感觉挺有意思的,里面讲的圣诞节由来,之前没有看过或听过。故事情节,让传说变的更加贴近实际,例如在天上拉雪橇只是一次意外。但里面又有加入了一些魔幻的元素,例如男主与克劳斯的相遇,最后克劳斯的消失都带有魔幻色彩。总之整体上是一个老少咸宜的作品。
40 |
41 | ![url-local-poster][url-local-poster]
42 |
43 |
44 |
45 |
46 | [url-local-poster]:../images/56/poster.png
--------------------------------------------------------------------------------
/draft/57.textarea.64.md:
--------------------------------------------------------------------------------
1 | # 56.textarea
2 |
3 | ## 目录
4 | - [引子](#start)
5 |
6 | ## 引子
7 | textarea 中的换行格式,在其它地方显示时,需要保持其原有的换行格式。
8 |
9 | ## 换行
10 | textarea 元素支持多行纯文本编辑。由于历史原因,元素的值有三种不同的形式:
11 | - row value 是其原始设置的值,它没有被标准化。
12 | - API value 是 value 接口定义中使用的值。它是标准化的,因此换行符使用 `“LF”(U+000A)` 字符。
13 | - 表单提交的 value。它是标准化的,因此换行符使用 `U+000D CARRIAGE RETURN "CRLF" (U+000A)` 字符对。
14 |
15 | 关于换行符,见[回车和换行][url-segment-56]。
16 |
17 | 要按照输入时格式显示,方法有:
18 | ### 使用 pre 标签
19 | `` 元素表示预定义格式文本。在该元素中的文本通常按照原样的编排,以等宽字体的形式展现出来,文本中的空白符(比如空格和换行符)都会显示出来。
20 |
21 | ### 替换换行符
22 | 将换行符替换成 `br` 标签,以 `innerHTML` 的方式显示在元素中。
23 |
24 | ```js
25 | // windows 下换行是 \r\n, linux 下是 \n, mac 下是 \r
26 | str = str.replace(/[\r\n]/g, '
');
27 | ```
28 |
29 | 这是以上方法的[示例][url-lab-textarea],移动端访问如下:
30 |
31 | ![57-qrcode][url-local-qrcode]
32 |
33 | ## 参考资料
34 | - [textarea][url-w3c-textarea]
35 |
36 | [url-base]:https://xxholic.github.io/segment
37 | [url-lab-textarea]:https://xxholic.github.io/lab/lab-js/segment-57/57.index.html
38 |
39 | [url-w3c-textarea]:https://www.w3.org/TR/html50/forms.html#the-textarea-element
40 | [url-segment-56]:https://github.com/XXHolic/segment/issues/63
41 |
42 | [url-local-qrcode]:../images/57/qrcode.png
43 |
44 |
45 |
46 | :wastebasket:
47 |
48 | 纯属瞎扯,如有雷同,纯属巧合。
49 |
50 | 最近无意间听到关于地毯作用的另一种解释。在现在日常生活中,地毯有储尘和装饰的作用。但很早之前,据说使用地毯是为了保护大地,担心人的脚步或动作会伤害到大地。这个想法很自然与人。
51 |
52 |
53 |
--------------------------------------------------------------------------------
/draft/64.图像.73.md:
--------------------------------------------------------------------------------
1 | # 64.图像.73
2 | ## 引子
3 | 碰到图像(image)相关的问题,查找了一些资料。
4 |
5 | ## 图像
6 | 图像是一种描述视觉感知的人工制品,例如照片或其它二维的照片。在信号处理领域里面,图像是颜色的分布幅度。在计算机中,图像用像素表示,像素值描述了像素的亮度或者该是什么颜色,最常见的像素格式是字节图像,其中数字是 8 位二进制表示的整数,范围是0~255,通常 0 表示黑色,255 表示白色,介于两者之间的值构成不同的灰度。
7 |
8 | ## 图像类型
9 | ### Binary Image
10 | 二值图像(Binary Image)的像素只有两个可能值。像素值是一位数字。它们通常表现为黑色和白色。用数字表示,黑色通常用 0 表示,1 或者 255 表示白色。
11 |
12 | ### Color Image
13 | 彩色图像(Color Image)的像素融合了三原色,用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色,符合人类眼睛的颜色感受器。
14 |
15 | ### Grayscale Image
16 | 灰度图像(Grayscale Image)的像素值只有一种颜色,该颜色是 0~255 之间的一种。在彩色图像中,转换位灰度图像的方法有:
17 | ```js
18 | Gray = 0.21*R + 0.72*G + 0.07*B // Luminosity
19 | Gray = (R + G + B) / 3 // Average Brightness
20 | Gray = 0.299*R + 0.587*G + 0.114*B // rec601 standard
21 | Gray = 0.2126*R + 0.7152*G + 0.0722*B // ITU-R BT.709 standard
22 | Gray = 0.2627*R + 0.6780*G + 0.0593*B // ITU-R BT.2100 standard
23 | ```
24 |
25 | ## 参考资料
26 | - [Images introduction][url-article-2]
27 | - [image wiki][url-wiki-2]
28 | - [Types of Images][url-article-1]
29 | - [Image Processing Concepts][url-list-1]
30 | - [Digital image wiki][url-wiki-1]
31 | - [Grayscale wiki][url-wiki-3]
32 | - [What's the difference between a picture and an image?][url-stackexchange-1]
33 |
34 |
35 | [url-base]:https://xxholic.github.io/segment
36 |
37 | [url-article-1]:https://www.tutorialspoint.com/dip/Types_of_Images.htm
38 | [url-article-2]:https://www.tutorialspoint.com/dip/image_processing_introduction.htm
39 | [url-wiki-1]:https://en.wikipedia.org/wiki/Digital_image
40 | [url-wiki-2]:https://en.wikipedia.org/wiki/Image
41 | [url-wiki-3]:https://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
42 | [url-list-1]:https://homepages.inf.ed.ac.uk/rbf/HIPR2/glossary.htm
43 | [url-stackexchange-1]:https://english.stackexchange.com/questions/23716/whats-the-difference-between-a-picture-and-an-image
44 |
45 |
46 |
47 |
48 |
49 |
50 | :wastebasket:
51 |
52 | 突然想到这个一直想过平静日子的人,对了,还有他的女友美丽的手!
53 |
54 | ![64-poster][url-local-poster]
55 |
56 |
57 |
58 | [url-local-poster]:../images/64/poster.png
59 |
--------------------------------------------------------------------------------
/draft/65.Canvas 图像灰度处理.74.md:
--------------------------------------------------------------------------------
1 | # 65.Canvas 图像灰度处理.74
2 | ## 引子
3 | 在玩游戏的时候,碰到一个交互效果:背景一张看起来黑白的图,然后用擦除的交互,让图像变的有颜色。也想试试做这个效果,首先想到的是那个黑白的图是怎么形成的,于是就查资料,找到了用 Canvas 转换的方法。
4 |
5 | ## 思路
6 | 看起来是黑白的图像,其实是灰度图像,进一步说明见[图像][url-segment-73]。这种图像的特点是像素的颜色分量取值都是一样的,而 Canvas 的方法 [getImageData][url-mdn-getImageData] 可以获取到画布上的像素值数据,改变数据后,使用方法 [putImageData][url-mdn-putImageData] 将数据绘制到画布上。这样就可以达到灰度图像的效果。
7 |
8 | ## 实现
9 | 这是[示例页面][url-lab-65-index],移动端访问如下:
10 |
11 | ![65-gray][url-local-gray]
12 |
13 | 主要实现如下:
14 | ```js
15 | /**
16 | * 图像灰度处理
17 | * @param {object} context canvas 上下文
18 | * @param {number} sx 提取图像数据矩形区域的左上角 x 坐标。
19 | * @param {number} sy 提取图像数据矩形区域的左上角 y 坐标。
20 | * @param {number} sw 提取图像数据矩形区域的宽度。这要注意一下,canvas 标签上 width 属性值,不是渲染后实际宽度值,否则在高清手机屏幕下且做了高清处理,只能获取到部分图像宽度。
21 | * @param {number} sh 提取图像数据矩形区域的高度。这要注意一下,canvas 标签上 height 属性值,不是渲染后实际高度值,否则在高清手机屏幕下且做了高清处理,只能获取到部分图像高度。
22 | */
23 | function toGray(context,sx, sy, sw, sh) {
24 | var imageData = context.getImageData(sx, sy, sw, sh);
25 | var colorDataArr = imageData.data;
26 | var colorDataArrLen = colorDataArr.length;
27 | for(var i = 0; i < colorDataArrLen; i+=4) {
28 | // 计算方式之一
29 | var gray=(colorDataArr[i]+colorDataArr[i+1]+colorDataArr[i+2])/3;
30 | colorDataArr[i] = gray;
31 | colorDataArr[i+1] = gray;
32 | colorDataArr[i+2] = gray;
33 | }
34 | context.putImageData(imageData,0,0);
35 | }
36 | ```
37 |
38 | ## 参考资料
39 | - [How do you convert a color image to black/white using Javascript?][url-stackoverflow-1]
40 | - [Canvas MDN][url-mdn-canvas]
41 | - [getImageData MDN][url-mdn-getImageData]
42 | - [putImageData MDN][url-mdn-putImageData]
43 |
44 |
45 |
46 | [url-base]:https://xxholic.github.io/segment
47 |
48 | [url-stackoverflow-1]:https://stackoverflow.com/questions/562135/how-do-you-convert-a-color-image-to-black-white-using-javascript
49 | [url-mdn-canvas]:https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API
50 | [url-mdn-getImageData]:https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getImageData
51 | [url-mdn-putImageData]:https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData
52 |
53 | [url-segment-73]:https://github.com/XXHolic/segment/issues/73
54 | [url-lab-65-index]:https://xxholic.github.io/lab/segment/65/index.html
55 |
56 | [url-local-gray]:../images/65/qr-gray.png
57 |
58 |
59 |
60 | :wastebasket:
61 |
62 |
63 | 最近看了一部作品[《我失去了身体》][url-movie],整体的气氛有些压抑,但还是蛮好看的。从现实和超现实不同的线讲述故事,两者在似乎即将要交融的那一刻,最终还是提醒我们要面对现实。
64 |
65 | ![65-poster][url-local-poster]
66 |
67 |
68 |
69 | [url-movie]:https://movie.douban.com/subject/33415943/
70 | [url-local-poster]:../images/65/poster.png
71 |
--------------------------------------------------------------------------------
/draft/67.配置环境遇到的零碎点.77.md:
--------------------------------------------------------------------------------
1 | # 67.配置环境零碎点.77
2 | ## 目录
3 | - [引子](#start)
4 | - [Nginx](#nginx)
5 | - [Php](#php)
6 | - [MySQL](#mysql)
7 | - [Docker](#docker)
8 | - [参考资料](#reference)
9 |
10 |
11 | ## 引子
12 | 配置环境碰到的一些点。
13 |
14 | ## Nginx
15 | ### 413 Request Entity Too Large
16 | 上传数据太大时,会出现这个问题,在配置文件 `nginx.conf` 中可以尝试加入下面的配置:
17 | ```nginx
18 | http {
19 | client_max_body_size 20m;
20 | }
21 | ```
22 | ### 504 Gateway Time-out
23 | 在配置文件 `nginx.conf` 中可以尝试加入下面的配置,时间自定,单位是秒:
24 | ```nginx
25 | http {
26 | keepalive_timeout 300;
27 | fastcgi_connect_timeout 300;
28 | fastcgi_send_timeout 300;
29 | fastcgi_read_timeout 300;
30 | }
31 | ```
32 |
33 | ## Php
34 | Php 有不少的集成环境,使用集成环境可以节省时间。有两个默认配置文件 `php.ini` 和 `php-fpm` 。
35 | ### sql 执行超时
36 | 可以尝试在 `php.ini` 中加入下面的配置。
37 | ```
38 | max_execution_time = 1800
39 | ```
40 |
41 | ## MySQL
42 | ### GUI MySQL Workbench
43 | - 默认配置下,同时执行多条 SQL 语句会报错:`"CREATE" is not valid at this position, expecting: EOF, ";"` ,分开执行就可以了。
44 |
45 | ## Docker
46 | ### 安装
47 | 安装的时候要注意分清是否有客户端,不清楚相关指令的时候,用客户端更加便捷一些。
48 |
49 | 在 Mac 的 Homebrew 中搜索会发现有两个结果,如下图:
50 |
51 | ![67-search][url-local-search]
52 |
53 | 使用下面指令查看详细信息:
54 | ```
55 | brew info docker
56 | brew cask info docker
57 | ```
58 |
59 | ### 设置镜像
60 | 国内云厂商大都会提供镜像仓库,注册一个进入找到相关地址。然后在 docker 的 `Preferences` 中找到下图添加地址。
61 |
62 | ![67-register][url-local-register]
63 |
64 | ### 命令
65 | - docker info : 查看 docker 容器信息。
66 | - docker ps : 查看正在运行的容器。
67 |
68 | ### compose
69 | compose 是用来定义和运行多容器 Docker 应用的工具。可以使用一个文件配置应用所有的服务,之后,使用一个指令,就可以基于配置,创建和启动所有的服务。
70 | - docker-compose build : 构建应用的服务容器。
71 | - docker-compose down : 停止并删除由其创建的容器。
72 | - docker-compose up : 创建并启动容器。
73 | - docker-compose restart : 重启容器,如果加上对应的服务,可以指定重启相应的服务。
74 |
75 | 加参数 `-d` 表示一守护进程模式运行,也就是独立于控制终端运行。
76 |
77 |
78 |
79 |
80 |
81 | ## 参考资料
82 | - [Nginx Docs][url-docs-1]
83 | - [Php][url-website-1]
84 | - [MySQL][url-website-3]
85 | - [Docker][url-website-2]
86 | - [Homebrew 安装 Docker Desktop for Mac][url-aiticle-1]
87 |
88 |
89 | [url-base]:https://xxholic.github.io/segment
90 |
91 | [url-docs-1]:http://nginx.org/en/docs/
92 | [url-website-1]:https://www.php.net
93 | [url-website-2]:https://www.docker.com
94 | [url-website-3]:https://www.mysql.com
95 |
96 | [url-aiticle-1]:https://www.cnblogs.com/larva-zhh/p/11399229.html
97 |
98 | [url-local-search]:../images/67/search.png
99 | [url-local-register]:../images/67/register.png
100 |
101 |
102 |
103 | :wastebasket:
104 |
105 | 最近看了[《海兽之子》][url-zp],里面想表达的东西感觉很深,一言两语说不清。高潮时候的画面转变,看起来很炫丽流畅。看完之后,听片尾曲也感觉很契合动画内容。
106 |
107 | ![66-poster][url-local-poster]
108 |
109 |
110 |
111 | [url-zp]:https://movie.douban.com/subject/30274965/
112 | [url-local-poster]:../images/67/poster.png
--------------------------------------------------------------------------------
/draft/7.安装 node-sass 遇到的问题.9.md:
--------------------------------------------------------------------------------
1 | # 7.安装 node-sass 遇到的问题
2 | ## 场景
3 | 项目中写 css 使用的是 sass,Windows 下经常会出现 node-sass 安装报错。
4 | ## 问题和解决方法
5 | ### 问题1:网络问题
6 | 如果用 npm 直接安装的话,由于国内的环境,可能会安装失败,解决方法:
7 |
8 | 使用 cnpm 安装,cnpm 安装包时默认从淘宝镜像下载。
9 | ### 问题1:Python 版本不对
10 | 解决方法:
11 |
12 | 根据提示安装 Python 对应版本。
13 | ### 问题3:未能加载 Visual C++ 组件
14 | 解决方法:
15 |
16 | 使用 [windows-build-tools](https://github.com/felixrieseberg/windows-build-tools),用管理员权限运行 PowerShell,执行以下指令:
17 | ```
18 | npm install --global --production windows-build-tools
19 | ```
20 | 
21 |
22 | 再重新安装 node-sass。
23 |
24 | ### 问题4:Node Sass could not find a binding for your current environment
25 |
26 | 
27 |
28 | 解决方法:
29 |
30 | 报错的信息很多,信息里面会有一个提示:
31 | > Run 'npm rebuild node-sass --force' to build the binding for your current enviroment.
32 |
33 | 按照提示执行指令即可。
34 |
35 | ## 参考
36 | - https://blog.csdn.net/ty_0930/article/details/70184392
37 | - https://segmentfault.com/a/1190000010984731
--------------------------------------------------------------------------------
/draft/72.自定义 create-react-app.82.md:
--------------------------------------------------------------------------------
1 | # 72.自定义 create-react-app.82
2 |
3 | ## 引子
4 | 使用 [create-react-app][url-github-1] 的时候,如果想要更改一些配置,一种方式是使用 `eject` 指令,但这样可能就无法同步后续的更新。另外一种方式是使用 [react-app-rewired][url-github-2] 覆盖对应的配置,这种方式有些依然无法设置。更好的方式是直接基于原构建脚本进行自定义修改,又方便同步后续更新。
5 |
6 |
7 | ## 简介
8 | [create-react-app][url-github-1] 里面包含了多个不同的库,使用了 [Lerna][url-github-3] 进行管理。构建的相关脚本主要在 [react-scripts][url-github-4] 中。通过 **Fork** 的方式发布自己的版本,也可以同步官方的版本。
9 |
10 | ## 操作
11 | ### 1 Fork
12 | 登录 GitHub 的账号,Fork [create-react-app][url-github-1] 。更加详细的说明见 [Fork a repo][url-docs-1] 。
13 |
14 | ![72-fork][url-local-1]
15 |
16 | ### 2 修改对应库
17 | Fork 后,克隆对应的库到本地。在修改之前,建议基于发布的分支,创建一个自己的修改分支。下面作为示例,在 `/packages/react-scripts/scripts/init.js` 中添加一些打印日志。
18 |
19 | ![72-modify][url-local-2]
20 |
21 | ### 3 发布包
22 | 由于是 Fork 过来的包,里面的 **package.json** 的一些描述信息需要修改。至少里面的 `name` 字段值需要更改一下,示例的名称改为 **customize-react-scripts** 。其它描述信息,根据实际情况判断是否需要进行修改。
23 | ```
24 | npm login
25 | npm publish
26 | ```
27 | 发布包详细说明见 [这里][url-docs-2] 。
28 |
29 | ### 4 使用自定义包
30 | 发布成功后,到一个目录下,执行下面的命令:
31 | ```shell
32 | npx create-react-app test-app --scripts-version customize-react-scripts
33 | ```
34 | 可看到下面的信息提示。
35 |
36 | ![72-start][url-local-3]
37 |
38 | 安装成功后,可以看到前面添加的提示信息。
39 |
40 | ![72-success][url-local-4]
41 |
42 |
43 | ## 其它
44 | 根据上面的操作,还可以做类似的修改,执行下面的命令,可以看到一些帮助说明:
45 | ```shell
46 | npx create-react-app -h
47 | ```
48 | ![72-help][url-local-5]
49 |
50 | ## 参考资料
51 | - [Alternatives to Ejecting][url-docs-3]
52 | - [Customizing create-react-app: How to Make Your Own Template][url-aiticle-1]
53 |
54 |
55 | [url-base]:https://xxholic.github.io/segment
56 |
57 | [url-aiticle-1]:https://auth0.com/blog/how-to-configure-create-react-app/
58 | [url-github-1]:https://github.com/facebook/create-react-app
59 | [url-github-2]:https://github.com/timarney/react-app-rewired
60 | [url-github-3]:https://github.com/lerna/lerna
61 | [url-github-4]:https://github.com/facebook/create-react-app/tree/master/packages/react-scripts
62 | [url-docs-1]:https://help.github.com/en/github/getting-started-with-github/fork-a-repo#keep-your-fork-synced
63 | [url-docs-2]:https://docs.npmjs.com/creating-and-publishing-unscoped-public-packages
64 | [url-docs-3]:https://create-react-app.dev/docs/alternatives-to-ejecting
65 |
66 | [url-local-1]:../images/72/fork.png
67 | [url-local-2]:../images/72/modify.png
68 | [url-local-3]:../images/72/start.png
69 | [url-local-4]:../images/72/success.png
70 | [url-local-5]:../images/72/help.png
71 |
72 |
73 | :wastebasket:
74 |
75 | 最近玩了一个小游戏[《月圆之夜》][url-game-1],里面对小红帽故事的改写蛮有意思的。每个调查的 boss 都有不同角度的改写。
76 |
77 | ![72-poster][url-local-poster]
78 |
79 |
80 |
81 | [url-game-1]:http://www.yueyuanzhiye.com
82 | [url-local-poster]:../images/72/poster.jpg
83 |
--------------------------------------------------------------------------------
/draft/73.Hoisting.84.md:
--------------------------------------------------------------------------------
1 | # 73.Hoisting.84
2 | ## 引子
3 | 关于 JavaScript 提升(**Hoisting**),一般在实际使用的过程中,只要遵循了“先声明,后使用”的约定,很少会碰到问题。但浏览器引擎中肯定考虑各种情况,经历了这些问题,吃一堑长一智,还是总结一下。
4 |
5 | ## 提升
6 | 先看下面打印的是什么。
7 | ```javascript
8 | console.info(a);
9 | a = 1;
10 | var a;
11 | console.info(a);
12 | ```
13 | 学过 JavaScript 基础就会知道 `var` 声明会先提升,第一个会打印 `undefined` ,按顺序执行后, `a` 被赋值,第二个打印是 1 。基于这样的解释,个人产生的疑惑会有:
14 | - 为什么会提升?
15 | - 这个“提升”是指声明代码都提升到最上面了吗?
16 |
17 | 带着这些疑问,去查找资料,从中了解到下面这些内容。
18 |
19 | JavaScript 代码在执行前都要进行编译,大部分情况下编译发生在代码执行前的几微秒(甚至更短)的时间内。编译通常会经历三个步骤:
20 | - 分词/词法分析(Tokenizing/Lexing) :这个过程会将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为**词法单元**(token)。
21 | - 解析/语法分析(Parsing) :这个过程是将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树。这个树被称为**抽象语法树**(Abstract Syntax Tree,AST)。
22 | - 代码生成 : 将 AST 转换为可执行代码的过程称被称为**代码生成**。这个过程与语言、目标平台等息息相关。
23 |
24 | JavaScript 引擎相对上面步骤要复杂得多,例如,在**语法分析**和**代码生成**阶段有特定的步骤来对运行性能进行优化,包括对冗余元素进行优化等。
25 |
26 | 编译的词法分析阶段基本能够知道全部(注意 eval 和 with)标识符在哪里以及是如何声明的,从而能够预测在执行过程中如何对它们进行查找。也就是说,变量和函数在内的所有声明会在代码执行前先被处理。因此实际上声明的代码的位置是不会变动的,而是在编译阶段被放入内存中。
27 |
28 | ## 提升优先级
29 | 通过上面的了解,我们知道变量和函数声明都会提升,变量名和函数名是一样的时候会如何?
30 | ```javascript
31 | // 先变量声明,后函数声明
32 | console.info(b);
33 | var b = 1;
34 | function b() {
35 | console.info(2);
36 | }
37 |
38 | // 先函数声明,后变量声明
39 | console.info(c);
40 | function c() {
41 | console.info(3);
42 | }
43 | var c = 4;
44 | ```
45 | 通过上面的例子可以发现:**函数声明比变量声明优先提升**。
46 |
47 | ## 函数声明和函数表达式
48 | 函数声明语法如下:
49 |
50 | > function name([param[, param[, ... param]]]) { statements }
51 |
52 | 函数声明的 `name` 必须要有。
53 |
54 | 函数表达式和函数声明非常相似,它们有相同的语法。
55 |
56 | > var myFunction = function name([param[, param[, ... param]]]) { statements }
57 |
58 | 函数表达式的 `name` 非必需,写上 `name` 可以在调用堆栈时使用,当省去 `name` 时,就成了匿名函数。
59 |
60 | 函数表达式不会提升,所以不能在定义之前调用。
61 |
62 |
63 |
64 | ## 参考资料
65 | - [Hoisting MDN][url-aiticle-1]
66 | - [You-Don't-Know-JS Hoisting][url-aiticle-2]
67 | - [JavaScript 'hoisting' [duplicate]][url-stack-1]
68 | - [Javascript function scoping and hoisting][url-stack-2]
69 |
70 |
71 | [url-base]:https://xxholic.github.io/segment
72 |
73 | [url-aiticle-1]:https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
74 | [url-aiticle-2]:https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/scope%20&%20closures/ch4.md
75 | [url-stack-1]:https://stackoverflow.com/questions/15311158/javascript-hoisting
76 | [url-stack-2]:https://stackoverflow.com/questions/7506844/javascript-function-scoping-and-hoisting
77 |
78 | [url-local-test]:https://xxholic.github.io/segment
79 |
80 |
81 | :wastebasket:
82 |
83 | 看的出来是哪个奥特曼么?
84 |
85 | ![73-poster][url-local-poster]
86 |
87 |
88 |
89 | [url-local-poster]:../images/73/poster.jpg
90 |
--------------------------------------------------------------------------------
/draft/74.正则多次匹配无效的问题.85.md:
--------------------------------------------------------------------------------
1 | # 74.正则多次匹配无效的问题.85
2 | ## 引子
3 | 检测一批手机号码是否都符合要求的格式,循环用正则校验,发现无效。去查找了下资料,发现了之前没有注意到地方。
4 |
5 | ## 问题
6 | 下面是问题重现:
7 | ```js
8 | const arr=['18311112222','18344445555','2857898098']
9 | const reg = /^1[3-9]\d{9}$/g;
10 | const result = arr.find(ele => !reg.test(ele));
11 | console.info({result});
12 |
13 | // {result: "18344445555"}
14 | ```
15 | 按照上面的正则,第二个号码符合要求,却返回了 `false` ,去查了[资料][url-mdn-2],发现:
16 | > 如果正则表达式设置了全局标志 `g` ,`test()` 的执行会改变正则表达式 `lastIndex` 属性。连续的执行 `test()` 方法,后续的执行将会从 `lastIndex` 处开始匹配字符串。
17 |
18 | 验证一下:
19 | ```js
20 | const arr=['18311112222','18344445555','2857898098']
21 | const reg = /^1[3-9]\d{9}$/g;
22 | const result = arr.find(ele => {
23 | const lastIndex = reg.lastIndex;
24 | console.info({lastIndex});
25 | return !reg.test(ele);
26 | });
27 |
28 | // {lastIndex: 0}
29 | // {lastIndex: 11}
30 | ```
31 |
32 | ## 解决方法
33 | ### 方法 1
34 | 去掉全局标志 `g` ,再想一想这个场景下没有必要使用全局匹配。
35 |
36 | ### 方法 2
37 | 使用 [String.prototype.search()][url-mdn-3] 。
38 | ```js
39 | const arr=['18311112222','18344445555','2857898098']
40 | const reg = /^1[3-9]\d{9}$/g;
41 | const result = arr.find(ele => ele.search(reg) === -1);
42 | ```
43 |
44 | ### 方法 3
45 | 每次循环匹配的时候,重新声明一个正则。
46 | ```js
47 | const arr=['18311112222','18344445555','2857898098']
48 | const result = arr.find(ele => {
49 | const reg = /^1[3-9]\d{9}$/g;
50 | return !reg.test(ele);
51 | });
52 | ```
53 |
54 |
55 | ## 参考资料
56 | - [MDN Regular Expressions][url-mdn-1]
57 | - [MDN RegExp.prototype.test()][url-mdn-2]
58 | - [正则表达式](https://github.com/XXHolic/blog/issues/28)
59 |
60 |
61 | [url-mdn-1]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
62 | [url-mdn-2]:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
63 | [url-mdn-3]:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/search
64 |
65 |
66 |
67 | :wastebasket:
68 |
69 | 最近脑海里面一直浮现“[乐园追放][url-movie]”这个词,就去搜了一下,一看封面好像是机甲类的作品,就感觉没什么兴趣。但为了解决一下心中的疑惑,就去看了一下。
70 |
71 | 结果发现虽然有机甲,但机甲最精彩的打斗在最后出现,整体也不多。讲的故事大都对虚拟世界、AI、人类三方面进行不同角度的探讨,个人感觉还是蛮有意思。
72 |
73 | ![74-poster][url-local-poster]
74 |
75 |
76 |
77 | [url-movie]:https://movie.douban.com/subject/10558440/
78 | [url-local-poster]:../images/74/poster.png
--------------------------------------------------------------------------------
/draft/75.Canvas 绘制 1 px 直线模糊(非高清屏)的问题.86.md:
--------------------------------------------------------------------------------
1 | # 75.Canvas 绘制 1 px 直线模糊(非高清屏)的问题.86
2 | ## 引子
3 | 在 [Canvas 显示模糊问题][url-blog-20] 中解决了在高清显示屏上模糊的问题,最近碰到了绘制直线的情况,使用了同样的方案,一开始觉得影响不大,但时间长了,发现非高清屏幕上,直线模糊的感觉越来越明显,就去找了下资料,进行了处理。
4 |
5 | ## 问题
6 | 这是问题重现[页面][url-lab-1]。
7 |
8 | 在网上同样可以找同样的[问题][url-stackoverflow-1],从各种回答中,在 [LET’S CALL IT A DRAW(ING SURFACE)][url-aiticle-1] 中找到较有说服力的解释:
9 |
10 | > 把每一个像素想象为一个正方形。整数坐标(0,1,2…)是正方形的边。如果你在整数坐标之间绘制 1 像素的线,它将与相邻像素块的边重叠,生成的线将绘制两个像素宽度。
11 |
12 | > 例如,如果你尝试绘制从点(1,0)到(1,3)的 1 像素线,浏览器将会在 x=1 坐标点的两边绘制 0.5 屏幕像素。由于屏幕不能显示半个像素,它将线扩展到包含 2 个像素。
13 |
14 | ![75-pixels-1][url-local-1]
15 |
16 | ## 处理方法
17 | 按照上面举例的解释,对应的处理方式是:
18 |
19 | > 如果你尝试从点(1.5,0)到(1.5,3)绘制 1 像素的线,浏览器将会在 x=1.5 坐标点的两边绘制 0.5 屏幕像素,结果就是 1 像素的线了。
20 |
21 | ![75-pixels-2][url-local-2]
22 |
23 | 也就是说为了绘制只有 1 像素的线,你需要将坐标垂直于线的方向偏移 0.5 。这是按照这种方式处理后的[页面][url-lab-2]。
24 |
25 | 下面在非高清屏上展示对比:
26 |
27 | ![75-compare][url-local-3]
28 |
29 |
30 | 除了上面有些效果的方法外,尝试过但无效的方法有:
31 | - 使用 context.translate(0.5, 0.5)
32 | - 使用 scale
33 |
34 |
35 |
36 | ## 参考资料
37 | - [Canvas drawings, like lines, are blurry][url-stackoverflow-1]
38 | - [LET’S CALL IT A DRAW(ING SURFACE)][url-aiticle-1]
39 | - [Window.devicePixelRatio MDN][url-mdn-1]
40 |
41 |
42 | [url-base]:https://xxholic.github.io/segment
43 |
44 | [url-stackoverflow-1]:https://stackoverflow.com/questions/8696631/canvas-drawings-like-lines-are-blurry
45 | [url-mdn-1]:https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio
46 | [url-aiticle-1]:http://diveintohtml5.info/canvas.html
47 |
48 | [url-blog-20]:https://github.com/XXHolic/segment/issues/20
49 |
50 | [url-lab-1]:https://xxholic.github.io/lab/segment/75/problem.html
51 | [url-lab-2]:https://xxholic.github.io/lab/segment/75/deal-shift.html
52 |
53 | [url-local-1]:../images/75/canvas-half-pixels-1.jpg
54 | [url-local-2]:../images/75/canvas-half-pixels-2.jpg
55 | [url-local-3]:../images/75/compare.png
56 |
57 |
58 | :wastebasket:
59 |
60 | 发现一部新的作品 [《想哭的我戴上了猫的面具》][url-movie],有一种面具,可以让人转换成猫,对应的,也有面具让猫转换成人。青少年爱情加上奇幻的猫世界,故事设定还是蛮有意思的。
61 |
62 | ![75-poster][url-local-poster]
63 |
64 |
65 |
66 | [url-movie]:https://movie.douban.com/subject/34964061/
67 | [url-local-poster]:../images/75/poster.png
68 |
69 |
70 |
--------------------------------------------------------------------------------
/draft/79.本地包调试 :npm link.91.md:
--------------------------------------------------------------------------------
1 | # 79.本地包调试 :npm link.90
2 | ## 引子
3 | 再次碰到调试 npm 本地包的情况,一时想不起来,看了下文档,实际操作了一下,发现了一些文档上没明写的东西。
4 |
5 | ## 介绍
6 | 根据文档介绍,包的链接分为两步。
7 |
8 | ### 第一步
9 | 在一个包文件夹内执行 `npm link` 将在全局文件 **{prefix}/lib/node_modules/** 内,创建一个符号链接(symlink),这个链接指向 `npm link` 命令执行的地方。
10 |
11 | ### 第二步
12 | 到其它目录下,执行 `npm link packageName` 命令,将会创建一个从全局安装的 **packageName** 到当前文件内的 **node_modules** 下的符号链接。
13 |
14 | 需要注意的的是, **packageName** 是取自包的 **package.json** 中 **name** 字段,不是文件夹名称。
15 |
16 | 包的名称可能有作用域前缀,如果有, **packageName** 也要对应加上。
17 |
18 | ## 实践
19 | 基于文档,结合实际的操作,对照看下产生的效果。
20 | ### 运行环境
21 | - 项目是基于 webpack 简单配置,本地运行的 server 。
22 | - node 使用 nvm 管理的。
23 | - 项目已引用了包,需在基础上进行修改调试。
24 | - 系统是 macOS 。
25 |
26 | ### 操作
27 | 首先在包根目录下面执行 `npm link` 命令,出现下面的提示:
28 |
29 | ![79-link][url-local-1]
30 |
31 | 到对应的目录下,发现生成了提示中所说的文件,就是文档中所说**符号链接**(symlink):
32 |
33 | ![79-result][url-local-2]
34 |
35 | 试着改了一下本地的源文件,发现全局包里面对应的文件内容也跟着变化。
36 |
37 | 然后到项目中执行 `npm link packageName` 指令,出现了下面的提示:
38 |
39 | ![79-link-package][url-local-3]
40 |
41 | 到 node_modules 下发现对应的依赖包已经发生了变化:
42 |
43 | ![79-link-module][url-local-4]
44 |
45 | 这里的包跟全局那个生成的包是一样的,包更新了,本地看没什么效果,原因是本地的 sever 有缓存,需要重新启动一下。注意这个文件夹图标多了一个箭头的标记,未 `link` 之前没有这个。
46 |
47 | 重启服务后,到源库修改源码,发现项目 **node_modules** 下同步了修改的内容,webpack 也检测到变化,自动刷新。
48 |
49 | 修改好后,想要恢复到原本的包,解除 link 该怎么做?很奇怪,在 npm 官方文档上没找到说明。
50 |
51 |
52 |
53 | ### 解除 link
54 | 到项目下执行下面的命令:
55 | ```
56 | npm unlink --no-save package && npm install
57 | ```
58 | [npm uninstall][url-docs-2] 文档中可以发现,`unlink` 其实是 `uninstall` 的别名,实质上也是删除了包。
59 |
60 | 包不需要的 link 的时候,建议也解除,到包目录下执行下面的命令:
61 | ```
62 | npm unlink
63 | ```
64 |
65 |
66 |
67 |
68 |
69 | ## 参考资料
70 | - [npm-link][url-docs-1]
71 | - [Understanding npm-link][url-article-1]
72 | - [NPM Linking and Unlinking][url-article-2]
73 |
74 |
75 | [url-docs-1]:https://docs.npmjs.com/cli-commands/link.html
76 | [url-docs-2]:https://docs.npmjs.com/cli-commands/uninstall.html
77 | [url-article-1]:https://medium.com/dailyjs/how-to-use-npm-link-7375b6219557
78 | [url-article-2]:https://dev.to/erinbush/npm-linking-and-unlinking-2h1g
79 |
80 | [url-local-1]:../images/79/npm-link.png
81 | [url-local-2]:../images/79/link-result.png
82 | [url-local-3]:../images/79/link-package.png
83 | [url-local-4]:../images/79/link-module.png
84 |
85 |
86 | :wastebasket:
87 |
88 | 最近听了杨照主讲《史记》音频,对秦始皇的**坑儒**有了不一样的认知。
89 |
90 | 在《史记》里面,秦始皇想长生不死,养了很多方式,有一天有 2 个方式议论后,觉得不能继续呆在秦始皇身边了,就跑路了。秦始皇知道后很生气,就调查哪些方式弄虚作假,一下子牵连出了 460 人,都坑杀了,并昭告天下。**坑儒**就是指的这个事情。
91 |
92 | 上面只是大概说了一下,详细的可以去听听。
93 |
94 |
95 |
--------------------------------------------------------------------------------
/draft/8.box-shadow设置后看不到的问题.10.md:
--------------------------------------------------------------------------------
1 | # 8.box-shadow 设置后看不到的问题
2 | ## 引子
3 | 在修复问题的时候,发现一个元素设置了 `box-shadow` 属性,其它的元素也有公用,但这个元素的阴影看不见,试着把颜色值变的更明显,但还是看不到。问题[示例][url-1],示例二维码。
4 |
5 | ![qrcode-question][url-local-1]
6 |
7 | ## 问题原因
8 | 首先想到是不是属性写错了,但其它的元素都正常显示,这个是公用的样式。那么是不是有样式覆盖呢?在浏览器中仔细看了下,样式是有覆盖,但没有覆盖 `box-shadow` 属性。于是就仔细的跟正常显示的元素进行对比,发现有一点不同:一个元素的父元素可以滚动,另外一个元素的父元素不可以滚动。于是尝试把设置 `overflow-y` 属性去掉,然后就好了!
9 |
10 | 虽然解决了问题,但想要明白其中的一些缘由,于是查找相关资料,发现了一些说明,感觉有用,下面是部分内容的翻译。
11 |
12 | >外阴影投射阴影时,元素的边框盒子好像是不透明的,假定扩散的距离是 0,它的边界有着跟边框盒子一样的大小和形状。阴影从边框外边界绘制,阴影在元素盒子边框内侧被剪切。
13 |
14 | >内阴影投射阴影时,内边距边界之外的一切好像都是透明的,假定扩散的距离是 0,它的边界有着跟内边距盒子一样的大小和形状。阴影从内边距边界内侧绘制,阴影在元素内边距盒子之外被剪切。
15 |
16 | >阴影效果从前到后应用:第一个阴影在最顶层,其它的在这个阴影的下层。阴影不会影响布局,可能会与其它盒子重叠或者跟他们自己的阴影重叠。从内容堆叠和绘制顺序来说,一个元素外阴影,会立即在元素背景之下绘制,内阴影会立即在元素的背景之上绘制,如果有边框的话,内阴影也会在边框和边框背景图片之下。
17 |
18 | 根据以上的内容,结合遇到的问题,就得出了一个想法:既然阴影的绘制不会影响布局,那么是不是说阴影并不会占据实际的空间。测试[示例][url-2],示例二维码。
19 |
20 | ![qrcode-space][url-local-2]
21 |
22 | 由此可见,阴影是不占据正常文档流里面的空间。
23 |
24 | 再回到问题上来,父元素设置了 `overflow` 属性,其值除了 `visible` 之外,当内容超过了内边距时都会被剪切掉。其子元素的高度、宽度和父元素一样,子元素设置 `box-shadow` 时,绘制的阴影从子元素的边框边界向外绘制,子元素边界跟父元素的边框边界相同,绘制出的阴影超出了父元素的内边距边界,被属性 `overflow` 的作用剪切掉了,就出现了看不见阴影的现象。
25 |
26 | ## 相关资料
27 | - [MDN overflow](https://developer.mozilla.org/en-US/docs/Web/CSS/overflow)
28 | - [overflow-clipping](https://www.w3.org/TR/CSS22/visufx.html#overflow-clipping)
29 | - [box-shadow](https://drafts.csswg.org/css-backgrounds-3/#box-shadow)
30 | - [Block formatting context](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context)
31 |
32 | [url-1]:https://xxholic.github.io/lab/lab-css/8.box-shadow
33 | [url-2]:https://xxholic.github.io/lab/lab-css/8.box-shadow-space.html
34 |
35 | [url-local-1]:../images/8/qrcode-question.png
36 | [url-local-2]:../images/8/qrcode-space.png
37 |
38 |
39 | :wastebasket:
40 |
41 | 掩面而泣
42 |
43 | ![8-poster][url-local-poster]
44 |
45 |
46 |
47 | [url-local-poster]:../images/8/poster.jpeg
--------------------------------------------------------------------------------
/draft/80.Lerna 实践记录.92.md:
--------------------------------------------------------------------------------
1 | # 80.Lerna 实践记录.92
2 | ## 引子
3 | 再次用到 Lerna ,有些东西忘记了,回头看之前翻译 [Lerna][url-segment-23] ,发现官方文档更新了。又花了点时间去补充更新,这次把一些经验记下来。
4 |
5 |
6 | ## lerna publish
7 | 以下的操作基本的前提状态:
8 | - Lerna 初始化正常。
9 | - 单个包中 `package.json` 基本配置都已设置。
10 | - npm 登录到了指定的 registry 。
11 | - 将 Learn 的相关命令配置到根目录的 `package.json` 中 **scripts** 字段。
12 |
13 |
14 | 执行前状态:
15 | - 自从上一次正常发布之后,只修改了一个库,且有新的 commit 产生。
16 | - 没有手动修改版本号。
17 |
18 | 执行后状态:
19 |
20 |
21 | 图示
22 |
23 | ![80-publish-default][url-local-1]
24 |
25 |
26 |
27 | - 会检查每个包从上个版本之后,是否有更改,如果有,就会出现选择版本的提示。
28 | - 选择版本号后,再次会提示是否发版。
29 | - 确认发版后,会自动产生一个 commit 并 push 到远程。
30 |
31 | 尝试同时修改两个库,跟上述过程一样。
32 |
33 | ### 只发布单个包
34 | 使用上面的发布方式,如果多个人维护,可能会把别人未验证的修改发布了。
35 |
36 | 只发布单个包的需求在 Issues 里面早就有人提了,见 [issues1][url-issues-1]、[issues2][url-issues-2]。官方的回答是不支持的,也不考虑支持,并且提到:
37 | > 如果所有的包都是相互独立的,不想同时发布它们,那么就没有必要使用 lerna 。
38 |
39 | 所以如果想独立发包,那么就到单个包目录下,使用 `npm publish` 进行发布。那么就会出现一个疑问:单独发包 A 之后没有再变动,修改包 B 后再用 `lerna publish` 发包,A 会额外增加一个版本号吗?
40 |
41 | 尝试之后,发现会提示让你选个版本号:
42 |
43 | ![80-publish-process1][url-local-2]
44 |
45 | 图中 1.1.8 是单独使用 `npm publish` 发布的版本,使用 `lerna publish` 时还是认定没有发布过。但可以迂回的避免无意义的版本号增加,那就是图中所示选择 “Custom Version” ,然后输入相同的版本号,这样会提示包发布失败了,但实际上另外一个修改的包正常的发布了。
46 |
47 | ![80-publish-process2][url-local-3]
48 | ![80-publish-result][url-local-4]
49 |
50 | ### 不 push 到远程
51 | 有些时候不想 push 到远程,执行命令 `npm publish --no-push` 。
52 |
53 |
54 |
55 |
56 | ## 参考资料
57 | - [lerna][url-github-1]
58 |
59 |
60 | [url-github-1]:https://github.com/lerna/lerna
61 | [url-segment-23]:https://github.com/XXHolic/segment/issues/23
62 | [url-issues-1]:https://github.com/lerna/lerna/issues/1055
63 | [url-issues-2]:https://github.com/lerna/lerna/issues/1691
64 |
65 | [url-local-1]:../images/80/publish-1.png
66 | [url-local-2]:../images/80/publish-2.png
67 | [url-local-3]:../images/80/publish-3.png
68 | [url-local-4]:../images/80/publish-4.png
69 |
70 |
71 | :wastebasket:
72 |
73 | ![80-poster][url-local-poster]
74 |
75 |
76 |
77 | [url-book]:https://book.douban.com/subject/26916012/
78 | [url-local-poster]:../images/80/poster.jpeg
79 |
--------------------------------------------------------------------------------
/draft/81.CentOS 7 下 Git 超时.95.md:
--------------------------------------------------------------------------------
1 | # 81.CentOS 7 下 Git 超时.93
2 |
3 | ## 引子
4 | 想要把 GitHub 的一个库弄到服务器上,使用 Git 克隆的时候,发现很慢或提示超时,想起来之前碰到过,这次记录一下。
5 |
6 | 系统:CentOS 7
7 |
8 | ## 解决方式
9 | 国内对 GitHub 的访问进行了限制,可以通过指定 IP 方式访问。
10 |
11 | ### 第一步:找 IP
12 | 首先找到 `github.com` 的 IP 地址,可以在 [IPAddress][url-tool-ip] 网站上查找。还可以添加 `github.global.ssl.fastly.net` 的映射,这个有助于加速。
13 |
14 | 注意:隔段时间地址会变,网上找的有些都过期了,建议还是自己去查询一下。
15 |
16 | ### 第二步:修改 host
17 | ```
18 | vim /etc/hosts
19 | ```
20 | 将找到的最新地址映射添加到 hosts 中。
21 |
22 | ## 参考资料
23 | - [centos7 git下载速度慢][url-article-1]
24 |
25 |
26 | [url-article-1]:https://www.cnblogs.com/wstong/p/12763760.html
27 | [url-tool-ip]:https://www.ipaddress.com/
28 |
29 |
30 |
31 | :wastebasket:
32 |
33 | 这样的爱情有什么不好呢
34 |
35 | ![81-poster][url-local-poster]
36 |
37 |
38 |
39 | [url-local-poster]:../images/81/poster.png
40 |
--------------------------------------------------------------------------------
/draft/82.CentOS 7 后台克隆远程库.96.md:
--------------------------------------------------------------------------------
1 | # 82.CentOS 7 后台克隆远程库.94
2 |
3 | ## 引子
4 | 解决 [CentOS 7 下 Git 超时][url-segment-81]后,发现库还是太大,要花费比较长的时间,还是让其在后台运行比较好,这样不用一直保持登录。找了下资料,总结一下。
5 |
6 | ## 相关知识点
7 | ### Shell
8 | Shell 是一种命令语言,也是一种程序设计语言。它是用户使用 Linux 的桥梁。Shell 脚本,是一种为 Shell 编写的脚本程序。Shell 脚本编程跟 JavaScript 一样,只要有一个能写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类很多,常见的有:
9 | - Bourne Shell(/usr/bin/sh或/bin/sh)
10 | - Bourne Again Shell(/bin/bash)
11 | - C Shell(/usr/bin/csh)
12 | - K Shell(/usr/bin/ksh)
13 | - Shell for Root(/sbin/sh)
14 |
15 | ### Linux nohup 命令
16 | nohup 全称是 `no hang up` ,也就是不挂起的意思,用于在系统后台不挂断地运行命令,退出终端也不会影响程序的运行。
17 |
18 | nohup 命令,在默认情况下(非重定向时),会输出一个名叫 `nohup.out` 的文件到当前目录下,如果当前目录的 `nohup.out` 文件不可写,输出重定向到 `$HOME/nohup.out` 文件中。
19 |
20 | 语法格式:
21 | ```
22 | nohup Command [Arg…] [&]
23 | ```
24 | - Command:要执行的命令。
25 | - Arg:参数,可以指定输出文件。
26 | - &:让命令后台执行。
27 |
28 | 更多内容见[这里][url-article-3]。
29 |
30 |
31 | ## 实现方式
32 | 写一个脚本,然后让其后台运行。
33 |
34 | `git.sh` 脚本内容很简单:
35 | ```shell
36 | echo 'git clone start'
37 |
38 | git clone https://github.com/XXx/xxx.git
39 |
40 | echo 'git clone end'
41 | ```
42 | 在非可视化终端操作顺序:
43 | ```
44 | # 创建文件
45 | > git.sh
46 |
47 | # 编辑文件
48 | vim git.sh
49 |
50 | # 执行脚本
51 | nohup ./git.sh &
52 | ```
53 | 执行的时候出现了提示:
54 | > nohup: 无法运行命令"./git.sh": 权限不够
55 |
56 | 添加权限:
57 | ```
58 | chmod +x ./git.sh
59 | ```
60 | 再次执行脚本后,出现下面的提示:
61 |
62 | ![82-nohup][url-local-1]
63 |
64 | 注意这个时候,需要按任意键退回到 shell 输入命令窗口,退出的时候使用 `exit` 命令退出。
65 |
66 | 如果上述程序执行完成,会在 `nohup.out` 文件中写入脚本中对应的提示信息。
67 |
68 | ### 查看
69 | 查看正在执行的后台任务:
70 | ```
71 | jobs -l
72 | ```
73 | ![82-jobs][url-local-2]
74 |
75 | 可以发现,跟执行脚本成功后出现的数字提示一致。
76 |
77 | `jobs` 命令只对当前终端有效,关闭或退出终端后,在另一个终端 `jobs` 命令无法看到后台运行的程序,此时可以使用 `ps` 命令:
78 | ```
79 | ps -aux|grep git.sh
80 | ```
81 | ![82-ps][url-local-3]
82 |
83 | 如果想要关闭对应进程:
84 | ```
85 | kill -9 进程号
86 | ```
87 |
88 |
89 |
90 | ## 其它
91 | Mac 下执行 shell 脚本提示没有权限:
92 |
93 | > permission denied: ./git.sh
94 |
95 | 修改权限后再次执行就可以了
96 | ```
97 | chmod 777 ./git.sh
98 |
99 | ./git.sh
100 | ```
101 |
102 |
103 |
104 | ## 参考资料
105 | - [nohup和&后台运行,进程查看及终止][url-article-1]
106 | - [Linux 命令大全][url-article-2]
107 |
108 |
109 | [url-article-1]:https://www.cnblogs.com/baby123/p/6477429.html
110 | [url-article-2]:https://www.runoob.com/linux/linux-command-manual.html
111 | [url-article-3]:https://www.runoob.com/linux/linux-comm-nohup.html
112 |
113 | [url-segment-81]:https://github.com/XXHolic/segment/issues/95
114 |
115 | [url-local-1]:../images/82/nohup.png
116 | [url-local-2]:../images/82/jobs.png
117 | [url-local-3]:../images/82/ps.png
118 |
119 |
120 | :wastebasket:
121 |
122 | 舔自己有什么不好呢
123 |
124 | ![82-poster][url-local-poster]
125 |
126 |
127 |
128 | [url-local-poster]:../images/82/poster.jpg
129 |
--------------------------------------------------------------------------------
/draft/85.JavaScript 数学曲线—阿基米德螺线.102.md:
--------------------------------------------------------------------------------
1 | # 85.JavaScript 数学曲线—阿基米德螺线.102
2 |
3 | ## 引子
4 | 最近在研究曲线运动的时候,尝试了用 AI 导出的 SVG 路径之后,发现有些还是回归到数学中更合适一些。搜集了一些资料,尝试后总结一下。
5 |
6 | ## 简介
7 |
8 | ![85-1][url-local-1]
9 |
10 | 阿基米德螺旋是以公元前 3 世纪希腊数学家阿基米德命名的螺旋。它是一个轨迹,对应于一个点在一段时间内的位置,该点沿着一条以恒定角速度旋转的线以恒定速度离开一个固定点。在极坐标系中的公式描述:
11 |
12 | ![85-2][url-local-2]
13 |
14 | 当 c = 1 时,就是通常所说的阿基米德螺旋。
15 |
16 | 公式说明:
17 | - r :径向距离。
18 | - a :常数,起始点与极坐标中心的距离。
19 | - b :常数,控制螺旋相邻两条曲线之间的距离。
20 | - θ :极角。
21 |
22 |
23 | 实际应用有:
24 | - 阿基米德螺线可以在螺旋天线中找到,它可以在很宽的频率范围内工作。
25 | - 要求患者画一个阿基米德螺旋线是一种量化人类颤抖的方法,这些信息有助于诊断神经系统疾病。
26 | - 阿基米德螺旋线也用于数字光处理(DLP)投影系统,以最小化“彩虹效应”,使其看起来好像同时显示多种颜色,而实际上是由于红色、绿色和蓝色的循环速度非常快。
27 | - 阿基米德螺旋线在食品微生物学中用于通过螺旋盘量化细菌浓度。
28 |
29 | ## 绘制
30 | 用 canvas 绘制曲线,canvas 的坐标系是笛卡尔坐标系,需要做一个转换。
31 |
32 | ![85-3][url-local-3]
33 |
34 | 由上面的图可知取一个点有下面的数学转换关系:
35 | ```
36 | x = rcos(θ)
37 | y = rsin(θ)
38 | θ = arctan(y/x)
39 | ```
40 | 结合极坐标系的公式可得:
41 | ```
42 | x = (a + bθ)cos(θ)
43 | y = (a + bθ)sin(θ)
44 | ```
45 |
46 | 这是[示例][url-5],绘制主要逻辑代码:
47 | ```js
48 | function draw() {
49 | let a = 0, b = 10, angle = 0;
50 | let x = 0, y = 0, points = [];
51 | const acceleration = 0.1, circleNum = 2;
52 | // 注意这里角度的递增,以 2 * Math.PI 为基准进行比较,控制画多少圈
53 | while (angle <= circleNum * 2 * Math.PI) {
54 | x = (a + b * angle) * Math.cos(angle);
55 | y = (a + b * angle) * Math.sin(angle);
56 | points.push([x, y]);
57 | angle = angle + acceleration;
58 | }
59 | // 实现把点绘制成线的方法
60 | line({ points: points});
61 | }
62 | ```
63 | 改变其中的参数,会产生很多不同的图形,有的看起来并不是曲线。
64 |
65 |
66 | ## 参考资料
67 | - [Archimedean spiral Wiki][url-1]
68 | - [Archimedean spiral Wolfram MathWorld][url-2]
69 | - [Archimedean Spiral Plane Curves][url-3]
70 | - [螺旋线][url-4]
71 |
72 |
73 | [url-1]:https://en.wikipedia.org/wiki/Archimedean_spiral
74 | [url-2]:https://mathworld.wolfram.com/ArchimedeanSpiral.html
75 | [url-3]:http://xahlee.info/SpecialPlaneCurves_dir/ArchimedeanSpiral_dir/archimedeanSpiral.html
76 | [url-4]:https://baike.baidu.com/item/%E8%9E%BA%E6%97%8B%E7%BA%BF/10012826
77 | [url-5]:https://xxholic.github.io/lab/segment/85/index.html
78 |
79 | [url-local-1]:../images/85/1.png
80 | [url-local-2]:../images/85/2.svg
81 | [url-local-3]:../images/85/3.png
82 |
83 |
84 | :wastebasket:
85 |
86 | 最近看了[《银翼杀手2049》][url-book],故事讲的还是蛮好的,本以为所有的线索都指向了一个答案,没想到最后并不是这样,但回想一下的确也是说的通。
87 |
88 | 关于复制人“繁衍”的秘密还是蛮吸引人的,不知道什么时候能出续集。
89 |
90 | ![85-poster][url-local-poster]
91 |
92 |
93 |
94 | [url-book]:https://movie.douban.com/subject/10512661/
95 | [url-local-poster]:../images/85/poster.png
96 |
--------------------------------------------------------------------------------
/draft/86.JavaScript 数学曲线—等角螺线.103.md:
--------------------------------------------------------------------------------
1 | # 86.JavaScript 数学曲线—等角螺线.103
2 |
3 | ## 引子
4 | 继[阿基米德螺线][url-pre]之后,发现等角螺线。
5 |
6 | ## 简介
7 |
8 | ![86-1][url-local-1]
9 |
10 | 等角螺线又称为黄金螺线或对数螺线,1638 年 Descartes 发现了等角螺线,后来 Jakob Bernoulli 研究发现了等角螺线自再造的特性,Jakob Bernoulli 对螺线非常着迷,以至于他要求刻在自己的墓碑上,并附词 “eadem mutata resurgo”(“纵使改变,依然故我”)。最后,Torricelli 独立完成了这项工作,并找到了曲线的长度。
11 |
12 | 等角螺线名称的由来,由于其特性:在螺线上任取一点 A ,该点与极坐标极点相连形成的直线,与该点的切线形成的夹角为定值。
13 |
14 | 在极坐标系中公式描述:
15 |
16 | ![86-2][url-local-2]
17 |
18 | 公式说明:
19 | - r :与原点的距离。
20 | - a :常数。
21 | - b :常数。
22 | - e :常数。
23 | - θ :与 x 轴的角度。
24 |
25 |
26 | 自然现象有:
27 | - 鹦鹉螺的贝壳像等角螺线。
28 | - 菊的种子排列成等角螺线。
29 | - 昆虫以等角螺线的方式接近光源。
30 | - 旋涡星系的旋臂差不多是等角螺线。
31 | - 低气压(热带气旋、温带气旋等)的外观像等角螺线
32 |
33 | ## 绘制
34 | 用 canvas 绘制曲线,canvas 的坐标系是笛卡尔坐标系,需要做一个转换。
35 |
36 | ![86-3][url-local-3]
37 |
38 | 由上面的图可知取一个点有下面的数学转换关系:
39 | ```
40 | x = rcos(θ)
41 | y = rsin(θ)
42 | θ = arctan(y/x)
43 | ```
44 | 结合极坐标系的公式可得:
45 |
46 | ![86-4][url-local-4]
47 |
48 | 这是[示例][url-5],绘制主要逻辑代码:
49 | ```js
50 | function draw() {
51 | let a = 0.1, b = 0.3, angle = 0;
52 | let x = 0, y = 0, points = [];
53 | const acceleration = 0.1, circleNum = 4;
54 | // 注意这里角度的递增,以 2 * Math.PI 为基准进行比较,控制画多少圈
55 | while (angle <= circleNum * 2 * Math.PI) {
56 | const anglePow = Math.pow(Math.E, b * angle);
57 | x = a * anglePow * Math.cos(angle);
58 | y = a * anglePow * Math.sin(angle);
59 | points.push([x, y]);
60 | angle = angle + acceleration;
61 | }
62 | // 实现把点绘制成线的方法
63 | line({ points: points});
64 | }
65 | ```
66 |
67 |
68 | ## 参考资料
69 | - [Golden spiral Wiki][url-1]
70 | - [Logarithmic Spiral][url-2]
71 | - [Equiangular Spiral][url-3]
72 | - [等角螺线][url-4]
73 |
74 |
75 | [url-pre]:https://github.com/XXHolic/segment/issues/102
76 | [url-1]:https://en.wikipedia.org/wiki/Golden_spiral
77 | [url-2]:https://mathworld.wolfram.com/LogarithmicSpiral.html
78 | [url-3]:http://xahlee.info/SpecialPlaneCurves_dir/EquiangularSpiral_dir/equiangularSpiral.html
79 | [url-4]:https://baike.baidu.com/item/%E7%AD%89%E8%A7%92%E8%9E%BA%E7%BA%BF/8394381
80 | [url-5]:https://xxholic.github.io/lab/segment/86/index.html
81 |
82 | [url-local-1]:../images/86/1.gif
83 | [url-local-2]:../images/86/2.svg
84 | [url-local-3]:../images/85/3.png
85 | [url-local-4]:../images/86/4.svg
86 |
87 |
88 | :wastebasket:
89 |
90 | 最近看了《Jose与虎与鱼们》的两个版本,一个是 2003 年的真人版,一个是 2020 年的动画电影版。内容相差还真是大,动画版感觉都偏离了原著的主题。
91 |
92 | 真人版不禁让人会想,在面对一个有终生残疾的对象,除了年轻不经世的人一时的善意,还有多少人能够坚持一直陪伴余生?
93 |
94 | ![86-poster][url-local-poster]
95 |
96 |
97 |
98 | [url-local-poster]:../images/86/poster.png
99 |
--------------------------------------------------------------------------------
/draft/87.JavaScript 数学曲线—连锁螺线.104.md:
--------------------------------------------------------------------------------
1 | # 87.JavaScript 数学曲线—连锁螺线.104
2 |
3 | ## 引子
4 | 继[等角螺线][url-pre],接着尝试连锁螺线。
5 |
6 |
7 | ## 简介
8 |
9 | ![87-1][url-local-1]
10 |
11 | 在 [阿基米德螺线][url-4] 中提到的通用的公式,当 c = -2 时,就是连锁螺线,又称为 Lituus 曲线。Roger Cotes 在他的著作 《Harmonia Mensurarum》(1722) 中对该曲线进行了描述。Maclaurin 在 1722 年为曲线命名。
12 |
13 | 在极坐标系中公式描述:
14 |
15 | ![87-2][url-local-2]
16 |
17 | 公式说明:
18 | - r :径向距离。
19 | - a :常数。
20 | - θ :极角。
21 |
22 |
23 | ## 绘制
24 | 用 canvas 绘制曲线,canvas 的坐标系是笛卡尔坐标系,需要做一个转换。
25 |
26 | ![87-3][url-local-3]
27 |
28 | 由上面的图可知取一个点有下面的数学转换关系:
29 | ```
30 | x = rcos(θ)
31 | y = rsin(θ)
32 | θ = arctan(y/x)
33 | ```
34 | 结合极坐标系公式可得:
35 |
36 | ![87-4][url-local-4]
37 |
38 | 这是[示例][url-6],绘制主要逻辑代码:
39 | ```js
40 | function draw() {
41 | let a = 100, angle = 0.1;
42 | let x = 0, y = 0, points = [];
43 | const acceleration = 0.1, circleNum = 20;
44 | while (angle <= circleNum * 2 * Math.PI) {
45 | const angleSqrt = Math.sqrt(angle);
46 | x = (a / angleSqrt) * Math.cos(angle);
47 | y = (a / angleSqrt) * Math.sin(angle);
48 | points.push([x, y]);
49 | angle = angle + acceleration;
50 | }
51 | // 实现把点绘制成线的方法
52 | line({ points: points});
53 | }
54 | ```
55 |
56 |
57 | ## 参考资料
58 | - [Lituus Wiki][url-1]
59 | - [Lituus Wolfram MathWorld][url-2]
60 | - [Lituus Plane Curves][url-3]
61 | - [Lituus][url-5]
62 |
63 | [url-pre]:https://github.com/XXHolic/segment/issues/103
64 | [url-1]:https://en.wikipedia.org/wiki/Lituus_(mathematics)
65 | [url-2]:https://mathworld.wolfram.com/Lituus.html
66 | [url-3]:http://xahlee.info/SpecialPlaneCurves_dir/Lituus_dir/lituus.html
67 | [url-4]:https://github.com/XXHolic/segment/issues/102
68 | [url-5]:https://mathshistory.st-andrews.ac.uk/Curves/Lituus/
69 | [url-6]:https://xxholic.github.io/lab/segment/87/index.html
70 |
71 | [url-local-1]:../images/87/1.gif
72 | [url-local-2]:../images/87/2.svg
73 | [url-local-3]:../images/85/3.png
74 | [url-local-4]:../images/87/4.svg
75 |
76 |
77 | :wastebasket:
78 |
79 | 最近看了[《无手少女》][url-book],线条的转变优美传神。
80 |
81 | 刚开始的时候看着有些分不清一些人物和景物,习惯后就好了。
82 |
83 | ![87-poster][url-local-poster]
84 |
85 |
86 |
87 | [url-book]:https://movie.douban.com/subject/26785137/
88 | [url-local-poster]:../images/87/poster.png
89 |
--------------------------------------------------------------------------------
/draft/88.JavaScript 数学曲线—星形线.105.md:
--------------------------------------------------------------------------------
1 | # 88.JavaScript 数学曲线—星形线.105
2 | ## 引子
3 | 继[连锁螺线][url-pre],接着尝试星形线(Astroid)。
4 | ## 简介
5 |
6 | ![88-1][url-local-1]
7 |
8 | [Johann Bernoulli][url-3] 在 1691-1692 年首次讨论了星形线。它也出现在 [Leibniz][url-4] 1715 年的信件中。它有时被称为四尖瓣,很明显因为它有四个尖。
9 |
10 | Astroid 直到 1836 年才在维也纳出版的一本书中获得了现在的名称。即使在 1836 年以后,文献中也出现了各种名称,包括 cubocycloid 和 paracycle 。
11 |
12 | 在笛卡尔坐标系中公式描述:
13 |
14 | ![88-2][url-local-2]
15 |
16 | 其中 a 为常数。
17 |
18 | ## 绘制
19 | 参数化转换:
20 |
21 | ![88-3][url-local-3]
22 |
23 | 这是[示例][url-5],绘制主要逻辑代码:
24 | ```js
25 | function draw() {
26 | let a = 100, start = 0;
27 | let x = 0, y = 0, points = [];
28 | const acceleration = 0.1, max = 20;
29 | while (start <= max) {
30 | x = a * Math.pow(Math.cos(start), 3);
31 | y = a * Math.pow(Math.sin(start), 3);
32 | points.push([x, y]);
33 | start = start + acceleration;
34 | }
35 | // 实现把点绘制成线的方法
36 | line({ points: points});
37 | }
38 | ```
39 |
40 |
41 | ## 参考资料
42 | - [Astroid Curves][url-1]
43 | - [Astroid Wolfram][url-2]
44 |
45 | [url-pre]:https://github.com/XXHolic/segment/issues/104
46 | [url-1]:https://mathshistory.st-andrews.ac.uk/Curves/Astroid/
47 | [url-2]:https://mathworld.wolfram.com/Astroid.html
48 | [url-3]:https://mathshistory.st-andrews.ac.uk/Biographies/Bernoulli_Johann/
49 | [url-4]:https://mathshistory.st-andrews.ac.uk/Biographies/Leibniz/
50 | [url-5]:https://xxholic.github.io/lab/segment/88/index.html
51 |
52 |
53 | [url-local-1]:../images/88/1.gif
54 | [url-local-2]:../images/88/2.svg
55 | [url-local-3]:../images/88/3.svg
56 |
57 |
58 | :wastebasket:
59 |
60 | 最近看了电影[《燃烧》][url-last],看到大概一半的时候才明白了电影名称的含义。
61 |
62 | ![88-poster][url-local-poster]
63 |
64 |
65 |
66 | [url-last]:https://movie.douban.com/subject/26842702/
67 | [url-local-poster]:../images/88/poster.png
68 |
--------------------------------------------------------------------------------
/draft/89.JavaScript 数学曲线—双角线.106.md:
--------------------------------------------------------------------------------
1 | # 89.JavaScript 数学曲线—双角线.106
2 | ## 引子
3 | 继[星形线][url-pre],接着尝试双角线(Bicorn)。
4 |
5 | ## 简介
6 | 双角线也称为三角帽(cocked-ha)曲线,是 [Sylvester][url-3] 在 1864 年研究的一组四次曲线的名称。[Cayley][url-4] 在 1867 年研究了同样的曲线。
7 |
8 | ![89-1][url-local-1]
9 |
10 | 在笛卡尔坐标系中公式描述:
11 |
12 | ![89-2][url-local-2]
13 |
14 | 其中 a 为常数。
15 |
16 | ## 绘制
17 | 参数化转换:
18 |
19 | ![89-3][url-local-3]
20 |
21 | 这是[示例][url-5],绘制主要逻辑代码:
22 | ```js
23 | function draw() {
24 | let a = -100, start = 0;
25 | let x = 0, y = 0, points = [];
26 | const acceleration = 0.1, max = 40;
27 | while (start <= max) {
28 | x = a * Math.sin(start);
29 | const yNumerator = a * Math.pow(Math.cos(start), 2) * (2 + Math.cos(start));
30 | const yDenominator = 3 + Math.pow(Math.sin(start), 2);
31 | y = yNumerator / yDenominator;
32 | points.push([x, y]);
33 | start = start + acceleration;
34 | }
35 | // 实现把点绘制成线的方法
36 | line({ points: points});
37 | }
38 | ```
39 |
40 |
41 | ## 参考资料
42 | - [Bicorn Curves][url-1]
43 | - [Bicorn Wolfram][url-2]
44 |
45 | [url-pre]:https://github.com/XXHolic/segment/issues/105
46 | [url-1]:https://mathshistory.st-andrews.ac.uk/Curves/Bicorn/
47 | [url-2]:https://mathworld.wolfram.com/Bicorn.html
48 | [url-3]:https://mathshistory.st-andrews.ac.uk/Biographies/Sylvester/
49 | [url-4]:https://mathshistory.st-andrews.ac.uk/Biographies/Cayley/
50 | [url-5]:https://xxholic.github.io/lab/segment/89/index.html
51 |
52 |
53 | [url-local-1]:../images/89/1.gif
54 | [url-local-2]:../images/89/2.svg
55 | [url-local-3]:../images/89/3.svg
56 |
57 |
58 | :wastebasket:
59 |
60 | 最近发现电影[《小森食光 夏秋篇 》][url-last],我的天,真的好喜欢这部电影。
61 |
62 | 伴随季节的各种料理,一部分食材自己栽种收获,一部分食材来自自然。
63 |
64 | 人与自然达到一种美好的平衡循环,剧情与美食也很好的融合在一起,真是赞啊!
65 |
66 | ![89-poster][url-local-poster]
67 |
68 |
69 |
70 | [url-last]:https://movie.douban.com/subject/25814705/
71 | [url-local-poster]:../images/89/poster.png
72 |
--------------------------------------------------------------------------------
/draft/9.模拟事件.11.md:
--------------------------------------------------------------------------------
1 | # 模拟事件
2 | ## 场景
3 | 在看源码的时候,发现有地方用到了 createEvent() 方法,这个方法平时很少用到,但在一些封装的插件中起到了关键的作用,觉得有必要熟悉了解一下。
4 |
5 | ## 关于名称
6 | 从网上找到相关的文档和介绍,主要有 2 种翻译:模拟事件、合成事件。这两个词感觉很难想到一起,觉得这样翻译可能跟相关方法有关,于是就去了解相关方法。了解到用 createEvent() 方法创建的事件,必须要用对应的方法进行初始化和触发。想了想后,得出的结果是:从整体的作用来看,用这些方法最终目的是为了像事件一样触发,翻译为模拟事件可以理解;从实现的过程来看,需要先创建事件,然后设定相关参数,翻译为合成事件也说的通。个人偏向模拟事件,所以下面全部用模拟事件。
7 |
8 | ## createEvent() 方式模拟事件的步骤
9 | ### 1. 在 document 对象上使用 createEvent() 创建 event 对象
10 |
11 | 该方法接受一个参数,是要创建的事件类型的字符串。这个字符串可以是下列几个字符串之一。
12 | - UIEvents:一般化的 UI 事件。鼠标事件和键盘事件都继承自UI 事件。DOM3 级中是 UIEvent。
13 | - MouseEvents:一般化的鼠标事件。DOM3 级中是 MouseEvent。
14 | - MutationEvents:一般化的 DOM 变动事件。DOM3 级中是 MutationEvent。
15 | - HTMLEvents:一般化的HTML 事件。没有对应的 DOM3 级事件(HTML 事件被分散到其他类别中)。
16 |
17 | 其中最常用的是 MouseEvents。
18 |
19 | ### 2. 初始化事件相关信息
20 |
21 | 每种类型 event 对象都有一个特殊的方法,是用来初始化该 event 对象。不同类型的 event,对应初始化方法的名字也不相同,具体要取决于 createEvent() 中使用的参数。例如传入字符串 “MouseEvents”,返回的对象有一个初始化方法 initMouseEvent() 。传入字符串 “KeyboardEvent”,返回的对象有一个初始化方法 initKeyEvent()。
22 |
23 | ### 3. 触发事件
24 |
25 | 使用 dispatchEvent() 方法触发事件,该方法需要传入一个参数,就是第一步创建的 event 对象。当然前提是要监听对应的事件,否则就没有效果。触发之后该,事件就会按照初始化事件中相关设置,该冒泡就冒泡,该捕获就捕获。
26 |
27 | ## createEvent() 方式的兼容性
28 | DOM2 级规范规定了模拟特定事件的方式,IE9、Opera、Firefox、Chrome 和 Safari 都支持这种方式。但这种方式不推荐使用,推荐的方式是使用事件构造函数,这种方式的兼容性不太好,将这里[说明](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent)。
29 |
30 | ## 模拟事件新旧两种方式的实现
31 | 这是[测试页面](https://xxholic.github.io/lab/lab-js/segment/9/create-event.html),移动端扫一扫访问如下:
32 |
33 | 
34 |
35 | 使用方式上主要的区别如下图:
36 |
37 | 
38 |
39 | ## 参考资料
40 | - [createEvent](https://developer.mozilla.org/en-US/docs/Web/API/Document/createEvent)
41 | - [Creating_and_triggering_events](https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events)
42 | - [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent)
43 | - [interface-customevent](https://dom.spec.whatwg.org/#interface-customevent)
--------------------------------------------------------------------------------
/draft/90.JavaScript 数学曲线—心形线.107.md:
--------------------------------------------------------------------------------
1 | # 90.JavaScript 数学曲线—心形线.107
2 | ## 引子
3 | 继[双角线][url-pre],接着尝试心形线(Cardioid)。
4 |
5 | ## 简介
6 |
7 | ![90-1][url-local-1]
8 |
9 | Cardioid 是 [Castillon][url-3] 在 1741 年《Philosophical Transactions of the Royal Societyin》的一篇论文中首次使用的名称,它是一条曲线,是圆周上一点绕着半径相等的圆的圆周旋转所形成的轨迹。
10 |
11 | 在笛卡尔坐标系中公式描述:
12 |
13 | ![90-2][url-local-2]
14 |
15 | 其中 a 为常数。
16 |
17 | ## 绘制
18 | 参数化转换:
19 |
20 | ![90-3][url-local-3]
21 |
22 | 这是[示例][url-4],绘制主要逻辑代码:
23 | ```js
24 | function draw() {
25 | let a = 40, start = 0;
26 | let x = 0, y = 0, points = [];
27 | const acceleration = 0.1, max = 40;
28 | while (start <= max) {
29 | const cal = 2 * start;
30 | x = a * (2 * Math.cos(start) - Math.cos(cal));
31 | y = a * (2 * Math.sin(start) - Math.sin(cal));
32 | points.push([x, y]);
33 | start = start + acceleration;
34 | }
35 | // 实现把点绘制成线的方法
36 | line({ points: points});
37 | }
38 | ```
39 |
40 |
41 | ## 参考资料
42 | - [Cardioid Curves][url-1]
43 | - [Cardioid Wolfram][url-2]
44 |
45 | [url-pre]:https://github.com/XXHolic/segment/issues/106
46 | [url-1]:https://mathshistory.st-andrews.ac.uk/Curves/Cardioid/
47 | [url-2]:https://mathworld.wolfram.com/Cardioid.html
48 | [url-3]:https://mathshistory.st-andrews.ac.uk/Biographies/Castillon/
49 |
50 | [url-4]:https://xxholic.github.io/lab/segment/90/index.html
51 |
52 |
53 | [url-local-1]:../images/90/1.gif
54 | [url-local-2]:../images/90/2.svg
55 | [url-local-3]:../images/90/3.svg
56 |
57 |
58 | :wastebasket:
59 |
60 | 《增广贤文》中有这样几句:
61 |
62 | > 人见白头嗔,我见白头喜。
63 | > 多少少年亡,不到白头死。
64 |
65 | 以后要是还有人说头上有好多白头发,就直接念这几句。
66 |
67 |
68 |
--------------------------------------------------------------------------------
/draft/food.md:
--------------------------------------------------------------------------------
1 | # food
2 | ## 目录
3 | - [引子](#start)
4 | - [红薯](#potato)
5 | - [参考资料](#reference)
6 |
7 |
8 | ## 引子
9 | 用烤箱烤食物的记录。
10 |
11 | ## 红薯
12 | - 比较新鲜的红薯,用锡箔包好,一般切开两半,根据红薯厚度的不同,温度 230 度时, 30-40 分钟。
13 |
14 | ## 花菜
15 | - 从根部对半切开两次,加些油盐搅拌,然后用锡箔包好,温度 230 度,12 分钟左右。
16 |
17 | ## 大蒜
18 | - 直接掰开为单个,加点油,用锡箔包好,230 度,10 分钟左右。
19 |
20 | ## 饺子
21 | - 超市买的袋装饺子,解冻后,表层弄些油防止粘在一起,用锡箔包好,230 度,25 分钟左右。
22 |
23 | ## 香菇
24 | - 水洗一下,两次对半切开,加些油盐,用锡箔包好,230 度,香菇堆放厚度不同,10-15 分钟左右。
25 |
26 | ## 胡萝卜
27 | - 两次对半切开,加些油盐,用锡箔包好,230 度,25 分钟左右。
28 |
29 | ## 辣椒
30 | - 水洗一下,切开,加些油盐,用锡箔包好,230 度,15 分钟左右。
31 |
32 | ## 白萝卜
33 | - 水洗一下,切开,加些油盐,用锡箔包好,230 度,20 分钟左右。
34 |
35 |
36 |
37 |
38 |
39 | ## 参考资料
40 |
41 |
42 | [url-article-1]:https://xxholic.github.io/segment
43 |
44 | [url-local-5]:../images/n/help.png
45 |
46 |
47 |
--------------------------------------------------------------------------------
/draft/multivariable-calculus.md:
--------------------------------------------------------------------------------
1 | # Multivariable calculus
2 |
3 | ## 引子
4 | 由于想要绘制流体相关,发现要学习多元微积分的内容。就去可汗学院学了一下所做的笔记。
5 |
6 | https://www.khanacademy.org/math/multivariable-calculus
7 |
8 | ## Thinking about multivariable functions
9 | ### Visualizing scalar-valued functions
10 | - 多元微积分简单的说就是多个变量相关的方程。
11 | - 单变量函数,例如常见的 f(x) = x ,在二维坐标轴上,我们知道是每个点的 x 轴上对应的 y 轴上的一个位置,所有符合这种关系的坐标(x,y),就形成了一条直线。对于多变量函数,例如 f(x,y) = x*x + y*y ,输入就是一个点(x,y),得到的是 z 轴的值,应用到的就是三维空间 。
12 | - 对于三维空间的函数图形,有一个思考方法,就是先把其中的一个变量看成是常量,然后看另外一个变量变化所产生变化。
13 | - 一些三维的函数,以 z 轴作为切片,然后将切片上的点映射到 x和 y 的二维轴上形成的图案,就是对三维图形的另外一种形式展现。
14 |
15 |
16 | ### Derivatives of multivariable functions
17 | - 关于导数和偏导数的[基本概念][url-1],偏导数就是对多元变量函数的单个变量进行求导。
18 | - 偏导数告诉你,当您只调整输入中的一个变量时,多变量函数是如何变化的
19 | - 求导[基础公式][url-2]
20 |
21 | ## Gradient and directional derivatives
22 | 梯度和方向导数
23 | - 梯度,多变量函数中对各个变量单独求偏导数后,组成的向量。
24 |
25 | ![gradient][url-local-1]
26 |
27 | - 梯度可以理解为“最陡峭的上升方向”,例如你爬山,你想如何以最快的方向到达顶峰,梯度的指向就是这个。
28 |
29 | ![gradient-2][url-local-2]
30 |
31 | - 计算梯度可以看成是为了计算方向导数的一种方式,方向导数反应了某个矢量方向上的斜率。
32 |
33 | ## Differentiating parametric curves(参数曲线的微分)
34 | - 曲线参数化跟曲线方程描述的是等效的。
35 | ![curve-1][url-local-3]
36 |
37 | - 对曲线参数化求导,就可以得到曲线某个点的切线斜率
38 |
39 | ## Multivariable chain rule(多变量链式规则)
40 |
41 | [url-1]: https://zhuanlan.zhihu.com/p/321425509
42 | [url-2]: https://www.cnblogs.com/masterchd/p/14082162.html
43 |
44 | [url-local-1]:../images/n1/1.png
45 | [url-local-2]:../images/n1/2.png
46 | [url-local-3]:../images/n1/3.png
47 |
48 |
--------------------------------------------------------------------------------
/draft/n.Jenkins.md:
--------------------------------------------------------------------------------
1 | # n.Jenkins
2 | ## 目录
3 | - [引子](#reason)
4 | - [index 1](#index1)
5 | - [index 12](#index12)
6 | - [参考资料](#reference)
7 |
8 |
9 | ## 引子
10 | 尝试 Jenkins ,系统 Mac 10.14.5 (18F203)
11 |
12 |
13 | ## 概念
14 | ### CI/CD
15 | - CI:持续集成(CONTINUOUS integration),在持续集成环境中,开发人员将会频繁的提交代码到主干。这些新提交在最终合并到主线之前,都需要通过编译和自动化测试流进行验证。
16 | - CD:持续交付(CONTINUOUS DELIVERY),持续交付就是讲我们的应用发布出去的过程
17 | - CD:持续部署(CONTINUOUS DEPLOYMENT)。
18 |
19 | ### Jenkins
20 | Jenkins是开源CI&CD软件,提供超过1000个插件来支持构建、部署、自动化,
21 | ### Docker
22 | Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
23 |
24 | Docker通常用于如下场景:
25 | - web应用的自动化打包和发布;
26 | - 自动化测试和持续集成、发布;
27 | - 在服务型环境中部署和调整数据库或其他的后台应用;
28 | - 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
29 |
30 | ## 安装
31 | ### Java jDK
32 | 安装到官网下载相应版本即可,版本下载链接
33 |
34 |
35 | 尝试时 Jenkins 支持版本 8 和 11,最好先查看[Java requirements][url-docs-java-requirements] 文档说明。
36 |
37 | 卸载:
38 |
39 | 输入
40 | sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
41 | sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefpane
42 |
43 | 查找当前版本
44 | 输入:ls /Library/Java/JavaVirtualMachines/
45 | 输出:jdk-9.0.1.jdk
46 |
47 | sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk
48 |
49 | ### Docker
50 | 使用 brew 安装
51 |
52 | ### Jenkins 服务基本操作
53 | - 启动:java -jar jenkins.war --httpPort=8080
54 | - 重启:在 url 后面加上 restart,例如 http://localhost:7070/restart ,会出现是否重启的提示
55 | - 退出:在 url 后面加上 exit
56 | - 重载:在 url 后面加上 reload ,重新加载配置
57 |
58 | 上面一些参数添加后会出现以下提示,并有一个 “使用 POST 重试” 按钮,点击那个按钮即可。
59 | > 该 URL 需要使用 POST 来请求
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | ## 参考资料
68 | - [example][url-base]
69 |
70 |
71 | [url-base]:https://xxholic.github.io/segment/images
72 |
73 |
74 | [url-docs-java-requirements]:https://jenkins.io/doc/administration/requirements/java/
--------------------------------------------------------------------------------
/draft/n.Visual Studio Code.md:
--------------------------------------------------------------------------------
1 | # Visual Studio Code
2 |
3 | ## 目录
4 |
5 | - [场景](#situation)
6 | - [插件](#plugin)
7 | - [配置](#config)
8 | - [快捷键](#shortcut)
9 | - [其它](#other)
10 | - [参考资料](#reference)
11 |
12 | ## 场景
13 |
14 | 为了提升效率,在此记录一下有帮助的插件和操作等等。版本 1.34。
15 |
16 | ## 插件
17 |
18 | - Markdown All in One:处理 markdown
19 | - ESLint:检查 js
20 | - Code Spell Checker:检查拼写
21 | - open in browser:在浏览器中打开文件
22 | - Debugger for Chrome:调试
23 | - vscode-icons:各类文件图标
24 | - Path Intellisense:路径自动补充
25 | - Project Manager:项目管理
26 | - GitLens:git 查看历史
27 | - Bracket Pair Colorizer:括号匹配颜色
28 | - Auto Rename Tag:同时修改匹配标签
29 | - beautify:格式化代码
30 | - vscode-mindmap:脑图
31 | - sass:sass 文件类型支持,默认是不支持的。
32 |
33 | ## 配置
34 |
35 | 打开用户设置 `settings.json` :command-,
36 |
37 | ### 从命令行启动
38 |
39 | 打开 vscode , Shift-Command-P,输入 shell command 找到 **Shell Command: Install 'code' command in PATH** 命令,然后选择执行,重启。这样就可以在任何目录下,输入 'code' 命令执行就可以打开 vscode。下面是一些简单的参数:
40 |
41 | - code .:打开当前文件夹
42 | - code -n:打开新的窗口
43 |
44 | ### 粘贴时格式化
45 |
46 | `editor.formatOnPaste: true`
47 |
48 | ### 自动保存
49 |
50 | `files.autoSave: "afterDelay"`
51 |
52 | ### 保存时自动格式化
53 |
54 | `editor.formatOnSave: true`
55 |
56 | ### 用 spaces 或 Tab
57 |
58 | `editor.insertSpaces: true`
59 |
60 | ### Tab 大小
61 |
62 | `editor.tabSize: 2`
63 |
64 | ### 渲染空白符
65 |
66 | `editor.renderWhitespace: all`
67 |
68 | ### 忽略文件/文件夹
69 |
70 | - 从编辑器移除配置:`files.exclude`
71 | - 从搜索中移除配置:`search.exclude`
72 |
73 | ### 自定义片段
74 |
75 | ### 设置 vscode 为默认合并工具
76 |
77 | `git config --global merge.tool code`
78 |
79 | ## 快捷键
80 |
81 | - 命令行模式:Shift-Command-P
82 | - 快速查找文件:Command-P
83 | - 打开终端:control- ~
84 | - 显示/隐藏侧栏:command-B
85 | - 同一文件分栏:command-、
86 | - 关闭当前打开的 tab:command-W
87 | - 多个光标:option-click 或者 option-command-上/下箭头
88 | - 复制行:option-shift-上/下箭头
89 | - 上下移动行:option-上/下箭头
90 | - 跳转到关键标志:shift-command-G
91 | - 跳转到对应行:control-G
92 | - 格式化:shift + option + F
93 |
94 | ## 其它
95 |
96 | ### 调试
97 |
98 | 找到命令 Debug: Open launch.json 选择对应的环境进行调试。
99 |
100 | ## 参考资料
101 |
102 | - [Visual Studio Code][url-visualstudio-docs]
103 |
104 | [url-repository-images]: https://xxholic.github.io/segment/images
105 | [url-visualstudio-docs]: https://code.visualstudio.com/docs
106 |
--------------------------------------------------------------------------------
/draft/n.template.md:
--------------------------------------------------------------------------------
1 | # template
2 | ## 目录
3 | - [引子](#start)
4 | - [title1](#title1)
5 | - [title11](#title11)
6 | - [参考资料](#reference)
7 |
8 |
9 | ## 引子
10 |
11 | ## title1
12 | ### title11
13 |
14 |
15 |
16 |
17 | ## 参考资料
18 | - [example][url-article-1]
19 |
20 |
21 | [url-article-1]:https://xxholic.github.io/segment
22 |
23 | [url-local-5]:../images/n/help.png
24 |
25 |
26 | :wastebasket:
27 |
28 |
29 | ![n-poster][url-local-poster]
30 |
31 |
32 |
33 | [url-book]:https://book.douban.com/subject/26916012/
34 | [url-local-poster]:../images/n/poster.jpg
35 |
--------------------------------------------------------------------------------
/draft2/1/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": "1",
3 | "originIndex": "120",
4 | "imgPrefix": "https://xxholic.github.io/segment/draft2/1/image/"
5 | }
6 |
--------------------------------------------------------------------------------
/draft2/1/example/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/draft2/1/example/bg.png
--------------------------------------------------------------------------------
/draft2/1/example/no-watcher.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 没有指定观察者
10 |
11 |
12 |
13 |
20 |
21 |
22 | 没有指定观察者示例
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/1/example/orthographic-projection.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 正射投影
10 |
11 |
12 |
13 |
27 |
28 |
29 | 正射投影示例
30 |
31 |
32 |
left 边界:
33 |
-1
34 |
35 |
0
36 |
当前值:-1
37 |
38 |
39 |
right 边界:
40 |
0
41 |
42 |
1
43 |
当前值:1
44 |
45 |
46 |
bottom 边界:
47 |
-1
48 |
49 |
0
50 |
当前值:-1
51 |
52 |
53 |
top 边界:
54 |
0
55 |
56 |
1
57 |
当前值:1
58 |
59 |
60 |
近裁剪面:
61 |
0
62 |
63 |
1
64 |
当前值:0
65 |
66 |
67 |
远裁剪面:
68 |
0
69 |
70 |
1
71 |
当前值:0.5
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/draft2/1/example/perspective-projection.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 透视投影
10 |
11 |
12 |
13 |
27 |
28 |
29 | 透视投影示例
30 |
31 |
32 |
垂直视角:
33 |
10
34 |
35 |
80
36 |
当前值:30
37 |
38 |
39 |
宽高比:
40 |
1
41 |
42 |
2
43 |
当前值:1
44 |
45 |
46 |
近裁剪面位置:
47 |
1
48 |
49 |
100
50 |
当前值:1
51 |
52 |
53 |
远裁剪面位置:
54 |
5
55 |
56 |
100
57 |
当前值:20
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/draft2/1/example/watcher-rotate.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 部分消失的现象
10 |
11 |
12 |
13 |
23 |
24 |
25 | 部分消失的现象示例
26 |
27 |
28 |
绕 y 轴旋转:
29 |
0
30 |
31 |
360
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/draft2/1/example/watcher.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 指定观察者
10 |
11 |
12 |
13 |
20 |
21 |
22 | 指定观察者示例
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/1/image/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/draft2/1/image/10.png
--------------------------------------------------------------------------------
/draft2/1/image/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/draft2/1/image/11.png
--------------------------------------------------------------------------------
/draft2/2/JavaScript WebGL 绘制顺序.md:
--------------------------------------------------------------------------------
1 | # JavaScript WebGL 绘制顺序
2 |
3 | ## 引子
4 | 在 [JavaScript WebGL 三维相关概念][url-pre]中尝试一些效果的时候,又碰到了新问题,就去查了资料,自己尝试后总结下。
5 |
6 | ## 绘制顺序
7 | 之前二维绘制顺序并没有产生明显的不好效果,现在绘制三维影响就比较大了。
8 |
9 | 先看看二维相同一套顶点不同顺序的效果:
10 | - [二维面顺序示例 1][url-example1]
11 | - [二维面顺序示例 2][url-example2]
12 |
13 | 两个面的形状和对应颜色始终保持一致,就是缓冲的顺序变了,发现 **WebGL 默认情况下会按照缓冲区中顺序绘制**,也就是后绘制的图形会覆盖先绘制的图形。这个就像一层一层贴纸一样,比较符合一般认知,所以在二维绘制时并没发现明显不对劲的地方。
14 |
15 | 关于三维绘制顺序先思考一下:三维的顶点坐标有三个分量,第三个分量是在 z 轴上表示深度信息,默认垂直屏幕向内为负方向,那么 z 值越大表示离屏幕越近,既然都有区分的依据,直接按照这个顺序绘制应该就可以了。实际试试:
16 | - [三维面顺序示例 1][url-example3]
17 | - [三维面顺序示例 2][url-example4]
18 |
19 | 示例 1 和示例 2 顶点和对应颜色都保持了一样,只有 z 分量和缓冲的顺序不同,如果是按照 z 分量区分的话,应该要保持一致才对,但发现示例 2 还是跟二维绘制面顺序一样,z 分量的设置并没有效果。查资料说要开启**隐藏面消除**功能:
20 | ```js
21 | gl.enable(gl.DEPTH_TEST)
22 | ```
23 | 再来看看[示例 2 并开启 DEPTH_TEST][url-example5],发现还是没有效果,找到网上的一些示例并进行对比,发现还需要投影,才能看到效果,见[示例 2 开启 DEPTH_TEST 且产生正确投影][url-example9]。
24 |
25 | ## 深度冲突
26 | 开启隐藏面消除功能之后,在绘制两个很靠近的面时,可能会出现显示异常的情况,这个现象称为**深度冲突(Z fighting)**。这里有两类这个现象的示例:
27 | - drawArrays 执行一次绘制,里面包含了两个面[示例1][url-example7]
28 | - drawArrays 执行两次绘制,单独绘制的两个面[示例2][url-example6]
29 |
30 | 示例 1 的情况是一次绘制多个面,通过调整 z 分量比较容易解决。
31 |
32 | 示例 2 的情况是多次绘制多个面,不确定性相对更强,这个时候可以借助 **多边形偏移(polygon offset)** 来解决。在两次绘制之间指定偏移:
33 | ```js
34 | // 代码省略
35 | gl.enable(gl.POLYGON_OFFSET_FILL);
36 | gl.drawArrays(gl.TRIANGLES, 0, 3); // 开启多边形偏移
37 | gl.polygonOffset(1, 1); // 指定偏移
38 | gl.drawArrays(gl.TRIANGLES, 3, 3);
39 | ```
40 | 这是[示例][url-example8]。
41 |
42 | [polygonOffset(factor, units)][url-1] 指定加到每个顶点绘制 z 值上的偏移量,两个参数都是比例因子,最终值的计算公式是 factor × DZ + r × units ,其中 DZ 是顶点所在表面相对于观察者视线的角度, r 是设备能够解析偏移量的最小值。这个方法对于渲染隐藏线图像、将贴花应用于表面以及渲染具有高亮显示边缘立体图形很有用。
43 |
44 |
45 |
46 | ## 参考资料
47 | - [polygonOffset mdn][url-1]
48 | - [WebGL编程指南在线版][url-3]
49 |
50 | [url-pre]:https://github.com/XXHolic/segment/issues/120
51 | [url-1]:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/polygonOffset
52 | [url-2]:https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glPolygonOffset.xml
53 | [url-3]:https://sites.google.com/site/webglbook/
54 |
55 | [url-example1]:https://xxholic.github.io/segment/draft2/2/example/2d-order1.html
56 | [url-example2]:https://xxholic.github.io/segment/draft2/2/example/2d-order2.html
57 | [url-example3]:https://xxholic.github.io/segment/draft2/2/example/3d-order1.html
58 | [url-example4]:https://xxholic.github.io/segment/draft2/2/example/3d-order2.html
59 | [url-example5]:https://xxholic.github.io/segment/draft2/2/example/3d-order2-depth.html
60 | [url-example6]:https://xxholic.github.io/segment/draft2/2/example/3d-depth-conflict.html
61 | [url-example7]:https://xxholic.github.io/segment/draft2/2/example/3d-depth-conflict2.html
62 | [url-example8]:https://xxholic.github.io/segment/draft2/2/example/3d-depth-offset.html
63 | [url-example9]:https://xxholic.github.io/segment/draft2/2/example/3d-order2-projection-depth.html
64 |
65 | [url-local-1]:./image/1.png
66 |
67 |
68 |
69 | :wastebasket:
70 |
71 | 最近看了[《废头》][url-waste]这部作品,蛮有意思的,里面对一种生命轮回设定很新奇。
72 |
73 |
74 |
75 | [url-waste]:https://movie.douban.com/subject/27098373/
76 |
--------------------------------------------------------------------------------
/draft2/2/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": "2",
3 | "originIndex": "121",
4 | "imgPrefix": "https://xxholic.github.io/segment/draft2/1/image/"
5 | }
6 |
--------------------------------------------------------------------------------
/draft2/2/example/2d-order1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 二维面绘制顺序 1
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/2d-order2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 二维面绘制顺序 2
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-depth-conflict.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制开启 DEPTH_TEST 产生冲突现象
23 | 注意这个示例中两个三角形绘制是进行了两次 drawArrays
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-depth-conflict2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制开启 DEPTH_TEST 产生冲突现象
23 | 注意这个示例中两个三角形绘制是进行一次 drawArrays
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-depth-offset.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制开启 POLYGON_OFFSET_FILL 解决 DEPTH_TEST 产生的冲突
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-order1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制顺序 1
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-order2-depth.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制顺序 2 开启 DEPTH_TEST
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-order2-projection-depth.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制顺序 2 开启 DEPTH_TEST 且设置了投影
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/3d-order2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制顺序
10 |
11 |
12 |
13 |
20 |
21 |
22 | 三维面绘制顺序 2
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/2/example/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/draft2/2/example/bg.png
--------------------------------------------------------------------------------
/draft2/3/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": "3",
3 | "originIndex": "122",
4 | "imgPrefix": "https://xxholic.github.io/segment/draft2/3/image/"
5 | }
6 |
--------------------------------------------------------------------------------
/draft2/3/example/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/draft2/3/example/bg.png
--------------------------------------------------------------------------------
/draft2/3/example/cube.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制正方体
10 |
11 |
12 |
13 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/3/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 绘制三棱锥
10 |
11 |
12 |
13 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/draft2/3/image/waste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/draft2/3/image/waste.png
--------------------------------------------------------------------------------
/draft2/4/JavaScript WebGL 3D 绘制球体.md:
--------------------------------------------------------------------------------
1 | # JavaScript WebGL 3D 绘制球体
2 | ## 目录
3 | - [引子](#start)
4 | - [参考资料](#reference)
5 |
6 | ## 引子
7 | 绘制球体该怎么弄?
8 |
9 |
10 |
11 |
12 |
13 | ## 参考资料
14 | - [codepen 球体示例][url-1]
15 | - [WebGL try draw sphere][url-2]
16 | - [WEBGL2画球][url-3]
17 |
18 | [url-1]:https://codepen.io/aholmes/pen/MyGKZd
19 | [url-2]:https://stackoverflow.com/questions/47756053/webgl-try-draw-sphere
20 | [url-3]:https://luojia.me/6802/
21 |
22 | [url-example1]:https://xxholic.github.io/lab/starry-night/translate.html
23 |
24 | [url-local-1]:./image/1.png
25 |
26 |
27 |
28 | :wastebasket:
29 |
30 | 最近看了[《红线》][url-waste]这部作品,里面赛车设计和场面看着还是蛮过瘾的!
31 |
32 |
33 |
34 | [url-waste]:https://movie.douban.com/subject/3903715/
35 |
--------------------------------------------------------------------------------
/draft2/4/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": "4",
3 | "originIndex": "123",
4 | "imgPrefix": "https://xxholic.github.io/starry-night/draft2/4/image/"
5 | }
6 |
--------------------------------------------------------------------------------
/draft2/4/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | xx
10 |
11 |
12 |
13 |
14 |
15 | xxx示例
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/draft2/template/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": "1",
3 | "originIndex": "117",
4 | "imgPrefix": "https://xxholic.github.io/starry-night/draft/1/image/"
5 | }
6 |
--------------------------------------------------------------------------------
/draft2/template/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | xx
10 |
11 |
12 |
13 |
14 |
15 | xxx示例
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/draft2/template/template.md:
--------------------------------------------------------------------------------
1 | # template
2 | ## 目录
3 | - [引子](#start)
4 | - [参考资料](#reference)
5 |
6 | ## 引子
7 | XXX。
8 |
9 |
10 |
11 |
12 |
13 | ## 参考资料
14 | - [矩阵百科][url-1]
15 |
16 | [url-1]:https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5/18069?fr=aladdin
17 |
18 | [url-example1]:https://xxholic.github.io/lab/starry-night/translate.html
19 |
20 | [url-local-1]:./image/1.png
21 |
22 |
23 |
24 | :wastebasket:
25 |
26 | 最近看了[《红线》][url-waste]这部作品,里面赛车设计和场面看着还是蛮过瘾的!
27 |
28 |
29 |
30 | [url-waste]:https://movie.douban.com/subject/3903715/
31 |
--------------------------------------------------------------------------------
/images/100/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/100/1.png
--------------------------------------------------------------------------------
/images/13/13-support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/13/13-support.png
--------------------------------------------------------------------------------
/images/14/14-5.0-date-spec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/14/14-5.0-date-spec.png
--------------------------------------------------------------------------------
/images/14/14-5.1-date-spec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/14/14-5.1-date-spec.png
--------------------------------------------------------------------------------
/images/14/14-6-date-spec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/14/14-6-date-spec.png
--------------------------------------------------------------------------------
/images/14/qr-code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/14/qr-code.png
--------------------------------------------------------------------------------
/images/16/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/16/poster.jpeg
--------------------------------------------------------------------------------
/images/17/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/17/poster.jpg
--------------------------------------------------------------------------------
/images/17/qrcode-canvas-css.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/17/qrcode-canvas-css.png
--------------------------------------------------------------------------------
/images/17/qrcode-canvas-unit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/17/qrcode-canvas-unit.png
--------------------------------------------------------------------------------
/images/18/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/18/poster.jpg
--------------------------------------------------------------------------------
/images/18/qrcode-canvas-image-hd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/18/qrcode-canvas-image-hd.png
--------------------------------------------------------------------------------
/images/18/qrcode-canvas-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/18/qrcode-canvas-image.png
--------------------------------------------------------------------------------
/images/19/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/19/poster.jpg
--------------------------------------------------------------------------------
/images/19/qrcode-canvas-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/19/qrcode-canvas-border.png
--------------------------------------------------------------------------------
/images/2-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/2-1.png
--------------------------------------------------------------------------------
/images/20/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/20/poster.jpeg
--------------------------------------------------------------------------------
/images/21/cli-guide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/21/cli-guide.png
--------------------------------------------------------------------------------
/images/21/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/21/logo.png
--------------------------------------------------------------------------------
/images/21/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/21/poster.png
--------------------------------------------------------------------------------
/images/22/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/22/poster.jpg
--------------------------------------------------------------------------------
/images/22/qrcode-border-radius.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/22/qrcode-border-radius.png
--------------------------------------------------------------------------------
/images/22/qrcode-radius-clip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/22/qrcode-radius-clip.png
--------------------------------------------------------------------------------
/images/23/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/23/poster.png
--------------------------------------------------------------------------------
/images/23/qrcode-canvas-text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/23/qrcode-canvas-text.png
--------------------------------------------------------------------------------
/images/24/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/24/poster.jpg
--------------------------------------------------------------------------------
/images/27/img-textbaseline.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/27/img-textbaseline.gif
--------------------------------------------------------------------------------
/images/27/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/27/poster.jpg
--------------------------------------------------------------------------------
/images/27/qrcode-normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/27/qrcode-normal.png
--------------------------------------------------------------------------------
/images/27/qrcode-problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/27/qrcode-problem.png
--------------------------------------------------------------------------------
/images/28/paint.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/28/paint.jpeg
--------------------------------------------------------------------------------
/images/3-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/3-1.png
--------------------------------------------------------------------------------
/images/30/ascii.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/30/ascii.png
--------------------------------------------------------------------------------
/images/30/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/30/poster.jpeg
--------------------------------------------------------------------------------
/images/31/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/poster.jpeg
--------------------------------------------------------------------------------
/images/31/qrcode-btoa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/qrcode-btoa.png
--------------------------------------------------------------------------------
/images/31/qrcode-createobjectURL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/qrcode-createobjectURL.png
--------------------------------------------------------------------------------
/images/31/qrcode-filereader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/qrcode-filereader.png
--------------------------------------------------------------------------------
/images/31/support-blob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/support-blob.png
--------------------------------------------------------------------------------
/images/31/support-btoa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/support-btoa.png
--------------------------------------------------------------------------------
/images/31/support-filereader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/31/support-filereader.png
--------------------------------------------------------------------------------
/images/33/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/33/poster.png
--------------------------------------------------------------------------------
/images/34/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/34/poster.png
--------------------------------------------------------------------------------
/images/35/code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/35/code.png
--------------------------------------------------------------------------------
/images/35/qrcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/35/qrcode.png
--------------------------------------------------------------------------------
/images/36/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/36/map.png
--------------------------------------------------------------------------------
/images/36/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/36/poster.jpeg
--------------------------------------------------------------------------------
/images/37/console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/37/console.png
--------------------------------------------------------------------------------
/images/38/this-scope.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/38/this-scope.png
--------------------------------------------------------------------------------
/images/38/this-self.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/38/this-self.png
--------------------------------------------------------------------------------
/images/39/apply-no-strict.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/39/apply-no-strict.png
--------------------------------------------------------------------------------
/images/39/apply-strict.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/39/apply-strict.png
--------------------------------------------------------------------------------
/images/39/bind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/39/bind.png
--------------------------------------------------------------------------------
/images/4-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/4-1.png
--------------------------------------------------------------------------------
/images/42/yum-provides.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/42/yum-provides.png
--------------------------------------------------------------------------------
/images/46/46-arr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-arr.png
--------------------------------------------------------------------------------
/images/46/46-bool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-bool.png
--------------------------------------------------------------------------------
/images/46/46-constructor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-constructor.png
--------------------------------------------------------------------------------
/images/46/46-func.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-func.png
--------------------------------------------------------------------------------
/images/46/46-number.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-number.png
--------------------------------------------------------------------------------
/images/46/46-obj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-obj.png
--------------------------------------------------------------------------------
/images/46/46-string.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/46-string.png
--------------------------------------------------------------------------------
/images/46/figure-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/46/figure-1.png
--------------------------------------------------------------------------------
/images/47/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/47/poster.png
--------------------------------------------------------------------------------
/images/5-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/5-1.png
--------------------------------------------------------------------------------
/images/51/dx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/51/dx.jpg
--------------------------------------------------------------------------------
/images/51/jx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/51/jx.jpg
--------------------------------------------------------------------------------
/images/52/tyzr.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/52/tyzr.gif
--------------------------------------------------------------------------------
/images/53/poster1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/53/poster1.jpg
--------------------------------------------------------------------------------
/images/53/poster2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/53/poster2.jpg
--------------------------------------------------------------------------------
/images/54/girls-and-balloons.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/54/girls-and-balloons.jpg
--------------------------------------------------------------------------------
/images/54/pic.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/54/pic.jpg
--------------------------------------------------------------------------------
/images/55/cursive-examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/55/cursive-examples.png
--------------------------------------------------------------------------------
/images/55/fantasy-examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/55/fantasy-examples.png
--------------------------------------------------------------------------------
/images/55/monospace-examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/55/monospace-examples.png
--------------------------------------------------------------------------------
/images/55/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/55/poster.png
--------------------------------------------------------------------------------
/images/55/sansserif-examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/55/sansserif-examples.png
--------------------------------------------------------------------------------
/images/55/serif-examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/55/serif-examples.png
--------------------------------------------------------------------------------
/images/56/code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/56/code.png
--------------------------------------------------------------------------------
/images/56/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/56/poster.png
--------------------------------------------------------------------------------
/images/57/qrcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/57/qrcode.png
--------------------------------------------------------------------------------
/images/59/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/59/poster.jpg
--------------------------------------------------------------------------------
/images/59/qrcode-body.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/59/qrcode-body.png
--------------------------------------------------------------------------------
/images/59/qrcode-normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/59/qrcode-normal.png
--------------------------------------------------------------------------------
/images/59/qrcode-problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/59/qrcode-problem.png
--------------------------------------------------------------------------------
/images/59/qrcode-scroll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/59/qrcode-scroll.png
--------------------------------------------------------------------------------
/images/6-delay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-delay.png
--------------------------------------------------------------------------------
/images/6-no-delay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-no-delay.png
--------------------------------------------------------------------------------
/images/6-pointer-events-support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-pointer-events-support.png
--------------------------------------------------------------------------------
/images/6-pointer-events.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-pointer-events.png
--------------------------------------------------------------------------------
/images/6-touch-action-support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-touch-action-support.png
--------------------------------------------------------------------------------
/images/6-touch-action.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-touch-action.png
--------------------------------------------------------------------------------
/images/6-viewport-support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/6-viewport-support.png
--------------------------------------------------------------------------------
/images/60/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/60/poster.png
--------------------------------------------------------------------------------
/images/60/qr-fixed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/60/qr-fixed.png
--------------------------------------------------------------------------------
/images/60/qr-sticky.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/60/qr-sticky.png
--------------------------------------------------------------------------------
/images/61/body.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/61/body.png
--------------------------------------------------------------------------------
/images/61/full-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/61/full-screen.png
--------------------------------------------------------------------------------
/images/61/html-hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/61/html-hidden.png
--------------------------------------------------------------------------------
/images/61/no-body.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/61/no-body.png
--------------------------------------------------------------------------------
/images/61/normalize-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/61/normalize-page.png
--------------------------------------------------------------------------------
/images/61/pure-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/61/pure-page.png
--------------------------------------------------------------------------------
/images/62/qr-diff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/62/qr-diff.png
--------------------------------------------------------------------------------
/images/62/qr-same.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/62/qr-same.png
--------------------------------------------------------------------------------
/images/63/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/63/poster.png
--------------------------------------------------------------------------------
/images/63/qr-no-touch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/63/qr-no-touch.png
--------------------------------------------------------------------------------
/images/63/qr-problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/63/qr-problem.png
--------------------------------------------------------------------------------
/images/63/qr-solution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/63/qr-solution.png
--------------------------------------------------------------------------------
/images/64/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/64/poster.png
--------------------------------------------------------------------------------
/images/65/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/65/poster.png
--------------------------------------------------------------------------------
/images/65/qr-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/65/qr-gray.png
--------------------------------------------------------------------------------
/images/66/destination-out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/66/destination-out.png
--------------------------------------------------------------------------------
/images/66/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/66/poster.jpg
--------------------------------------------------------------------------------
/images/66/qr-index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/66/qr-index.png
--------------------------------------------------------------------------------
/images/66/qr-normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/66/qr-normal.png
--------------------------------------------------------------------------------
/images/66/qr-percentage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/66/qr-percentage.png
--------------------------------------------------------------------------------
/images/66/qr-progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/66/qr-progress.png
--------------------------------------------------------------------------------
/images/67/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/67/poster.png
--------------------------------------------------------------------------------
/images/67/register.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/67/register.png
--------------------------------------------------------------------------------
/images/67/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/67/search.png
--------------------------------------------------------------------------------
/images/68/centr-decentr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/68/centr-decentr.png
--------------------------------------------------------------------------------
/images/68/git-model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/68/git-model.png
--------------------------------------------------------------------------------
/images/68/hotfix-branches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/68/hotfix-branches.png
--------------------------------------------------------------------------------
/images/68/main-branches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/68/main-branches.png
--------------------------------------------------------------------------------
/images/68/merge-without-ff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/68/merge-without-ff.png
--------------------------------------------------------------------------------
/images/68/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/68/poster.jpg
--------------------------------------------------------------------------------
/images/69/flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/69/flow.png
--------------------------------------------------------------------------------
/images/69/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/69/poster.jpg
--------------------------------------------------------------------------------
/images/7/7-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/7-01.png
--------------------------------------------------------------------------------
/images/7/7-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/7-02.png
--------------------------------------------------------------------------------
/images/7/angular-commit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/angular-commit.png
--------------------------------------------------------------------------------
/images/7/changelog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/changelog.png
--------------------------------------------------------------------------------
/images/7/failed1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/failed1.png
--------------------------------------------------------------------------------
/images/7/npx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/npx.png
--------------------------------------------------------------------------------
/images/7/react-commit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/react-commit.png
--------------------------------------------------------------------------------
/images/7/validate-commit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/validate-commit.png
--------------------------------------------------------------------------------
/images/7/vuejs-commit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/7/vuejs-commit.png
--------------------------------------------------------------------------------
/images/70/environment-branches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/70/environment-branches.png
--------------------------------------------------------------------------------
/images/70/gitlab-flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/70/gitlab-flow.png
--------------------------------------------------------------------------------
/images/70/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/70/poster.jpg
--------------------------------------------------------------------------------
/images/70/production-branch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/70/production-branch.png
--------------------------------------------------------------------------------
/images/70/release-branches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/70/release-branches.png
--------------------------------------------------------------------------------
/images/71/nvm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/71/nvm.png
--------------------------------------------------------------------------------
/images/71/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/71/poster.jpg
--------------------------------------------------------------------------------
/images/71/private.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/71/private.jpg
--------------------------------------------------------------------------------
/images/72/fork.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/72/fork.png
--------------------------------------------------------------------------------
/images/72/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/72/help.png
--------------------------------------------------------------------------------
/images/72/modify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/72/modify.png
--------------------------------------------------------------------------------
/images/72/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/72/poster.jpg
--------------------------------------------------------------------------------
/images/72/start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/72/start.png
--------------------------------------------------------------------------------
/images/72/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/72/success.png
--------------------------------------------------------------------------------
/images/73/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/73/poster.jpg
--------------------------------------------------------------------------------
/images/74/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/74/poster.png
--------------------------------------------------------------------------------
/images/75/canvas-half-pixels-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/75/canvas-half-pixels-1.jpg
--------------------------------------------------------------------------------
/images/75/canvas-half-pixels-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/75/canvas-half-pixels-2.jpg
--------------------------------------------------------------------------------
/images/75/compare.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/75/compare.png
--------------------------------------------------------------------------------
/images/75/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/75/poster.png
--------------------------------------------------------------------------------
/images/76/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/76/poster.png
--------------------------------------------------------------------------------
/images/77/client.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/client.png
--------------------------------------------------------------------------------
/images/77/inner-vs-outer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/inner-vs-outer.png
--------------------------------------------------------------------------------
/images/77/offset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/offset.png
--------------------------------------------------------------------------------
/images/77/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/poster.jpg
--------------------------------------------------------------------------------
/images/77/qr-higher-parent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/qr-higher-parent.png
--------------------------------------------------------------------------------
/images/77/qr-into-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/qr-into-view.png
--------------------------------------------------------------------------------
/images/77/qr-parent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/77/qr-parent.png
--------------------------------------------------------------------------------
/images/78/map-base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/78/map-base.png
--------------------------------------------------------------------------------
/images/78/object-base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/78/object-base.png
--------------------------------------------------------------------------------
/images/78/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/78/poster.jpg
--------------------------------------------------------------------------------
/images/79/link-module.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/79/link-module.png
--------------------------------------------------------------------------------
/images/79/link-package.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/79/link-package.png
--------------------------------------------------------------------------------
/images/79/link-result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/79/link-result.png
--------------------------------------------------------------------------------
/images/79/npm-link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/79/npm-link.png
--------------------------------------------------------------------------------
/images/8/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/8/poster.jpeg
--------------------------------------------------------------------------------
/images/8/qrcode-question.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/8/qrcode-question.png
--------------------------------------------------------------------------------
/images/8/qrcode-space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/8/qrcode-space.png
--------------------------------------------------------------------------------
/images/80/poster.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/80/poster.jpeg
--------------------------------------------------------------------------------
/images/80/publish-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/80/publish-1.png
--------------------------------------------------------------------------------
/images/80/publish-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/80/publish-2.png
--------------------------------------------------------------------------------
/images/80/publish-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/80/publish-3.png
--------------------------------------------------------------------------------
/images/80/publish-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/80/publish-4.png
--------------------------------------------------------------------------------
/images/81/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/81/poster.png
--------------------------------------------------------------------------------
/images/82/jobs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/82/jobs.png
--------------------------------------------------------------------------------
/images/82/nohup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/82/nohup.png
--------------------------------------------------------------------------------
/images/82/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/82/poster.jpg
--------------------------------------------------------------------------------
/images/82/ps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/82/ps.png
--------------------------------------------------------------------------------
/images/83/cmd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/83/cmd.png
--------------------------------------------------------------------------------
/images/83/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/83/error.png
--------------------------------------------------------------------------------
/images/83/install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/83/install.png
--------------------------------------------------------------------------------
/images/83/nginx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/83/nginx.png
--------------------------------------------------------------------------------
/images/83/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/83/poster.png
--------------------------------------------------------------------------------
/images/83/step1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/83/step1.png
--------------------------------------------------------------------------------
/images/84/mysql-install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/84/mysql-install.png
--------------------------------------------------------------------------------
/images/84/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/84/poster.png
--------------------------------------------------------------------------------
/images/84/secure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/84/secure.png
--------------------------------------------------------------------------------
/images/85/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/85/1.png
--------------------------------------------------------------------------------
/images/85/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/85/2.png
--------------------------------------------------------------------------------
/images/85/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/85/3.png
--------------------------------------------------------------------------------
/images/85/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/85/poster.png
--------------------------------------------------------------------------------
/images/86/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/86/1.gif
--------------------------------------------------------------------------------
/images/86/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/86/2.png
--------------------------------------------------------------------------------
/images/86/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/86/4.png
--------------------------------------------------------------------------------
/images/86/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/86/poster.png
--------------------------------------------------------------------------------
/images/87/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/87/1.gif
--------------------------------------------------------------------------------
/images/87/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/87/2.png
--------------------------------------------------------------------------------
/images/87/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/87/4.png
--------------------------------------------------------------------------------
/images/87/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/87/poster.png
--------------------------------------------------------------------------------
/images/88/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/88/1.gif
--------------------------------------------------------------------------------
/images/88/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/88/poster.png
--------------------------------------------------------------------------------
/images/89/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/89/1.gif
--------------------------------------------------------------------------------
/images/89/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/89/poster.png
--------------------------------------------------------------------------------
/images/9/9-code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/9/9-code.png
--------------------------------------------------------------------------------
/images/9/9-qrcode-create-event.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/9/9-qrcode-create-event.png
--------------------------------------------------------------------------------
/images/90/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/90/1.gif
--------------------------------------------------------------------------------
/images/91/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/91/1.png
--------------------------------------------------------------------------------
/images/91/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/91/poster.png
--------------------------------------------------------------------------------
/images/92/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/92/poster.png
--------------------------------------------------------------------------------
/images/93/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/93/1.png
--------------------------------------------------------------------------------
/images/93/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/93/2.png
--------------------------------------------------------------------------------
/images/94/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/1.png
--------------------------------------------------------------------------------
/images/94/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/2.png
--------------------------------------------------------------------------------
/images/94/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/3.png
--------------------------------------------------------------------------------
/images/94/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/4.png
--------------------------------------------------------------------------------
/images/94/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/5.png
--------------------------------------------------------------------------------
/images/94/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/6.png
--------------------------------------------------------------------------------
/images/94/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/94/poster.png
--------------------------------------------------------------------------------
/images/95/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/95/1.png
--------------------------------------------------------------------------------
/images/95/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/95/2.png
--------------------------------------------------------------------------------
/images/95/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/95/poster.png
--------------------------------------------------------------------------------
/images/96/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/96/1.png
--------------------------------------------------------------------------------
/images/96/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/96/poster.png
--------------------------------------------------------------------------------
/images/97/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/97/1.png
--------------------------------------------------------------------------------
/images/97/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/97/2.jpg
--------------------------------------------------------------------------------
/images/97/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/97/poster.png
--------------------------------------------------------------------------------
/images/98/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/98/poster.png
--------------------------------------------------------------------------------
/images/99/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/99/1.png
--------------------------------------------------------------------------------
/images/99/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/99/poster.png
--------------------------------------------------------------------------------
/images/database/mongo-shell.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/database/mongo-shell.png
--------------------------------------------------------------------------------
/images/n/linux-file-structure.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/n/linux-file-structure.jpg
--------------------------------------------------------------------------------
/images/n/linux-file-structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/n/linux-file-structure.png
--------------------------------------------------------------------------------
/images/n/vim-vi-workmodel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/n/vim-vi-workmodel.png
--------------------------------------------------------------------------------
/images/n1/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/n1/1.png
--------------------------------------------------------------------------------
/images/n1/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/n1/2.png
--------------------------------------------------------------------------------
/images/n1/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/n1/3.png
--------------------------------------------------------------------------------
/images/question/event-loop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/question/event-loop.png
--------------------------------------------------------------------------------
/images/question/https.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/images/question/https.jpg
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "segment",
3 | "version": "1.1.1",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "segment",
9 | "version": "1.1.1",
10 | "license": "MIT",
11 | "dependencies": {
12 | "tinify": "^1.6.0-beta.2"
13 | }
14 | },
15 | "node_modules/promise-nodeify": {
16 | "version": "3.0.1",
17 | "resolved": "https://registry.npmjs.org/promise-nodeify/-/promise-nodeify-3.0.1.tgz",
18 | "integrity": "sha512-ghsSuzZXJX8iO7WVec2z7GI+Xk/EyiD+JZK7AZKhUqYfpLa/Zs4ylUD+CwwnKlG6G3HnkUPMAi6PO7zeqGKssg==",
19 | "engines": {
20 | "node": ">=6",
21 | "npm": ">=1.3.7"
22 | }
23 | },
24 | "node_modules/proxying-agent": {
25 | "version": "2.4.0",
26 | "resolved": "https://registry.npmjs.org/proxying-agent/-/proxying-agent-2.4.0.tgz",
27 | "integrity": "sha512-b9vDqIcViJZVsWPpQlp9Py74u+Wqd0a+kMkkg7zX58mwNtrNbOChNlRTM7lUrlpiwNzyJCV8+5D8rnZYLDFh7Q==",
28 | "engines": {
29 | "node": ">=0.8.0"
30 | }
31 | },
32 | "node_modules/tinify": {
33 | "version": "1.6.0-beta.2",
34 | "resolved": "https://registry.npmjs.org/tinify/-/tinify-1.6.0-beta.2.tgz",
35 | "integrity": "sha512-jzOtntNLiRRhMN5AlRlxapUhNYVH3YhU2cfk3Xg2u5g+t4ZfdXe97TqYvIl7cyenfXmqo5SCZet7t4alv53XvQ==",
36 | "dependencies": {
37 | "promise-nodeify": ">= 0.1",
38 | "proxying-agent": ">= 2.1"
39 | },
40 | "engines": {
41 | "node": ">= 4.0"
42 | }
43 | }
44 | },
45 | "dependencies": {
46 | "promise-nodeify": {
47 | "version": "3.0.1",
48 | "resolved": "https://registry.npmjs.org/promise-nodeify/-/promise-nodeify-3.0.1.tgz",
49 | "integrity": "sha512-ghsSuzZXJX8iO7WVec2z7GI+Xk/EyiD+JZK7AZKhUqYfpLa/Zs4ylUD+CwwnKlG6G3HnkUPMAi6PO7zeqGKssg=="
50 | },
51 | "proxying-agent": {
52 | "version": "2.4.0",
53 | "resolved": "https://registry.npmjs.org/proxying-agent/-/proxying-agent-2.4.0.tgz",
54 | "integrity": "sha512-b9vDqIcViJZVsWPpQlp9Py74u+Wqd0a+kMkkg7zX58mwNtrNbOChNlRTM7lUrlpiwNzyJCV8+5D8rnZYLDFh7Q=="
55 | },
56 | "tinify": {
57 | "version": "1.6.0-beta.2",
58 | "resolved": "https://registry.npmjs.org/tinify/-/tinify-1.6.0-beta.2.tgz",
59 | "integrity": "sha512-jzOtntNLiRRhMN5AlRlxapUhNYVH3YhU2cfk3Xg2u5g+t4ZfdXe97TqYvIl7cyenfXmqo5SCZet7t4alv53XvQ==",
60 | "requires": {
61 | "promise-nodeify": ">= 0.1",
62 | "proxying-agent": ">= 2.1"
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "segment",
3 | "version": "1.1.1",
4 | "description": "",
5 | "main": "index.js",
6 | "repository": "https://github.com/XXHolic/segment.git",
7 | "author": "thy",
8 | "license": "MIT",
9 | "dependencies": {
10 | "tinify": "^1.6.0-beta.2"
11 | },
12 | "scripts": {
13 | "del": "node './script/del.js'",
14 | "tf": "node script/del.js && node script/cli.js",
15 | "img": "node script/img.js",
16 | "compressImg": "node script/compressImg.js",
17 | "format": "node script/format.js"
18 | },
19 | "config": {
20 | "commitizen": {
21 | "path": "./node_modules/cz-conventional-changelog"
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/resource/webgl-1.0.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/resource/webgl-1.0.pdf
--------------------------------------------------------------------------------
/resource/webgl-2.0.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XXHolic/segment/36fbd2aad974fbe36f6f2cc8be8e922f5b08c8a2/resource/webgl-2.0.pdf
--------------------------------------------------------------------------------
/script/compressImg.js:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 | const tinify = require("tinify");
3 | const fs = require("fs");
4 | const path = require("path");
5 |
6 | // 压缩时,填入自己的 key 值
7 | tinify.key = "";
8 |
9 | // 获取当前执行路径,后续新加的图片,这个针对性的改一下,因为免费的有压缩数量限制
10 | const currentPath = "./draft/1/image";
11 | const fileArr = []; // 存储目标文件路径
12 |
13 | /**
14 | * 递归目录及下面的文件,找出目标文件
15 | * @param {String} dir 文件夹路径
16 | */
17 | function readDir(dir) {
18 | const exist = fs.existsSync(dir);
19 | // 排除不需要遍历的文件夹或文件
20 | const excludeDir = /^(\.|node_module|wx|n)/;
21 | if (!exist) {
22 | console.error("目录路径不存在");
23 | return;
24 | }
25 | const pa = fs.readdirSync(dir);
26 |
27 | for (let index = 0; index < pa.length; index++) {
28 | let file = pa[index];
29 | const pathName = path.join(dir, file);
30 | const info = fs.statSync(pathName);
31 | if (info.isDirectory() && !excludeDir.test(file)) {
32 | readDir(pathName);
33 | } else {
34 | let fileExt = path.extname(file);
35 |
36 | if (fileExt === ".png" || fileExt === ".jpg" || fileExt === ".jpeg") {
37 | fileArr.push(pathName);
38 | }
39 | }
40 | }
41 | }
42 |
43 | function traverseFile(file) {
44 | file.length &&
45 | file.forEach((ele) => {
46 | dealFile(ele);
47 | });
48 | }
49 |
50 | function dealFile(filePath) {
51 | var fileName = path.basename(filePath);
52 |
53 | const source = tinify.fromFile(filePath);
54 | source.toFile(filePath, function () {
55 | console.info(`${fileName}压缩完成`);
56 | });
57 | }
58 |
59 | readDir(currentPath);
60 | traverseFile(fileArr);
61 |
--------------------------------------------------------------------------------
/script/del.js:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 | var fs = require("fs");
3 | // var path = require("path");
4 |
5 | var bkyFilePath = './draft/bky';
6 | var jjFilePath = './draft/jj';
7 | var sfFilePath = './draft/sf';
8 | var originFilePath = './draft/origin';
9 |
10 | function delDir(path){
11 | let files = [];
12 | if(fs.existsSync(path)){
13 | files = fs.readdirSync(path);
14 | files.forEach((file, index) => {
15 | let curPath = path + "/" + file;
16 | if(fs.statSync(curPath).isDirectory()){
17 | delDir(curPath); //递归删除文件夹
18 | } else {
19 | fs.unlinkSync(curPath); //删除文件
20 | }
21 | });
22 | fs.rmdirSync(path);
23 | }
24 | }
25 |
26 |
27 |
28 | delDir(bkyFilePath);
29 | delDir(jjFilePath);
30 | delDir(sfFilePath);
31 | delDir(originFilePath);
--------------------------------------------------------------------------------
/script/img.js:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 | const tinify = require("tinify");
3 | var fs = require("fs");
4 | var path = require("path");
5 |
6 | // 压缩时,填入自己的 key 值
7 | tinify.key = "LzZkNRr6tDlJ3xDLr6Y7V0bkdyYYBs61";
8 | /**
9 | * 递归目录及下面的文件,找出目标文件
10 | * @param {String} dir 文件夹路径
11 | */
12 | function readDir(dir) {
13 | var exist = fs.existsSync(dir);
14 | // 排除不需要遍历的文件夹或文件
15 | var excludeDir = /^(\.|node_module|wx|n)/;
16 | if (!exist) {
17 | console.error("目录路径不存在");
18 | return;
19 | }
20 | var pa = fs.readdirSync(dir);
21 |
22 | for (let index = 0; index < pa.length; index++) {
23 | let file = pa[index];
24 | var pathName = path.join(dir, file);
25 | var info = fs.statSync(pathName);
26 | if (info.isDirectory() && !excludeDir.test(file)) {
27 | readDir(pathName);
28 | } else {
29 | let fileExt = path.extname(file);
30 |
31 | if (fileExt === ".png" || fileExt === ".jpg" || fileExt === ".jpeg") {
32 | fileArr.push(pathName);
33 | }
34 | }
35 | }
36 | }
37 |
38 | function traverseFile(file) {
39 |
40 | file.length &&
41 | file.forEach(ele => {
42 | dealFile(ele);
43 | });
44 | }
45 |
46 | function dealFile(filePath) {
47 | var fileName = path.basename(filePath);
48 |
49 | const source = tinify.fromFile(filePath);
50 | source.toFile(filePath, function () {
51 | console.info(`${fileName}压缩完成`);
52 | });
53 |
54 |
55 | }
56 |
57 | // 获取当前执行路径,后续新加的图片,这个针对性的改一下,因为免费的有压缩数量限制
58 | var currentPath = "./images/99";
59 | var fileArr = []; // 存储目标文件路径
60 |
61 | readDir(currentPath);
62 | traverseFile(fileArr);
63 |
--------------------------------------------------------------------------------
/util/canvas/webgl.js:
--------------------------------------------------------------------------------
1 | class WebGL {
2 | constructor(w = 300, h = 150, options = {}) {
3 | const ratio = window.devicePixelRatio || 1;
4 | this.width = w;
5 | this.height = h;
6 | this.ratio = ratio;
7 | const canvas = document.createElement("canvas");
8 | const context = canvas.getContext("webgl");
9 | this.node = canvas;
10 | this.context = context;
11 | // 高清屏幕模糊问题处理
12 | canvas.width = w * ratio; // 实际渲染像素
13 | canvas.height = h * ratio; // 实际渲染像素
14 | canvas.style.width = `${w}px`; // 控制显示大小
15 | canvas.style.height = `${h}px`; // 控制显示大小
16 | context.viewport(0, 0, context.canvas.width, context.canvas.height);
17 | }
18 |
19 | // 设置属性
20 | attrs = (attributes = {}) => {
21 | const target = this.node;
22 | for (const key in attributes) {
23 | target.setAttribute(key, attributes[key]);
24 | }
25 | };
26 |
27 | /**
28 | * 清除画布
29 | * @param {object} context canvas 上下文对象
30 | */
31 | clear = () => {
32 | const { context } = this;
33 | // 使用透明的黑色清除所有图像
34 | context.clearColor(0.0, 0.0, 0.0, 0.0);
35 | // 用上面指定的颜色清除缓冲区
36 | context.clear(context.COLOR_BUFFER_BIT);
37 | };
38 | }
39 |
--------------------------------------------------------------------------------
/util/insertLink.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * 插入原文链接
4 | * @param {object} params
5 | */
6 | function insertLink(params) {
7 | var linkType = params.type || 'segment';
8 | var eleClass = params.className || 'fix-header tc';
9 | var linkIndex = params.linkIndex;
10 | var title = params.title;
11 | var url = '';
12 |
13 | if (!linkIndex) {
14 | return;
15 | }
16 | switch (linkType) {
17 | case 'segment':
18 | url = 'https://github.com/XXHolic/segment/issues/' + linkIndex;
19 | break;
20 | case 'blog':
21 | url = 'https://github.com/XXHolic/blog/issues/' + linkIndex;
22 | break;
23 |
24 | }
25 |
26 | var insertEle = document.createElement('h2');
27 | insertEle.setAttribute('class',eleClass);
28 | var linkEle = document.createElement('a');
29 | linkEle.setAttribute('href',url);
30 | linkEle.setAttribute('target','_blank');
31 | var textNode = document.createTextNode('对应文:'+title);
32 | linkEle.appendChild(textNode);
33 | insertEle.appendChild(linkEle);
34 | var bodyEle = document.body;
35 | bodyEle.insertBefore(insertEle,bodyEle.firstElementChild);
36 |
37 | }
--------------------------------------------------------------------------------