<?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>iPUNKID &#187; php</title>
	<atom:link href="http://blog.punkid.org/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.punkid.org</link>
	<description>To ∞ and Beyond</description>
	<lastBuildDate>Sun, 29 Jan 2012 13:02:09 +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>改造WP-Syntax</title>
		<link>http://blog.punkid.org/2009/04/03/wp-syntax-improvement/</link>
		<comments>http://blog.punkid.org/2009/04/03/wp-syntax-improvement/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 07:54:54 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wp-syntax]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=309</guid>
		<description><![CDATA[经常要往blog里贴代码，没个代码高亮实在有点落伍。找来找去，wordpress下也就WP-Syntax最好用了，支持的语言也比较多，像linux下的bash, vim都可以被高亮化。不过WP-Syntax也并非完美，有些地方和我的使用习惯相差甚远: 先来看下改造前和改造后的代码吧: pre标签被两层div嵌套，代码冗余 pre标签内被硬植入字族的inline stylesheet，覆盖了我的CSS设置 插件自带的CSS文件重置了我的CSS设置 自动转义&#60;, &#62;, &#38;这类代码，问题是稍有经验的coder都会事先自己主动转义过的，所以之前已经转义过了的代码反而会以&#38;lt;, &#38;gt;, &#38;amp;这类形式输出 首先改造代码嵌套的问题 找到插件目录下的wp-syntax.php文件，搜索wp_syntax_highlight函数，将以下几行注释掉(注释行前加了//符号): function wp_syntax_highlight($match) { global $wp_syntax_matches; ...... if ($escaped != "false") $code = htmlspecialchars_decode($code); $geshi = new GeSHi($code, $language); $geshi-&#62;enable_keyword_links(false); do_action_ref_array('wp_syntax_init_geshi', array(&#38;$geshi)); //$output = "\n&#60;div class=\"wp_syntax\"&#62;"; if ($line) { ...... } else { //$output .= "&#60;div class=\"code\"&#62;"; $output .= $geshi-&#62;parse_code(); //$output .= [...]]]></description>
			<content:encoded><![CDATA[<p>经常要往blog里贴代码，没个代码高亮实在有点落伍。找来找去，wordpress下也就<a href="http://wordpress.org/extend/plugins/wp-syntax/" title="WP-Syntax">WP-Syntax</a>最好用了，支持的语言也比较多，像linux下的bash, vim都可以被高亮化。不过WP-Syntax也并非完美，有些地方和我的使用习惯相差甚远:</p>
<p>先来看下改造前和改造后的代码吧:</p>
<p><img src="http://pic.yupoo.com/punkid/567887392b25/pelo4o3u.jpg" alt="wp-syntax" width="500" height="371" border="0" /><br />
<span id="more-309"></span></p>
<ol>
<li><code>pre</code>标签被两层<code>div</code>嵌套，代码冗余</li>
<li><code>pre</code>标签内被硬植入字族的<code>inline stylesheet</code>，覆盖了我的CSS设置</li>
<li>插件自带的CSS文件重置了我的CSS设置</li>
<li>自动转义<code>&lt;</code>, <code>&gt;</code>, <code>&amp;</code>这类代码，问题是稍有经验的coder都会事先自己主动转义过的，所以之前已经转义过了的代码反而会以<code>&amp;lt;</code>, <code>&amp;gt;</code>, <code>&amp;amp;</code>这类形式输出</li>
</ol>
<h3>首先改造代码嵌套的问题</h3>
<p>找到插件目录下的<code>wp-syntax.php</code>文件，搜索<code>wp_syntax_highlight</code>函数，将以下几行注释掉(注释行前加了<code>//</code>符号):</p>
<pre lang="php">
function wp_syntax_highlight($match)
{
    global $wp_syntax_matches;
    ......
    if ($escaped != "false") $code = htmlspecialchars_decode($code);

    $geshi = new GeSHi($code, $language);
    $geshi-&gt;enable_keyword_links(false);
    do_action_ref_array('wp_syntax_init_geshi', array(&amp;$geshi));

    //$output = "\n&lt;div class=\"wp_syntax\"&gt;";

    if ($line)
    {
    ......
    }
    else
    {
	//$output .= "&lt;div class=\"code\"&gt;";
        $output .= $geshi-&gt;parse_code();
	//$output .= "&lt;/div&gt;";
    }
	//return

	//$output .= "&lt;/div&gt;\n";

    return $output;
}
</pre>
<h3>转义问题</h3>
<p>还是<code>wp_syntax_highlight</code>函数，将这句:</p>
<pre lang="php">if ($escaped == "true") $code = htmlspecialchars_decode($code);</pre>
<p>替换成</p>
<pre lang="php">if ($escaped != "false") $code = htmlspecialchars_decode($code);</pre>
<p>就是了，也就是说除非手动在<code>&lt;pre&gt;</code>里加入<code>escaped="false"</code>参数，输出的代码是不会自动转义的。</p>
<h3>硬植入CSS问题</h3>
<p>由于WP-Syntax可以方便的调用<code>wp_syntax_init_geshi</code>来修改geshi的初始设置，解决CSS问题可以不需要修改WP-Syntax本身的插件代码，全部在主题文件夹下的<code>functions.php</code>里就可以搞定了。</p>
<p>首先解决往<code>pre</code>里插入字族设置的问题，在<code>functions.php</code>里加入一函数:</p>
<pre lang="php">
function my_custom_geshi_styles(&amp;$geshi) {
    $geshi-&gt;set_overall_style('');
    $geshi-&gt;set_code_style('');
};
</pre>
<p>它会把geshi预设的inline stylesheet全部清除为空，然后再利用Wordpress的<a href="http://codex.wordpress.org/Function_Reference/add_action" title="Function Reference/add action">add_action</a> hook重新初始化geshi的设置，在<code>functions.php</code>里加入这句:</p>
<pre lang="php">
add_action('wp_syntax_init_geshi', 'my_custom_geshi_styles');
</pre>
<p>至于去掉WP-Syntax自带的CSS文件就更简单了，还是往<code>functions.php</code>里添加一句<a href="http://codex.wordpress.org/Function_Reference/remove_action" title="Function Reference/remove action">remove_action</a>的hook就是了:</p>
<pre lang="php">
remove_action('wp_head', 'wp_syntax_head');
</pre>
<p>其实<a href="http://wordpress.org/extend/plugins/wp-pagenavi/" title="WP-PageNavi">WP-PageNavi</a>带的那两三行代码的CSS文件也可以这么干掉:</p>
<pre lang="php">
remove_action('wp_head', 'pagenavi_css');
</pre>
<h3>小结</h3>
<p>其实Wordpress主题文件夹下的<code>functions.php</code>文件是相当有用的，利用Wordpress本身提供的<a href="http://codex.wordpress.org/Plugin_API" title="Wordpress Codex: Plugin API">Plugin API</a>, 很多东西都可以直接在<code>functions.php</code>下直接用一个函数挂上action或者filter的钩子就搞定了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2009/04/03/wp-syntax-improvement/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tips in Aggregate</title>
		<link>http://blog.punkid.org/2008/05/26/tips-in-aggregate/</link>
		<comments>http://blog.punkid.org/2008/05/26/tips-in-aggregate/#comments</comments>
		<pubDate>Mon, 26 May 2008 15:53:56 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/?p=216</guid>
		<description><![CDATA[都是些很零碎的tips，涉及到linux, wordpress, css, php, English &#8230; 选择性阅读吧! Douban and PHP 按照之前QQ签名秀的原理把豆瓣的个人广播系统也给提取出来了，效果请见此test页面。 使用方法是把以下代码添加到你的页面里: &#60;script type="text/javascript" src="http://punkid.org/glade/douban/request.php?userid=username&#38;numbers=5"&#62;&#60;/script&#62; 其中userid后面跟的是你的豆瓣用户名，numbers后面是显示条目数(最多10条)。至于怎么polish这个douban的miniblog纯粹是你的CSS活。对了，输出编码是UTF-8。 PHP tips: 用addslashes这个函数可以对字符串进行转义。 Linux 1. Tired of emerging the world? emerge $(eix -Iuc --format-compact "&#60;category&#62;/&#60;name&#62;" dev-libs/* &#124; head -n -1) 可以用来更新某一category(例如dev-libs)下的已安装软件。 2. Ape转mp3 emerge shntools 和 mac-port (gentoo-china overlay提供) 后运行: shnsplit -f filename.cue -t "%n - %t" -o "cust [...]]]></description>
			<content:encoded><![CDATA[<p>都是些很零碎的tips，涉及到linux, wordpress, css, php, English &#8230; 选择性阅读吧!</p>
<h3>Douban and PHP</h3>
<p>按照之前<a href="http://punkid.org/qqsign/" title="QQ签名秀">QQ签名秀</a>的原理把豆瓣的个人广播系统也给提取出来了，效果请见此<a href="http://punkid.org/glade/douban/test.html" title="Douban miniblog test page">test页面</a>。</p>
<p>使用方法是把以下代码添加到你的页面里:</p>
<pre lang="xml">
&lt;script type="text/javascript" src="http://punkid.org/glade/douban/request.php?userid=<strong>username</strong>&amp;numbers=5"&gt;&lt;/script&gt;
</pre>
<p>其中<code>userid</code>后面跟的是你的豆瓣用户名，<code>numbers</code>后面是显示条目数(最多10条)。至于怎么polish这个douban的miniblog纯粹是你的CSS活。对了，输出编码是UTF-8。</p>
<p>PHP tips: 用<a href="http://cn.php.net/manual/en/function.addslashes.php" title="PHP:addslashes">addslashes</a>这个函数可以对字符串进行转义。<br />
<span id="more-216"></span></p>
<h3>Linux</h3>
<h4>1. Tired of emerging the world?</h4>
<pre lang="bash">
emerge $(eix -Iuc --format-compact "&lt;category&gt;/&lt;name&gt;" dev-libs/* | head -n -1)
</pre>
<p>可以用来更新某一category(例如dev-libs)下的已安装软件。</p>
<h4>2. Ape转mp3</h4>
<p>emerge shntools 和 mac-port (<a href="http://code.google.com/p/gentoo-china-overlay/" title="Gentoo China Overlay">gentoo-china overlay</a>提供) 后运行:</p>
<pre lang="bash">
shnsplit -f filename.cue -t "%n - %t" -o "cust ext=mp3 lame --preset extreme - %f" filename.ape
</pre>
<p>会根据cue文件对ape进行切割成按<code>tracknumber - trackname</code>命名的mp3文件，不过ID3信息没法保存进去，交给<a href="http://www.musicbrainz.org/" title="Musicbrainz">Musicbrainz</a>搞定吧。</p>
<h4>3. 使用Aria2下载器</h4>
<p>原来用的axel不知何故在我的电脑上经常出现Initialing download就停滞不前的情况，无奈&#8230;换了个稍微大点的Aria2。顺便把Gentoo Mirror的默认下载也换成了aria2。更改make.conf如下:</p>
<pre lang="bash">
FETCHCOMMAND="/usr/bin/aria2c -c -s 4 -d ${DISTDIR} -o ${FILE} ${URI}"
RESUMECOMMAND="${FETCHCOMMAND}"
</pre>
<p>至于在firefox里用flashgot启用aria2下载，在<code>Executable path</code>里填<code>/usr/bin/rxvt</code> (任意虚拟终端，别用xterm就是了，那个启动太慢了)，然后在<code>Command line arguments template</code>里填<code>-e aria2c -s 5 -d [FOLDER] [URL]</code></p>
<h3>WordPress</h3>
<h4>1. 只显示当日评论数</h4>
<p>不明白我的意思的，留个言在到首页看下就知道了，当日有留言的日志会格外用类似于<em>3 comments today</em>方式显示。方法很简单，抽数据而已。修改你的模板的index.php，再最顶端添加:</p>
<pre lang="php">
&lt;?php
	$nowtime = current_time('timestamp');
	$today = date('Y-m-d G:i:s', mktime(0, 0, 0, date('m',$nowtime), date('d',$nowtime), date('Y',$nowtime)));
?&gt;
</pre>
<p>然后是修改loop部分:</p>
<pre lang="xml">
&lt;?php if (have_posts()) : ?&gt;
	&lt;?php while (have_posts()) : the_post(); ?&gt;

		<strong>&lt;?php $today_comments = $wpdb-&gt;get_var("SELECT COUNT(*) FROM $wpdb-&gt;comments WHERE comment_post_ID = $id AND comment_date &gt;= '$today' AND comment_approved = '1'"); ?&gt;</strong>
		&lt;div class="entry"
		&lt;h2 id="post-&lt;?php the_ID(); ?&gt;" class="entrytitle"&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanent Link to &lt;?php the_title(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
		&lt;p class="metadata clearfix"&gt;
		<strong>&lt;span class="cmt"&gt;&lt;?php if ($today_comments &gt; 0) { ?&gt;&lt;a class="todaycmt" href="&lt;?php the_permalink() ?&gt;#comments" title="Comment on &lt;?php the_title(); ?&gt;"&gt;&lt;?php echo $today_comments; ?&gt; Comment&lt;?php if ($today_comments&gt;1) echo 's'; ?&gt; Today&lt;/a&gt;&lt;?php } else { ?&gt;&lt;?php comments_popup_link('No Comments', '1 Comment', '% Comments'); ?&gt;&lt;?php } ?&gt;&lt;/span&gt;</strong>
		&lt;/p&gt;
		...
		&lt;/div&gt;

		&lt;?php } ?&gt;

		...

&lt;?php endif; ?&gt;
</pre>
<p>加重部分是关键。</p>
<h4>2. 过滤某category的feed输出</h4>
<p>在模板的function.php里添加这段代码:</p>
<pre lang="php">
&lt;?php
function RssFilter($query) {
     if ($query-&gt;is_feed) {
         $query-&gt;set('cat','-<strong>22</strong>');
     }
         return $query;
}

add_filter('pre_get_posts','RssFilter');
?&gt;
</pre>
<p>其中22为你的category ID。</p>
<h3>CSS</h3>
<p>CSS的代码书写风格我倾向于单行式，用缩进表明元素的从属关系。例如:</p>
<pre lang="css">
#secondary div.modules {margin-bottom:40px;}
	#secondary div.modules a {color:#888;}
	#secondary div.modules a:hover {color:#FF32B3;text-decoration:underline;}
	#secondary div.modules h3 {color:#94C742;border-bottom:1px dotted #94C742;}
	#secondary div.modules ul li {padding:3px 8px;border-bottom:1px dashed #FF80D0;}
	#secondary div.modules ul li:hover {background:#F0F8E2;}

#bottom_wrapper h3 {color:#FDF262;border-bottom:1px solid #FDF262;}
	#bottom_wrapper div.modules {width:300px;margin:0 10px;float:left;position:relative;display:inline;}
	#bottom_wrapper div.modules ul li {height:1.6em;padding:3px 2px;border-bottom:1px dotted #528F08;overflow:hidden;}
	#bottom_wrapper div.modules ul li:hover {background:#528F08;}
	#bottom_wrapper div#misc table.calendar {width:300px;margin-bottom:20px;border-collapse:separate;border-spacing:1px;}
		table.calendar td {padding:3px 0 2px;text-align:center;}
		table.calendar td.calendar_h {display:none;}
		table.calendar td.today {background:#528F08;}
		table.calendar td.week {background:#528F08;color:#FDF262;}
	#bottom_wrapper div#tags ul li {margin-right:5px;padding:0;display:inline;border:0;}
		#bottom_wrapper div#tags ul li span, #bottom_wrapper div#tags div {display:none;}
</pre>
<p>也许这种单行的方式不利于阅读，但是类似block的书写方式最大的问题是一旦CSS代码上个几百行的，要找到某一行翻页是件很痛苦的事，而单行定义加上适当的缩进即便不看HTML源代码也能对页面结构有个基本的认识。还有就是&#8230;在VIM下用<code>w</code>,<code>b</code>进行整词跳跃是件很惬意的事，即便是单行也能很快的跳跃到需要修改查看的property。</p>
<h3>English</h3>
<h4>1. take with a pinch of salt</h4>
<p>Radiohead的<em>A Wolf at the Door</em>里有句歌词是<em>Take it with the love its given, take it with a pinch of salt, take it to the taxman</em>。</p>
<p>那<em>take it with a pinch of salt</em>真的是抓把盐吗? 真实的意思有点类似于姑且相信，半信半疑的意思，例如<em>Regarding what you said yesterday, I would take it with a pinch of salt</em>意思就是你昨天说的那些我姑且相信吧。</p>
<h4>Tia Dalma and I go way back</h4>
<p>在电影<em>Pirates of the Carribean : The Man&#8217;s Chest</em> (加勒比海盗2:聚魂棺)，Jack船长带着众人去找女巫Tia Dalma时说: <em>No worries, mates. Tia Dalma and I go way back.</em>。我记得当时我看的思路的版本翻译成了<em>伙计们，别担心，Tia Dalma和我待会就回来</em>。这其实是错误的，<em>go back way</em>的意思是表示两人认识很久了，交情很好。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2008/05/26/tips-in-aggregate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Upgrade to WP2.3</title>
		<link>http://blog.punkid.org/2007/11/01/upgrade-to-wp23/</link>
		<comments>http://blog.punkid.org/2007/11/01/upgrade-to-wp23/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 16:09:32 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[the_tags]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/2007/11/01/upgrade-to-wp23/</guid>
		<description><![CDATA[在本机上调试了一个星期后，终于把WP升级到了2.3。因为native tag support的原因，不得不放弃了UTW这个超级好用的插件，我拿UTW做得一些SEO工作也得全部作废了。反正我就是不喜欢Wordpress的越来越华而不实，从2.1开始就没干过正经事儿了，反而让我越发不满意wordpress的运行效率。抱怨归抱怨，以下是调试WP2.3中碰到的一些问题，主要是和模板相关的。 糟糕的Tag体验 WP提供了原生的tag支持，不过这个the_tags()函数实在是有够弱的，一是它必须是strictly in the loop，而我的模板single page里的metadata都是显示在sidebar中的，the_category()，the_time()都能工作的很好，就the_tags()显示为空。我又不想把tag放到日志的loop里，最后只能在sidebar里做个rewind操作了，代码如下: &#60;?php if(is_single()) { ?&#62; &#60;?php rewind_posts(); ?&#62; &#60;?php while(have_posts()): the_post(); ?&#62; &#60;h2 id=&#34;metadata&#34;&#62;Metadata&#60;/h2&#62; &#60;dl&#62; &#60;dt&#62;Metadata&#60;/dt&#62; &#60;dd class=&#34;date&#34; title=&#34;postdate&#34;&#62;&#60;?php the_time(&#39;Y.n.j&#39;) ?&#62; / &#60;?php the_time(&#39;ga&#39;) ?&#62;&#60;/dd&#62; &#60;dd class=&#34;category&#34; title=&#34;category&#34;&#62;&#60;?php the_category(&#39;, &#39;) ?&#62;&#60;/dd&#62; &#60;dd class=&#34;tag&#34; title=&#34;tag&#34;&#62;&#60;?php the_tags(&#39;&#39;,&#39;, &#39;,&#39;&#39;) ?&#62;&#60;/dd&#62; &#60;?php endwhile; ?&#62; &#60;?php } ?&#62; 原本在UTW下，对于没有tag的日志可以指定相应的tag替代文字，例如&#8221;No Tag&#8221;，但是在WP里，the_tags()弱到没有tag也输出个null值来。我自然是希望在没有赋予日志tag的情况下，tag栏里显示&#8221;No Tag&#8221;信息啦。看了下wordpress wp-includes目录下的category-template.php文件里get_the_tags()函数，其中有这么一段: [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://photo11.yupoo.com/20071031/232053_317822381_nwbqasvs.jpg" alt="wordpress" width="145" height="144" border="0" class="floatleft" />在本机上调试了一个星期后，终于把WP升级到了2.3。因为native tag support的原因，不得不放弃了UTW这个超级好用的插件，我拿UTW做得一些SEO工作也得全部作废了。反正我就是不喜欢Wordpress的越来越华而不实，从2.1开始就没干过正经事儿了，反而让我越发不满意wordpress的运行效率。抱怨归抱怨，以下是调试WP2.3中碰到的一些问题，主要是和模板相关的。</p>
<h3>糟糕的Tag体验</h3>
<p>WP提供了原生的tag支持，不过这个<code>the_tags()</code>函数实在是有够弱的，一是它必须是strictly in the loop，而我的模板single page里的metadata都是显示在sidebar中的，<code>the_category()</code>，<code>the_time()</code>都能工作的很好，就<code>the_tags()</code>显示为空。我又不想把tag放到日志的loop里，最后只能在sidebar里做个rewind操作了，代码如下:<br />
<span id="more-160"></span></p>
<pre>
&lt;?php if(is_single()) { ?&gt;
&lt;?php rewind_posts(); ?&gt;
&lt;?php while(have_posts()): the_post(); ?&gt;
&lt;h2 id=&quot;metadata&quot;&gt;Metadata&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;Metadata&lt;/dt&gt;
&lt;dd class=&quot;date&quot; title=&quot;postdate&quot;&gt;&lt;?php the_time(&#39;Y.n.j&#39;) ?&gt; / &lt;?php the_time(&#39;ga&#39;) ?&gt;&lt;/dd&gt;
&lt;dd class=&quot;category&quot; title=&quot;category&quot;&gt;&lt;?php the_category(&#39;, &#39;) ?&gt;&lt;/dd&gt;
&lt;dd class=&quot;tag&quot; title=&quot;tag&quot;&gt;&lt;?php the_tags(&#39;&#39;,&#39;, &#39;,&#39;&#39;) ?&gt;&lt;/dd&gt;
&lt;?php endwhile; ?&gt;
&lt;?php } ?&gt;
</pre>
<p>原本在UTW下，对于没有tag的日志可以指定相应的tag替代文字，例如&#8221;No Tag&#8221;，但是在WP里，<code>the_tags()</code>弱到没有tag也输出个null值来。我自然是希望在没有赋予日志tag的情况下，tag栏里显示&#8221;No Tag&#8221;信息啦。看了下wordpress wp-includes目录下的category-template.php文件里<code>get_the_tags()</code>函数，其中有这么一段:</p>
<pre lang="php">
if ( empty( $tags ) )
	return false;
return $tags;
</pre>
<p><code>get_the_tags()</code>函数在没有找到tag的情况下会返回为false值。我把<code>the_tags()</code>的调用改成了以下这句，这样就能在没有tag的情况下显示&#8221;No Tag&#8221;了:</p>
<pre>
&lt;?php if(!(get_the_tags())) echo &#39;No Tag&#39;; else the_tags(&#39;&#39;,&#39;, &#39;,&#39;&#39;); ?&gt;
</pre>
<h3>删除UTW</h3>
<p>用WP2.3导入了UTW的tag之后，就可以把UTW彻底移出了，UTW在数据库里添加了<em>wp_post2tag</em>, <em>wp_tag_synonyms</em>,<em> wp_tags</em> 这三个表，在mysql里用以下命令直接删除吧(建议先备份数据库):</p>
<pre lang="sql">
mysql&gt; DROP TABLE wp_post2tag,wp_tag_synonyms,wp_tags;
</pre>
<h3>插件相关</h3>
<p>不喜欢<a href="http://lesterchan.net/portfolio/programming.php" title="WP-PageNavi">WP-PageNavi</a>新版自作多情添加CSS样式文件，我的CSS文件都是用gzip压缩过的了，再说我更愿意自己定义WP-PageNavi的样式。编辑pagenavi.php文件，注释掉以下这段就是了:</p>
<pre>
### Function: Page Navigation CSS
#add_action(&#39;wp_head&#39;, &#39;pagenavi_css&#39;);
#function pagenavi_css() {
#       echo &quot;\n&quot;.&#39;&lt;!-- Start Of Script Generated By WP-PageNavi 2.20 --&gt;&#39;.&quot;\n&quot;;
#       echo &#39;&lt;link rel=&quot;stylesheet&quot; href=&quot;&#39;.get_option(&#39;siteurl&#39;).&#39;/wp-content/plugi
ns/pagenavi/pagenavi-css.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;&#39;.&quot;\n&quot;;
#       echo &#39;&lt;!-- End Of Script Generated By WP-PageNavi 2.20 --&gt;&#39;.&quot;\n&quot;;
#}
</pre>
<p><a href="http://orderedlist.com/wordpress-plugins/wp-tiger-administration/" title="Tiger Style Administration">Tiger Style Administration</a>是个很漂亮的WP后台主题，不过在2.3下显示似乎有点问题，最明显的就是footer位置偏了。我稍微修改了下它的css文件，喜欢这个插件的又想在2.3下正常使用的直接<a href='http://blog.punkid.org/wp-content/uploads/2007/11/tiger_style_administration_css.zip' title='Modified Tiger.css file for WP2.3 Compatibility'>下载我修改过的CSS文件</a>吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2007/11/01/upgrade-to-wp23/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>QQ签名秀 : 在你的blog里调用QQ签名</title>
		<link>http://blog.punkid.org/2007/10/21/show-your-qq-signatures-in-blog/</link>
		<comments>http://blog.punkid.org/2007/10/21/show-your-qq-signatures-in-blog/#comments</comments>
		<pubDate>Sat, 20 Oct 2007 18:05:10 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[QQ签名秀]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[在Blog中调用QQ签名]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/2007/10/21/show-your-qq-signatures-in-blog/</guid>
		<description><![CDATA[在上篇日志里我就提到要写一个输出QQ签名的程序了，作用是仅仅通过插入一行类似于豆瓣秀的代码在任意页面上显示最新的QQ签名，有点类似于twitter输出。经过两个晚上的努力，初步实现了我想要的功能，并完成了前台页面的设计,IE下还是有点wacky :( 。Now this is the official release announcement: QQ签名秀web程序诞生! QQ签名秀网站 : http://punkid.org/qqsign/ 功能/Features 只需要简单的插入一行代码就能实现QQ签名的输出，而此过程的实现不需要你的主机支持php，也无须对XHTML有太多了解，一切我都替你完成了 支持UTF-8和GB18030两种编码输出 可定义显示最近QQ签名的条目数 发表时间显示为更人性化的&#8221;XX月XX天XX小时前&#8221; 可以通过CSS改变输出样式 可通过前台页面生成你需要的脚本代码，无须手动配置 前台页面配合预览功能，以验证输出的正确与完整 FAQ/疑问解答 为保证顺利抓取到你的&#8221;心路历程&#8221;xml文件，请确保你开启了QQ空间功能，并没有设置访问密码；与此同时，你还需要在Q-zone下设置把最新签名添加到&#8221;心路历程&#8221;下 UTF-8/GB18030该选择哪个编码呢? 国内很多网站都还在使用GB(GB2312,GBK,GB18030)码，而时下的趋势是使用UTF-8码，用什么编码取决于你的页面编码。例如blogbus用的就是UTF-8码。 显示条目数究竟能设置多大值? 因为QQ的xml文件并没有一次性输出所有历史签名，所以条目数不宜设置过大。当然，即使你设置值已经超过了最大实际值也不要紧，程序最自动输出到最大实际值后停止的 程序实现过程 这个程序的原理很简单，读取Q-zone里的&#8221;心路历程&#8221;的XML文件，经过数据处理后再输出为javascript形式。写这个程序遇到了四个困难: Q-zone的代码实在太乱太dirty了，腾讯又没有官方明确申明有RSS，而Q-zone又没法在非IE浏览器下浏览，我没办法使用FF下的firebug来inspect它的XML文件，最后通过从IE临时文件中找到js文件，把xml文件地址给揪了出来 我本打算采用php的SimpleXML/DomDocument直接读取QQ的XML文件，但是DH主机不支持URL-file-access mode，不得不放弃了这种最简单的方法，好在我曾经在给自己的blog写个wordpress插件时发现可以用MagpieRSS来读取XML文件，并最终通过MagpieRSS实现了成功读取 第三个困难是编码问题，QQ的xml输出的编码是GB2312，在我用MagpieRSS之前我曾考虑过用curl下载XML文件并储存为字符型数据，结果curl把GB码的汉字全丢掉了，更糟糕的是，我测试用的几个朋友的QQ签名里因为各式各样的非汉字/非英文特殊文字弄得读取出错，换成MagpieRSS后，发现指定输出编码的话也会出这样的问题，最终的办法是使用早先的MagpieRSS版本，不指定输出编码，直接读取XML数据储存为数组 最后一个问题是怎么把php执行的结果由javascript方式输出，研究了下livid的project babel程序ing模块代码，通过直接在php里写入javascript的document.write格式输出搞定了。 最后，特别感谢Druggo和我熬夜奋斗啊，很多东西都是他帮忙想辙的! And dont forget to send some feedbacks to me if you have some better ideas or suggestion.]]></description>
			<content:encoded><![CDATA[<p><img src="http://photo11.yupoo.com/20071020/235442_1179828962_naeqncuk.jpg" alt="qqsign" width="215" height="415" border="0" class="floatleft" /> 在上篇日志里我就提到要写一个输出QQ签名的程序了，作用是仅仅通过插入一行类似于豆瓣秀的代码在任意页面上显示最新的QQ签名，有点类似于twitter输出。经过两个晚上的努力，初步实现了我想要的功能，并完成了前台页面的设计,IE下还是有点wacky :( 。Now this is the official release announcement: QQ签名秀web程序诞生!</p>
<p><strong>QQ签名秀网站</strong> : <a href="http://punkid.org/qqsign/" title="Get QQ Signatures Show Now!">http://punkid.org/qqsign/</a></p>
<p><strong>功能/Features</strong></p>
<ul>
<li>只需要简单的插入一行代码就能实现QQ签名的输出，而此过程的实现不需要你的主机支持php，也无须对XHTML有太多了解，一切我都替你完成了</li>
<li>支持UTF-8和GB18030两种编码输出</li>
<li>可定义显示最近QQ签名的条目数</li>
<li>发表时间显示为更人性化的&#8221;XX月XX天XX小时前&#8221;</li>
<li>可以通过CSS改变输出样式</li>
<li>可通过前台页面生成你需要的脚本代码，无须手动配置</li>
<li>前台页面配合预览功能，以验证输出的正确与完整</li>
</ul>
<p><strong>FAQ/疑问解答</strong></p>
<ul>
<li>为保证顺利抓取到你的&#8221;心路历程&#8221;xml文件，请确保你开启了QQ空间功能，并没有设置访问密码；与此同时，你还需要在Q-zone下设置把最新签名添加到&#8221;心路历程&#8221;下</li>
<li>UTF-8/GB18030该选择哪个编码呢? 国内很多网站都还在使用GB(GB2312,GBK,GB18030)码，而时下的趋势是使用UTF-8码，用什么编码取决于你的页面编码。例如blogbus用的就是UTF-8码。</li>
<li>显示条目数究竟能设置多大值? 因为QQ的xml文件并没有一次性输出所有历史签名，所以条目数不宜设置过大。当然，即使你设置值已经超过了最大实际值也不要紧，程序最自动输出到最大实际值后停止的</li>
</ul>
<p><strong>程序实现过程</strong></p>
<p>这个程序的原理很简单，读取Q-zone里的&#8221;心路历程&#8221;的XML文件，经过数据处理后再输出为javascript形式。写这个程序遇到了四个困难:</p>
<ol>
<li>Q-zone的代码实在太乱太dirty了，腾讯又没有官方明确申明有RSS，而Q-zone又没法在非IE浏览器下浏览，我没办法使用FF下的firebug来inspect它的XML文件，最后通过从IE临时文件中找到js文件，把xml文件地址给揪了出来</li>
<li>我本打算采用php的SimpleXML/DomDocument直接读取QQ的XML文件，但是DH主机不支持URL-file-access mode，不得不放弃了这种最简单的方法，好在我曾经在给自己的blog写个wordpress插件时发现可以用<a href="http://magpierss.sourceforge.net/" title="MagpieRSS">MagpieRSS</a>来读取XML文件，并最终通过MagpieRSS实现了成功读取</li>
<li>第三个困难是编码问题，QQ的xml输出的编码是GB2312，在我用MagpieRSS之前我曾考虑过用curl下载XML文件并储存为字符型数据，结果curl把GB码的汉字全丢掉了，更糟糕的是，我测试用的几个朋友的QQ签名里因为各式各样的非汉字/非英文特殊文字弄得读取出错，换成MagpieRSS后，发现指定输出编码的话也会出这样的问题，最终的办法是使用早先的MagpieRSS版本，不指定输出编码，直接读取XML数据储存为数组</li>
<li>最后一个问题是怎么把php执行的结果由javascript方式输出，研究了下<a href="http://livid.cn" title="Livid Paranoid">livid</a>的project babel程序ing模块代码，通过直接在php里写入javascript的<code>document.write</code>格式输出搞定了。</li>
</ol>
<p>最后，特别感谢<a href="http://blog.druggo.net" title="Druggo">Druggo</a>和我熬夜奋斗啊，很多东西都是他帮忙想辙的! And dont forget to send some feedbacks to me if you have some better ideas or suggestion.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2007/10/21/show-your-qq-signatures-in-blog/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>让Feedburner的计数器重新显示</title>
		<link>http://blog.punkid.org/2007/10/05/bring-back-feedburner-counts-image-to-earth-in-china/</link>
		<comments>http://blog.punkid.org/2007/10/05/bring-back-feedburner-counts-image-to-earth-in-china/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 19:05:50 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[计数器]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/2007/10/05/bring-back-feedburner-counts-image-to-earth-in-china/</guid>
		<description><![CDATA[自从feedburner被河蟹之后，内地用户就没法看到那个fancy的feedburner计数器了，不过&#8230;Look at my site, I&#8217;ve brought it to earth! 原理很简单，利用国外的远程主机先在远程主机上获取feedburner的计数图片并保存在远程主机上，然后相应的修改feedburner的图片地址为保存在主机上的就行了。 我利用的是php方式来实现获取图片功能，代码如下 (其实我还是个php beginner，获取文件的代码是google来的) &#60;?php function get_feedburner&#40;&#36;url&#41; { //Initiate the curl // &#36;ch = curl_init&#40;&#41;; //Set the curl option// curl_setopt &#40;&#36;ch, CURLOPT_URL, &#36;url&#41;; curl_setopt &#40;&#36;ch, CURLOPT_HEADER, 0&#41;; ob_start&#40;&#41;; //Lets get the file// curl_exec &#40;&#36;ch&#41;; curl_close &#40;&#36;ch&#41;; //Retrieve the file got from the remote url// &#36;string = [...]]]></description>
			<content:encoded><![CDATA[<p>自从feedburner被河蟹之后，内地用户就没法看到那个fancy的feedburner计数器了，不过&#8230;Look at my site, I&#8217;ve brought it to earth! 原理很简单，利用国外的远程主机先在远程主机上获取feedburner的计数图片并保存在远程主机上，然后相应的修改feedburner的图片地址为保存在主机上的就行了。</p>
<p>我利用的是php方式来实现获取图片功能，代码如下 (其实我还是个php beginner，获取文件的代码是google来的)<br />
<span id="more-144"></span></p>
<pre>
&lt;?php
function get_feedburner&#40;&#36;url&#41; {

        //Initiate the curl //
	&#36;ch = curl_init&#40;&#41;;

	//Set the curl option//
	curl_setopt &#40;&#36;ch, CURLOPT_URL, &#36;url&#41;;
	curl_setopt &#40;&#36;ch, CURLOPT_HEADER, 0&#41;;

	ob_start&#40;&#41;;

        //Lets get the file//
	curl_exec &#40;&#36;ch&#41;;
	curl_close &#40;&#36;ch&#41;;

        //Retrieve the file got from the remote url//
	&#36;string = ob_get_contents&#40;&#41;;
	ob_end_clean&#40;&#41;;
	return &#36;string;
}

&#36;content = get_feedburner&#40;"http://feeds.feedburner.com/~fc/punkid?bg=BCF16C&amp;fg=404040&amp;anim=0"&#41;;
&#36;fp=fopen&#40;"feedburner.jpg", "w"&#41;;
fwrite&#40;&#36;fp, &#36;content&#41;;
fclose&#40;&#36;fp&#41;;
?&gt;
</pre>
<p>保存代码到<code>get_feedburner.php</code>文件中，其中<code>get_feedburner&#40&#41;</code>中的地址是你的feedburner计数器图片地址，而<code>fopen&#40&#41;</code>里是你将要保存到远程主机的图片名。想知道这个script到底有用不? ssh到远程主机执行<code>php get_feedburner.php</code>，然后用浏览器查看下保存的图片地址就知道了。</p>
<p>然后我们要做的是让这个script每天执行一次 (feedburner每天更新一次计数器数据)，ssh到远程主机运行<code>crontab -e</code>，添加如下一行:</p>
<pre>
01 9 * * * /usr/local/bin/php home/path/get_feedburner.php #请替换为你的<code>get_feedburner.php</code>保存地址。
</pre>
<p>这个cron job指示远程主机在每天9点01分时运行一次该script。为什么是9点捏? 我用的DH主机和我们这时差15个小时!</p>
<p>最后你要做的就是更改feedburner的计数器图片地址为你的主机上的图片地址吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2007/10/05/bring-back-feedburner-counts-image-to-earth-in-china/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Gentoo 使用笔记 Part 4</title>
		<link>http://blog.punkid.org/2007/04/10/gentoo-notes-part-4/</link>
		<comments>http://blog.punkid.org/2007/04/10/gentoo-notes-part-4/#comments</comments>
		<pubDate>Tue, 10 Apr 2007 13:37:52 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[LAMPP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/2007/04/10/gentoo-notes-part-4/</guid>
		<description><![CDATA[往期回顾: Gentoo 使用笔记 Part 1 Gentoo 使用笔记 Part 2 Gentoo 使用笔记 Part 3 在Gentoo下打造LAMPP 最终还是选择了自己编译LAMPP平台，放弃了已整合好的XAMPP For Linux，执行效率和启动速度有了很大的提高。 安装LAMPP 添加以下use到 /etc/portage/package.use 中 net-www/apache apache2 dev-lang/php apache2 bzip2 gd mysql xml xmlrpc zip ctype pcre session unicode #其中php里的有些use不一定是必须的，不过这些use基本上都是常用的或是将来可能会用到的 编译apache和mysql # emerge apache mysql 在编译php前先修改下/etc/conf.d/apache2，加入php5的模块选项 APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5" 然后编译php和phpmyadmin吧 # emerge dev-lang/php phpmyadmin 设置LAMPP Gentoo下的Apache已经设置的很好了，基本上无须修改就能使用了。 在使用MySQL前还需要进行初始化设置，执行#emerge --config [...]]]></description>
			<content:encoded><![CDATA[<h3>往期回顾:</h3>
<ol>
<li><a href="http://pp.punkid.org/2006/09/30/gentoo-notes-part-1/" title="Gentoo 使用笔记 Part 1">Gentoo 使用笔记 Part 1</a></li>
<li><a href="http://pp.punkid.org/2006/09/30/gentoo-notes-part-2/" title="Gentoo 使用笔记 Part 2">Gentoo 使用笔记 Part 2</a></li>
<li><a href="http://pp.punkid.org/2006/10/09/gentoo-notes-part-3/" title="Gentoo 使用笔记 Part 3">Gentoo 使用笔记 Part 3</a></li>
</ol>
<h3>在Gentoo下打造LAMPP</h3>
<p>最终还是选择了自己编译<abbr title="Linux+Apache+MySQL+PHP+phpMyAdmin">LAMPP</abbr>平台，放弃了已整合好的<a href="http://www.apachefriends.org/en/xampp-linux.html" title="XAMPP For Linux">XAMPP For Linux</a>，执行效率和启动速度有了很大的提高。</p>
<h4>安装LAMPP</h4>
<p>添加以下use到 /etc/portage/package.use 中</p>
<pre lang="bash">
net-www/apache apache2
dev-lang/php apache2 bzip2 gd mysql xml xmlrpc zip ctype pcre session unicode
#其中php里的有些use不一定是必须的，不过这些use基本上都是常用的或是将来可能会用到的
</pre>
<p><span id="more-56"></span><br />
编译apache和mysql</p>
<pre lang="bash">
# emerge apache mysql
</pre>
<p>在编译php前先修改下/etc/conf.d/apache2，加入php5的模块选项</p>
<pre lang="bash">
APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5"
</pre>
<p>然后编译php和phpmyadmin吧</p>
<pre lang="bash">
# emerge dev-lang/php phpmyadmin
</pre>
<h4>设置LAMPP</h4>
<p>Gentoo下的Apache已经设置的很好了，基本上无须修改就能使用了。</p>
<p>在使用MySQL前还需要进行初始化设置，执行<code>#emerge --config mysql</code>进行设置，然后启动MySQL，进行安全设置:</p>
<pre lang="bash">
# /etc/init.d/mysql start
# mysql_secure_installation
</pre>
<p>设置phpMyAdmin:</p>
<pre lang="bash">
# mysql -u root -p< /usr/share/webapps/phpmyadmin/2.10.0.2/sqlscripts/mysql/2.10.0.2_create.sql
# mkdir /var/www/localhost/htdocs/phpmyadmin/config
# chmod o+rw /var/www/localhost/htdocs/phpmyadmin/config
# cp /var/www/localhost/htdocs/phpmyadmin/config.sample.inc.php /var/www/localhost/htdocs/phpmyadmin/config/config.inc.php
# chown -R apache:apache /var/www/localhost/htdocs/phpmyadmin/config
</pre>
<p>OK,启动Apache和MySQL试试看，看看能不能进入phpMyAdmin进行数据库操作，你也可以建立一个内容为&lt;?php phpinfo() ?&gt;的php文件来查看apache是否正常启用了php。</p>
<h4>小技巧</h4>
<p>我实在不喜欢那个/var/www/localhost/htdocs的目录，操作起来太不方便，我也不愿意去修改httpd.conf文件。我的做法是在/home目录下新建个web文件夹，设置owner为自己的普通日常用户，然后做个链接到htdocs目录里就是了。</p>
<pre lang="bash">
# mkdir /home/web
# chown -R punkid:apache /home/web
/*我选择把wordpress什么的都放到这个web目录下了，并设置所有者为apache组和个人用户*/
# chmod ug+rw -R /home/web
/*给予apache组和个人用户读写权限*/
</pre>
<p>然后切换到htdocs文件夹下做几个链接进来吧</p>
<pre lang="bash">
# cd /var/www/localhost/htdocs
# ln -sf /home/web/wordpress wp
# ln -sf /home/web/drupal drupal
</pre>
<p>这样我输入<code>http://localhost/wp</code>时就可以访问/home/web/wordpress下的wp blog了，同理<code>http://localhost/drupal</code>则进入了/home/web/drupal的目录操作</p>
<p>顺带把win下的几个音乐，电影资源文件夹也链接进来以便给我的朋友们下载</p>
<pre lang="bash">
# ln -sf /mnt/win_f/Audio Audio
# ln -sf /mnt/win_f/Movie Movie
</pre>
<p>如果你不想别人从外部访问的话，在你不希望别人访问的文件夹下建立个<code>.htaccess</code>的隐藏文件，输入以下内容:</p>
<pre lang="apache">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</pre>
<p>如果你不愿意把apache和MySQL都加入开机启动程序，而又嫌分别输入<code>/etc/init.d/apache start</code>和 <code>/etc/init.d/mysql start</code>麻烦的话，可以在/etc/init.d/下建立一个lampp启动脚本。你在该目录下输入<code>vi lampp</code>会自动帮你填补好脚本框架的，我的脚本是这样的(有点粗糙，不过能用:D )</p>
<pre lang="bash">
#!/sbin/runscript
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

depend() {
    need net
}

svc_start() {
    ebegin "Starting LAMPP"
    /etc/init.d/apache2 start &#038;&#038; /etc/init.d/mysql start
    eend ${?} "Failed to start LAMPP"
}

svc_stop() {
    ebegin "Stopping LAMPP"
    /etc/init.d/apache2 stop &#038;&#038; /etc/init.d/mysql stop
    eend ${?} "Failed to stop LAMPP"
}

svc_restart() {
    ebegin "Restarting LAMPP"
    /etc/init.d/apache2 restart &#038;&#038; /etc/init.d/mysql restart
    eend ${?} "Failed to restart LAMPP"
}
</pre>
<p>执行<code>/etc/init.d/lampp start</code>,<code>/etc/init.d/lampp stop</code>,<code>/etc/init.d/lampp restart</code>即可启用，停用以及重新启动apache和MySQL。</p>
<p>另外，我自己用python写了个小程序，用来监视apache的访问记录的。你可以copy以下代码到任意.py文件中，加入执行权限( <code>chmod +x logmonitor.py</code> )就可以运行了</p>
<pre lang="python">
#!/usr/bin/python
import os,time

today = time.strftime('%d/%b/%Y') #specify the date format
log_path = '/usr/lib/apache2/logs/access_log' #如果你更改了apache log存放路径设置的话，请更改此处地址
logline = os.popen("cat %s | grep '%s' | wc -l" %(log_path,today)).read()
showlog = "tail -f -n 20 %s | grep '%s'" %(log_path,today)

if logline.startswith('0'):
   print 'no activies recently' #如果当天没有活动记录，则不显示
else:
   os.system(showlog)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2007/04/10/gentoo-notes-part-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>浅谈实现网页交替背景颜色的几种方法</title>
		<link>http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/</link>
		<comments>http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/#comments</comments>
		<pubDate>Sat, 17 Feb 2007 16:05:38 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[交替背景]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/</guid>
		<description><![CDATA[WordPress 的评论模板部分都会定义一个$oddcomment函数用来实现评论的样式交替变换，采取交替样式可以使列表有一定分区度，便于浏览。我稍稍总结了下，分别通过javascript, php和CSS三种方式进行实现，其中CSS实现方法还几乎处于理想状态，仅供参考。 实现方法之Javascript篇 假设我们有个id名为 list 的无序列表ul，其下有5项item (li)。我们可以用getElementById和getElementsByTagName先找到这些item，然后通过for循环筛选出奇数项并赋予class值。再通过CSS定义该奇数项class样式从而达到交替样式的目的。javascript代码如下: function alterItem() { var list=document.getElementById('list'); var items=list.getElementsByTagName('li'); for (var i=0;i&#60;items.length;i++) { if(i%2==0) items[i].className='odd'; } } window.onload=alterItem; 最后用通过CSS定义 .odd样式就行了。 实现方法之PHP篇 此方法来源于WordPress论坛的这篇日志。我曾经在PP的sidenotes部分就是用这种方法实现交替背景的(WP的comment部分已经有oddcomment函数了，无须再费周折)，我直接照搬原来PP theme里的sidenotes部分代码。 &#60;?php query_posts('category_name=sidenotes&#038;showposts=3'); ?&#62; &#60;?php while (have_posts()) : the_post(); ?&#62; &#60;div id="p&#60;?php the_ID(); ?&#62;" class="&#60;?=($i%2)?"even":"odd";$i++;?&#62;"&#62; &#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark" title="Permanent Link to &#60;?php strip_tags(the_title()); ?&#62;" class="title"&#62;&#60;?php [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 的评论模板部分都会定义一个<var>$oddcomment</var>函数用来实现评论的样式交替变换，采取交替样式可以使列表有一定分区度，便于浏览。我稍稍总结了下，分别通过<a href="#javascript_way" title="Javascript Way">javascript</a>, <a href="#php_way" title="PHP Way">php</a>和<a href="#css_way" title="CSS Way">CSS</a>三种方式进行实现，其中CSS实现方法还几乎处于理想状态，仅供参考。</p>
<h3 id="javascript_way">实现方法之Javascript篇</h3>
<p>假设我们有个id名为 list 的无序列表ul，其下有5项item (li)。我们可以用<var>getElementById</var>和<var>getElementsByTagName</var>先找到这些item，然后通过for循环筛选出奇数项并赋予class值。再通过CSS定义该奇数项class样式从而达到交替样式的目的。javascript代码如下:</p>
<pre>
 function alterItem() {
 var list=document.getElementById('list');
 var items=list.getElementsByTagName('li');
 for (var i=0;i&lt;items.length;i++) {
   if(i%2==0)
   items[i].className='odd';
   }
 }

 window.onload=alterItem;
</pre>
<p>最后用通过CSS定义 .odd样式就行了。<br />
<span id="more-16"></span></p>
<h3 id="php_way">实现方法之PHP篇</h3>
<p>此方法来源于<a href="http://wordpress.org/support/topic/1148?replies=20#post-27911" title="Alternating comment backgrounds">WordPress论坛的这篇日志</a>。我曾经在PP的sidenotes部分就是用这种方法实现交替背景的(WP的comment部分已经有<var>oddcomment</var>函数了，无须再费周折)，我直接照搬原来PP theme里的sidenotes部分代码。</p>
<pre>
&lt;?php query_posts('category_name=sidenotes&#038;showposts=3'); ?&gt;
     &lt;?php while (have_posts()) : the_post(); ?&gt;
     &lt;div id="p&lt;?php the_ID(); ?&gt;" <strong>class="&lt;?=($i%2)?"even":"odd";$i++;?&gt;"</strong>&gt;
     &lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanent Link to &lt;?php strip_tags(the_title()); ?&gt;" class="title"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
     &lt;?php the_content(); ?&gt;
     &lt;/div&gt;
&lt;?php endwhile;&gt;
</pre>
<p>注意其中加粗部分，先在模板文件顶部插入如下代码<code>&lt;?$i;?&gt;</code>，然后在class里加入这句判断语句就够了<code>&lt;?=($i%2)?"even":"odd";$i++;?&gt;</code>。学过C语言的都知道这是个if..else判断语句的缩写形式&#8211; <code>If (Expression) ? true : false</code>，如果满足表达式，则执行? 部分，否则执行 : 部分。也就是说，满足 $i%2等于0，即$i为偶，则赋予class为even值，然后$i 加一，滚动到下一item上进行第二次判断。</p>
<h3 id="css_way">实现方法之CSS篇</h3>
<p>CSS2有个<var>:nth-child</var>的选择器，这是个非常非常强大的选择器，你可以定义<code>Element:nth-child(3)</code>来找到为其父元素下的第三个子元素，你也可以定义<code>Element:nth-child(odd) </code>或者<code>Element:nth-child(even)</code> 来查找其父元素下的奇偶子元素，甚至可以用<code>Element:nth-child(3n+2)</code> 来找到其父元素下的第3n+2个元素( n=0,1,2&#8230;)。通过CSS方法定义那太简单了!</p>
<pre>
ul#list li:nth-child(odd) {background:#000;color:#fff}

ul#list li:nth-child(even) {background:#fff;color:#000;}
</pre>
<p>不过，这么好的方法&#8230;目前只有linux下的konqueror浏览器支持(注:Konqueror是目前唯一100%通过<a href="http://www.css3.info/selectors-test/" title="CSS Selectors Suites">CSS3所有选择器测试</a>的浏览器)，好在Opera已经开始<a href="http://my.opera.com/dstorey/blog/show.dml/701902" title="Upcoming CSS3 support in Opera">落实支持该选择器的工作</a>了。</p>
<p>我个人比较喜欢这种cutting edge的方式! 如果你想让你的网站/blog做的更先锋的话就用这种方式吧!</p>
<p><strong>顺带说句</strong>: 其实linux下的konqueror是款相当棒的浏览器，他们对CSS的支持一向都是做的最棒的(目前还有个opacity没解决)，连<a href="http://www.css3.info/preview/multiple-backgrounds/" title="Multiple-Backgrounds">multiple-backgrounds</a>他们都支持了!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

