Author Archives: wd

我就是我。

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 相关参数。我是 直接在 [...]

老文一篇,关于小毛

一个老文,从 buaa bbs 翻出来,贴这里吧 无题(1) 序曲 好久以前就想养只猫了,可是条件不允许。没法子,只能看看别人pp的小猫过过瘾了。 去年冬天的时候,养猫的欲望越来越严重,以至于那个时候就找robomm定了一个,其间小叶子还和我说要是想养的话可以给我找人抱一只。呵呵,不过后来robomm的大猫好像没有怀孕,结果空欢喜一场。再后来就要过年了,因为照顾起来也不方便,所以就放弃了。过年来了我就在打算抱只小猫了。开始本来打算找宠物市场买一只,可是robomm的那片文章,让我放弃了这个念头,trademark一只在怂恿我去买一只,不过还好我能顶得住,呵呵。平时也不去什么猫的论坛,那就只好让robomm给我留意一下啦,呵呵。 联系 robomm给我介绍的我联系过两个,其中有一个只是发email问了问相片,不过他好久才给我回的,他给我回信时,我都已经和另外一个谈好了,呵呵,那个就是万晓飞。我介绍了我的情况之后,她说可以给我,不过有个条件,就是要送她的大猫一些猫粮,说为了让我付出点代价,这样我至少不会随便处理掉猫猫,我想都没想说没问题,然后就这么说定了。第一眼看到这些小猫的相片的时候,他们还不点大,其实也比现在大不了多少,非常可爱。而我尤其喜欢那个头上有点黑毛的小猫,之后的联系中她也同意给我那只了。高兴中,我就在bbs上面发了帖子,给大家看,那个就是我要的猫。:p 郁闷之初 因为没有满月,所以要等1,2个星期才行。上周一我给他发了个mail问小猫的事情,周二他给我打电话,说我可以过去拿了,不过告诉我那只说好了留给我的给她姐姐了,当时我很郁闷。后来一想,还不都一样啊,呵呵,我说那就拿起他的吧,没关系。然后就说起送大猫什么猫粮的事情来,然后他就说周一有个小mm花了80多块钱的猫粮,其实也就值40多,被骗了。所以让我买罐头好了,7块钱一听。也差不了那么多。期间我也没有问我需要买多少,因为我想,既然都这么联系好了,那多少还不是一个形式而已?而她也一再表示她不是要卖钱。从后来接触中听她的口气,她确实应该不缺钱,北京的有钱人。 没有订到我想要的那个,多少也有点郁闷吧,不过这还好。 郁闷之中 周二她说我工作日晚上都可以过去吧,我说我还没有准备好猫用的东西,所以周三我需要去买点东西,周四吧,她说可以。周二晚上我来bbs问好了robomm,然后周三下午请假去买了猫粮,和一些猫用的东西。周四,我和她联系,问我晚上什么时候过去,让我郁闷的是,她说今天晚上不行。。。。。。 郁闷之极 既然不行,我说那就周五吧,而且我想周五也刚好,抱回来是周末,也好照顾一下她。周五也就是今天了。今天我们部门搬到楼上,从早上9点开始,一直忙到下午6点,还有一些东西没有搞定,不过只能周一了。中午吃完饭我给他发短信问我什么时候过去,后来我就去忙了,结果他给我发的消息我没有看到,后来他给我打电话,然后我们说好了过去的时间,不过中间她问我给大猫买了多少东西,我说6听。然后他就表现出很失望的样子,我立刻郁闷了。。。 我说如果你觉得我买的少了,不够诚心的话,那就算了,我也就不过去了。后来反正两个人jjww了半天,还是说好过去了。 喜悦之初 没想到搬家忙到了6点,这一天我就中午吃饭的时候喝了口水,而且一直搬桌子柜子,脚都疼死了,连坐一下都没有时间,不过总算是忙完了。 站在地铁里面,我的脚一直在疼,想相还要走那么远,稍有点不爽。 到了她家,门口有只黄色的大猫,跑来跑去的,据说他们有三只大猫。还有两只就是现在丁丁(我听他们喊他丁丁,我觉得也挺好听的,而且他确实很小不点,wy还说像只老鼠,呵呵,就这么叫吧 :p)的父母了。 万晓飞给我在沙发下面摸了半天,把丁丁给我摸了出来,呵呵,小不点,然后头顶有点淡黄色的毛,非常可爱。我看到这只小猫,之前的郁闷全都没有啦,哈哈。据说这只猫的眼睛是鸳鸯眼,反正我也不懂了。。。(to be continued…) 无题(2) 说在前面的话 偶得小丁丁的名字在我叫了两天之后,终于没有能顶得住大家的压力,改名叫毛毛啦,小名就叫小毛好了,赫赫。事情是这样的,小猫抱回来之后,大家就开始给她起名字了,如下:小白、小黑、毛球、小红,我一看这可不行啊,而且关键是丁丁大家都不大同意阿,没法子,就叫毛毛吧,其实我一开始就打算叫这个的。这个名字好歹赢得了几个人的同意,赫赫。 继续上次的话题 把小毛塞到包里,我就急急忙忙的出来了。小毛一到包里,就开始喵喵叫个不停,声音很细,可是一直叫,我抱着包,然后赶紧跑出来打了个车就杀回来了。跑上楼,打开包,小毛不叫了,开始环视周围环境,哈哈,肯定吓了一跳。 家有小毛 赶紧给他准备猫粮、猫砂、水、小窝什么的,准备妥当之后,才想起来,我还没有吃饭呢,搬家搬了一天,脚后跟都疼死了。烧水煮了点面,吃完面发现小家伙不见了,喊了半天也没有反映,想想可能钻床地了。床下好多东西,掏了半天才看到,摸出来后,小家伙一溜烟,又跑到下面去了,呵呵,把我郁闷的,再次摸出来后,我就把东西都靠里面的墙边放,这样他就算再跑进去也容易够了。后来还是xh给猫的小窝上面盖了一件衣服,放进去之后小毛才算老实了,在里面呆着,哈哈,原来他是害羞阿。刚抱回来的时候给她拍了几张相片,不过没敢用闪光灯,怕吓着他,所以比较模糊,呵呵,感兴趣的可以到我的ftp上面下。 一个星期左右 现在小毛抱回来大概一个星期左右了吧,刚开始那两天天气比较冷,我这里暖气不是很足,我担心他冻着,所以就把他抱到被子里面呆了两个晚上。后来那几天转暖和了,而且我发现她的眼屎特别严重,怀疑是晚上太热所致,所以后来几天就没有让他钻了。晚上她老是要从被子的边角往里面跑,往往是我每次醒来都会发现他已经在被子里了,然后就把他抱出去,下一次醒来就又来了,呵呵,一点办法都没有。不过这几天发现小家伙懂事多了,困了会爬到你的腿上睡一会,玩一会,要不然就会爬到自己的窝里面睡,晚上也比较少钻被子了。呵呵。 尾声 就说这些了吧,我觉得养一只小猫也没有说的那么恐怖了,你只要让他找到了吃饭喝水方便的地方,基本上就不用你管了,他要是什么找不到,就会和你喵喵的叫得,你要是听到了就把他抱到吃饭喝水的地方,他自己就会去解决了。至于洗澡、打针、剪指甲之类的事情也不是天天都有,所以还是比较省心的,呵呵。 说在后面的话 就是既然上一次的标题用丁丁历险记了,这次还是继续吧,哈哈。

介绍下 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 里面也没问题了。 升级 [...]

hive 里面的 UDTF

hive 支持 UDF, UDAF, UDTF,这几个让你使用 hive 更加便捷。 UDF udf 就是一个自定义的 function,输入一个或多个参数,返回一个返回值,类似 substr/trim 之类。写起来比较简单,重构 UDF 类的 evaluate 方法就可以了。可以参考 http://richiehu.blog.51cto.com/2093113/386112 。 这是一个 urldecode 函数。 package com.wd.hive.udf;   import org.apache.hadoop.hive.ql.exec.UDF; import java.net.URLDecoder;   public final class urldecode extends UDF {   public String evaluate(final String s) { if (s == null) { return null; } return getString(s); } [...]