2009年4月4日星期六

OpenSuSE 11.1 下texlive, cjk, latex 中文设置

使用OpenSuSE 11.1也有一段时间了,由于工作较忙,一直懒得折腾cjk-latex的中文,最近使用amsn时发现有一个TEXIM插件挺有意思的,所以顺带地把cjk-latex的中文也设置了一下。

首先要安装相关的软件包,基本上安装软件时选中texlive-cjk-latex-extra其它的包也都顺带选中安装了。下面说说设置的过程。

第一步:把simsun.ttc、simhei.ttf等字体拷贝到/usr/share/fonts/truetype目录下面,主要是为了让后续的SuSEconfig操作能顺利的找到文件;

第二步:编辑/etc/ttf2pk/ttfonts.map,添加相关内容。

在“% simplified Chinese:”后面添加如下内容:
%下面是宋体GB编码设置
song-gb@UGB@ simsun.ttc
song-s-gb@UGB@ simsun.ttc Slant=0.167
song-r-gb@UGB@ simsun.ttc Rotate=Yes
song-rs-gb@UGB@ simsun.ttc Rotate=Yes Slant=0.167
%下面是宋体GBK编码设置
song-gb@UGB@ simsun.ttc
song-s-gb@UGB@ simsun.ttc Slant=0.167
song-r-gb@UGB@ simsun.ttc Rotate=Yes
song-rs-gb@UGB@ simsun.ttc Rotate=Yes Slant=0.167
%下面是宋体Unicode编码设置
song-uni@Unicode@ simsun.ttc
song-s-uni@Unicode@ simsun.ttc Slant=0.167
song-r-uni@Unicode@ simsun.ttc Rotate=Yes
song-rs-uni@Unicode@ simsun.ttc Rotate=Yes Slant=0.167

其它字体类似添加,在这里为了便于区分标记,把@Unicode@、@UGBK@和@GB@前面的名称都做了相应的描述,简单的song、songsl和songr也是可以的,不过后面的tfm文件相关的名称都要改过来了。

第三步:fd文件的添加,主要操作目录是/usr/share/texmf/tex/latex/CJK,在其下面的GBK, UTF8目录下添加相应的fd文件。

GBK目录下,添加c19song.fd,内容可以参考其它fd文件,大致如下:
\def\fileversion{4.7.0}
\def\filedate{2006/10/17}
\ProvidesFile{c19song.fd}[\filedate\space\fileversion]

% character set: GBK
% font encoding: CJK (extended)

\DeclareFontFamily{C19}{song}{\hyphenchar \font\m@ne}

\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * song-gbk}{}
\DeclareFontShape{C19}{song}{m}{sl}{<-> CJK * song-s-gbk}{}
\DeclareFontShape{C19}{song}{m}{it}{<-> CJKssub * song/m/sl}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * song-gbk}{\CJKbold}
\DeclareFontShape{C19}{song}{bx}{sl}{<-> CJKb * song-s-gbk}{\CJKbold}
\DeclareFontShape{C19}{song}{bx}{it}{<-> CJKssub * song/bx/sl}{\CJKbold}

\endinput

还可以添加c19songr.fd文件,大致内容如下:

\def\fileversion{4.5.2}
\def\filedate{2007/05/15}
\ProvidesFile{c19songr.fd}[\filedate\space\fileversion]

% simplified Chinese font song created by Founder.

\DeclareFontShape{C19}{songr}{m}{n}{<-> CJK * song-r-gbk}{}
\DeclareFontShape{C19}{songr}{m}{sl}{<-> CJK * song-rs-gbk}{}
\DeclareFontShape{C19}{songr}{m}{it}{<-> CJKssub * songr/m/sl}{}
\DeclareFontShape{C19}{songr}{bx}{n}{<-> CJKb * song-r-gbk}{\CJKbold}
\DeclareFontShape{C19}{songr}{bx}{sl}{<-> CJKb * song-rs-gbk}{\CJKbold}
\DeclareFontShape{C19}{songr}{bx}{it}{<-> CJKssub * songr/bx/sl}{\CJKbold}

