<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.7.1" -->
<rss version="0.92">
<channel>
	<title>oKing</title>
	<link>http://kingchan.net</link>
	<description>The King of Blog</description>
	<lastBuildDate>Sat, 25 Apr 2009 01:39:40 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>川西之旅 - D1 2008.12.19 成都宽窄巷子</title>
		<description>川西旅游归来已经有一个多月，因为照片放在家里的电脑一直没能完成这篇文章，这次春节回家总算把照片都COPY了回来，加上小天的那些，一共是16G，虽然有很多的照片但是想把这些记忆完整的记录下来的话，唯有写下来了。

原来计划是一个人去（很想以流浪的方式，可惜时间不允许，只有12天假期），觉得一个人去心里有点不踏实，距离出发前几天（2008-12-15）上磨房发了一个帖子，碰碰运气，想不到竟然找到了广州的小天，在QQ里聊了一会就知道他是完全没有准备，对那边的情况甚至地理位置都完全不了解，不过好在他和我有一个共通点就是天不怕地不怕....去了再说那种。而且他非常想去，所以一拍即合。去之前有一些前辈和当地的老驴劝说不要去，理由是太冷，极雪太深，还说这种天气根本进不了高原...当时我就想：既然通车的话就一定没问题，事后证明我的想法是对的。


D1 2008.12.19 成都宽窄巷子

龙堂客栈，第一宿在这里，进房后打听消息发现同房的都是商务人士，正如同房的老兄所说的，驴友都去四号工厂了。幸运的是在这里遇到CINDY，从她口中得知玩户外大概有十来年了。



三五成群是可以很开心的，但是我也享受旅途中的孤独



很有特色的一间书店，右边都是卖关于成都的书



这里的星巴克也入乡随俗



十二月底的宽巷子还可以看到秋色





CINDY用我的脚架在认真的拍夜景，厦门的CINDY很有意思，说话口音很像台湾人，热情开朗，这天还教我们用指南针，可是她那个指南针太专业了，听得我们糊里糊涂.... 更有意思的是她带着一套菜具出来，她泡的铁观音是我喝过最好喝的。当晚我们去吃20/人的火锅，吃之前她还到别人那里尝过才决定要不要在这里吃，但是尝完后看她表情是不好吃的，但还是说了还不错，哈哈



拍的就是这个，不过这是我拍的：P



虽然我们三个认识不到一天，但是却很开心



照了很多张，只有这张才算满意：（



还没到成都前托客栈的MM贴的：P

 </description>
		<link>http://kingchan.net/archives/195</link>
			</item>
	<item>
		<title>在Zend Framework 中使用 PDO_ODBC</title>
		<description>其实只需要小改一下Zend_Db_Adapter_Pdo_Mssql就可以支持ODBC

function _dsn()

判断PDO Type 的时候加多一个
case 'odbc':
$this-&#62;_pdoType = 'odbc';
break;
再增加一個方法
public function quote($value)
{
if (is_int($value) &#124;&#124; is_float($value)) {
return $value;
}
return "'".addslashes($value)."'";
}
然后，传递参数的时候参考下面的例子：
// 数据库连接参数
$params = array(
'SERVER' =&#62; "192.168.1.2"
'DATABASE' =&#62; "king",
'username' =&#62; "king",
'password' =&#62; "kingpsw",
'dbname' =&#62; "king",
'pdoType' =&#62; "odbc",
'DRIVER' =&#62; "SQL Server",
);
// 单件模式
if (!Zend_Registry::isRegistered("db")) {
$db = Zend_Db::factory('Pdo_Mssql', $params);
Zend_Registry::set("db", $db);
}else {
$db = Zend_Registry::get("db");
}
使用上面的参数会生成类似
odbc:DRIVER=SQL Server;SERVER=192.168.1.2;DATABASE=king;
这样的Data Source Name (DSN) 串，这样就会通过ODBC连接数据库了，当然要记得打开 php_pdo_odbc.dll 扩展

