txt2tags 与 xelatex输出pdf

txt2tags由于输出target比较多,支持pdf,html,docbook,redmine wiki,所以基本被我“相中”。

公司要求写个需求文档,就试着写了下,用自己的写的格式输出tex,再转换xelatex-ctex格式,就发现生成pdf没有问题了,编译完全通过,只不过为了pdf有更好的脸面: 支持标签目录,目录颜色,页眉页脚样式修正就做了个脚本对txt2tags输出的格式做了简单调整,现在一个make,html,pdf就ready了,哈哈!

下面是我的tex输出心得:

1.tex系统有N多实现,在windows上ctex不能配置就能工作,在linux上面要安装texlive-cjk相关,安装recommded,extra等包。

gentoo系统有ebuild,相对简单,ubuntu貌似我现在用的11.10还没包上线(ubuntu NB,但不专业了).

  1. 我用xelatex,tex文档开头得改成:
documentclass[UTF8,adobefonts,a4paper]{ctexart}

%ctexart就是ctex article了,开始恼了半天。

3. adobefonts得有,网上下载的放进/usr …

more ...

各种用来写wiki和文档的light-weight markup 工具

wordpress,redmine,wikipedia 等都支持使用一些标记语言来写wiki页面,其实这些东西都是一种 "Lightweight_markup_language " ,搜索了下发现跟redmine使用的textile类似的东西包括: markdown, markdown2(extra), txt2tags, AsciiDoc, texy! ,BBcode,Mediawiki等等,都有一个特点 :*就是使用纯文本标记来标记文档的格式标题等*

经过比较发现:

#. .. raw:: html
***AsciiDoc**    最复杂,可以用来写 文章,书本,与docbook转换比较好,功能上最解决与     docbook,有 git         manual,Programming iOS 4 这样的作品都是用它写的,查看其手册的确也很好很强大的感觉。* .. raw:: html
#. **txt2tags**          输出格式多,未来可以支持 redmine wiki, wordpress, #. **markdown** 用的最多,存在各种实现,c,python,perl等各种语言的版本 … more ...

--host --build --target到底什么意思?

老是在做交叉编译,其实有时候对这三个东西的理解并不是那么清楚

从交叉工具链的情况来看,可以总结如下

--build= 谁在这里编译? 意思说你目前的编译动作在哪里跑的 ? 如果是编译一个arm工具链,虽然工具链为为arm弄的,但是构建工具链的时候是在主机上进行的。所以 --build=i686-pc-linux-gnu

--host= 目前编译出来的程序在哪里跑 ? 所以工具链好了之后,给目标系统编译程序全部是设置host为arm的。

--target=为谁编译程序,这在交叉编译的时候跟host一个意思,一般是guess的,而且configure 脚本会说是 =--host.

通常我们编译复杂的情况就是交叉编译了,据说还有一种很复杂的情况,三个平台:

比较,我现在在 i686机器上,想编译一个在 ppc上运行的交叉工具链,然后这个交叉工具链为arm生产程序,这个就算比较复杂了。

应该是binutils,gcc,libc的时候这个三个--要很谨慎的设置了。

可能是

  • --build=i686-pc-linux-gnu
  • --host=ppc-xxx
  • --target=arm-xxx

没有实验过,可以改天实验下,学习下。

续:三平台交叉编译实验

对binutils源码解压 …

more ...

关于工具链的编译uclibc/gcc

使用之前弄的脚本编译工具链其实还是比较轻松的,脚本也是比较稳定的,不过重点在于配置上,包括target名称的选择,uclibc的配置

一直困扰的nfs挂载不正常的问题最终发现还是uclibc配置不对,另外,对于thread的支持,一般需要使用nptl,然后如果要用gdb的话,gdbserver的编译必须要在uclibc里面启用thread debug,要不然会缺少东西:

#error No uintptr_t available; your C library is too old.

接着还会说thread_db.h 造成的某结构体的成员th不存在。

新的uclibc 0.9.32编译时需要链接libgcc_eh库文件,这个库文件在static阶段是不编译的,如果要让编译,需要硬性打patch实现。

这里贴一个正确的uclibc配置

#
# Automatically generated make config: don't edit
# Version: 0.9.32
# Wed Nov 23 14:53:07 …
more ...

关于linux文件系统的sync,async, sync/fsync 命令

linux默认情况下几乎所有应用场合都是不会将文件立马保存入磁盘的,在嵌入式上也是同样的表现,如果mount时候加上sync选项就可以保证数据立马写入,但是这种会造成系统较多的写入磁盘,磁盘的寿命就不会太长了,如果是需要保存数据,可以显式调用命令sync来写入所有文件,或者fsync来保存某个文件。

more ...

shell获取进程ID的方法: pidof | pgrep | ps-A+grep+awk

shell获取进程ID的方法:

我知道和实践过的有这么三种:

  1.  ps -A |grep "cmdname"| awk '{print $1}'
  2.  pidof "cmdname"
  3.  pgrep "cmdname"

这三种在bash和busybox ash里面的运行结果稍有不同,

第一种完全相同,但是因为调用命令次数较多,性能上是不行的。

第二种: pidof 只能获取程序的文件名匹配到的进程号,在ash中 比如 pidof "usr/bin/telnetd" 和 pidof "telnetd"中结果不一样, 前一种结果为空,但是在bash中执行两者一样。

第三种: pgrep跟1的效果相同,因为是单一命令,比第一种性能要好得多。

所以nanoRC就改进为pgrep。

more ...

linux编程库libevent

libevent – an event notification library

发现一个跨平台的event库:

The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also support callbacks due to signals or regular timeouts.

Libevent additionally provides a sophisticated framework …

more ...