自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (5)
  • 收藏
  • 关注

原创 Apache+SVN-让用户自行修改SVN密码

<br />上一篇提到了在Ubuntu下搭建Apache+SVN服务,今天写了一个简单的PHP脚本支持用户自行修改SVN密码(假设这个脚本位于/var/www-ssl/svntools/svnpass.php目录下)<br /> <br />首先,用户在修改密码之前需要先登录,而登录的验证方法和访问SVN是一样的,在/etc/apache2/mods-available/alias.conf中加入如下配置<br />Alias /svntools/ "/var/www-ssl/svntools/"<

2011-05-02 19:02:00 9012 3

原创 Ubuntu下搭建Apache+SVN服务

最近和朋友合作一个小项目,于是在VPS(Ubuntu 10.04 LTS 64bit)上搭建了一个Apache+SVN服务便于管理代码,记录如下。1. 安装sudo apt-get install subversionsudo apt-get install libapache2-svn2. 创建subversion用户组,并把apache运行用户www-data加入到subversion用户组中sudo addgroup subversionsudo usermod -G subversion -

2011-05-02 11:55:00 3716

原创 初试memcacheq

今天在拜读新浪微博架构师Tim在QCon Beijing 2010上的演讲的时候了解到新浪微博大规模使用memcacheq作为消息队列,正好公司最近在评估一些MQ的产品,就简单尝试了一下。按照官方的说法,memcacheq有五大优势:1. 无与伦比的简单2. 非常快3. 支持多个队列4. 高并发性5. 与memcache协议兼容安装和启动请参考这里,需要bdb和libevent。基于libmemcached简单写了一个小程序测试了一下,的确很简单,producer利用memcached_set发

2011-02-25 17:42:00 6110

原创 MongoDB学习笔记5 - 测试查询性能

大规模数据导入实验在上一个实验中,我们测试了导入数据的性能,简单总结一下测试方法:1. Schema: 每行数据三个字段,日期、ID和当日流量,都是长整型2. Index: inventory.create_index([('date',ASCENDING), ('id',ASCENDING)], unique=False, dropDups=False)3. 用mongoimport导入csv数据随后我们在大规模的数据上进行了测试,导入360天的数据,每天100万行记录。同样的数据导入两次,由于索

2011-02-24 13:53:00 2347

原创 MongoDB学习笔记4 - MongoDB数据导入实验(mongoimport)

