Category Archives: Linux

使用 perl 发送中文邮件标题乱码

代码如下面,解决乱码的方法是使用 base64 编码。 use MIME::Base64::Perl;   open(MAIL, ‘|/usr/sbin/sendmail -t’);   my $recver = ‘wangdong@abc.com’; my $alertTitle = "中文 asdfsdf sdfsdf sdf sdf s df sd fsd f sd fsd f sdf sdf sdf"; my $alertText = "body ";   my $encoded = encode_base64($alertTitle, "");   print MAIL "From: alert\@abc.com\r\n"; print MAIL "To: $recver\r\n"; print MAIL [...]

emacs 的 emms 里面的乱码

emms 是基于 emacs 的一个播放器,不过其它他做的应该只是管理音乐,具体播放还是靠 mpg123 或 mplayer 这样的程序。 前几天下了一些 mp3, 这两天就又搞了搞 emms。emacser.cn 有篇文章就是介绍这个的,就不多说了。主要是被编码问题搞死了。 下载的 mp3 的 tag 是 gbk 的,可是设置了 emms-info-mp3info-coding-system 为 gbk 没效果,而用 mp3info 程序看了 mp3 的 tag,确实是 gbk 的,奇怪了就。后来发现 emms 还带了一个 emms-print-metadata 这个程序,这个程序貌似不需要设置编码,他会出来的结果直接就是 utf8, 可就算用这个 (通过设置 (setq emms-info-functions ‘(emms-info-libtag)) ),出来的结果还是乱码。 后来突然想起来是不是 cache 的问题,然后就发现有两个地方可能有 cache,一个是 emms-cache.el 一个是 emms-history.el,把这两个对应的 cache 文件删掉,再运行一次 emms 就没问题了。我还设置了下下面的。 (setq emms-cache-file [...]

备份 gentoo

前段时间换本子,把 gentoo 重装了一遍,记下来一些需要备份的东西。 rc-update 启动列表,从这里面能找到你之前随机启动的东西 world 主动安装的程序列表 kernel 内核的配置文件,换机器后可能需要调整里面的磁盘 cpu 什么的配置 layman 加了什么 overlay etc.tar.gz 程序的配置文件基本都在这下面,好在这个目录也还不算大 home.tar.gz 有些程序的配置文件在这里面,比如 firefox 什么的,另外比如 kmail 把邮件也存这里面 /opt 我把自己安装的一些程序放到了这里面,这些程序基本都是不依赖别的程序的。如果是需要 make 安装的,一般会写一个 ebuild。 fonts 自己安装的字体,一般放在 /usr/share/fonts/ 下面,看习惯了 stardict dicts 这个一般在 /usr/share/stardict/dic/ 下面,好像放 home 下面也可以,没试过。。 我自己的大概就上面这些了吧,另外还有就是自己的 overlay 备份了这么多东西完全弄好好像也花了好几天时间,当时是在 5.1 前后的时候弄的,好像花了4,5 天?没事还是别折腾了

总算搞定了我的无线

本子的网卡是 bcm4312,内核里面是有驱动支持的,只要编译了,再装一个 firmware 就应该能用了。可我这的表现是开机能连上一会,后面会断,断了后就再也连不上了,只能重启。 没办法,找了半天,看到一个 broadcom-sta 的驱动,这个是 broadcom 官方出的。装的时候刚好赶上了 2.6.33 的内核,这个内核对比 2.6.32 有不少的变化。我记得之前没有先的选项在 .config 里面好像也是可以搜到的,不过是注释的。现在 2.6.33 里面,直接就搜不到了。而安装 broadcom-sta 的时候要求的几个内核选项花了好大功夫才搞定。 比如这个 wireless_ext。make menuconfig 后搜一下,能搜到,不过会发现他没有 Location,只有个 selected by。这就是说,只有满足了那些 selected by 的时候,这个才会被选上。在 selected by 里面,能看到 GELIC_WIRELESS [=n] && NETDEVICES [=y] && NETDEV_1000 [=y] && WLAN [=y] && GELIC_NET [=n] || IPW2100 [=m] && NETDEVICES [=y] && WLAN [=y] [...]

elisp 最最初级的一点入门知识

其实上次写 http://wdicc.com/how-i-became-a-emacser 的时候,是想写一点 eslisp 入门的东西的,结果总觉得好像也写不出来什么,就写成另一篇了,呵呵。(看这篇前最好先看看那个吧,那个更入门。) 不过我还是觉得,用 emacs 如果不会一点 elisp,那基本你是用不住的。记那些无聊的快捷键有什么意思,有意思的是你能让 emacs 用你希望的模式工作。今天 twitter 上面看到一个词”计算姬”,感觉很有点意思,呵呵,小蜜就是给你干活的嘛,不要被她折磨就好。 其实主要是我自我感觉目前了解的 elisp 的东西,好像基本就够用了,所以才想写出来,给比我还糊涂的指条明路。 1 数据类型。 elisp 是有类型在里面的,我看好像有什么 sequence, number 之类,具体有哪些不重要,重要的是你使用的时候,比如比较的时候,切记要弄明白他们是什么类型。我找到一个 format 函数,感觉很好用,可以转类型,具体可以查文档,可以多用用。 2 调试 调一个程序的时候,我觉得最基本的就是 print 和 message 这两个函数了吧,加上上面的 format,基本应该能搞定了。在一段 elisp 后面使用 C-x C-e 就能直接执行他,执行之后就能在当前的 emacs 里面起作用,不过对我等菜鸟来说,有时候会遇到一些奇怪的问题,不行就还是再启动一个 emacs 来验证结果吧。 3 emacs 简单设置 掌握了上面两个,基本就可以定义自己的东西了。一般用的是 setq,比如下面这个 ;; 防止页面滚动时跳动, scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动,可以很好的看到上下文。 (setq scroll-margin 3 [...]

我是怎么从 vim 转向 emacs 的

从尝试用 emacs,到现在基本(有些地方还不是很适应)习惯用 emacs,算起来得有 n 年了,我都忘记最早接触 emacs 是什么时候了。在 2010-3-20 之前尝试过很多次,基本都是记几个快捷键,过几天就又忘记了。后来自己想了下为什么不能持续的原因,我觉得有两个。 1 没有在日常工作里面使用。 之前我的开发工作基本都是直接在某台服务器上面的,这样就开发调试会比较方便,而那些机器一般要不会装 emacs,这样不常用就会导致记住的快捷键过几天就忘记了。最近刚好需要在本机写点程序,也就刚好用上了。 2 不会 elisp。 emacs 的配置文件都是 elisp 写的,而不经过配置的 emacs 就编辑文件来看,我觉得还不如去用 vim,vim 好用多了。我想刚看到 elisp 的时候一般都会觉得这个语言太变态了,全是一堆的括号。。。而不会 elisp 就会导致你只能去机械的复制别人的配置,如果刚好是你想要的,那还好,而如果还想做点小的修改,那就会很郁闷,用起来郁闷,不用可能更郁闷。不爽多了,就干脆不用 emacs 了。 如果你能在日常工作中经常使用,并且会写程序(比如 php,perl 什么的,随便哪个都行),那么对于基本没怎么配置过 .vimrc 的用户来说,切换到 emacs 其实应该还算是一个比较简单的事情。 1 emacs 是无模式的。 这就是说你不用经常去按那个 Esc 来切换模式了。没有模式也就意味着你不能使用像 vim 那么简短的命令了,因为像 a,i,o,h,j,k 这些对 emacs 来说,这些都是正常的输入字符,所以我们不得不在这些字符前面加上 C(control), M(Meta 一般是 Alt), S(shift) 这些前缀。在 [...]

强大的 git 和 git svn

在春哥的鼓动下,用上了 git。有 git svn 支持,还是很好用的,建议 svn 用户都试试看。 使用 git svn clone SVN_URL 来 clone 初始化你的本地 repo,然后就和 svn 没关系了,直到你需要把你的改动提交到 svn 的 repo。 先说说 git 的一些本地操作,就捡我自己用的说吧,我觉得应该也够用了。 首先 git add 是用来添加文件的,编辑好新的文件后,使用 git add file_name 就能把他加入到 git 里面管理,当然,如果还不打算提交他,那也可以先编辑以后再 add。 然后 git mv 改名,git rm 删文件,这和一般的 linux 命令差不多,就不用多说了。要记得的是,如果想让你的改动加入到 git 的管理里面,那就最好使用这两个文件来改名和删文件。如果直接用 linux 命令操作,比如改名,git 会认为你要删一个文件,并且那个新的文件还没不会加入到管理里面。 然后就是 git status 了。执行这个能看到当前 repo 的分支(例如下面的第一行说的 wd)里面有哪些改动,这个里面的信息应该是能分四类。一类是对文件的操作,比如添加删除文件等(changes [...]

用 emacs 写 blog

不想看大段文字的可以直接看 http://github.com/wd/work/tree/master/weblogger.el/。 先看看 这个, 我用的weblogger.el 就是从那来的,这个 el 打了 html 支持和 tags(summary) 的支持。 因为写中文 title 的时候,生成的 url 会有一堆的中文字符,看起来就是乱码,不可读,这时候可以在 wp 的后台指定一个 post-slug,url 会根据这个生成。这里我主要是研究了一下对 post-slug 的支持。 weblogger.el 里面 应该是在 weblogger-determine-capabilities 里面判断一下你的 blog 支持的类型,我看了 wordpress 的支持的 methods,里面metaWeblog.newPost, 和 blogger.newPost 应该都是支持的,他应该首选的是 metaWeblog 那个。 然后呢,就是看 wp 的 xml-rpc 文件,里面有个 mw_newPost 对应的就是 metaWeblog.newPost 应该是。在这个函数头试了一把,用的确实是这个。然后就看这里面是怎么处理的了。 这里面最后用的是 wp_insert_post 发的贴子,再看这个函数,能看到里面用的是 post_name 来生成的 post-slug。那么我们只要设置一下这个变量就可以了。在这个函数里面,搜一下 post-name 能看到 [...]

Jemplate 的简单介绍

如果你还在用 php 写 web,那么你 out 了,呵呵。现在流行的是 rest + js。当然,rest 层可能还是 php 写的,不过还有用 perl 写的 openresty 1.0 和完全用 c 写的 openresty 2.0。openresty 是个很不错的东西,本来想细说一下,发现不知道怎么说好。去 cpan 上面搜吧。openresty 2.0 是基于 nginx 的,agentzh 在他上面加了好多的模块,让 nginx 直接和数据库通信,都不用 php 了。前端完全用 js 来搞定,以后应该都是 js 工程师了。 smarty 写 php 的人应该都知道吧,Jemplate 是很类似的一个东西,是方便你写 js 的一个工具。我这写了一个非常简单的例子。 下面这个是 Jemplate 的一个模板,保存为 test.tt。 <div>[% test %]</div> <p> [% FILTER html [...]

ssh 之穿越与反穿越

有时候我们不得不和网管对着干,去想办法去穿越某些防火墙,访问到我们要访问的资源。例如下面的情况,A 和 C 之间是有个墙的,不通。可有个 B 能访问到 C,而 A 又能访问到 B ,那我们可以通过你 ssh 做代理穿越那个墙。 A -> | -> C \-> B -> C 在A 上面执行下面的命令 ssh -f -N -g -L 8888:C_ip:80 B_ip参数的含义:-f 放到后台-N 不在对方机器请求 shell-g 能使得别的机器能连接 A 的那个端口-L 就是代理,具体看 man 这样,在 A 上面访问 8888 端口,就能访问到 C 的 80 端口了。 那如果是下面的网络情况,那怎么办?A 能访问到 C,但是 C 不能直接访问 A。 A [...]