django Settings cannot be imported 错误解决


在命令行中直接敲入Python命令进入交互模式,然后使用
from django.template import  Template ,Context
t  = Template(”Test is {{test}}”)

会导致:ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.原因是django的配置信息没有初始化
有两种解决方法,
一种是切换到你项目或者APP所在的目录使用manage.py shell命令启动交互窗口
还有一种是手动将django的配置初始化:
>>> from django.conf import settings
>>> settings.configure()

JavaScript完美验证URL正则


这个url的正则表达式判断的JavaScript!比较全面的。它验证的情况包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!用户名等等信息,貌似作者也是在网上找的,我从一个项目代码中扣出来的,是我见过的最强最全面的url验证方式!太猛了,贴在这里与大家共享先,以后不记得的时候来博客上找找,URL的验证实在是很频繁。

function IsURL(str_url){
var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@
+ "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
+ "|" // 允许IP和DOMAIN(域名)
[...]

记忆(memoization)在JavaScript中的应用


函数可以用对象去记住先前操作的结果,从而能避免无谓的运算。这种优化被称之为记忆,英文叫做memoization。关于memoization可以参见维基百科的解释。JavaScript的对象和数组要实现这样的优化是非常方便的,比如说,我们要递归计算著名的fibonacci数列,一个fibonacci数字是之前两个fibonacci数字之和,最前面两个数字是0和1.

var fibonacci = function (n) {
return n <2 ? :fibonacci(n-1) + fibonacci(n – 2);
};
for(var i = 0; i <= 10; i++) {
document.writeln(’//’ + i + ":" + fibonacci(i));
}

这样的算法是可以工作的,但本身做了很多无谓的运算。fibonacci函数被调用了453次。我们调用了11次,而自身调用了442次去计算可能已经计算过的值。如果我们让该函数具备记忆功能就可以显著减少运算量。
我们在一个名为memo的数组中保存我们的存储结果,存储结果可以隐藏在闭包中。当我们的函数被调用时,这个函数首先看是否已经知道存储结果,如果已经知道,就立即返回这个存储结果。

var fibonacci = function () {
var memo = [0,1];
var fib = function [...]

解决file_get_contents的超时问题


file_get_contents一步就做完了打开,读取,关闭的三个动作,过程相当自动化,并且可以读取远程内容,非常方便,在网络状况差的情况下,可能会导致程序执行陷入停滞或者过慢,因为不停的重试和等待PHP进程本身的超时才会退出。晚上再次阅读了PHP手册,发现可以用一个比较变态的东西来解决,就是创建一个可以控制的资源句柄,通过控制资源句柄超时来控制file_get_contents这个方法的超时时间,使用起来很方便,也很简单。

$opts = array(
‘http’=array(
‘method’="GET",
‘timeout’=1, //设置超时,单位是秒,可以试0.1之类的float类型数字
)
);
$context = stream_context_create($opts);
$contents = file_get_contents($url,false,$context);

得到内容之后该怎么处理就怎么处理了,关于tream_context_create这个方法的更多HTTP协议参数,请参见:HTTP context options,其他协议,请参见Context options and parameters
Update 09-09-17: 我测试的时候使用的g.cn的首页,非常快,把timeout设置为1,没有超时的感觉,我以为是分钟为单位,感谢的Lightning$指正,单位是秒。

正则表达式匹配中文符号(GBK编码)


事实证明,网上的很多东西都是扯淡,不过原理还是有的,我碰到一个需求,给定一段文字中(GBK编码),去除所有符号,不相干符号,包括标点,日文片假名之类的,于是我在网上搜啊,搜啊,得到的结果要么就是错的,要么就根本好不相干,被抄袭得最厉害的是http://community.mybbchina.net/thread-212-post-507.html,可怜的作者,我也不知道这些人为什么抄这个,我就没测试成功过,连GBK的字符集区间都没弄清楚。
其实指定字符编码匹配中文很简单,GBK编码表中很明确的规定了所有的符号位置,而且刚好是一个区间,在维基百科上有详细的介绍,比如我要把类似
addd中华ds,#¥%…&((212))}}A■g民国ds中-啊国fjsd,【】啊Y
这样的字符串中所有非中文、英文、数字字符全部去除掉,姑且叫去除的字符为火星文,去除火星文的PHP写法为:

preg_replace("/([\xA1-\xA9].{1}?)*?/", "", $str);

这样所有在全角状态下输入的非中文,英文和数字将被替换掉,如果还需要进一步处理英文状态下的,那就判断一下ASCII码值吧,或者你怕麻烦也可以把所有的都列出来,然后替换,可以参考下面,在网上找来的,非我写的,忘了出处了

/**
* 清除所有常见标点符号
* @param $pointer
* @return unknown_type
*/
function clear_point($pointer)
{
return str_replace
(
array(’ ‘,"~","!","@","#","$","%","^","&","*",",",".","?",";",":","’",’"’," [",
"]","{","}","!"," ¥","……","…","、",",","。","?",";",":","‘","“","”",
"’"," 【","】","~","!","@","#","$","%","^","&","*",",","."," <",
[...]