<br />昨天比较了一下在某个特定应用中MongoDB和MySQL导入数据的性能,但是MongoDB的测试结果并不能令人满意,今天继续尝试了几种导入数据的方法,希望提升数据导入性能。<br /> <br />在昨天的实验中,是以id随机的顺序插入数据的,由于我们在id这个属性上面建立了递增索引,因此首先怀疑的是由于id无序造成后面插入的数据有可能导致前面已经插入的数据移动位置,所以第一个实验把插入顺序改成按id赠序。但结果没有什么变化,插入一百万条数据用了1422秒(比昨天按id随机顺序插入还慢了点,

2011-02-22 15:08:00 14199 2

原创 MongoDB学习笔记3 - MongoDB vs MySQL

<br />今天通过一个实验比较了一下MongoDB和MySQL的性能,注意这个比较只反映了我们这个应用场景下的情况,并不能代表普遍的情况。<br /> <br />我们希望存储一些视频历史上的流量,需要存1年的时间,每天活跃的视频在百万数量级,流量用整型表示就可以了。在我们的应用中,写性能是优先考虑的因素,所以第一步的实验主要比较写入的性能,由于存储的数据是被单一应用(进程)独享的,sqlite也满足我们的应用场景,因此我们同时也测试了sqlite的写入性能。<br /> <br />实验环境:<br /

2011-02-22 00:03:00 5173

原创 通过swappiness内核参数调节swap使用

今天跟同事学了一招,可以通过修改swappiness内核参数,降低系统对swap的使用,从而提高系统的性能。遇到的问题是这样的,新版本产品发布后,每小时对内存的使用会有一个尖峰,这个峰值还远没有到达服务器的物理内存。可是确发现内存使用达到峰值时系统开始使用swap,在swap的过程中系统性能会有所下降,表现为较大的服务延迟。对这种情况,可以通过调节swappiness内核参数降低系统对swap的使用,从而避免不必要的swap对性能造成的影响。这里有一篇关于swappiness内核参数的详细介绍。简单地说

2011-02-12 23:02:00 8206

原创 一个简单的python sqlite wrapper

直接上代码,需要注意的是当执行插入更新操作是尽量使用execute_batch。sqlite执行事务操作的开销是很大的,所以应尽量减少执行commit的次数。我做了一个简单的实验,插入1百万行的数据(每行三列INT型数据),一条一条插入需要半个小时,而以128K为一个batch批量插入只需要3分钟。try:    import sqlite3 as sqliteexcept:    from pysqlite2 import dbapi2 as sqliteclass SqliteWrapper

2011-02-07 00:19:00 2388

原创 MongoDB学习笔记2 - 配置python开发环境

1. 安装pymongogit clone git://github.com/mongodb/mongo-python-driver.git pymongocd pymongo/python setup.py install2. 测试pymongo>>> from pymongo import *>>> conn = Connection()>>> db = conn['test']>>> col = db['foo']>>> col.insert({'a':1})ObjectId(

2011-02-05 22:57:00 1908

原创 MongoDB学习笔记1 - 安装和启动

<br />最近在学习MongoDB,做一些笔记<br /> <br />安装:<br />1. 下载<br />    有32位和64位两个版本,32位版本存储的数据量有2GB的限制,建议选择64位版本。最新的release版本号是1.6.5<br />    wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz<br />2. 解压<br />    tar -xzvf mongodb-linux-x86_64-1.6.5

2011-01-24 23:26:00 1888

原创 利用strace诊断程序错误

<br />最近在调试程序的时候接触到了strace这个工具。strace是一个十分强大的调试/分析/诊断工具,这里有一篇详细的介绍。<br /> <br />今天在配置lighty + web.py的时候遇到了问题,按照http://webpy.org/cookbook/fastcgi-lighttpd/进行配置后lighty无法正常启动,从lighty的error log看是加载处理fcgi的python模块时出了问题,但是不知道具体原因。尝试了几次以后决定用strace试一试:<br />

2011-01-04 17:47:00 1110

转载 转一篇Ubuntu 服务器版 Iptables 基本设置指南

昨天装pptpd的时候用到了iptables,稍微学习了一下,转一篇Ubuntu 服务器版 Iptables 基本设置指南。

2010-12-28 12:09:00 772

原创 Shell脚本中滤掉"ssh -t"执行命令时返回的/r字符

今天在写一个shell脚本的时候遇到了一个很诡异的问题。需求很简单,在一台远程的服务器上的某个特定目录下找到最新的文件并scp到本地。一开始写的脚本大概是这样的:#!/bin/shTMPDIR=xxxSERVER=xxxDATDIR=xxxmkdir -p $TMPDIRrm $TMPDIR/* -rfFILES=`ssh $SERVER -t "ls $DATDIR -t | head -n2"`for FILE in $FILES; do    scp $SERVER:$DA

2010-09-19 18:06:00 2417

转载 转一篇SSH Public Key的配置方法

http://sial.org/howto/openssh/publickey-auth/

2010-09-17 15:15:00 1290

原创 GDB下显示完整的长字符串

<br />GDB下用p看一个字符串的时候默认显示是截断的,可以通过set print element 0命令显示完整的字符串。<br /> <br />(gdb) p this->content_->rd_ptr()<br />$1 = 0x1e30a20 "<?xml version=/"1.0/" encoding=/"UTF-8/"?>/r/n<adRequest customId=/"/" networkId=/"2100/" proxied=/"false/" responseFormat=

2010-09-08 19:16:00 26753

原创 如何解析超长的protobuf

在调用protobuf的ParseFromString(str)方法时,默认情况下,如果str的长度>64MB,会返回失败。http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/reference/cpp/google.protobuf.io.coded_stream.html#CodedInputStream.SetTotalBytesLimit.details这里给出了解释,主要是出于安全因素的考虑。可以通过SetTotalBytesLi

2010-09-08 14:09:00 8163

原创 MySQL DATETIME类型和Timestamp之间的转换

<br />DATETIME -> Timestamp: UNIX_TIMESTAMP(...)<br />Timestamp -> DATETIME: FROM_UNIXTIME(...)<br /> <br />mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()));<br />+--------------------------------------+<br />| FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) |<

