21 Jul 2013
所需软件
-
ffmpeg
sudo apt-get install ffmpeg
-
mp3splt (不是 split)
sudo apt-get install mp3splt
具体步骤
-
首先将 APE 转换成 MP3 格式
ffmpeg -i src.ape dst.mp3
-
根据 CUE 文件将第一步中生成的 MP3 文件切割
mp3splt -c yours.cue dst.mp3
ps. 前几天看了 “美丽心灵”, 片头曲 “A Kaleidoscope Of Mathematics” 真心不错.
13 Jul 2013
mplayer2 可以通过快捷键 “.” 进行逐帧播放(可惜的是没有快捷键进行逐帧后退).
有时候我们需要将当前帧保存为图片, 又该怎么办呢?
ubuntu 是小众操作系统, mplayer2 又是小众操作系统里的小众软件, 所以就导致关于 mplayer2 的信息基本 Google 不到.
自己动手丰衣足食, 耐着性子看了下 mplayer2 的官方文档, 终于找到答案.
快捷键 “s” 将当前帧保存为 png 到家目录.
快捷键 “S” 从当前帧开始连续截屏保存为 png 到家目录. 再按一次 “S” 停止截屏.
mplayer2 manual page
03 Jul 2013
名词解释
-
DNS
DNS 的全称是 Domain Name System, 很多人会误以为是 Domain Name Server.
DNS 是一套系统, 负责将域名与 IP 地址相对应起来.
-
Nameserver
负责实现 DNS 这套系统的服务器, 有时候也叫做 DNS server, 这也是为什么许多人会将 nameserver 同 DNS 搞混起来的原因.
-
Zone
假如有一个域名 bob.sales.example.com, 那么 com 是一个顶级域名(TLD),
example 是 com 的一个子域名(Sub-domain), sales 是 example 的子域名, bob 则是一个主机名(Hostname). 一个域名至少有一个子域名.
除了主机名, 一个域名的其它部分都可以叫做 Zone. [1]
Nameserver 类型
Nameserver 主要有四种类型:
-
Master
保存域名的解析信息, 并负责响应其它 Nameserver 查询域名信息的请求.
-
Slave
同 Master 的作用, 作为备用. 区别在于它的解析信息是从 Master 中获取的.
-
Caching-only
不保存有真正的域名的解析信息, 负责响应用户的域名解析的请求, 如果用户请求的数据不存在, 则会向其它 Nameserver 发出查询请求.
查询成功后, 则会将这条记录保存一段时间(TTL), 以供之后的查询用.
Google 的 nameserver(8.8.8.8) 就是这种类型.
-
Forwarding
将解析请求转发给一串指定的 nameservers, 如果这其中没有一个能解析成功, 那么这次请求就算失败.
ps. 一台 nameserver 可能是这个域名的 Master, 同时, 也可能是另一个域名的 Slave.
如何搭建一个 nameserver
搭建一个 nameserver, 可以安装 BIND(Berkeley Internet Name Daemon) 这个软件. 安装之后可以将服务器配置成上述几种类型的 nameserver,
并可以向服务器中添加相关的解析数据. 具体的关于 BIND 的安装与配置请参考其它资料.
两个例子
-
当你在域名注册商那里注册了一个域名 example.com, 你在域名注册商那里修改 nameserver,
比如修改成 ns1.example.com, ns2.example.com, 其实就相当于在负责 com 解析的那台 nameserver 上修改你的 example.com 的解析信息.
你在 ns1.example.com, ns2.example.com 里添加的比如 A 记录, CNAME 记录, 就是具体关于 example.com 这个域名的解析信息.
-
假如你电脑里配置的 Caching-only nameserver 是 8.8.8.8, 当你请求访问比如 yoncise.com 这个域名,
你的电脑就会向 8.8.8.8 发出域名解析请求, 假如 8.8.8.8 发现自己的数据库里没有相关的解析信息,
就会向 root nameserver 发出请求, root nameserver 发现它也没有 yoncise.com 的解析信息,
但是它知道负责解析 com 域名的 nameserver 的地址, 于是将这个地址返回,
这时候 Caching-only nameserver(8.8.8.8) 向返回的 nameserver 即 com 的 nameserver 发出 yoncise.com 解析请求,
可惜的是, com 的 nameserver 这里也没有 yoncise.com 的解析信息, 但是它知道谁那里具体保存有 yoncise.com 的解析信息,
于是将这个 nameserver (在域名注册商那里设置的地址) 返回, 同样的, 8.8.8.8 继续向这个 nameserver 发送请求,
最终获得了 yoncise.com 的域名解析信息并将数据返回给你.
参考
[1] 13.1.1. Nameserver Zones
01 Jul 2013
定义
直接上完整定义, 然后再慢慢解释.
subquery ::=
SELECT [ALL | DISTINCT] { * | expr [[AS] c_alias] {, expr [[AS c_alias]...}}
FROM tableref {, tableref...}
[WHERE search_condition]
[GROUP BY colname {, colname...}]
[HAVING search_condition]
| subquery UNION [ALL] subquery
tableref ::= tablename [[AS] corr_name [(colname {, colname...})]] -- simple form
| (subquery) [AS] corr_name [(colname {, colname...})] -- subquery as table
| tableref1 [INNER | {LEFT | RIGHT | FULL} [OUTER]] JOIN tableref2 -- join forms
ON search_condition | USING (colname {, colname...})
Select statement ::=
subquery [ORDER BY result_column [ASC | DESC] {, result_column [ASC | DESC]...}]
大写的照打, 小写的根据情况填, 中括号和大括号里的可选. 小括号照打, 注意, 不是小括号里的照打, 而是小括号本身照打.
解释
subquery:
-
ALL
保留所有结果, 不去除重复的结果.
-
DISTINCT
去除重复的结果.
-
AS
最后在结果中显示的列名.
tableref:
-
AS
起别名. SELECT * FROM tablename AS table1, tablename AS table2 WHERE table1.colname1 = table2.colname2
-
LEFT OUTER JOIN
table1 LEFT OUTER JOIN table2 的结果就是, table1 和 table2 先做 JOIN 运算,
然后将 table1 (因为它在运算符的左边) 中不在结果中的行添加到结果中去, 没有的属性值为 null. RIGHT, FULL 与之类似.
-
ON
这是 Theta JOIN, 普通的 JOIN 运算是, 相同列名的属性值如果相等则合并, 而 Theta JOIN 是, 相同列名的属性值如果满足 search_condition 则合并.
-
USING
被指定的列的属性值如果相同就合并.
Select statement:
-
ASC
升序排列
-
DESC
降序排列
如何理解 SELECT 语句
看到 SELECT 语句的时候, 它书写的顺序基本就是你理解的顺序. 总结下来就是下面这个顺序.
-
FROM
FROM 中的 table 进行笛卡尔乘积运算.
-
WHERE
将 1 中结果里的行逐个拿出来, 如果满足 WHERE 的条件就保留.
-
GROUP BY
GROUP BY 中指定的列的值相同的行归为一组.
-
HAVING
分组之后的每张表如果满足 HAVING 的 search_condition 就保留.
这里的 search_condition 主要是 SQL 自带的函数, 比如, SUM(), AVG(), MAX(), MIN(), COUNT().
-
SELECT
将 4 中最后剩下来的表进行合并, 并提取出指定的列组成最后的表.
-
ORDER BY
对最后的结果排序.