iTimothy

君看一叶舟,出没风波里

0%

最近上下班开车挺无聊,听腻了各式音乐,打算利用上下班的时间学学英语,锻炼下生锈的耳朵,听听English MP3。以前一直比较喜欢VOA Special English的慢速版,虽然还是有一定的难度,但听起来多少能找到点感觉。今天突然心血来潮,google了下VOA的老家,很不幸,网页无法打开,第一直觉就是VOA被伟大的wall给挡住了。搜索了一下,果然如此……不过咱有SSH,怕啥?通过SSH果然可以正常访问,这也印证了前面的猜想。不过VOA的mp3貌似每天都出,一个一个点链接下载,实在是个体力活,人本来就有惰性,俺也不例外!于是,有了下面的想法……

咱IT民工,比较拿手的就是让电脑帮俺们去完成一些重复劳动,减轻体力负担,如果能让电脑自动帮俺下载mp3该多好!加之最近又在看python的东东,python很强大,几行代码就能完成复杂的工作。于是开始手痒,何不用python搞个下载器试试呢? 对了,有wall,怎么办?不怕!咱有VPS,哈哈哈!

开工!在VOA的页面,上找到RSS页面地址(RSS页面包含有最新发布的文章以及mp3下载链接),然后对RSS进行分析,写python脚本,调试,运行,效果还不错!最近发布文章的mp3被啪啪啪的拖到了VPS上。脚本十分简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/python
#VOA Special English MP3 Downloader.
#Written by Timothy 2010.3.10
import urllib,time;
from xml.dom import minidom
from os import system
url = "http://www1.voanews.com/templates/Articles.rss?sectionPath=/learningenglish/home"
link = urllib.urlopen(url)
#content=link.read()
rss = minidom.parse(link)
elements = rss.getElementsByTagName('media:content')
for element in elements:
if element.hasAttribute('type'):
print 'Now downloading:' + element.getAttribute('url')
system('wget -nc ' + element.getAttribute('url'))

