<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[李旸的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/li_yang98</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; li_yang98]]></copyright><item><title><![CDATA[Apache+SVN-让用户自行修改SVN密码]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6384911</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6384911</guid><author>li_yang98</author><pubDate>Mon, 02 May 2011 19:02:00 +0800</pubDate><description><![CDATA[<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/"
<]]></description><category></category></item><item><title><![CDATA[Ubuntu下搭建Apache+SVN服务]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6384245</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6384245</guid><author>li_yang98</author><pubDate>Mon, 02 May 2011 11:55:00 +0800</pubDate><description><![CDATA[最近和朋友合作一个小项目，于是在VPS(Ubuntu 10.04 LTS 64bit)上搭建了一个Apache+SVN服务便于管理代码，记录如下。1. 安装sudo apt-get install subversion
sudo apt-get install libapache2-svn2. 创建subversion用户组，并把apache运行用户www-data加入到subversion用户组中sudo addgroup subversion
sudo usermod -G subversion -]]></description><category></category></item><item><title><![CDATA[初试memcacheq]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6208223</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6208223</guid><author>li_yang98</author><pubDate>Fri, 25 Feb 2011 17:42:00 +0800</pubDate><description><![CDATA[今天在拜读新浪微博架构师Tim在QCon Beijing 2010上的演讲

的时候了解到新浪微博大规模使用memcacheq作为消息队列，正好公司最近在评估一些MQ的产品，就简单尝试了一下。按照官方的说法，memcacheq有五大优势：1. 无与伦比的简单2. 非常快3. 支持多个队列4. 高并发性5. 与memcache协议兼容安装和启动请参考这里
，需要bdb和libevent。基于libmemcached简单写了一个小程序测试了一下，的确很简单，producer利用memcached_set发]]></description><category></category></item><item><title><![CDATA[MongoDB学习笔记5 - 测试查询性能]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6204910</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6204910</guid><author>li_yang98</author><pubDate>Thu, 24 Feb 2011 13:53:00 +0800</pubDate><description><![CDATA[大规模数据导入实验在上一个实验

中，我们测试了导入数据的性能，简单总结一下测试方法：1. Schema: 每行数据三个字段，日期、ID和当日流量，都是长整型2. Index: inventory.create_index([('date',ASCENDING), ('id',ASCENDING)], unique=False, dropDups=False)3. 用mongoimport导入csv数据随后我们在大规模的数据上进行了测试，导入360天的数据，每天100万行记录。同样的数据导入两次，由于索]]></description><category></category></item><item><title><![CDATA[MongoDB学习笔记4 - MongoDB数据导入实验(mongoimport)]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6200079</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6200079</guid><author>li_yang98</author><pubDate>Tue, 22 Feb 2011 15:08:00 +0800</pubDate><description><![CDATA[<br />昨天
比较了一下在某个特定应用中MongoDB和MySQL导入数据的性能，但是MongoDB的测试结果并不能令人满意，今天继续尝试了几种导入数据的方法，希望提升数据导入性能。<br /> <br />在昨天的实验中，是以id随机的顺序插入数据的，由于我们在id这个属性上面建立了递增索引，因此首先怀疑的是由于id无序造成后面插入的数据有可能导致前面已经插入的数据移动位置，所以第一个实验把插入顺序改成按id赠序。但结果没有什么变化，插入一百万条数据用了1422秒(比昨天按id随机顺序插入还慢了点，]]></description><category></category></item><item><title><![CDATA[MongoDB学习笔记3 - MongoDB vs MySQL]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6198871</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6198871</guid><author>li_yang98</author><pubDate>Tue, 22 Feb 2011 00:03:00 +0800</pubDate><description><![CDATA[<br />今天通过一个实验比较了一下MongoDB和MySQL的性能，注意这个比较只反映了我们这个应用场景下的情况，并不能代表普遍的情况。<br /> <br />我们希望存储一些视频历史上的流量，需要存1年的时间，每天活跃的视频在百万数量级，流量用整型表示就可以了。在我们的应用中，写性能是优先考虑的因素，所以第一步的实验主要比较写入的性能，由于存储的数据是被单一应用(进程)独享的，sqlite也满足我们的应用场景，因此我们同时也测试了sqlite的写入性能。<br /> <br />实验环境：<br /]]></description><category></category></item><item><title><![CDATA[通过swappiness内核参数调节swap使用]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6181729</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6181729</guid><author>li_yang98</author><pubDate>Sat, 12 Feb 2011 23:02:00 +0800</pubDate><description><![CDATA[今天跟同事学了一招，可以通过修改swappiness内核参数，降低系统对swap的使用，从而提高系统的性能。遇到的问题是这样的，新版本产品发布后，每小时对内存的使用会有一个尖峰，这个峰值还远没有到达服务器的物理内存。可是确发现内存使用达到峰值时系统开始使用swap，在swap的过程中系统性能会有所下降，表现为较大的服务延迟。对这种情况，可以通过调节swappiness内核参数降低系统对swap的使用，从而避免不必要的swap对性能造成的影响。这里
有一篇关于swappiness内核参数的详细介绍。简单地说]]></description><category></category></item><item><title><![CDATA[一个简单的python sqlite wrapper]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6173595</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6173595</guid><author>li_yang98</author><pubDate>Mon, 07 Feb 2011 00:19:00 +0800</pubDate><description><![CDATA[直接上代码，需要注意的是当执行插入更新操作是尽量使用execute_batch。sqlite执行事务操作的开销是很大的，所以应尽量减少执行commit的次数。我做了一个简单的实验，插入1百万行的数据(每行三列INT型数据)，一条一条插入需要半个小时，而以128K为一个batch批量插入只需要3分钟。try:
    import sqlite3 as sqlite
except:
    from pysqlite2 import dbapi2 as sqliteclass SqliteWrapper]]></description><category></category></item><item><title><![CDATA[MongoDB学习笔记2 - 配置python开发环境]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6173077</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6173077</guid><author>li_yang98</author><pubDate>Sat, 05 Feb 2011 22:57:00 +0800</pubDate><description><![CDATA[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(]]></description><category></category></item><item><title><![CDATA[MongoDB学习笔记1 - 安装和启动]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6162122</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6162122</guid><author>li_yang98</author><pubDate>Mon, 24 Jan 2011 23:26:00 +0800</pubDate><description><![CDATA[<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]]></description><category></category></item><item><title><![CDATA[利用strace诊断程序错误]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6116072</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6116072</guid><author>li_yang98</author><pubDate>Tue, 04 Jan 2011 17:47:00 +0800</pubDate><description><![CDATA[<br />最近在调试程序的时候接触到了strace这个工具。strace
是一个十分强大的调试/分析/诊断工具，这里
有一篇详细的介绍。<br /> <br />今天在配置lighty + web.py的时候遇到了问题，按照http://webpy.org/cookbook/fastcgi-lighttpd/
进行配置后lighty无法正常启动，从lighty的error log看是加载处理fcgi的python模块时出了问题，但是不知道具体原因。尝试了几次以后决定用strace试一试:<br />]]></description><category></category></item><item><title><![CDATA[转一篇Ubuntu 服务器版 Iptables 基本设置指南]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/6102354</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/6102354</guid><author>li_yang98</author><pubDate>Tue, 28 Dec 2010 12:09:00 +0800</pubDate><description><![CDATA[昨天装pptpd的时候用到了iptables，稍微学习了一下，转一篇Ubuntu 服务器版 Iptables 基本设置指南
。]]></description><category></category></item><item><title><![CDATA[Shell脚本中滤掉"ssh -t"执行命令时返回的/r字符]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/5895234</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/5895234</guid><author>li_yang98</author><pubDate>Sun, 19 Sep 2010 18:06:00 +0800</pubDate><description><![CDATA[今天在写一个shell脚本的时候遇到了一个很诡异的问题。需求很简单，在一台远程的服务器上的某个特定目录下找到最新的文件并scp到本地。一开始写的脚本大概是这样的：#!/bin/shTMPDIR=xxx
SERVER=xxx
DATDIR=xxx
mkdir -p $TMPDIR
rm $TMPDIR/* -rf
FILES=`ssh $SERVER -t "ls $DATDIR -t | head -n2"`
for FILE in $FILES; do
    scp $SERVER:$DA]]></description><category></category></item><item><title><![CDATA[转一篇SSH Public Key的配置方法]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/5890988</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/5890988</guid><author>li_yang98</author><pubDate>Fri, 17 Sep 2010 15:15:00 +0800</pubDate><description><![CDATA[http://sial.org/howto/openssh/publickey-auth/]]></description><category></category></item><item><title><![CDATA[GDB下显示完整的长字符串]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/5871663</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/5871663</guid><author>li_yang98</author><pubDate>Wed, 08 Sep 2010 19:16:00 +0800</pubDate><description><![CDATA[<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=]]></description><category></category></item><item><title><![CDATA[如何解析超长的protobuf]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/5870817</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/5870817</guid><author>li_yang98</author><pubDate>Wed, 08 Sep 2010 14:09:00 +0800</pubDate><description><![CDATA[在调用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]]></description><category></category></item><item><title><![CDATA[MySQL DATETIME类型和Timestamp之间的转换]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/5866250</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/5866250</guid><author>li_yang98</author><pubDate>Mon, 06 Sep 2010 14:30:00 +0800</pubDate><description><![CDATA[<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())) |<]]></description><category></category></item><item><title><![CDATA[当vim遇上C++]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/3891407</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/3891407</guid><author>li_yang98</author><pubDate>Sun, 15 Feb 2009 01:30:00 +0800</pubDate><description><![CDATA[俗话说，“工欲善其事，必先利其器“，好的开发工具可以帮我们大大地提高开发效率。用vim在linux下写C++有一段时间了，这里想把自己正在用的一些vim插件和大家分享一下 1. Alternate (http://www.vim.org/scripts/script.php?script_id=31)在对应的头文件和代码文件中快速地切换安装：(1) 下载a.vim到~/.vim/plugi]]></description><category></category></item><item><title><![CDATA[Linux下如何查看进程打开的文件以及修改进程打开文件数上限]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/3270766</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/3270766</guid><author>li_yang98</author><pubDate>Tue, 11 Nov 2008 01:06:00 +0800</pubDate><description><![CDATA[1. 查看进程打开文件在/proc下，对应每个进程有一个以进程号命名的目录，该目录下有一个fd目录，该目录下面的每个文件是一个符号连接，其文件名对应该进程占用的一个文件描述符，而连接指向的内容表示文件描述符对应的实际文件。2. 修改进程打开文件数上限Linux默认的进程打开文件上限是1024个，可以通过ulimit -n查看。很多系统上限可以通过修改/etc/security/limits.con]]></description><category></category></item><item><title><![CDATA[Redhat Linux下如何生成core dump文件]]></title><link>https://blog.youkuaiyun.com/li_yang98/article/details/3261211</link><guid>https://blog.youkuaiyun.com/li_yang98/article/details/3261211</guid><author>li_yang98</author><pubDate>Sun, 09 Nov 2008 18:15:00 +0800</pubDate><description><![CDATA[使用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 -]]></description><category></category></item></channel></rss>