存档

2011年8月 的存档

Emacs 下的输入法问题

2011年8月26日 没有评论

最近让我的本本重新回到了 Gentoo 的怀抱, 不愧是 i5 的核, 构建整个系统比在公司 的那台老爷机快多了. 一切都是那么良好, 只是当我 emerge emacs 完, 打开 emacs 开始用 jabber-mode 聊天以后, 不对劲了, 中文输不出来. 用 C-SPC 的时候直接 提示 “mark set”, 原来我的 ibus 激活键直接被绑定到 “set-mark-command”, 我把它 global-unset-key 以后, 还是输不出来, 在 google 老师的帮助下, 我猜到以下的原因.

如果是 XIM 的问题, 需要修改各种环境变量, 而且还不一定对, 如果是 Xorg-server 的字体问题, 需要去修改 xorg.conf, 做各种符号链接, 安装一大堆根本不需要的字体 神马的. 最终我在 emacswiki 上找到了终极的解决办法. IbusMode, 这个扩展 除了解决我的 emacs 不能调用 ibus 输入法之外, 还有其它的一些我暂时没有用到的 附加功能.

以下简化版的安装过程:

$ wget http://launchpad.net/ibus.el/0.2/0.2.1/+download/ibus-el-0.2.1.tar.gz
$ tar xfz ibus-el-0.2.1.tar.gz
$ cp -f ibus-el-0.2.1/ibus-el-agent ~/.emacs.d
$ cp -f ibus-el-0.2.1/ibus.el ~/.emacs.d
$ echo "(add-to-list 'load-path \"jabber/share/emacs/site-lisp\")" >> ~/.emacs
$ echo "(require 'ibus)" >> ~/.emacs
$ echo "(add-hook 'after-init-hook 'ibus-mode-on)" >> ~/.emacs

分类: Emacs 标签:

新工作

2011年8月26日 没有评论

来帝都三天了, 除了交通等不太适应外, 其他的一切觉得都还不错.

工作内容

新工作是和云计算有关的, 也算从一个行业转到另外一个陌生的行业. 现在的工作 更能淋漓尽致的发挥我的特长. 对于我以前学到的很多以为用不到的技能, 比如 自己折腾的 KVM 的东东, 各种 package 的知识, gtk develop 等等, 现在 是觉得知识到用时方恨少.

工作环境

工作环境是我工作这么多年(两年)以来最好的:

同事
我所在项目组是一群充满斗志的 linux geek, 项目组的成员都来自不同的地方, 很多人都是和我一样刚到公司的. 不过令我惊讶的是, 我居然是公司这么多人年纪最小的, OMG. 我们项目组每个人的本本都是清一色的 linux, 有的是 ubuntu, 有的玩 suse, 也有 gentoo(额, 好像只有我). 服务器上还装着 centos.
工作内容
涵盖了 linux 应用程序开发, linux 发行版定制.
工作自由度
只要能完成任务, 随便你怎么安排时间, 这里是没有人监督你的, 一切都得靠自觉, 不过在我呆的这几天看来, 大家还是比较自觉的.

帝都印象

来之前很多人对我说, 帝都物价高, 帝都房价高, 帝都房租高, 帝都土著比较高傲, 帝都 ……

对于交通, 我来了几天才真正理解为什么有的公司 早上 10 点才上班. 交通是在是 太不方便了. 对于大多数的上班族来说, 一般住在 4环甚至5环, 公司一般在市内, 做地铁, 加上公交(或许还有一段自行车或者小跑什么的)都要1个小时以上. 所以我 刚来的第一天就和同事感慨: 在帝都工作大部分时间都浪费在挤地铁上了.

但是我呆了这么几天, 给我的感觉, 除了交通不便外, 其他的问题都不是问题. 尤其 是帝都的人民, 给我一种纯爷们的感觉, 做事说话不拖泥带水, 雷厉风行, 至少我接触 过的帝都人民都是这样的.

每天下班走在帝都的马路下, 听到大街上各种的吆喝声, 看到准备去散步的老人们, 身边 是和我一样戴着耳麦, 走在回家路上的上班族, 这样的生活和我以前在厦门的无论在 生活节奏, 还是生活氛围上都差别太大了. 但是不得不说, 我已经慢慢适应上了这种生活.