\endinput

在UTF8目录下添加c70song.fd和c70songr.fd,内容和上面类似,只要把里面的c19换成c70, gbk改成uni就可以了。具体可以参见其它fd文件。

最后“#mktexlsr”刷新一下。

第四步:SuSEconfig操作,添加tfm字体文件和一些链接。在这一点上SuSE设计得很方便,执行命令:

#SuSEconfig --module cjk-latex

这样,SuSEconfig的cjk-latex模块能自动根据/etc/ttf2pk/ttfonts.map中的设置创建宋体的tfm字体文件,当然前提是能在/usr/share/fonts/truetype目录中找到simsun.ttc文件。

第五步:搞定dvipdfmx,这样就可以生成可拷贝的中文pdf文档。

添加/var/lib/texmf/fonts/map/dvipdfm/cid-x.map文件,内容如下:

song-gbk@UGBK@ unicode :0:simsun.ttc
song-s-gbk@UGBK@ unicode :0:simsun.ttc -s .167
song-uni@Unicode@ unicode :0:simsun.ttc
song-s-uni@Unicode@ unicode :0:simsun.ttc -s .167

song-r-gbk@UGBK@ Identity-V :0:simsun.ttc
song-rs-gbk@UGBK@ Identity-V :0:simsun.ttc -s .167
song-r-uni@Unicode@ Identity-V :0:simsun.ttc
song-rs-uni@Unicode@ Identity-V :0:simsun.ttc -s .167

后四行是用于旋转90度字体的。
然后,修改/usr/share/texmf/dvipdfm/dvipdfmx.cfg只使用cid-x.map文件,最后mktexlsr就可以了。

这次一切都比较顺利,很快搞定,呵呵!

2009年2月26日星期四

Django 中的转义--escape

django字符串分为三类:
1. raw strings: 原始的python字符串或unicode字符串;如果auto-escaping(自动转义)起作用,则字符串被转义,否则不做改变输出;
2. safe strings: 被标记为安全的字符串,以免在输出时被转义,一般被用于含有原始html标记字符串的输出;
from django.utils.safestring import SafeData
if isinstance(value, SafeData):
.................
3. needing escaping strings: 需要转义的字符串,在输出的时候经常被转义,不论是否auto-escaping已经启用,即使auto-escaping启用,字符串都只被转义一次。 needing escaping strings 主要是为了转义过滤器执行而存在。

template 过滤分为两种情况:
1. 自定义的过滤器不产生任何不安全的html标记到输出结果中,在这种情况下,可以让django解决自动转义问题。需要
设置自定义过滤器的“is_safe"属性为True,譬如:
@register.filter
def myfilter(value):
return value
myfilter.is_safe = True
is_safe=True告诉django过滤器是安全的,如果输入字符串为True则输出字符串是安全的,否则django
将自动转义。如果template启用auto-escaping,则无论输入字符串是否标记为safe,输出字符串都会被
转义。
2. 另外,过滤器能手工管理任何必要的转义,特别是当需要在输出中产生新的html标记,或者需要标记输出结果为safe,以免在输出时被转义,这样输出结果中包含的html标记就不会再被转义了。要想标记输出为safe字符串,使用django.utils.safestring.mark_safe(),不过需要确定其确实是安全的。如果想知道目前auto-escaping的状态,在过滤器中设置needs-autoescape属性为True,这样告诉django过滤器
需要传递一个关键参数:autoescape,此变量如果为True,则autoescape被启用。

from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe

def initial_letter_filter(text, autoescape=None):
first, other = text[0], text[1:]
if autoescape:
esc = conditional_escape
else:
esc = lambda x: x
result = '%s%s' % (esc(first), esc(other))
return mark_safe(result)
initial_letter_filter.needs_autoescape = True

