Dust8 的博客

读书百遍其义自见

0%

前段时间搞了个静态博客生成器.

lychee, 源码: github.

代码很简陋,不过勉强可以用.

问题: 现在这类工具很多,为啥还要自己弄

我用python的,什么都想用python解决,可以少装一些软件

问题:也有python写得,为啥不用

用得库太多,兼容性差,和其他语言一样,安装时出现各种问题


最主要的原因是,自己写一个可以学些东西,就算比较差,也很有成就感.

它是我的第一个发布到 pypi 得工具,可以通过 pip 安装.

以下是我的一些经验:

打包的时候, templates等文件没有打包进去

1
2
3
4
5
6
7
MANIFEST.in
recursive-include lychee/templates *
recursive-include lychee/posts *
recursive-include lychee/static *

setup.py
include_package_data=True

如何复制包里的数据到其他地方

1
os.path.abspath(__file__)

如何获取现在命令行的路径

1
os.getcwd()

如何改变运行的路径

1
os.chdir()

网上很多地方都有格式化时间,例如:

刚刚10分钟前3天前2个月前 之类的。

当然,网上有很多处理时间的库,像 momentjs

不过我喜欢造轮子,造轮子也是应该提倡的;

不然总是用别人造的轮子,万一人家不造了,不是惨了。

github:timejs

1. timejs 源码

这是我的第一个 js 库: timejs。它是一个格式化时间戳的库。代码如下:

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
(function() {
var Time = Time || {};

Time.getTime = function(){
var d = new Date();
return d.getTime()
};

Time.fromNow = function(time){
// time必须是毫秒
var curTime, diff;

curTime = Time.getTime();
diff = curTime - time;

if (0 > diff){
return "出错了";
}else if (1000 * 60 > diff) {
return "刚刚";
} else if (1000 * 60 <= diff && 1000 * 60 * 60 > diff) {
return parseInt(diff / (1000 * 60)) + "分钟前";
} else if (1000 * 60 * 60 <= diff && 1000 * 60 * 60 * 24 > diff) {
return parseInt(diff / (1000 * 60 * 60)) + "小时前";
} else if (1000 * 60 * 60 * 24 <= diff && 1000 * 60 * 60 * 24 * 30 > diff) {
return parseInt(diff / (1000 * 60 * 60 * 24)) + "天前";
} else if (1000 * 60 * 60 * 24 * 30 <= diff && 1000 * 60 * 60 * 24 * 30 * 12 > diff) {
return parseInt(diff / (1000 * 60 * 60 * 24 * 30)) + "月前";
} else {
return parseInt(diff / (1000 * 60 * 60 * 24 * 30 * 12)) + "年前";
}

};

// 注册命名空间到window对象上
window["Time"] = Time;
})();

2. timejs 用法

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>time.js用法</title>
</head>
<body>

<script src="time.js"></script>
<script type="text/javascript">
var time = 1422875526971;
document.write("Time.fromNow(time) <br/>")
document.write("参数 time: 必须是毫秒.<br/>")
document.write("1422875526971 => " + Time.fromNow(time) );
</script>
</body>
</html>

2.2 输出

1
2
3
Time.fromNow(time)
参数 time: 必须是毫秒.
1422875526971 => 1天前

参考资料:

  1. JS—创建自己的”JavaScript库”,原来如此简单
  2. binnng/time.js

我用的是官网中文网站练习的。

中文练习网站: http://go-tour-zh.appspot.com/

中文翻译害死人,不知道是不是机翻的。

我按我的理解翻译一遍。

意译

练习:Slices

实现 Pic。 它返回一个长度为 dyslice 类型。

而这个长度为 dyslice 类型里面的每一个元素是一个长度为 dxslice 类型,

它的值是一个 8 位的无符号整数。 当你运行程序,它将会显示你的图像,

这个图像是由你返回的那个 8 位无符号整数作为图像的灰度(或者是蓝度)值生成的。

