视二进制文件如文本

默认情况下,less只能查看文本,如果是二进制文件,就会显示乱码。

$ less hello.bc
"hello.bc" may be a binary file. See it anyway?

然而稍加配置,即可让less显示其对应的文本文件。

首先在~/.bashrc文件里增加一行

eval "$(lesspipe)"

打开新的终端窗口,即可查看各种压缩文件、PDF文件,甚至能够查看图片和ISO的metadata!(具体参加man lesspipe

通过~/.lessfilter文件可以扩展lesspipe,显示LLVM bc文件(以及spirv文件)。

$ cat ~/.lessfilter
#!/bin/sh

case "$1" in
    *.bc)
        llvm-dis "$1" -o -
        ;;
    *.spv)
        spirv-dis "$1" --raw-id --no-color
        ;;
    *)
        # We don't handle this format.
        exit 1
esac

# No further processing by lesspipe necessary
exit 0

使用Emacs,不仅可以直接打开二进制文件查看其文本形式,而且可以修改,并在保存时更新原二进制文件。配置如下:

(require 'jka-compr)
(require 'llvm-mode)

;;; bc
(add-to-list 'jka-compr-compression-info-list
 '["\\.bc\\'"
 "Assembling BC" "llvm-as" nil
 "Disassembling BC" "llvm-dis" ("-o" "-")
 t nil "BC"])

(add-to-list 'auto-mode-alist '("\\.bc\\'" . llvm-mode))

;;; spirv
(require 'asm-mode)

(add-to-list 'jka-compr-compression-info-list
 '["\\.spv\\'"
 "Assembling SPIRV" "spirv-as" ("-o" "-")
 "Disassembling SPIRV" "spirv-dis" ("--no-color" "--raw-id")
 t nil "\003\002\043\007"])

(add-to-list 'auto-mode-alist '("\\.spv\\'" . asm-mode))

(jka-compr-update)

GnuCash搜索妙用

拥有Costco Executive会员,每周都会去购物、加油,每次都得花一百多,多得时候有两三百。但是一直不知道一年在Costco花多少钱。

这两天学习了GnuCash的搜索功能(菜单Edit -> Find),发现搜索结果相当于一个虚拟账户,通过给这个账户生成报表,可以得到数据汇总。

首先尝试一个简单的例子,得出去年在Costco加油的费用,下图是搜索条件,

搜索结果显示在一个虚拟账户标签页,然后通过菜单Reports -> Account Report生产报表,报表最后的Net Change显示去年大概花了一千七百多。

计算在Costco所有消费费用只稍微复杂一点,选中所有费用账户即可,

用同样方法生产报表,Net Change显示费用超过一万!

这个方法有个局限,每条帐目的描述必须包含costco(或costco gas)字样,记录的时候需要留意。