运行效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
timothy@vps:~$ ls
VOAEnglish.py
timothy@vps:~$ chmod +x VOAEnglish.py
timothy@vps:~$ ./VOAEnglish.py
Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-sin-2578-smoking-09mar10.Mp3
--2010-03-09 16:37:40-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-sin-2578-smoking-09mar10.Mp3
Resolving www.voanews.com... 72.247.217.25, 72.247.217.9
Connecting to www.voanews.com|72.247.217.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7765680 (7.4M) [audio/mpeg]
Saving to: `se-sin-2578-smoking-09mar10.Mp3'

100%[==========================>] 7,765,680 10.0M/s in 0.7s

2010-03-09 16:37:41 (10.0 MB/s) - `se-sin-2578-smoking-09mar10.Mp3' saved [7765680/7765680]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-ag-broccoli-9mar10.Mp3
--2010-03-09 16:37:41-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-ag-broccoli-9mar10.Mp3
Resolving www.voanews.com... 72.247.217.25, 72.247.217.9
Connecting to www.voanews.com|72.247.217.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1905683 (1.8M) [audio/mpeg]
Saving to: `se-ag-broccoli-9mar10.Mp3'

100%[==========================>] 1,905,683 9.44M/s in 0.2s

2010-03-09 16:37:41 (9.44 MB/s) - `se-ag-broccoli-9mar10.Mp3' saved [1905683/1905683]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-dev-int-womens-day-8mar10.Mp3
--2010-03-09 16:37:41-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-dev-int-womens-day-8mar10.Mp3
Resolving www.voanews.com... 72.247.217.25, 72.247.217.9
Connecting to www.voanews.com|72.247.217.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1907146 (1.8M) [audio/mpeg]
Saving to: `se-dev-int-womens-day-8mar10.Mp3'

100%[==========================>] 1,907,146 8.81M/s in 0.2s

2010-03-09 16:37:41 (8.81 MB/s) - `se-dev-int-womens-day-8mar10.Mp3' saved [1907146/1907146]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-tia-molly-brown-05mar10.Mp3
--2010-03-09 16:37:41-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-tia-molly-brown-05mar10.Mp3
Resolving www.voanews.com... 72.247.217.9, 72.247.217.25
Connecting to www.voanews.com|72.247.217.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7429432 (7.1M) [audio/mpeg]
Saving to: `se-tia-molly-brown-05mar10.Mp3'

100%[==========================>] 7,429,432 8.68M/s in 0.8s

2010-03-09 16:37:42 (8.68 MB/s) - `se-tia-molly-brown-05mar10.Mp3' saved [7429432/7429432]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-pia-todd-duncan-7mar10.Mp3
--2010-03-09 16:37:42-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-pia-todd-duncan-7mar10.Mp3
Resolving www.voanews.com... 72.247.217.9, 72.247.217.25
Connecting to www.voanews.com|72.247.217.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7470601 (7.1M) [audio/mpeg]
Saving to: `se-pia-todd-duncan-7mar10.Mp3'

100%[==========================>] 7,470,601 6.06M/s in 1.2s

2010-03-09 16:37:43 (6.06 MB/s) - `se-pia-todd-duncan-7mar10.Mp3' saved [7470601/7470601]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-itn-tea-party-6mar10.Mp3
--2010-03-09 16:37:43-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-itn-tea-party-6mar10.Mp3
Resolving www.voanews.com... 72.247.217.25, 72.247.217.9
Connecting to www.voanews.com|72.247.217.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2405145 (2.3M) [audio/mpeg]
Saving to: `se-itn-tea-party-6mar10.Mp3'

100%[==========================>] 2,405,145 3.98M/s in 0.6s

2010-03-09 16:37:44 (3.98 MB/s) - `se-itn-tea-party-6mar10.Mp3' saved [2405145/2405145]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-econ-corp-history-5mar10.Mp3
--2010-03-09 16:37:44-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-econ-corp-history-5mar10.Mp3
Resolving www.voanews.com... 72.247.217.9, 72.247.217.25
Connecting to www.voanews.com|72.247.217.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1940583 (1.9M) [audio/mpeg]
Saving to: `se-econ-corp-history-5mar10.Mp3'

100%[==========================>] 1,940,583 6.77M/s in 0.3s

2010-03-09 16:37:44 (6.77 MB/s) - `se-econ-corp-history-5mar10.Mp3' saved [1940583/1940583]

Now downloading:http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-mosaic-05mar10.Mp3
--2010-03-09 16:37:44-- http://www.voanews.com/MediaAssets2/learningenglish/dalet/se-mosaic-05mar10.Mp3
Resolving www.voanews.com... 72.247.217.9, 72.247.217.25
Connecting to www.voanews.com|72.247.217.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7341034 (7.0M) [audio/mpeg]
Saving to: `se-mosaic-05mar10.Mp3'

100%[==========================>] 7,341,034 9.01M/s in 0.8s

2010-03-09 16:37:45 (9.01 MB/s) - `se-mosaic-05mar10.Mp3' saved [7341034/7341034]

timothy@vps:~$ ls
se-ag-broccoli-9mar10.Mp3 se-pia-todd-duncan-7mar10.Mp3
se-dev-int-womens-day-8mar10.Mp3 se-sin-2578-smoking-09mar10.Mp3
se-econ-corp-history-5mar10.Mp3 se-tia-molly-brown-05mar10.Mp3
se-itn-tea-party-6mar10.Mp3 VOAEnglish.py
se-mosaic-05mar10.Mp3
timothy@vps:~$

VPS和VOA都在米国,下载速度很快啊……几秒钟的功夫……

最后,再想办法把mp3统统拖回来本地即可。此脚本适合拥有VPS的、有兴趣的同学使用,后续会慢慢改进脚本。

VPS正式上线,先恭喜下自己 ,嘿嘿。
经过多方比较,最后选了BurstNET的VPS最低配置的那一款,具体配置如下:

VPS Software: vePortal™ / OpenVZ™
CPU: 1000MHZ GUARANTEED
Memory: 512MB GUARANTEED
Disk Space: 20GB (RAID BASED CONFIG)
Bandwidth: 1000GB/MONTH
IP Addresses: 2
Management: BASIC MANAGED
DDOS Protection: CISCO™ GUARD

