<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erlang非业余研究 &#187; 杂七杂八</title>
	<atom:link href="http://blog.yufeng.info/archives/category/misc/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.yufeng.info</link>
	<description>Erlang系统深度探索和应用</description>
	<lastBuildDate>Tue, 17 Jan 2012 06:05:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>sysbench oltp测试MySQL问题</title>
		<link>http://blog.yufeng.info/archives/1390</link>
		<comments>http://blog.yufeng.info/archives/1390#comments</comments>
		<pubDate>Fri, 01 Jul 2011 01:38:24 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[工具介绍]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sysbench]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=1390</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: sysbench oltp测试MySQL问题 昨天有同学在使用sysbench时候遇到了点小麻烦： 错误提示说：mysql连接不上， sbtest库没找到。 首先确认mysql是正常的&#8230; 但是库 sbtest确实不存在。 通过查看sysbench-0.4.12/sysbench/drivers/mysql/drv_mysql.c:400行 我们可以看到sysbench在连接的时候需要先连接到sbtest库，但是库不存在，所以出现问题。 解决问题的方法很简单： 在mysql的shell下运行： 搞定。 小结：开源软件总是有点小问题，自己动手丰衣足食！ 玩得开心！ Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/1390">sysbench oltp测试MySQL问题</a></p>
</div>
<p>昨天有同学在使用<a href="http://blog.yufeng.info/tag/sysbench">sysbench</a>时候遇到了点小麻烦：</p>
<pre class="brush: bash; title: ; notranslate">
$ sysbench --test=oltp --oltp-table-size=100000000 --oltp-read-only=off --init-rng=on --num-threads=16 --max-requests=0 --oltp-dist-type=uniform --max-time=1800 --mysql-user=root   --db-driver=mysql --mysql-table-engine=innodb --oltp-test-mode=simple prepare
sysbench 0.4.12:  multi-threaded system evaluation benchmark

FATAL: unable to connect to MySQL server, aborting...
FATAL: error 1049: Unknown database 'sbtest'
FATAL: failed to connect to database server!
...
</pre>
<p>错误提示说：mysql连接不上， sbtest库没找到。</p>
<p>首先确认mysql是正常的&#8230;</p>
<pre class="brush: bash; title: ; notranslate">
$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 91
Server version: 5.1.48-debug-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql&gt; use sbtest;
ERROR 1049 (42000): Unknown database 'sbtest'
</pre>
<p>但是库 sbtest确实不存在。</p>
<p>通过查看sysbench-0.4.12/sysbench/drivers/mysql/drv_mysql.c:400行</p>
<pre class="brush: cpp; title: ; notranslate">
  DEBUG(&quot;mysql_real_connect(%p, \&quot;%s\&quot;, \&quot;%s\&quot;, \&quot;%s\&quot;, \&quot;%s\&quot;, %u, \&quot;%s\&quot;, %s)&quot;,
        con,
        host,
        args.user,
        args.password,
        args.db,
        args.port,
        args.socket,
        (MYSQL_VERSION_ID &gt;= 50000) ? &quot;CLIENT_MULTI_STATEMENTS&quot; : &quot;0&quot;
        );
  if (!mysql_real_connect(con,
                         host,
                         args.user,
                         args.password,
                         args.db,
                         args.port,
                         args.socket,
#if MYSQL_VERSION_ID &gt;= 50000
                          CLIENT_MULTI_STATEMENTS)
#else
                          0)