虽然使用ODBC驱动可以避免SQL ...</description>
		<link>http://kingchan.net/archives/222</link>
			</item>
	<item>
		<title>关于Zend_Db_Adapter_Pdo_Mssql最后一分页问题的解决方法</title>
		<description>Zend framework (我当前使用的版本是1.5) 中的MSSQL(SQL SERVER)PDO Adapter(Zend_Db_Adapter_Pdo_Mssql)分页是有问题的，多数情况最后一页总会和n-1页的记录重叠，经测试Zend Framework 1.7.0里面的Zend_Db_Adapter_Pdo_Mssql同样存在此问题

当有LIMIT的时候，分析ZF_DB生成的SQL语句：
SELECT * FROM
(
SELECT TOP 30 * FROM (
SELECT TOP 60 "package_id", "title_eng"
FROM "hotel_package" ORDER BY "package_id" DESC
) AS inner_tbl ORDER BY "package_id" ASC
)
AS outer_tbl ORDER BY "package_id" desc
上面的SQL是PAGE=2,是每页30笔记录，30就相当于MYSQL中的LIMIT，60就是OFFSET

看不懂上面的SQL的话可参考这里：
http://lists.bestpractical.com/pipermail/rt-devel/2005-June/007339.html

Zend_Db_Select中limitPage方法中有如下代码：
$this-&#62;_parts[self::LIMIT_COUNT]  = (int) $rowCount;
$this-&#62;_parts[self::LIMIT_OFFSET] = (int) $rowCount * ($page - 1);
显然，这个SQL的结果是每一页都是30笔，最后一页也是。
当 "hotel_package" 中有31笔记录的时候，一共有2页，翻到第2页的时候也显示30条记录是不对的
当然这不太影响使用，但是挑剔的人会提出质疑，这也无可厚非，但是怎么ZEND也不重视这个问题
或者说ZEND并不重视ZF中的MSSQL

由于ZF本身的问题，所以不得不修改ZF的代码，这种情况是在万不得已经的情况下才去做...

