owncloud mac ox client 安装后,首次设置以及运行后的设置界面, 中文显示为方框. 最简单的解决方法删除自带的翻译文件,强制使用英文显示.

进入

/Volumes/Macintosh HD/Applications/owncloud.app/Contents/Resources/Translations

删除或改名这二个文件:

  • mirallzhCN.qm
  • qtzhCN.qm

然后退出owncloud,再运行就是英文界面了.

windows 下应该类似, 但没验证.

hackpad.com编辑时,基本可以看做是在写md,而且是即时生成html效果(非分屏),手感相当好,特别是表格和代码块。

不过在导出md格式时,文章标题不能有中文,否则这篇文章无法导出。

根据导出的md文件来着,文章标题实际上是第一级标题#,这也是一个小坑,这样hackpad里只能有一个#并且被文章标题占用,文章内容最高级标题只能是第二级标题##.

R6300v2上安装opkg,opkg再安装python,然后运行python版本的shadowsocks成功.不过加密方式只能用table,无法正常访问google的相关服务.

一时没搞定python的m2crypto,无法启用其他加密方式,于是直接编译shadowsocks-libev, ss-local采用命令行方式指定参数运行成功,采用aes-256-cfb加密方式,google相关网站访问正常.

移步下载 shadowsocks-libev on R6300v2

Arm7系cpu应该通用,但未测试.

ABB(Ahui Blog Build)生成的静态html文件,可以用git比较方便的同步到VPS Server上。

首先Server和Client二边都安装好git.

VPS Server上做如下设定后,就不用管了:

创建git仓库目录为www.git,要安全起见,可以换用个普通用户帐号,并修改相应目录及权限。

cd /root/tmp
mkdir www.git
cd www.git
git --bare init

建立www根目录,并配置nginx指向。

mkdir /home/wwwstatic/public

建立git hook,在Client push文件后,自动checkout到指定的www根目录

cat > hooks/post-receive
#!/bin/bash
GIT_WORK_TREE=/home/wwwstatic/public git checkout -f

加上可执行属性

chmod +x post-receive

Server端设置完毕。

Client端如果还没有ssh key,则用

ssh-keygen -t rsa -C "your_email@example.com"

生成key,然后将~/.ssh/idrsa.pub中的内容复制到Server端的 /root/.ssh/authorizedkeys中。

然后进入静态html生成目录,做一次初始化。

cd public
git init
git remote add ahuius root@ahui.us:/root/tmp/www.git

设定完毕。

这样每次用abb bulid整个站点后,执行下sync.sh就可以将新生成的html文件同步到vps的www根目录了。

cat sync.sh

#!/bin/bash
cd public
git add .
git commit -m "ok"
git push -f ahuius master

这篇Blog是完成设定后第一篇被同步的文章.

./sync.sh
[master 97bc2d2] ok
 84 files changed, 1000 insertions(+), 671 deletions(-)
 create mode 100644 post/yong_git_tong_bu_jing_tai_wang_zhan.html
Counting objects: 174, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (88/88), done.
Writing objects: 100% (88/88), 21.61 KiB, done.
Total 88 (delta 84), reused 0 (delta 0)
To root@ahui.us:/root/tmp/www.git
   7167c21..97bc2d2  master -> master

静态网站生成程序上站测试。 ohoh,还没取名字...

已完成功能:

  • cli生成post模板
  • 根据md文件生成对应的html文件
  • 根据目录生成整站html文件
  • 生成首页面index.html
  • 首页下部生成页码导航
  • 生成tag目录
  • 生成最新文章列表
  • 包含多说的ajax评论
  • 除多说的ajax评论不支持file://,其他页面均能用file://方式浏览.
  • 用Contango Theme做了一个默认模板。

wordpress转移方式

  1. 在wordpress中导入所有post到xml文件中
  2. hexo Pelican 二者都有对应工具,从xml中提取所有post为对应的.md格式文件。建议用hexo的工具,转换得更好一点。本程序支持这二者转换后的格式。
  3. md格式修正。主要是换行,代码块等,多加点空行。
  4. 生成全站静态html。

运行环境(Ubuntu on Virtualbox)

