<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>rainly</title>
    <description></description>
    <link>http://rainly.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>形象、有趣的语言比较</title>
        <author>rainly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rainly.javaeye.com">rainly</a>&nbsp;
          链接：<a href="http://rainly.javaeye.com/blog/215264" style="color:red;">http://rainly.javaeye.com/blog/215264</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          闲来看到这张图，觉得有点趣味！
          <br/>
          <span style="color:red;">
            <a href="http://rainly.javaeye.com/blog/215264#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 08:31:10 +0800</pubDate>
        <link>http://rainly.javaeye.com/blog/215264</link>
        <guid>http://rainly.javaeye.com/blog/215264</guid>
      </item>
      <item>
        <title>ubuntu8.04编译安装ruby-1.8.6-p114</title>
        <author>rainly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rainly.javaeye.com">rainly</a>&nbsp;
          链接：<a href="http://rainly.javaeye.com/blog/184750" style="color:red;">http://rainly.javaeye.com/blog/184750</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.安装build工具<br /><pre name="code" class="shell">sudo aptitude install build-essential linux-headers-$(uname -r) </pre><br /><br />2.安装readline zlib libncurses5<br /><pre name="code" class="shell">apt-get install zlib1g-dev
apt-get install libreadline5 libreadline5-dev
apt-get install libncurses5 libncurses5-dev</pre><br /><br />3.安装ruby<br />ruby的源代码下载：<br />http://www.ruby-lang.org/en/downloads/<br /><pre name="code" class="shell">wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p114.tar.gz
tar xvfz ruby-1.8.6-p114.tar.gz
cd ruby-1.8.6-p114
./configure  --prefix=/usr/local/ruby
sudo make
sudo make install </pre><br />安装好以后，加入/usr/local/ruby/bin到操作系统的PATH环境变量中<br />编辑/etc/environment<br /><pre name="code" class="shell">gedit /etc/environment</pre><br />在最后面加入：<br /><pre name="code" class="text">PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/ruby/bin"</pre><br />执行命令,使环境变量修改生效：<br /><pre name="code" class="shell">source /etc/environment</pre><br /><br />4.安装gem<br /><pre name="code" class="shell">wget http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz
tar xzvf rubygems-1.0.1.tgz
cd rubygems-1.0.1
sudo ruby setup.rb </pre><br /><br />验证gem是否安装成功并升级<br /><pre name="code" class="shell">sudo gem update --system</pre><br /><br />5.安装rails<br /><pre name="code" class="shell">sudo gem install rails --include-dependencies </pre><br />安装好rails以后，验证是否安装成功,可以执行：<br /><pre name="code" class="shell">rails –v</pre><br />确认一下rails的版本
          <br/>
          <span style="color:red;">
            <a href="http://rainly.javaeye.com/blog/184750#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 10:13:27 +0800</pubDate>
        <link>http://rainly.javaeye.com/blog/184750</link>
        <guid>http://rainly.javaeye.com/blog/184750</guid>
      </item>
      <item>
        <title>使用Varnish做网站缓存加速器</title>
        <author>rainly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rainly.javaeye.com">rainly</a>&nbsp;
          链接：<a href="http://rainly.javaeye.com/blog/178600" style="color:red;">http://rainly.javaeye.com/blog/178600</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          声明:<br />下面的安装步骤安全参照张宴的&lt;&lt;使用Varnish代替Squid做网站缓存加速器的详细解决方案>>一文操作,转载于：http://blog.s135.com.<br />文中结合的自已在操作中遇到了一点问题,并穿插记录其中.<br />故特记于此,以备以后查阅<br /><br /><br />1、创建www用户和组，以及Varnish缓存文件存放目录（/var/vcache）：<br /><pre name="code" class="java">/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /var/vcache
