<?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>ProdigYu&#039;s Blog</title>
	<atom:link href="http://prodigyu.com/feed" rel="self" type="application/rss+xml" />
	<link>http://prodigyu.com</link>
	<description>Something about myself</description>
	<lastBuildDate>Thu, 09 Feb 2012 15:29:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Find命令简单使用说明</title>
		<link>http://prodigyu.com/351</link>
		<comments>http://prodigyu.com/351#comments</comments>
		<pubDate>Thu, 09 Feb 2012 15:26:46 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Find]]></category>
		<category><![CDATA[命令]]></category>
		<category><![CDATA[说明]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=351</guid>
		<description><![CDATA[1）3天内修改过的文件： find -ctime -3 2）find命令使用超过6天，空文件独立查询命令。 find /data/backup -ctime +6 -exec rm -f {} \;   删除/data/backup目录下修改时间超过6天的文件。 find /data/backup -type d -empty -exec rmdir {} \; &#62;/dev/null 2&#62;&#38;1  删除/data/backup目录下空的文件夹，同时输出正确和错误信息到空。 3)查找超过6天且是空文件的find命令： find ./ -type d -empty -ctime +6 一个同学问我在linux怎样按修改时间来查找文件，我Google之后才得到答案，写个笔记吧。 find /home/admin -mtime -1      #查找/home/admin目录下修改时间在1天之内的文件 find /home/admin -name *.txt -mtime -1  #查找/home/admin目录下修改时间在1天之内的文件名为.txt结尾的文件 find 按文件修改时间查找文件 &#8212;(+n)&#8212;&#8212;&#8212;-&#124;&#8212;&#8212;&#8212;-(n)&#8212;&#8212;&#8212;-&#124;&#8212;&#8212;&#8212;-(-n)&#8212; (n+1)*24H前&#124;   (n+1)*24H~n*24H间   &#124;n*24H内 -ctime -n    查找距现在 n*24H 内修改过的文件 [...]]]></description>
			<content:encoded><![CDATA[<p>1）3天内修改过的文件：<br />
<code><br />
find -ctime -3<br />
</code><br />
2）find命令使用超过6天，空文件独立查询命令。<br />
<code><br />
find /data/backup -ctime +6 -exec rm -f {} \;   删除/data/backup目录下修改时间超过6天的文件。<br />
find /data/backup -type d -empty -exec rmdir {} \; &gt;/dev/null 2&gt;&amp;1  删除/data/backup目录下空的文件夹，同时输出正确和错误信息到空。<br />
</code><br />
<span id="more-351"></span><br />
3)查找超过6天且是空文件的find命令：<br />
<code><br />
find ./ -type d -empty -ctime +6<br />
</code><br />
<a name="entrymore"></a></p>
<p>一个同学问我在linux怎样按修改时间来查找文件，我Google之后才得到答案，写个笔记吧。<br />
find /home/admin -mtime -1      #查找/home/admin目录下修改时间在1天之内的文件<br />
find /home/admin -name *.txt -mtime -1  #查找/home/admin目录下修改时间在1天之内的文件名为.txt结尾的文件</p>
<p>find 按文件修改时间查找文件<br />
&#8212;(+n)&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;-(n)&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;-(-n)&#8212;<br />
(n+1)*24H前|   (n+1)*24H~n*24H间   |n*24H内</p>
<p>-ctime -n    查找距现在 n*24H 内修改过的文件<br />
-ctime n    查找距现在 n*24H 前, (n+1)*24H 内修改过的文件<br />
-ctime +n    查找距现在 (n+1)*24H 前修改过的文件</p>
<p>[a|c|m]min    [最后访问|最后状态修改|最后内容修改]min<br />
[a|c|m]time    [最后访问|最后状态修改|最后内容修改]time</p>
<p>linux 文件的三种时间(以 find 为例):<br />
atime 最后一次访问时间, 如 ls, more 等, 但 chmod, chown, ls, stat 等不会修改些时间, 使用 ls -utl 可以按此时间顺序查看;<br />
ctime 最后一次状态修改时间, 如 chmod, chown 等状态时间改变但修改时间不会改变, 使用 stat file 可以查看;<br />
mtime 最后一次内容修改时间, 如 vi 保存后等, 修改时间发生改变的话, atime 和 ctime 也相应跟着发生改变.</p>
<p>注意: linux 里是不会记录文件的创建时间的, 除非这个文件自创建以来没有发生改变, 那么它的创建时间就是它的最后一次修改时间.<br />
#ls -lt /home/admin   # 按修改时间顺序查看<br />
#ls -lut /home/admin  # 按访问时间顺序查看<br />
(如果想反序查看的话需要加一个选项 -r)</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/351/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>悲剧的Adsense</title>
		<link>http://prodigyu.com/348</link>
		<comments>http://prodigyu.com/348#comments</comments>
		<pubDate>Wed, 07 Sep 2011 16:39:29 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Mood]]></category>
		<category><![CDATA[Paypal]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[寻易]]></category>
		<category><![CDATA[度娘]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[蜘蛛]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=348</guid>
		<description><![CDATA[Adsense申诉失败，这个陪伴我多年的帐号还是被停用了。哎，Google的条款实在是太严格了。 只不过之前Yahoo域名的退款已经收到Paypal的邮件了，2-3天退还到信用卡上。这个倒是没有出现什么意外。 只不过最近度娘的蜘蛛是去度假了，还是怎么的，很久没有来访问我们的站点了，我这个Blog倒是天天快照，其他网站很久没没有光顾了。就连新站也是没有主动收录，我得做点什么吸引下注意力才行，比如说在我这边文章下面加个链接之类的。 最近新做的一个资源类的论坛 寻易论坛 目前主要更新最新电影。]]></description>
			<content:encoded><![CDATA[<p>Adsense申诉失败，这个陪伴我多年的帐号还是被停用了。哎，Google的条款实在是太严格了。<br />
<span id="more-348"></span><br />
只不过之前Yahoo域名的退款已经收到Paypal的邮件了，2-3天退还到信用卡上。这个倒是没有出现什么意外。</p>
<p>只不过最近度娘的蜘蛛是去度假了，还是怎么的，很久没有来访问我们的站点了，我这个Blog倒是天天快照，其他网站很久没没有光顾了。就连新站也是没有主动收录，我得做点什么吸引下注意力才行，比如说在我这边文章下面加个链接之类的。</p>
<p>最近新做的一个资源类的论坛<br />
<a href="http://bbs.xunyee.net/">寻易论坛</a><br />
目前主要更新最新电影。</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/348/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最近倒霉事情比较多</title>
		<link>http://prodigyu.com/345</link>
		<comments>http://prodigyu.com/345#comments</comments>
		<pubDate>Sat, 03 Sep 2011 13:36:00 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Mood]]></category>
		<category><![CDATA[Adsense]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[百度]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=345</guid>
		<description><![CDATA[Adsense因为很不应该的原因被K，已经进行申诉了不知道还有没有救，毕竟这个帐号是2003年注册的，还是有感情啊，说封就给我封了，Google也是想尽办法不支付。这也就罢了，之前忘记取消Yahoo的自动续费，昨天居然给我扣了34.95刀，域名都已经转走了还扣什么扣，这简直是非常的不人性化。也联系他们要求退款了，估计这几天能搞定。 有一个比较重要的网站可能因为是跟另外一个被百度K了的站有友情链接，居然现在也被百度K了，最近正在想办法看怎么能尽快恢复收录。 还有点什么呢，暂时想不起来了，想起来再说吧。]]></description>
			<content:encoded><![CDATA[<p>Adsense因为很不应该的原因被K，已经进行申诉了不知道还有没有救，毕竟这个帐号是2003年注册的，还是有感情啊，说封就给我封了，Google也是想尽办法不支付。这也就罢了，之前忘记取消Yahoo的自动续费，昨天居然给我扣了34.95刀，域名都已经转走了还扣什么扣，这简直是非常的不人性化。也联系他们要求退款了，估计这几天能搞定。<br />
<span id="more-345"></span><br />
有一个比较重要的网站可能因为是跟另外一个被百度K了的站有友情链接，居然现在也被百度K了，最近正在想办法看怎么能尽快恢复收录。</p>
<p>还有点什么呢，暂时想不起来了，想起来再说吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/345/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP随机显示图片</title>
		<link>http://prodigyu.com/334</link>
		<comments>http://prodigyu.com/334#comments</comments>
		<pubDate>Thu, 25 Aug 2011 16:07:58 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[显示]]></category>
		<category><![CDATA[随机]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=334</guid>
		<description><![CDATA[pic.php list.txt放在网站根目录 pic.php内容如下: &#60;?php $arr=file('list.txt'); $n=count($arr)-1; header('Location: http://prodigyu.com/pic/'.$arr[rand(0,$n)]); ?&#62; list.txt就是所有图片的列表 用命令 ls /图片所在文件夹 &#62; list.txt 网上有代码是历编图片文件夹,然后随机选一个图片,这个方法比较耗费cpu 所以我先生成一个list,然后只需要读一个txt就可以了 速度比较快,也不占资源 如果想要方便查看,可以建一个index.html &#60;script language=javascript&#62; document.onkeydown=nextpage function nextpage(event) { event = event ? event : (window.event ? window.event : null); if (event.keyCode==39) window.location.reload();//右方向键 } &#60; /script&#62; &#60; img src="http://prodigyu.com/pic.php" alt="" /&#62;]]></description>
			<content:encoded><![CDATA[<p>pic.php list.txt放在网站根目录</p>
<p>pic.php内容如下:<br />
<code>&lt;?php<br />
$arr=file('list.txt');<br />
$n=count($arr)-1;<br />
header('Location: http://prodigyu.com/pic/'.$arr[rand(0,$n)]);<br />
?&gt;</code><span id="more-334"></span><br />
list.txt就是所有图片的列表<br />
用命令<br />
<code><br />
ls /图片所在文件夹 &gt; list.txt<br />
</code><br />
网上有代码是历编图片文件夹,然后随机选一个图片,这个方法比较耗费cpu<br />
所以我先生成一个list,然后只需要读一个txt就可以了<br />
速度比较快,也不占资源<br />
如果想要方便查看,可以建一个index.html</p>
<p><code>&lt;script language=javascript&gt;<br />
document.onkeydown=nextpage<br />
function nextpage(event)<br />
{<br />
event = event ? event : (window.event ? window.event : null);<br />
if (event.keyCode==39) window.location.reload();//右方向键<br />
}<br />
&lt; /script&gt;<br />
&lt; img src="http://prodigyu.com/pic.php" alt="" /&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/334/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>硬盘再次悲剧</title>
		<link>http://prodigyu.com/327</link>
		<comments>http://prodigyu.com/327#comments</comments>
		<pubDate>Mon, 15 Aug 2011 11:27:30 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Mood]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Hardisk]]></category>
		<category><![CDATA[悲剧]]></category>
		<category><![CDATA[硬盘]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=327</guid>
		<description><![CDATA[记得两年前有一块硬盘坏了丢失了不少珍贵的资料,今天悲剧再次出现了,再次出现一块500G的希捷盘坏掉. 昨天出现的症状,重启后硬盘自动自检,等到今天看居然还卡在那里,跳过自检进入系统后发现硬盘读取速度已经不正常了,在拖第一个分区文件的时候就出现了无法读取,结果之后再也没有办法读取任何文件. 试过用WinHex无果,连文件夹都不能列出,暂时没有时间管它了,等有空了再试试看有没办法恢复部分出来,目前已经把硬盘取下. 我这台机器从2003年一直用到现在虽说其中更换过几次主板CPU的,但还是该换换了吧,准备下次组个软RAID1避免这种悲剧再次发生. 另外我发现在现在百度秒收我这经常不更新的BLOG.]]></description>
			<content:encoded><![CDATA[<p>记得两年前有一块硬盘坏了丢失了不少珍贵的资料,今天悲剧再次出现了,再次出现一块500G的希捷盘坏掉.</p>
<p><span id="more-327"></span>昨天出现的症状,重启后硬盘自动自检,等到今天看居然还卡在那里,跳过自检进入系统后发现硬盘读取速度已经不正常了,在拖第一个分区文件的时候就出现了无法读取,结果之后再也没有办法读取任何文件.</p>
<p>试过用WinHex无果,连文件夹都不能列出,暂时没有时间管它了,等有空了再试试看有没办法恢复部分出来,目前已经把硬盘取下.</p>
<p>我这台机器从2003年一直用到现在虽说其中更换过几次主板CPU的,但还是该换换了吧,准备下次组个软RAID1避免这种悲剧再次发生.</p>
<p>另外我发现在现在百度秒收我这经常不更新的BLOG.</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/327/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网站广告投放策略研究 (一) 轮播以及效用最大化</title>
		<link>http://prodigyu.com/322</link>
		<comments>http://prodigyu.com/322#comments</comments>
		<pubDate>Thu, 11 Aug 2011 12:56:14 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[WebSites]]></category>
		<category><![CDATA[广告]]></category>
		<category><![CDATA[策略]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[运营]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=322</guid>
		<description><![CDATA[首先科普一下目前互联网广告的类型，大体都有CPC,CPM,CPA,CPS,CPV这几种。 CPC就是按点击(Click)计算，CPM就是按弹窗(Mxxx?)计算，CPA/CPS一个是按注册一个是按销售计算，CPV则是按显示次数计算。于是CPC,CPA,CPS这种根据网站访客行为来获得收益的是一类，而CPM和CPV这种只和网站流量相关的则是另一类。 可想而知，CPC，CPA，CPS的效果要分析访客群体，点击习惯等诸多要素来进行调整，非一蹴而就，这篇文章中我主要想研究怎么从流量上做文章，在不作弊的情况下获取尽可能多的收益；等广告联盟用得多了，时间长了，也会给一点不同广告联盟的评价。 1. 最基本的投放 以A5联盟(貌似是站长网的直属联盟，应该比较可信，所以还是拿它来做例子吧)为例，直接在网页任意地方嵌入类似代码就能生成在右下角悬浮的展示广告了。 &#60;script type="text/javascript"&#62; u_a_client="20326"; u_a_width="270"; u_a_height="200"; u_a_zones="37972"; u_a_type="1" &#60;/script&#62; &#60;script src="http://www.admin6.com/i.js"&#62;&#60;/script&#62; 2. 不同广告联盟的同类广告轮播 因为CPV/CPM是按IP计算浏览量的，那么同一用户反复浏览同一广告是不会增加收入的，所以引入轮播机制。 通常情况下，如果是同一个联盟，那么是自动随机轮播的，但是如果想在不同的联盟的CPV广告之间进行轮播，又该如何呢。 其实可以自己来搞随机，通过javascript脚本，在相应位置随机产生代码。可以定义文件 dynamic.js，然后在相应位置引入 &#60;script type="text/javascript" src="dynamic.js"&#62;&#60;/script&#62; 然后dynamic.js利用document.write以及Math.random函数来实现动态展示不同网站的广告，这里我用了另一个广告联盟太极圈（这个联盟我看playsc.com在用所以也申请了）的广告。代码如下： var choice = Math.random()*2; if (choice&#60;=1){ document.write('&#60;script type="text/javascript"&#62;u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";&#60;\/script&#62;&#60;script src="http://js.tjq.com/i.js"&#62;&#60;\/script&#62;'); }else{ document.write('&#60;script type="text/javascript"&#62;u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";&#60;\/script&#62;&#60;script src="http://www.admin6.com/i.js"&#62;&#60;\/script&#62;'); } 显然，如果有3个需要展示的，那么random*3，并且放上三个分支就行了，以此类推。这只是一种形式，如果有很多广告的话，可以定义一个dynamic.js文件，把上述代码放在函数cpv里面，然后在相应的地方调用cpv函数也可。这样方便统一管理广告。 另外这样做的另一个好处是，静态化的页面不用重新生成，只用修改dynamic.js的内容，即可以修改广告内容。 使用中发现，javascript的随机数生成并不太靠谱，所以也可以摒弃Math.random方法，改用奇偶时间法：奇数分钟显示A广告，偶数分钟显示B广告，甚至可以按秒数来分，最多支持60个广告轮播（好变态-.-）。这个方法的基本思想是，只要浏览网页超过时间片的长度（我这里用的是分钟），那么必然会同时浏览到两个广告。dynamic.js的代码修改如下 var now = new Date(); var minutes = now.getMinutes(); if (minutes%2==0){ document.write('&#60;script [...]]]></description>
			<content:encoded><![CDATA[<p>首先科普一下目前互联网广告的类型，大体都有CPC,CPM,CPA,CPS,CPV这几种。</p>
<p>CPC就是按点击(Click)计算，CPM就是按弹窗(Mxxx?)计算，CPA/CPS一个是按注册一个是按销售计算，CPV则是按显示次数计算。于是CPC,CPA,CPS这种根据网站访客行为来获得收益的是一类，而CPM和CPV这种只和网站流量相关的则是另一类。<span id="more-322"></span></p>
<p>可想而知，CPC，CPA，CPS的效果要分析访客群体，点击习惯等诸多要素来进行调整，非一蹴而就，这篇文章中我主要想研究怎么从流量上做文章，在不作弊的情况下获取尽可能多的收益；等广告联盟用得多了，时间长了，也会给一点不同广告联盟的评价。<br />
<strong>1. 最基本的投放</strong></p>
<p>以A5联盟(貌似是站长网的直属联盟，应该比较可信，所以还是拿它来做例子吧)为例，直接在网页任意地方嵌入类似代码就能生成在右下角悬浮的展示广告了。</p>
<div>
<div>
<pre>&lt;script type="text/javascript"&gt;
 u_a_client="20326";
 u_a_width="270";
 u_a_height="200";
 u_a_zones="37972";
 u_a_type="1"
&lt;/script&gt;
&lt;script src="http://www.admin6.com/i.js"&gt;&lt;/script&gt;</pre>
</div>
</div>
<p><strong>2. 不同广告联盟的同类广告轮播</strong></p>
<p>因为CPV/CPM是按IP计算浏览量的，那么同一用户反复浏览同一广告是不会增加收入的，所以引入轮播机制。</p>
<p>通常情况下，如果是同一个联盟，那么是自动随机轮播的，但是如果想在不同的联盟的CPV广告之间进行轮播，又该如何呢。</p>
<p>其实可以自己来搞随机，通过javascript脚本，在相应位置随机产生代码。可以定义文件 dynamic.js，然后在相应位置引入</p>
<div>
<div>
<pre>&lt;script type="text/javascript" src="dynamic.js"&gt;&lt;/script&gt;</pre>
</div>
</div>
<p>然后dynamic.js利用document.write以及Math.random函数来实现动态展示不同网站的广告，这里我用了另一个广告联盟太极圈（这个联盟我看playsc.com在用所以也申请了）的广告。代码如下：</p>
<div>
<div>
<pre>var choice = Math.random()*2;
if (choice&lt;=1){
    document.write('&lt;script type="text/javascript"&gt;u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";&lt;\/script&gt;&lt;script src="http://js.tjq.com/i.js"&gt;&lt;\/script&gt;');
}else{
    document.write('&lt;script type="text/javascript"&gt;u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";&lt;\/script&gt;&lt;script src="http://www.admin6.com/i.js"&gt;&lt;\/script&gt;');
}</pre>
</div>
</div>
<p>显然，如果有3个需要展示的，那么random*3，并且放上三个分支就行了，以此类推。这只是一种形式，如果有很多广告的话，可以定义一个dynamic.js文件，把上述代码放在函数cpv里面，然后在相应的地方调用cpv函数也可。这样方便统一管理广告。</p>
<p>另外这样做的另一个好处是，静态化的页面不用重新生成，只用修改dynamic.js的内容，即可以修改广告内容。</p>
<p>使用中发现，javascript的随机数生成并不太靠谱，所以也可以摒弃Math.random方法，改用<strong>奇偶时间法</strong>：奇数分钟显示A广告，偶数分钟显示B广告，甚至可以按秒数来分，最多支持60个广告轮播（好变态-.-）。这个方法的基本思想是，只要浏览网页超过时间片的长度（我这里用的是分钟），那么必然会同时浏览到两个广告。dynamic.js的代码修改如下</p>
<div>
<div>
<pre>var now = new Date();
var minutes = now.getMinutes();
if (minutes%2==0){
    document.write('&lt;script type="text/javascript"&gt;u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";&lt;\/script&gt;&lt;script src="http://js.tjq.com/i.js"&gt;&lt;\/script&gt;');
}else{
    document.write('&lt;script type="text/javascript"&gt;u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";&lt;\/script&gt;&lt;script src="http://www.admin6.com/i.js"&gt;&lt;\/script&gt;');
}</pre>
</div>
</div>
<p>奇偶时间法的另一个优势在于可以比较哪个广告联盟量比较足，因为可想而之奇偶时间分配的话，一般来说两个联盟分配到的点击数都应该差不多的，然而根据我的测试，太极圈似乎比A5联盟的CPV次数会多上10%。这可能只是个别现象，仅作参考，不做为推荐。</p>
<p><strong>3. 终极轮播绝招</strong></p>
<p>使用2的那些方法以后，比起单联盟来说，广告投放效果立刻*1.5，但是这还是不够。我们应该更贪心一点：要压榨光每一个IP的用户流量。</p>
<p>怎样才能压榨干净呢？试想一下这个算法：</p>
<ul>
<li>用户当天第一次来访，显示广告1</li>
<li>用户当天第二次来访，显示广告2</li>
<li>……</li>
</ul>
<p>只要用户访问次数小于现存广告的个数，那么他每次访问都会显示不一样的广告，点几次页面就显示几次广告！CPV广告就真正名副其实地是Cost Per View了。（但是这么做会不会被误认为是作弊？因为明显展示数和统计数比例太高了，看上去像假的，这个需要衡量）</p>
<p>还有一个问题是，怎么确定用户第几次访问，从而显示第几个广告呢？最朴素的想法莫过于建立一个本机的流量统计系统，例如piwik系统，然后查询本地数据库，我一开始的确想这么实现，但是可想而知这会多么拖累主机的性能。想想看，javascript有没有办法自己来保存那些访问信息呢？</p>
<p>其实是有的，那就是本机cookies，只要自动记录cookie，那么用户是第几次来那就显而易见了；而且由于cookie有自动超时机制，我们只要让它把超时设为24小时，那么第二天就可以自动重新统计了。</p>
<p>首先，需要有set_cookie以及get_cookie函数</p>
<div>
<div>
<pre>function set_cookie(name,value,expires){
    var today = new Date();
    today.setTime( today.getTime() );
    expires = expires*1000;
    var expires_date = new Date(today.getTime()+(expires));
    document.cookie=name+"="+escape(value)+";expires="+expires_date.toGMTString()+";domain=simplecd.org";
}
function get_cookie(name){
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i&lt;ARRcookies.length;i++){
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if (x==name){
            return unescape(y);
        }
    }
}</pre>
</div>
</div>
<p>然后，我们可以稍微修改一下算法，简化代码：为各个广告建立自己的cookie，值为访问次数</p>
<p>新算法如下：</p>
<ul>
<li>遍历各广告位的cookie</li>
<li>如果有不存在的cookie，则显示该广告位，并且设置cookie</li>
<li>如果cookie全部存在则显示任意广告或者不显示，同时更新所显示广告的cookie</li>
</ul>
<p>更进一步地，为了那个悬浮窗不要那么扰民，也可以再加上一条：</p>
<ul>
<li>如果用户已显示广告总次数大于6次，那么今天就不显示该类广告。</li>
</ul>
<p>整个接下来的代码如下：</p>
<div>
<div>
<pre>var total_ad = 3;
var max_show = 6;
var cookie_pre = 'cpvad_counter_';
var cookie_time = 60*60*8;
var show = -1; // show ad id
var show_counter = 0;
// first pass, round robin
for (var i=0;i&lt;total_ad;i++) {
    var cookie_name = cookie_pre+i;
    var counter = get_cookie(cookie_name);
    if ( counter ){
        show_counter += parseInt(counter);
    }else{
        show = i;
        break;
    }
}
// show if not showed more than max_show times
if (show_counter &lt; max_show){
    // second pass, random show
    if (show == -1){
        show = Math.floor(Math.random()*total_ad);
    }
    // handle cookie
    var cookie_name = cookie_pre+show
    var cookie_value = get_cookie(cookie_name);
    if (cookie_value){
        set_cookie(cookie_name,''+(parseInt(cookie_value)+1),cookie_time);
    }else{
        set_cookie(cookie_name,'1',cookie_time);
    }
    // show add
    switch(show){
        case 0:
            document.write('&lt;script type="text/javascript"&gt;u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";&lt;\/script&gt;&lt;script src="http://js.tjq.com/i.js"&gt;&lt;\/script&gt;');
            break;
        case 1:
            document.write('&lt;script type="text/javascript"&gt;u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";&lt;\/script&gt;&lt;script src="http://www.admin6.com/i.js"&gt;&lt;\/script&gt;');
            break;
        case 2:
            document.write('&lt;script type="text/javascript"&gt;u_a_client="20685";u_a_width="283";u_a_height="189";u_a_zones="63369";u_a_type="1";&lt;\/script&gt;&lt;script src="http://js.tjq.com/i.js"&gt;&lt;\/script&gt;');
            break;
    }
}</pre>
</div>
</div>
<p>4.小结</p>
<p>本文从技术上分析并实现了CPV类广告的轮播最大化收益，至于同类的CPM广告，那也是与此同理。</p>
<p>然而广告投放可不只是耍耍这么点javascript就能实现效用最大化的，还有CPC/CPA/CPS等其他广告类别，还有数量和质量的关系，位置与显示速度的关系，扰民和效果的关系等等一大堆的东西可以研究。</p>
<p>在互联网广告投放上，我只是才投了1周广告的新人而已，还有很多需要学习和研究的，所以这篇文的标题是(一)，再又有心得，自认为可以单独成文的时候，那就是(二)了，然而目前我只是大概有个试验思路，什么时候去做和什么时候能成文，那就不知道了。</p>
<p>本文转自:http://obmem.info/?p=844</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/322/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用netstat和awk命令来统计网络连接数</title>
		<link>http://prodigyu.com/307</link>
		<comments>http://prodigyu.com/307#comments</comments>
		<pubDate>Mon, 08 Aug 2011 09:07:25 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[netstat]]></category>
		<category><![CDATA[命令]]></category>
		<category><![CDATA[网络]]></category>
		<category><![CDATA[连接数]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=307</guid>
		<description><![CDATA[netstat -n &#124; awk &#8216;/^tcp/ {++state[$NF]} END {for(key in state) print key,&#8221;\t&#8221;,state[key]}&#8217; 会得到类似下面的结果，具体数字会有所不同： LAST_ACK 1 SYN_RECV 14 ESTABLISHED 79 FIN_WAIT1 28 FIN_WAIT2 3 CLOSING 5 TIME_WAIT 1669 也就是说，这条命令可以把当前系统的网络连接状态分类汇总。 下面解释一下为啥要这样写： 一个简单的管道符连接了netstat和awk命令。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 先来看看netstat： netstat -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT 你实际执行这条命令的时候，可能会得到成千上万条类似上面的记录，不过我们就拿其中的一条就足够了。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>netstat -n | awk &#8216;/^tcp/ {++state[$NF]} END {for(key in state) print key,&#8221;\t&#8221;,state[key]}&#8217;<br />
<span id="more-307"></span><br />
会得到类似下面的结果，具体数字会有所不同：</p>
<p>LAST_ACK         1<br />
SYN_RECV         14<br />
ESTABLISHED      79<br />
FIN_WAIT1        28<br />
FIN_WAIT2        3<br />
CLOSING          5<br />
TIME_WAIT        1669</p>
<p>也就是说，这条命令可以把当前系统的网络连接状态分类汇总。</p>
<p>下面解释一下为啥要这样写：</p>
<p>一个简单的管道符连接了netstat和awk命令。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>先来看看netstat：</p>
<p>netstat -n</p>
<p>Active Internet connections (w/o servers)<br />
Proto Recv-Q Send-Q Local Address           Foreign Address         State<br />
tcp        0      0 123.123.123.123:80      234.234.234.234:12345   TIME_WAIT</p>
<p>你实际执行这条命令的时候，可能会得到成千上万条类似上面的记录，不过我们就拿其中的一条就足够了。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>再来看看awk：</p>
<p>/^tcp/<br />
滤出tcp开头的记录，屏蔽udp, socket等无关记录。</p>
<p>state[]<br />
相当于定义了一个名叫state的数组</p>
<p>NF<br />
表示记录的字段数，如上所示的记录，NF等于6</p>
<p>$NF<br />
表示某个字段的值，如上所示的记录，$NF也就是$6，表示第6个字段的值，也就是TIME_WAIT</p>
<p>state[$NF]<br />
表示数组元素的值，如上所示的记录，就是state[TIME_WAIT]状态的连接数</p>
<p>++state[$NF]<br />
表示把某个数加一，如上所示的记录，就是把state[TIME_WAIT]状态的连接数加一</p>
<p>END<br />
表示在最后阶段要执行的命令</p>
<p>for(key in state)<br />
遍历数组</p>
<p>print key,&#8221;\t&#8221;,state[key]<br />
打印数组的键和值，中间用\t制表符分割，美化一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/307/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS安装iftop查看网络流量</title>
		<link>http://prodigyu.com/301</link>
		<comments>http://prodigyu.com/301#comments</comments>
		<pubDate>Wed, 15 Jun 2011 15:49:45 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[iftop]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[流量]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=301</guid>
		<description><![CDATA[安装所需组件 yum list &#124; grep libp yum install libp* wget ftp://ftp.lmd.ens.fr/pub/devil/devel/sources/1.2/libpcap-0.9.8.tar.gz 安装iftop wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz tar zxvf iftop-0.17.tar.gz cd iftop-0.17 ./configure make make install 安装完后使用命令 iftop -i eth0 -n 查看eth0的流量 退出按q 卸载:make clean iftop-0.17]]></description>
			<content:encoded><![CDATA[<p>安装所需组件<br />
<code>yum list | grep libp<br />
yum install libp*<br />
wget ftp://ftp.lmd.ens.fr/pub/devil/devel/sources/1.2/libpcap-0.9.8.tar.gz</code></p>
<p>安装iftop</p>
<p><code>wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz<br />
tar zxvf iftop-0.17.tar.gz<br />
cd iftop-0.17<br />
./configure<br />
make<br />
make install</code></p>
<p>安装完后使用命令<br />
<code>iftop -i eth0 -n</code> 查看eth0的流量<br />
退出按q</p>
<p>卸载:<code>make clean iftop-0.17</code></p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/301/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下MySQL开启远程访问</title>
		<link>http://prodigyu.com/298</link>
		<comments>http://prodigyu.com/298#comments</comments>
		<pubDate>Wed, 15 Jun 2011 08:01:51 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[远程访问]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=298</guid>
		<description><![CDATA[在默认情况下mysql是不允许远程访问的. 默认安装完的mysql root密码是空的,首先得设置一个密码: mysqladmin -u root password &#8216;新密码&#8217; 通过以下命令登陆MySQL数据库 mysql -u root -p mysql 然后在输入以下命令创建一个允许任何主机访问的root用户 GRANT ALL PRIVILEGES ON *.* TO root@&#8221;%&#8221; IDENTIFIED BY &#8216;密码&#8217; WITH GRANT OPTION; 执行如下语句生效: flush privileges; 在centos默认情况下iptables是开启的,但并未开放3306端口,需要我们手动指定. 退出mysql,终端下输入: vi /etc/sysconfig/iptables 添加如下字符串 -A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 3306 -j ACCEPT 重启iptables即可: /etc/rc.d/init.d/iptables restart]]></description>
			<content:encoded><![CDATA[<p>在默认情况下mysql是不允许远程访问的.</p>
<p>默认安装完的mysql root密码是空的,首先得设置一个密码:</p>
<p>mysqladmin -u root password &#8216;新密码&#8217;<span id="more-298"></span></p>
<p>通过以下命令登陆MySQL数据库</p>
<p>mysql -u root -p mysql</p>
<p>然后在输入以下命令创建一个允许任何主机访问的root用户</p>
<p>GRANT ALL PRIVILEGES ON *.* TO   root@&#8221;%&#8221; IDENTIFIED BY &#8216;密码&#8217; WITH GRANT OPTION;</p>
<p>执行如下语句生效:</p>
<p>flush privileges;</p>
<p>在centos默认情况下iptables是开启的,但并未开放3306端口,需要我们手动指定.</p>
<p>退出mysql,终端下输入:</p>
<p>vi /etc/sysconfig/iptables</p>
<p>添加如下字符串</p>
<p>-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 3306 -j ACCEPT</p>
<p>重启iptables即可:</p>
<p>/etc/rc.d/init.d/iptables restart</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/298/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Squid清除缓存脚本</title>
		<link>http://prodigyu.com/295</link>
		<comments>http://prodigyu.com/295#comments</comments>
		<pubDate>Thu, 12 May 2011 16:51:50 +0000</pubDate>
		<dc:creator>ProdigYu</dc:creator>
				<category><![CDATA[CDN]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[缓存]]></category>
		<category><![CDATA[脚本]]></category>

		<guid isPermaLink="false">http://prodigyu.com/?p=295</guid>
		<description><![CDATA[转自张宴的《清除指定squid缓存文件的脚本》 脚本文件名：clear_squid_cache.sh #!/bin/sh squidcache_path="/cache" squidclient_path="/usr/local/squid/bin/squidclient" grep -a -r $1 $squidcache_path/* &#124; strings &#124; grep "http:" &#124; awk -F'http:' '{print "http:"$2;}' > cache_list.txt for url in `cat cache_list.txt`; do $squidclient_path -m PURGE -p 80 $url done 　　注意：请赋予clear_squid_cache.sh可执行权限（命令：chmod +x ./clear_squid_cache.sh）。请确保脚本所在目录可写。 　　设置： 　　squidcache_path= 表示squid缓存目录的路径 　　squidclient_path= 表示squidclient程序所在的路径，默认为squid安装目录下的bin/squidclient 　　用法： 　　1、清除所有Flash缓存（扩展名.swf）： 　　./clear_squid_cache.sh swf 　　2、清除URL中包含prodigyu.com的所有缓存： 　　./clear_squid_cache.sh prodigyu.com 　　3、清除文件名为prodigyu.jpg的所有缓存： 　　./clear_squid_cache.sh prodigyu.jpg]]></description>
			<content:encoded><![CDATA[<p>转自张宴的《清除指定squid缓存文件的脚本》<br />
脚本文件名：clear_squid_cache.sh</p>
<pre><code>#!/bin/sh
squidcache_path="/cache"
squidclient_path="/usr/local/squid/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 80 $url
done</code></pre>
<p>　　注意：请赋予clear_squid_cache.sh可执行权限（命令：chmod +x ./clear_squid_cache.sh）。请确保脚本所在目录可写。</p>
<p>　　设置：<br />
　　squidcache_path= 表示squid缓存目录的路径<br />
　　squidclient_path= 表示squidclient程序所在的路径，默认为squid安装目录下的bin/squidclient</p>
<p>　　用法：<br />
　　1、清除所有Flash缓存（扩展名.swf）：<br />
　　./clear_squid_cache.sh swf</p>
<p>　　2、清除URL中包含prodigyu.com的所有缓存：<br />
　　./clear_squid_cache.sh prodigyu.com</p>
<p>　　3、清除文件名为prodigyu.jpg的所有缓存：<br />
　　./clear_squid_cache.sh prodigyu.jpg</p>
]]></content:encoded>
			<wfw:commentRss>http://prodigyu.com/295/feed</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
	</channel>
</rss>

