CSS 中文字体的英文名称

Windows:

新细明体:PMingLiU
细明体:MingLiU
标楷体:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微软正黑体:Microsoft JhengHei
微软雅黑体:Microsoft YaHei

Mac OS的一些:

华文细黑:STHeiti Light [STXihei]
华文黑体:STHeiti
华文楷体:STKaiti
华文宋体:STSong
华文仿宋:STFangsong
俪黑 Pro:LiHei Pro Medium
俪宋 Pro:LiSong Pro Light
标楷体:BiauKai
苹果俪中黑:Apple LiGothic Medium
苹果俪细宋:Apple LiSung Light

装Office会生出来的一些:

隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei

SVN服务器的简单安装和配置

今天工作没什么事,配了一下SVN Server,特此把过程记录一下。
1.安装
在CentOS上直接 yum install subservion 即可。

2.配置
假设要把SVN仓库建在 /var/svn/repository
执行 svnadmin create /var/svn/repository
svnadim 会在 /var/svn目录下创建 repository目录,并且生成以下内容:
conf 目录
dav 目录
db 目录
format 文件
hooks 目录
locks 目录
README.txt 文件

这里主要讲一下 conf目录,里面包含的是svn的配置文件:
svnserve.conf svn配置文件
passwd 用户配置文件
authz 权限配置文件

svnserve.conf 里面主要有五个选项:
[general]
# anon-access 和 auth-access 两个选项有三个可值可选: write, read 和 none
# anon-access = none 为非验证用户不可访问
# auth-access = write 验证用户可写

anon-access = none
auth-access = write
# 指定 svn的用户配置文件为 passwd
password-db = passwd
# 指定 svn的权限配置文件为 authz
# 如果不需要配置权限,在 authz-db = authz 这一句前面加上#号即可

authz-db = authz
# 这个应该是一欢迎语之类的,哈哈,英语没学好
realm = My SVN Repository

passwd 文件:
[users]
# 每一行是一个用户
# 用户名 = 密码

afos = koo
bar = foo

authz 文件:
[groups]
# 定义一个组
manager = afos, bar

[/]
# 对于根目录 manager组具有读写权限
@manager = rw

3.启动
svnserve -d -r /var/svn/repository

4.其他
如果你的 svn不是以 svnserve -d -r /var/svn/repository 这种方式启动的话,
authz文件应该写成这样:
[groups]
# 定义一个组
manager = afos, bar

[respository:/]
# 对于根目录 manager组具有读写权限
@manager = rw

否则,会认证失败。

更多关于SVN的说明,请看这里:http://svnbook.red-bean.com/

给页面内容中的关键字加自动加上链接

在做SEO时,常常会对页面内的关键字加上链接,通过下面的代码,可以先定义好关键字以及相关的链接,然后让程序自己去加。

<?php
function auto_link_keywords($keywords, $content)
{
	$reg = '/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))(%s)/imsU';
	$replace="<a title=\"$1\" href=\"$url\">$1</a>";

	$link = array(
		'url' =>'',
		'class' =>'link_keyword',
		'target' =>'',
	);
	foreach ($keywords as $keyword => $attr)
	{
		if(is_array($attr))
		{
			$url = $attr['url'];
			$target = isset($attr['target'])? $attr['target']: $link['target'];
			$class = isset($attr['class'])? $attr['class']: $link['class'];
		} else
		{
			$url = $attr;
			$target = $link['target'];
			$class = $link['class'];
		}
		$replace = "<a title=\"$1\" href=\"{$url}\""
			.(!empty($target)? ' target="'. $target. '"': '')
			.(!empty($class)? ' class="'. $class. '"': '')
			.">$1</a>";

		$name = preg_quote($keyword, '/');
		$regexp = str_replace('$name', $name, $reg);
		$regexp = sprintf($reg, $name);
		$content = preg_replace($regexp, $replace, $content);
	}

	return $content;
}

$text = <<<TEXT
我的网站出现的问题这对seo有很多的问题,就是搜索引擎优化了。
<a href='#'>seo</a>容易搞。
PHP是门牛逼语言,php很好玩。
TEXT;

echo auto_link_keywords(
	array(
		'seo' => 'http://www.afoskoo.com/seo',
		'php' => array(
			'url' => 'http://www.php.net/',
			'target' => '_blank',
			'class' => 'php'
		)
	),
	$text
);

输出结果:

我的网站出现的问题这对seo有很多的问题,就是搜索引擎优化了。
seo容易搞。
PHP是门牛逼语言,php很好玩。

通过 bat 设置环境变量

wmic ENVIRONMENT create name=”JAVA_HOME”,username=”",VariableValue=”C:\JAVA”
wmic ENVIRONMENT where “name=’path’ and username=”” set VariableValue=”%path%;your path;”

转几道关于Javascript的问答题

转: Javascript Quiz From Perfectionkills
作者:dh20156@126.com(dh20156)

今天同事发了一个JavaScript Quiz的链接,也解答了一下,下面贴出相应的题目及解答思路。

1.

(function(){

return typeof arguments;

})();

A “object”

B “array”

C “arguments”

D “undefined”

答案为:A

arguments是由控制器进入到function执行环境时创建的对象,其[[prototype]]为Object.prototype,参见ES262-3 10.1.6

2.

var f = function g(){ return 23; };

typeof g();

A “number”

B “undefined”

C “function”

D Error

答案为:D和A都可以,需要区别浏览器,如果按照ES262的标准实现,应该是D

参见:ES262-3 13 Note

http://www.jslab.org.cn/?tag=FunctionDeclarationaAndFunctionExpression

