寻找可用ip 或速度快的ip

现在网站都有很多服务器负载均衡,GFW封锁有时并没有block掉所有ip,可以通过

http://just-ping.com 这个网站找到网站的很多ip

格式如
 Location Result min. rrt avg. rrt max. rrt IP 
 Singapore, Singapore: Okay  2.0 2.7 4.3 125.56.219.136 
 Amsterdam2, Netherlands: Okay  0.8 0.9 1.0 92.123.66.226 
 Florida, U.S.A.: Okay  4.4 4.6 5.0 65.32.34.56 
 Amsterdam3, Netherlands: Okay  0.7 0.9 1.0 92.123.66.226 
 Hong Kong, China: Okay  2.7 2.9 3.1 63.150.131.147 
 Sydney, Australia: Okay  0.4 0.8 2.6 60.254.186.26 
 München, Germany: Okay  1.5 1.6 1.8 84.53.146.30 
 Cologne, Germany: Okay  4.8 5.0 5.5 92.122.212.67 
 New York, U.S.A.: Okay  4.0 4.2 4.4 96.17.156.16 
 Stockholm, Sweden: Okay  5.1 5.1 5.3 92.123.155.59 

awk ' {print $NF}' 1.txt  就可以把所有ip提取出来
然后批量ping一下,比较响应时间即可. 修改hosts


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

几个常用的命令

banner
basename 获取脚本的名字不错
dd
du -sh / 查看整个系统占用了多少空间
egrep 与grep相比的缺点是?
nice
nohub
script usage.txt 记录操作
strings /bin/passwd
uuencode uudecode

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

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

expect

expect是为了解决某些命令只能在交互式下运行,不方便用脚本控制的问题的.
spawn 开进程
expect 与 send 对应 就可以了.
复杂一点加点控制语句.

http://blog.csdn.net/emilyzhang98/archive/2010/01/12/5173970.aspx


expect教程中文版

Nagios

开源的工具有一个重要的特点就是可扩展性好,Nagios也不例外.
这里有篇连载文章http://os.51cto.com/art/200903/113685.htm 介绍的不错.
不过我还是不喜欢从源码安装,卸载不方便啊,有条件自己打包一下再安装.

要是做运维的话,是不是要24小时不关机,手机来短信了神经都会紧张? :(




http://www.nagios.org/

系统平均负载 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

网易游戏2010年运营维护工程师笔试题

dns 的udp包有大小限制,所以也可能会使用到tcp
在所有的路由中,静态路由优先级最高。当动态路由与静态路由发生冲突时,以静态路由为准

san -- Storage area network  存储区域网络
nas -- Network Attached Storage:网络附属存储
unix-like 系统 有AIX, HP-UX, Solarix, Mac os X, BSD等

32位操作系统和64位操作系系统
固态硬盘和传统硬盘
    高性能的固态硬盘很大程度解决了PC系统中的短板问题。不过,与如火如荼的传统机械硬盘市场相比,目前固态硬盘高昂的价格和寿命问题在一定程度上也阻碍了它的迅速发展。
固态硬盘(SSD)与传统硬盘相比有不少优点,它们更快,更可靠,使用的能源更少,而且更安静。而另一方面,SSD每个存储单元的平均写入次数是有限的,与传统硬盘相比,每G字节的成本要高出约70倍。

多核CPU和单核CPU的优点和缺点,是否所有程序在多核CPU上运行速度都快?
    多核CPU、对多线程进行优化的程序。如果一个程序只支持单线程,例如superPI,那么多核CPU就没有意义,在运算过程中,它只会调用一个核心。

给你6个150G硬盘,列出RAID排列方式,哪种方式容量最大,并解释。
    RAID0:RAID 0 - Disk Stripping without parity (常用) 
  
  又称数据分块,即把数据分成若干相等大小的小块,并把它们写到阵列上不同的硬盘上,这种技术又称“Stripping”(即将数据条带化),这种把数据分布在多个盘上,在读写时是以并行的方式对各硬盘同时进行操作。从理论上讲,其容量和数据传输率是单个硬盘的N倍。N为构成RAID0的硬盘总数。当然,若阵列控制器有多个硬盘通道时,对多个通道上的硬盘进行RAID0操作,I/O性能会更高。因此常用于图象,视频等领域,RAID0 I/O传输率较高
  ,但平均故障时间MTTF只有单盘的N分之一,因此RAID0可靠性最差。所需最少硬盘数:1块或多块
  
  可靠性是单独一块盘的1/N
  同时读磁盘数:N
  同时写磁盘数:N
  磁盘利用率:N 或 100%

DAS --direct access storage device直接访问存储设备

    

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...:)

准备找个linux运维的岗位

最近抓紧时间把awk,sed之类的命令用一下.以前学习perl玩的时候就感觉到这些命令根本就不是设计给普通用户使用的.像perl的语法,如果你天天写还好,但是一段时间不写,多半会退化的很快,比如以前用perl写了个自动签到的小程序,crontab里设置每天按时运行,现在去看,虽然大致意思能看清,但现在对perl的语法完全陌生了.当然都知道孰能生巧,可是找工作就不行了,基本功很重要.
抓紧学习.