可惜是基于OpenVZ的,不支持PPTP的VPN,只能架OpenVPN。其他的地方还比较满意,2个IP,1TB月流量是亮点。装上了Ubuntu 9.10 32bit系统,用PHP+MySql+Nginx+FastCGI 搭建了WordPress环境自上次重启后,用uptime命令查询了一下,运行了两天又十小时,还算稳定。free -m命令,显示剩余内存131MB,为了测试速度,打开了到vps的ping,自家的成都电信ADSL,自测速度如下:
image
麻烦各位天南地北的同学帮我测试一下速度(ping vps.xiaozhou.net),在回帖中告诉下我你的宽带是网通、电信还是其他,ping平均多少ms延时。非常感谢!

天气终于逐渐暖和了,整个冬天在家里都快发霉了。趁着天气晴朗的周末,带上家人和孩子,去了成都的三圣花乡,算是新年第一次外出游玩。顺便带上了相机,瞎拍了几张,练练手,欢迎大家拍砖。

1

2

3

4

5

6

看完这段视频,感觉很震撼人心,也感到自己很惭愧,特地拿来跟同学们分享一下。想到自己在平时生活中遇到困难或者难题的时候,常常会感到沮丧、失望、懊恼、怨天尤人,而Nick Vujicic虽然天生就没了四肢,却能够有着一种异于常人的积极、向上的乐观,能够活出更加丰盛的生命,甚至能影响他人,各位同学们,也许你不认同他的信仰,但四肢健全的我们如果都能像他一样,那困难也不复存在了,感谢主!

忙乎了一两天,俺的VPS算是上线了,基于Ubuntu Linux的,512MB内存,20G硬盘,1TB月流量,赠送2个IP,还不错。不过,现在还没有把博客迁移过去的打算,此VPS仅作为练手而用,只是建了一些ssh账号,供自己和同事跨栏用,还简单的搭建了基于Nginx+MySql+PHP+FastCGI的WordPress环境,并成功拉过来俺的一位同事在上面安了个blog,嘿嘿。 提到VPS,最重要的还是安全,毕竟你的系统是直接面向公网,如果不加强防范,很容易成为别人手里的肉鸡。Linux中的iptables,用过的同学都知道,是一个基于Linux内核的防火墙,功能比较强大,下面是iptable的一些常用的规则设置:

        /sbin/iptables -P INPUT DROP              #禁止掉服务器所有入口请求,后面的规则只允许部分常用的服务端口
        /sbin/iptables -P OUTPUT ACCEPT          #允许服务器访问出口请求
        /sbin/iptables -A INPUT -i lo -j ACCEPT    #允许本地接口访问
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP #禁止ping,因为ping是基于icmp协议的
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT    #允许部分常用端口入口请求访问
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT  #允许所有已经连接端口请求
        /sbin/iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP              #DROP掉所有失效或者新的请求

可以把上述脚本保存起来,执行,然后用命令/sbin/iptables -L -n查看规则是否生效

把上述脚本再完善一下:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:~/bin
export PATH

case "$1" in
start)
        echo -n "Staring to write your Iptbales:..."
        /sbin/iptables -P INPUT DROP
        /sbin/iptables -P OUTPUT ACCEPT
        /sbin/iptables -A INPUT -i lo -j ACCEPT
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP
        echo "Ok"

;;
stop)
        echo -n "Cleaning your Iptables:..."
        /sbin/iptables -F
        /sbin/iptables -X
        /sbin/iptables -Z
    /sbin/iptables -P INPUT ACCEPT
    /sbin/iptables -P OUTPUT ACCEPT
        echo "Ok"
;;
restart)
        echo -n "Cleaning your Iptables:..."
        /sbin/iptables -F
        /sbin/iptables -X
        /sbin/iptables -Z
        echo "Ok"
        echo -n "Staring to write your Iptbales:..."
        /sbin/iptables -P INPUT DROP
        /sbin/iptables -P OUTPUT ACCEPT
        /sbin/iptables -A INPUT -i lo -j ACCEPT
        /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
        /sbin/iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT       
        /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
        /sbin/iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP
        echo "Ok"