#endif
</pre>
<p>我们可以看到sysbench在连接的时候需要先连接到sbtest库，但是库不存在，所以出现问题。</p>
<p>解决问题的方法很简单：<br />
在mysql的shell下运行：</p>
<pre class="brush: sql; title: ; notranslate">
create database sbtest;
</pre>
<p>搞定。</p>
<p>小结：开源软件总是有点小问题，自己动手丰衣足食！</p>
<p>玩得开心！
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/1390/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>老生常谈: ulimit问题及其影响</title>
		<link>http://blog.yufeng.info/archives/1380</link>
		<comments>http://blog.yufeng.info/archives/1380#comments</comments>
		<pubDate>Mon, 20 Jun 2011 10:00:13 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[limits.conf]]></category>
		<category><![CDATA[ulimit]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=1380</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 老生常谈: ulimit问题及其影响 ulimit最初设计是用来限制进程对资源的使用情况的，因为早期的系统系统资源包括内存,CPU都是非常有限的，系统要保持公平，就要限制大家的使用，以达到一个相对公平的环境。以下是典型的机器默认的限制情况: 但是很多年过去了，情况发生变化了，硬件在过去的时间里面发展的非常迅猛，一个拥有几十个核心的，上百G内存的机器差不多也是白菜价格了。但是软件的限制还是没怎么发生变化，导致一系列使用的问题。其中很重要的文件句柄使用限制尤为明显。 特别是类似web服务器，数据库程序等需要大量的文件句柄，一旦开太小，比如默认(1024),在句柄使用完毕的时候，系统就频繁出现emfile错误 ，这时候系统很容易陷入不可用。但是如果设定太大了，又会有这样的副作用。很多服务器程序是事件派遣的，比如说用epoll，程序在启动的时候通常会根据最大的文件句柄数来预留内部的slot，比如说Erlang一个slot貌似要占用几K的资源，如果你设定文件句柄数目太大，就可能无端的浪费了几百M内存。所以要正视这个问题，设定一个合适的值。 通常我们是在shell下用来ulimit -n NNNN来设定新开的进程的文件句柄的限制，但是在一个生产环境下会有如下麻烦： JulyClyde(julyclyde@gmail.com)同学介绍解释了这个问题： shell里不能直接更改，是因为登录的时候pam已经从limits.conf中设置了上限，ulimit命令只能在低于上限的范围内发挥了。 这时候我们通常需要修改/etc/security/limits.conf 修改后，重现登录shell, 用ulimit -Hn和ulimit -Sn确认修改已生效. 另外淘宝雕梁说： 在linux kernel 2.6.25之前通过ulimit -n(setrlimit(RLIMIT_NOFILE))设置每个进程的最大打开文件句柄数不能超过NR_OPEN (1024*1024),也就是100多w(除非重新编译内核)，而在25之后，内核导出了一个sys接口可以修改这个最大值(/proc/sys/fs /nr_open).具体的changelog在这里 直接在你自己的程序里面绕开文件句柄的限制。 祝大家玩得开心！ Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/1380">老生常谈: ulimit问题及其影响</a></p>
</div>
<p>ulimit最初设计是用来限制进程对资源的使用情况的，因为早期的系统系统资源包括内存,CPU都是非常有限的，系统要保持公平，就要限制大家的使用，以达到一个相对公平的环境。以下是典型的机器默认的限制情况:</p>
<pre class="brush: bash; title: ; notranslate">
$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 204800
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 204800
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
</pre>
<p>但是很多年过去了，情况发生变化了，硬件在过去的时间里面发展的非常迅猛，一个拥有几十个核心的，上百G内存的机器差不多也是白菜价格了。但是软件的限制还是没怎么发生变化，导致一系列使用的问题。其中很重要的文件句柄使用限制尤为明显。</p>
<p>特别是类似web服务器，数据库程序等需要大量的文件句柄，一旦开太小，比如默认(1024),在句柄使用完毕的时候，系统就频繁出现emfile错误<br />
，这时候系统很容易陷入不可用。但是如果设定太大了，又会有这样的副作用。很多服务器程序是事件派遣的，比如说用epoll，程序在启动的时候通常会根据最大的文件句柄数来预留内部的slot，比如说Erlang一个slot貌似要占用几K的资源，如果你设定文件句柄数目太大，就可能无端的浪费了几百M内存。所以要正视这个问题，设定一个合适的值。</p>
<p>通常我们是在shell下用来ulimit -n NNNN来设定新开的进程的文件句柄的限制，但是在一个生产环境下会有如下麻烦：</p>
<pre class="brush: bash; title: ; notranslate">
$ ulimit -n 22222222
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ sudo ulimit -n 22222222
sudo: ulimit: command not found
</pre>
<p>JulyClyde(julyclyde@gmail.com)同学介绍解释了这个问题：</p>
<blockquote><p>shell里不能直接更改，是因为登录的时候pam已经从limits.conf中设置了上限，ulimit命令只能在低于上限的范围内发挥了。</p></blockquote>
<p>这时候我们通常需要修改/etc/security/limits.conf</p>
<pre class="brush: bash; title: ; notranslate">
# 确认包含下面的内容：
* soft nofile NNNNN
* hard nofile NNNNN
</pre>
<p>修改后，重现登录shell, 用ulimit -Hn和ulimit -Sn确认修改已生效.</p>
<p>另外<a href="http://weibo.com/tdiaoliang">淘宝雕梁</a>说：</p>
<blockquote><p>在linux kernel 2.6.25之前通过ulimit -n(setrlimit(RLIMIT_NOFILE))设置每个进程的最大打开文件句柄数不能超过NR_OPEN (1024*1024),也就是100多w(除非重新编译内核)，而在25之后，内核导出了一个sys接口可以修改这个最大值(/proc/sys/fs /nr_open).具体的changelog在<a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9cfe015aa424b3c003baba3841a60dd9b5ad319b">这里</a></p></blockquote>
<p>直接在你自己的程序里面绕开文件句柄的限制。</p>
<p>祝大家玩得开心！</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/1380/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>leveldb ubuntu 11.04下编译失败问题</title>
		<link>http://blog.yufeng.info/archives/1319</link>
		<comments>http://blog.yufeng.info/archives/1319#comments</comments>
		<pubDate>Sun, 22 May 2011 08:39:21 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[cstdatomic]]></category>
		<category><![CDATA[leveldb]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=1319</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: leveldb ubuntu 11.04下编译失败问题 我在最新的ubuntu11.04下编译leveldb的时候发现问题,但是在更早前的这个版本很正常： 我的编译环境: 头文件cstdatomic找不到, 简单的google下发现4.5的gcc这个头文件改名成atomic It seems that cstdatomic was renamed to atomic in newer GCC versions. Replacing cstdatomic include with atomic include in the header worked for me. 解决方法很简单： 修改./port/port_posix.h:14 成 现在再实验下： bingo, 玩得开心! Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/1319">leveldb ubuntu 11.04下编译失败问题</a></p>
</div>
<p>我在最新的ubuntu11.04下编译leveldb的时候发现问题,但是在更早前的这个版本很正常：</p>
<pre class="brush: bash; title: ; notranslate">
yufeng@yufeng-laptop:/usr/src/leveldb$ make
g++ -c -DLEVELDB_PLATFORM_POSIX -I. -I./include -std=c++0x -g2 db/db_bench.cc -o db/db_bench.o
In file included from ./port/port.h:14:0,
                 from ./util/coding.h:17,
                 from ./db/dbformat.h:13,
                 from ./db/db_impl.h:9,
                 from db/db_bench.cc:8:
./port/port_posix.h:14:22: fatal error: cstdatomic: 没有那个文件或目录
compilation terminated.
make: *** [db/db_bench.o] 错误 1
</pre>
<p><span id="more-1319"></span><br />
我的编译环境:</p>
<pre class="brush: bash; title: ; notranslate">
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION=&quot;Ubuntu 11.04&quot;

$ gcc -v
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc-4.5.real
COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.2-8ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --with-multiarch-defaults=x86_64-linux-gnu --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib/x86_64-linux-gnu --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/x86_64-linux-gnu --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default --with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 
</pre>
<p>头文件cstdatomic找不到, 简单的google下发现4.5的gcc这个头文件改名成atomic</p>
<blockquote><p>It seems that cstdatomic was renamed to atomic in newer GCC versions.<br />
Replacing cstdatomic include with atomic include in the header worked<br />
for me.</p></blockquote>
<p>解决方法很简单：</p>
<p>修改./port/port_posix.h:14 成
<pre class="brush: cpp; title: ; notranslate">#include &lt;atomic&gt;</pre>
<p>现在再实验下：</p>
<pre class="brush: bash; title: ; notranslate">
$ make
...

#跑测试案例
$ make check  
</pre>
<p>bingo, 玩得开心!</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/1319/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Systemtap辅助设置tcp_init_cwnd,免对操作系统打Patch</title>
		<link>http://blog.yufeng.info/archives/1173</link>
		<comments>http://blog.yufeng.info/archives/1173#comments</comments>
		<pubDate>Mon, 21 Mar 2011 08:47:29 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[工具介绍]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[staprun]]></category>
		<category><![CDATA[systemtap]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=1173</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: Systemtap辅助设置tcp_init_cwnd,免对操作系统打Patch 前段时间google的工程师提出对tcp的拥塞窗口的初始值进行增大可以显著的提高http的性能，这个主要是针对tcp的slow start的优化. 具体参考这里, 这里. 谢谢叔度同学从美国带回第一手信息! 由于低版本的linux内核的问题，这个参数的正确设置需要对os打patch,这个过程对线上机器来讲非常麻烦。 底下我用systemtap给出了个解决方案，免除这个麻烦. 我们在RHEL 5U4上作这个试验: 首先需要在开发机器上: 好了,现在我们需要的模块有了, 可以直接拷贝到目标机器去的. #目标机器需要安装systemtap,用于运行我们的模块. 大家碰到类似的问题,可以参考下这个思路. 玩得开心! Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/1173">Systemtap辅助设置tcp_init_cwnd,免对操作系统打Patch</a></p>
</div>
<p>前段时间google的工程师提出对tcp的拥塞窗口的初始值进行增大可以显著的提高http的性能，这个主要是针对tcp的slow start的优化.<br />
具体参考<a href="http://code.google.com/speed/articles/tcp_initcwnd_paper.pdf">这里</a>,<a href="http://www.ietf.org/proceedings/10mar/slides/iccrg-4.pdf "> 这里</a>.  谢谢<a href="http://blog.zhuzhaoyuan.com/">叔度</a>同学从美国带回第一手信息!</p>
<p>由于低版本的linux内核的问题，这个参数的正确设置需要对os打patch,这个过程对线上机器来讲非常麻烦。 底下我用systemtap给出了个解决方案，免除这个麻烦.  我们在RHEL 5U4上作这个试验:<br />
<span id="more-1173"></span><br />
首先需要在开发机器上:</p>
<pre class="brush: bash; title: ; notranslate">
#安装符号信息
$uname -r
2.6.18-164.el5
$ sudo rpm -i kernel-debuginfo-common-2.6.18-164.el5.x86_64.rpm
$ sudo rpm -i kernel-debuginfo-2.6.18-164.el5.x86_64.rpm 

$ sudo yum install systemtap

$ cat &gt; tcp_init_cwnd.stp
probe kernel.function(&quot;tcp_init_cwnd&quot;).return
{
$return = $1
}
CTRL+D

#设成7个mss
$ sudo stap -p4 -g -m initcwnd tcp_init_cwnd.stp 7
initcwnd.ko
</pre>
<p>好了,现在我们需要的模块有了, 可以直接拷贝到目标机器去的.<br />
#目标机器需要安装systemtap,用于运行我们的模块.</p>
<pre class="brush: bash; title: ; notranslate">
$uname -r
2.6.18-164.el5
$ sudo yum install systemtap

#在系统的启动脚本里面运行以下命令:
$ sudo staprun -o initcwnd.out -D initcwnd.ko
$ 19122
#19122是initcwnd模块加载器在后台运行的进程号，需要的时候可以把模块停掉。

#当然如果你的模块没有输出的话也可以直接, 这样更简单
$ sudo insmod initcwnd.ko
</pre>
<p>大家碰到类似的问题,可以参考下这个思路.</p>
<p>玩得开心!</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/1173/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>2010 ECUG Con 会议</title>
		<link>http://blog.yufeng.info/archives/679</link>
		<comments>http://blog.yufeng.info/archives/679#comments</comments>
		<pubDate>Fri, 10 Sep 2010 02:45:01 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=679</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 2010 ECUG Con 会议 具体会议信息请参看 http://ecug.org/ 关于 ECUG Con 本站（ECUG.ORG）是 ECUG Con 大会的官方支持站点。 ECUG 成立于 2007-10-14 日的 CN Erlounge II。最初定位为 Erlang China User Group（Erlang中国用户组）。它是一个民间团体，致力于促进 Erlang 中文社区的交流，以发展和壮大 Erlang 中国社区（了解 “ECUG 社区的发展历程”）。 按照 ECUG 的计划，预计每年我们都会举行一次全国性的 ECUG Con 大会（原称：CN Erlounge 大会）。下面是历届的会议资料： 1. 2007年9月8日，CN Erlounge I，珠三角Erlang爱好者小聚。无会议资料，但酝酿了之后具有里程碑意义的 CN Erlounge II。 2. 2007年10月13~14日，CN Erlounge II （ECUG Con 2007）在珠海召开。金山为大会主要赞助方。 [...]]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/679">2010 ECUG Con 会议</a></p>
</div>
<p>具体会议信息请参看 <a href="http://ecug.org/">http://ecug.org/</a></p>
<p>关于 ECUG Con</p>
<p>本站（ECUG.ORG）是 ECUG Con 大会的官方支持站点。</p>
<p>ECUG 成立于 2007-10-14 日的 CN Erlounge II。最初定位为 Erlang China User Group（Erlang中国用户组）。它是一个民间团体，致力于促进 Erlang 中文社区的交流，以发展和壮大 Erlang 中国社区（了解 “ECUG 社区的发展历程”）。</p>
<p>按照 ECUG 的计划，预计每年我们都会举行一次全国性的 ECUG Con 大会（原称：CN Erlounge 大会）。下面是历届的会议资料：</p>
<p>   1. 2007年9月8日，CN Erlounge I，珠三角Erlang爱好者小聚。无会议资料，但酝酿了之后具有里程碑意义的 CN Erlounge II。<br />
   2. 2007年10月13~14日，CN Erlounge II （ECUG Con 2007）在珠海召开。金山为大会主要赞助方。<br />
   3. 2008年12月20~21日，CN Erlounge III（ECUG Con 2008）在上海召开。盛大网络为大会主要赞助方。<br />
   4. 2009年11月7~8日，CN Erlounge IV （ECUG Con 2009）在杭州召开。盛大网络为大会主要赞助方。</p>
<p>今年我们不再以 CN Erlounge V 命名本届大会，而改称为 ECUG Con 2010 大会。而 ECUG 的名字，也由 Erlang China User Group 改为 Effective Cloud User Group。之所以有此变动，原因如下：</p>
<p>这个修改主要为了以便符合我们对它原本的期望，也为了更清楚告诉大家大会准确意图。一直以来，我们在大会 Topic 征集时都在强调，我们关注的是并发模型和分布式开发的最佳实践。Erlang 语言的思想给了我们很大的启发1。然而我们并不希望局限于 Erlang 语言本身，所有的探索都应该被肯定，需要分享与发扬光大。</p>
<p>其实这个修改在去年的大会上我已经提出过，但是直到这一届才真正给 ECUG 这个会议正名，是因为当时会议准备工作已经差不多了，修改起来显得仓促。</p>
<p>今年我们将于10月16~17日举行的 ECUG Con 2010，亦可简称 ECUG 2010。<br />
ECUG Con 2010 &#8211; 发起</p>
<p>    * 时间：2010-10-16 ~ 2010-10-17，为期2天<br />
    * 地点：北京（详细待定）<br />
    * 议题： 研究、探讨、关注随着移动互联网的普及，以及用户的高速增长，我们需要什么样的分布式架构可以满足这种需求变化？话题以技术为主，并限制于并发、分布式开发相关的实践。另外，话题可不局限于服务端的高并发解决方案，客户端或者Web前端为了支撑高并发而作出的架构调整，也是非常有趣的话题。<br />
    * 面向人群：对多台机器协作，构成一个强大威力的超级计算机有痴迷，并愿意投入大量精力专研的人。<br />
    * 会议主持：ECUG 会务组</p>
<p>会议形式</p>
<p>    * 多数时间由交流会讲师针对某个 Topic 进行论述，其他人提问（Q&#038;A）方式交流。<br />
    * 留出一小段时间，安排沙龙式的对等交流机会。</p>
<p>会议规则</p>
<p>    * 会议的讲师报销来回路费和住宿（申请成为讲师）。点击这里可以查看已经确定的讲师名单。<br />
    * 任何人可报名免费参与听讲（注册并申请参加本会议）。</p>
<p>注：由于场地限制，我们可能没法接受所有的与会申请，请谅解。如果名额已满，我们会回信说明。<br />
重要时间点</p>
<p>   1. 讲师注册及 Topic 征集截止日期：2010-9-5<br />
   2. 普通参会者报名截止日期： 2010-9-20<br />
   3. 讲师投稿截止日期：2010-9-25<br />
   4. 详细会议议程安排公布：2010-10-1<br />
   5. 会议日期：2010-10-16 ~ 2010-10-17</p>
<p>ECUG Con 2010 &#8211; Topic 征集<br />
Topic范围</p>
<p>问题域：</p>
<p>   1. 随着移动互联网的普及，以及用户的高速增长，我们需要什么样的分布式架构可以满足这种需求变化？<br />
   2. 多台机器一起协作，构成一个强大威力的超级计算机，这样的计算机应该是什么样子？</p>
<p>话题以技术为主，并限制于并发、分布式开发相关的实践。不局限于服务端的高并发解决方案，客户端或者Web前端为了支撑高并发而作出的架构调整，也是非常有趣的话题。</p>
<p>投稿请发往 ECUG 会务组。<br />
讲稿建议</p>
<p>   1. 内容有深度，而不是泛泛而谈。忌局限于一个事实或者一个实践，但是没有任何结论。<br />
   2. 内容有一个Focus的问题域。告诉大家你要解决什么问题，它又是如何被解决的。<br />
   3. 如果能够结合一个实际的应用实践，那是最棒不过了。</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/679/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>blocking technique介绍</title>
		<link>http://blog.yufeng.info/archives/668</link>
		<comments>http://blog.yufeng.info/archives/668#comments</comments>
		<pubDate>Tue, 07 Sep 2010 07:17:40 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[blocking technique]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=668</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: blocking technique介绍 随着硬件技术的发展， CPU也越来越强大的。普通的服务器装配的Intel(R) Xeon(R) CPU E5520有4个core,每个core有32KL1D, 32KL1I, 256KL2，这些core还共享8M的L3。这些cache对提高系统的性能非常帮助， 因为L1的性能比主村高2个数量级。但是我们也看到L1 cache太小了，而且对程序员来讲是透明的，我们不知道它的存在。 那么我们的程序如何利用这些硬件设施呢。 设想下，如果你的4个core能同时工作，每个core又在充分利用自己的L1,L2, 同时L3还充满备用数据，那么这个提速是可以想象的到的。 这时候我们需要blocking technique技术： 看图不说话 这个技术的核心就是把数据集控制在L1的范围内，并发的多核计算！ 有兴趣的同学可以进一步： 下载更详细的CISE-12-2-ScientificPro 玩的开心！ Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/668">blocking technique介绍</a></p>
</div>
<p>随着硬件技术的发展， CPU也越来越强大的。普通的服务器装配的Intel(R) Xeon(R) CPU E5520有4个core,每个core有32KL1D, 32KL1I, 256KL2，这些core还共享8M的L3。这些cache对提高系统的性能非常帮助， 因为L1的性能比主村高2个数量级。但是我们也看到L1 cache太小了，而且对程序员来讲是透明的，我们不知道它的存在。</p>
<p>那么我们的程序如何利用这些硬件设施呢。 设想下，如果你的4个core能同时工作，每个core又在充分利用自己的L1,L2, 同时L3还充满备用数据，那么这个提速是可以想象的到的。</p>
<p>这时候我们需要blocking technique技术：<br />
看图不说话<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/09/blocking-technique1.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/09/blocking-technique1-300x194.jpg" alt="" title="blocking technique1" width="300" height="194" class="alignnone size-medium wp-image-670" /></a></p>
<p><a href="http://blog.yufeng.info/wp-content/uploads/2010/09/blocking-technique2.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/09/blocking-technique2-300x194.jpg" alt="" title="blocking technique2" width="300" height="194" class="alignnone size-medium wp-image-671" /></a></p>
<p>这个技术的核心就是把数据集控制在L1的范围内，并发的多核计算！</p>
<p>有兴趣的同学可以进一步：<br />
<a href='http://blog.yufeng.info/wp-content/uploads/2010/09/CISE-12-2-ScientificPro.pdf'>下载更详细的CISE-12-2-ScientificPro</a></p>
<p>玩的开心！
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/668/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>局部性原理在计算机和分布式系统中的应用课程PPT</title>
		<link>http://blog.yufeng.info/archives/643</link>
		<comments>http://blog.yufeng.info/archives/643#comments</comments>
		<pubDate>Mon, 16 Aug 2010 08:59:42 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[locality]]></category>
		<category><![CDATA[局部性原理]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=643</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 局部性原理在计算机和分布式系统中的应用课程PPT 上个星期我在中科大参加了一个星期的由 张晓东教授，美国俄亥俄州立大学，计算机科学与工程系 http://www.cse.ohio-state.edu/~zhang 授课的教程(http://mail.ustc.edu.cn/~wbdai/dragonstar/html/course.html)。 这个课程最主要focus在数据的局部性原理，从硬件到操作系统到应用程序这样的顺序过来的，对于我们提高核心系统软件的性能非常有启发意义. 课件下载点击这里 以下是教程的介绍: 课程简介 ________________________________________ 　　在计算机系统中，数据的存储、访问和传输已成为阻碍系统性能的主要瓶颈，访问数据的速度远远低于计算的速度，而对数据访问的需求已经成为计算机运行的主要部分。 数据在计算机系统中的存储层次也变得越来越深：从硬件快速寄存器(Registers)到快速存储器(Cache)再到主存的DRAM，通过数据总线，系统可以与各种磁盘，如半导体的固态存储器（Solid State Device）或机械的硬磁盘等。通过互联网，计算机之间还可以通过网络进行大规模的远程存储、访问和通讯。 　　计算机系统中的数据访问的速度和效率是由两个基本要素决定的：（1）点与点之间的传输的速度（Bandwidth）；（2）在某点读或写数据的时间延迟（Latency）。在过去的20多年里，在计算机的各个不同的联结点之间数据的传输速度，有了很大的提高，但数据访问的延迟却没能有效地改善。为了解决这一对越来越突出的矛盾，在计算机系统设计和实现中，三种最有效的硬件或软件的方法是：缓存（Caching），备份（Replication）和预取（Prefetching）。 课程大纲 ________________________________________ 　　这门课以上面提到的三个基本技术为核心，全面介绍计算机各个存储层面上的最有代表性和最先进的数据管理方法。课程安排如下： （一） 硬件快速存储器（Cache）的设计与改进 （1） 基本结构 （2） 命中率和访问延迟的取舍 （3） 高命中率和低访问延迟Cache的设计 （4） 多核处理器(Multicore)中的Cache管理 （二） 主存DRAM内局部性（Locality）的挖掘 （1） DRAM缓存区(row buffer)的结构 （2） 在DRAM内局部性丢失的原因 （3） 一种保留局部性的内存地址空间的映射方法 （4） 嵌入Cache 的DRAM的设计与系统应用 （三） 内存和磁盘管理中的核心技术：替换算法 （1） LRU算法优点以及难以解决的问题 （2） LIRS算法是如何解决LRU问题的 （3） Clock-pro: LIRS是如何实现在操作系统内核的 （4） BP-wrapper:消除替换算法在系统实现中的同步竟争 （四） [...]]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/643">局部性原理在计算机和分布式系统中的应用课程PPT</a></p>
</div>
<p>上个星期我在中科大参加了一个星期的由 张晓东教授，美国俄亥俄州立大学，计算机科学与工程系<a href=" http://www.cse.ohio-state.edu/~zhang"> http://www.cse.ohio-state.edu/~zhang</a>  授课的教程(<a href="http://mail.ustc.edu.cn/~wbdai/dragonstar/html/course.html">http://mail.ustc.edu.cn/~wbdai/dragonstar/html/course.html</a>)。</p>
<p>这个课程最主要focus在数据的局部性原理，从硬件到操作系统到应用程序这样的顺序过来的，对于我们提高核心系统软件的性能非常有启发意义.</p>
<p><a href="http://blog.yufeng.info/wp-content/uploads/2010/08/zkd.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/08/zkd-300x199.jpg" alt="" title="与会者合影"  class="alignnone size-medium wp-image-644" /></a></p>
<p>课件下载点击<a href="http://blog.yufeng.info/dragonStar-2010-USTC.tgz">这里</a></p>
<p> 以下是教程的介绍:<br />
课程简介<span id="more-643"></span><br />
________________________________________<br />
　　在计算机系统中，数据的存储、访问和传输已成为阻碍系统性能的主要瓶颈，访问数据的速度远远低于计算的速度，而对数据访问的需求已经成为计算机运行的主要部分。 数据在计算机系统中的存储层次也变得越来越深：从硬件快速寄存器(Registers)到快速存储器(Cache)再到主存的DRAM，通过数据总线，系统可以与各种磁盘，如半导体的固态存储器（Solid State Device）或机械的硬磁盘等。通过互联网，计算机之间还可以通过网络进行大规模的远程存储、访问和通讯。<br />
　　计算机系统中的数据访问的速度和效率是由两个基本要素决定的：（1）点与点之间的传输的速度（Bandwidth）；（2）在某点读或写数据的时间延迟（Latency）。在过去的20多年里，在计算机的各个不同的联结点之间数据的传输速度，有了很大的提高，但数据访问的延迟却没能有效地改善。为了解决这一对越来越突出的矛盾，在计算机系统设计和实现中，三种最有效的硬件或软件的方法是：缓存（Caching），备份（Replication）和预取（Prefetching）。<br />
课程大纲<br />
________________________________________<br />
　　这门课以上面提到的三个基本技术为核心，全面介绍计算机各个存储层面上的最有代表性和最先进的数据管理方法。课程安排如下：</p>
<p>（一） 硬件快速存储器（Cache）的设计与改进<br />
（1） 基本结构<br />
（2） 命中率和访问延迟的取舍<br />
（3） 高命中率和低访问延迟Cache的设计<br />
（4） 多核处理器(Multicore)中的Cache管理<br />
（二） 主存DRAM内局部性（Locality）的挖掘<br />
（1） DRAM缓存区(row buffer)的结构<br />
（2） 在DRAM内局部性丢失的原因<br />
（3） 一种保留局部性的内存地址空间的映射方法<br />
（4） 嵌入Cache 的DRAM的设计与系统应用<br />
（三） 内存和磁盘管理中的核心技术：替换算法<br />
（1） LRU算法优点以及难以解决的问题<br />
（2） LIRS算法是如何解决LRU问题的<br />
（3） Clock-pro: LIRS是如何实现在操作系统内核的<br />
（4） BP-wrapper:消除替换算法在系统实现中的同步竟争<br />
（四） 提高操作系统对磁盘的管理功能和效率<br />
（1） 操作系统对磁盘管理的局限性<br />
（2） 扩大操作系统的视野去获得关键的磁盘数据存储地址信息<br />
（3） DULO-Caching和DULO-Prefetchin:感知磁盘数据分布的缓存(Caching)和预取(Prefetching)方法以及系统实现<br />
（五） 固态闪存系统(Solid State Device Flash Memory)<br />
（1） SSD Flash Memory的结构和性能<br />
（2） SmartSaver: 利用闪存来降低磁盘能耗<br />
（3） SSD的读、写，以及缓存的高效管理<br />
（六） 在互联网和无线网上的数据管理和有效传输<br />
（1） Stretched Exponential Distribution: 为什么P2P在互联网上是传输多媒体的一种最有效的方法？<br />
（2） 数据缓存在无线网上的作用</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/643/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>来自RHEL系统调优手册的几张经典图</title>
		<link>http://blog.yufeng.info/archives/617</link>
		<comments>http://blog.yufeng.info/archives/617#comments</comments>
		<pubDate>Tue, 20 Jul 2010 01:46:51 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[网络编程]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=617</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 来自RHEL系统调优手册的几张经典图 调优手册在这里下载: http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf 看图不说话：） IO架构图： 内存管理图： 很容易误解的socket buffer： Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/617">来自RHEL系统调优手册的几张经典图</a></p>
</div>
<p>调优手册在这里下载: <a href="http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf">http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf</a><br />
看图不说话：）</p>
<p>IO架构图：<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/07/IO_subsystem_architecture.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/07/IO_subsystem_architecture-300x291.jpg" alt="" title="IO_subsystem_architecture" width="300" height="291" class="alignnone size-medium wp-image-620" /></a></p>
<p>内存管理图：<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/07/Linux_virtual_memory_manager.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/07/Linux_virtual_memory_manager-300x197.jpg" alt="" title="Linux_virtual_memory_manager" width="300" height="197" class="alignnone size-medium wp-image-619" /></a></p>
<p>很容易误解的socket buffer：<br />
<a href="http://blog.yufeng.info/wp-content/uploads/2010/07/socket_buffer_memory_allocation.jpg"><img src="http://blog.yufeng.info/wp-content/uploads/2010/07/socket_buffer_memory_allocation-300x253.jpg" alt="" title="socket_buffer_memory_allocation" width="300" height="253" class="alignnone size-medium wp-image-618" /></a></p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/617/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>我的emacs配置</title>
		<link>http://blog.yufeng.info/archives/578</link>
		<comments>http://blog.yufeng.info/archives/578#comments</comments>
		<pubDate>Wed, 26 May 2010 10:00:38 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[配置]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=578</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: 我的emacs配置 贴上来方便有用emacs的同学。配置部分是从网上淘来的，忘记出处了，见谅！ Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/578">我的emacs配置</a></p>
</div>
<p>贴上来方便有用emacs的同学。配置部分是从网上淘来的，忘记出处了，见谅！</p>
<pre class="brush: plain; title: ; notranslate">
;;(keyboard-translate ?\C-h ?\C-?)
(defalias 'yes-or-no-p 'y-or-n-p)

(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format &quot;%:y-%02m-%02d %3a %02H:%02M:%02S&quot;)
(add-hook 'write-file-hooks 'time-stamp)

(global-set-key [f2] 'rgrep)
(global-set-key [(f5)] 'eshell)
(global-set-key [C-f5] 'shell)
(global-set-key (kbd &quot;M-3&quot;) 'capitalize-word)

(global-set-key [f6] 'find-file)
(global-set-key [C-Z] nil)
(global-set-key [C-f4] 'kill-this-buffer)

(global-set-key [(f4)] 'ibuffer)
(global-set-key [(f8)] 'other-window)

(require 'color-theme)
;;(color-theme-initialize)
(color-theme-dark-blue2)
(setq font-lock-verbose t)
;;(set-default-font &quot;Bitstream Vera Sans Mono-12&quot;)
(global-font-lock-mode t)
(tool-bar-mode -1)
(setq column-number-mode t)
(setq display-battery-mode t)
(setq size-indication-mode t)
(setq default-major-mode 'outline-mode)
(add-hook 'outline-mode-hook 'turn-off-auto-fill)

(setq transient-mark-mode t)
(setq-default shell-cd-regexp nil)
(setq-default shell-pushd-regexp nil)
(setq-default shell-popd-regexp nil)
(setq inhibit-startup-message t)
(setq visible-bell t)
(setq mouse-yank-at-point t)
(setq kill-ring-max 100)
(setq default-fill-column 60)

(global-set-key (kbd &quot;M-g&quot;) 'goto-line)
(global-set-key (kbd &quot;M-o&quot;) 'ff-find-related-file)

(setq require-final-newline t)

(setq track-eol t)

(setq gnus-inhibit-startup-message t)

(setq enable-recursive-minibuffers t)
(setq auto-save-mode nil)
(setq Man-notify-method 'pushy)

(display-time-mode 1)
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(setq display-time-use-mail-icon t)
(setq display-time-interval 10)

(tool-bar-mode -1)
(customize-set-variable 'scroll-bar-mode 'right)

(setq speedbar-show-unknown-files t)
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil)
(setq speedbar-verbosity-level 0)
(global-set-key [f9] 'speedbar)

;; set paren mode
(show-paren-mode t)
(setq show-paren-style 'parentheses)
(mouse-avoidance-mode 'animate)

;; set the default username and email
(setq user-full-name &quot;yufeng&quot;)
(setq user-mail-address &quot;mryufeng@gmail.com&quot;)

;; set the title name
(setq frame-title-format &quot;Emacs - %f&quot;)

;;-------------------------Shell 使用 ansi color-------------
(autoload 'ansi-color-for-comint-mode-on &quot;ansi-color&quot; nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

(require 'uniquify)
(setq
  uniquify-buffer-name-style 'post-forward
  uniquify-separator &quot;:&quot;)

;;
(require 'ibuffer)
(global-set-key (kbd &quot;C-x C-b&quot;) 'ibuffer)
(require 'ido)
(ido-mode t)

;;-------------------------让Emacs拥有tabs-------------------
(require 'tabbar)
(setq tabbar-buffer-groups-function
          (lambda ()
            (list &quot;All&quot;)))

(tabbar-mode)
(global-set-key [(control shift tab)] 'tabbar-backward)
(global-set-key [(control tab)] 'tabbar-forward)
(global-set-key (kbd &quot;M-1&quot;) 'tabbar-backward)
(global-set-key (kbd &quot;M-2&quot;) 'tabbar-forward) 

;;(require 'session)
;;(add-hook 'after-init-hook 'session-initialize)
;;(load &quot;desktop&quot;)
;;(desktop-load-default)
;;(desktop-read)
;;(setq desktop-save-mode t)

(require 'browse-kill-ring)
(global-set-key [(control c)(k)] 'browse-kill-ring)
(browse-kill-ring-default-keybindings)

;;erlang
;;(require 'erlang-eunit)
;;(load &quot;erlang_appwiz&quot; t nil)
(global-set-key [f3] 'erlang-next-error)
(global-set-key [C-f7] 'erlang-compile)
(global-set-key [f7] 'compile)
(global-set-key [f10] 'linum-mode)

;;distel
(add-to-list 'load-path &quot;/usr/local/share/distel/elisp&quot;)
(require 'distel)
(distel-setup)
;; Some Erlang customizations
(add-hook 'erlang-mode-hook
	    (lambda ()
	          ;; when starting an Erlang shell in Emacs, default in the node name
`	          (setq inferior-erlang-machine-options '(&quot;-sname&quot; &quot;emacs&quot;))
		      ;; add Erlang functions to an imenu menu
		      (imenu-add-to-menubar &quot;imenu&quot;)))

;; A number of the erlang-extended-mode key bindings are useful in the shell too
(defconst distel-shell-keys
  '((&quot;\C-\M-i&quot;   erl-complete)
    (&quot;\M-?&quot;      erl-complete)
    (&quot;\M-.&quot;      erl-find-source-under-point)
    (&quot;\M-,&quot;      erl-find-source-unwind)
    (&quot;\M-*&quot;      erl-find-source-unwind)
    )
  &quot;Additional keys to bind when in Erlang shell.&quot;)

(add-hook 'erlang-shell-mode-hook
	    (lambda ()
	          ;; add some Distel bindings to the Erlang shell
	          (dolist (spec distel-shell-keys)
		          (define-key erlang-shell-mode-map (car spec) (cadr spec)))))

;wrangler
(add-to-list 'load-path &quot;/usr/local/share/wrangler/elisp&quot;)
(require 'wrangler) 

;;ecb
(require 'xcscope)
(require 'cedet) ;;load cedet
(require 'ecb) ;;load ecb

(setq ecb-tip-of-the-day nil
inhibit-startup-message t
ecb-auto-compatibility-check nil
ecb-version-check nil)

(global-set-key [f12] 'ecb-activate)
(global-set-key [C-f12] 'ecb-deactivate)
(global-set-key [f11] 'delete-other-windows)
(global-set-key [(meta return)] 'semantic-ia-complete-symbol-menu)
(global-set-key (kbd &quot;C-c e&quot;) 'ecb-goto-window-edit-last)
(global-set-key (kbd &quot;C-c s&quot;) 'ecb-goto-window-sources)
(global-set-key (kbd &quot;C-c d&quot;) 'ecb-goto-window-directories)
(global-set-key (kbd &quot;C-c m&quot;) 'ecb-goto-window-methods)
(global-set-key (kbd &quot;C-c h&quot;) 'ecb-goto-window-history)
(global-set-key (kbd &quot;C-c r&quot;) 'ecb-redraw-layout)
(global-set-key (kbd &quot;C-.&quot;) 'cscope-find-global-definition-no-prompting)
(global-set-key (kbd &quot;C-,&quot;) 'cscope-pop-mark)
(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(ecb-options-version &quot;2.32&quot;)
 '(safe-local-variable-values (quote ((erlang-indent-level . 2)))))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )

;;msf abbrev
(add-to-list 'load-path &quot;~/emacs&quot;)
;; ensure abbrev mode is always on
(setq-default abbrev-mode t)
;; do not bug me about saving my abbreviations
(setq save-abbrevs nil)
;; load up modes I use
(require 'cc-mode)
;;(require 'perl-mode)
;;(require 'cperl-mode)
;;(require 'sh-script)
;;(require 'shell)
;;(require 'lua-mode)
;;(require 'erlang)
;; load up abbrevs for these modes
(require 'msf-abbrev)
(setq msf-abbrev-verbose t) ;; optional
(setq msf-abbrev-root &quot;~/emacs/mode-abbrevs&quot;)
(global-set-key (kbd &quot;C-c l&quot;) 'msf-abbrev-goto-root)
(global-set-key (kbd &quot;C-c a&quot;) 'msf-abbrev-define-new-abbrev-this-mode)
(msf-abbrev-load)

;;go mode
(require 'go-mode-load)
(require 'tramp)

;;gud
(add-hook 'gdb-mode-hook '(lambda ()
                            (define-key c-mode-base-map [(f5)] 'gud-go)
                            (define-key c-mode-base-map [(f7)] 'gud-step)
                            (define-key c-mode-base-map [(f8)] 'gud-next)))

(defvar no-easy-keys-minor-mode-map (make-keymap)
  &quot;no-easy-keys-minor-mode keymap.&quot;)
(let ((f (lambda (m)
           `(lambda () (interactive)
              (message (concat &quot;No! use &quot; ,m &quot; instead.&quot;))))))
  (dolist (l '((&quot;&lt;left&gt;&quot; . &quot;C-b&quot;) (&quot;&lt;right&gt;&quot; . &quot;C-f&quot;) (&quot;&lt;up&gt;&quot; . &quot;C-p&quot;)
               (&quot;&lt;down&gt;&quot; . &quot;C-n&quot;)
               (&quot;&lt;C-left&gt;&quot; . &quot;M-f&quot;) (&quot;&lt;C-right&gt;&quot; . &quot;M-b&quot;) (&quot;&lt;C-up&gt;&quot; . &quot;M-{&quot;)
               (&quot;&lt;C-down&gt;&quot; . &quot;M-}&quot;)
               (&quot;&lt;M-left&gt;&quot; . &quot;M-f&quot;) (&quot;&lt;M-right&gt;&quot; . &quot;M-b&quot;) (&quot;&lt;M-up&gt;&quot; . &quot;M-{&quot;)
               (&quot;&lt;M-down&gt;&quot; . &quot;M-}&quot;)
               (&quot;&lt;delete&gt;&quot; . &quot;C-d&quot;) (&quot;&lt;C-delete&gt;&quot; . &quot;M-d&quot;)
               (&quot;&lt;M-delete&gt;&quot; . &quot;M-d&quot;) (&quot;&lt;next&gt;&quot; . &quot;C-v&quot;) (&quot;&lt;C-next&gt;&quot; . &quot;M-x &lt;&quot;)
               (&quot;&lt;prior&gt;&quot; . &quot;M-v&quot;) (&quot;&lt;C-prior&gt;&quot; . &quot;M-x &gt;&quot;)
               (&quot;&lt;home&gt;&quot; . &quot;C-a&quot;) (&quot;&lt;C-home&gt;&quot; . &quot;M-&gt;&quot;)
               (&quot;&lt;C-home&gt;&quot; . &quot;M-&lt;&quot;) (&quot;&lt;end&gt;&quot; . &quot;C-e&quot;) (&quot;&lt;C-end&gt;&quot; . &quot;M-&gt;&quot;)))
    (define-key no-easy-keys-minor-mode-map
      (read-kbd-macro (car l)) (funcall f (cdr l)))))
(define-minor-mode no-easy-keys-minor-mode
  &quot;A minor mode that disables the arrow-keys, pg-up/down, delete
  and backspace.&quot;  t &quot; no-easy-keys&quot;
  'no-easy-keys-minor-mode-map :global t)
(no-easy-keys-minor-mode 1)

(require 'smex)
(smex-initialize)

(global-set-key (kbd &quot;M-x&quot;) 'smex)
(global-set-key (kbd &quot;M-X&quot;) 'smex-major-mode-commands)

(require 'org-install)
(add-to-list 'auto-mode-alist '(&quot;\\.org$&quot; . org-mode))
(define-key global-map &quot;\C-cl&quot; 'org-store-link)
(define-key global-map &quot;\C-ca&quot; 'org-agenda)
(setq org-log-done t)

(setq transient-mark-mode t) ; highlight text selection
(setq delete-selection-mode t) ; delete seleted text when typing

; highlight current line
(require 'hl-line)
(global-hl-line-mode t)
</pre>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/578/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>emacs msf-abbrev写c程序 (火箭一样快)</title>
		<link>http://blog.yufeng.info/archives/384</link>
		<comments>http://blog.yufeng.info/archives/384#comments</comments>
		<pubDate>Tue, 06 Apr 2010 13:22:25 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[msf-abbrev]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=384</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: emacs msf-abbrev写c程序 (火箭一样快) 看图不说话: 有兴趣的同学google之! Post Footer automatically generated by wp-posturl plugin for wordpress.]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/384">emacs msf-abbrev写c程序 (火箭一样快)</a></p>
</div>
<p><strong>看图不说话:</strong></p>
<p><a href="http://blog.yufeng.info/image/msf-abbrev-demo.gif"><img src="http://blog.yufeng.info/image/msf-abbrev-demo.gif" alt="" title="msf-abbrev-demo" /></a></p>
<p><strong>有兴趣的同学google之!</strong></p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/384/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