分类: 吐槽 标签: ,

Emacs 下的输入法问题

2011年8月26日 6 条评论

最近让我的本本重新回到了 Gentoo 的怀抱, 不愧是 i5 的核, 构建整个系统比在公司 的那台老爷机快多了. 一切都是那么良好, 只是当我 emerge emacs 完, 打开 emacs 开始用 jabber-mode 聊天以后, 不对劲了, 中文输不出来. 用 C-SPC 的时候直接 提示 “mark set”, 原来我的 ibus 激活键直接被绑定到 “set-mark-command”, 我把它 global-unset-key 以后, 还是输不出来, 在 google 老师的帮助下, 我猜到以下的原因.

如果是 XIM 的问题, 需要修改各种环境变量, 而且还不一定对, 如果是 Xorg-server 的字体问题, 需要去修改 xorg.conf, 做各种符号链接, 安装一大堆根本不需要的字体 神马的. 最终我在 emacswiki 上找到了终极的解决办法. IbusMode, 这个扩展 除了解决我的 emacs 不能调用 ibus 输入法之外, 还有其它的一些我暂时没有用到的 附加功能.

以下简化版的安装过程:

$ wget http://launchpad.net/ibus.el/0.2/0.2.1/+download/ibus-el-0.2.1.tar.gz
$ tar xfz ibus-el-0.2.1.tar.gz
$ cp -f ibus-el-0.2.1/ibus-el-agent ~/.emacs.d
$ cp -f ibus-el-0.2.1/ibus.el ~/.emacs.d
$ echo "(add-to-list 'load-path \"jabber/share/emacs/site-lisp\")" >> ~/.emacs
$ echo "(require 'ibus)" >> ~/.emacs
$ echo "(add-hook 'after-init-hook 'ibus-mode-on)" >> ~/.emacs

分类: Emacs 标签:

用 org-mode 写 LaTeX

2011年8月17日 2 条评论

最近要离职了, 要写移交文档, 以前写文档的一般都是用 org-mode 写好以后转为 html 或者 mediawiki 的格式, 偶尔给国外的客户写技术文档才转成 pdf 格式. 这次想正式一点, 顺便再回顾一下上次 FJLUG 上学到的 XeLaTeX.

话说我以前用 LaTeX 处理中文都是用 CJK 的方式, 直到上次去 FJLUG 上被 鱼一尾 告知我用的技术是几年前的, 被狠狠鄙视了一把之后, 我才知道原来用 XeLaTeX 处理中文如此简单.

Org-article 模板

我用的 latex 模板是 org-modeThe Org-article LaTeX class

NOTE!!! 以下假设 xeLaTeX 和 xeCJK 环境已经安装好了. 并且 org-mode 最好是7.0以上的版本, 不然 org-babel-tangle-file 函数可能找不到

安装很简单

$ git clone git://github.com/tsdye/org-article.git
$ cd org-article
$ emacs -batch --eval "(org-babel-tangle-file \"article-class.org\")"
$ sudo cp org-article.cls /usr/share/texmf-texlive/tex/latex/base
$ sudo mktexlsr
$ kpsewhich org-article.cls

其中 usr/share/texmf-texlive/tex/latex/base 不同平台可能会不一样

如果提示

reference 'gantttest' not found in this buffer

则在 Org-article.org 里面搜索 ganttest, 把相应的片段删除, 我这里删除了三处.

xeCJK 模板

以下设置假设你有相关字体, 用 fc-list 查看你系统的字体, 如果你想要其他 字体, 执行类似的代码添加提供的字体

$ fc-list
$ sudo cp your_fonts.ttf /usr/share/fonts/your_fonts_dir
$ cd /usr/share/fonts/your_fonts_dir
$ sudo mkfontdir 
$ sudo mkfontscale
$ sudo fc-cache -fv

然后 fc-list 找到你添加的字体名, 最好选英文的那一列

将以下代码保存为 /usr/share/texmf-texlive/tex/latex/base/zhfontcfg.sty /usr/share/texmf-texlive/tex/latex/base 是我的 latex 能找到的目录, 不同 平台可能不一样

% xetex/xelatex 字体设定宏包
 
\ProvidesPackage{zhfontcfg}
\usepackage[utf8]{inputenc}
\usepackage{fontspec,xunicode}
 