首先考虑是修改 Zend_Db_Adapter_Pdo_Mssql 这个类，因为是Adapter所以可以自己另存一个，改一下类和文件名，是最好的方法并不影响到ZF以后的升级更新，不过另存修改Zend_Db_Adapter_Pdo_Mssql并不现实，因为传给limit的参数有限：
limit($sql, $count, ...</description>
		<link>http://kingchan.net/archives/202</link>
			</item>
	<item>
		<title>MSN SPACE 图片摆放效果</title>
		<description>

研究了一下MSN SPACE好友相册更近的更新列表中的图片摆放效果，IE是用DXImageTransform.Microsoft.Matrix这个Filter去实现，代码较简单，Firefox就用了HTML5标准规范中的Canvas标签实现，代码较复杂，其它浏览器没试，不过奇怪的是微软处理不同浏览器的手法好像是不同的浏览器就调用不同的模板，就这个效果而言，相关代码是完全不一样的，肯定不是同一个模板！

花了点时间把代码提取并精简，点击这里查看 </description>
		<link>http://kingchan.net/archives/178</link>
			</item>
	<item>
		<title>WIFI MAP 免费wifi共享计划 - wifi-map.cn</title>
		<description>

到这个项目缘由于在 2008网志年会 以优惠价买的FON无线路由器($RMB50，市场价大概200左右，真想大量购入倒卖:P )。

FON路由器最大的特点是它有两个SSID (hotspot-接入点名称、热点)：
一个是私人的一个是只供FON会员使用

FON的会员在任何地方如果发现有FON的SSID就可以凭FON会员账号免费使用(印象中以前看到过一个报道说有一个服务还提供在线刷卡付费给提供者购买使用权的)，虽然分开两个SSID安全性可以得到保障，但是必须要买一个价钱二百多块钱的FON才可以享受这种服务，这无怀疑是商业性的，而且无法得到广泛的普及。

WIFIMAP 可以让您自由的在地图上标出您的SSID所在位置，您可以把密码公开在上面，或者只留下联系信息，甚至可以留下您的支付宝账号说明这是收费服务。当然WIFIMAP提倡分享的精神，相信很多人都愿意分享出来，因为当你在外面而又迫切于要上网找资料，打开笔电搜索到N个热点，但都被密码档住了，多郁闷。或者您在家里又想和附近的不认识的人分摊费用，但只找到热点而联系不到对方多无耐。

通过WIFIMAP你可以找到你附近热点的主人！

有人会担心别人用来做违法的事情，到时候算到自己的头上，关于这个安全性的问题就另当别论了

系统框架

使用Google App Engine + Google MAP API 搭建, 并且使用JQUERY

由于是试验性项目，使用零成本的GAE是最佳的选择

WIFIMAP只是提供单一的服务，服务器端代码不多，大部份是JS，GAE的官居方文档详尽，所以使用自己完全不熟悉的PYTHON语言也没关系！

GAE 提供：

	免费帐户都可使用多达 500MB 的持久存储空间
	每月约 500 万页面浏览量(2亿megacycles/天CPU时间、10GB带宽/天)的足够 CPU 和宽带
	自动扩展和载荷平衡
	用于对用户进行身份验证和使用 Google 帐户发送电子邮件的 API

关于身份验证的是否用GOOGLE的API还在考虑，如果用GOOGLE的验证的话只会增加GOOGLE用户对GOOGLE的黏度，而对于WIFIMAP而言只是使开发工作量少一点而已

扩展费用参考：

	每增加1个处理器核心1小时运算量0.1到0.12美元
	每增加1GB存储空间每月0.15到0.18美元
	每增加1GB出口带宽0.11到0.13美元
	每增加1GB入口带宽0.09到0.11美元
 </description>
		<link>http://kingchan.net/archives/164</link>
			</item>
	<item>
		<title>2008澳门资讯科技周</title>
		<description>在网上看到11.28~29是澳门资讯科技周，现场有很便宜的SD卡和手指(U盘)卖，所以昨天去参加完同学的婚礼后今天早上就赶回澳门来到会场，场地很小，而且人很多，卖的东西也不多，虽然失望（本来也没多大的期望）不过也买到了我想要买的东西：
Kingston DataTraveler 4G ($MOP69) , adata 8GB的SD卡Class 6 - 20MB/s ($MOP120)，还有一个外型不错的4口USB HUB($MOP49)

会场的美女都很配合照相，但是...但是...我相机竟然没电了！！就是因为昨晚在婚宴上开闪光猛照，呜呜....今天最大的遗憾莫过于此了:P 没办法只能用手机照，虽然不堪入目不过也好过没有

顺带提一下，香港电脑节 在2008年12月5日~8日，香港的电脑节和澳门的可不是一个级别的，每年都听说有大量的便宜货捡，不过看来我又是不能去了，就算现在办签证也来不及(无耐)

[gallery] </description>
		<link>http://kingchan.net/archives/140</link>
			</item>
	<item>
		<title>随想</title>
		<description>难得这次回家没带LEGTOP，闲着没事干的时候才想起好久没更新BLOG，当初重建这个BLOG的时候雄心壮志的，但现在这里已经长满了草。

今天是为了同学结婚才回家，我想现在可以让我回家的理由已经不多，没必要的话是不想回到这个既熟悉又陌生的城市...今天看到很多多年没看到的同学，感觉他们都没怎么变，但是自己却变了，长期在外，对自己生活的追求使我和从到大都生活在这里的同学们产生了隔膜

最近心情杂乱，很想整理一下，但是没办法安静下来，

把所有期望都放在12月19日的旅行上了，希望通过这次独自旅行体验可以找回自我。

引用别个的一句话

“旅行就是找到自我，找到平静心情和宽容心态的最佳途径……在旅行中得到体验，得到平静的心情和宽容的心态，这是旅行对我来说最大的魅力所在，因此，我旅行” </description>
		<link>http://kingchan.net/archives/137</link>
			</item>
	<item>
		<title>澳门官也街&amp;威尼斯人酒店</title>
		<description>昨天去位于澳门氹仔的The Venetian Macao(威尼斯人酒店)看THE 48th MISS INTERNATIONAL BEAUTY PAGEANT 2008(第48届国际小姐选美大赛2008)，顺便入住了应该酒店的Royale Suite(皇室套房)，只可惜选美大赛现场不能带相机，进场前保安才告知，害得我找寄存跑来跑去，最后还是放房间。入到场内竟然前面的老兄带着个大炮进来，羡慕得我不得了，不过后来给保安抓住...不说那么多，去片

更多更大的照片浏览我的 FLICKR Photostream

[caption id="" align="aligncenter" width="500" caption="官也街，在这里看到传中的榴莲雪糕"][/caption]

[caption id="" align="aligncenter" width="334" caption="The Venetian Macao"][/caption]

[caption id="" align="aligncenter" width="500" caption="The Venetian Macao"][/caption]

[caption id="" align="aligncenter" width="334" caption="瑰丽堂"][/caption]

[caption id="" align="aligncenter" width="500" caption="君忆廊 "][/caption]

[caption id="" align="aligncenter" width="334" caption="走廊"][/caption]

[caption id="" align="aligncenter" width="500" caption="这张大床非常的舒服"][/caption]

[caption id="" align="aligncenter" width="500" caption="皇室套房，房间内"][/caption]

[caption id="" align="aligncenter" ...</description>
		<link>http://kingchan.net/archives/122</link>
			</item>
	<item>
		<title>关于PHP只能读取MsSQL的char/varchar字段前256个字符的问题</title>
		<description>很不幸地用PHP操作MsSQL(SQL Server)数据库的时候，如果您的char或者varchar字段长度超过256的话只能读取到前256个字符的内容，后面的会被无情的CUT掉，无论你用最基本的MSSQL DB库还是PDO_MSSQL，或者自己写一个专门的MSSQL DB扩展也无济于事，因为PHP操作MSSQL都是通过微软提供的SQL Server Client Library工作，也就是ntwdblib.dll 这个文件，目前“最新”版本是2000.80.194.0（需要自行去搜索下载），就算最新版本(PHP 5.3 alpha2)的PHP自带的都是这个98年的版本2000.2.8.0，“最新” 版本估计是2000年的产物（根据这个判断© 1988-2000 Microsoft Corp. 保留所有权利。）难怪2001年提交的这个BUG至今还没有被FIX

http://bugs.php.net/bug.php?id=11593

调整php.ini中的 mssql.textlimit 和 mssql.textsize 也没用，这两个参数形同虚设...

鉴于这个库的版本太老，用PHP+MsSQL这种鸡肋组合的同志们要小心了...

解决办法就是使用ODBC驱动，请参考：
 在Zend Framework 中使用 PDO_ODBC </description>
		<link>http://kingchan.net/archives/76</link>
			</item>
	<item>
		<title>下拉菜单手动输入</title>
		<description>[caption id="attachment_58" align="alignnone" width="309" caption="oShopZ 在线商城系统后台截图"][/caption]

有时候下拉框的选项不能满足需要时需要手工输入，这情况可以在旁边再放一个INPUT和文字说明，但是比较难理解，也不美观。
我的解决办法是选择最后一个选项(option)“手工输入&#62;&#62;”后，此下拉框(select)就会变成文本输入框(input)

实现思路很简单，选项(option)“手工输入&#62;&#62;”的值是就是下拉框(select)的id名
onchage的时候调用cinput函数当检查到this.value = this.id就隐藏select加入input，点击input旁边的“x”就还原。

调用示例：

&#60;select onchange="cinput(this)" id="example"&#62;
&#60;option value="1"&#62;xxxxx&#60;/option&#62;
&#60;option value="example"&#62;手工输入&#62;&#62;&#60;/option&#62;
&#60;/select&#62;

当有缺省值的情况下直接调用函数

cinput($("#example").get(0), "ooo");

本文章所有代码是基于JQUERY，DEMO请点击这里。

// 全局变量，保存位置
var fn = {};
// item 是 select 对像
// val 是可选参数，有缺省值的时候用到
function cinput(item, val)
{
if(item.id != item.value &#38;&#38; !val) {
// 保存原始位置
fn[item.id] = item.selectedIndex;
return;
}
// 先保存ID
var id = item.id.toString();
// 隐藏select
$("#"+id).hide();
// 获取父TAG对像用以加入input
var p = $("#"+id).parent();
// 避免冲突把select的id和name更名
$("#"+id).get(0).name = id + "_bak";
$("#"+id).get(0).id = id + ...</description>
		<link>http://kingchan.net/archives/46</link>
			</item>
</channel>
</rss>
