存档

‘Linux’ 分类的存档

用 emacs 写 blog

2010年3月10日 wd 2 条评论

不想看大段文字的可以直接看 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 能看到

// Let WordPress generate the post_name (slug) unless
// one has been provided.
$post_name = "";
if(isset($content_struct["wp_slug"])) {
    $post_name = $content_struct["wp_slug"];
}

我们只要在 weblogger.el 里面 post 一个这个变量就好了。在 post 里面能看到如果有个 X-url 的话,他会 post 一个 link 字段出来。那就好了,把上面那个 wp_slug 改成 link,然后写 blog 的时候加一个字段 X-url 就会使用这个你指定的 url 了。

这个文章就是用 emacs 写的。 :D

又研究了下,再补充点内容,呵呵。(2010-03-10)

问题是这样的,新建一个 post 的时候会出来 subject, keywords, newsgroup 这三个字段,怎么能让他加上 summary 和 x-url 呢,这样我就不用每次都手动写了,怎么弄呢,我就找啊找啊,总算找到方法了。

新建的 buffer 里面不是会有个提示么,什么 ‘–text follows this line –’, 就找这个,看是哪里提供的。在 weblogger.el 里面,找了半天,发现没有这个提示。怎么回事?要相信程序,肯定是会有的,只能是找错了地方。

看看这个 el 的看头,引用了 message.el,搜了一下,这个原来是 gnus 提供的,找到这个 el,搜了一下,找到那几个字符了。原来是在这里面添加的。然后我就尝试定义 message-required-news-headers 这个变量,发现不好用,看来还是得在 weblogger.el 里面弄。在这里面找到 weblogger-edit-entry 这个函数,这个就是发帖子的时候用的,在里面有个顺序往下看,这个 message-goto-keywords 比较可疑,在 message.el 里面搜了下,果然,同时还看到一个 message-goto-summary,加上看看,嘿嘿,果然就搞定了。再找找 x-url,没找到,那就仿 summary 的写一个呗

(defun message-goto-x-url ()
  "Move point to the x-url header."
  (interactive)
  (message-position-on-field "X-url" "Subject"))

这不完了么,这下就爽多了,嘿嘿。。不过如果能把那些 keywords, summary 等字段改成什么 categories,tags 就好了。。。有时间看看。。。

又研究了一下,加点内容。。(2010-03-11)

其实就是上面留的这点东西,我自己改吧了一下,好像能用了。地址在 http://github.com/wd/work/tree/master/weblogger.el/,里面的 permlink 就是指定 url 的。我看发文章好像没问题了。

另外,我试着在这个 mode 里面让他自动启动 auto-complete-mode,可是怎么弄都不行,不知道怎么回事。下面是我在 .emacs 用的代码。

(add-hook 'weblogger-start-edit-entry-hook (lambda()
    (auto-fill-mode -1)
    (abbrev-mode -1)
    (auto-complete-mode 1)
    ))

有人能帮忙不。。。

分类: Linux 标签: ,

Jemplate 的简单介绍

2010年2月27日 wd 没有评论

如果你还在用 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 %]
    asdff < sdf > sdfsdf
[% END %]
</p>

然后用 Jemplate 编译一下

jemplate --runtime > a.js
jemplate --compile test.tt >> a.js

这之后就和 test.tt 没关系了,除非你改了他,那就需要重新生成这个 a.js。

再看我们的页面。里面 jquery-1.4.2.min.js 是为了方便操作页面使用的,jquery 决对是个好东西,写 js 应该使用他。那个 jquery.b.js 是我们自己写的,真正把数据添加到页面的代码。

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>test</title>
    <script src='jquery-1.4.2.min.js' type="text/javascript" charset="utf-8"> </script>
    <script src='a.js' type="text/javascript" charset="utf-8"> </script>
    <script src='jquery.b.js' type="text/javascript" charset="utf-8"> </script>
</head>
<body>
<div id=main></div>    
</body>
</html>

在这个 jquery.b.js 里面,我们让 jemplate 处理了一下 test.tt,给他里面的 test 变量赋值 ffffff,然后把设置到 #main 的 html 里面。

$(function() {
    var html= Jemplate.process(
        'test.tt', { test: 'ffffff' }
    );
 
    $('#main').html(html);
});

这样这个页面就完事了,简单么,呵呵。你可以用 jemplate 和 js 强大的语法来实现更多的功能的。

分类: Linux 标签: , ,

ssh 之穿越与反穿越

2010年1月21日 wd 没有评论

有时候我们不得不和网管对着干,去想办法去穿越某些防火墙,访问到我们要访问的资源。例如下面的情况,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 -> C
C-> | -> A

在 A 上面执行下面的命令

ssh -f -N -R 9999:A_ip:80 C_ip
-R 是反向代理, -g 在这里好像不好用不知道为什么

