在Jekyll的博客中实现语法高亮

在Jekyll的博客中实现语法高亮方法如下:

  1. 在配置文件 _config.yml 启用 pygments, 并使用redcarpet做为渲染引擎.
    pygments: true
    markdown: redcarpet
  1. 使用以下格式把代码括起来
    ```python
    print("hello world")
    ```
  1. 在页面上添加语法高亮的CSS文件, 像这样:
    <link rel="stylesheet" href="/css/pygments.css" />

说明:

使用 redcarpet 是为了支持所谓的 Github风格的Markdown语法, 也就是像上面的那样三撇号加语言类型的方式进行代码引用, 其他几个渲染引擎要用这种比较别扭的方式来把代码括起来, 我觉得这么写不好看.

语法高亮的定义文件可以在 这里下载, 对应的效果可以在 pygments的官网的Demo里试看.

一直在纠结我的 Blog 中的代码为啥没有语法高亮, 看着Jekyll官网中漂亮的代码就更纠结了, 今天终于解决了, 刚把十几篇文章的代码都加上语言类型, 呼 …

more ...


MySQL中 REPLACE 与 INSERT ON DUPLICATE KEY UPDATE 的区别

MySQL中, 要一步实现 "如果没有则插入, 如果存在则替换" 这样的操作, 有两种方式, REPLACEINSERT ... ON DUPLICATE KEY UPDATE. 这两种方法是有区别的.

它们之间的共同点是, 要求表中有 UNIQUEPRIMARY KEY 的列, 不然没法判断是否需要替换, 这两都会变成和普通 INSERT 一样了.

不同之处在于, 如果存在重复的主键值, REPLACE 执行的是先删除, 后插入. 这样做一个后果是会导致索引碎片化, 降低效率. 更重要的是, 这条命令是无法进行部分更新的, 命令中没有赋值的列, 都会被设为默认值!

REPLACE 的语法示例如下:

    REPLACE INTO
      ratings
    SET
      quote_id = 100,
      user_id = 200,
      score = 10 …
more ...

雷人的PHP的运算符优先级

PHP中的运算符优先级, 比较运算符高于位运算符, 赋值运算符高于部分逻辑运算符, 真是坑啊.

比较运算符高于位运算符, 所以

$A == $B & $C 等价于 ($A == $B) & $C不是先做&再进行比较

赋值运算 and or xor 高于逻辑运算, 但却低于 &&||, 所以

<?php
    $a = true and false;
    var_dump($a);    // 输出是 bool(true)

    $b = true and false;
    var_dump($b);    // 输出是 bool(false)

上面那行居然是 先把 true 赋给 $a, 然后再与后面的false …

more ...

Erlang中IPv4地址与整数的转换

IPv4地址通常表示为 A.B.C.D, 其中A-D都是0-255之间的整数, 总长为32位, 因此, 可以使用单一个32位无符号整数表示一个IP地址.

Erlang 中可以使用以下方式进行转换:

ip_to_int({A,B,C,D}) ->
    << Int:32 >> = <<A:8, B:8, C:8, D:8>>,
    Int.

int_to_ip(Int) ->
    <<A:8, B:8, C:8, D:8>> = << Int:32 >>,
    {A,B,C,D}.

上面两个函数没考虑溢出的问题, 溢出的部分会被截断, 比如说 A 输入 257 会被视为 …

more ...

Erlang的大小比较

Erlang 里, 不只数字可以比较大小, 基本上所有变量都可以比较大小.

大小关系是:

数字 < 原子 < reference < 函数 < 端口 < pid < 元组 < 列表 < 二进制

也就是说, 数字总是比原子小, 原子总是比列表小...

也就是说, 即使 Val > 5true, 也不能保证 Val 是个数字.

而且, 同一种非数字类型也有大小, 比如说

    a > b         %% 假
    "b" > "aa"    %% 真

想不明白这样比较大小有啥意义, 真是个坑啊.


update: 2014年6月8日

所有数据项都可以比较, 在进行lists:sort/2的时候就会很方便.

而且, 要保证 Val 是个数字, 更合理的应该是 …

more ...