以上例子中,输出结果被标记为safe,这样可以直接插入到template中,而不会被转义。

3. template safe
去掉template的autoescape可以使用safe过滤器,也可使用autoescape标签,还可修改render的autoescape属性。
使用safe filter:

This will be escaped: {{ data }}

This will not be escaped: {{ data|safe }}

4. 使用autoescape标签:
Auto-escaping is on by default. Hello {{ name }}
{% autoescape off %}
This will not be auto-escaped: {{ data }}.
Nor this: {{ other_data }}
{% autoescape on %}
Auto-escaping applies again: {{ name }}
{% endautoescape %}
{% endautoescape %}
如果在autoescape的标签中include 其他的tags,autoescape的属性将被子tags继承。

5. 修改Context类的autoescape属性:
def render(self, context):
# …
new_context = Context({‘var’: obj}, autoescape=context.autoescape)
注:autoescape标签的优先级高于Context类的autoescape属性,即如果Context中autoescape设置与模板中autoescape标签冲突,则使用autoescape标签的autoescape设置值。

6、使用方法函数mark_safe
使用mark_safe函数标记后,django将不再对该函数的内容进行转义。

2009年2月19日星期四

一个产品展示网页

接触Linux有段时日了,最近一直关注OpenSUSE发行版。OpenSUSE 11.1发布时,发现其主页“http://www.opensuse.org”上“snapshots”挺有创意的,就模仿做了一个产品展示网页,呵呵!


2009年2月18日星期三

Linux下搭建 Django + Apache + MySQL 网站应用平台

下面以OpenSUSE 11.1为例进行说明,其它Linux发行版没有试过,情况应该基本相同。

一、Django的安装
Django的安装比较简单,从http://www.djangoproject.com/download/下载相应的安装文件 :Django-*-final.tar.gz,解压缩安装:
tar zxvf Django-*-final.tar.gz
cd Django-*
sudo python setup.py install

二、Apache的安装设置
Apache具体的安装比较简单,不再详述。其主要的配置文件在/etc/apache2目录下面,自定义设置可以添加文件:httpd.conf.local,然后让apache加载自定义文件,在/etc/sysconfig/apache2中设置:
APACHE_CONF_INCLUDE_FILES = "/etc/apache2/httpd.conf.local"
根据实际情况,此文件中的“APACHE_SERVERNAME”也要设置一下。
要把Django的应用部署到Apache上,需要安装mod_python模块(软件包apache2-mod_python),mod_python模块安装后,需要在/etc/sysconfig/apache2中设置APACHE_MODULES,添加“python”或“mod_python”项即可。

然后在httpd.conf.local中为Django添加相应设置:
Alias / "/home/users/public_html"

Options None
Order deny,allow
Allow from all


最后重启Apache:
#/etc/init.d/apache restart

三、MySQL的安装设置
MySQL的安装使用zypper安装即可,一些具体的配置如下:
设置root密码:
$mysqladmin -u root password
为Django创建数据库:
$mysql -u root -p
>create database djangodb;
>grant all privileges on djangodb.* to users@localhost identified by "****";
>quit

四、MySQL+Django联合中文设置
1.Django:
a.创建项目:
$django_admin.py startproject django_example
b.修改setting.py:
TIME_ZONE = "Asia/Shanghai"
LANGUAGE_CODE="zh-CN"
DATABASE_ENGINE = "mysql"
DATABASE_NAME = "djangodb"
DATABASE_USER = 'users'
DATABASE_PASSWORD = '*****'

2.MySQL
修改/etc/my.cnf
在[client]和[mysqld]中添加:
default-character-set = utf8
重启MySQL:
/etc/init.d/mysql restart

最后调试运行:
$python manage.py runserver
打开http://127.0.0.1:8000确认Django是否可以正常工作。

说说与工作有关的话题-纤维水泥外墙板

