Category: 旅行 Travel     Comments (2)    

川西之旅 - D1 2008.12.19 成都宽窄巷子

川西旅游归来已经有一个多月,因为照片放在家里的电脑一直没能完成这篇文章,这次春节回家总算把照片都COPY了回来,加上小天的那些,一共是16G,虽然有很多的照片但是想把这些记忆完整的记录下来的话,唯有写下来了。

原来计划是一个人去(很想以流浪的方式,可惜时间不允许,只有12天假期),觉得一个人去心里有点不踏实,距离出发前几天(2008-12-15)上磨房发了一个帖子,碰碰运气,想不到竟然找到了广州的小天,在QQ里聊了一会就知道他是完全没有准备,对那边的情况甚至地理位置都完全不了解,不过好在他和我有一个共通点就是天不怕地不怕….去了再说那种。而且他非常想去,所以一拍即合。去之前有一些前辈和当地的老驴劝说不要去,理由是太冷,极雪太深,还说这种天气根本进不了高原…当时我就想:既然通车的话就一定没问题,事后证明我的想法是对的。

D1 2008.12.19 成都宽窄巷子

龙堂客栈,第一宿在这里,进房后打听消息发现同房的都是商务人士,正如同房的老兄所说的,驴友都去四号工厂了。幸运的是在这里遇到CINDY,从她口中得知玩户外大概有十来年了。

三五成群是可以很开心的,但是我也享受旅途中的孤独

很有特色的一间书店,右边都是卖关于成都的书

这里的星巴克也入乡随俗

十二月底的宽巷子还可以看到秋色

CINDY用我的脚架在认真的拍夜景,厦门的CINDY很有意思,说话口音很像台湾人,热情开朗,这天还教我们用指南针,可是她那个指南针太专业了,听得我们糊里糊涂…. 更有意思的是她带着一套菜具出来,她泡的铁观音是我喝过最好喝的。当晚我们去吃20/人的火锅,吃之前她还到别人那里尝过才决定要不要在这里吃,但是尝完后看她表情是不好吃的,但还是说了还不错,哈哈

拍的就是这个,不过这是我拍的:P

虽然我们三个认识不到一天,但是却很开心

照了很多张,只有这张才算满意:(

还没到成都前托客栈的MM贴的:P

Category: PHP     Comments (0)    

在Zend Framework 中使用 PDO_ODBC

其实只需要小改一下Zend_Db_Adapter_Pdo_Mssql就可以支持ODBC

function _dsn()

判断PDO Type 的时候加多一个

case 'odbc':
$this->_pdoType = 'odbc';
break;

再增加一個方法

public function quote($value)
{
if (is_int($value) || is_float($value)) {
return $value;
}
return "'".addslashes($value)."'";
}

然后,传递参数的时候参考下面的例子:

// 数据库连接参数
$params = array(
'SERVER' => "192.168.1.2"
'DATABASE' => "king",
'username' => "king",
'password' => "kingpsw",
'dbname' => "king",
'pdoType' => "odbc",
'DRIVER' => "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 SERVER 中VARCHAR长度超过255的限制,但是也并不是这样就可以解决问题,PDO_ODBC存在一个BUG:
http://bugs.php.net/bug.php?id=40452 上面有些评论可以参考一下
当INSERT的时候DATETIME字段会出现以下错误:

[Microsoft][ODBC 驅動程式管理員] 函數順序錯誤
Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[HY010]: Function sequence error: 0 [Microsoft][ODBC Driver
Manager] Function sequence error (SQLExecute[0] at
ext\pdo_odbc\odbc_stmt.c:133)'

參考:http://framework.zend.com/issues/browse/ZF-905
Category: PHP     Comments (0)    

关于Zend_Db_Adapter_Pdo_Mssql最后一分页问题的解决方法

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->_parts[self::LIMIT_COUNT]  = (int) $rowCount;
$this->_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, $offset = 0)
没法判断是否最后一页是否小于limit,没办法,只能把目光转移到Zend_Db_Select中的limitPage
修改如下:

public function limitPage($page, $rowCount, $tail = NULL)
if ($tail > 0 && !is_bool($tail)) {
$this->_parts[self::LIMIT_COUNT]  = (int) $tail;
}else {
$this->_parts[self::LIMIT_COUNT]  = (int) $rowCount;
}

然后在自己的分页类中,添加一个tail的返回值

// pagerInfo 保存关于分页信息的数组
$pagerInfo['_tail'] = NULL;
// 判断是否最后一页
if ($page == $pagerInfo['pagesCount']) {
// 获取余数
$tail = $rows_count % $rowCount;
if ($tail != 0)   $pagerInfo['_tail'] = $tail;
}

在目前最新的Zend Framework 1.7.0 中增加这样这两个特性
Zend_Db_Table_Select adapater for Zend_Paginator
Support for custom adapters in Zend_Paginator
看来是一个分页功能,不知道是怎样处理上面的问题的,下次再去了解一下

Category: Javascript     Comments (0)    

MSN SPACE 图片摆放效果

研究了一下MSN SPACE好友相册更近的更新列表中的图片摆放效果,IE是用DXImageTransform.Microsoft.Matrix这个Filter去实现,代码较简单,Firefox就用了HTML5标准规范中的Canvas标签实现,代码较复杂,其它浏览器没试,不过奇怪的是微软处理不同浏览器的手法好像是不同的浏览器就调用不同的模板,就这个效果而言,相关代码是完全不一样的,肯定不是同一个模板!

花了点时间把代码提取并精简,点击这里查看

Category: 项目 MyProject     Comments (0)    

WIFI MAP 免费wifi共享计划 - wifi-map.cn

到这个项目缘由于在 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美元

Next Page »

aalglatt2008 Wordpress-Theme by Felix Krusch, SEO by Court