<?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>蓝色的华 &#187; soft</title>
	<atom:link href="http://bluehua.org/category/soft/feed" rel="self" type="application/rss+xml" />
	<link>http://bluehua.org</link>
	<description>分享所学,backup一切~</description>
	<lastBuildDate>Fri, 13 Apr 2012 14:08:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>NPAPI插件开发备忘</title>
		<link>http://bluehua.org/2012/04/03/1839.html</link>
		<comments>http://bluehua.org/2012/04/03/1839.html#comments</comments>
		<pubDate>Tue, 03 Apr 2012 12:50:57 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[NPAPI]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1839</guid>
		<description><![CDATA[1 . 如何在NPClass中存储自己的自定义数据? 只要实现NPClass的allocate和deallocate两个方法，并定义自己的扩展NPClass结构便可 static struct NPClass nativeScriptablePluginClass = &#123; NP_CLASS_STRUCT_VERSION, JSCLASS_alloc, JSCLASS_free, NULL, JSCLASS_hasMethod, JSCLASS_invoke, NULL, JSCLASS_hasProperty, JSCLASS_getProperty, NULL, NULL, &#125;; &#160; //定义自己的扩展结构体 typedef struct MyScriptPluginClass MyScriptPluginClass; struct MyScriptPluginClass &#123; NPClass nativeClass; NPUTF8 *someStringData; //这是我们的自定义数据 &#125;; &#160; //在自定义的alloc方法中返回为自定义NPClass申请的内存 NPObject* JSCLASS_alloc&#40;NPP inst, NPClass *aClass&#41; &#123; return &#40;NPObject *&#41;malloc&#40;sizeof&#40;struct MyScriptPluginClass&#41;&#41;; &#125; &#160; //相应的释放 void JSCLASS_free&#40;NPObject *nobj&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>1 . 如何在NPClass中存储自己的自定义数据?</p>
<p>只要实现NPClass的allocate和deallocate两个方法，并定义自己的扩展NPClass结构便可</p>

<div class="wp_syntax"><div class="code overflow"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">static</span> <span style="color: #993333;">struct</span> NPClass nativeScriptablePluginClass <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    NP_CLASS_STRUCT_VERSION<span style="color: #339933;">,</span>
    JSCLASS_alloc<span style="color: #339933;">,</span>
    JSCLASS_free<span style="color: #339933;">,</span>
    NULL<span style="color: #339933;">,</span>
    JSCLASS_hasMethod<span style="color: #339933;">,</span>
    JSCLASS_invoke<span style="color: #339933;">,</span>
    NULL<span style="color: #339933;">,</span>
    JSCLASS_hasProperty<span style="color: #339933;">,</span>
    JSCLASS_getProperty<span style="color: #339933;">,</span>
    NULL<span style="color: #339933;">,</span>
    NULL<span style="color: #339933;">,</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//定义自己的扩展结构体</span>
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> MyScriptPluginClass MyScriptPluginClass<span style="color: #339933;">;</span>
<span style="color: #993333;">struct</span> MyScriptPluginClass <span style="color: #009900;">&#123;</span>
    NPClass nativeClass<span style="color: #339933;">;</span>
    NPUTF8 <span style="color: #339933;">*</span>someStringData<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//这是我们的自定义数据</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//在自定义的alloc方法中返回为自定义NPClass申请的内存</span>
NPObject<span style="color: #339933;">*</span> JSCLASS_alloc<span style="color: #009900;">&#40;</span>NPP inst<span style="color: #339933;">,</span> NPClass <span style="color: #339933;">*</span>aClass<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>NPObject <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> MyScriptPluginClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//相应的释放</span>
<span style="color: #993333;">void</span> JSCLASS_free<span style="color: #009900;">&#40;</span>NPObject <span style="color: #339933;">*</span>nobj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//之后都可以通过种类型强转得到我们自定义的结构体</span>
    MyScriptPluginClass <span style="color: #339933;">*</span>obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>MyScriptPluginClass <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>nobj<span style="color: #339933;">;</span>
    free<span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">-&gt;</span>someStringData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    free<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>2 . 如何在插件中调用页面中的js方法?</p>

<div class="wp_syntax"><div class="code overflow"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//这里我们将实现一个可以调用window.eval的方法</span>
<span style="color: #993333;">void</span> JSAPI_methodImpl_getLocation<span style="color: #009900;">&#40;</span>NPObject <span style="color: #339933;">*</span>o<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    NPString rt<span style="color: #339933;">;</span>
    MyScriptPluginClass <span style="color: #339933;">*</span>obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>MyScriptPluginClass <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>o<span style="color: #339933;">;</span>
    NPP _npp <span style="color: #339933;">=</span> obj<span style="color: #339933;">-&gt;</span>instance<span style="color: #339933;">;</span>
    NPObject <span style="color: #339933;">*</span>window <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//static NPNetscapeFuncs* browser;</span>
    <span style="color: #666666; font-style: italic;">//获取window对象</span>
    browser<span style="color: #339933;">-&gt;</span>getvalue<span style="color: #009900;">&#40;</span>_npp<span style="color: #339933;">,</span> NPNVWindowNPObject<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>window<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    NPIdentifier eval <span style="color: #339933;">=</span> browser<span style="color: #339933;">-&gt;</span>getstringidentifier<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;eval&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    NPVariant evalResponse<span style="color: #339933;">;</span>
    NPVariant evalCode<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//初始化我们需要eval的代码</span>
    <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>c_javascriptCode <span style="color: #339933;">=</span> calloc<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2048</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    sprintf<span style="color: #009900;">&#40;</span>c_javascriptCode<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;(function(){&quot;</span>
            <span style="color: #ff0000;">&quot;return window.location.href;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
            <span style="color: #ff0000;">&quot;})();&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    STRINGZ_TO_NPVARIANT<span style="color: #009900;">&#40;</span>c_javascriptCode<span style="color: #339933;">,</span> evalCode<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    NPVariant args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>evalCode<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//window.eval(mycode);</span>
    browser<span style="color: #339933;">-&gt;</span>invoke<span style="color: #009900;">&#40;</span>_npp<span style="color: #339933;">,</span> window<span style="color: #339933;">,</span> eval<span style="color: #339933;">,</span> args<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>evalResponse<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    free<span style="color: #009900;">&#40;</span>c_javascriptCode<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//判断一下js的返回值是否为我们期望的字符串类型</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>NPVARIANT_IS_STRING<span style="color: #009900;">&#40;</span>evalResponse<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//得到我们想要的返回值</span>
        rt <span style="color: #339933;">=</span> NPVARIANT_TO_STRING<span style="color: #009900;">&#40;</span>evalResponse<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fprintf<span style="color: #009900;">&#40;</span>stdout<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;window.location = %.*s&quot;</span><span style="color: #339933;">,</span> rt.<span style="color: #202020;">UTF8Length</span><span style="color: #339933;">,</span> rt.<span style="color: #202020;">UTF8Characters</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    browser<span style="color: #339933;">-&gt;</span>releaseobject<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    browser<span style="color: #339933;">-&gt;</span>releasevariantvalue<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>evalResponse<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>3 . 如何管理内存<br />