从 C 上面访问自己的 9999 端口,就会访问到 A 的 80 端口。

分类: Linux 标签: ,

NB 的 ssh proxycommand

2009年12月9日 wd 4 条评论

是从水木上面学来的。还参考了这个

如果你工作的环境是下面这样的,那 ssh 的 proxycommand 对你会很有用。

your pc -> gw server -> work server

一般公司的服务器的网络都会设置安全级别,防止出现安全问题。那个 gw 也叫跳板机。需要在 gw 机器上面有 nc 。

修改 .ssh/config 文件,加上
Host gw
Hostname gw.abc.com

Host work
Hostname work.abc.com
User wd
ProxyCommand ssh gw nc -q 0 %h %p 2>/dev/null

这样直接 ssh work 就好了。

那个 -q 0 可能有些版本的 nc 不支持。去掉就好了。那个 %h 表示 hostname,那个 %p 表示 port,可以直接写死。其它的 man ssh_config 吧。

分类: Linux 标签: ,

昨天和 sssslang 和 xwl 聚了个会

2009年11月29日 wd 没有评论

和 sssslang 倒是很早就见面来着,好像是他那会刚回北京?聊了聊 linux 相关的东西,呵呵。

说起来 linux 用户也挺郁闷的,平时旁边没几个用的,就算是用的,好像也都是 ubuntu 用户,基本就是当 windows 用的,很少主动去挖掘 linux 的一些东西,这些用户比较务实,主要还是在工作方面,开发的东西也都是工作相关的,比较少去做一些无聊的开发。。。所以和他们好像也没什么好聊的。

前两天 #emacs-cn 的 xwl 提议聚会,大家一拍即合,呵呵,定了时间地点,那就聚一个。 :D

聊的东西基本围绕在 emacs, linux, mac 上面。最主要的是 xwl 秀了下他的小黑 macbook 和他的 emacs,sssslang 倒是很详细的问了下 xwl 用的 elisp 扩展,可我对那些不是很明白,我觉得 elisp 就是一个变态的语言。。。对我来说,还记得的可能有下面几个吧。

1 他的 emacs 的标题会显示宋词,会定时变化。
2 有个渐变的扩展,叫做 highlight tail 的,很 cool 吸引小 mm 的必备啊,呵呵。
3 他用了很多定时器,比如执行完编译后,会 split 出来一个新的窗口显示一些编译信息,如果没有错误,那等 3 秒,这个窗口就会自动关掉。还有 1 里面说的那个,也是定时器弄的。
4 有个叫 woman 的东西不错。
5 xwl 和 sssslang 一直强调 ido 是个很不错的东西,不过我是不太明白的。呵呵。
6 xwl 设置打开文件默认就进只读,因为一般来说打开文件都是看看,同时也不可能写很多文件。只读后,还能设置很多单键的快捷键,比如 vim 里面的 hjkli 这些,这样让 emacs 变的有模式起来,我觉得很 cool。不过居然没有别人想到么?那应该有个 vimoper-mod 吧。。。
7 还有个用来画图的 graphviz 很 cool 的。

因为 xwl 用的是 mac,linux 也就是我和 ssslang 了,ssslang 没有本带,基本就是我秀了下我的 kde,openbox,conky 这些,好像也没别的了。说到 linux 有个郁闷的,就是我没使用什么 networkmanager,wicd 之类,都是手动配置的 wpa_supplicant ,这样就需要知道 wifi 的 key 的类型什么的,没办法得到的话就只能猜,很不方便。人家 mac, windows, s60 都连上 wifi 上网了,我这还在猜 key 的类型。。。 刚发现,iwlist 实际是能显示 key 信息的。

mac 的效果还是很不错的,国内的很多 mac 用户真是白瞎了这个尤物了,装什么 windows。xwl 可真是 apple 的忠实 fans,花 200 块钱升级系统。。。

说了这么多,我感觉我很像是去打酱油的。。。

说实话 Starbuck 的咖啡好像也不怎么样。。。尤其一会就凉了。。很郁闷,不过回来和老婆说,老婆说:你个傻子,就不知道点一个冰的啊。。。是啊,我为什么没点一个冰的呢?。。。。

分类: Linux 标签: , ,

ktorrent dht 不能用的问题

2009年10月31日 wd 没有评论

在国内,没有 dht 的 bt 客户端是混不下去的。

我一直就怀疑国内的 tracker 和那些国内的 bt 客户端是一个利益共同体,那些 tracker 根本就不让别的 client 连的。比如从 ydy 下的 heroes,里面三个 tracker 都是 btfans.3322.org 的,可全部都是 connection refused,虽然从 web 能看到这个这个 torrent 的种子很多,可是我这就是下不了。