;;
*)
        echo "Usage: $0          {start|stop|restart}"
esac

exit 0

这样,我们就可以用start/stop/restart的参数来启用、禁止iptables防护了,很方便。另外,可以把此脚本放入/etc/init.d,让它像系统服务一样,在VPS启动的时候自动运行。

PS: 1.此脚本参考自网上,并作了部分修改 2.搜狗云输入法,也有郁闷的时候,在写文章的时候,候选词半天不出来,很卡,囧rz 是我打字速度太快,还是网速很慢?……

这段时间对Linux相当痴迷,玩了下CentOS,现在又看上了Ubuntu。对Ubuntu偶早有所闻了,以前也在虚拟机上装过,那漂亮的UI是各个Linux版本中相当出众的,安装、维护的简单和方便,也是至今都Ubuntu拥有众多追随者的原因。正好,俺家中有一台老牛机(以前大学时候用的台式机),这机器历史算长久了,从大二一直跟随俺到现在,有7、8年历史了。毕业后把这台机器略升级了一下,到现在都一直闲置在书房中,完全成了摆设。自从用上了笔记本,老婆也用上了上网本,这台台式机更是没人用了。昨天突然心血来潮,决定在老牛机上装个Ubuntu玩玩,没事了还可以开着下下高清BT,充分利用下闲置资源。

老牛机配置如下:
CPU: Athlon 1700+
内存: KingSton 1.5GB(1G1+2562)
硬盘: 希捷80G IDE接口
显卡: Geforce 6200
主板: nForce2

开始行动

说干就干,首先在Ubuntu的老家拖了个最新的Ubuntu 9.10 32bit Desktop Edition的ISO。老牛机的光驱,经久失修,已经是个残废了。本来想扔掉的,但机箱面板那个挡板也被我搞掉了,扔掉光驱就有个缺口,不美观,只有留下了。主板支持4个USB接口,两个坏掉了,剩下两个还可用,刚好偶又有个2G的U盘(捡来的),所以打算通过U盘来安装系统。用U盘装系统好处多多,不用刻盘,并且速度比光驱快,嘿嘿。

用Ultra ISO利器,把安装镜像写入到U盘:

ubuntu
写完后的U盘驱动器图标:
ubuntu2

安装系统

拔下U盘,插上老牛机器,一步一步安装,Ubuntu从此跑在了老牛机上,发现比以前的XP快不少。并且Ubuntu支持大部分硬件,无须驱动,显卡驱动可以用Ubuntu默认的,也可以自己单独安装。安装界面也相当的友好,即使是第一次使用的用户,也能根据向导来完成安装。

一点使用体验

1.5G的内存,运行Linux当然会快很多,从开机和系统加载的速度就可以感受到,比以前的XP快不少。装上显卡驱动后,能打开一些可视化特效,比较炫。
由于Ubuntu自带Firefox浏览器,于是立马装上了AutoProxy插件,再用Linux自带的ssh命令,加上一个国外的SSH帐号,立马实现了跨栏的效果……为了以后方便,做了个简单的shell脚本:

echo "ssh -N -D 127.0.0.1:7070 ssh-account@server-address" > connect.sh
chmod +x connect.sh

-N: 不需要shell登陆

-D: 建立本地端口映射,这里使用的7070端口,把这端口配置到AutoProxy里面去,就OK了

后面是ssh-username@server-ip

控制台运行此脚本后,会提示输入ssh密码,输入后,连接完毕,可以打开Firefox畅游了

关于BT下载工具,偶用Transmission,貌似Ubuntu已经自带了,没有的也可以单独安装。

关于中文输入法,偶一般是在浏览网页时输入中文,Firefox可以装一个搜狗的云输入插件,方便、绿色、环保,强烈推荐下。

小结一下