<a href="http://colonelpanic.net/2009/12/memory-management-in-npapi/">http://colonelpanic.net/2009/12/memory-management-in-npapi/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2012/04/03/1839.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LUPlayer &#8211; mac os下的网络视频播放器</title>
		<link>http://bluehua.org/2011/11/14/1742.html</link>
		<comments>http://bluehua.org/2011/11/14/1742.html#comments</comments>
		<pubDate>Mon, 14 Nov 2011 11:23:53 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[IOS]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[LUPlayer]]></category>
		<category><![CDATA[mac os]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1742</guid>
		<description><![CDATA[周末的时候想写点代码把一个没有完成的想法继续下去，但又不想太无聊，想在youku上找个片看着。这时碰到了个小问题，视频不能弹出，或者即用浏览器插件弹出，应该也不能置顶。于是先解决了一下这个小问题，然后有了这个播放器。播放器使用起来很简单，只要把视频的地址贴到地址栏，然后点播放即可，现在只支持有ipad支持的视频网站（youku，qiyi，sohu，５６都可以)。当然，这还是个非常简陋的播放器，如果不考虑放出来的话，进度条都懒的加了。 有以下优点: 窗口置顶 不用flash，省cpu 没广告 截屏: 下载:LUPlayer_1_0.dmg]]></description>
			<content:encoded><![CDATA[<p>周末的时候想写点代码把一个没有完成的想法继续下去，但又不想太无聊，想在youku上找个片看着。这时碰到了个小问题，视频不能弹出，或者即用浏览器插件弹出，应该也不能置顶。于是先解决了一下这个小问题，然后有了这个播放器。播放器使用起来很简单，只要把视频的地址贴到地址栏，然后点播放即可，现在只支持有ipad支持的视频网站（youku，qiyi，sohu，５６都可以)。当然，这还是个非常简陋的播放器，如果不考虑放出来的话，进度条都懒的加了。</p>
<p>有以下优点:</p>
<ul>
<li>窗口置顶</li>
<li>不用flash，省cpu</li>
<li>没广告</li>
</ul>
<p>截屏:<br />
<a href="http://bluehua.org/wp-content/uploads/2011/11/LUPlayer.jpg"><img src="http://bluehua.org/wp-content/uploads/2011/11/LUPlayer.jpg" alt="" title="LUPlayer" width="428" height="272" class="alignnone size-full wp-image-1743" /></a><br />
<a href="http://bluehua.org/wp-content/uploads/2011/11/LUPlayer2.jpg"><img src="http://bluehua.org/wp-content/uploads/2011/11/LUPlayer2.jpg" alt="" title="LUPlayer2" width="607" height="351" class="alignnone size-full wp-image-1744" /></a></p>
<p>下载:<a href='http://bluehua.org/wp-content/uploads/2011/11/LUPlayer_1_0.dmg_.zip'>LUPlayer_1_0.dmg</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/11/14/1742.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用phantomjs抓取ITC和android market的安装统计数据</title>
		<link>http://bluehua.org/2011/09/14/1682.html</link>
		<comments>http://bluehua.org/2011/09/14/1682.html#comments</comments>
		<pubDate>Wed, 14 Sep 2011 06:57:44 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[IOS]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[phantomjs]]></category>
		<category><![CDATA[pyqt4]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1682</guid>
		<description><![CDATA[同事用python抓各大andriod市场的页面分析软件下载量，发现andriod　market的数据是通过ajax加载的，而且貌似加密过了，没法直接解析。后来俺发现了phantomjs这个命令行的webkit,在可以在命令行渲染网页，这样不论数据怎么加载，怎么加密，对于标准的浏览器都无能为力了。软件的原理跟以前介绍的一个命令行web截图工具一样,内嵌一个qt4的webkit，然后渲染到xvfb虚拟出的xserver上。不同是这个提供了js的api，用起来方便，可以用来做爬虫，站点监控，服务端截图。 使用方法： 第一步,安装phantomjs Mac os &#038; windows: 直接下载.dmg或.exe安装包即可:http://code.google.com/p/phantomjs/downloads/list mac下安装完闭，可执行文件的路径:/Applications/phantomjs.app/Contents/MacOS/phantomjs ubuntu: sudo add-apt-repository ppa:jerome-etienne/neoip sudo apt-get update sudo apt-get install phantomjs centos 5.3: 折腾开始了。。由于phantomjs的linux版本是通过pyqt4实现的，所以装起来比较麻烦 首先我们需要安装qt4.7.而yum默认安装的是4.1 rpm -ivh http://software.freivald.com/centos/software.freivald.com-1.0.0-1.noarch.rpm yum update fontconfig fontconfig-devel yum install qt4 qt4-devel #如果已经安装过qt4则执行 yum update qt4 qt4-devel 安装Xvfb yum install xorg-x11-server-Xvfb xorg-x11-server-Xorg xorg-x11-fonts* 安装python 2.7,自带的为2.4，没法用 wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2 tar jxvf Python-2.7.2.tar.bz2 cd Python-2.7.2 [...]]]></description>
			<content:encoded><![CDATA[<p>同事用python抓各大andriod市场的页面分析软件下载量，发现andriod　market的数据是通过ajax加载的，而且貌似加密过了，没法直接解析。后来俺发现了phantomjs这个命令行的webkit,在可以在命令行渲染网页，这样不论数据怎么加载，怎么加密，对于标准的浏览器都无能为力了。软件的原理跟以前介绍的一个<a href="http://bluehua.org/2010/07/23/1397.html">命令行web截图工具</a>一样,内嵌一个qt4的webkit，然后渲染到xvfb虚拟出的xserver上。不同是这个提供了js的api，用起来方便，可以用来做爬虫，站点监控，服务端截图。</p>
<p>使用方法：<br />
第一步,安装phantomjs<br />
Mac os &#038; windows:<br />
直接下载.dmg或.exe安装包即可:<a href="http://code.google.com/p/phantomjs/downloads/list">http://code.google.com/p/phantomjs/downloads/list</a><br />
mac下安装完闭，可执行文件的路径:/Applications/phantomjs.app/Contents/MacOS/phantomjs<br />
ubuntu:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:jerome-etienne<span style="color: #000000; font-weight: bold;">/</span>neoip
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> phantomjs</pre></div></div>

<p>centos 5.3:<br />
折腾开始了。。由于phantomjs的linux版本是通过pyqt4实现的，所以装起来比较麻烦<br />
首先我们需要安装qt4.7.而yum默认安装的是4.1</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;">rpm <span style="color: #660033;">-ivh</span> http:<span style="color: #000000; font-weight: bold;">//</span>software.freivald.com<span style="color: #000000; font-weight: bold;">/</span>centos<span style="color: #000000; font-weight: bold;">/</span>software.freivald.com-1.0.0-1.noarch.rpm
yum update fontconfig fontconfig-devel
yum <span style="color: #c20cb9; font-weight: bold;">install</span> qt4 qt4-devel
<span style="color: #666666; font-style: italic;">#如果已经安装过qt4则执行 yum update qt4 qt4-devel</span></pre></div></div>

<p>安装Xvfb</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;">yum <span style="color: #c20cb9; font-weight: bold;">install</span> xorg-x11-server-Xvfb xorg-x11-server-Xorg xorg-x11-fonts<span style="color: #000000; font-weight: bold;">*</span></pre></div></div>

<p>安装python 2.7,自带的为2.4，没法用</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>python.org<span style="color: #000000; font-weight: bold;">/</span>ftp<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>2.7.2<span style="color: #000000; font-weight: bold;">/</span>Python-2.7.2.tar.bz2
<span style="color: #c20cb9; font-weight: bold;">tar</span> jxvf Python-2.7.2.tar.bz2
<span style="color: #7a0874; font-weight: bold;">cd</span> Python-2.7.2
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--prefix</span>=<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ..</pre></div></div>

<p>安装setup tools</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>pypi.python.org<span style="color: #000000; font-weight: bold;">/</span>packages<span style="color: #000000; font-weight: bold;">/</span>source<span style="color: #000000; font-weight: bold;">/</span>s<span style="color: #000000; font-weight: bold;">/</span>setuptools<span style="color: #000000; font-weight: bold;">/</span>setuptools-0.6c11.tar.gz<span style="color: #666666; font-style: italic;">#md5=7df2a529a074f613b509fb44feefe74e</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf setuptools-0.6c11.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> setuptools-0.6c11
<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python setup.py <span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ..</pre></div></div>

<p>安装sip</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.riverbankcomputing.com<span style="color: #000000; font-weight: bold;">/</span>static<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>sip4<span style="color: #000000; font-weight: bold;">/</span>sip-4.12.4.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf sip-4.12.4.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> sip-4.12.4
<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python configure.py
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ..</pre></div></div>

<p>安装pyqt4</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.riverbankcomputing.com<span style="color: #000000; font-weight: bold;">/</span>static<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>PyQt4<span style="color: #000000; font-weight: bold;">/</span>PyQt-x11-gpl-4.8.5.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf PyQt-x11-gpl-4.8.5.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> PyQt-x11-gpl-4.8.5
<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python configure.py <span style="color: #660033;">-q</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>qt4<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>qmake
<span style="color: #666666; font-style: italic;">#对于64位系统</span>
<span style="color: #666666; font-style: italic;">#/opt/python27/bin/python configure.py -q /usr/lib64/qt4/bin/qmake</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> 
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ..</pre></div></div>

<p>最后安装pyphantomjs</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> pyphantomjs
<span style="color: #7a0874; font-weight: bold;">cd</span> pyphantomjs
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>phantomjs.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>files<span style="color: #000000; font-weight: bold;">/</span>pyphantomjs-1.2.0-source.zip
<span style="color: #c20cb9; font-weight: bold;">unzip</span> pyphantomjs-1.2.0-source.zip
<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python setup.py <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>折腾到这里，pyphantomjs已经安装到了/opt/python27/bin/pyphantomjs<br />
直接执行/opt/python27/bin/pyphantomjs &#8211;help,会发现报错</p>
<pre>
sip.setapi('QString', 2)
ValueError: API 'QString' has already been set to version 1
</pre>
<p>解决方法<br />
编辑/opt/python27/bin/pyphantomjs,在开始追加几句</p>

<div class="wp_syntax"><div class="code overflow"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/opt/python27/bin/python</span>
<span style="color: #808080; font-style: italic;"># EASY-INSTALL-ENTRY-SCRIPT: 'PyPhantomJS==1.2.0','console_scripts','pyphantomjs'</span>
<span style="color: #808080; font-style: italic;">#fix start</span>
<span style="color: #ff7700;font-weight:bold;">import</span> sip
sip.<span style="color: black;">setapi</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'QString'</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
sip.<span style="color: black;">setapi</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'QVariant'</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;">#fix end</span>
__requires__ = <span style="color: #483d8b;">'PyPhantomJS==1.2.0'</span></pre></div></div>

<p>第二步：<br />
下载我们用来解析数据的js脚本:<a href='http://bluehua.org/wp-content/uploads/2011/09/android_itc_daliy_report.zip'>android_itc_daliy_report</a></p>
<p>修改里面的变量:</p>
<pre>
TIMEOUT = 120;//脚本执行超时时间
ACCOUNT = '';//登陆账号
PASSWORD = '';//密码
</pre>
<p>第三步:执行抓取脚本<br />
对于Mac os:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#抓取andriod market的安装总量</span>
<span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>phantomjs.app<span style="color: #000000; font-weight: bold;">/</span>Contents<span style="color: #000000; font-weight: bold;">/</span>MacOS<span style="color: #000000; font-weight: bold;">/</span>phantomjs <span style="color: #660033;">--load-images</span>=no AndroidMarketDailyReport.js
<span style="color: #666666; font-style: italic;">#抓取ITC的每天的安装量,需要制定日期，而且日期必须是web页面里的日期选择框里有的日期</span>
<span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>phantomjs.app<span style="color: #000000; font-weight: bold;">/</span>Contents<span style="color: #000000; font-weight: bold;">/</span>MacOS<span style="color: #000000; font-weight: bold;">/</span>phantomjs <span style="color: #660033;">--load-images</span>=no ITCDailyReport.js 09<span style="color: #000000; font-weight: bold;">/</span>06<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2011</span></pre></div></div>

<p>对于Centos:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#首先保证Xvfb已经启动</span>
Xvfb :<span style="color: #000000;">0</span> <span style="color: #660033;">-screen</span> <span style="color: #000000;">0</span> 1024x768x24 <span style="color: #000000; font-weight: bold;">&amp;</span>
<span style="color: #666666; font-style: italic;">#抓取andriod market的安装量</span>
<span style="color: #007800;">DISPLAY</span>=:<span style="color: #000000;">0</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>pyphantomjs <span style="color: #660033;">--load-images</span>=no <span style="color: #660033;">--ignore-ssl-errors</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span> AndroidMarketDailyReport.js
<span style="color: #666666; font-style: italic;">#抓取ITC的每天的安装量,需要制定日期，而且日期必须是web页面里的日期选择框里有的日期</span>
<span style="color: #007800;">DISPLAY</span>=:<span style="color: #000000;">0</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>python27<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>pyphantomjs <span style="color: #660033;">--load-images</span>=no <span style="color: #660033;">--ignore-ssl-errors</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span> ITCDailyReport.js 09<span style="color: #000000; font-weight: bold;">/</span>06<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2011</span></pre></div></div>

<p>获取输出结果,以Mac os为例:</p>
<p>/Applications/phantomjs.app/Contents/MacOS/phantomjs &#8211;load-images=no ITCDailyReport.js 09/06/2011|grep REPORT<br />
REPORT:	soft_name	0000<br />
REPORT:	soft_name	0000</p>
<p>/Applications/phantomjs.app/Contents/MacOS/phantomjs &#8211;load-images=no AndroidMarketDailyReport.js |grep REPORT<br />
REPORT:	total	0000<br />
REPORT:	real	0000</p>
<p>如果没有输出结果，则说明有异常，账号错误，超时，等等。。</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/09/14/1682.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>乱马～</title>
		<link>http://bluehua.org/2011/04/22/1624.html</link>
		<comments>http://bluehua.org/2011/04/22/1624.html#comments</comments>
		<pubDate>Fri, 22 Apr 2011 06:15:59 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[mxmlc]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tree]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1624</guid>
		<description><![CDATA[~/.bashrc #flex sdk在ubuntu上好好的，到了mac os下就乱码了～～！ mxmlc&#40;&#41; &#123; /Users/hualu/opt/flex_sdk_4.1.0.16076/bin/mxmlc $* &#124; iconv -f gb2312 -t utf-8 &#125; &#160; #tree,一条基本不用的命令，给同学发目录列表用过一次，中文会被编码 tree&#40;&#41; &#123; /opt/local/bin/tree $* &#124; ascii2uni -aK &#125;]]></description>
			<content:encoded><![CDATA[<p>~/.bashrc</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#flex sdk在ubuntu上好好的，到了mac os下就乱码了～～！</span>
mxmlc<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>hualu<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>flex_sdk_4.1.0.16076<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>mxmlc <span style="color: #007800;">$*</span> <span style="color: #000000; font-weight: bold;">|</span> iconv <span style="color: #660033;">-f</span> gb2312 <span style="color: #660033;">-t</span> utf-<span style="color: #000000;">8</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#tree,一条基本不用的命令，给同学发目录列表用过一次，中文会被编码</span>
<span style="color: #c20cb9; font-weight: bold;">tree</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">tree</span> <span style="color: #007800;">$*</span> <span style="color: #000000; font-weight: bold;">|</span> ascii2uni <span style="color: #660033;">-aK</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/04/22/1624.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VimiTunesList for vim on Mac OS X</title>
		<link>http://bluehua.org/2011/04/17/1598.html</link>
		<comments>http://bluehua.org/2011/04/17/1598.html#comments</comments>
		<pubDate>Sun, 17 Apr 2011 03:16:29 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1598</guid>
		<description><![CDATA[2011.4.18更新 增加了一个选项，可以指定一个播放列表 let g:vim_itunes_playlist = “音乐” &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 本来用automator为itunes添加了一个全局搜索的快捷键，无奈快捷键不快捷，点击到激活延迟严重，从itunes选完不能自动返回vim，跟我ubuntu上自己写的mpd搜索不能比。so，写了一个vim插件，效果看我用quicktime录的屏幕(唉，ubuntu上完全没有好用的屏幕录像工具) 第一次加载列表慢点，以后有缓存就瞬间了，刷新缓存用 ctrol+r 安装方法: 下载两个文件 vimiTunesList.vim vimitunes 将vimiTunesList.vim放到 ~/.vim/plugin/目录 将vimitunes放入$PATH里面随便一个目录，比如我的~/bin 使用方法: 开vim或macvim，输入:IT,会加载一次列表，在想要播放的曲目上回车播放，可以vim的搜索方式搜索。]]></description>
			<content:encoded><![CDATA[<p>2011.4.18更新<br />
增加了一个选项，可以指定一个播放列表<br />
let g:vim_itunes_playlist = “音乐”<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
本来用automator为itunes添加了一个全局搜索的快捷键，无奈快捷键不快捷，点击到激活延迟严重，从itunes选完不能自动返回vim，跟我ubuntu上自己写的mpd搜索不能比。so，写了一个vim插件，效果看我用quicktime录的屏幕(唉，ubuntu上完全没有好用的屏幕录像工具)<br />
<embed src="http://www.tudou.com/v/pdgB4RYSA1M/&#038;rpid=2816441/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed></p>
<p>第一次加载列表慢点，以后有缓存就瞬间了，刷新缓存用 ctrol+r</p>
<p>安装方法:<br />
下载两个文件<br />
<a href="http://code-of-emptyhua.googlecode.com/svn/trunk/vim/vimiTunesList.vim">vimiTunesList.vim</a><br />
<a href="http://code-of-emptyhua.googlecode.com/svn/trunk/vim/vimitunes">vimitunes</a><br />
将vimiTunesList.vim放到 ~/.vim/plugin/目录<br />
将vimitunes放入$PATH里面随便一个目录，比如我的~/bin</p>
<p>使用方法:<br />
开vim或macvim，输入:IT,会加载一次列表，在想要播放的曲目上回车播放，可以vim的搜索方式搜索。</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/04/17/1598.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个vpn越墙用的路由表修改工具</title>
		<link>http://bluehua.org/2011/04/14/1560.html</link>
		<comments>http://bluehua.org/2011/04/14/1560.html#comments</comments>
		<pubDate>Thu, 14 Apr 2011 02:46:32 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[auto]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[route]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1560</guid>
		<description><![CDATA[刚换到mac，昨天搞定翻墙这事，自己有个vpn，但是几乎没用，因为开了vpn所有连接就都走vpn了，与内网测试机无缘。不过直到昨天发现，路由表可以搞定这事。。 原理是：默认网关不选vpn，把需要访问网站的ip添加到路由表，路由到vpn网关即可~ 工具:autovpnconf 下载之后用文本编辑器修改一下里面需要使用vpn的网站列表，我只加了几个 前提:连接vpn，并且vpn不是默认网关 mac下只要不选“通过vpn连接发送所有通信”即可 ubuntu下,连接vpn之后就成默认网关了,可以手动改回来 sudo route del default #xx.xx.xx.xx是网关ip eth0是有线网卡设备名，如果用无线就是 wlan0 sudo route add default gw xx.xx.xx.xx dev eth0 之后执行: sudo ./autovpnconf OK了，这样以来只有指定的网站才会走vpn。 ！！！每次连接vpn都需要执行一下～～！]]></description>
			<content:encoded><![CDATA[<p>刚换到mac，昨天搞定翻墙这事，自己有个vpn，但是几乎没用，因为开了vpn所有连接就都走vpn了，与内网测试机无缘。不过直到昨天发现，路由表可以搞定这事。。<br />
原理是：默认网关不选vpn，把需要访问网站的ip添加到路由表，路由到vpn网关即可~<br />
工具:<a href="http://code-of-emptyhua.googlecode.com/svn/trunk/util/autovpnconf">autovpnconf</a><br />
下载之后用文本编辑器修改一下里面需要使用vpn的网站列表，我只加了几个</p>
<p>前提:连接vpn，并且vpn不是默认网关<br />
mac下只要不选“通过vpn连接发送所有通信”即可<br />
ubuntu下,连接vpn之后就成默认网关了,可以手动改回来</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> route del default
<span style="color: #666666; font-style: italic;">#xx.xx.xx.xx是网关ip eth0是有线网卡设备名，如果用无线就是 wlan0</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> route add default gw xx.xx.xx.xx dev eth0</pre></div></div>

<p>之后执行:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> .<span style="color: #000000; font-weight: bold;">/</span>autovpnconf</pre></div></div>

<p>OK了，这样以来只有指定的网站才会走vpn。<br />
！！！每次连接vpn都需要执行一下～～！</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/04/14/1560.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一段指定附件下载名的apache配置</title>
		<link>http://bluehua.org/2011/03/21/1554.html</link>
		<comments>http://bluehua.org/2011/03/21/1554.html#comments</comments>
		<pubDate>Mon, 21 Mar 2011 10:33:28 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_headers]]></category>

		<guid isPermaLink="false">http://bluehua.org/2011/03/21/1554.html</guid>
		<description><![CDATA[继续优化 SetEnvIf Request_URI &#34;\/SAVE\/(.*)$&#34; save_file_name=&#34;$1&#34; SetEnvIf Request_URI &#34;\.(jpg&#124;jpeg&#124;png&#124;gif&#124;bmp)$&#34; is_image_file #除了图片，其他文件直接访问均提示下载，防止上传了js，css，html等不应该被浏览器加载的文件 Header set Content-Disposition attachment env=!is_image_file Header set Content-Disposition &#34;attachment; filename=%{save_file_name}e&#34; env=save_file_name RewriteEngine On RewriteRule ^/(.*)\/SAVE\/.*$ /$1 [L] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 优化一下～ SetEnvIf Request_URI &#34;\/SAVE\/(.*)$&#34; save_file_name=&#34;$1&#34; Header set Content-Disposition &#34;attachment; filename=%{save_file_name}e&#34; env=save_file_name RewriteEngine On RewriteRule ^/(.*)\/SAVE\/.*$ /$1 [L] 只需要访问 ： &#8230;.5_1300238850.jpg/SAVE/我的图片.jpg 就可以了，ie下文件名后面竟然也不会出现“[1]”了～ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- SetEnvIf Request_URI &#34;_DOWN_NAME_(.*)_DOWN_EXT_(.*)$&#34; save_file_name=&#34;$1.$2&#34; #下面这种ie下有问题 [...]]]></description>
			<content:encoded><![CDATA[<p>继续优化</p>

<div class="wp_syntax"><div class="code overflow"><pre class="text" style="font-family:monospace;">SetEnvIf Request_URI &quot;\/SAVE\/(.*)$&quot; save_file_name=&quot;$1&quot;
SetEnvIf Request_URI &quot;\.(jpg|jpeg|png|gif|bmp)$&quot; is_image_file
#除了图片，其他文件直接访问均提示下载，防止上传了js，css，html等不应该被浏览器加载的文件
Header set Content-Disposition attachment env=!is_image_file
Header set Content-Disposition &quot;attachment; filename=%{save_file_name}e&quot; env=save_file_name
RewriteEngine On
RewriteRule ^/(.*)\/SAVE\/.*$ /$1 [L]</pre></div></div>

<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
优化一下～</p>

<div class="wp_syntax"><div class="code overflow"><pre class="text" style="font-family:monospace;">SetEnvIf Request_URI &quot;\/SAVE\/(.*)$&quot; save_file_name=&quot;$1&quot;
Header set Content-Disposition &quot;attachment; filename=%{save_file_name}e&quot; env=save_file_name
RewriteEngine On
RewriteRule ^/(.*)\/SAVE\/.*$ /$1 [L]</pre></div></div>

<p>只需要访问 ： &#8230;.5_1300238850.jpg/SAVE/我的图片.jpg 就可以了，ie下文件名后面竟然也不会出现“[1]”了～<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>

<div class="wp_syntax"><div class="code overflow"><pre class="text" style="font-family:monospace;">SetEnvIf Request_URI &quot;_DOWN_NAME_(.*)_DOWN_EXT_(.*)$&quot; save_file_name=&quot;$1.$2&quot;
#下面这种ie下有问题
#SetEnvIf Request_URI &quot;_DOWN_NAME_(.*)$&quot; save_file_name=&quot;$1&quot;
Header set Content-Disposition &quot;attachment; filename=%{save_file_name}e&quot; env=save_file_name
RewriteEngine On
RewriteRule ^/(.*)\._DOWN_NAME_.*$ /$1 [L]</pre></div></div>

<p>实现的效果:<br />
假设一个附件上传后的地址是:</p>
<p>http://foo.com/03/21/1bc5b77f3e50b7fbe12c792ee438da45_1300688708.jpg</p>
<p>如果想要指定下载名,则访问:</p>
<p>http://foo.com/03/21/1bc5b77f3e50b7fbe12c792ee438da45_1300688708.jpg._DOWN_NAME_我的图片_DOWN_EXT_jpg</p>
<p>ie下的效果:<br />
<a href="http://bluehua.org/wp-content/uploads/2011/03/screenshot_127.png"><img src="http://bluehua.org/wp-content/uploads/2011/03/screenshot_127.png" alt="screenshot_127.png" title="screenshot_127.png"/></a></p>
<p>chrome下的效果:<br />
<a href="http://bluehua.org/wp-content/uploads/2011/03/screenshot_128.png"><img src="http://bluehua.org/wp-content/uploads/2011/03/screenshot_1281.png" alt="screenshot_128.png" title="screenshot_128.png"/></a></p>
<p>FF下的效果,很杯具:<br />
<a href="http://bluehua.org/wp-content/uploads/2011/03/screenshot_129.png"><img src="http://bluehua.org/wp-content/uploads/2011/03/screenshot_1291.png" alt="screenshot_129.png" title="screenshot_129.png"/></a></p>
<p>&#8212;&#8212;&#8212;&#8211;<br />
vim->email->wordpress</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/03/21/1554.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级了一下wordpress，貌似出bug了</title>
		<link>http://bluehua.org/2011/02/28/1548.html</link>
		<comments>http://bluehua.org/2011/02/28/1548.html#comments</comments>
		<pubDate>Mon, 28 Feb 2011 02:36:16 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bluehua.org/2011/02/28/1548.html</guid>
		<description><![CDATA[WordPress升级到3.1发现用来排除某些目录feed输出的代码不好用了，bug?，有空再整。。 function blue_feed_cat_exclude&#40;$query&#41; &#123; if &#40;$query-&#62;is_feed&#41; &#123; $query-&#62;set&#40;'cat','-48,-179'&#41;; &#125; return $query; &#125; &#160; add_filter&#40;'pre_get_posts','blue_feed_cat_exclude'&#41;; &#8212;&#8212;&#8212;&#8211; vim->email->wordpress]]></description>
			<content:encoded><![CDATA[<p>WordPress升级到3.1发现用来排除某些目录feed输出的代码不好用了，bug?，有空再整。。</p>

<div class="wp_syntax"><div class="code overflow"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> blue_feed_cat_exclude<span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_feed</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cat'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'-48,-179'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$query</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pre_get_posts'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'blue_feed_cat_exclude'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>&#8212;&#8212;&#8212;&#8211;<br />
vim->email->wordpress</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/02/28/1548.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>分享个pidgin插件</title>
		<link>http://bluehua.org/2010/12/29/1518.html</link>
		<comments>http://bluehua.org/2010/12/29/1518.html#comments</comments>
		<pubDate>Wed, 29 Dec 2010 13:25:24 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[pidgin]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1518</guid>
		<description><![CDATA[原帖:http://bluehua.org/2010/01/12/796.html 当年我会用pidgin同时开3个IM:gtalk,qq,msn. 于是我在pidgin里建了两个情景模式 work:三个都在线，其中qq隐身 at home:msn下线。 回到家就点到at home，但msn上还是难免有些烦人的消息发给我，让我改这改那。。，凭着饥渴精神，于是我就想出了上面的点子，完全不用伤脑筋。有问题打我电话吧，至少你得先知道我手机号^_^ 好吧，出于学习的目的，现在我把它完全重写成一个标准的pidgin插件，并且支持定时功能，用ubuntu的同学如果有同样烦恼可以试下～ 用ubuntu 10.10的话可以直接从源里安装 sudo add-apt-repository ppa:emptyhua/toolbox sudo apt-get update sudo apt-get install pidgin-autostatus 旧版本麻烦点 sudo apt-get install libglib2.0-dev libnm-glib-dev libdbus-glib-1-dev network-manager-dev libgtk2.0-dev libtool pidgin-dev svn checkout http://pidgin-auto-status.googlecode.com/svn/trunk/ pidgin-autostatus cd pidgin-autostatus make sudo make install google code项目主页: http://code.google.com/p/pidgin-auto-status/ screenshot:]]></description>
			<content:encoded><![CDATA[<p>原帖:<a href="http://bluehua.org/2010/01/12/796.html">http://bluehua.org/2010/01/12/796.html</a></p>
<p>当年我会用pidgin同时开3个IM:gtalk,qq,msn. 于是我在pidgin里建了两个情景模式 work:三个都在线，其中qq隐身 at home:msn下线。 回到家就点到at home，但msn上还是难免有些烦人的消息发给我，让我改这改那。。，凭着饥渴精神，于是我就想出了上面的点子，完全不用伤脑筋。有问题打我电话吧，至少你得先知道我手机号^_^</p>
<p>好吧，出于学习的目的，现在我把它完全重写成一个标准的pidgin插件，并且支持定时功能，用ubuntu的同学如果有同样烦恼可以试下～</p>
<p>用ubuntu 10.10的话可以直接从源里安装</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:emptyhua<span style="color: #000000; font-weight: bold;">/</span>toolbox
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> pidgin-autostatus</pre></div></div>

<p>旧版本麻烦点</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libglib2.0-dev libnm-glib-dev  libdbus-glib-<span style="color: #000000;">1</span>-dev network-manager-dev libgtk2.0-dev libtool pidgin-dev
<span style="color: #c20cb9; font-weight: bold;">svn</span> checkout http:<span style="color: #000000; font-weight: bold;">//</span>pidgin-auto-status.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>trunk<span style="color: #000000; font-weight: bold;">/</span> pidgin-autostatus
<span style="color: #7a0874; font-weight: bold;">cd</span> pidgin-autostatus
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>google code项目主页: <a href="http://code.google.com/p/pidgin-auto-status/">http://code.google.com/p/pidgin-auto-status/</a></p>
<p>screenshot:</p>
<p><img src="http://bluehua.org/wp-content/uploads/2010/12/screenshot_103.png" /></p>
<p><img src="http://bluehua.org/wp-content/uploads/2010/12/screenshot_106.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/12/29/1518.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>终于可以直接在vim里编辑日志了</title>
		<link>http://bluehua.org/2010/11/28/1480.html</link>
		<comments>http://bluehua.org/2010/11/28/1480.html#comments</comments>
		<pubDate>Sun, 28 Nov 2010 14:58:55 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[blogo2]]></category>
		<category><![CDATA[mail2blog]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bluehua.org/2010/11/28/1480.html</guid>
		<description><![CDATA[最终我还是给blogo2增加了一个不实用的通过邮件编辑日志的功能，需要加一个#edit:BLOGID的标记，但是因为邮件客户端跟本不知道已发blog的id，所以功能略显鸡肋。这绝对是我专用的功能,在bin目录又加了一个小命令,只需在vim里输入:r!wpblog bluehua.org 便可以把最新的blog拽回来，包括blogid wpblog的内容 #!/usr/bin/env python import sys import xmlrpclib import getpass import os &#160; ''' A simple tool for dump blog powered by wordpress For example: in vim, dump the last webblog into current buffer :r!wpblog myblog.domain ''' &#160; #make sure the stderr is the control terminal if os.name == 'posix': sys.stderr = open&#40;'/dev/tty', [...]]]></description>
			<content:encoded><![CDATA[<p>最终我还是给<a href="http://www.blogo2.com">blogo2</a>增加了一个不实用的通过邮件编辑日志的功能，需要加一个#edit:BLOGID的标记，但是因为邮件客户端跟本不知道已发blog的id，所以功能略显鸡肋。这绝对是我专用的功能,在bin目录又加了一个小命令,只需在vim里输入:r!wpblog bluehua.org 便可以把最新的blog拽回来，包括blogid</p>
<p>wpblog的内容</p>

<div class="wp_syntax"><div class="code overflow"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span> 
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">xmlrpclib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">getpass</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
&nbsp;
<span style="color: #483d8b;">''</span><span style="color: #483d8b;">'
A simple tool for dump blog powered by wordpress
For example: in vim, dump the last webblog into current buffer
:r!wpblog myblog.domain
'</span><span style="color: #483d8b;">''</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#make sure the stderr is the control terminal </span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">name</span> == <span style="color: #483d8b;">'posix'</span>:
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span> = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/dev/tty'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">2</span>: 
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&gt;&gt;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>,<span style="color: #483d8b;">''</span><span style="color: #483d8b;">'
Usage:
wpblog myblog.domain [blogid]
    '</span><span style="color: #483d8b;">''</span>
    exit<span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
rpc = <span style="color: #483d8b;">'http://%s/xmlrpc.php'</span> <span style="color: #66cc66;">%</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&gt;&gt;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>Username:'</span>
<span style="color: #dc143c;">user</span> = <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
passwd = <span style="color: #dc143c;">getpass</span>.<span style="color: #dc143c;">getpass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Password:'</span><span style="color: black;">&#41;</span>
&nbsp;
api = <span style="color: #dc143c;">xmlrpclib</span>.<span style="color: black;">ServerProxy</span><span style="color: black;">&#40;</span>rpc<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">try</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">2</span>:
        blog = api.<span style="color: black;">metaWeblog</span>.<span style="color: black;">getPost</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>, <span style="color: #dc143c;">user</span>, passwd<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        blogs = api.<span style="color: black;">metaWeblog</span>.<span style="color: black;">getRecentPosts</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>, <span style="color: #dc143c;">user</span>, passwd, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>blogs<span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&gt;&gt;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>, <span style="color: #483d8b;">'no blog returned~'</span>
            exit<span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        blog = blogs<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #dc143c;">xmlrpclib</span>.<span style="color: black;">Fault</span>, ex:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #66cc66;">&gt;&gt;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>, ex.<span style="color: black;">faultString</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
        exit<span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'#cats:%s'</span> <span style="color: #66cc66;">%</span> u<span style="color: #483d8b;">','</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>blog<span style="color: black;">&#91;</span><span style="color: #483d8b;">'categories'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'#tags:%s'</span> <span style="color: #66cc66;">%</span> blog<span style="color: black;">&#91;</span><span style="color: #483d8b;">'mt_keywords'</span><span style="color: black;">&#93;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'#edit:%s'</span> <span style="color: #66cc66;">%</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>blog<span style="color: black;">&#91;</span><span style="color: #483d8b;">'postid'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> blog<span style="color: black;">&#91;</span><span style="color: #483d8b;">'description'</span><span style="color: black;">&#93;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>&#8212;&#8212;&#8212;&#8211;<br />
post by gmail~</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/11/28/1480.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.221 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-22 08:06:22 -->

