Category Archives: Linux

thunderbird 和 davmail 配合连接 exchange

exchange 是个恶心玩意,虽然提供了 imap 接口,但是速度巨慢,发送接收都慢。davmail 可以解决这个问题。 davmail 能干啥 davmail 可以理解为就是一个 proxy,他负责和 exchange 通讯,其他邮件客户端连接 davmail 来获取邮件什么的。网站上面有图,看 着更加直观一点。 安装配置 davmail ubuntu 里面好像直接就有,apt-get 安装就可以了。gentoo 里面没有,我在 overlay 里面找到一个 ebuild,自己修了一下,放到我的 overlay 了,在 net-mail/davmail-bin 下面。启用 server 这个 use。 安装后会创建一个 davmail 用户,需要建立一个 /var/log/davmail 的目录,给 davmail 写权限。 然后手动运行 opt/davmail/davmail.sh,有界面,配置好 exchange owa 的地址,保存,会生成 ~.davmail.properties 文件。 这里有个问题,如果 owa 地址是 http 的,那直接继续下面的就可以了,如果是 https 的,那还需要配置对应的 ssl 相关参数。我是 直接在 [...]

介绍下 org2blog

org2blog 是什么 org2blog 是用来把 org-mode 格式的文章发布到 wordpress 的工具。其实之前使用 webloger.el 也可以发布到 wordpress,不过是 webloger.el 已经基本没人维护了,这个 org2blog 作者支持还很积极,另外 org-mode 还提供了一些额外的方便编辑的方法,所以其实 是个不错的东东。 安装 其实按照上面地址的内容,安装很简单。 git clone http://github.com/punchagan/org2blog.git (setq load-path (cons “~/.emacs.d/org2blog/” load-path)) (require ‘org2blog-autoloads) 依赖 xml-rpc ,添加到 load-path 需要最新版本的 org-mode,我使用的是 emacs 24 里面的 7.7,之前使用 7.5(?) 的时候,遇到了发布的时候会在文章结尾附加 </body></html> 导致 blog 的展现挂掉的问题。 使用 配置 ;; ;; org2blog ;; (require ‘org2blog-autoloads) (setq [...]

介绍下 openresty

一直没有时间使用 ngx_lua,上周算是真正使用了下,总结下,也算是帮忙推广下 openresty。 什么是 openresty openresty 的主力作者是 @agentzh 它的网页在 这里,上面有介绍。按我的理解,他是介于客户端浏览器 js 和数据库之间的一层。 在 ajex 还没有盛行的时代,数据库的数据需要展现在浏览器的时候,一般都是使用 php/jsp 之类读取数据,然后拼表格/图表这些。在客户端机器越来越牛逼之后,把部分运算放在浏览器里面开始盛行,ajex 也越来越流行。这个时候通常还需要有个服务器端的程序来配合从数据库获取并提供数据,应该也有不少类似的程序来提供这个数据。 老版本的 openresty 是基于 perl 做的,可以上 cpan 上面 搜到 (不知道为啥这页面我打不开了)。agentzh 还专门为他写了一个 admin site,纯 js + oprensty 来实现的,可以直接在上面配置接口,很方便。目前老版本应该没人用了。 新版本的 openresty 基本上等于是 nginx 和一些 nginx 模块的集合,大部分模块都是 agentzh 和 chaoslawful 完成的,目前 agentzh 离职在家全职开发 openresty 相关,chaoslawful 还在淘宝 量子统计 。 这大概就是我了解的 openresty 的起源和目前的情况。写的比较简单,里面的曲折就不多说了,可以找上面提到的大牛聊天。 [...]

postgresql 里面的 generate_series

有个报表需要把几天的记录按照小时 join 起来,最开始的作法是通过 js 来 join 数据。后来遇到了问题,就是某天某个小时可能会没有记录,然后想破头了,在 js 里面循环的时候设置每天循环到的当前的小时。可崩溃的是还会出现有的是这两小时没有,有的是另外的,用 js 搞不定了,就尝试用 sql 搞定。 sql 开始的方法是简单的使用 full join。然后发现没法保证主表在所有的小时都有记录。后来就发现了这个 generate_series 函数,发现很有意思。地址在这里 http://www.postgresql.org/docs/9.0/static/functions-srf.html 。这里还有个 generate_scripts 的函数,可以用来遍历数组产生一个表格的。

了解了下 hbase

