现在网站都有很多服务器负载均衡,GFW封锁有时并没有block掉所有ip,可以通过
寻找可用ip 或速度快的ip
Posted by Unknown at 4:37 AM 0 comments
lvs 学习总结
lvs,(linux virtual server)
服务器集群系统, 透明性, 性能, 高可用性, 可管理性, 可编程性.
三种ip负载均衡技术
VS/NAT 网络地址转换
调度器进行地址重写
VS/TUN ip 隧道
隧道技术
VS/DR 直接路由
改写请求报文的MAC地址
lvs集群的通用体系结构
负载调度器
服务器池
共享存储
调度器是服务器集群的唯一入口点,它可以采用ip负载均衡技术,基于内容请求分发技术,或者两者相结合.
这里有篇文章介绍配置lvs http://os.51cto.com/art/200701/39205.htm
http://www.linuxvirtualserver.org/zh/index.html
Posted by Unknown at 5:48 AM 0 comments
几个常用的命令
banner
basename 获取脚本的名字不错
dd
du -sh / 查看整个系统占用了多少空间
egrep 与grep相比的缺点是?
nice
nohub
script usage.txt 记录操作
strings /bin/passwd
uuencode uudecode
Posted by Unknown at 1:17 AM 0 comments
vmware player + gentoo 安装笔记
现在尝试习惯记载软件安装笔记,免得以后重复做的时候麻烦.
虚拟机装习惯就用官方的minimal livecd,启动过程中会把加载的驱动高亮显示,比如
Mouse is ImPS/2 Generic Wheel Mouse
声卡 driver = snd_ens1371
videocard VMware SVGA II Adapter
pcnet32
开启远程登录
cat /etc/motd
/etc/init.d/sshd start
passwd root
准备分区 文件系统
cfdisk fdisk
mkfs. mkswap swapon
支持中文
/etc/env.d/
环境变量
LANG="en_US.UTF-8" LC_COLLATE="C"
教育网比较快的镜像
http://ftp.sjtu.edu.cn/sites/gentoo/
几个要注意的问题
按照handbook安装一般没什么问题,内核编译的时候选好驱动就可以了,scsi
livecd把硬盘识别为hda, 后来系统会识别成sda
vmware player 进入bios设置的快捷键是F2
虚拟机里装gentoo可以当cygwin用,所以,use 里 "-X" 算了.
http://en.gentoo-wiki.com/wiki/VMware_Guest
Posted by Unknown at 12:27 AM 0 comments
vmware player 与 virtual box
在win 7 系统里两个都装了后,vmware player的桥接模式就一直有问题了.
vmware player本来有个vmnetcfg.exe,用这个后就可以发现由于虚拟网卡被桥接了之类的所以就不能上网了,vmnetcfg.exe现在默认没有安装出来,要用 /e 选项 解压出来
VMware-player-3.1.0-261024.exe /e ./vmware
一般喜欢用桥接,双向访问都方便.putty上去,复制粘贴什么的都有了.
http://blog.csdn.net/leehq/archive/2009/12/25/5077654.aspx
Posted by Unknown at 6:15 AM 0 comments
expect
expect是为了解决某些命令只能在交互式下运行,不方便用脚本控制的问题的.
spawn 开进程
expect 与 send 对应 就可以了.
复杂一点加点控制语句.
http://blog.csdn.net/emilyzhang98/archive/2010/01/12/5173970.aspx
expect教程中文版
Posted by Unknown at 1:58 AM 0 comments
Nagios
开源的工具有一个重要的特点就是可扩展性好,Nagios也不例外.
这里有篇连载文章http://os.51cto.com/art/200903/113685.htm 介绍的不错.
不过我还是不喜欢从源码安装,卸载不方便啊,有条件自己打包一下再安装.
要是做运维的话,是不是要24小时不关机,手机来短信了神经都会紧张? :(
http://www.nagios.org/
Posted by Unknown at 6:43 PM 0 comments
系统平均负载 load average
有5个可用:
tload 能够绘制出负载变化的图形
uptime 同时显示开机以来的时间
w 同时显示出已登录的用户
top 这个对资源占用太高,不建议使用
cat /proc/loadavg 通过/proc系统信息得到平均负载
http://bbayou.blogbus.com/logs/38290786.html
统计最近1,5,15分钟的系统平均负载
top命令参数比较多,还可以查看cpu利用率之类的
http://os.51cto.com/art/201005/200652.htm
load average的详细解释可以查看 http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html
Posted by Unknown at 3:45 AM 0 comments
网易游戏2010年运营维护工程师笔试题
dns 的udp包有大小限制,所以也可能会使用到tcp
在所有的路由中,静态路由优先级最高。当动态路由与静态路由发生冲突时,以静态路由为准
又称数据分块,即把数据分成若干相等大小的小块,并把它们写到阵列上不同的硬盘上,这种技术又称“Stripping”(即将数据条带化),这种把数据分布在多个盘上,在读写时是以并行的方式对各硬盘同时进行操作。从理论上讲,其容量和数据传输率是单个硬盘的N倍。N为构成RAID0的硬盘总数。当然,若阵列控制器有多个硬盘通道时,对多个通道上的硬盘进行RAID0操作,I/O性能会更高。因此常用于图象,视频等领域,RAID0 I/O传输率较高
,但平均故障时间MTTF只有单盘的N分之一,因此RAID0可靠性最差。所需最少硬盘数:1块或多块
可靠性是单独一块盘的1/N
同时读磁盘数:N
同时写磁盘数:N
磁盘利用率:N 或 100%
Posted by Unknown at 6:56 PM 0 comments
Labels: 笔试
command-line editing 还是emacs-mode方便点
编辑器一直用的vim,没用过emacs,但是发现命令行里用emacs-mode会方便不少,这可能也是它被选为默认模式的原因.
光标移动
ctrl+A ctrl+E ctrl+F ctrl+B
删除
Ctrl+D ctrl+k
历史命令翻找
ctrl+P ctrl+N
历史命令查询
ctrl+R
还记得shlug里有人说用小拇指下部那里的肉按ctrl...:)
Posted by Unknown at 11:57 PM 0 comments
Labels: 笔记
准备找个linux运维的岗位
最近抓紧时间把awk,sed之类的命令用一下.以前学习perl玩的时候就感觉到这些命令根本就不是设计给普通用户使用的.像perl的语法,如果你天天写还好,但是一段时间不写,多半会退化的很快,比如以前用perl写了个自动签到的小程序,crontab里设置每天按时运行,现在去看,虽然大致意思能看清,但现在对perl的语法完全陌生了.当然都知道孰能生巧,可是找工作就不行了,基本功很重要.
抓紧学习.
Posted by Unknown at 8:14 PM 0 comments
bbfreeze, py2exe,pyinstaller
刚看了一下bbfreeze,功能貌似比py2exe强大
自动解决了dll依赖问题,支持import egg files,zip
弄了个hello world,生成的文件不是很大,还自带个解释器,当然这个解释器只能import你用到的packages.
Posted by Unknown at 1:19 AM 0 comments
国内视频网站的api
优酷也有api, http://dev.youku.com/
土豆也有api, http://api.tudou.com/
可是不开放给个人使用.不过没关系,自己想办法.
优酷有个最新视频推荐的rss, http://kurss.youku.com/index/rss_cool_v/ ,可是限制了user-agent 必须是iKu
http://blog.tianyanzhu.tk/290.html
http://letsgoustc.spaces.live.com/Blog/cns!89AD27DFB5E249BA!875.entry
http://yangdc.javaeye.com/blog/310899
http://hi.baidu.com/dongyuejiang/blog/item/1875536017158ed48cb10d69.html
Posted by Unknown at 4:30 AM 0 comments
学习websocket
websocket 是个很有意思的东西.
这篇文章把websocket的通信协议讲的很清楚,需要更深入地了解可以看http://dev.w3.org/html5/websockets/
pywebsocket是Google开源的Web Socket extension for Apache HTTP Server.也可以独立运行测试.这里有个简单的Websockets tutorial/example with pywebsocket.
现在好像只有webkit内核的浏览器支持websocket,普及还需要一段时间.
参考:
http://code.google.com/p/pywebsocket/
Posted by Unknown at 4:28 AM 0 comments
怎么把你的名字seo到google 搜索的首页
其实就是给定关键字,seo它.首先如果你的名字比较特殊,那就比较好办,但你不幸与哪个名人同名,这就有点悲剧了...
这几天我初次seo一个关键字的时候,学到了一些东西,记录一下.
1.firefox上有个NoDoFollow插件可以帮助看网页上的链接是否有 nofollow 属性.
一般国内名博,google groups等都是nofollow的
2.高质量的回链很重要.每天添加2,3个就很不错.链接的文本也很重要.
3.使用google webmaster, sitemaps
4.一些站长工具很有帮助,可以帮助查看各个搜索引擎的收录情况.
各个搜索引擎公司都提供一些其它blog托管之类的服务,注册那些服务并链接自己的网站有助于收录.
我们只需要seo那一个页面就可以了,所以要经常更新那个页面.那个页面里关键字内容的组织也很重要.比如我现在弄的这个页面彭艳还不怎么好,其实没怎么弄这个页面在这个Google关键字的首页了,现在是想办法把它弄到第一个.
Posted by Unknown at 2:40 AM 0 comments
最近在比较学习python的各个模板
python 的web框架很多,模板也很多,有些框架自带模板,比如django,还有一些独立的模板
jinja2 语法上与django自带的模板比较像
web.py 带的模板自己使用的python的语法.
python.org 好像是用的是mako
那些可以预先compile生成python代码的模板,应该在某些应用上效率高些.
百家争鸣,让没个人都可以找到适合自己使用的,固然不错,不过这也会让初期选用时感到迷糊,
不过在学习过程中,会加深对这方面的认识.
http://jinja.pocoo.org/2/documentation/
http://www.makotemplates.org/
Posted by Unknown at 8:43 AM 0 comments
Labels: python
玩一下 flask
现在还是0.4版,代码比较短,刚好可以学习一下。
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return "Hello World!" if __name__ == '__main__': app.run()
Posted by Unknown at 3:02 AM 0 comments
Racket
plt-scheme 改名叫 Racket 了
ubuntu 源里的版本很低,4.2的好像...
要到这里下源码安装 http://racket-lang.org/download/
抓紧时间看 sicp
--
l5g
功可强成,名可强立。后面还可以加...
http://twitter.com/l5g
Posted by Unknown at 2:25 AM 0 comments
The Little Schemer
这书的写作风格很特别,赞誉很高,不过还没看出多少味道来
有点像高等代数上有超多定义,然后根据概念判断对错的感觉
不过有些地方脚注说 实际应用中有些东西与书山讲的不一样,迷惑中
Posted by Unknown at 4:29 AM 0 comments
快要去找工作了
想找轻松一点的工作,身体是革命的本钱
富士康都11跳了今天。。。
算法类工作不知道轻松不
不想coding as a job
只想coding for fun
--
l5g
功可强成,名可强立。后面还可以加...
http://l5g.blogspot.com
Posted by Unknown at 12:41 AM 0 comments
查找 time_t 的定义
又读expert c programming.
/usr/include$ grep time_t time.h
typedef __time_t time_t;
l5g@desktop:/usr/include$ grep include bits/types.h
* Never include this file directly; use instead.
#include
#include
#include /* Defines __*_T_TYPE macros. */
l5g@desktop:/usr/include$ grep __TIMER_T_TYPE bits/typesizes.h
#define __TIMER_T_TYPE void *
终于到最后了 其实就是一个 void *
Posted by Unknown at 4:33 AM 0 comments
strsep.c
unix 源代码里的strsep.c 与 gnu/linux 里的不一样,觉得后者的代码写的清晰明了一点.
http://www.koders.com/c/fid4F16A5D73313ADA4FFFEEBA99BE639FEC82DD20D.aspx
里面的代码风格也是我喜欢的类型, 在那些小地方优化一些感觉好一点.
看这个函数的头文件还以为delimiter会作为一个整体的...
http://blog.wu-boy.com/2010/04/28/2136/
Posted by Unknown at 1:19 AM 0 comments
Labels: c
XML-RPC SOAP 与 REST
简单对象访问协议(Simple Object Access Protocol,SOAP)、代表性状态传输(Representational State Transfer,REST)以及 XML 远程过程调用协议(XML Remote Procedure Call,XML-RPC)
用于将本地程序向web程序集成
http://www.ibm.com/developerworks/cn/webservices/ws-xml-rpc/
http://www.tldp.org/HOWTO/XML-RPC-HOWTO/index.html
http://www.ibm.com/developerworks/cn/webservices/ws-pyth/part5/index.html
Posted by Unknown at 1:13 AM 0 comments
Labels: c
用c为apache开发cgi应用
以前没有这么多脚本语言的时候应该很流行.
安装apache
启用模块 userdir, 就是每个用户目录一个public_html
sudo vim /etc/apache2/mods-enabled/userdir.conf
/*****************************************************************
* C Programming in Linux (c) David Haskins 2008
* chapter1_3.c *
*****************************************************************/
#include
int main(int argc, char *argv[])
{
int i=0;
printf("Content-type:text/plain\n\n");
printf("Hello, you are still learning C!!\n");
printf("Number of arguments to the main function:%d\n", argc);
for(i=0;i
{
printf("argument number %d is %s\n", i, argv[i]);
}
return 0;
}
启用对每个用户都有效的cgi目录
Options ExecCGI
SetHandler cgi-script
Posted by Unknown at 12:14 AM 0 comments
Labels: c
Python 的代码风格
有两个供参考
1.PEP 8 http://www.python.org/dev/peps/pep-0008/
http://www.python.org/dev/peps/pep-0257/
2. Google Python Style Guide http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
代码风格的一致性很重要, 更重要的是在某些情况下为了可读性要灵活变通
缩进用4个空格
不要混用 tab 和空格, python -t / -tt 检查是否混用
限制所有行最长79个字符, 长的块最长72个字符, 换行在二元运算符后面
最上层的函数和类的定义用两个空行分隔
类里的方法用一个空行分隔, python 接受 control-L 作为空格
import 分成几行, from ... import 例外
import 的顺序
Imports should be grouped in the following order:
1. standard library imports
2. related third party imports
3. local application/library specific imports
用空行分隔
使用package的绝对路径导入
避免下面这种多余的空格
- Immediately inside parentheses, brackets or braces.
Yes: spam(ham[1], {eggs: 2})
No: spam( ham[ 1 ], { eggs: 2 } )
- Immediately before a comma, semicolon, or colon:
Yes: if x == 4: print x, y; x, y = y, x
No: if x == 4 : print x , y ; x , y = y , x
- Immediately before the open parenthesis that starts the argument
list of a function call:
Yes: spam(1)
No: spam (1)
- Immediately before the open parenthesis that starts an indexing or
slicing:
Yes: dict['key'] = list[index]
No: dict ['key'] = list [index]
- More than one space around an assignment (or other) operator to
align it with another.
Yes:
x = 1
y = 2
long_variable = 3
No:
x = 1
y = 2
long_variable = 3
算术操作符前后用空格, 二元运算符
Yes:
i = i + 1
submitted += 1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
No:
i=i+1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
当'='用来指明关键字参数或默认参数的时候,两边不要用空格
最好不要把多行语句下在一行里,尤其是if/for/while
错误的注释别没有注释更糟糕.
用英文注释除非120%的确信其它种类的人不会读你的代码
# 后面加个空格
行内注释与表达式之间空至少两格,避免无意义的注释
为所有的公开的modules, functions, classes, methods 写 docstrings
__version__ = "$Revision: 68852 $"
# $Source$
- Comparisons to singletons like None should always be done with
'is' or 'is not', never the equality operators.
beware of writing "if x" when you really mean "if x is not None"
Use ''.startswith() and ''.endswith() instead of string slicing to check
for prefixes or suffixes.
Yes: if foo.startswith('bar'):
No: if foo[:3] == 'bar':
For sequences, (strings, lists, tuples), use the fact that empty
sequences are false.
Yes: if not seq:
if seq:
No: if len(seq)
if not len(seq)
Posted by Unknown at 7:51 PM 0 comments
Labels: python
两段c代码
#include <stdio.h>
void f()
{
puts("FUnction");
}
#define f() puts("Macro")
int main()
{
f();
f ();
(f) ();
return 0;
}
-------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int main (int argc, char **argv)
{
printf("%d, %d\n",sizeof('J'),sizeof(char));
return 0;
}
via
Posted by Unknown at 1:26 AM 0 comments
gtk笔记
gtk_init (&argc, &argv);
gtk_main()
每个gtk程序都会调用上面这两个函数
GUI库一般都是event driven的,那些设计上就有面向对象特性的语言在这方面占优势.
signals
Events
Posted by Unknown at 1:09 AM 0 comments