home subscribe to email updates subscribe to RSS updates

python之HTML-ENTITIES转码

在php里可以很方便的利用

mb_convert_encoding($text,'HTML-ENTITIES',$from_enc);

将CJK之类的转成实体码,在任何语言下都不会出现乱码。
用python写了个相似的实现。

def nochaoscode(fcode, s):
	s = s.decode(fcode).encode('utf-16-be')
	i = 0
	out = ''
	while i < len(s):
		c = ord(s[i])*256 + ord(s[i+1])
		if c<128:
			out += chr(c)
		elif c != 65279:
			out +=  "&#" + str(c) + ";"
		i = i + 2
	return out

print nochaoscode(’gbk’, ‘再次对我2008′)

北京一夜

昨天晚上和Helvin,阿信,小陆刘老湿一起去喝啤酒。
赵明亮一起去,他说吃过了,不去了。
先吃了点烧烤,又跑到尚街附近去吃肥牛火锅,
每人喝了几瓶啤酒,感觉优点晕晕的,
后来人家要打烊了,我们也转移战场,
从尚街走到华堂,旁边有个24小时营业的麦当劳,
一人要了点喝的,吃的。
继续吹牛聊天,没什么主题。
一看窗外,天已经发亮了,四点多了,
一帮人又从华堂步行到阿信的宿舍,
刘老湿和阿信玩使命召唤游戏,
我睡觉。

如何在Smarty模板文件里使用类方法

因为项目设计需要,想在模板里调用类方法出来变量,
假设我有个类Util

<?php
class Util{
	static function upper($str)
	{
		return strtoupper($str);
	}
}
?>

原来的方法

{$title|upper}

现在使用Util::upper,标签如下:

{class name="Util" method="upper" args="$title"}

新建Smarty插件function.class.php

