Log in

Nginx+FastCGI 环境搭建 Kohana

Filed under: Kohana by icyleaf on May 31, 2010.

Kohana 默认仅对 Apache 环境提供的部署支持,其实对于 Nginx+FastCGI 也是很容易支持的。本文搭建环境是 Ubuntu 10.4 并采用 apt-get 方式安装,喜爱编译的朋友可以自行解决 :)

1. 安装 MySQL

sudo apt-get install mysql-server mysql-client

安装过程在会提示设置 root 账户的密码,如果是本机测试开发可以留空后稍候设置。

2. 安装 Nginx

# 安装 Nginx
sudo apt-get install nginx
# 启动 Nginx
sudo /etc/init.d/nginx start

完成上面两步之后,打开浏览器,输入 localhost 或 127.0.0.1 如果看到 Welcome to Nginx! 字样就说明安装成功了,是不是很简单 :)

注意,如果你的机器上面如果安装了其他 web 容器(比如 Apache,Lighttd等),启动 ngnix 的时候肯定会报错,因为这些 web 容器启动均占用的 80 端口,更改的方法如下:
编辑 /etc/nginx/sites-available/default 文件,修改 server 段中的 listen 为 localhost:8080,其中 8080 是更改的监听端口:

server {
	listen   localhost:8080;
	server_name  localhost;
 
# [...]

保存后重启Nginx:

sudo /etc/init.d/nginx restart

See more about this post

Popularity: 37% [?]

如何获取 Element 的 XPath [PHP/Javascript]

Filed under: How-To, 网络开发 by icyleaf on April 2, 2010.

这两天研究 HTML 的 DOM 需要寻找某个 Element 元素的完整 XPath 路径,由于使用的是 PHP Simple HTML DOM Parser 开源库,这个库类的使用方法几乎兼容 Javascript 的 DOM 语法并附带 DOM 选择器。虽然功能强大但是并不能直接获取 Element 的 XPath。这个怎么办呢,依稀记得 Firebug 有一个功能,选择某个元素在它的控制台可以显示 XPath。嗯,着手实践一下发现不仅可以显示而且还可以复制 XPath,如下图所示:

于是想,如果可以找到 Javascript 版的相关代码就一定可以改成 PHP 版本的,结果在 Google 的新家搜索找到了...

?View Code JAVASCRIPT
1
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
var elt = document.getElementById('table');
var xpath = getElementXPath(elt);
alert(xpath);
 
// Get full XPath of an element
function getElementXPath(elt)
{
	var path = "";
	for (; elt && elt.nodeType == 1; elt = elt.parentNode)
	{
		idx = getElementIdx(elt);
		xname = elt.tagName;
		if (idx > 1) xname += "[" + idx + "]";
		path = "/" + xname + path;
	}
 
	return path;	
}
 
// Get Idx of an element
function getElementIdx(elt)
{
    var count = 1;
    for (var sib = elt.previousSibling; sib ; sib = sib.previousSibling)
    {
        if(sib.nodeType == 1 && sib.tagName == elt.tagName)	count++
    }
 
    return count;
}

PHP 改进版:

1
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
// Use it before import PHP Simple HTML DOM Parser
$html = file_get_html('http://www.google.com/');
// find a sample element by id
$elt1 = $html->find('#footer', 0);
// find a sample element by tag name
$elt2= $html->find('div', 10);
 
// it will return if found it: //*[@id="footer"] 
$xpath = getElementXPath($elt1);
 
// it will return if found it: html/body/div[10] 
$xpath = getElementXPath($elt2);
 
function getElementXPath($elt)
{
	$path = '';
	$first = TRUE;
	for(; ($elt AND $elt->nodetype == 1); $elt = $elt->parent())
	{
		$xname = $elt->tag;
		$idx = getElementIdx($elt);
 
		if ($first AND isset($elt->attr['id']))
		{
			$path = '//*[@id="' . $elt->attr['id'] . '"]';
			break;
		}
 
		if ($idx > 1)
		{
			$xname .= '[' . $idx . ']';
		}
 
		$path = '/'.$xname.$path;
 
		$first = FALSE;
	}
 
	return $path;
}
 
function getElementIdx($elt)
{
    $count = 1;
    for($sib = $elt->prev_sibling(); $sib ; $sib = $sib->prev_sibling())
    {
        if($sib->nodetype == 1 && $sib->tag == $elt->tag)
        {
        	$count++;
        }
    }
 
    return $count;
}

大家同样可以把上面的代码直接 crack 到 PHP Simple HTML DOM Parser 库中。

Popularity: 18% [?]

StarCraftII

Filed under: 影音娱乐 by icyleaf on March 4, 2010.

昨天在 GReader 看到了 CNBorn 同学分享的一篇文章:Shellex的星际2试玩报告 。文章有提到安装和破解 StarCraftII Beta 版本,同时我也知道了“玻璃渣”就是  Blizzard 暴雪公司的英文名。说来惭愧,我真正开始玩星际是在 2009 年初,大多都是和朋友几个在闲暇之余玩上一玩,星际其实并不是很熟悉,人族可能是我比较熟悉的种族,Lost Template 是我最熟悉的地图(高中时代经常玩魔兽争霸)。

StarCraftII 破解安装

上面提到的文章中之说明了 StarCraftII Beta 版本是从玻璃渣下载,当初没明白这个是什么东西,就随便找了一个国内的资源站下载的,客户端一个 1.6G+ 大小,花了一下午的时间下载完毕,晚上回家在自己的笔记本上面安装后准备要破解才发现,破解程序只在 0.3.0.14093 版本测试成功(如果不是那个版本运行破解程序会报错),而其他版本没有测试。我又花了一点时间用手机查找了下如何看 StarCraftII 的版本号:

在 StarCraftII 安装目录有一个 Versions 文件夹,里面会有很多Base13891,Base14093,Base14133这样的文件夹。这就是版本号,数字最大的是Base14133,也就是你的当前版本了!

当时我一看就傻眼了,从国内下载的版本是 Base13891 也就是 0.3.0.13891。这可怎么办啊,突然灵机一现,我把 Versions 文件夹下的 Base13891 文件夹名改成了 Base14093,然后运行破解程序,成功破解,选择地图开始玩咯!(建议从官网下载原版客户端或正确的版本,我的方法可以解决燃眉之急,并不知道会不会有什么功能缺失)

由于破解文件包含了人族的补丁,借上面的文章说是人族的能力从猴变成了猿...说回游戏,选择地图后(可以和AI对战,AI 的数量跟文件有关系,大家可以看破解的说明文件),玩家的种族是随机分配的(今天早上看昨天的推说已经有了种族选择的补丁,大家可以关注下)。几回对战并选择不同的难度(需要手动覆盖某个文件)的战斗发现,人族在打了补丁之后确实蛮厉害的,机枪兵+升级后的坦克(火力+扎架)配合护士MM运输机,直取深入比较无敌 XDD。幸亏之前看过辰音奈奈讲解了三期战报。对于兽族和神族也是可以快速上手(图标变化太大,有些适应不过来)。

嗯,以上是昨天小玩的一天心得,感谢大家的欣赏

------------------得意的分割线--------------------------

没想到我的笔记本还是可以玩得起来 StarCraftII,虽然我在看 Options 的时候发现 图像 的各个参数不是 None 就是 Low,但是画面还是可以的(或许我对画面不挑剔= =)

最后献上我的机器配置:HP 6520s(054)

CPU: Intel(R) Core(TM)2 Duo CPU T5870 @ 2.00GHz
显卡: ATI X1350 mobile
内存: 2x1G
硬盘: 160G
系统: Windows 7 Pro

更新补充:添加了试玩操作系统平台,为什么我一定要写明是 Win7 系统呢,由于此系统的内存管理机制进行了重写,直接影响了系统的性能和效率,我曾经偶然间测试过,同一个游戏 COD4,在 Win7 和 WinXP 下的性能是差别很大的,在读取每关任务和介绍的时候,WinXP 总是没加载完毕就已经介绍完毕了而 Win7则是在介绍没结束之前很早就已经加载完毕。

Popularity: 17% [?]

Douban API Package 发布!

Filed under: Kohana, 网络开发 by icyleaf on January 8, 2010.

Douban API Package 是一个使用 PHP 开发且基于 Kohana v3 开发的一个扩展(Module)。

它对豆瓣 API 进行重新封包。它使用起来非常方便,可以快速开发一个 web 应用。

为什么要另外封包?
对,豆瓣官方提供了一种 PHP 的解决方案,可是需要庞大的支持库:GData(20M左右)以及可能无法修改的环境配置(租用的空间主机会遇到这样的问题)。虽说 Douban API Package 也是基于框架开发,不过 Kohana 是一个纯 PHP5 模式且体积小巧(仅有 478KB),优秀迅捷的框架。最重要的是,Douban API Package 提供了目前官方所有功能的支持。并有线上网站:魔豆豆瓣 API 控制台长期运营。

虽然它是基于 Kohana 框架开发,但是并没有使用太多的依赖,稍微熟悉可以轻松分离出来!

安装需求

  • PHP 5.2+ with curl module
  • Kohana v3 - 一款纯 PHP 5 框架,它的特点就是高安全性轻量级代码容易使用

安装步骤
步骤 0: 部署 Kohana v3

下载并安装 Kohana v3 的过程,请大家参考此教程:使用 Git 部署 Kohana 系统

步骤 1: 下载本扩展!

你可以在部署完毕的 Kohana 系统的根目录执行下面操作:

$ git submodule add git://github.com/icyleaf/douban.git modules/douban

完成!

或者你也可以从本github 项目 下载压缩包放置在 modules 文件夹下面。

步骤 2: 在 bootstrap.php 文件中启用该模块(默认情况下,存储在 `application' 文件夹)

/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
     'douban'        => MODPATH.'douban',     // Douban API Module
    // 'database'   => MODPATH.'database',   // Database access
    // 'image'      => MODPATH.'image',      // Image manipulation
    // 'orm'        => MODPATH.'orm',        // Object Relationship Mapping (not complete)
    // 'pagination' => MODPATH.'pagination', // Paging of results
    // 'paypal'     => MODPATH.'paypal',     // PayPal integration (not complete)
    // 'todoist'    => MODPATH.'todoist',    // Todoist integration
    // 'unittest'   => MODPATH.'unittest',   // Unit testing
    // 'codebench'  => MODPATH.'codebench',  // Benchmarking tool
    ));

目录结构

douban
  +--- classes
         +--- controller               # 豆瓣样例
         +--- douban                   # Douban API Package
                +--- api               # Douban API
                +--- core.php          # Douban Core
                +--- oauth.php         # Douban OAuth
                +--- request.php       # Douban Requset 
                +--- response.php      # Douban Response
         +--- douban.php               # Douban API Class
  +--- config
         +--- douban.php               # 豆瓣 API 配置文件
         +--- user_agents.php          # 奉送给大家一些手机 User agent 配置文件
  +--- media
         +--- images                   # 奉送给大家豆瓣 API 用到的图像      
  +--- vendor
         +--- OAuth.php                # OAuth 官方推荐 PHP 库
  +--- LICENSE
  +--- README.markdown

快速上手
Douban API Package 提供一些演示用例,系统部署完毕后可以通过 http://host/demo_douban 访问。

文件路径:classes/controller/douban_demo.php

源码库:http://github.com/icyleaf/douban

祝你开发顺利!

如果任何疑问或者 Bugs 反馈,即可以在本项目中提交 Issue 或者给我发邮件:icyleaf.cn囧gmail.com (请替换 "囧" 为 @)

Popularity: 25% [?]

2009年度总结

Filed under: 生活记录 by icyleaf on January 1, 2010.

忙碌了一天下来,刚打开电脑看着 twitter 刷出来的消息发觉已经到了 2010 年。回顾去年的那篇年度总结感受颇多,年度总结这玩意对于自己来说算是一次思维的整理和归档。就算度过了没有硬性计划的 2009 年总结还是多少要写一些。

回顾整个 2009 年做的事情,发现其中一些持续的事情是在完善 2008 年度的计划:

  1. 通过维护一个 PHP5 的轻量级开源框架 Kohana 的中文化社区,开始深层次的了解和读懂一个框架的逻辑和模式;通过参加一年的 OpernParty 开源社区的活动,(不完全)吸收了很多新鲜养分。
  2. 成立 Kohana 中文社区已经有一年多的时间也经历了很多:成功完成了对其中文文档的翻译工作;不断向社区提交和共享代码。然而对于社区的运营也感受颇多,虽然过程是辛苦的,但是我很欣慰。同时还得感谢非正常非人类,e6nian,Codeigniter中国老大 Hex,daqing 对 Kohana 和我的支持!
  3. 2009年读了一些各种各样的书,这些书都是我以前几乎没有涉及过的种类。其中一大部分(感谢 CNBorn 的推荐)得益于公司搬家,使得上下班几乎有两个小时的闲余时间,很多书籍都是在这段时间消灭的。以后还会继续读更多值得看的书,书再多还是不嫌多的。
  4. 2009年度入手了三个数码产品:iPod Touch ,Canon 450D 和 DELL 2209WA。 正式成为 Apple 使用用户和摄影爱好者。
  5. 2008年的那些项目都难产掉了,2009年又有一些项目脚踏实地的进行着:

    • 魔豆:一个用于移动终端,手持设备的非官方版豆瓣网移动版本。
    • 豆瓣 API控制台:魔豆附属项目,开发豆瓣 API 的辅助工具,仅适用于 Firefox。
    • Aplaca:一个轻量级的基于 Kohana v3 开发的论坛系统(目前已上线,因为在开发中暂无发布)。
    • Douban API Package:这是一个重构版本,最近一直在测试和写测试用例,近期会以开源协议的形式发布。
  6. 新疆出差游:得益于 090705 事件造成那个地区封锁了网络,又因公司项目的事情前去出差,第一次坐灰机,第一次跑那么远的地方。详情请参见系列游记
  7. 随着寻找各种北京美食,加上工作的性质,对于运动少了许多,今年之中抽出了不少的周末参与到户外运动之中,即活动了筋骨,也提高了身体机能,还能认识很多驴友和漂亮的风景何乐而不为呢。

总结完毕发现今年的日志数量急剧下降,或许以后的年度日志数量也会在这个数量左右徘徊,随着时间的推移,心智愈加成熟(自我感觉),心要慢慢的静下来(不能在浮躁了)深层次的学习一些技能,继续英语的学习和适当的户外运动,可能的话计划去某个地方游玩。再有就是不能把 2009年的最大的遗憾留在今年,继续加油!

Popularity: 15% [?]