3.

(function(x){

delete x;

return x;

})(1);

A 1

B null

C undefined

D Error

答案为:A

参见ES262-3

11.4.1, The delete Operator, If Type(Evaluate(UnaryExpression)) is not Reference, return true.

8.7, A Reference is a reference to a property of an object. A Reference consists of two components, the base object and the property name.

附加信息:

8.6.1, DontDelete, Attempts to delete the property will be ignored. See the description of the delete operator in section 11.4.1.

10.1.6,活动对象中的arguments属性为{DontDelete}

4.

var y = 1, x = y = typeof x;

x;

A 1

B “number”

C undefined

D “undefined”

答案为:D

这里容易将C和D搞混,首先,理解var的预编译,所有var声明会在控制器进入到执行环境时做的第一步事情,创建活动对象时进行处理,对应值都为undefined,接下来才是赋值操作.

var y = 1, x = y = typeof x;等同于

var y,x;

y=1;x=(y = typeof x);前面的y=1;可以忽略,所以只剩下x = (y = typeof x);

x为undefined,经过typeof运算后,返回”undefined”, typeof运算符返回结果都为string类型

参见:ES262-3 11.4.3

5.

(function f(f){

return typeof f();

})(function(){ return 1; });

A “number”

B “undefined”

C “function”

D Error

答案为:A

作用域问题,标识符查找的顺序,控制器进入函数时,活动对象将创建,arguments对象和其他声明都会被初始化到该对象,该活动对象会被插入到作用域链的顶端。

参见:ES262-3 10.2.3

6.

var foo = {

bar: function() { return this.baz; },

baz: 1

};

(function(){

return typeof arguments[0]();

})(foo.bar);

A “undefined”

B “object”

C “number”

D “function”

答案为:A

this的标识问题,注意arguments[0]();其实就是要去执行function() { return this.baz; },此时,this为global Object,即window,而window上木有baz属性或变量。

参见:ES262-3 10.1.7 ~ 10.2.3

7.

var foo = {

bar: function(){ return this.baz; },

baz: 1

}

typeof (f = foo.bar)();

A “undefined”

B “object”

C “number”

D “function”

答案为:A

this的确定和上一题相同,这里还要注意一下()运算符,它可以用作虚拟参数表,传值参数表,限定表达式的词法元素及强制表达式运算。

8.

var f = (function f(){ return “1″; }, function g(){ return 2; })();

typeof f;

A “string”

B “number”

C “function”

D “undefined”

答案为:B

这里除了()的意义外还要注意“,”运算符的二义性,它可以是数组声明时的语法分隔符,也可以是连续运算符。

9.

var x = 1;

if (function f(){}) {

x += typeof f;

}

x;

A 1

B “1function”

C “1undefined”

D NaN

答案为:C和B都可以,如果按照ES262的标准实现,应该是C

条件表达式判断部分只要条件不为false,0,null,undefined,NaN,都将认为是true,所以进入该分支,f的存在与否和第2题一样,具名函数表达式的问题。

10.

var x = [typeof x, typeof y][1];

typeof typeof x;

A “number”

B “string”

C “undefined”

D “object”

答案为:B

首先过掉var的预编译部分,得到x最后的取值为undefined,但是注意,这里是经过typeof运算后的结果,也就是说,这个undefined是String类型的值,所以,后面的连续两个typeof稍微有点多余,一个就好了,结果都是string.

11.

(function(foo){

return typeof foo.bar;

})({ foo: { bar: 1 } });

A “undefined”

B “object”

C “number”

D Error

答案为:A

函数体中的foo其实为{foo:{bar:1}},该对象上没有只有一个属性:foo,所以,函数体内的foo.bar为undefined

12.

(function f(){

function f(){ return 1; }

return f();

function f(){ return 2; }

})();

A 1

B 2

C Error (e.g. “Too much recursion”)

D undefined

答案为:B

预编译和作用域问题,控制器进入到function f执行环境中创建的活动对象中,后面定义的function f覆盖了前面的f,所以,return f()执行的结果是B

13.

function f(){ return f; }

new f() instanceof f;

A true

B false

答案为:B

这个主要看new操作原理,如果构造器执行过程中返回值是一个对象,那么将返回该对象,而该对象却不是在执行construct过程中期望的那个对象,参见:ES262-3 13.2.2

14.

with (function(x, undefined){}) length;

A 1

B 2

C undefined

D Error

答案为:B

with语句块中的操作上下文将是with(表达式)中的表达式,而这个部分是一个function,那么,它的length自然是函数的形参个数。

See also:

http://perfectionkills.com/javascript-quiz/

ECMA262深入浅出

javascript 格式化数值函数numberFormat

function numberFormat(n, d, c)
{
    var t, p = 0;
   c = c || ‘,’;
   if(d == 0 || d)
   {
      p = Math.pow(10, d);
      n = Math.round(n * 1 * p) / p;
   }
   t = (n + ”).split(‘.’);
   if(p && p != 1)
   {
      t[1] = t[1] || ”;
      t[1] += t[1].length < d?
      (p + ”).substr(1, d – t[1].length):”;
   }
   t[0] = t[0].replace(/(?=(?!\b)(?:\w{3})+$)/g, c)
   return t.join(‘.’);
}

var num = [
123456.789,
33699845.175,
3367.544,
5.145, 3.1,
1334.0
];

for(var n in num)
{
   num[n] = numberFormat(num[n], 1);
}
alert(num.join(‘\n’));

输出:
123,456.8
33,699,845.2
3,367.5
5.1
3.1
1,334.0