function smarty_function_class($params, &$smarty)
{
   if(isset($params['name']) && isset($params['method'])){
		$c = $params['name'];
		$m = $params['method'];
		$args = $params['args'];
		return call_user_func(array($c,$m),$args);
   }else{
		return ”;
   }

[设计模式]责任链模式

C#实现:http://www.lemongtree.com/Archives/Chain_of_Responsibility.aspx

Handler:传递者接口,定义一个处理请求的接口;实现链中下一个对象(可选)
ConcreteHandler:具体传递者,处理它所负责的请求;可以访问链中下一个对象,如果可以处理请求就处理它,否则将请求传递给下一个对象。
Client:客户端应用程序。

实际生活中的例子:
员工请假,部门经理可以批3天以下的假期,中心总监可批5天以下的假期,副总裁可批10天以下的假期,CEO可以批20天以下假期,超过20天需要开会决定。
示例:

<?php
// "Handler"
//传递者抽象类
abstract class Handler
{
	protected $successor; //维护它的下一个处理对象   

	public function setSuccessor(Handler $successor)
	{
	  $this->successor = $successor;
	}

	//处理方法
	public abstract function handleRequest($request);
}

// 部门经理   

class ConcreteHandler1 extends Handler
{
	public function handleRequest($request)
	{
		if ($request >= 0 && $request <= 3)
		{
			printf(" %s 天假期已由部门经理批示\r\n",$request);
		}
		else if ($this->successor != null)
		{
			$this->successor->handleRequest($request);
		}
	}
}   

// 中心总监   

class ConcreteHandler2 extends Handler
{
	public function handleRequest($request)
	{
		if ($request >= 4 && $request < 6)
		{
			printf(" %s 天假期已由中心总监批示\r\n", $request);
		}
		else if ($this->successor != null)
		{
			$this->successor->handleRequest($request);
		}
	}
}   

//副总裁   

class ConcreteHandler3 extends Handler
{
	public function handleRequest($request)
	{
		if ($request >=6 && $request < 11)
		{
			printf(" %s 天假期已由副总裁批示\r\n", $request);
		}
		else if ($this->successor != null)
		{
			$this->successor->handleRequest($request);
		}
	}
}
//CEO
class ConcreteHandler4 extends Handler
{
	public function handleRequest($request)
	{
		if ($request >= 11 && $request < 21)
		{
			printf(" %s 天假期已由CEO批示\r\n", $request);
		}
		else if ($this->successor != null)
		{
			$this->successor->handleRequest($request);
		}
	}
}
//开会决定
class ConcreteHandler5 extends Handler
{
	public function handleRequest($request)
	{
		if ($request >=  21)
		{
			printf(" %s 天假期需要开会决定\r\n",$request);
		}
		else if ($this->successor != null)
		{
			$this->successor->handleRequest($request);
		}
	}
}

//example

$h1 = new ConcreteHandler1();
$h2 = new ConcreteHandler2();
$h3 = new ConcreteHandler3();
$h4 = new ConcreteHandler4();
$h5 = new ConcreteHandler5();

$h1->setSuccessor($h2);
$h2->setSuccessor($h3);
$h3->setSuccessor($h4);
$h4->setSuccessor($h5);   

$requests = array(2, 5, 14, 22);

foreach ($requests as $request)
{
	$h1->handleRequest($request);
}

?>

Links about lucene,xapian,sphinx……

Xapian in Python

Pumping Up Your Applications with Xapian Full-Text Search

Build a custom search engine with PHP

Chinese Xapian search and indexing

Create Lucene Database Search in 3 minutes

用GB怎么接受UTF-8编码的URL(ASP)

赵总

提交页面是用UTF-8的,类似tijiao.php?q=%E4%BD%A0%E5%A4%A7%E7%88%B7
接受页面是GB2312的,用jieshou.asp?q=%E4%BD%A0%E5%A4%A7%E7%88%B7
怎么才能正常把UTF-8的编码转到GB2312的编码(不需要输出正常汉字,只要汉字的gb编码即可)呢?
jieshou.asp改怎么写

关于 Session.CodePage 和Response.CodePage

Defines a code page (character set) for the system running the script engine.Setting Response.CodePage explicitly affects a single page, whereas Session.CodePage affects all responses in a session.

我写的

<%@language ="vbscript" codepage="936"%>
<%
Session.codepage=65001
'Response.CodePage = 65001
Dim q:q =Request.QueryString("q")
Session.codepage=936
'Response.CodePage = 936
response.write(q)
%>

分布式版本控制系统

因为目前的项目赶时间进度,在感觉来的时候把代码带回宿舍做。
原来钟爱的svn要完成现在的需要有些难度,或者实现起来复杂,
所以就需要一款分布式版本控制系统( Distributed Revision Control ),
发现以下三个:
Git (C+Perl+sh)
http://git.or.cz/gitwiki/GitDocumentation
Mercurial ( Python+C)
http://www.selenic.com/mercurial/wiki/
Bazaar ( Python)
http://bazaar-vcs.org/Documentation
最终选择了bazaar,在windows下运行还是不错的。

Git过分依赖系统,听说有windows版本,不过在windows下运行不好。
Mercurial刚看了下,不错。有时间尝试下。
关于bazaar遗憾的就是不能像svn:keywords那样在提交的时候替换关键字,
也可能是我没有发现,不过很喜欢那个通过ftp push的功能。
Emacs默认带了bzr的,不错。

更新:
刚发现一份详细的比较文章
Distributed Version Control Systems: A Not-So-Quick Guide Through

小侄女出生

昨天零点多出生的,弟弟今天一大早打电话告诉我的,昨天我手机没电了,没开机。
错过了第一时间知道的机会。
让我给想个名字呢。
是要好好像一个。

ps:
想起来了,前段时间我做了胎梦,就是梦见生了女儿的。

天花板上面女人的尖叫声

被吵醒了,洗个澡,写下几个字,等睡意再次来临。

神啊,救救我

慈悲的你啊,如果真的存在,就请救救我。

Next entries »