uname -a

Linux openerp7 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux

cat /proc/cpuinfo

...
processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
stepping        : 9
cpu MHz         : 2394.400
bogomips        : 4788.80

生成速度

 ls ./sources | wc
     59      59    1206

 time ./main.py build

real    0m0.390s
user    0m0.092s
sys     0m0.120s

如果按照这个速度不变,生成一万篇文章需时一分钟多点。

Tenjin是个好模板. (签名)

满足我喜欢的三个要求:

  • 快速
  • HTML友好
  • 能直接用python代码。

当然能直接用python代码是件好事也是件坏事。

在做静态html生成程序时,因为动态生成了不同内容的同名模板,导致Tenjin解析时总是取缓存中的内容。 Tenjin对1秒内生成的缓存文件总是做有效处理,这样解决办法为:

  1. sleep 1s吧,喝个茶什么的等缓存失效…
  2. 将Tenjin里的timestamp_interval参数由原1s,改为一个更小的值,0.001什么的。小手术。
  3. 给Tenjin添加个属性,记住文件大小,在文件大小改变时,总是重新生成缓存。大手术啊~~~~
  4. 动态生成的模板,别用同样的文件名.

1会带来时间浪费,测试中生成50+ html文件才半秒不到,不能浪费2倍的生命。 2,3都要改动Tenjin,通用性不好。 4算比较满意的,会稍提高点代码的复杂度。

BTW,如果要压榨性能,通过2中将值改大,或者3增加文件大小检查,模板文件不变时直接用.cache文件,应该有不少的性能提升。

连续碰到几次BLOG打开卡住的情形,在VPS上重启一下nginx及php就好了。原因不详,但有可能是因为wordpress连续升级导致?

最好的解决方案就是将博客网站静态化。

试用了一下现成的解决方案,比较好用的有hexo以及Pelican。 这二个都有工具能将wordpress导出的xml转化为md格式的文件。

其中hexo转化并生成静态网站后,效果相当不错。但问题是在使用时发现50+ md文件,生成时间在20s左右,这个速度太慢了一点。比较奇怪的是其他使用者都反应hexo是相当快的,所以也有可能是我这有个什么地方设置有问题。 同样的环境下Pelican的速度相当理想,同样多的md文件,生成时间3s左右。问题是他自己生成的md文件格式有点奇怪,和hexo的相比有差别,且感觉hexo的md文件格式更好点。

如果再考虑长远点,比如有海量的md文件要生成,那么就要求生成工具要么有极快的速度,要么有增量生成功能(已经生成的文件不用再生成)。这样hexo一者因为速度原因不能不放弃,二者可惜是node写的,我更偏好python一点。而pelican刚可能要修改一下格式问题,以及增加其他功能。

本着轮子不怕多的精神,干脆再做个相关工具好了。

初期目标

博客类小型网站,静态页面生成

生成方式

  1. 全静态生成,所有文件需要更新。可用目录控制生成层次。
  2. shtml包含,只更新必要文件
  3. ajax包含,只更新必要文件

工作方式

  1. cli
  2. web gui

文章分类(初期只考虑tag)

  1. 分类,一对一或一对多
  2. tag标记,一对多

页面分类

  1. index.html
  2. tags.html
  3. tag.html
  4. comment.html
  5. side_right.html
  6. side_left.html
  7. head.html
  8. body.html ->要生成的主体文件
  9. foot.html

菜单大体上分三层:顶层,侧边,子菜单 添加子菜单分为二种情况,一是添加全新的菜单,此时必须先添加顶层和侧边菜单,只用指定name及id,然后挂上子菜单. 其中顶层菜单不用指定parent,子菜单是必须指定action.

<menuitem id="top_menu" name="Top"/>
<menuitem id="section_top_menu" parent="top_menu" />
<menuitem id="sub_menu" parent="section_top_menu" action="your_action"/>

二是挂上已经存在的侧边菜单,此时parent的取值为:对象.菜单id

<menuitem id="real_menu" parent="name_of_module_of_parent.section_top_menu" action="your_action">;

不指定对象则会重复建立同名菜单(三层均如此),哪怕id值也相同。