常用扩展方法收集&整理(置顶-不断更新)

613 views 十一月 14, 09 by Timothy

扩展方法,是.NET 3.5中引入的新特性,在《扩展方法使用小结中》,我有具体的介绍。合理的使用扩展方法,能节约不少的代码量,甚至能在开发中给我们带来意想不到的效果,让代码更加的简洁、易懂。其实,网上早就有了不少的大牛写的各种出色的扩展方法,以至于我有了整理一个扩展方法库的想法,把一些实用、优秀的扩展方法收集起来,一来为资源共享,二来也是为了应用在以后的项目代码中,提高开发效率。 Read the rest of this entry »

VOA Special English MP3 Downloader

58 views 三月 10, 10 by Timothy

最近上下班开车挺无聊,听腻了各式音乐,打算利用上下班的时间学学英语,锻炼下生锈的耳朵,听听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上。脚本十分简单:

?View Code PYTHON
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正式上线了

248 views 三月 05, 10 by Timothy

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延时。非常感谢!

周末踏青

214 views 二月 28, 10 by Timothy

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

 1

 

 

 

 

 

 

 

 

 

 

 

 

 

2

3

4

5 

6

没有四肢也能震撼世人–尼克·胡哲(Nick Vujicic)

183 views 二月 28, 10 by Timothy

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

vps中的iptables规则设置范例

182 views 二月 26, 10 by Timothy

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

1
2
3
4
5
6
7
8
9
10
11
12
        /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查看规则是否生效

把上述脚本再完善一下:

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
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 是我打字速度太快,还是网速很慢?……

Page 1 of 5012345102030...Last »