纤维增强水泥外墙外挂板简称外墙板,在日本也叫外壁材。外墙板的种类很多,主要生产工艺有:抄取法、流浆法、模压法和挤出法。抄取法历史比较悠久,但产品性能有一些固有的缺陷。目前比较先进的生产工艺是挤出法和模压法,两者都有各自的优势。这里主要说说挤出法生产工艺。

先说说挤出法外墙板的分类: 按密度分类分为高密度外墙板和低密度外墙板,高密度一般要求密度在1.6-1.8g/cm3,这种板密度大,体积安定性好,可以不涂装直接使用,也就是素装(具有水泥基色,这也是时下外墙装饰的潮流)。一般为了降低单位面积的重量,高密度板一般都会抽孔,根据板的厚薄抽孔率从20%-60%不等(也有一些用于特殊用途的板不抽孔)。同时由于板材密度大,用组合刀具对其精加工即费刀具,又容易造成破损,所以,高密度板的企口都是挤出成型的。

与高密度板不同,低密度板密度一般在1.0-1.3g/cm3,板材可刀具加工,所以挤出成型不需要带企口,而是精加工铣出来的,这样由于对挤出成型精度要求不高,所以合格率较高。但是低密度板素板的吸水率较大,必须要有涂装来防水。

按是否压花分为平板(或条纹板)和压花板,从现在了解的情况看,无论是低密度板还是高密度板都可以即抽孔又压花,这也是挤出法的发展趋势。抽孔可以在基本不影响力学性能的前提下,减少板材重量,压花加上套色涂装可以丰富外墙板的表面装饰效果。目前,日本的野泽公司就是生产高密度抽孔压花厚板,厚度一般在40mm以上;松下电工-久保田就是生产低密度抽孔压花薄板,厚度在20mm以下。这是技术发展的两个方向,高密度抽孔压花板一般都要做厚板,因为高密度抽孔压花薄板要带企口挤出,生产难度大,且与低密度抽孔压花薄板相比优势不明显。同样低密度抽孔压花板一般要做薄板,低密度抽孔压花厚板与高密度抽孔压花厚板相比在性能上处于劣势。

在生产工艺上面,总体而言,生产厚板的工艺要比生产薄板的工艺简单,生产低密度板要比生产高密度简单,最为复杂的就是生产高密度薄板,其对原材料及设备的精度要求都很高。同时既抽孔又压花的工艺也存在一些难点,主要在压花辊的速度同步上。

生产低密度外墙板配方也是一个难点,主要是如何在保证强度的前提下降低比重,现在的方向是两种:一是使用轻质填充材,譬如珍珠岩和发泡EPS,一是使用高吸水性物质,增加用水量降低比重。轻质填充材目前种类有限,效果一般,特别是外观效果不好。高吸水材料目前成本都较高,高吸水率MC是一个可以探索的方向。

市场这一块中国国内市场和日本市场还不太一样,日本经济发达,属于地震多发地带,粘土资源匮乏,所以结构以轻钢结构和木结构为主,外墙主要采用轻质外墙外挂板。而国内建筑目前还是以钢混框架结构为主,在加上空心粘土砖或砌块,成本低。加上中国人的传统,中国人对家有很强的守护心理,认为外墙的围护功能一定要强,必须要能抵抗"强敌"的入侵。所以,国内对轻质外墙薄板的接受度有限,加上轻钢结构和木结构市场刚刚起步,所以外墙市场这一块轻质外墙薄板推广难度比较大。

但是,由于5.12大地震,结构抗震越来越受到重视,这一定会加快钢结构的发展,加上国家为扩大内需加快基础设施建设,如果此时推出外墙厚板,在公共建筑、隔声屏障以及幕墙上应该有很好的市场。好像国家在限制玻璃幕墙的使用面积,把外墙厚板和玻璃幕墙搭配效果非常好(野泽在国内已经有工程使用),而且外墙挂板的安装方式与玻璃幕墙非常类似,所以组合推广应该有很大市场。

闲来无事,随便聊聊,呵呵!