aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclarkzjw <[email protected]>2018-01-18 05:45:32 +0000
committerclarkzjw <[email protected]>2018-01-18 05:45:32 +0000
commite86bd1e4e9e31a4582a6a130f90c44f022a9afd3 (patch)
tree412f0e53e17040d332ee1f755294aa8f93eddc3d /_posts/2018/01
parentfd0afd9e9e9e8b87cf16ac5ae4cb0ab6be6b494d (diff)
downloadblog.jinwei.me-e86bd1e4e9e31a4582a6a130f90c44f022a9afd3.tar.gz
Thu Jan 18 05:45:32 UTC 2018
Diffstat (limited to '_posts/2018/01')
-rw-r--r--_posts/2018/01/new-blog.html431
1 files changed, 238 insertions, 193 deletions
diff --git a/_posts/2018/01/new-blog.html b/_posts/2018/01/new-blog.html
index ad472b7..da19248 100644
--- a/_posts/2018/01/new-blog.html
+++ b/_posts/2018/01/new-blog.html
@@ -1,198 +1,243 @@
1 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6<html xmlns="http://www.w3.org/1999/xhtml"> 2<html xmlns="http://www.w3.org/1999/xhtml">
7 <head> 3 <head>
8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
9 <title>又一个新的博客 &#8212; Hello World</title> 5 <title>
10 <link rel="stylesheet" href="../../../_static/alagitpull.css" type="text/css" /> 6 又一个新的博客 — Hello World
11 <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> 7 </title>
12 <link rel="stylesheet" href="../../../_static/flexboxgrid.min.css" type="text/css" /> 8 <link href="../../../_static/alagitpull.css" rel="stylesheet" type="text/css"/>
13 <link rel="stylesheet" href="../../../_static/git-pull.css" type="text/css" /> 9 <link href="../../../_static/pygments.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript"> 10 <link href="../../../_static/flexboxgrid.min.css" rel="stylesheet" type="text/css"/>
15 var DOCUMENTATION_OPTIONS = { 11 <link href="../../../_static/git-pull.css" rel="stylesheet" type="text/css"/>
16 URL_ROOT: '../../../', 12 <script type="text/javascript">
17 VERSION: '0.0', 13 var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../', VERSION: '0.0', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt' };
18 COLLAPSE_INDEX: false, 14 </script>
19 FILE_SUFFIX: '.html', 15 <script src="../../../_static/jquery.js" type="text/javascript">
20 HAS_SOURCE: true, 16 </script>
21 SOURCELINK_SUFFIX: '.txt' 17 <script src="../../../_static/underscore.js" type="text/javascript">
22 }; 18 </script>
23 </script> 19 <script src="../../../_static/doctools.js" type="text/javascript">
24 <script type="text/javascript" src="../../../_static/jquery.js"></script> 20 </script>
25 <script type="text/javascript" src="../../../_static/underscore.js"></script> 21 <link href="../../../_static/favicon.ico" rel="shortcut icon"/>
26 <script type="text/javascript" src="../../../_static/doctools.js"></script> 22 <link href="../../../genindex.html" rel="index" title="Index"/>
27 <link rel="shortcut icon" href="../../../_static/favicon.ico"/> 23 <link href="../../../search.html" rel="search" title="Search"/>
28 <link rel="index" title="Index" href="../../../genindex.html" /> 24 <link href="../../../_static/custom.css" rel="stylesheet" type="text/css"/>
29 <link rel="search" title="Search" href="../../../search.html" /> 25 <meta content="width=device-width, initial-scale=0.9, maximum-scale=0.9" name="viewport"/>
30 26 </head>
31 <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" /> 27 <body>
32 28 <div class="document">
33 29 <div class="documentwrapper">
34 <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> 30 <div class="bodywrapper">
35 31 <div class="body" role="main">
36 </head> 32 <div class="section" id="newblog">
37 <body> 33 <span id="id1">
38 34 </span>
39 35 <h1>
40 36 又一个新的博客
41 <div class="document"> 37 <a class="headerlink" href="#newblog" title="Permalink to this headline">
42 <div class="documentwrapper"> 38
43 <div class="bodywrapper"> 39 </a>
44 <div class="body" role="main"> 40 </h1>
45 41 <table class="docutils field-list" frame="void" rules="none">
46 <div class="section" id="newblog"> 42 <colgroup>
47<span id="id1"></span><h1>又一个新的博客<a class="headerlink" href="#newblog" title="Permalink to this headline">¶</a></h1> 43 <col class="field-name"/>
48<table class="docutils field-list" frame="void" rules="none"> 44 <col class="field-body"/>
49<col class="field-name" /> 45 </colgroup>
50<col class="field-body" /> 46 <tbody valign="top">
51<tbody valign="top"> 47 <tr class="field-odd field">
52<tr class="field-odd field"><th class="field-name">Publish Date:</th><td class="field-body">2018-01-15</td> 48 <th class="field-name">
53</tr> 49 Publish Date:
54</tbody> 50 </th>
55</table> 51 <td class="field-body">
56<p>前段时间有朋友和我抱怨博客加载速度太慢了(。之前的博客架在Blogger上,为了让排版稍微美观一些,找了一个第三方的主题,加载了许多外部的 52 2018-01-15
57资源,导致网页载入速度非常慢。虽然我自己对于网站在国内的加载速度毫不在意,但是既然还有读者(少的可怜)在看,以及在这极少的读者中有用 53 </td>
58户提出了这个问题,那就得解决。前段时间无意中看到一个博客( <a class="reference external" href="https://www.git-pull.com/index.html">git-pull</a> ),觉得主题简洁而又美观,于是开始 54 </tr>
59着手改造自己的博客。</p> 55 </tbody>
60<p>这次用了「大名鼎鼎」的 <a class="reference external" href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> ,一个软件开发过程中的文档生成工具来作为博客的静态网页生成引擎。 56 </table>
61上手Sphinx非常简单,sphinx-quickstart这个工具和一般的博客生成器一样,集成了很多功能,把Makefile都写好了,可以说是完全开箱即用了。 57 <p>
62Sphinx的默认主题是 <a class="reference external" href="https://alabaster.readthedocs.io/en/latest/">Alabaster</a> ,现在你看到的这个主题就是在Alabaster上修改而来的。</p> 58 前段时间有朋友和我抱怨博客加载速度太慢了(。之前的博客架在Blogger上,为了让排版稍微美观一些,找了一个第三方的主题,加载了许多外部的资源,导致网页载入速度非常慢。虽然我自己对于网站在国内的加载速度毫不在意,但是既然还有读者(少的可怜)在看,以及在这极少的读者中有用户提出了这个问题,那就得解决。前段时间无意中看到一个博客(
63<p>Sphinx的文档书写采用的是*.rst格式的文本,即 <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> ,而不是Markdown。相比 59 <a class="reference external" href="https://www.git-pull.com/index.html">
64之前,rst比Markdown的语法更加丰富/复杂,同时也提供了更加丰富的功能和可扩展性(虽然我估计我只能用到其中的20%甚至更少啦)。不清楚rst和 60 git-pull
65Emacs社区的 <a class="reference external" href="https://orgmode.org/">Org Mode</a> 相比哪一个的语法更加复杂呢。(</p> 61 </a>
66<p>建设博客离不开几件事情。首先当然就是部署运维啦。Sphinx通过Makefile可以生成静态html网页,托管静态html最方便的地方当然是GitHub Pages啦。 62 ),觉得主题简洁而又美观,于是开始着手改造自己的博客。
67最简单粗暴的方法是在本地的环境中写完rst文本,然后本地 make html 通过之后,将html推送到GitHub Pages中。但是这种方式的移植性不高,想写 63 </p>
68博客的话必须坐在自己的电脑前,同时依然存在一些手动的工作。所以当然选择Docker啦。但是这次用Docker的姿势和以往不同。平时我们用Docker的时候 64 <p>
69最终都是想要得到docker build的产物docker image,然后由image来进行部署。但是我们这次的目标是GitHub Pages,没法部署容器。所以我在 65 这次用了「大名鼎鼎」的
70Dockerfile中生成静态html网页,然后在构建的过程中将静态网页push到repo的gh-pages分支中。当然其实不用Docker也能做到这一点。写一个脚本, 66 <a class="reference external" href="http://www.sphinx-doc.org/en/stable/">
71然后在CI平台上执行脚本也行,就不做优劣对比了。</p> 67 Sphinx
72<p>值得一提的是,Docker在17.05-ce版本之后引入了multi stage build的功能,可以在Dockerfile中FROM多个基础镜像,在下一个stage可以直接使用 68 </a>
73之前stage构建出的产物。以我的博客这个项目为例。假如我是想通过image来部署,那么我最终的产物是静态html文件,那么我可能需要一个nginx的基础 69 ,一个软件开发过程中的文档生成工具来作为博客的静态网页生成引擎。上手Sphinx非常简单,sphinx-quickstart这个工具和一般的博客生成器一样,集成了很多功能,把Makefile都写好了,可以说是完全开箱即用了。Sphinx的默认主题是
74镜像。nginx:alpine 这个基础镜像很小,不到10MB,在Dockerfile里面将html文件COPY进去之后,最终得到的image也只有10MB左右的大小。但是 70 <a class="reference external" href="https://alabaster.readthedocs.io/en/latest/">
75之前我们为了得到静态html文件,可能得选用一个python的基础镜像,然后再apt/apk安装一些必要的编译工具,最终只是为了几百kb的html文件,但是 71 Alabaster
76构建的镜像已经上百MB了。有了multi stage build之后,这个问题便非常好地被解决了。看了下面的Dockerfile之后,整体思路就非常清晰了。目前我 72 </a>
77在本地写完rst文本,然后git push之后,CircleCI会自动进行Dockerfile的构建,然后将编译生成的静态html推送到gh-pages分支。</p> 73 ,现在你看到的这个主题就是在Alabaster上修改而来的。
78<div class="highlight-bash"><div class="highlight"><pre><span></span>FROM python:3.6.0 as builder 74 </p>
79LABEL <span class="nv">maintainer</span><span class="o">=</span>clarkzjw&lt;[email protected]&gt; 75 <p>
80RUN pip install virtualenv 76 Sphinx的文档书写采用的是*.rst格式的文本,即
81COPY requirements.txt /app/requirements.txt 77 <a class="reference external" href="http://docutils.sourceforge.net/rst.html">
82COPY bootstrap.py /app/bootstrap.py 78 reStructuredText
83RUN /app/bootstrap.py 79 </a>
84ADD . /app 80 ,而不是Markdown。相比之前,rst比Markdown的语法更加丰富/复杂,同时也提供了更加丰富的功能和可扩展性(虽然我估计我只能用到其中的20%甚至更少啦)。不清楚rst和Emacs社区的
85WORKDIR /app 81 <a class="reference external" href="https://orgmode.org/">
86RUN /bin/bash -c <span class="s2">&quot;source /app/.venv/bin/activate &amp;&amp; make html &amp;&amp; make rss &amp;&amp; cp rss.xml _build/html&quot;</span> 82 Org Mode
87 83 </a>
88 84 相比哪一个的语法更加复杂呢。(
89FROM alpine:latest 85 </p>
90RUN sed -i <span class="s1">&#39;s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g&#39;</span> /etc/apk/repositories 86 <p>
91RUN apk add --update git openssh-client <span class="o">&amp;&amp;</span> rm -rf /var/cache/apk/* 87 建设博客离不开几件事情。首先当然就是部署运维啦。Sphinx通过Makefile可以生成静态html网页,托管静态html最方便的地方当然是GitHub Pages啦。最简单粗暴的方法是在本地的环境中写完rst文本,然后本地 make html 通过之后,将html推送到GitHub Pages中。但是这种方式的移植性不高,想写博客的话必须坐在自己的电脑前,同时依然存在一些手动的工作。所以当然选择Docker啦。但是这次用Docker的姿势和以往不同。平时我们用Docker的时候最终都是想要得到docker build的产物docker image,然后由image来进行部署。但是我们这次的目标是GitHub Pages,没法部署容器。所以我在Dockerfile中生成静态html网页,然后在构建的过程中将静态网页push到repo的gh-pages分支中。当然其实不用Docker也能做到这一点。写一个脚本,然后在CI平台上执行脚本也行,就不做优劣对比了。
92WORKDIR /html 88 </p>
93ENV <span class="nv">COMMIT_USER</span><span class="o">=</span><span class="s2">&quot;clarkzjw&quot;</span> 89 <p>
94ENV <span class="nv">COMMIT_EMAIL</span><span class="o">=</span><span class="s2">&quot;[email protected]&quot;</span> 90 值得一提的是,Docker在17.05-ce版本之后引入了multi stage build的功能,可以在Dockerfile中FROM多个基础镜像,在下一个stage可以直接使用之前stage构建出的产物。以我的博客这个项目为例。假如我是想通过image来部署,那么我最终的产物是静态html文件,那么我可能需要一个nginx的基础镜像。nginx:alpine 这个基础镜像很小,不到10MB,在Dockerfile里面将html文件COPY进去之后,最终得到的image也只有10MB左右的大小。但是之前我们为了得到静态html文件,可能得选用一个python的基础镜像,然后再apt/apk安装一些必要的编译工具,最终只是为了几百kb的html文件,但是构建的镜像已经上百MB了。有了multi stage build之后,这个问题便非常好地被解决了。看了下面的Dockerfile之后,整体思路就非常清晰了。目前我在本地写完rst文本,然后git push之后,CircleCI会自动进行Dockerfile的构建,然后将编译生成的静态html推送到gh-pages分支。
95ARG <span class="nv">GIT_TOKEN</span><span class="o">=</span><span class="s2">&quot;&quot;</span> 91 </p>
96RUN git config --global user.email <span class="nv">$COMMIT_EMAIL</span> <span class="o">&amp;&amp;</span> git config --global user.name <span class="nv">$COMMIT_USER</span> 92 <embed/>
97RUN git clone https://clarkzjw:<span class="nv">$GIT_TOKEN</span>@github.com/clarkzjw/blog.jinwei.me.git /html <span class="o">&amp;&amp;</span> git checkout gh-pages 93 <script src="https://gist.github.com/clarkzjw/0cb4e15794a5a132b12df9741e0cc1e0.js">
98COPY --from<span class="o">=</span>builder /app/_build/html /html 94 </script>
99RUN <span class="nb">echo</span> <span class="s2">&quot;`date`&quot;</span> &gt; /html/.lastmodify <span class="o">&amp;&amp;</span> git add -A <span class="o">&amp;&amp;</span> git commit -m <span class="s2">&quot;`date`&quot;</span> <span class="o">&amp;&amp;</span> git push origin gh-pages 95 <p>
100 96 另外一个问题是博客的RSS。由于Sphinx最初的设计是作为一个文档生成工具,目前市面上有的和Sphinx结合的RSS生成工具大致有:
101 97 </p>
102FROM nginx:alpine 98 <ul class="simple">
103COPY --from<span class="o">=</span>builder /app/_build/html /usr/share/nginx/html 99 <li>
104</pre></div> 100 Sphinx-contrib模块中的
105</div> 101 <a class="reference external" href="https://bitbucket.org/birkenfeld/sphinx-contrib/src/tip/feed/">
106<p>另外一个问题是博客的RSS。由于Sphinx最初的设计是作为一个文档生成工具,目前市面上有的和Sphinx结合的RSS生成工具大致有:</p> 102 feed
107<ul class="simple"> 103 </a>
108<li>Sphinx-contrib模块中的 <a class="reference external" href="https://bitbucket.org/birkenfeld/sphinx-contrib/src/tip/feed/">feed</a></li> 104 </li>
109<li>在sphinxcontrib.feed基础上开发的 <a class="reference external" href="https://github.com/junkafarian/sphinxfeed">sphinxfeed</a></li> 105 <li>
110<li>以及更新一点的 <a class="reference external" href="https://pypi.python.org/pypi/sphinxcontrib-newsfeed">sphinxcontrib-newsfeed</a></li> 106 在sphinxcontrib.feed基础上开发的
111</ul> 107 <a class="reference external" href="https://github.com/junkafarian/sphinxfeed">
112<p>其中sphinxcontrib.feed和sphinxfeed的功能性更新都停止在2011年,不兼容Python 3,GitHub上有几个fork,但是也基本没有太多的改进。至于 108 sphinxfeed
113sphinxcontrib-newsfeed,并不能生成符合RSS规范的输出。。。所以只好自己简单粗暴造一个轮子了!(至少生成的xml能被RSS阅读器认识。。。</p> 109 </a>
114<p>RSS 订阅地址是 <a class="reference external" href="https://blog.jinwei.me/rss">https://blog.jinwei.me/rss</a></p> 110 </li>
115<p>至于评论嘛。虽然博客流量小,2017年下来一年也没有10条评论,但是作为一个博客,这个功能还是必须得有!考察了目前市面上的评论方案,Disqus现在 111 <li>
116差不多可以算是一家独大了。但是十分不喜欢Disqus。一个页面要加载的无关的数据太多了。然后看到了 <a class="reference external" href="https://github.com/posativ/isso">Isso</a> , 第一印象还不错,但是需要自己单独部 112 以及更新一点的
117署。为了一年10条评论不到的数量级单独部署似乎成本略高。之前还见到了 <a class="reference external" href="https://staticman.net">Staticman</a> , 但是这个方案和GitHub的issue绑定,一个博客实例对应 113 <a class="reference external" href="https://pypi.python.org/pypi/sphinxcontrib-newsfeed">
118GitHub的一个repo,然后每篇文章的评论对应这个repo中的issue。但是我不太能接受,毕竟不能强制每个评论的用户都有GitHub帐号。 114 sphinxcontrib-newsfeed
119今天无意中看到了 <a class="reference external" href="https://just-comments.com/">just-comments</a> , 也是一个SaaS解决方案,但是非常地极简,决定先用着试试效果。(</p> 115 </a>
120<p>下一步,打算在博客中加入 <a class="reference external" href="https://css.hanzi.co/">漢字標準格式</a> 这套排版框架。毕竟现在的页面排版看起来怪怪的,以及并不美观。(</p> 116 </li>
121</div> 117 </ul>
122 118 <p>
123 119 其中sphinxcontrib.feed和sphinxfeed的功能性更新都停止在2011年,不兼容Python 3,GitHub上有几个fork,但是也基本没有太多的改进。至于sphinxcontrib-newsfeed,并不能生成符合RSS规范的输出。。。所以只好自己简单粗暴造一个轮子了!(至少生成的xml能被RSS阅读器认识。。。
124 <div class="just-comments" 120 </p>
125 data-allowguests="true" 121 <p>
126 data-apikey="4bb18080-e236-4513-bd72-3a032f35d3bb"> 122 RSS 订阅地址是
127 </div> 123 <a class="reference external" href="https://blog.jinwei.me/rss">
128 <script async defer src="https://just-comments.com/w.js"></script> 124 https://blog.jinwei.me/rss
129 <script async defer src="https://buttons.github.io/buttons.js"></script> 125 </a>
130 <script async defer src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 126 </p>
131 </div> 127 <p>
132 </div> 128 至于评论嘛。虽然博客流量小,2017年下来一年也没有10条评论,但是作为一个博客,这个功能还是必须得有!考察了目前市面上的评论方案,Disqus现在差不多可以算是一家独大了。但是十分不喜欢Disqus。一个页面要加载的无关的数据太多了。然后看到了
133 </div> 129 <a class="reference external" href="https://github.com/posativ/isso">
134 <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> 130 Isso
135 <div class="sphinxsidebarwrapper"> 131 </a>
136<p class="logo"> 132 , 第一印象还不错,但是需要自己单独部署。为了一年10条评论不到的数量级单独部署似乎成本略高。之前还见到了
137 <a href="../../../index.html"> 133 <a class="reference external" href="https://staticman.net">
138 <img class="logo" src="../../../_static/img/terminal-icon.png" alt="Logo"/> 134 Staticman
139 135 </a>
140 </a> 136 , 但是这个方案和GitHub的issue绑定,一个博客实例对应GitHub的一个repo,然后每篇文章的评论对应这个repo中的issue。但是我不太能接受,毕竟不能强制每个评论的用户都有GitHub帐号。今天无意中看到了
141</p> 137 <a class="reference external" href="https://just-comments.com/">
142 138 just-comments
143 139 </a>
144 140 , 也是一个SaaS解决方案,但是非常地极简,决定先用着试试效果。(
145 141 </p>
146 142 <p>
147 143 下一步,打算在博客中加入
148 144 <a class="reference external" href="https://css.hanzi.co/">
149 145 漢字標準格式
150<div class="relations"> 146 </a>
151<h3>Related Topics</h3> 147 这套排版框架。毕竟现在的页面排版看起来怪怪的,以及并不美观。(
152<ul> 148 </p>
153 <li><a href="../../../index.html">Documentation overview</a><ul> 149 </div>
154 </ul></li> 150 <div class="just-comments" data-allowguests="true" data-apikey="4bb18080-e236-4513-bd72-3a032f35d3bb">
155</ul>
156</div><h3>Projects</h3>
157
158<ul>
159 <li><a href="https://github.com/clarkzjw/Dehaze">Dehaze</a>
160 </li>
161 <li><a href="https://github.com/clarkzjw/GuidedFilter">GuidedFilter</a>
162 </li>
163 <li><a href="https://github.com/clarkzjw/LumberJack">LumberJack</a>
164 </li>
165 <li><a href="https://github.com/clarkzjw/one-two-three...infinity">one-two-three...infinity</a>
166 </li>
167 <li><a href="https://github.com/clarkzjw/nginx-proxy-google">nginx-proxy-google</a>
168 </li>
169 <li><a href="https://github.com/clarkzjw/brainfuck">brainfuck</a>
170 </li>
171</ul>
172
173<a class="github-button" href="https://github.com/clarkzjw" aria-label="Follow @clarkzjw on GitHub">Follow @clarkzjw</a>
174
175<a class="twitter-timeline" data-width="220" data-height="800" href="https://twitter.com/_clarkzjw">Tweets by
176 clarkzjw</a>
177
178 </div>
179 </div> 151 </div>
180 <div class="clearer"></div> 152 <script async="" defer="" src="https://just-comments.com/w.js">
153 </script>
154 <script async="" defer="" src="https://buttons.github.io/buttons.js">
155 </script>
156 <script async="" charset="utf-8" defer="" src="https://platform.twitter.com/widgets.js">
157 </script>
158 </div>
181 </div> 159 </div>
182 <div class="footer"> 160 </div>
183 &copy;2013 - 2018, clarkzjw. 161 <div aria-label="main navigation" class="sphinxsidebar" role="navigation">
184 162 <div class="sphinxsidebarwrapper">
185 | 163 <p class="logo">
186 Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.6</a> 164 <a href="../../../index.html">
187 &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.10</a> 165 <img alt="Logo" class="logo" src="../../../_static/img/terminal-icon.png"/>
188 166 </a>
189 | 167 </p>
190 <a href="../../../_sources/_posts/2018/01/new-blog.rst.txt" 168 <div class="relations">
191 rel="nofollow">Page source</a> 169 <h3>
170 Related Topics
171 </h3>
172 <ul>
173 <li>
174 <a href="../../../index.html">
175 Documentation overview
176 </a>
177 <ul>
178 </ul>
179 </li>
180 </ul>
181 </div>
182 <h3>
183 Projects
184 </h3>
185 <ul>
186 <li>
187 <a href="https://github.com/clarkzjw/Dehaze">
188 Dehaze
189 </a>
190 </li>
191 <li>
192 <a href="https://github.com/clarkzjw/GuidedFilter">
193 GuidedFilter
194 </a>
195 </li>
196 <li>
197 <a href="https://github.com/clarkzjw/LumberJack">
198 LumberJack
199 </a>
200 </li>
201 <li>
202 <a href="https://github.com/clarkzjw/one-two-three...infinity">
203 one-two-three...infinity
204 </a>
205 </li>
206 <li>
207 <a href="https://github.com/clarkzjw/nginx-proxy-google">
208 nginx-proxy-google
209 </a>
210 </li>
211 <li>
212 <a href="https://github.com/clarkzjw/brainfuck">
213 brainfuck
214 </a>
215 </li>
216 </ul>
217 <a aria-label="Follow @clarkzjw on GitHub" class="github-button" href="https://github.com/clarkzjw">
218 Follow @clarkzjw
219 </a>
220 <a class="twitter-timeline" data-height="800" data-width="220" href="https://twitter.com/_clarkzjw">
221 Tweets by clarkzjw
222 </a>
192 </div> 223 </div>
193 224 </div>
194 225 <div class="clearer">
195 226 </div>
196 227 </div>
197 </body> 228 <div class="footer">
229 ©2013 - 2018, clarkzjw. | Powered by
230 <a href="http://sphinx-doc.org/">
231 Sphinx 1.6.6
232 </a>
233 &amp;
234 <a href="https://github.com/bitprophet/alabaster">
235 Alabaster 0.7.10
236 </a>
237 |
238 <a href="../../../_sources/_posts/2018/01/new-blog.rst.txt" rel="nofollow">
239 Page source
240 </a>
241 </div>
242 </body>
198</html> \ No newline at end of file 243</html> \ No newline at end of file
Powered by cgit v1.2.3 (git 2.41.0)