由你决定函数去生成图片。

下面是一些有趣的函数,有 (x+y)/2 , x*y, 和 x^y (最后一个函数可以用 math.Pow 实现计算方值)。

(你需要使用循环来分配 [][]uint8 中的每一个 []uint8。)

(使用 uint8(intValue) 在类型之间进行转换。)

解题

本题的本意其实就是要生成一个 2 维的整数数组。

那些函数只是决定生成的图像的样子,并不是考察的目的所在。

代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "code.google.com/p/go-tour/pic"

func Value(x, y int) uint8 {
// 有趣的函数有 (x+y)/2, x*y, and x^y
return uint8((x + y) / 2)
}

func Pic(dx, dy int) [][]uint8 {
ret := make([][]uint8, dy)
for i := 0; i < dy; i++ {
ret[i] = make([]uint8, dx)
for j := 0; j < dx; j++ {
ret[i][j] = Value(i, j)
}
}
return ret
}

func main() {
pic.Show(Pic)
}

有趣的函数生成的图像

  1. (x+y)/2

    (x+y)/2

  2. x*y

    x*y

  3. x^y

    x^y

Cygwin

官网:https://cygwin.com

安装:https://cygwin.com/install.html

1.安装有选择安装的包

运行 setup-x86.exe 按它的提示就可以了;

等到选择package的时候,默认安装的话有很多命令不会安装,

你可以自己去添加要安装的。

例如 make, gcc 等命令可以去 devel 目录下展开选择安装。

2.安装没有的包

如果package里没有的包,只有去下载源代码自己编译安装。

例如 tree 命令,我找不到 package ,那就去下源代码。

tree 源代码:ftp://mama.indstate.edu/linux/tree/

下载下来解压,然后运行 Cygwin Terminal 到解压目录,

然后运行 make , 在运行 make install 就可以了。

不过我在安装 tree 1.7.0 版本的时候,运行 make 报错,

tree.c:908:对‘strverscmp’未定义的引用

tree.c 文件头部加入 #include "strverscmp.c"

在编译安装就可以了。

3.安装完后还想在添加包

跟1和2一样安装就可以了,以前安装的都还在。

4.安装oh-my-zsh

  • 把默认的bash改为zsh: 把快捷方式里面的目标改为C:\cygwin32\bin\mintty.exe C:\cygwin32\bin\zsh.exe -l -i
  • setup-x86.exe安装curlgit后,再去http://ohmyz.sh/,

    复制curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh,

    安装oh-my-zsh,看文档可以改主题,记得不要那些有特殊字符的主题,会乱码,我用的是ys主题

5.使用python3

没办法用源代码编译,问题多多,cygwin里面的python3版本太低,还好可以用windows安装的版本。

用的是软链接,在 /usr/local/bin 下使用 ln -s /cygdrive/c/Python34/python.exe python3

可是不能python3进入界面,python3 t.py是可以运行的,如果要进界面,可以python3 -i来注入。

6.使用vim

自带的是vi, 使用有些问题,用安装程序卸载vi, 安装vim,在配置.vimrc

备注:

在mac下用virtualbox装了xp,全屏不了,就是有黑边。

windows下也是这样的。需要安装 VBoxGuestAdditions的iso。

在windows下的安装目录就有这个文件,mac下不知道在哪里,网上也没搜到。

官网也不容易找到介绍,反正我是找不到。。。。

可以去 http://download.virtualbox.org/virtualbox 这里下载。

这里有所有的版本,所有的文件。

比如说,现在最新最稳定的说4.3.14,可以去

http://download.virtualbox.org/virtualbox/4.3.14/

这里有mac的img安装文件 VirtualBox-4.3.14-95030-OSX.dmg, VBoxGuestAdditions_4.3.14.iso。

剩下安装步骤的网上大把的,和windons基本一样,就不废话了。