这也是国内用户总抱怨 linux 下面的 bt 客户端下载速度慢,或者根本下不了的原因。因为他根本就不能从 tracker 获得信息。要不可以试试看从 mininova 下国外的 torrent,不过好像 thepiratebay 被 gfw 后,这些种子也不好下了。mininova 好多 torrent 的 tracker 是这个。不过好像可以找替代的 tracker 来替换。

一直以来就发现 ktorrent 的 dht 显示的 DHT: 0 nodes, 0 tasks。搜了后发现用户说的都是 ktorrent 2 的,都是 06 年的事情了。之前搜了好几次,都没有结果。

今天为了下 heroes,就又看了下。找到问题在哪里了。

可以去看看 ~/.kde4/share/apps/ktorrent/log 文件,我这里有个 dht bind faild 的错误。原因是设置里面的 network interface 选的是 all,改选一下实际使用的 eth0 就好了。再看看 log 是不是就没错误了?

然后找一个火热的种子下一个,dht 那应该有数了吧?

分类: Linux 标签: ,

KDE+openbox 实在太赞了

2009年10月13日 wd 没有评论

好像我一闲了就总喜欢换de玩。。可能因为这个最花时间。。汗。。

第一次用 kde 还是过年的时候,那会是 kde 4.1? 好像是,那会还装了一个 kde live , 就是 svn 版的 kde,花了 n 多的时间。。。结果最后实在受不了 kde 的一些 bug,就换回 gnome 了。下面列几个我觉得不能忍的 bug(有些 bug 是在 dualhead 里面才有的)。
1 kconsole 的 tab title 截断居然是从前面开始的?emerge 的时候只能看到最后的几个字符。kconsole 里面居然还不能用 shift 增加选区,如果要选几个屏幕的东西,只能慢慢拖。
2 部分 gtk 程序(比如 roxterm)在 kde 里面最大化的时候居然下面还留一条?
3 我想在最上面加一条监控信息,开始试着用 conky, 发现不能控制不让别的程序不复盖他,让他一直显示。那就加了一条 panel,写了一个 applet 来监控。结果发现经常出现正常重启之后,上面的 panel 没了,下面的 panel 做的调整也没了。回复到了最初的状态。日啊。
4 pidgin 什么的,有时候一些程序不能用快捷键弄到前台。好像有最大化窗口的时候容易出现。
5 还没想起来,不过上面那几个已经让我不能忍了。

kde 换了 gnome 之后用了一段时候,又换用了一下 kde 4.2 好像还是不习惯,直接就换用 openbox+tint2 了。一直到前几天又闲了。。

openbox + tint2 其实也挺好用的,自定义性很强。可有点郁闷的是,他倒底不是 DE,我就懒的去弄那个 ivman …

还好有 kde+openbox.用了 openbox 后,上面说的 1,2,3,4 都没问题了。term 用 roxterm , 监控用 conky, 不是一般的爽。

之前 openbox 有个 bug,http://bugzilla.icculus.org/show_bug.cgi?id=3792 和
http://bugzilla.icculus.org/show_bug.cgi?id=3773 ,那个 patch 可以用。所以现在 kde+openbox 不是一般的爽啊。哈哈。

openbox 那么多的自定义功能,还有 kde 强大的 DE 功能。现在我的桌面如下
dekstop

分类: Linux 标签: , ,

kernel 2.6.31 给 radeon 用上 kms

2009年9月13日 wd 没有评论

intel 显卡用户享受 gem 已经很久了,kernel 2.6.31 总算给 ati 卡的用户带来了福音。

首先得在 kernel 里面打开相关的选项
Generic Driver Options –> Graphics support –> 这下面 dri 相关的和几个 fb 相关的,看着选吧。
Staging drivers –> 取消Exclude Staging drivers from being built –> Enable modesetting on radeon by default

编好后重启下,然后看看 dmesg |grep -i drm 看看,有下面这行就好了。
[drm] Initialized radeon 2.0.0 20080528 for 0000:01:00.0 on minor 0

然后再看看 /var/log/Xorg.0.log ,有没有这个,这个应该表示相关的 x 软件还没有支持。
(EE) RADEON(0): [dri] RADEONDRIGetVersion failed because of a version mismatch.
[dri] radeon kernel module version is 2.0.0 but version 1.17.0 or newer is needed.
[dri] Disabling DRI.

$ glxinfo |grep -i render
direct rendering: Yes
OpenGL renderer string: Software Rasterizer

接下来就升级几个包的 9999 版本,这几个 ebuild 在 x11 overlay 里面有
# x11-drivers/xf86-video-ati-9999
# media-libs/mesa-9999
# x11-libs/libdrm-9999