chmod +w /var/vcache
chown -R www:www /var/vcache</pre><br />2、创建Varnish日志目录（/var/logs/）：<br /><pre name="code" class="java">mkdir -p /var/logs
chmod +w /var/logs
chown -R www:www /var/logs</pre><br />3、编译安装varnish：<br /><pre name="code" class="java">wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz
tar zxvf varnish-1.1.2.tar.gz
cd varnish-1.1.2
./configure --prefix=/usr/local/varnish
make && make install</pre><br />注意,我在进行make步骤时,出现如下错误:<br />"varnishhist.c:35:20: error: curses.h: No such file or directory"<br />造成该问题的原因是因为系统中少了ncurses-devel包,由于我的平台是CentOS,可用如下命令进行安装该ncurses-devel包:<br /><pre name="code" class="java">yum install ncurses-devel</pre><br /><br />安装成功后,再重新执行make && make install<br />4、创建Varnish配置文件：<br /><pre name="code" class="java">vi /usr/local/varnish/vcl.conf</pre><br />输入以下内容：<br /><pre name="code" class="java">backend myblogserver { 
       set backend.host = "192.168.0.5"; 
       set backend.port = "80"; 
}

acl purge {
       "localhost";
       "127.0.0.1";
       "192.168.1.0"/24;
}

sub vcl_recv {
       if (req.request == "PURGE") {
               if (!client.ip ~ purge) {
                       error 405 "Not allowed.";
               }
               lookup;
       }

       if (req.http.host ~ "^blog.s135.com") {
               set req.backend = myblogserver; 
               if (req.request != "GET" && req.request != "HEAD") {
                       pipe;
               }
               else {
                       lookup;
               }
       }
       else {
               error 404 "Zhang Yan Cache Server"; 
               lookup;
       }
}

sub vcl_hit {
       if (req.request == "PURGE") {
               set obj.ttl = 0s;
               error 200 "Purged.";
       }
}

sub vcl_miss {
       if (req.request == "PURGE") {
               error 404 "Not in cache.";
       }
}

