Hexo 一键群发_Hexo Batch Deploy

Hexo 架构的博客可以很方便地发布到 Github 等,而且因为是纯 md 文件,同时转化为全静态的文件,因此可以非常方便地在不同站点间同步。 这不,原本架构在 Github 上的博客,但是 Github 毕竟速度比较慢一些,所以同时还架在 Gitcafe 上了,这样国内访问就快多了,要是有自己的域名加上 DNSpod 的一些设置,可以让国内国外的访客分别访问最快的服务器。 原本是写了个 cron 脚本自动 rsync 到不同的目录的,现在才发现 Hexo 本身就有一键群发的功能,只需要在 _config.yml 文件里面配置好多个网站 git 地址就好了:
For Batch deploy with Hexo, just configure _config.yml :

1
2
3
4
5
6
7
8
# Deployment
## Docs: http://zespia.tw/hexo/docs/deployment.html
deploy:
type: git
repo:
github: https://github.com/daxiawj/daxiawj.github.io.git
gitcafe: https://gitcafe.com/daxiawj/daxiawj.git,gitcafe-pages
bitbucket: https://daxiawj@bitbucket.org/daxiawj/daxiawj.bitbucket.org.git

其中,gitcafe: https://gitcafe.com/daxiawj/daxiawj.git,gitcafe-pages 基本格式是 标签: repo,[branch][branch] 默认是 master

当然,还可以添加 rsync 等同步方式,以同步到自建的 apache 或者 nginx 静态站点上,此处不再赘述。

OSX: can't open X11 display

由于苹果公司果断放弃了自己维护 X11.app,只能用 XQuatz 来替代。但是在使用 XQuartz 的过程中经常遇到一些问题,比如环境变量的设置问题。今天遇到一个问题就是,自己点击安装的 XQuartz.app 是能正常运行的,但是在终端里面使用 xeys、GrADS 等软件的时候报错:“can’’t open display”。

大部分情况下,如果正确安装了 XQuartz 但是遇到这个问题的话,很可能是配置文件没能正确地起作用。

If XQuartz were installed and you can launch it, while can’t launch it in terminal, then you may solve it by:

1
2
3
launchctl unload -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
reboot

Then it should work!.

问题解决。

testcode

C code rendered by system:

1
2
3
4
5
6
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello World");
}

C code rendered by vim:

/* Hello World program */
#include<stdio.h>
main()
{
     printf("Hello World");
}

Hexo建站并自定义步骤

前段时间稍微折腾了一下 Octopress,被其自由、强大的功能能所吸引,毅然决然地将博客搬到了 Octopress+Github 上。但随着博客数量的增多,其速度慢的弊端逐渐显现,这时候,基于nodejshexo闪电般地出现了,其速度简直是 blazingly fast。于是,不出所料地,又搬到了 hexo 上。

搭建 hexo 的博客也很简单,从 Octopress 的内容迁移也只需把当时 post 下面的 .md 文件移到 source/_post 下面即可。但功能上的完善还是需要一定的技巧的。

  • 安装 hexo

    首先,要有 node。Mac 可以 brew install node,Linux 则可以方便地 apt-get。安装好 node 以后,npm install hexo -g,搞定!

  • 创建并配置 hexo

    运行 hexo init myblog,然后修改其下的_config.yml 文件,自定义博客名等内容。

  • 启用 MathJax 支持数学公式编写

    1. 首先安装 hexo-math 插件
      npm install hexo-math --save
    2. 然后初始化
      hexo math install
    3. 编辑_config.yml:
1
2
plugins:
- hexo-math
  • 启用本地图片支持

    npm install hexo-local-image --save,然后添加到_config.yml。

  • 使用 Vim 高亮代码

    npm install vim-tag-vimhighlight,并添加到_config.yml。然后在代码前后加上前缀<hexoescape>0</hexoescape>. 效果如下:

