<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.9.2" -->
<rss version="0.92">
<channel>
	<title>Skiyo</title>
	<link>http://www.skiyo.cn</link>
	<description>Everyone is a newbie!</description>
	<lastBuildDate>Thu, 22 Jul 2010 03:25:57 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>将google ssl设置为IE8的默认搜索引擎..</title>
		<description><![CDATA[现在的google..被墙的概率大大增加..随便查点很正常的东西都会被墙..
所以我们需要手工改动一下..让ie8的默认搜索引擎改为google ssl.
首先你得安装一下google的搜索引擎..如果你的浏览器没有安装..
到这里下载一下 http://www.ieaddons.com/cn/search/?search=google
安装以后 运行 regedit 打开注册表
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchScopes
下面几项就是你浏览器的搜索引擎 你需要找到google的那一项..
在我这里这一项的名字叫:{866D1713-F33D-4C28-81E5-B969AB17DA98}
下面需要做三个步骤
1.双击名字为URL键值 将其改为 https://encrypted.google.com/search?hl=zh-CN&#38;q={searchTerms}
2.新建一个DWORD值. 名称为ShowSearchSuggestions 值为十六进制 1
3.新建一个字符串值.名称为SuggestionsURL_JSON 值为 https://clients1.google.com/complete/search?hl=zh-CN&#38;output=firefox&#38;client=firefox&#38;q={searchTerms}
2和3都是为搜索建议提供功能的 如果你已经有键值 就把它改一下..
然后关闭注册表 重启IE8 再去搜索地址栏试试吧 嘿嘿~
如果你是Firefox或者chrome 去找个插件就可以咯..
]]></description>
		<link>http://www.skiyo.cn/2010/07/22/google-ssl-as-the-ie8s-default-search-engine/</link>
			</item>
	<item>
		<title>我们来做一个会呼吸的菜单吧!!</title>
		<description><![CDATA[我看到了网上有一些例子..我就来凑个热闹..说下我自己的做法..
大家先可以看一下最终的效果 http://resume.skiyo.cn/
我的做法相对比较简单..大部分工作都是css来做的..
首先我们需要看上去差不多是下面的一张菜单图片..你可以点击之后看大图..

然后我们就来写HTML了..注意.重点就在这里..我让a在li的上面..遮盖住li..

View Code1
2
3
4
5
6
7
8
9
&#60;div id=&#34;menu&#34;&#62;
  &#60;ul&#62;
    &#60;li id=&#34;nv_about&#34;&#62;&#60;a href=&#34;#about_anchor&#34;&#62; &#60;/a&#62;&#60;/li&#62;
    &#60;li id=&#34;nv_skill&#34;&#62;&#60;a href=&#34;#skill_anchor&#34;&#62; &#60;/a&#62;&#60;/li&#62;
    &#60;li id=&#34;nv_works&#34;&#62;&#60;a href=&#34;#works_anchor&#34;&#62; &#60;/a&#62;&#60;/li&#62;
    &#60;li id=&#34;nv_introduce&#34;&#62;&#60;a href=&#34;#introduce_anchor&#34;&#62; &#60;/a&#62;&#60;/li&#62;
    &#60;li id=&#34;nv_contact&#34;&#62;&#60;a href=&#34;#contact_anchor&#34;&#62; &#60;/a&#62;&#60;/li&#62;
  &#60;/ul&#62;
&#60;/div&#62;

CSS为:


View Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#menu &#123;
	margin-top:10px;
	width:800px;
	height:40px;
&#125;
#menu li &#123;
	list-style:none;
	float:left;
&#125;
#menu li a&#123;
	display:block;
&#125;
#menu #nv_about &#123;
	width:160px;
	height:40px;
	background:url&#40;../images/menu.jpg&#41; no-repeat 0px 0px;
	/* 这是li的背景 [...]]]></description>
		<link>http://www.skiyo.cn/2010/07/04/lets-make-a-breathing-menu/</link>
			</item>
	<item>
		<title>在编译php-fpm0.6的时候需要注意的一些问题</title>
		<description><![CDATA[也许大家都在用php-fpm0.5系列..其实php-fpm0.6早就发布了..并且再上次fix_pathinfo漏洞的时候.有人说过0.6不受这个漏洞的影响..
看来使用0.6还是还是有些必要的..
但是0.6比较起0.5来说..变化很大..代码上我不太清楚..但是从编译的步骤上来讲..确实有些我们需要注意的事情.
上次我曾经说过关于编译PHP5.2.12+php-fpm-0.6的问题..这次加上几个新的 就重新写一遍吧..
我这里就用php5.2.13和php-fpm-0.6~5.2.patch来打比方.
php-fpm需要autoconf2.13 所以我们需要先安装autoconf

View Code1
2
3
4
5
6
7
# tar -zxvf autoconf-2.13.tar.gz
# cd autoconf-2.13
# ./configure --prefix=/usr/local/autoconf
# make
# make install
# export PHP_AUTOCONF=/usr/local/autoconf/bin/autoconf
# export PHP_AUTOHEADER=/usr/local/autoconf/bin/autoheader

另外还需要libevent-1.4.13-stable.tar.gz


View Code1
2
3
4
# tar zxvf libevent-1.4.13-stable.tar.gz
# cd libevent-1.4.13-stable/
# ./configure --prefix=/usr/local/libevent
# make &#38;&#38; make install

最后还需要一个libiconv-1.13.1.tar.gz 

View Code1
2
3
4
# tar zxvf libiconv-1.13.1.tar.gz
# cd libiconv-1.13.1/
# ./configure --prefix=/usr/local/libiconv
# make &#38;&#38; make install

现在才可以安装php5.2.13..这里需要注意的是 php-fpm0.5的编译参数是 &#8211;enabled-fpm 而0.6改成了 &#8211;with-fpm

View Code1
2
3
4
5
6
7
8
9
# tar -jxvf php-5.2.13.tar.bz2
# cd php-5.2.13/
# patch -d [...]]]></description>
		<link>http://www.skiyo.cn/2010/07/03/some-issues-of-compiling-php-fpm0-6/</link>
			</item>
	<item>
		<title>使用PHP将大文件导入到数据库中..</title>
		<description><![CDATA[朋友需要将一个有170w行的txt文件.按行把数据导入到数据库中..
所以我帮他写了一下 马克在这里 万一也有人用的着:)

View Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
header &#40; &#34;Content-type: text/html;charset=utf-8&#34; &#41;;
set_time_limit&#40;0&#41;;
include&#40;'Database.class.php'&#41;;
$db = new Database&#40;'127.0.0.1', 'root', 'root', 'test'&#41;; //数据库
&#160;
$fp = fopen&#40;'171w.txt', 'r'&#41;; //文件
$i=1; //开始行数
&#160;
$array = array&#40;&#41;;  //用来存放从XXX-XXX行的数据的数组
&#160;
//回调函数
function callback&#40;$now&#41; &#123;
	global $db, $array, $i, $fp;
    if&#40;empty&#40;$array&#41;&#41; &#123;             //为了节省资源..我们只生成一次数组
        [...]]]></description>
		<link>http://www.skiyo.cn/2010/06/22/make-the-large-file-into-the-database-in-php/</link>
			</item>
	<item>
		<title>关于用PHP调用WebService中参数为complexType的问题</title>
		<description><![CDATA[今天在处理一个接口的时候，遇到一点问题。这个WebService中的一个方法的其中的一个参数是这个WebService中的另外一个方法..说起来很囧..
比如 这个WebService中有方法a跟b&#8230;但是a中的一个参数的类型是b的..而且a用到b的一些属性..
在WebService的XMl就被描述为tns:类型 并且另外一个方法为complexType类型..
一开始毫无头绪..后来搜索了下 加上自己的总结..终于解决..难点在于我们怎么用PHP去构造这么一个参数..
这个WebService的XML看起来是下面这样子的..

View Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&#60;s:element name=&#34;somefunc&#34;&#62;
&#60;s:complexType&#62;
  &#60;s:sequence&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;param1&#34; type=&#34;s:string&#34; /&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;param2&#34; type=&#34;s:string&#34; /&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;info&#34; type=&#34;tns:info&#34; /&#62;
  &#60;/s:sequence&#62;
&#60;/s:complexType&#62;
&#60;/s:element&#62;
&#60;s:complexType name=&#34;info&#34;&#62;
&#60;s:complexContent mixed=&#34;false&#34;&#62;
  &#60;s:sequence&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;var1&#34; type=&#34;s:string&#34; /&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;var2&#34; type=&#34;s:string&#34; /&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;var3&#34; type=&#34;s:string&#34; /&#62;
    &#60;s:element minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34; name=&#34;var-4&#34; type=&#34;s:string&#34; /&#62;
  &#60;/s:sequence&#62;
&#60;/s:complexContent&#62;
&#60;/s:complexType&#62;

其实很简单.用stdclass来构造一个含有这么多属性的对象即可..下面是我的代码.


View Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
set_time_limit&#40;0&#41;;
require_once [...]]]></description>
		<link>http://www.skiyo.cn/2010/06/09/consuming-soap-complextype-webservice-with-php/</link>
			</item>
	<item>
		<title>神奇的两次按位非运算符</title>
		<description><![CDATA[今天看到了James Padolsey的博客中谈到了连续进行两次按位非运算相当于floor的结果.
然后我进行了下测试，下面是我的代码：

View Code1
2
3
4
5
6
7
8
9
10
11
$time = microtime&#40;1&#41;;
for&#40;$i=0;$i&#60;=100000;$i++&#41; &#123;
    ~~4.9;
&#125;
echo microtime&#40;1&#41; - $time;
echo &#34;&#60;br&#62;&#34;;
$time = microtime&#40;1&#41;;
for&#40;$i=0;$i&#60;=100000;$i++&#41; &#123;
    floor&#40;4.9&#41;;
&#125;
echo microtime&#40;1&#41; - $time;

这个在我机器的运行的结果是
0.013797998428345
0.041538000106812
我们可以看到 用~~几乎比floor快了三倍..
但是我们需要知道为什么~~就等价于floor了.

这里需要涉及到一个进制转换并且取非的过程.
现在我们需要一个假定条件.我们的变量为有符号的整数5.
我们现在给它进行按位取非的运算.
5的二进制为 0000 0101
按位非之后为 1111 1010
这时候第一位符号位1表示负数. 负数需要本身取反并+1
其他位取反为 000 0101  +1之后的结果为 000 0110
加上前面的符号 所以就为-6了.
这时候我们我们逐渐的就会发现一个著名的公式 ~num = -(num + 1)
回到上面的话题.如果上面不是整数,而且是小数5.9呢?
那么Zend引擎在计算取非的时候就会把小数部分的二进制的舍弃掉.
所以~5.9就会得到-6了.
然后再进行一次按位非..按照上面的公式 我们就得到5了..这样的效果就和floor()是一样的.
什么.你再担心用~~而舍弃floor会出问题吗? 
这个答案是确定的
比如你可以用下面的代码测试

View Code1
2
3
echo ~~99999999999999.99;
echo &#34;&#60;br /&#62;&#34;;
echo floor&#40;99999999999999.99&#41;;

在我的计算机上运行的结果是
276447231
99999999999999
我们可以看到.用~~的时候很明显的溢出了..
所以在比较小的数字运算中..还是放心的使用~~来代替floor吧..
要知道.在JavaScript和PHP中..默认的变量可都是有符号的啊..
]]></description>
		<link>http://www.skiyo.cn/2010/06/07/double-bitwise-not/</link>
			</item>
	<item>
		<title>百路推免费短网址服务..首创&#8221;收藏夹获取短网址&#8221;..</title>
		<description><![CDATA[主页：http://bai.lu/
bai.lu是一个特殊的短网址服务，因为她提供了特殊的“收藏夹短网址”方式，大大简化了您获取短网址的步骤。
右键下面的超链接，选择“添加到收藏夹“，然后在你正在浏览网页的时候打开收藏夹，点击”转换为百路短网址“即可。
当然.，您也可以直接点击下面的超链接进行体验！
转换为百路短网址
]]></description>
		<link>http://www.skiyo.cn/2010/06/01/bailu-formally-launched/</link>
			</item>
	<item>
		<title>哥学社正式上线..</title>
		<description><![CDATA[页面终于做好了..参考了下别人的..LOGO也是:)..
不管怎么样..还是把源码打包给大家吧.
在线的地址为http://www.blog-brother.com/
大家可以先预览一下.
源码下载

http://code.google.com/p/skiyo/downloads/detail?name=blog-brother.src.zip
]]></description>
		<link>http://www.skiyo.cn/2010/05/21/blog-brother-formally-launched/</link>
			</item>
	<item>
		<title>jQuery中getJSON跨域原理详解</title>
		<description><![CDATA[前几天我再开发一个叫 河蟹工具条 的时候，其中有个功能就是获取本页面的短网址。
这个想法是好的，可是在我付诸于行动的时候，发现这个需要跨域。
起初我的想法就是，跨域的最简单的方法就是增加一个script标签，因为script标签是允许跨域的。
但是问题又来了，对方的API返回的是个json对象，用script标签只能执行，却不能获取到里面的东西，也就是说返回的东西是不可控的。
随后我就想到了jQuery中的getJSON的方法，学习了一下，没想到里面的文章这么大。
jQuery非常聪明，他也意识到只靠script请求是无法接受到返回的东西的，所以他就设计了一个全局的callback函数，发送请求的时候把这个callback函数也传进去。
服务器判断是否有这个callback函数，如果没有就返回一个对象，如果有就返回一个函数名（对象）。
我们可以通过下面这个地址来看一下

http://to.ly/api.php?json=1&#38;longurl=http%3A%2F%2Fwww.skiyo.cn
大家可以打开一下，结果返回的是一个json对象。
如果我加上callback参数
http://to.ly/api.php?json=1&#38;longurl=http%3A%2F%2Fwww.skiyo.cn&#38;callback=somefunc
大家可以看到返回的是
somefunc({&#8220;shorturl&#8221;: &#8220;http:\/\/to.ly\/3XHP&#8221;, &#8220;ok&#8221;: true})
传入的也正好是函数名。
这个想法很不错，缺点就是对方服务器必须是可控的。
大方向是这个的，但是还有一些细节的小技巧，比如说如何在匿名函数中设置一个全局函数，如何将这个全局函数变为匿名函数！
本来想直接把jQuery中的getJSON拿来直接用的，可是看了才知道，jQuery的ajax方法都混合到一起了，想剥落下来也不是一件容易的事。
庆幸的是我还懂一点JavaScript，经过我的加工与修改，下面的例子已经可以正常使用。详细的可以查看注释。

View Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
&#40;function&#40;&#41; &#123;
	var cross = &#123;
		//设置一个随机的callback函数..防止跟其他的全局函数重名
		callback : 'cross' + parseInt&#40;Math.random&#40;&#41;*1000&#41;,
&#160;
		init : function&#40;&#41; &#123;
			this.getJSON&#40;'http://to.ly/api.php?json=1&#38;longurl='+encodeURIComponent&#40;'http://www.skiyo.cn/'&#41;, function&#40;data&#41;&#123;
				alert&#40;data.shorturl&#41;;
			&#125;&#41;;
&#160;
		&#125;,
&#160;
		getJSON : function&#40;url, callback&#41; &#123;
			var c = this.callback;
			url = url + &#34;&#38;callback=&#34; + c;
			// Handle JSONP-style loading
			//将函数名设置为window的一个方法,这样此方法就是全局的了.
			window&#91; c &#93; = window&#91; c &#93; &#124;&#124; function&#40; data &#41; &#123;
				//调用匿名函数
				callback&#40;data&#41;;
				// Garbage collect
				window&#91; c &#93; = undefined;
&#160;
				try &#123;
					delete window&#91; c [...]]]></description>
		<link>http://www.skiyo.cn/2010/05/10/explain-cross-domain-principle-of-getjson-in-jquery/</link>
			</item>
	<item>
		<title>Web辅助工具条(原名:河蟹工具条CrabBar)0.1发布</title>
		<description><![CDATA[什么是Web辅助工具条
Web辅助工具条(原名:河蟹工具条CrabBar)可以使你在任何一个网页上面输入的文字变成其他的代码，比如菊花文、短网址等。
Web辅助工具条可以工作在IE系列或者FireFox浏览器中，作者已经在IE6(有BUG待修复)、IE7、IE8和FireFox3.5中进行测试。
经过测试.Web辅助工具条可以工作在utf-8 gbk gb2312等编码的网站中.
如何使用Web辅助工具条
使用Web辅助工具条非常简单方便！比如你正在浏览我的博客 http://www.skiyo.cn/ 中的某篇文章，并且你想对其进行评论，这时候请在地址栏中输入以下代码：

View Code1
javascript:void&#40;&#40;function&#40;&#41;&#123;var e=document.createElement&#40;'script'&#41;;e.setAttribute&#40;'src','http://crabbar.googlecode.com/svn/trunk/crabbar.js'&#41;;document.body.appendChild&#40;e&#41;;&#125;&#41;&#40;&#41;&#41;

稍等3秒左右，等待工具条加载完毕后，会在你浏览器中正中央出现Web辅助工具条。这时候你就可以在我的博客中的评论框中进行评论，然后选中你想要改变的文字，并且点击工具条上的“菊花文”，这些文字就变成菊花文了。
短网址服务是将你当前所看网页的URL转换为短网址.
下面是试用:
Web辅助工具条
你也可以通过右键上面的链接，在弹出的菜单中选择：添加到收藏夹！这样你想在任何的网站中启动就可以在收藏夹中点一下就可以了:-)
此项目的托管地址是：http://code.google.com/p/crabbar/
已知BUG:
1.IE6的fixed问题
2.在discuz等论坛发帖不能用的问题.
3.chrome不能使用.这是因为如果你再chrome的地址栏输入JavaScript代码后会在新的窗口中打开.这个无法解决 如果想使用可以开发为chrome的插件.
4.目前使用的短网址服务为to.ly.但是这个网址在QQ中会被显示为非法网站.正在考虑换为goo.gl服务.但是这个google的短网址服务要求必须为post.在跨域的方法当中.post是被认为危险的 非法的.所以实现起来也比较困难.
PS:为了防止被河蟹所以改名为Web辅助工具条. 英文名就不改了 不然还得改托管地址.
]]></description>
		<link>http://www.skiyo.cn/2010/04/30/crabbar-preview-released/</link>
			</item>
</channel>
</rss>
