归档 2010年8月

最后更新于 .

最近在修改一个代理机server,增加url rewrite的功能,由于其单机的访问量很高,20000/s左右,对性能要求很高,所以在做url映射的时候,纠结在用map还是hashmap存储映射的问题上。

于是做了一个简单的测试,对与map和hashmap(我们用unordered_map),循环10000*24次,map大小是12(因为目前预估会配置的url个数是12左右)。
部分代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include "markupstl.h"
#include <tr1/unordered_map>
#include <sys/time.h>
using namespace std;
#define hashmap std::tr1::unordered_map
#define CONFIG_FILE_PATH "./urlconfig.xml"
map<string,string> g_mapUrl;
hashmap<string,string> g_hashmapUrl;
struct timeval ...

最后更新于 .

记得刚入职的时候,那时候什么都不懂,组长让我跑个迁移程序,还没跑完就关终端走人了,结果可想而知,那是第一次知道守护进程的概念。
当时后来是加了nohup参数解决的,

nohup ./program &


但是总是强迫别人用nohup来启动自己的程序毕竟不是办法,所以还是要把自己的进程变成守护进程才行。

C/C++的版本就不说了,这里有篇文章写的很清楚。
http://colding.bokee.com/5277082.html

这里主要介绍一下在网上无意发现的一个国外哥们的写的python版本:
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
顺便吐个槽,这哥们用的Vim配色明显是Wombat~~
代码如下(对私有函数名加了_前缀,便于理解,并加了一定的注释):

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os, time, atexit
from signal import SIGTERM
class Daemon:
    """
    A generic ...

最后更新于 .

很久没上vim官网,今天上去一看Vim7.3居然发布啦,看日期是8月16日发布的,看来还是晚了两天呀~~
马上下载下来尝鲜啦,担心有些朋友找不到,故放出下载链接如下:

ftp://ftp.vim.org/pub/vim/pc/gvim73.exe

界面没什么变化(都是自己配的色,肯定没变化嘛。。),看一下这个默认的编译支持如何:

1

看到了吗,看到了吗,Vim居然默认将python语言支持编译进去了,而且最兴奋的居然还支持python3!
不过兴奋之余,我发现了一个很严重的问题。。。那就是我的pyflakes和qiushibaike.vim都不能用了。。。Vim7.3默认要求的python版本居然是2.7,太潮了吧!
好吧,卸掉我心爱的python 2.6,去下载个python 2.7,结果再次感慨到gfw的伟大,官网的download页面居然被和谐了。。所幸找到ftp的下载地址:

http://www.python.org/ftp/python/2.7/python-2.7.msi

如果直接在浏览器下载不了 ...

最后更新于 .

经常在linux下工作的朋友一定经常需要用tcpdump抓包分析,不过有时候肉眼看起来实在是太累,不经意居然发现了这样一个好工具:
wireshark,下载页:http://www.wireshark.org/download.html

简单用他来演示一下tcp协议的整个过程:
先在开发机上开始抓包:

tcpdump -ieth1 host 172.27.193.234 -w tcpbao

调用一个发送tcp请求的小程序,可以抓到包---tcpbao.

用wireshark载入之后,会看到如下界面:

1

可见,整个过程完整的展现了TCP协议中,建立链接->发送数据->断掉链接的过程。
读者可以对照本博的:
TCP协议状态详解

http://bigwhite.blogbus.com/logs/11582229.html
来看。

简单说一下:

1~3个报文是tcp三次握手建立链接的过程
4~7个报文是客户端发送实体数据的过程
8~10个报文是客户端主动断掉链接的过程(这里和标准的关闭链接貌似有点出入,标准TCP协议貌似还要多返回一个ACK报文)

其实这个软件还支持直接抓包来查看报文的,详细可以看一下如下的在线文档,在此不再赘述。
http://man ...

最后更新于 .

这篇文章的东西可能比较杂,因为每个特性都不那么大,所以就揉在一起,倒是显得庞大了许多。

一.svn命令行在windows下面的安装使用
一直以来都使用svn管理源码,但是在windows下一直使用TortoiseSVN的界面进行管理,但是对于我这种键盘控(vim后遗症)来说,简直是无法忍受的!
搜啊搜啊搜啊,终于发现了-----CollabNetSubversion
下载页面:http://www.collab.net/downloads/subversion/
如果象我一样只需要命令行的话,下载CollabNet Subversion Command-Line Client v1.6.12 (for Windows)即可,网站需要先注册一下。
基本上安装完了,svn up、svn add就可以用了,但是svn ci的时候,你会发现如下提示:

svn: Commit failed (details follow):
svn: Could not use external editor to fetch log ...

最后更新于 .

最近被公司的事情搞的很纠结,博客也有段时间没写了,不过最近还是忙里偷闲做了点其他事情,在这里记录下来,和大家分享一下。

需求也比较简单,老婆是做社区运营的,所以需要每天把几个帖子定时的顶上来,手工做很累,所以就想让我用程序实现。

分析一下,其实无非是先用户名和密码登录,获取到cookie后,再带着cookie去访问要顶贴的页面即可,至于剖析页面来获取url就是BeautifulSoup要做的事情了。(论坛是discuz做的,这里只为演示方法)

登录代码实现如下:

def Login(user,pwd): 
    loginpage = urllib.urlopen('http://bbs.xxx.com/logging.php?action=login').read() 
    login_soup = BeautifulSoup(loginpage) 
    formhash_tag = login_soup.find('input',attrs={'name':'formhash'}) 
    formhash = formhash_tag['value'] 
     
    params = { 
            "answer":"", 
            "formhash":formhash, 
            "loginfield":"username", 
            "loginsubmit" ...

每日归档

上个月

2010年7月

下个月

2010年9月

归档