sub vcl_fetch {
       if (req.request == "GET" && req.url ~ "\.(txt|js)$") {
               set obj.ttl = 3600s;
       }
       else {
               set obj.ttl = 30d;
       }
}</pre><br />这里，我对这段配置文件解释一下：<br />　　(1)、Varnish通过反向代理请求后端IP为192.168.0.5，端口为80的web服务器；<br />　　(2)、Varnish允许localhost、127.0.0.1、192.168.0.***三个来源IP通过PURGE方法清除缓存；<br />　　(3)、Varnish对域名为blog.s135.com的请求进行处理，非blog.s135.com域名的请求则返回“Zhang Yan Cache Server”；<br />　　(4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存，对POST请求透过，让其直接访问后端Web服务器。之所以这样配置，是因为POST请求一般是发送数据给服务器的，需要服务器接收、处理，所以不缓存；<br />　　(5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时，对其他的URL缓存时间设置为30天。<br />5、启动Varnish<br /><pre name="code" class="java">ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on</pre><br />6、启动varnishncsa用来将Varnish访问日志写入日志文件：<br /><pre name="code" class="java">/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/varnish.log &</pre><br />7、如果想配置成开机自动启动Varnish<br /><pre name="code" class="java">vi /etc/rc.local</pre><br />　在末尾增加以下内容：<br /><pre name="code" class="java">ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &</pre><br />8、优化Linux内核参数<br /><pre name="code" class="java">vi /etc/sysctl.conf</pre><br />在末尾增加以下内容：<br /><pre name="code" class="java">net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000</pre><br />再看看如何管理Varnish：<br />　1、查看Varnish服务器连接数与命中率：<br /><pre name="code" class="java">/usr/local/varnish/bin/varnishstat -n /var/vcache</pre><br />输出的结果如下图显示:<br /><img src="http://blog.s135.com/attachment/200711/varnish1.gif" /><br />　2、通过Varnish管理端口进行管理：<br />　　用help看看可以使用哪些Varnish命令：<br /><pre name="code" class="java">/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help</pre><br />　3、通过Varnish管理端口，使用正则表达式批量清除缓存：<br />　　(1)、例：清除类似http://blog.s135.com/a/zhangyan.html的URL地址）：<br /><pre name="code" class="java">/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/</pre><br />   (2)、例：清除类似http://blog.s135.com/tech的URL地址：<br /><pre name="code" class="java">/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$</pre><br />   (3)、例：清除所有缓存：<br /><pre name="code" class="java">/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$</pre><br />附1：2007年12月10日，我写了一个每天0点运行，按天切割Varnish日志，生成一个压缩文件，同时删除上个月旧日志的脚本（/var/logs/cutlog.sh）：<br />　　/var/logs/cutlog.sh文件内容如下：<br /><pre name="code" class="java">#!/bin/sh
# This file run at 00:00
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mv /var/logs/youvideo.log /var/logs/${date}.log
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &
mkdir -p /var/logs/youvideo/
gzip -c /var/logs/${date}.log > /var/logs/youvideo/${date}.log.gz
rm -f /var/logs/${date}.log
rm -f /var/logs/youvideo/$(date -d "-1 month" +"%Y-%m*").log.gz</pre><br /><br />设置在每天00:00定时执行：<br /><pre name="code" class="java">/usr/bin/crontab -e</pre><br />或者　　<br /><pre name="code" class="java">vi /var/spool/cron/root</pre>　<br />输入以下内容：<br /><pre name="code" class="java">0 0 * * * /bin/sh /var/logs/cutlog.sh</pre>
          <br/>
          <span style="color:red;">
            <a href="http://rainly.javaeye.com/blog/178600#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 23:12:59 +0800</pubDate>
        <link>http://rainly.javaeye.com/blog/178600</link>
        <guid>http://rainly.javaeye.com/blog/178600</guid>
      </item>
      <item>
        <title>CentOS_x86_64平台安装ROR</title>
        <author>rainly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rainly.javaeye.com">rainly</a>&nbsp;
          链接：<a href="http://rainly.javaeye.com/blog/175553" style="color:red;">http://rainly.javaeye.com/blog/175553</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          之Ruby的MySQL数据库适配器的安装<br />准备<br />对于当前CentOS服务器的环境中并没有安装有MySQL数据库的情况，为了保证使Ruby的MySQL数据库适配器的编译安装得以成功，需要一些必要的MySQL模块（MySQL C客户端API头文件和库文件）。为此，你得要先安装该模块。该模块可到MySQL的官方网站中，找到相应的模块去下载。例如，在本例中，我的OS是CentOS5.1,则下载"Red Hat Enterprise Linux 5 RPM (AMD64 / Intel EM64T) downloads"-->"Headers and libraries"的文件,并将之安装。<br />由于我使用的是CentOS,则很方便地通过下面的指令自动连接到centosplug中在线下载安装<br /><span style="color: greens">yum install mysql-devel</span>如果对于当前的服务有本地数据库，则上面的工作可免除，因为在MySQL数据库的目录下，已经包含了上述的模块。<br />1.下载mysql-ruby-2.7.3.tar.gz：<a href="http://www.tmtm.org/en/mysql/ruby/" target="_blank">http://www.tmtm.org/en/mysql/ruby/</a><br />2.将所下载的mysql-ruby-2.7.3.tar.gz保存到/usr/src目录中，并将当前目录切换到该目录下，有如下指令：<br /><span style="color: greens">cd /usr/src<br />tar xzvf mysql-ruby-2.7.3.tar.gz<br />cd mysql-ruby-2.7.3<br />ruby extconf.rb --with-mysql-include=/usr/include/mysql --with-mysql-lib=/usr/lib/mysql --with-mysql-dir=/usr/share/mysql --with-mysql-config=/usr/lib64/mysql/mysql_config<br />make && make install</span>
          <br/>
          <span style="color:red;">
            <a href="http://rainly.javaeye.com/blog/175553#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 20:14:39 +0800</pubDate>
        <link>http://rainly.javaeye.com/blog/175553</link>
        <guid>http://rainly.javaeye.com/blog/175553</guid>
      </item>
      <item>
        <title>在Ubuntu平台上，aptana中的subclipse通过代理访问外部SVN</title>
        <author>rainly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rainly.javaeye.com">rainly</a>&nbsp;
          链接：<a href="http://rainly.javaeye.com/blog/98381" style="color:red;">http://rainly.javaeye.com/blog/98381</a>&nbsp;
          发表时间: 2007年07月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚转到Ubuntu平台上，发现在aptana中使用 subclipse 插件不能通过代理下载外部的开源项目的代码，经一番折腾后，总算解决，步骤如下：<br />
一 安装ibsvn-javahl：&nbsp;&nbsp;&nbsp; <font color="#333333" style="line-height: 18px;">
<div class="code_title">
<pre>执行<font>代码</font></pre>
</div>
<div class="dp-highlighter">
<ol class="dp-j" start="1"><font>
    <li class="alt"><span><span>sudo&nbsp;apt-get&nbsp;install&nbsp;libsvn-javahl&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    </font></ol>
    </div>
    <br />
    二</font> 进入$JAVA_HOME/jre/lib/i386/client/ 目录中, 执行如下:<br />
    <pre><div class="code_title">执行代码</div><div class="dp-highlighter"><ol class="dp-j" start="1"><li class="alt"><span><span>sudo&nbsp;ln&nbsp;-s&nbsp;/usr/lib/jni/libsvnjavahl-</span><span class="number">1</span><span>.so&nbsp;  libsvnjavahl-</span><span class="number">1</span><span>.so&nbsp;&nbsp;</span></span></li></ol></div><br />三 启动aptana, 点击&quot;windows&quot;--&gt;&quot;preferences...&quot;--&gt; &quot;Team&quot; --&gt; &quot;SVN&quot;,在右边的窗口中，将&ldquo;SVN Interface：&rdquo;中的<br />&ldquo;JavaHL (JNI)&rdquo;选择上，此时，将不会再出现&ldquo;Problem: Javahl interface is not available. Check your environment.</pre>
    <pre>&rdquo;的错误提示。<br />四  编辑$HOME/.subversion/servers配置文件，将如下代理信息设置：<br /><div class="code_title">配置代码</div><div class="dp-highlighter"><div class="bar">&nbsp;</div><ol class="dp-j" start="1"><li class="alt"><span><span>http-proxy-host&nbsp;=&nbsp;</span><span class="number">123.456</span><span>.</span><span class="number">789.10</span><span>&nbsp; <br /></span></span></li><li class=""><span>http-proxy-port&nbsp;=&nbsp;<span class="number">80</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>http-proxy-username&nbsp;=&nbsp;myuser&nbsp;&nbsp;</span></li><li class=""><span>http-proxy-password&nbsp;=&nbsp;mypasswd&nbsp;&nbsp;</span></li><li class="alt"><span>http-timeout&nbsp;=&nbsp;<span class="number">60</span><span>&nbsp;&nbsp;</span></span></li></ol></div><br />保存修改设置，启动aptana即可正常使用。<br />另外，如果是WINDOWS用户，也遇到在subclipse中无法使用代理的情况，可参考：<a href="http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1">http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1</a> <br /></pre>
          <br/>
          <span style="color:red;">
            <a href="http://rainly.javaeye.com/blog/98381#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jul 2007 10:00:55 +0800</pubDate>
        <link>http://rainly.javaeye.com/blog/98381</link>
        <guid>http://rainly.javaeye.com/blog/98381</guid>
      </item>
      <item>
        <title>mysql日志手工清理</title>
        <author>rainly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rainly.javaeye.com">rainly</a>&nbsp;
          链接：<a href="http://rainly.javaeye.com/blog/97312" style="color:red;">http://rainly.javaeye.com/blog/97312</a>&nbsp;
          发表时间: 2007年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2">mysql数据库会将用户操作记录到日志当中,随着它的运行，日志数量的增加势必会占用大量的磁盘空间,如果不及时管理维护，最终将导致磁盘空间满了的情况,从而影响MYSQL的正常运行.</font></p>
<font size="2">清除日志命令</font>
<p><font size="2">mysql &gt; </font><font color="#0000ff"><font size="2">purge master logs to 'log_name';</font></font></p>
<p><font size="2">注:在执行时，如果想保留最后一个日志，那么在上面的命令中，使用当前服务器中的最后一个log_name就可以了.这点要切记！</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://rainly.javaeye.com/blog/97312#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jul 2007 15:14:27 +0800</pubDate>
        <link>http://rainly.javaeye.com/blog/97312</link>
        <guid>http://rainly.javaeye.com/blog/97312</guid>
      </item>
  </channel>
</rss>