2010-09-06 14:30:00 42490

原创 当vim遇上C++

俗话说,“工欲善其事,必先利其器“,好的开发工具可以帮我们大大地提高开发效率。用vim在linux下写C++有一段时间了,这里想把自己正在用的一些vim插件和大家分享一下 1. Alternate (http://www.vim.org/scripts/script.php?script_id=31)在对应的头文件和代码文件中快速地切换安装:(1) 下载a.vim到~/.vim/plugi

2009-02-15 01:30:00 7592 2

原创 Linux下如何查看进程打开的文件以及修改进程打开文件数上限

1. 查看进程打开文件在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件。2. 修改进程打开文件数上限Linux默认的进程打开文件上限是1024个,可以通过ulimit -n查看。很多系统上限可以通过修改/etc/security/limits.con

2008-11-11 01:06:00 6407

原创 Redhat Linux下如何生成core dump文件

使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core dump文件的,这是因为在/etc/profile文件中有这样一行ulimit -S -c 0 > /dev/null 2>&1如何打开core dump呢?最简单的方法是用户在自己的~/.bash_profile中加入ulimit -S -

2008-11-09 18:15:00 12713

原创 如何将字符串转换成Erlang Term

当使用Erlang程序与其它语言程序通讯时,可能需要把一个字符串转换成为Erlang的Term,可以这样实现{ok, Tokens, _} = erl_scan:string(String),{ok, Term} = erl_parse:parse_term(Tokens).注意这里的String需要以句号结尾。例如在erlang shell下:5> {ok, Tokens, _} = erl_s

2008-11-05 12:56:00 4306 2

原创 如何把一个用户加入sodu组

在一个命令前加sudo,可以使用超级用户的权限执行该命令。但并不是任何用户都可以使用sudo,只有用户属于sudo组时才能使用这个命令。如果希望把一个用户加入sudo组,可以用root登录系统,然后执行visudo(这个命令实际上就是用vi编辑/etc/sudoers文件,/etc/sudoers文件本身是只读的)。在文件中找到"root ALL=(ALL) ALL"这一行,然后在下面加入一行"u

2008-11-04 21:58:00 1162

《强化学习》英文版(第2版)

Sutton老爷子经典之作,《强化学习》英文版(第2版)。 作为强化学习领域的经典导论性教材,第2版《强化学习》从强化学习基本思想出发,深入浅出又严谨细致地介绍了马尔可夫决策过程、蒙特卡洛方法、时序差分方法、同轨离轨策略等强化学习的基本概念和方法,并以大量的实例帮助读者理解强化学习的问题建模过程以及核心的算法细节。

2024-09-13

UNIX Network Programming Volume 1, Third Edition

Richard Stevens的六本经典书籍之一,UNIX网络编程宝典

2009-02-03

面对软件错误构建可靠的分布式系统

Erlang之父Joe Armstrong的博士论文,介绍了Erlang语言的设计思想以及使用Erlang语言开发的方法论

2009-01-16

Programming Erlang

Erlang之父Joe Armstrong的力作,是介绍Erlang语言开发的经典书籍

2009-01-15

Advanced Programming in the UNIX Environment: Second Edition

Richard Stevens的六本经典书籍之一,Unix程序员必备的参考书籍,就不用多废话了吧

2008-11-11

The unix programming environment

Unix开发的入门书籍,涵盖内容丰富,适合于Unix/Linux开发新手

2008-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除