bbfreeze, py2exe,pyinstaller

刚看了一下bbfreeze,功能貌似比py2exe强大
自动解决了dll依赖问题,支持import egg files,zip

弄了个hello world,生成的文件不是很大,还自带个解释器,当然这个解释器只能import你用到的packages.

国内视频网站的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

学习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/

怎么把你的名字seo到google 搜索的首页

其实就是给定关键字,seo它.首先如果你的名字比较特殊,那就比较好办,但你不幸与哪个名人同名,这就有点悲剧了...

这几天我初次seo一个关键字的时候,学到了一些东西,记录一下.
1.firefox上有个NoDoFollow插件可以帮助看网页上的链接是否有 nofollow 属性.
一般国内名博,google groups等都是nofollow的
2.高质量的回链很重要.每天添加2,3个就很不错.链接的文本也很重要.
3.使用google webmaster, sitemaps
4.一些站长工具很有帮助,可以帮助查看各个搜索引擎的收录情况.
各个搜索引擎公司都提供一些其它blog托管之类的服务,注册那些服务并链接自己的网站有助于收录.
我们只需要seo那一个页面就可以了,所以要经常更新那个页面.那个页面里关键字内容的组织也很重要.比如我现在弄的这个页面彭艳还不怎么好,其实没怎么弄这个页面在这个Google关键字的首页了,现在是想办法把它弄到第一个.

最近在比较学习python的各个模板

python 的web框架很多,模板也很多,有些框架自带模板,比如django,还有一些独立的模板
jinja2 语法上与django自带的模板比较像
web.py 带的模板自己使用的python的语法.

python.org 好像是用的是mako
那些可以预先compile生成python代码的模板,应该在某些应用上效率高些.

百家争鸣,让没个人都可以找到适合自己使用的,固然不错,不过这也会让初期选用时感到迷糊,
不过在学习过程中,会加深对这方面的认识.

http://jinja.pocoo.org/2/documentation/
http://www.makotemplates.org/

玩一下 flask

现在还是0.4版,代码比较短,刚好可以学习一下。


安装
推荐用virtualenv创建开发环境。
tar xvf virtualenv-1.4.9.tar.gz
 python virtualenv.py ~/myproject/env
 . env/bin/activate

hello world
 from flask import Flask app = Flask(__name__)  @app.route('/') def hello_world():     return "Hello World!"  if __name__ == '__main__':     app.run()
python hi.py 就可以运行了
根据flask.py文件,默认只有本地可以访问,端口为5000.
最后一行修改为 app.run('0.0.0.0', 12345),就可以让其它人访问了

 


--
l5g
功可强成,名可强立。后面还可以加...
http://twitter.com/l5g

Racket

plt-scheme 改名叫 Racket 了
ubuntu 源里的版本很低,4.2的好像...
要到这里下源码安装 http://racket-lang.org/download/

抓紧时间看 sicp

racket-lang.org/


--
l5g
功可强成,名可强立。后面还可以加...
http://twitter.com/l5g

The Little Schemer

这书的写作风格很特别,赞誉很高,不过还没看出多少味道来
有点像高等代数上有超多定义,然后根据概念判断对错的感觉
不过有些地方脚注说 实际应用中有些东西与书山讲的不一样,迷惑中

快要去找工作了

想找轻松一点的工作,身体是革命的本钱
富士康都11跳了今天。。。
算法类工作不知道轻松不
不想coding as a job
只想coding for fun


--
l5g
功可强成,名可强立。后面还可以加...
http://l5g.blogspot.com

查找 time_t 的定义

又读expert c programming.

/usr/include$ grep time_t time.h


typedef __time_t time_t;


/usr/include$ grep __time_t time.h

# include /* This defines __time_t for us.  */ (这个注释的好处...)


/usr/include$ grep __time_t bits/types.h 
__STD_TYPE __TIME_T_TYPE __time_t; /* Seconds since the Epoch.  */

__STD_TYPE 其实就是typedef


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 *


strsep.c

unix 源代码里的strsep.c 与 gnu/linux 里的不一样,觉得后者的代码写的清晰明了一点.

http://www.koders.com/c/fid4F16A5D73313ADA4FFFEEBA99BE639FEC82DD20D.aspx

里面的代码风格也是我喜欢的类型, 在那些小地方优化一些感觉好一点.

看这个函数的头文件还以为delimiter会作为一个整体的...

http://blog.wu-boy.com/2010/04/28/2136/

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

用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目录

指令可以指定每个用户主目录中的一个特定的目录为"允许cgi"的目录,使每个用户都可以拥有自己的cgi-bin目录。

Options ExecCGI
SetHandler cgi-script

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)

两段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



gtk笔记

apt-get install libgtk2.0-dev


 gtk_init (&argc, &argv);
gtk_main() 
每个gtk程序都会调用上面这两个函数
GUI库一般都是event driven的,那些设计上就有面向对象特性的语言在这方面占优势.
signals 

Events

pyc 反编译 disassemble

http://code.google.com/p/unpyc/