【Markdown系列】语法进阶 (Advanced Markdown Tips)

Overview

markdown语法简单方便,但要实现复杂的样式仍然要借助html标签。本文介绍常用的html标签,用于对markdown原生格式的增强。

常用的标签

折叠块 <summary>

你和猪,打一种动物


点击展开答案


源码:

1
2
3
4
<details>
<summary>点击展开答案</summary>
<p> 象</p>
</details>

通常用于FAQ页面。

图片 <img>

markdown的语法不支持图片大小,位置等样式。

1
![Alt text](图片链接 "optional title")

所以可采用<img>标签

1
<img align="middle" alt="=&quot;alternate_text&quot;" src="http://img5.2345.com/duoteimg/zixunImg/local/2016/03/18/14582940693488.gif" title="hover" width="20%" />

图片样式

对齐 (align)

学而不思则罔,思而不学则殆

—— 《论语》

1
<div style="text-align:right" >-- 《论语》</div>

注释 (comment)

不在页面显示,一般写给自己看,或者写给编辑者看(比如提交issue的模板中附带的注释)

  • 方式一: 采用html注释标签 <!-- 这里不会显示 -->
  • 方式二: 直接采用<标签 <这里不会显示>

推荐方式一

代码块 (code block)

个性化设置code block的样式

1
<pre>sample <b>sample</b> sample</pre>
sample sample sample
1
2
3
<pre>
<i><a href="http://manpages.ubuntu.com/manpages/dapper/man1/prename.1.html">rename</a></i> sfds
</pre>
rename sfds

<pre>标签更灵活。但是,不能显示行号,需要自定义每个元素的格式。

code block不常用的语言

diff样式用的不多,但比较实用。

1
2
3
4
5
6
7
8
public class Hello1
{
public static void Main()
{
- System.Console.WriteLine("Hello, World!");
+ System.Console.WriteLine("Rock all night long!");
}
}