;*****************************************************
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
;*****************************************************
begin
  gsn_define_colormap(wks,"rainbow")
  gsn_reverse_colormap(wks)
  type                      = "eps"
  type@wkColorModel         ="cmyk"
  wks                       = gsn_open_wks(type,"NPP")

  res@cnLevelSelectionMode  = "ExplicitLevels"
  res@cnLevelSelectionMode  = "ManualLevels"
  res@cnMinLevelValF        = 0.0001
  
  startd = 20110101
  ssdate = yyyymmdd_to_yyyyddd(startd)
  do idate = 0,180
    date = yyyyddd_to_yyyymmdd(ssdate+idate)
    print("Now idate and date:  "+ idate +" ; "+ date )
     do hr = 0,23
       shr = sprinti("%0.2i",hr)
       filename = date+shr+".nc"
       ... ...
  • 支持 RSS
    npm install hexo-generator-feed --save
    _config.yml plugins

  • 支持 SiteMap
    npm install hexo-generator-sitemap --save
    _config.yml plugins

  • 去掉 tag,只保留 tagcloud
    拷贝默认的 landscape 为 myls,编辑 themes/myls/_config.yml 去掉 其中的 tag,保留 tagcloud.

  • 修改默认模板,加入 categories
    为了生成 post 时默认生成 categories 配置项. 在 scaffolds/post.md 中,添加一行 categories:。并可在内容中添加任何想加入到模板中的内容,如{vimhl} 和{!--more--},同理可应用在 page.md 和 photo.md。

  • 修改模板图片 自行修改 themes/myls/source/css/images/banner.jpg,使题图和主题配合更好;同时可对应修改themes/myls/source/css/_variables.stylbanner-height,以更好地匹配。

  • 添加 icon 小图标 在themes/myls/layout/_partial/head.ejs里将 <link href="<%- config.root %>favicon.png" rel="icon">替换为<link href="<%- config.root %>favicon.ico" rel="icon" type="image/x-ico">。将 favicon.ico 图标文件放在 source 目录下。

  • 添加微博秀 到新浪微博开放平台 生成微博秀代码,将生成的代码保存为 weibo.ejs 到 themes/myls/layout/_widget 目录中,并在 themes/myls 目录下的_config.yml 中的 widget 栏添加 - weibo 即可。

  • 添加百度 share
    添加“百度分享”到百度分享获得代码,在 themes/myls/layout/_partial/article.ejs 中,将 &lt;%-partial(&#39;post/share&#39;)%&gt; 删掉,替换为 百度分享的代码

  • 添加多说和 disqus
    Disqus 和多说在国内外各有用处,因此最好都加上。修改 themes/myls/layout/_partial/article.ejs ,添加 一部分代码 即可

  • 安装百度统计

    1. 百度统计 获取统计代码

    2. 配置.

3.  add configuration. 
vim themes/myls/_config.yml
baidu_analytics: true

Octopress Solarized Light 替换 Dark

Octopress 中默认的代码高亮是程序猿喜闻乐见的 Solarized,不过很遗憾的是默认是 Solarized Dark,像我等心里黑暗的非主流 Coding 技术人员生活已经很暗无天日了,因此还是希望生活中能多一点阳光的,Solarized Light 就很好。幸运的是,Octopress 其实也带了 Solarized Light 配色的,只要简单的修改一行配置就行了:

1
2
3
in : sass/base/_solarized.scss
from : $solarized: dark !default;
to : $solarized: light !default;

Bazinga!

Hello, Octopress

缘起

作为一个非主流 Coding 技术工人,不满 Sina Blog 已经很久了,各种功能缺失,比如数学公式,比如各种代码高亮。然而 WordPress 功能全则全矣,国内访问需要各种翻墙,各种不便。加上内容放在别人服务器上,始终是不放心的,比如即使如微软和雅虎等大公司,也是把服务说停就停的,如微软的 Live 博客和雅虎的相关服务。因此,自己掌握自己发布显然才放心;但是自己要搞定主机、DNS、独立 IP 等显然花费是巨大的,还好一心一意为码农服务的 GitHub 退出 Pages 服务,可以符合上述的要求,配合 Octopress,嘿嘿,Blog 也可以相当欢乐啊,本地备份、远程同步;Git 版本管理;加上 Github 社区化;再来个 BitBucket 的同步,嘿嘿,需要的东西齐活了。

如下,是一些简单的试用,呵呵。当然,建立一个功能齐全的 Blog 还是相当容易,但是要美观、大方、上档次那就需要相当一部分时间的调试了……

However, Hello, Octopress!

Test code syntax

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
sample javascript from xui
*/
var undefined,
xui,
window = this,
string = new String('string'),
document = window.document,
simpleExpr = /^#?([\w-]+)$/,
idExpr = /^#/,
tagExpr = /<([\w:]+)/,
slice = function (e) { return [].slice.call(e, 0); };
try { var a = slice(document.documentElement.childNodes)[0].nodeType; }
catch(e){ slice = function (e) { var ret=[]; for (var i=0; e[i]; i++)
ret.push(e[i]); return ret; }; }
window.x$ = window.xui = xui = function(q, context) {
return new xui.fn.find(q, context);
};
  • another code demo
Discover if a number is primeSource Article
1
2
3
4
5
class Fixnum
def prime?
('1' * self) !~ /^1?$|^(11+?)\1+$/
end
end
  • gist demo

or

If you have a gist with multiple files, you can include files one at a time by adding the name after the gist id.

Math Examples

With these code:

 1 $$
 2 \LaTeX{}
 3 $$
 4 
 5 $$
 6 f=\frac{n v}{2 L}\underbrace{\color{red}n=1, 2, 3, \ldots}_{\text{allowed 's}}
 7 $$
 8 
 9 $$
10 \frac{n!}{k!(n-k)!} = \binom{n}{k}
11 $$
12 
13 大家都喜欢用 $E=mc^2$ 举例子,但是我不是很理解。  
14 
15 这个公式 $\cos 2\theta = \cos^\theta - \sin^\theta =  2 \cos^\theta - 1$ 少年可还记得?
16 
17 插入方程组(注意多行公式结尾\\\需要打成\\\,可能是因为markdown会自动转义第一个\\):
18 
19 \begin{aligned}
20 \dot{x} & = \sigma(y-x) \\\
21 \dot{y} & = \rho x - y - xz \\\
22 \dot{z} & = -\beta z + xy
23 \end{aligned}
24 
25 插入矩阵(同上):
26 
27 \begin{bmatrix}
28 & 2\\\
29 & 4
30 \end{bmatrix}
31 
32 来个复杂点的(注意有的公式开头不会自动识别,用$$包围):
33 
34 $$
35 \frac{\partial u}{\partial t} = h^\left\frac{\partial^2 u}{\partial x^2} 
36 \frac{\partial^2 u}{\partial y^2} + \frac{\partial^2 u}{\partial z^2}\right)
37 $$
38 
39 最后来个牛逼的吧,薛定谔方程,大学物理就记得这个了:
40 
41 $$
42 i\hbar\frac{\partial \psi}{\partial t} = \frac{-\hbar^2}{2m} \left(  \frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} +
43  \frac{\partial^2}{\partial z^2} \right\psi + V \psi.
44 $$

结果如下:

$$
\LaTeX{}
$$

$$
f=\frac{n v}{2 L}, \underbrace{\color{red}n=1, 2, 3, \ldots}_{\text{allowed ‘s}}
$$

$$
\frac{n!}{k!(n-k)!} = \binom{n}{k}
$$

大家都喜欢用 $E=mc^2$ 举例子,但是我不是很理解。

这个公式 $\cos 2\theta = \cos^2 \theta - \sin^2 \theta = 2 \cos^2 \theta - 1$ 少年可还记得?

插入方程组(注意多行公式结尾\\需要打成\\,可能是因为markdown会自动转义第一个\):

\begin{aligned}
\dot{x} & = \sigma(y-x) \\
\dot{y} & = \rho x - y - xz \\
\dot{z} & = -\beta z + xy
\end{aligned}

插入矩阵(同上):

\begin{bmatrix}
1 & 2\\
3 & 4
\end{bmatrix}

来个复杂点的(注意有的公式开头不会自动识别,用$$包围):

$$
\frac{\partial u}{\partial t} = h^2 \left( \frac{\partial^2 u}{\partial x^2}+ \frac{\partial^2 u}{\partial y^2} + \frac{\partial^2 u}{\partial z^2}\right)
$$

最后来个牛逼的吧,薛定谔方程,大学物理就记得这个了:

$$
i\hbar\frac{\partial \psi}{\partial t} = \frac{-\hbar^2}{2m} \left(\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2}+\frac{\partial^2}{\partial z^2} \right) \psi + V \psi.
$$