\usepackage[slantfont, boldfont, CJKtextspaces, CJKmathspaces]{xeCJK} % 允许斜体和粗体
\setCJKmainfont{WenQuanYi Micro Hei} % 设置缺省中文字体
\setCJKmonofont{WenQuanYi Micro Hei Mono} % 设置等宽字体
 
\setmainfont{Tahoma} % 英文衬线字体
\setsansfont{Tahoma} % 英文无衬线字体
\setmonofont{Monaco} % 英文等宽字体
\punctstyle{kaiming} % 开明式标点格式
 
\usepackage{indentfirst} % 首段缩进
 
\defaultfontfeatures{Mapping=tex-text} %如果没有它,会有一些 tex 特殊字符无法正常使用,比如连字符。
 
% 中文断行
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt

emacs 设定

保存下列代码到 ~/.emacs

(require 'org-latex)
(setq org-export-latex-listings t)
(add-to-list 'org-export-latex-classes
             '("org-article"
               "\\documentclass{org-article}
                 [NO-DEFAULT-PACKAGES]
                 [EXTRA]"
               ("\\section{%s}" . "\\section*{%s}")
               ("\\subsection{%s}" . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}" . "\\paragraph*{%s}")
               ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

开始写文档

每一个 org-mode 的头部要添加一下代码.

#+TITLE: 用 org-mode 写 LaTeX
#+AUTHOR: mathslinux <riegamaths@gmail.com>
#+DATE: [2011-08-17 三 16:30]
 
#+OPTIONS:   H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS:   TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
 
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+LINK_UP:   
#+LINK_HOME: 
#+XSLT: 
#+BABEL: :exports code
#+LaTeX_CLASS: org-article
#+LaTeX_CLASS_OPTIONS: [koma,times,letterpaper,captions=tableheading,utopia,11pt,listings-sv,microtype,paralist,colorlinks=true,urlcolor=blue,secnums,secnumss,secnumsss,secnump,secnumsp]
 
#+LATEX_HEADER: \usepackage{zhfontcfg}

剩下的, 就是按照 org-mode 的格式来写文档, 神马代码高亮, 神马标题分类, 都不用 考虑 latex 的语法, 完全就是可见即可得.

分类: Emacs, LaTeX 标签: , ,

KVM 初体验

2011年8月5日 没有评论

上次和 明源兄 聊天的时候, 得知他使用的虚拟机是 KVM. 这个东西以前经常听说过, 加之现在我对虚拟化的很感兴趣. 遂在我的 laptop 上体验了一把(我公司的那台 intel 电脑竟然不支持虚拟化).

我的 laptop 上安装的是 Archlinux.

检查CPU是否支持虚拟化

如果以下指令有输出结果的话, 就说明 cpu 支持虚拟化, 不然要玩 KVM 请换电脑吧.

# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

比如我公司的另一台的电脑输出是:

flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm dts tpr_shadow vnmi flexpriority
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm dts tpr_shadow vnmi flexpriority

安装

# sudo pacman -S kernel26 qemu-kvm

使用

将当前用户加入到 kvm 组中, 并加载 kvm-intel(如果是 AMD, 用 kvm-amd) 驱动

# gpasswd -a geniux kvm
# modprobe kvm
# modprobe kvm-intel

如果 kvm-intel 加载的时候出错, 并且 CPU 支持虚拟化的话, 很可能是 BIOS 没有打开虚拟支持. 我的 laptop 上就是这样, 我是在 BIOS Setting 里面打开了 Virtualization Technology 选项.

创建一个虚拟磁盘, -f qcow2 表示创建这种格式的磁盘, 此格式的磁盘类似于 virtualbox 里面创建的动态扩展大小的磁盘(最大 8G).

# qemu-img create -f qcow2 winxp.img 8G # Create a new disk image

然后启动 kvm 安装系统, 这里我虚拟了一个 XP 的安装, 安装解释是 iso 文件. 主要是想测试一下他的图形性能, 因为一直有人说 kvm 的图形性能话不好, 我想看看不好到什么程度.

# kvm -m 512M -hda kvm/winxp.img -cdrom /mnt/root/Software/XP-hengqi.iso -boot d

剩余的步骤和在 Virtualbox 下安装系统差不多. 装完以后我启动了虚拟的 XP, 我靠, 果然很卡, 可能需要图形加速的参数没有打开吧.

分类: kvm, 虚拟化 标签: , ,

坑爹的COFF格式

2011年8月4日 没有评论

最近在研究 TI 的 DSP, 有一件很坑爹的事情令我很恼火. 研究过 TI DSP 的人都知道, TI DSP 的开发主要分为三个部分, 一个是纯算法的开发, 一个是把算法整合成 DSP 可以执行, 并且可以和 ARM 的可执行文件通行的文件的开发, 最后一个是 ARM 程序的开发. 其中对于使用 TI DSP 的厂商来说, 他们开发的重点是 ARM 程序的开发, 对于第一和第二, 则由数量众多的第三方厂商来提供支持. 并且第一个(算法)一般是闭源的算法库.

坑爹的事情是这样的, 公司现在在基于 TI 最新的 DSP C674 系列的开发. 技术部门向 TI 申请到了一个 G.729 的编解码库. 我拿过来一看文件名后缀是 .a64P的, 明显是 C64 系列格式的 编解码库. 让公司的技术人员和他们交涉, 申请符合 C674 的 编解码库. TI 中国的分公司的工程师是这样说的, 674 和 64 系列的软件完全兼容.

好吧, 既然得到这样的答复, 我只好建立在相信对方的基础上去工作了. 对方提供的 Codec Engine的编译方式编译不过(TI 提供的 SDK叫EZSDK, 搞得人模鬼样的SDK, 用我最讨厌的javascript, java等等, 好像还有 cpp, 来自动生成代码), 于是我在花了几周的时间去了解底层 SDK 实现的细节. 直到把所有这些编译方式翻译成我所熟悉的 GNU Makefile + GCC的方式以后, 才发现, 对方给的库有问题, 用 EZSDK 根本编译不过, 然后看了一下编解码库的 readme 的时间(2008年), 再比较了一下 EZSDK 的发行时间(2011年6月). 心马上亮了半截. 然后去 TI的论坛 上去搜索 EZSDK 问题. 果然那边一堆骂娘的, 最后 TI 的工程师给了一句. 最新的 SDK(也就是 EZSDK)不支持 COFF 格式, 只支持 ELF格式, 而原来的SDK(DVSDK, 好吧我疯了)编译的库几乎都是 COFF 格式的, 包括我们申请到的 G.729 库. 我把 TI 的论坛上的答复发给了 TI 中国的工程师以后, 对方莫名其妙的给了我一句, 这个库不支持你们的平台, 新的库我们正在找人编译, 不要浪费时间在这个库上.

我 ……

下面是我这几天在 google 上找到的关于可执行文件格式的简单介绍:

a.out

UNIX 上最早的可执行文件格式, 特点是格式简单, 比较难实现共享库. 目前几乎被抛弃了.

COFF

COFF 比 a.out 是一种进步, 他在 a.out 的基础上增加了一个节段表, 比 a.out 更灵活. 但是默认情况下对动态连接和C++程序的支持仍然比较困难, 所以不同的操作系统做了不同的扩展, 比如 Microsoft 设计了名为 PE (Portable Executable) 的文件格式, 在 COFF 文件头部之上增加了一些专用头部.

ELF

这是现在 Linux 使用的文件格式, 一般我们用 file 指令查看一个可执行文件格式(比如 /bin/ls)的时候, 会有这样的信息:

# file `which ls`
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

说明 ls 是一个 ELF 格式的可执行文件.

简单来说, ELF 格式更好的支持动态链接技术. 具有一下特点:

  • 链接库是内存位置无关的. 可以把动态库加载到内存的任何位置都没有影响. a.out 是内存地址有关的, 必须加载到相应的内存地址才行.
  • 动态加载. 比如一个程序需要用到某个动态库, 在没有调用到这个动态库的函数, 是不会把这个动态库加载到程序中的(也就是内存映射).
  • 动态解析. 要调用的函数被调用的时候, 才会去把这个函数在虚拟内存空间的起始地址解析出来, 再写到专门在调用模块中的储存地址内, 有点像 linux 的 COW(copy on write).

分类: dsp, linux 标签: , ,