<?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>Behind the Code &#187; 技术快餐</title>
	<atom:link href="http://yinwm.com/category/%e6%8a%80%e6%9c%af%e5%bf%ab%e9%a4%90/feed/" rel="self" type="application/rss+xml" />
	<link>http://yinwm.com</link>
	<description>Just Do It</description>
	<lastBuildDate>Wed, 04 Jan 2012 03:54:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>我现在开始倾向于使用Hg了</title>
		<link>http://yinwm.com/2010/04/now-i-prfer-to-use-hg/</link>
		<comments>http://yinwm.com/2010/04/now-i-prfer-to-use-hg/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 15:19:05 +0000</pubDate>
		<dc:creator>yinwm</dc:creator>
				<category><![CDATA[技术快餐]]></category>
		<category><![CDATA[随想]]></category>
		<category><![CDATA[dvcs]]></category>

		<guid isPermaLink="false">http://yinwm.com/?p=194</guid>
		<description><![CDATA[用过一段时间的git，感觉非常之爽歪歪，但是也发现了一些问题，比如团队的成员并不是很容易的接受git，觉得麻烦。而且对于在含有*nix和windows上面同时开发的团队，经常要在不同的环境中处理回车换行的问题。这时候git不是不能解决，而是一遍一遍的给团队的成员灌输这些东西，成本是非常高的。 这两天抽空研究了一下Hg，发现国内外的“实用主义者”更倾向于使用这个。她和svn的一些使用习惯差不多，比如diff时候的版本号都是使用冒号(:)分割等等。这些小细节往往则是团队开发中选择一个工具的比较重要的因素。 我决定继续研究一段hg，然后考虑一下是否更加合适在团队中使用。]]></description>
			<content:encoded><![CDATA[<p>用过一段时间的<a href="http://git-scm.com/" target="_blank">git</a>，感觉非常之爽歪歪，但是也发现了一些问题，比如团队的成员并不是很容易的接受git，觉得麻烦。而且对于在含有*nix和windows上面同时开发的团队，经常要在不同的环境中处理回车换行的问题。这时候git不是不能解决，而是一遍一遍的给团队的成员灌输这些东西，成本是非常高的。</p>
<p>这两天抽空研究了一下<a href="http://hg-scm.org/" target="_blank">Hg</a>，发现国内外的“实用主义者”更倾向于使用这个。她和svn的一些使用习惯差不多，比如diff时候的版本号都是使用冒号(:)分割等等。这些小细节往往则是团队开发中选择一个工具的比较重要的因素。</p>
<p>我决定继续研究一段hg，然后考虑一下是否更加合适在团队中使用。</p>
]]></content:encoded>
			<wfw:commentRss>http://yinwm.com/2010/04/now-i-prfer-to-use-hg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>展开 shorturl 的脚本</title>
		<link>http://yinwm.com/2009/10/fullurl/</link>
		<comments>http://yinwm.com/2009/10/fullurl/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 11:06:30 +0000</pubDate>
		<dc:creator>yinwm</dc:creator>
				<category><![CDATA[技术快餐]]></category>

		<guid isPermaLink="false">http://yinwm.cn/?p=79</guid>
		<description><![CDATA[鉴于 bitly 从我们的正常视野消失，我刚刚写了一个脚本，从http://untr.im 扩展原始的URL， 内容如下： #!/bin/bash URL=$1 if [ -z "$URL" ] then echo "Usage : fullurl " exit fi TS=`date +"%s"` FILE=/tmp/fullurl-$TS wget -q -O "$FILE" --post-data "url=$1" http://untr.im/api/ajax/api awk -F 'href="' '{print $3}' "$FILE" &#124; awk -F '" rel="' '{print $1}' rm "$FILE"]]></description>
			<content:encoded><![CDATA[<p>鉴于 bitly 从我们的正常视野消失，我刚刚写了一个脚本，从http://untr.im 扩展原始的URL， 内容如下：</p>
<pre lang="bash">#!/bin/bash

URL=$1

if [ -z "$URL" ]
then
    echo "Usage : fullurl "
    exit
fi

TS=`date +"%s"`

FILE=/tmp/fullurl-$TS

wget -q -O "$FILE" --post-data "url=$1" http://untr.im/api/ajax/api

awk -F 'href="' '{print $3}' "$FILE" | awk -F '" rel="' '{print $1}'

rm "$FILE"</pre>
]]></content:encoded>
			<wfw:commentRss>http://yinwm.com/2009/10/fullurl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用 OpenVPN 翻墙</title>
		<link>http://yinwm.com/2009/08/freevpn-on-linuxopenvpn/</link>
		<comments>http://yinwm.com/2009/08/freevpn-on-linuxopenvpn/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 17:10:23 +0000</pubDate>
		<dc:creator>yinwm</dc:creator>
				<category><![CDATA[技术快餐]]></category>

		<guid isPermaLink="false">http://yinwm.cn/?p=65</guid>
		<description><![CDATA[找到一个很好的免费的vpn提供商，alonweb。在Linux上，使用OpenVPN就可以连上使用。 具体步骤如下： 登录 alonweb 创建一个用户 下载 alonweb 提供的 OpenVPN 配置 解压缩 OpenVPN 的配置，你会看到两个文件，alonweb.conf 和 alonweb.crt 使用 OpenVPN 链接 启动命令如下： $ openvpn --config /path/to/alonweb.conf 但是这里面出现了一个问题，报错： Mon Aug 3 23:59:25 2009 ROUTE default_gateway=192.168.1.1 Mon Aug 3 23:59:25 2009 Note: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1) Mon Aug 3 23:59:25 2009 Note: Attempting fallback to kernel [...]]]></description>
			<content:encoded><![CDATA[<p>找到一个很好的免费的vpn提供商，<a href="http://alonweb.com" target="_blank">alonweb</a>。在Linux上，使用OpenVPN就可以连上使用。</p>
<p>具体步骤如下：</p>
<ol>
<li>登录 alonweb 创建一个用户</li>
<li>下载 alonweb 提供的 OpenVPN 配置</li>
<li>解压缩 OpenVPN 的配置，你会看到两个文件，alonweb.conf 和 alonweb.crt</li>
<li>使用 OpenVPN 链接</li>
</ol>
<p>启动命令如下：</p>
<pre lang="bash">$ openvpn --config /path/to/alonweb.conf</pre>
<p>但是这里面出现了一个问题，报错：</p>
<pre lang="bash">Mon Aug  3 23:59:25 2009 ROUTE default_gateway=192.168.1.1
Mon Aug  3 23:59:25 2009 Note: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
Mon Aug  3 23:59:25 2009 Note: Attempting fallback to kernel 2.2 TUN/TAP interface
Mon Aug  3 23:59:25 2009 Cannot allocate TUN/TAP dev dynamically
Mon Aug  3 23:59:25 2009 Exiting</pre>
<p>这让我很是奇怪，通过 google，发现可能是 tun 没有启动，但是查看 /dev/net/tun 确实存在，并且使用 modprobe 也没问题。很是奇怪，但是问题一定存在 tun 上。<br />
通过仔细研读 openvpn 的帮助，发现使用 openvpn 可以创建一个持久化通道（ Create a persistent tunnel on platforms which  support  them  such  as<br />
Linux.）。尝试使用这个命令</p>
<pre lang="bash">$ openvpn --mktun</pre>
<p>然后再次使用 ifconfig -a 则可以看到这个新建的设备</p>
<pre lang="bash">tun0      Link encap:未指定  硬件地址 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet 地址:172.32.0.50  点对点:172.32.0.49  掩码:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  跃点数:1
          接收数据包:9273 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:10241 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:100
          接收字节:5211348 (5.2 MB)  发送字节:1626932 (1.6 MB)</pre>
<p>这是再使用 openvpn 即可</p>
<pre lang="bash">$ openvpn --config /path/to/alonweb.conf --dev tun0</pre>
<p>终于看到 Facebook 了</p>
]]></content:encoded>
			<wfw:commentRss>http://yinwm.com/2009/08/freevpn-on-linuxopenvpn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让Apache使用操作系统的用户认证</title>
		<link>http://yinwm.com/2008/09/%e8%ae%a9apache%e4%bd%bf%e7%94%a8%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e7%9a%84%e7%94%a8%e6%88%b7%e8%ae%a4%e8%af%81/</link>
		<comments>http://yinwm.com/2008/09/%e8%ae%a9apache%e4%bd%bf%e7%94%a8%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e7%9a%84%e7%94%a8%e6%88%b7%e8%ae%a4%e8%af%81/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 02:59:41 +0000</pubDate>
		<dc:creator>yinwm</dc:creator>
				<category><![CDATA[技术快餐]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://yinwm.cn/wordpress/?p=53</guid>
		<description><![CDATA[Apache的认证体系很不错，但是他并不是和操作系统天然结合的。如果想要让Apache使用操作系统的用户进行认证，可以使用 mod_auth_shadow 或者 mod_authnz_external 来进行。 我使用的是 mod_auth_shadow，因为简单嘛。 下载之后自己进行编译，会有两个有用的文件，mod_auth_shadow.so 和 validate 。 配置Apache，我使用的是Apache 2.2 加载module，LoadModule auth_shadow_module /path-to/mod_auth_shadow.so 配置 VirtualHost添加如下几行       AuthName what-ever-you-like       AuthShadow on       AuthType Basic       require valid-user 还可以使用 require user/grouprequire user user1 user2require group group1 group2 这样你就可以使用了。 注意， 其中的 validate 是进行真正认证的程序， mod_auth_shadow 是会通过 pipe 和 validate 进行交互的。 validate [...]]]></description>
			<content:encoded><![CDATA[<p>Apache的认证体系很不错，但是他并不是和操作系统天然结合的。如果想要让Apache使用操作系统的用户进行认证，可以使用 <a href="http://mod-auth-shadow.sourceforge.net/" target="_blank">mod_auth_shadow</a> 或者 <a href="http://www.unixpapa.com/mod_auth_external.html" target="_blank">mod_authnz_external</a> 来进行。
<div></div>
<div>我使用的是 mod_auth_shadow，因为简单嘛。</div>
<div></div>
<div>下载之后自己进行编译，会有两个有用的文件，mod_auth_shadow.so 和 validate 。</div>
<div></div>
<div>配置Apache，我使用的是Apache 2.2</div>
<div>
<ol>
<li>加载module，<br />LoadModule auth_shadow_module /path-to/mod_auth_shadow.so</p>
</li>
<li>配置 VirtualHost<br />添加如下几行<br />       AuthName what-ever-you-like<br />       AuthShadow on<br />       AuthType Basic<br />       require valid-user
</li>
<li>还可以使用 require user/group<br />require user user1 user2<br />require group group1 group2</li>
</ol>
<div>这样你就可以使用了。</div>
<div></div>
<div>注意，</div>
<div>其中的 validate 是进行真正认证的程序， mod_auth_shadow 是会通过 pipe 和 validate 进行交互的。 validate 的存放位置必须是 /usr/local/sbin/ 并且，由于 Apache 运行之后会切换成为其他的用户，所以你还要给 validate setuid 为 root。</div>
<div>chmod u+s validate</div>
<div></div>
<div></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yinwm.com/2008/09/%e8%ae%a9apache%e4%bd%bf%e7%94%a8%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e7%9a%84%e7%94%a8%e6%88%b7%e8%ae%a4%e8%af%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>判断js里面function的使用情况</title>
		<link>http://yinwm.com/2007/01/%e5%88%a4%e6%96%adjs%e9%87%8c%e9%9d%a2function%e7%9a%84%e4%bd%bf%e7%94%a8%e6%83%85%e5%86%b5/</link>
		<comments>http://yinwm.com/2007/01/%e5%88%a4%e6%96%adjs%e9%87%8c%e9%9d%a2function%e7%9a%84%e4%bd%bf%e7%94%a8%e6%83%85%e5%86%b5/#comments</comments>
		<pubDate>Tue, 16 Jan 2007 07:16:39 +0000</pubDate>
		<dc:creator>yinwm</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[技术快餐]]></category>

		<guid isPermaLink="false">http://yinwm.cn/wordpress/?p=22</guid>
		<description><![CDATA[今天，我开出了一个新的分类——“技术快餐” 。它的目的，就是在短时间内，使用一些技巧或者什么手法，来解决身边的一些“小”问题。既然是快餐，那么他就可能投机取巧，并且很有可能他就不是一个非常 完美的解决方案。但是毕竟快嘛，用起来简单，方便，能够大体上得到一个（大致）精确的结果，我就满意了。 今天说一下如何判断js里面function的使用情况。 问题描述：我现在要调查一下线上服务的loadtime情况，其中能够奏效的很明显的一点就是较少js的体积。这里并不是讲究如何去压缩等等。而是一个简单的调查。 现在已经存在了大量的js lib，相信一些web的developer手上也有一些自己封装好的lib。用的时候，一个include，很是方便。但是当你在两大的lib里面，东 拼西凑的完成你的功能的时候，其实也有一部分存在的代码，从来也没有执行过一次。这个时候，找到并处理他们是一个很有意义的事情。 思路：在每一个function里面，加入一个log，这样，当这个function被调用的时候，我就知道了，当覆盖了全部（或者大部分）的feature以后，js function的使用率自然一目了然。 log，不用什么高深的log4js等等，就是简单的apache access log就可以了。 在页面中动态的生成一个image对象，然后当需要记录log的时候，只要把image对象的src设置成为一个标记就可以。这样在apache的access_log当中就会有记录了。 实施：使用sed命令来给每一个需要统计的js做一下处理。 比如，你有一个方法叫做 function a () { … } 处理以后，变成 function a() { ltimg.src=”xxx” mce_src=”xxx”; … } 这样就达到了记录的目的了。 下面附上代码： jsfuncname.sh sed -e ’s/function \(.*\)\(.*\){/function \1 \2 { ltimg.src=”\/images\/ltimg.jpg?n=\1″ mce_src=”\/images\/ltimg.jpg?n=\1″;/g’ $1 &#124; sed -e ’s/\(.*\)=\(.*\)function\(.*\){/\1=\2function\3{ ltimg.src=”\/images\/ltimg.jpg?n=\1″ mce_src=”\/images\/ltimg.jpg?n=\1″;/g’ &#124; sed -e ‘1i\ if (typeof(ltimg) [...]]]></description>
			<content:encoded><![CDATA[<p>今天，我开出了一个新的分类——“技术快餐”<br />
。它的目的，就是在短时间内，使用一些技巧或者什么手法，来解决身边的一些“小”问题。既然是快餐，那么他就可能投机取巧，并且很有可能他就不是一个非常<br />
完美的解决方案。但是毕竟快嘛，用起来简单，方便，能够大体上得到一个（大致）精确的结果，我就满意了。</p>
<p>今天说一下如何判断js里面function的使用情况。</p>
<p>问题描述：我现在要调查一下线上服务的loadtime情况，其中能够奏效的很明显的一点就是较少js的体积。这里并不是讲究如何去压缩等等。而是一个简单的调查。<br />
现在已经存在了大量的js<br />
lib，相信一些web的developer手上也有一些自己封装好的lib。用的时候，一个include，很是方便。但是当你在两大的lib里面，东<br />
拼西凑的完成你的功能的时候，其实也有一部分存在的代码，从来也没有执行过一次。这个时候，找到并处理他们是一个很有意义的事情。</p>
<p>思路：在每一个function里面，加入一个log，这样，当这个function被调用的时候，我就知道了，当覆盖了全部（或者大部分）的feature以后，js function的使用率自然一目了然。<br />
log，不用什么高深的log4js等等，就是简单的apache access log就可以了。<br />
在页面中动态的生成一个image对象，然后当需要记录log的时候，只要把image对象的src设置成为一个标记就可以。这样在apache的access_log当中就会有记录了。</p>
<p>实施：使用sed命令来给每一个需要统计的js做一下处理。<br />
比如，你有一个方法叫做<br />
function a () {<br />
…<br />
}<br />
处理以后，变成<br />
function a() {<br />
ltimg.src=”xxx” mce_src=”xxx”;<br />
…<br />
}<br />
这样就达到了记录的目的了。<br />
下面附上代码：<br />
jsfuncname.sh<br />
sed -e ’s/function \(.*\)\(.*\){/function \1 \2 {<br />
ltimg.src=”\/images\/ltimg.jpg?n=\1″<br />
mce_src=”\/images\/ltimg.jpg?n=\1″;/g’ $1 | sed -e<br />
’s/\(.*\)=\(.*\)function\(.*\){/\1=\2function\3{<br />
ltimg.src=”\/images\/ltimg.jpg?n=\1″<br />
mce_src=”\/images\/ltimg.jpg?n=\1″;/g’ | sed -e ‘1i\<br />
if (typeof(ltimg) == “undefined”) ltimg=new Image();<br />
‘</p>
<p>使用方法，吧这段sh帖成一个sh文件，然后执行<br />
sh jsfuncname.sh  filename.js  &gt;  newfile.js<br />
这样newfile就是新的生成好的文件了。</p>
<p>下面是我测试用的一段code，<br />
var a = function () {<br />
aaa;<br />
}</p>
<p>function a() {<br />
}</p>
<p>function a () {<br />
}</p>
<p>function a (a,b,) {<br />
}</p>
<p>function a() { //tt<br />
}</p>
<p>function a () { bb;<br />
}</p>
<p>function a() { bb;}</p>
<p>(function a() {bb;})</p>
<p>var f= (function() { bb;})</p>
<p>if (typeof (a) == “function”) {<br />
}</p>
<p>if (typeof (a) == “function”)<br />
{}</p>
<p>if (typeof (a) == “function”) {}<br />
if (typeof (a) == “function” &amp;&amp; typeof (a) == “undefined”) {bb;}<br />
if (typeof (a) == “undefined” &amp;&amp; typeof (a) == “function”) {bb;}</p>
<p>至少，在我使用的环境下，他的表现还是完美的。</p>
]]></content:encoded>
			<wfw:commentRss>http://yinwm.com/2007/01/%e5%88%a4%e6%96%adjs%e9%87%8c%e9%9d%a2function%e7%9a%84%e4%bd%bf%e7%94%a8%e6%83%85%e5%86%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