老牛机器装上Linux感觉挺赞,如同重新焕发了活力一般。家有闲置老牛机的同学不妨试一试。

为了Blog日后的改进和完善,偶越来越需要一个本地的测试环境。毕竟,直接在本地改程序,再上传到线上看修改后的效果,这是比较有风险的做法,并且也很不规范。由于WordPress是基于PHP的,而偶的操作系统又是Win7,首选的做法,就是用IIS+PHP+MySQL来搭建测试环境。并且,Windows下面配置起来没什么难度。不过我更倾向于Linux,所以选择了CentOS 5.4 + MySQL + PHP + Nginx,装在VirtualBox的虚拟机中。一来为了熟悉下Linux,二来是为了以后搞VPS先热点身,嘿嘿。

装好CentOS,没选择X Windows,直接用了Licess同学的一键安装包,非常方便。Licess同学为我们写好的Shell脚本里面,能自动完成下载、编译、安装的过程,省去很多繁琐的过程。安好后,需要根据自己的喜好更改一下设置即可。其中也遇到很多莫名其妙的问题,偶又是Linux新手,所以只有询问google老师,不过还好都找到了答案。待基础的几个软件都搞好之后,就可以安装WordPress了,然后将线上的博客内容通过PHPMyAdmin导出,再在虚拟机中导入即可,一个测试环境就OK了。另外,为了传文件的方便,还在CentOS上装了个vsftp,用以和Windows交换文件。经过这次折腾,发现原来Linux下面也这样好玩,打算以后多学习和折腾一下Linux,把家里那台N久没开过机的老台式机,也装个Ubuntu玩玩。

linux1

linux2

冬去春来,飞雪无痕,满目江山满目春;雪散雨淋,放歌高吟,满腔情愫咏新春;鞭炮炸鸣,灯红夜银,普天同乐闹新春!祝各位新老博友同学新春快乐! 送上自己拍的照片一张,献丑了~~

happynewyear

自从手机刷了WM6.5的最新版系统后,以前常用的短信聊天模式没了,变成了普通模式,感觉很是不习惯。于是请教了下Google老师,很快找到了答案。原来,WM6.5的短信聊天模式,是在注册表中设定的。二话不说,打开注册表编辑器,定位到注册表的如下路径:HKEY_CURRENT_USER\Software\Microsoft\Inbox\Settings ,将SMSavailable这个键的值,由默认的0(普通模式),改为1(聊天模式)即可。保存修改,重启手机,熟悉的聊天模式又回来了。

自从实现了Ajax的评论后,俺还是对评论部分有点不太满意,于是又开始拿评论开刀了。

1.首先想到的,是评论没有分页显示的功能,如果评论数量太多,会把页面拖得很长,在google搜索了一下,原来WordPress原生已经支持评论分页的功能了,所以一不做二不休,继续改动。 其实改动很简单,打开模板的comments.php,在类似wp_list_comments();列出评论的代码后面,加入下面的代码即可:

<div id="commentnavi">
        </div>
  1. 实现Enter+Ctrl快捷回复,这个比较简单,用jQuery实现,正好这两天也在学jQuery,就当练练手吧。为了增加代码可读性,方便以后维护,将这部分自定义的jQuery代码放在单独的js文件中:timothy.js

    $(document).ready(function(){

     //Ctrl+Enter for fast submit
     $("#comment").keydown(
         function(event){
             if(event.ctrlKey && event.keyCode == 13)
             {
                     $("#submit").click();
             }
         });
    

    });

代码比较简单,检测评论框的keydown时间,并判断是否同时按下了Ctrl键和Enter键,如果条件成立,则直接出发提交按钮的点击事件。将此部分js代码上传,并在header.php引入此脚本文件,效果立马就有了。这下同学们可以通过Ctrl+Enter快捷提交评论了。不过后来发现一个问题,这种用Ctrl+Enter快捷提交的评论,不会触发Ajax评论的效果,后来仔细找了找原因,发现Ajax评论的jQuery脚本中,并没有绑定提交按钮的点击事件,而是绑定的整个Form的submit事件,所以把刚才的脚本小小修改一下即可:

$(document).ready(function(){

    //Ctrl+Enter for fast submit
    $("#comment").keydown(
        function(event){
            if(event.ctrlKey && event.keyCode == 13)
            {
                    $("#commentform").submit();
            }
        });
});

这下就搞定了,支持Ctrl+Enter提交的Ajax评论,呵呵。

3.这个修改源自Zww同学的提议,在每条评论中增加”回复”按钮,原以为我的皮肤不支持嵌套评论的,尝试着在WordPress的设置项中,把嵌套评论给Enable了,这样的话,每条评论就自动有了个回复按钮。接下来,想实现点击回复的时候,自动把评论的同学的名字填入到评论框中,也就是类似 @XXX: 的形式。大体思路是通过jQuery来实现,绑定这些回复按钮的click事件,获取评论的同学的名称,设置到评论框中。其实Zww同学早就实现了这样的功能(前去围观),所以jQuery也可以偷师过来了:

    $(".reply").click(
    function(){
        var name = $(this).prevAll().find("cite:first").text();
        $("#comment").text("@"+name+":").focus();
    });

同样,放在$(document).ready里面即可。这次改动,俺意外的发现,原来我的皮肤支持嵌套评论……或许是加入了Ajax评论组件的原因,嘿嘿。

此文很菜,没啥技术含量, 算是学习jQuery的一点心得吧,前路茫茫,吾将继续折腾下去……

我用的这个皮肤有点旧,很多东西都不支持,但是又舍不得换掉,于是留下了折腾的余地,生命在于折腾嘛。看着Zww同学和久酷同学的Blog,都支持Ajax无页面刷新评论,心里也痒痒的。好像WordPress最新的版本,已经支持Ajax评论了,但是又不知道怎么搞。在Google网上一阵乱搜,找到个不错的解决办法,一个老外同学的一篇文章,照着一步一步改下来,还真实现了,除心里一阵狂喜之外,心里还小有成就感……其实网页也是我的弱项,接下来需要一边学jQuery,一边在现有的皮肤上动刀,再美化美化,呵呵。 最后,推荐下老外同学的添加Ajax评论的文章: http://zeo.unic.net.my/wordpress-ajax-commenting-revisited/

=========================威武的分割线=====================

updated: 2010.02.03

上面的文章较老,后来发现添加Ajax后,有bug,于是按照Zww同学推荐的方法,找到另一篇指导文章,捣鼓了半天, 总算搞定了。脚本中由于需要访问一些元素,但是由于我的皮肤本身不支持嵌套评论,所以也把.js脚本小改了一下,屏蔽掉部分东西。这篇文章非常不错,强烈推荐下:

http://willin.heliohost.org/?p=1271

今天闲来没事,把Blog的边栏又改了一下,去掉了那个很长的Archives,从04年到现在的文章归档列表,太占空间了,灭掉!另外一个变化较大的地方,是以前的唠叨,一直用的腾讯的滔滔,没办法,国内很多微博都被停掉了。不过最近消息,腾讯也要把taotao和谐掉,当初用这个只是为了方便,腾讯滔滔其实算不上是个名副其实的微博,功能上限制太多,竟然还不能用手机浏览器的方式发表,只能算个怪胎。昨晚在Zww同学的博客看到文章,用php脚本的方式,把twitter的内容给“抓”过来。突然感觉茅塞顿开,以前一直想用js实现抓twitter的内容到自己blog,无奈js是客户端浏览器运行的,国内的用户访问不了twitter,又怎样能把twitter上发的推抓过来呢?如果用php,脚本是在服务端运行,那就不一样了,何况我的空间也本来就在墙外,呵呵,于是去wordpress的老家找了找,果然有twitter的插件,php的,Twitter Tools,这下可好了,毫不犹豫的把腾讯滔滔淘干掉,直接用上twitter才是正道!
Twitter Tools考虑的还挺周到,装上启用后,插件的后台管理页面,会给你提供一个发推的页面,其实我经常用的Firefox的TwitterBar插件,也挺不错,在此向各位同学推荐下。