很早就知道 hbase 了,但是一直没有仔细去了解 hbase 是怎么回事。今天了解了下他的表结构。 这篇文章 http://www.searchtb.com/2011/01/understanding-hbase.html 其实写的挺清楚,下面这个是个例子 hbase(main):007:0&gt; scan ‘test’ ROW COLUMN+CELL row1 column=cf:a, timestamp=1312258784360, value=value3 row1 column=cf:b, timestamp=1312258795425, value=value3 row2 column=cf:b, timestamp=1312257616099, value=value2 row3 column=cf:c, timestamp=1312257621344, value=value3 在 hbase 里面访问数据都是通过 row key + column,其实也就是哪行哪列,不过不是通过数字定位。 在 hbase 里面看不到传统数据库的表格形式的数据列表,可以看到上面这种。传统数据库里面,每行的列数是一样的,如果那列没值,那也得填一个 null 之类。 hbase 就不一定了,可以看到上面的 row1 行,有两列 cf:a, cf:b,而 row2,row3 就只有一列。 所以 hbase 作为 key-value 系统的时候,row key [...]

svn merge

svn merge 的 help 信息 usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH] 2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH] 3. merge [-c M[,N...] | -r N:M …] SOURCE[@REV] [WCPATH] svn 的 merge 的本质其实就是在两个版本之间生成 diff,然后把这个 diff 再应用到另外一个版本里面。 所以可以看到 merge 和最后的那个 WCPATH 之间,通常都需要指定两个版本。WCPATH 可以是其中的一个,这个没关系。 一般都是把新多出来的部分 merge 到另一个版本,所以通常是 svn merge old_ver new_ver working_ver 其中那个 working_ver 可以是 old_ver。 最好在 merge 之前加一个 –dry-run [...]

alarm 使用不当遇到的问题

前段时间发现有个程序总是运行一段时间就挂掉,看各种日志里面都没有错误信息,感觉就是莫名其妙突然进程就没了。 大概流程是有个 perl 程序 a.pl ….. my $pid = fork(); if ( !$pid ) { my $cmdRet = `b.pl 2>&1`; print FILE $cmdRet; if ( $status ) { warn "task failed"; } else { warn "task success"; } exit; }   waitpid …….. b.pl 里面会执行 rsync 去获取一些文件,他会循环到几个机器上面去 rsync for ( @hosts ) { my $result [...]

hive 里面不能 drop table

之前部署 hive 0.6 的时候,发现用 postgress 存 metadb 的时候,不能 drop table,一执行就卡住了。当时试过 mysql,好像是有个什么问题,就没用了,后来只好用 hive 0.5 完事。 前几天有个别的事情工作不正常,以为可能是版本的问题,毕竟现在都 0.7 了。所以尝试了下直接升级到 0.7。在 0.6 版本的 hive 里面,自带了一个 postgress 用的升级 sql,但是 0.7 的没有。执行这个 sql 后,hive 0.7 能查询,但是同样的,也遇到了不能 drop table 的问题。 后来发现 drop table 的时候,hive 在尝试去查一个不存在的表,然后就卡在了这个 sql 上面,也不报错,也不超时,不知道是不是 jdbc 的问题。 然后把 mysql 用的升级 sql 迁移到了 postgress,这样 hive 0.7 在 postgress 里面也没问题了。 升级 [...]

rsync files-from 参数

rsync include/exclude rsync 支持使用 include/exclude 来过滤要同步的文件,使用这两个参数的时候,需要注意下面的这个问题 Note that, when using the –recursive (-r) option (which is implied by -a), every subcomponent of every path is vis‐ ited from the top down, so include/exclude patterns get applied recursively to each subcomponent’s full name (e.g. to include “/foo/bar/baz” the subcomponents “/foo” and “/foo/bar” must not be excluded). [...]

解析纯真 ip 库

纯真的 ip 库应用比较广泛,就那个 qqwry.dat。以前尝试过解析,死活弄不明白那写地址和 pack/unpack 啥的,晕的不行。这两天需要解析下,就尝试用 perl 写一个。 开始用 sysread/sysseek 很多都读不出来,看了n遍程序,没觉得有啥问题。后来全部改成了 read/seek 就好了,也不知道怎么回事。画了一个图说明下,参考了 http://lumaqq.linuxsir.org/article/qqwry_format_detail.html 。 发件人 2011-3-10 读来的3字节地址需要加 “\0″ 才能 unpack,不知道怎么回事,对这些问题弄不明白。对了,网上还有个 perl 版的,也能用,需要的话可以搜一下。