装好后,重启下 x ,看看上面那几个信息。/var/log/Xorg.0.log 里面应该有 KMS 相关的信息了,glxinfo 如下
$ glxinfo |grep -i render
direct rendering: Yes
OpenGL renderer string: Mesa DRI R300 (RV380 5460) 20090101 x86/MMX/SSE2 TCL DRI2

好,o 了。不过我怎么觉得窗口切换好像没那么流畅了?。。。等会看看,不行还得换回去。。。汗。。。
update: 找到一个 bug url , 不知道是不是一样的 http://bugs.freedesktop.org/show_bug.cgi?id=23085 不过里面说应该已经解决了才对。。xf86-video-ati 我用的也是最新版的呀

分类: Linux 标签: ,

gentoo 里面字体

2009年8月31日 wd 没有评论

ubuntu 做了一个好事,给好几个包打了个补丁,让字体效果达到了空前的好效果。在 gentoo 里面也可以用这几个补丁。

这几个包是下面这几个。在 devnull 这个 overlay 里面有打了补丁的包,版本更新也能跟得上 portage ,建议直接加这个 overlay。
media-libs/fontconfig
media-libs/freetype
x11-libs/libXft
x11-libs/cairo

加了 devnull overlay 后,加一个全局的 ubuntu 的 use(或许再加一个-cleartype 的use, 这两个 use 是互相冲突的,效果好像差不多)。

然后重新 emerge 那几个包,要注意看装的是不是都是 overlay 里面的。

装好后,执行 eselect fontconfig list 看看,应该多了一些东东。
[1] 10-antialias.conf *
[2] 10-autohint.conf
[3] 10-hinting.conf *
[4] 10-hinting-full.conf
[5] 10-hinting-medium.conf *
[6] 10-hinting-slight.conf
[7] 10-no-sub-pixel.conf
[8] 10-sub-pixel-bgr.conf
[9] 10-sub-pixel-rgb.conf *
[10] 10-sub-pixel-vbgr.conf
[11] 10-sub-pixel-vrgb.conf
[12] 10-unhinted.conf

最主要就这几个了吧,看看那个 *,按照这个选了,然后程序启动一下 fx 看看效果。
那个 10-hinting-* 可以试试看 full 和 slight,看喜欢哪种效果了。 见鬼了,今天又发现字体好像不怎么好看了,然后折腾了会,发现用 autohint 的效果是最好的。。。晕了。。 2008-11-29.

这样设置好之后,就不需要在 local.conf 里面设置相关的了。我的 local.conf 里面只是修改了一下 sans sans-serif 等的排序。对了我用的是雅黑+consolas ,效果大概就是这个吧 http://twitpic.com/7dg2q 。抓这个图后好像还改了些东西,还是有些变化的。

建议还是用这个 eselect 来调整字体吧。

分类: Linux 标签:

使用 pdnsd 来缓存 dns

2009年7月28日 wd 2 条评论

如果你的网络实在很快,好像也没这个必要。当然我用他还有一个目的就是我的 dns 我做主,省的被劫持。

打开一个网页有时候 dns 查询就占了一些时间,如果想把这个时间也节省下来,那可以试试看这个。类似的软件还有 dnsmasq,我觉得 dnsmasq 没 pdnsd 灵活一点,反正基本的缓存功能肯定是都有的。。。我这还有同事用 bind 做缓存,呵呵,选什么看各自喜好了。

我用的 wicd, 他会修改 /etc/resolv.conf 这个文件,就算在他的设置里面设置了全局 dns 也没用。不过还好他提供了一个 /etc/resolv.conf.head 文件。这个文件里面的东西会被放到 /etc/resolv.conf 的开头。所以我在那里面写上了 nameserver 127.0.0.1。

具体到 pdns 的设置,好像我也没改什么。

server {
	label = "opendns";
	ip = 202.181.224.2, 202.181.202.140;
	#ip = 208.67.222.222, 208.67.220.220;
#	reject = 208.69.32.0/24,  # You may need to add additional address ranges
#	         208.69.34.0/24,  # here if the addresses of their search engines
#	         208.67.219.0/24; # change.
	reject_policy = fail;     # If you do not provide any alternative server
	                          # sections, like the following root-server
	                          # example, "negate" may be more appropriate here.
	timeout = 4;
	uptest = ping;            # Test availability using ICMP echo requests.
   ping_timeout = 100;       # ping test will time out after 10 seconds.
	interval = 15m;           # Test every 15 minutes.
	preset = off;
	policy=included;
	exclude=".abc.com";
}
 
server {
	label = "yahoo";
	ip = 10.62.163.4, 10.62.163.9;
	timeout = 4;
	uptest = ping;
	ping_timeout = 100;
	interval = 15m;
}

我设置两个 server。第一个解析除了 .abc.com 之外的,第二个解析 .abc.com 。这个 abc.com 实际上是我们内网的一个地址,只能在内网 dns 解析。

分类: Linux 标签: ,