这部分属于需要动态link,需要借助javascript。因此需要markdown render支持(比如MultiMarkdown),或者利用插件(比如hexo-reference

链接的集中管理

对link的集中管理,方便复用。

1
2
3
4
这是[链接一][1],这是[链接二][2]。多次引用更方便、更简洁,[链接一][1]。

[1]: http://url1
[2]: http://url2 "这是2的标题,可以试着把指针移到链接二上"

这是链接一,这是链接二。多次引用更方便、更简洁,链接一

脚注 (footnote)

1
2
3
basic footnote[^demo]

[^demo]: basic footnote content [title](http://link)

link总结

集中link和脚注link最好都放在文档末尾。区别是,前者只提供link,后者明文显示参考文献。我更倾向于后者。

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— 维基百科

问题

是否支持嵌入js?

是否支持Markdown Inside HTML Blocks?

Markdown in HTML does not work very well –来自官方文档

部分支持

  • <div> *Emphasized* text. </div>
  • <div> ## dfd </div>

参考

tex 在线编译工具

工具

首推 sharelatex

已开源,很赞,可以自己架个服务跑
https://github.com/sharelatex/sharelatex

是否支持gbk?

用到了什么backend接口,可否全部前端?

SageMathCloud

这个是Sage(一个志在超越MATLAB、Mathematica、Maple的数学软件)在线使用站点,同时也支持LaTeX文档的书写、编译、预览及查看,最方便的是原生提供了SageTeX的支持,绘制函数图像更方便,数学运算在文档内直接完成。

shareLatex对中文的支持

MathJax

开源

支持tex吗?

其他:

js驱动的: MathQuill - WYSIWYG math using only HTML and CSS (开源)
MathJax (开源)
LaTeX4Web: a simple LATEX TO HTML converter (javascript) (开源)
http://manuels.github.io/texlive.js/website/ (开源)

疑问

cjk* 和cjk的区别

一图知git

简介

首先,这不是一个git命令教程,这是一个用于快速理解git命令的辅助文档。

用了git几年了,每次遇到疑难杂症都要现查,归其原因,是不了解git命令背后到底做了什么。

于是决定整理一下思路。

术语

存储位置

  • 工作区:working_directory,working_tree,workspace
  • 暂存区:stage, index (加入到暂存区的更改:staged/indexed changes, add changes to stage/index)
  • 本地仓库: local_repository, local_commit_history,history
  • 远程仓库:remote_repository

  • 快照:snapshot

  • Blobs: 即files

文件状态

  • Untrack file:新文件,从未被add的文件。下一步操作往往是git add或者加入.gitignore
    -

changes

  • Changes to be committed
  • Changes not staged for commit

操作
stage操作:git add
commit操作:git commit

指针
指针指向实体

  • HEAD指针
    • 正常状态: 指向一个 (确切说是named branch)
    • Detached HEAD: 指向了anonymous branch,即
    • null: 不可能出现这个状态
  • master

HEAD指针状态

实体
hash

什么区别?
能写master~吗?能写 jkjdka~吗?

参考 https://stackoverflow.com/questions/23303549/what-are-commit-ish-and-tree-ish-in-git

上图

有点紧凑,建议放大看

看图说话

入门
git add : 读取工作区文件,写入暂存区 (1个箭头代表1个写操作)

进阶

git checkout \<branch>: 移动本地仓库中的HEAD指针到指定branch,更新index,更新工作区文件 (3个箭头)

git reset –soft:撤销指定commit,移动HEAD (不涉及工作区、暂存区、远程仓库的操作)

soft mixed hard三个参数的区别也一目了然

所有涉及更改index区域的操作

  • git add
  • git rm
  • by listing files as arguments to the commit command (without –interactive or –patch switch), in which case the commit will ignore changes staged in the index, and instead record the current content of the listed files (which must already be known to Git);

  • by using the -a switch with the commit command to automatically “add” changes from all known files (i.e. all files that are already listed in the index) and to automatically “rm” files in the index that have been removed from the working tree, and then perform the actual commit;

  • by using the –interactive or –patch switches with the commit command to decide one by one which files or hunks should be part of the commit in addition to contents in the index, before finalizing the operation. See the “Interactive Mode” section of git-add[1] to learn how to operate these modes.

逆向操作(undo)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
git add                 # 加入index
git reset –mixed HEAD # 撤销index 对不,是checkout吗?

git commit #
git reset –soft HEAD~ # 撤销尚未push的commit

git add + git commit #


git push
push不支持撤销操作 # 如何撤销已经push的commit?

git push –force # 覆盖远程仓库提交历史(太狠)
# 参考 https://www.borfast.com/blog/2014/10/19/how-to-undo-a-git-push---force-and-undelete-things/
git rm file # 删除文件和index
git checkout HEAD file # 恢复文件和index (index中已经没有该文件的信息,只能从仓库的HEAD中恢复文件)

git rm -r dir # 删除整个目录及相应index
git checkout HEAD dir # 恢复

git add −p
git reset −p

git stash
git stash pop

两个git add 会怎样?会merge为一个吧?git add + rm 前面的add的changes就完全丢了吧?

If you don’t have uncommited changes for removed files, the

如何撤销已经push的commit?

如何撤销已经force push的commit?

https://www.borfast.com/blog/2014/10/19/how-to-undo-a-git-push---force-and-undelete-things/

Reset

关于该图的改进

  • 捡重要的命令放 (init clone不要放)
  • 布局,整体,有点丑

待看

https://github.com/geeeeeeeeek/git-recipes/blob/master/sources/%E6%A3%80%E5%87%BA%E4%BB%A5%E5%89%8D%E7%9A%84%E6%8F%90%E4%BA%A4.md

代码合并:Merge、Rebase 的选择
重写项目历史
常见工作流比较

参考

待续

Gist 从入门到精通到放弃

gist简介

官方描述

Gists are a great way to share your work. You can share single files, parts of files, or full applications.

关键词: share, single, parts。gist的定位就在这几个词里。

详解

  • 为了强调singleparts,gist对git进行阉割,禁用了directory功能。(貌似还禁用了pull功能)
  • 为了强调share,在原来Clone的基础上,额外引入了EmbedShare两个功能。其中Embed(嵌入)实现了仅通过一行JS就能分享到网站(share your work in your website)
  • 既然要share,那就不能没有feedback,这就像作presentation有问答环节一样。于是加入了comments功能。

Gist背后的Git库

创建的每一个Gist的背后都对应着一个Git版本库

gist 推荐用法

推荐用法

  1. 不宜用Gist
    • 含图片等文件的项目

      因为Gist不支持directory,file&image最好放在其他地方。

      最省事的方法:1. 在comment里upload image 2. 在gist doc中引用 3. 删除1中的comment
    • 多个文件的项目
  2. 先在comments里写好doc
    • 主doc不支持markdown preview
    • 主doc有提交慢。因为主doc具有版本管理功能,comments不需要。所以频繁改动状态的doc也最好在comments里写,成形后再放入repo。
  3. 用embed js的方式发布gist
    • 解决了多个blog的同步问题
    • 节省blog服务器存储空间
  4. host站点不支持嵌入js怎么办?
    • 知乎、博客、github.io都不支持js
  5. 存放ipynb文件
    • ipynb一般也是单文件程序(教程),很适合用gist来管理

禁忌用法
两个终端同时修改同一个comment,会已最后提交的为准,有内容丢失的风险(不可逆)。

gist 代码片段用法

片段的优势体现在

  • embed。比如一篇博客里面,要贴个代码片段,可直接引用gist。
  • 据说搜索也有优势

gistBox / cacher 用法

技巧

文件排序: 根据文件名的ascii排序,数字> 大写> 小写
快捷键:用Ctrl或者Cmd按着鼠标多处点击进行多选!用中键或者alt进行拖动实现拉选!

缺陷

  • 主doc不能preview
  • gist embed方式嵌入页面,样式固定,不能自适应网站主题。另外背景是白色,不能融入网站的主题背景。
    -

疑问

为什么要偏要对gist设置private和anonymous?git和wiki却没有,设计初衷是什么?

为什么gist不开放directory?
阉割了这个功能,图片等raw文件就不适宜放在gist了

gist不提供Pull Request功能?

类似组件

bitbucket的Snippets。 不提供embed嵌入方式

reference

利用Github Pages搭建独立域名的个人博客

购买域名

阿里云-万网 或其他供应商

了解更多域名

域名解析 (xusong.vip –> xu-song.github.io)

域名注册完成后首先需要做域名解析,域名解析就是把域名指向网站所在服务器的IP,让人们通过注册的域名可以访问到网站。

配置DNS解析

进入你的阿里云DNS解析,选择你想要解析的域名,点击后面的解析。如下图所示:
dns

We recommend you change this to a CNAME record pointing at [YOUR USERNAME].github.io.
Github Help

Github建议采用CNAME记录,为什么?

因为IP有可能会变动,导致A记录失效吗?不是,是因为所有Github Pages共用ip,Github后台是根据host定位www目录的。详见Github Pages原理

阿里云建议采用A记录

因为A记录限制最少,最灵活,多条不会冲突

参考
DNS解析-解析记录

重定向(xu-song.github.io –> xusong.vip)

配置github pages的custom domain

进入你的github pages的仓库,然后在设置里面将的你的域名的地址,添加到custom domain中,然后保存即可。如下图所示:

default

这里是对github.io做了重定向,会重定向到所配置的站点。也可以随便填写一个站点,比如www.baidu.com,也会重定向过去

细心的同学会发现,配置custom domain后github仓库的根目录多了一个CNAME文件,里面正式刚刚配置的域名地址。

重新deploy,你会发现github page的domain设置又被改回去了,肿么办?

原因是,hexo deploy时会采用git push --force。如果deploy版本没有CNAME文件,则会强制删除3.1中添加的CNAME文件,导致custom domain失效。

因此,最佳的方式是我们手动添加CNAME文件来设置domain。在source目录下新建CNAME文件,内容是xusong.vip。这样每次deploy会自动完成步骤3.1

思考

  • 为什么还要再github仓库中设置?dns解析不是已经做了重定向了吗。指向ip:80端口还不够吗?
  • 每个账号的gitpage都是独立的IP吗?github怎么这么多独立外网IP?还是不同账号共用IP?
  • 不同github page共享ip 正因为如此,才需要步骤3的设置。
  • 配置github pages的custom domain,其作用仅仅是xu-song.github.io --> xusong.vip (重定向)吗?

思考题 - 答疑

DNS解析之“记录类型”

简介

域名与IP之间的对应关系,称为”记录”(record)。根据使用场景,”记录”可以分成不同的类型(type)。

资源记录(RR: Resource Record):

域名服务器记录类型列表 - 维基百科

常见的DNS记录类型

参考

1
2
3
4
5
6
7
8
9
10
11
A:      将域名指向一个IPV4地址  #
CNAME: 将域名指向另外一个域名 # 将域名指向另一个域名,再由另一个域名提供IP地址
AAAA: 将域名指向一个IPV6地址 # 当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录。
NS: 将子域名指向其他DNS服务器解析 # 如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
MX: 将域名指向邮件服务器地址 # 如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。
SRV: 记录提供特定服务的服务器
显性URL: 将域名302重定向到另外一个地址
隐性URL: 与显性URL类似,但是会隐藏真实目标地址
SOA记录: Start of Authority,始授权机构记录。NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器。SOA 资源记录表明此 DNS 名称服务器是为该 DNS 域中的数据的信息的最佳来源。
PTR: 逆向查询记录(Pointer Record),只用于从IP地址查询域名,
...

万网域名解析为什么没有301重定向?

URL 重定向服务实际并非DNS 服务,它们在 HTTP 级别运行,而非 DNS 级别。使用URL转发的客户基本都是免费DNS的用户,当前业务暂不会投入支持。

优先级

  • 单独设置的域名解析优先级高于泛域名解析
  • NS记录优先于A记录。即,如果一个主机地址同时存在NS记录和A记录,则A记录不生效。这里的NS记录只对子域名生效。
  • A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效
  • MX记录可以通过设置优先级实现主辅服务器设置,“优先级”中的数字越小表示级别越高。也可以使用相同优先级达到负载均衡的目的

主机记录

主机记录就是域名前缀,常见用法有:

1
2
3
4
5
6
7
www: 解析后的域名为www.aliyun.com。
@: 直接解析主域名 aliyun.com。
*: 泛解析,匹配其他所有域名 *.aliyun.com。
mail: 将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。
二级域名: 如:abc.aliyun.com,填写abc。
手机网站: 如:m.aliyun.com,填写m。
显性URL: 不支持泛解析(泛解析:将所有子域名解析到同一地址)

  1. @和WWW是两个主机名,可以指向不同的IP(A记录)或域名(CNAME记录)
  2. 可以为一个主机添加多个A记录 (1. 实现负载均衡,2. 可配合解析路线进行智能解析)
  3. 一个主机配置了CNAME记录,就不能再为该主机配置其他任何记录 (为啥呢?) 见 记录冲突判断规则

负载均衡的实现:负载均衡(Server Load Balancing,SLB)是指在一系列资源上面动态地分布网络负载。负载均衡可以减少网络拥塞,提高整体网络性能,提高自愈性, 并确保企业关键性应用的可用性。当相同子域名有多个目标地址时,表示轮循,可以达到负载均衡的目的,但需要虚拟主机服务商支持。

解析路线

如果多个IP,搜索引擎线路

如果只有一个IP地址或CNAME域名,请务必选择【默认】。

1
2
3
默认: 必填!未匹配到智能解析线路时,返回【默认】线路设置结果。
世界: 向除中国大陆以外的其他国家和地区,返回设置的记录值。 # 可用于双线部署,
搜索引擎: 向搜索引擎爬虫的DNS,返回设置的记录值。

TTL

(Time to live 的缩写

TTL为缓存时间,数值越小,修改记录各地生效时间越快。万网DNS的默认值为600,表示600秒之内不用重新查询。

查看解析是否生效

怎样查看解析是否生效?

Windows 用户测试

修改域名解析,实际上是在域名解析服务商处修改域名解析记录。修改的解析记录是否在用户端生效,既受运营商递归 DNS 服务器的直接影响,也受域名解析服务商提供的权威 DNS 服务器的间接影响。

测试本地运营商递归 DNS 服务器是否生效

1
2
3
$ nslookup eson.org
服务器: ... # 一般返回的是最近的DNS服务器,
Address: ...

测试域名解析服务商的权威 DNS 服务器是否生效。测试方法如下:

1
$ nslookup eson.org dns25.hichina.com

Linux测试

dig 要检测的域名 @dns服务器地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ dig eson.org
; <<>> DiG 9.9.5-3ubuntu0.17-Ubuntu <<>> eson.org
;; global options: +cmd
;; Got answer: # 为什么0个answer?
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8309
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;eson.org. IN A

;; AUTHORITY SECTION: # 不应该啊,我已经改回阿里的name server了
eson.org. 3592 IN SOA hugh.ns.cloudflare.com. dns.cloudflare.com. 2027227883 10000 2400 604800 3600

;; Query time: 112 msec
;; SERVER: 9.0.146.50#53(9.0.146.50)
;; WHEN: Sun Mar 11 18:04:06 CST 2018
;; MSG SIZE rcvd: 99

以上部分是不是延迟问题,明天再试试。

(Update: 第二天测试,果然解析到了xu-song.coding.me. ANSWER: 15, AUTHORITY: 0,)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$ dig eson.org vip1.alidns.com
; <<>> DiG 9.9.5-3ubuntu0.17-Ubuntu <<>> eson.org vip1.alidns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23319
;; flags: qr rd ra; QUERY: 1, ANSWER: 15, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;eson.org. IN A

;; ANSWER SECTION: # 这个就对了。我采用的双线部署。国内走coding.net
eson.org. 600 IN CNAME xu-song.coding.me.
xu-song.coding.me. 60 IN A 103.72.147.211
xu-song.coding.me. 60 IN A 103.72.145.7
xu-song.coding.me. 60 IN A 23.91.101.50
xu-song.coding.me. 60 IN A 103.218.240.147
xu-song.coding.me. 60 IN A 36.255.221.66
xu-song.coding.me. 60 IN A 107.150.121.91
xu-song.coding.me. 60 IN A 107.150.121.231
xu-song.coding.me. 60 IN A 103.72.147.89
xu-song.coding.me. 60 IN A 103.14.35.185
xu-song.coding.me. 60 IN A 103.72.146.177
xu-song.coding.me. 60 IN A 36.255.220.102
xu-song.coding.me. 60 IN A 23.91.96.142
xu-song.coding.me. 60 IN A 23.91.97.251
xu-song.coding.me. 60 IN A 103.218.241.74

;; Query time: 682 msec
;; SERVER: 9.0.146.50#53(9.0.146.50)
;; WHEN: Sun Mar 11 18:05:55 CST 2018
;; MSG SIZE rcvd: 292

;; Got answer: # 为什么又有一个query & answer?
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52301
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;vip1.alidns.com. IN A

;; ANSWER SECTION: # 这是什么鬼?
vip1.alidns.com. 600 IN A 14.1.112.11
vip1.alidns.com. 600 IN A 140.205.29.113
vip1.alidns.com. 600 IN A 106.11.30.113
vip1.alidns.com. 600 IN A 116.211.173.151
vip1.alidns.com. 600 IN A 106.11.41.151
vip1.alidns.com. 600 IN A 140.205.1.1
vip1.alidns.com. 600 IN A 121.29.51.151
vip1.alidns.com. 600 IN A 140.205.228.51
vip1.alidns.com. 600 IN A 47.88.44.151

;; Query time: 389 msec
;; SERVER: 9.0.146.50#53(9.0.146.50)
;; WHEN: Sun Mar 11 18:05:56 CST 2018
;; MSG SIZE rcvd: 188

以上命令,第二天竟然变回了cloudflare的name server。why?

1
2
3
4
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...
AUTHORITY SECTION:
eson.org. 3600 IN SOA hugh.ns.cloudflare.com. dns.cloudflare.com.

过几天又变回来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$ dig eson.org dns25.hichina.com
; <<>> DiG 9.9.5-3ubuntu0.17-Ubuntu <<>> eson.org dns25.hichina.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18683
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;eson.org. IN A

;; AUTHORITY SECTION: # 这个也有延迟啊。什么情况?dns25.hichina.com与vip1.alidns.com什么区别?是不是有个根节点?
eson.org. 3404 IN SOA hugh.ns.cloudflare.com. dns.cloudflare.com. 2027227883 10000 2400 604800 3600

;; Query time: 115 msec
;; SERVER: 9.0.146.50#53(9.0.146.50)
;; WHEN: Sun Mar 11 18:07:14 CST 2018
;; MSG SIZE rcvd: 99

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31080
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns25.hichina.com. IN A

;; ANSWER SECTION:
dns25.hichina.com. 496 IN A 106.11.211.69
dns25.hichina.com. 496 IN A 106.11.211.59
dns25.hichina.com. 496 IN A 106.11.141.129
dns25.hichina.com. 496 IN A 106.11.141.119
dns25.hichina.com. 496 IN A 140.205.41.29
dns25.hichina.com. 496 IN A 140.205.41.19
dns25.hichina.com. 496 IN A 140.205.81.29
dns25.hichina.com. 496 IN A 140.205.81.19

;; Query time: 114 msec
;; SERVER: 9.0.146.50#53(9.0.146.50)
;; WHEN: Sun Mar 11 18:07:14 CST 2018
;; MSG SIZE rcvd: 174

以上这个部分,第二天测试竟然不变。为什么会采用cloudflare的DNS服务器呢?

过几天又变回了coding.me线路。

测试结果分析

如果递归 DNS 服务器和权威 DNS 服务器都未生效,表明域名确实没有添加成功。

如果递归 DNS 服务器未生效,权威 DNS 服务器已生效,表明域名刚添加不久,全球的递归 DNS 服务器未完全同步,需要等待域名配置的 TTL 时间后再次检测是否生效。如果某些个别的运营商递归 DNS 服务器依然未生效,很可能是你遇到了域名劫持或者 DNS 缓存投毒事件。

参考: https://www.alibabacloud.com/help/zh/doc-detail/58458.html

修改过 DNS 服务器,多长时间解析可以生效?

多长时间解析可以生效
要全球解析生效,得等上一会了,也可以先ping一下自己的设置对不对。阿里云域名服务的工作原理是,在你更新了域名解析之后,首先是阿里的万网云解析,然后传播到各大运营商的DNS服务器,刷新DNS缓存,至此你的域名可以被访问。

github中的git gist wiki区别

git gist wiki 区别

  • git: 这里指 github.com中的repo
  • gist: gist.github.com
  • wiki: github.com/ wiki

三者都是repo,都记录历史。详细对比如下

github repo gist wiki 注解
markup支持 .md .textile .org .rst .wiki … 同上 同上
previw_所见即所得 × 可在gist的comment中preview
MathJax × × × gitpage支持
private space 收费 gist的private repo不能设置密码。不知道搜索引擎能不能搜到
anonymous × × Gist提供匿名发布,有时候被用来议论政府,政府害怕所以给墙掉了(DNS污染)
directory × gist是平行文档(一般只一个page),不支持子目录
fork & clone
comments × × issue可视为git和wiki的comments,
多人协作
直接用途、设计思想 代码版本管理、协作 分享代码片断 写文档 snippet什么用?
博客 github.io gist的embed方式很适合博客,但是多数网站不支持嵌入js
搜索引擎友好性 gist 在google搜索的 rank较高(据说)
缺点 不易归类

其他特征

  • gist_comment ≈ git_issue (issue多支持了几种附件类型而已)
  • GitHub Pages. 这个除了展示静态的网页(网站)之外并没有什么神奇的功能。它对各种文本文档的渲染支持, 比如 .md, .rst, .org 等.

gitpage

官方定义:

GitHub Pages is deeply integrated with Jekyll, a popular static site generator designed for blogging and software documentation, but used for much more.

  • github markdown 不支持动态js。
  • gitpages 不支持动态语言,什么意思?不支持js?还是不支持restapi,数据库,不支持UGC(评论,在线写博客)

注意区别这俩。markdown是连js都不支持。gitpage支持了js,但不支持backend

Github Pages托管静态博客-原理浅析

关于github提供的http server

ping 几个不同账号的gitpage(比如colah.github.io,xu-song.github.io),发现对应的是同一个ip。为什么返回的页面不同呢?

github pages 的 CNAME 是绑定 pages.github.io,不是${username}.github.io

coding.net 的 CNAME 是绑定 pages.coding.me

显然,Github肯定在后台做了处理。即github自身会维护一个映射,host_name --> www_path,这样就可以根据不同的host信息返回不同的html了。

这样,在访问xu-song.github.io时github就找到了该返回的html。

关于custom domain

现在我们改用custom domain的方式访问gitpage主页。假设已经配置好了dns的A记录映射。
访问xusong.vip,dns解析得到ip地址。然而这次github服务器得到的host是xusong.vip。懵逼了,github不认识xusong.vip(host数据里没有该记录),返回404页面

怎么办呢?

那就让github认识一下xusong.vip,也就是在github page里设置一下custom domain,或者添加CNAME文件,详见用Github Pages搭建独立域名的个人博客

  • 如果DNS设置CNAME记录,是不是github page不用设置就能work?

那么上一篇中的重重疑点也就解开了

  • 每个账号的gitpage都是独立的IP吗?github怎么这么多独立外网IP?还是不同账号共用IP?
    • 很多账号是同一个ip。
  • 不同github page共享ip 正因为如此,才需要步骤3的设置。
  • 配置github pages的custom domain,其作用仅仅是xu-song.github.io --> xusong.vip (重定向)吗?
    • 不是。1. 查dns解析是否通过 2. 部署到github服务器的相应目录(因为) 3. github page到domain的重定向

关于https

为什么Github Pages不支持为自定义域名添加SSL证书?

https://steffan.cn/2017/03/22/use-cloudflare-to-implement-HTTPS-for-GithubPages-with-custom-domain-names/

多个域名能否指向同一个 GitHub Pages?

GitHub Pages 的官方文档,一个 username.github.io 只能支持一个域名。

coding page支持多个域名。

一个账号能否见多个github page?

可以建立多个, 个人账户page只能有一个, 项目page可以有多个

比如你的账号名为 username, 项目叫 project1 那你可以通过 username.github.io/project1 访问, 如果配置了个人域名就可以用自己的域名访问了

但是CNAME不能指向username.github.io/project1,怎么办?

todo

  • 如何解决md同步问题?
    • git-repo源,gist源,git issue源,gitpage源。最优的方式就是同源 + 自动deploy。
    • 方式一:以issue作源,要自己利用github api,读取issue,然后写到source目录(貌似也挺简单)。
    • 方式二:以git-repo作源,貌似不错哎。单独把source目录单独作为repo
    • 方式三:以gist作源:易集成(一行js即可),但不易管理(不支持directory,文档多了很麻烦)
  • 如何实现在线写blog,像wordpress那样
    • 用js调用github api,或者其他后台api即可

google云主机---GCE

简介

GCP 免费方案
送您 $300 赠金和 12 个月免费试用期,帮助您顺利上手。更有“始终免费”产品助您一路前行。 随时可能更改
default

只要绑定信用卡就送300刀,能免费用一年

GCP控制台

开通

google云只支持以下几种信用卡。不支持中国银联
2: masterCard
3: 美国运通或JCB
4:: visa
5:mastercard

开通后,消费1美元,是什么意思? (先消费1美元,再撤销1美元)

价格& 配置

综述:GCE是主机部分按时间计费的,网络部分是按流量计费的,跟AWZ一样
(与cpu和内存使用率无关,那就可劲用吧)
(时间是使用时间,还是申请时间?关机算时间吗?关机不收费,那可以多开几个vm)
(流量是怎么算?下载conda,软件包也算流量?)

GCE 的价格比较亲民,最低配 1 共享核-0.6 GB 内存-10GB HDD 每月只需要不到 5 美元,而且由于 CPU、内存大小和磁盘大小都是可调的,所以可以根据自己的需要去购买最适合的,能省去不必要的开销。

GCE服务内容 估算费用 折扣 总计 备注
1 个共享 vCPU + 0.6 GB 内存 $5.55/月 - $1.66/月 $4.28/月 内存小了点
1 个共享 vCPU + 1.7 GB 内存 $19.71/月 - $5.91/月 $14.20/月
1 个 vCPU + 3.75 GB 内存 $34.67/月 - $10.40/月 $24.67/月
2 个 vCPU + 7.5 GB 内存 $69.35/月 - $20.81/月 $48.95/月
..
10 GB 标准永久性磁盘 $0.40/月
1 个 GPU NVIDIA Tesla K80 $328.50/月 - $108.95/月 $254.62/月 1. 共享 vCPU 不支持 GPU
1 个 GPU NVIDIA Tesla P100 $1,065.80/月 - $330.14/月 $770.73/月 2. 简直敲诈,不如自己买。另外仅特定区域才有GPU支持

不同地区价格有差异,美国服务器价格最便宜,亚洲欧洲比美国本土贵点。

可用性策略

  • 抢占:该模式能够获得更低廉的价格,但是不能用做需要长期保持在线的服务(比如 Web 服务),它最长的使用期限是 24 小时,然而在我的使用中,它有时候不到 1 小时就会被终止使用。它只适合短时间去计算一些东西,计算完后中止它,平常的一般使用不要开启此功能。
  • 自动重启:推荐开启,以获得在云端的好处,以及更好的 Uptime
  • 主机维护期间:推荐选择 “迁移”,原因同上
  • IP 转发:建议关闭,几乎不会用得着此功能,关闭有助于提高安全性
  • SSH:这可能不同于其他一些 VPS,它默认不自动生成用户密码,所以为了远程登录必须配置好公钥私钥。而且所填写的公钥末尾的用户名是有作用的,所填写的用户名就是所需要登录的用户名,默认不支持 root 登陆,除非你将用户名设置成了 root。

流量
流量的话对于所有的可用区,连中国大陆 $0.23/Gbyte、美欧地区 $0.12/Gbyte,流量的价格有些小贵,但是如果是连接 Google 自己的服务的话(包括但不限于 Gmail、YouTube),流量不计费(但是流量是双向的,所以是本地通过 GCE 上传完全免费,下载还是原价)。
流量另算钱,起步50g,因此最低配只要不超流量就可以用上一年。

GCE 还有一点比较特殊的是它是按分钟计费的,当服务处于终止状态(相当于关机,磁盘数据保留)时,不收取费用(除了少量的磁盘使用费用)。每次计算 Uptime 时,如果不到 10 分钟则一律按十分钟算,超过 10 分钟后才是真正的按分钟计费,不过还是很划算了

ssh 登录

首先在浏览器窗口中打开ssh

default

  1. 创建实例后设置当前用户的新密码
1
2
$ sudo passwd ${whoami} // 下面以 user 代替 ${whoami}
# 输入新密码

设置下 root 的新密码

1
2
$ sudo passwd root
# 输入新密码

在本地生成私钥和公钥

复制公钥

导入公钥到google VM
方法一:

1
2
进入谷歌云平台页面 -> 计算引擎 -> 元数据 -> SSH 密钥,粘贴保存
谷歌就会把上面这段 public key 写入到 ~/.ssh/authorized_keys

1
$ cat ~/.ssh/authorized_keys

cat ~/.ssh/authorized_keys文件,检查是否已经存在了刚刚的公钥

如果不work。就手动生成这个文件,然后拷贝public key

本地通过 SSH 密码验证登录

用途

VPS

代理

web应用主机

GCE 云主机

google computer engine

Compute Engine 可让您使用在 Google 基础架构上运行的虚拟机。从微型 VM 到运行 Debian、Windows 或其他标准映像的大型虚拟机一应俱全。创建您的第一个 VM 实例并通过 CloudEndure 迁移服务导入该实例,或通过快速入门指南构建示例应用。

据说GCE 在国内经常不稳定

GCE 的后台配置页面虽不能在中国访问,但是其 GCE 实例是可以在中国访问的。(什么意思?)

评价

速度超快,下载tensorflow 116MB/s

reference

https://guozeyu.com/2016/10/asia-google-compute-engine/
SSH 连接配置

app engine 云应用

谷歌云平台