2008年3月31日

有备无患:用Vista字体配置Sun JDK 1.6

也许是升级JDK的时候,把原本配置好的fontconfig.properties给冲掉了,今天emerge OmegaT之后,发现“方框字”又重现江湖。重新在Google上搜了一番,用Bitstream Vera的英文字体,和Windoze Vista的繁日韩字体——正黑,Meiryo和Malgun,重写了fontconfig.properties,直接复制到/opt/sun-jdk-1.6.x/jre/lib/即可。

fontconfig.properties:

# Version

version=1

# Component Font Mappings

allfonts.chinese-gb18030=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.chinese-gb18030.motif=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.chinese-big5=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.chinese-big5.motif=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.lucida=-bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1

serif.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
serif.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
serif.plain.latin-1=-bitstream-bitstream vera serif-medium-r-normal--0-0-0-0-p-0-iso8859-1
serif.plain.latin-1.motif=-bitstream-bitstream vera serif-medium-r-normal--0-0-0-0-p-0-iso8859-1

serif.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
serif.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
serif.bold.latin-1=-bitstream-bitstream vera serif-bold-r-normal--0-0-0-0-p-0-iso8859-1
serif.bold.latin-1.motif=-bitstream-bitstream vera serif-bold-r-normal--0-0-0-0-p-0-iso8859-1

serif.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
serif.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
serif.italic.latin-1=-bitstream-bitstream vera serif-medium-i-normal--0-0-0-0-p-0-iso8859-1
serif.italic.latin-1.motif=-bitstream-bitstream vera serif-medium-i-normal--0-0-0-0-p-0-iso8859-1

serif.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
serif.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
serif.bolditalic.latin-1=-bitstream-bitstream vera serif-bold-i-normal--0-0-0-0-p-0-iso8859-1
serif.bolditalic.latin-1.motif=-bitstream-bitstream vera serif-bold-i-normal--0-0-0-0-p-0-iso8859-1

sansserif.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.plain.latin-1=-bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1
sansserif.plain.latin-1.motif=-bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1

sansserif.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.bold.latin-1=-bitstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1
sansserif.bold.latin-1.motif=-bitstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1

sansserif.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.italic.latin-1=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1
sansserif.italic.latin-1.motif=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1

sansserif.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.bolditalic.latin-1=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1
sansserif.bolditalic.latin-1.motif=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1

monospaced.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.plain.latin-1=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1
monospaced.plain.latin-1.motif=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1

monospaced.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.bold.latin-1=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1
monospaced.bold.latin-1.motif=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1

monospaced.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.italic.latin-1=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1
monospaced.italic.latin-1.motif=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1

monospaced.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.bolditalic.latin-1=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1
monospaced.bolditalic.latin-1.motif=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1

dialog.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialog.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialog.plain.latin-1=bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1
dialog.plain.latin-1.motif=bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1

dialog.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialog.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialog.bold.latin-1=itstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1
dialog.bold.latin-1.motif=itstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1

dialog.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialog.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialog.italic.latin-1=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1
dialog.italic.latin-1.motif=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1

dialog.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialog.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialog.bolditalic.latin-1=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1
dialog.bolditalic.latin-1.motif=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1

dialoginput.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.plain.korean.motif=--microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.plain.latin-1=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1
dialoginput.plain.latin-1.motif=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1

dialoginput.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bold.latin-1=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1
dialoginput.bold.latin-1.motif=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1

dialoginput.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.italic.latin-1=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1
dialoginput.italic.latin-1.motif=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1

dialoginput.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bolditalic.latin-1=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1
dialoginput.bolditalic.latin-1.motif=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1

# Search Sequences

sequence.allfonts=latin-1
sequence.allfonts.Big5=latin-1,chinese-big5
sequence.allfonts.GB2312=latin-1,chinese-gb18030
sequence.allfonts.x-euc-jp-linux=latin-1,japanese-x0208
sequence.allfonts.EUC-KR=latin-1,korean
sequence.allfonts.GB18030=latin-1,chinese-gb18030
sequence.fallback=lucida,chinese-big5,chinese-gb18030,japanese-x0208,korean

# Exclusion Ranges

exclusion.japanese-x0208=0390-03d6,2200-22ef,2701-27be

# Font File Names
filename.-microsoft-microsoft_jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0=/usr/share/fonts/TTF/msjh.ttf
filename.-microsoft-microsoft_jhenghei-bold-r-normal--0-0-0-0-p-0-gb18030.2000-0=/usr/share/fonts/TTF/msjhbd.ttf
filename.-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0=/usr/share/fonts/TTF/meiryo.ttc
filename.-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0=/usr/share/fonts/TTF/meiryob.ttc
filename.-microsoft-malgun_gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1=/usr/share/fonts/TTF/malgun.ttf
filename.-microsoft-malgun_gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1=/usr/share/fonts/TTF/malgunbd.ttf

filename.-bitstream-bitstream_vera_sans-medium-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/Vera.ttf 
filename.-bitstream-bitstream_vera_sans-bold-o-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraBI.ttf 
filename.-bitstream-bitstream_vera_sans-bold-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraBd.ttf 
filename.-bitstream-bitstream_vera_sans-medium-o-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraIt.ttf 
filename.-bitstream-bitstream_vera_sans_mono-bold-o-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMoBI.ttf 
filename.-bitstream-bitstream_vera_sans_mono-bold-r-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMoBd.ttf 
filename.-bitstream-bitstream_vera_sans_mono-medium-o-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMoIt.ttf 
filename.-bitstream-bitstream_vera_sans_mono-medium-r-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMono.ttf 
filename.-bitstream-bitstream_vera_serif-medium-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraSe.ttf 
filename.-bitstream-bitstream_vera_serif-bold-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraSeBd.ttf 

# AWT X11 font paths

awtfontpath.latin-1=/usr/share/fonts/ttf-bitstream-vera
awtfontpath.chinese-big5=/usr/share/fonts/TTF
awtfontpath.chinese-gb18030=/usr/share/fonts/TTF
awtfontpath.japanese-x0208=/usr/share/fonts/TTF
awtfontpath.korean=/usr/share/fonts/TTF

标签:

2008年3月27日

南言北哲:你最想看哪些季后赛首轮的对局?(一)

狂野的西部。每个真-NBA球迷都说,这是二十年来最好看的常规赛季,可对身在其中的教练和球员们就不是那么一回事了。正徘徊于鬼门关口的掘金主帅 George Karl把它称作“哈雷彗星年”,“这种情况可能每99年才能遇到一次。我只是想知道为什么霉运会落在自己头上呢。”

掘金战绩为目前43胜28负,仅落后勇士(43胜27负)半个胜场,排名西部第九。他们还有两场和勇士的比赛。所以,机会仍然掌握在他们自己手中。只是西部球队的官子阶段无比惨烈,很有可能有一只球队会达到50胜,或48胜却被挡在大门之外。

这样激烈的常规赛,不禁让我们更加期待季后赛的到来,让我们数数看哪些球队的捉对厮杀最值得期待?



第一局:小牛 vs 湖人

——去年我们被“黑八”了,今年我们要缔造自己的“黑八神话”


小牛 vs 湖人


刚才说了掘金和勇士,其实还有一只球队也在悬崖边,达拉斯小牛。小牛现在45胜26负,领先勇士一个半胜场,排名西部第七。

可在全明星周末之前,小牛35胜18负,高居西部第三。一夜之间,联盟顶级控卫Jason Kidd重回达拉斯,风云突变,小牛18战仅10胜,面对季后赛球队8战全负。更糟糕的是,他们在和马刺的比赛中失去了主将Dirk Nowitziki。而在Nowitziki可能缺席的两周时间里,小牛赛程并不轻松,他们将先后挑战勇士(2次),掘金,湖人和太阳,稍有不慎小牛可能会落到西部第八。

如果他们最终以第八顺位进入季后赛,那会变得非常有意思。去年,Nowitziki捧得常规赛MVP的奖杯,率领球队打出联盟最佳战绩,但是小牛却在第一轮被勇士4比2击败,一切的荣耀化成了新世纪第一个“黑八神话”的背景。而今年,他们将很有可能会碰到湖人或者黄蜂,以及今年的两个常规赛MVP的最热门人选Kobe Bryant和Chris Paul。

你明白我的意思了吧:去年被“黑八”的常规赛MVP今年将尝试“黑八”今年的常规赛MVP候选。这像绕口令。另外我建议,如果David Stern犹豫不决于把常规赛MVP颁给谁,Kobe or Paul,不如给和小牛对阵的那位,这样也许会创造另一个被“黑八”的常规赛MVP,hoho。

如果在湖人和黄蜂之间,为小牛挑一个季后赛首轮的对手,我更想选湖人。(wyt:这是不是暗示Kobe应该是MVP?呵呵,I have no idea...)

本赛季至今小牛和湖人的三场比赛都异常激烈。在一月份的一场比赛中,小牛凭借第三节的高潮以112比 105战胜了湖人。在Kidd交易完成后的两场比赛中,其中一场打成加时湖人以108比104侥幸取胜,而另一场小牛在落后25分的困境下奋起直追,但最终以100比102遗憾告负。

除了比赛精彩以外,教练的斗智也是经典系列赛不可缺少的一部分。

在去年的季后赛首轮对阵自家师傅Don Nelson的时候,小牛的主教练Avery Johnson排出了怪阵,他将常规赛轮转阵容的两大中锋Erick Dampier和DeSagana Diop死死摁在板凳上,试图以Nowitziki为中锋的小个阵容对抗勇士的速度,而结果就是小牛还是输了。但小牛换走Diop和Devin Harris换来Kidd,看来将在小个阵容上越走越远。

但湖人的Phil Jackson可能是全联盟最不怕所谓的“小个阵容”的主教练,自从2005年Jackson重回湖人,他对勇士队取得了10胜2负,包括Don Nelson作为主教练的6胜2负。“这些年我与Nelson对阵,他总想抛出错位进攻的法宝。”Jackson说,“他总想让你排出小个阵容跟他的小个阵容比赛。这些年每当我遇到他,我总是告诉自己千万不能这样做。很多教练陷入其中,那就像一个蜘蛛网让你陷进去。事实上如果你排出5个小个子,你的进攻会有麻烦。”

所以,今年季后赛首轮我最期待的对局之一,就是达拉斯小牛(8) vs 洛杉矶湖人(1)。欢迎大家留言,说说你心目中最期待的季后赛首轮对局。
请继续阅读《你最想看哪些季后赛首轮的对局?(二)》

标签:

2008年3月22日

有备无患:Blogger传统模板:红黑「春日」v2

这是一个简洁风的单栏外加widget dock(wyt:直译“小玩意儿坞”-_-b)的Blogger传统模板(Blogger Classic Template)。之所以叫“红黑「春日」v2”,是因为从前一个模板中继承了一些想法,比如红与黑的色调——尽管并没有继承“凉宫春日”的元素。希望大家喜欢。

使用前说明

尽管模板上有一些示例用的widgets,但大多数情况下,大家仍然要自己动手修改模板。也就是说,这需要一点点HTML的基础——别担心,不会太多,我会在下面说明大部分的问题。如果你支持这个模板,请保留widget dock最右面的“关于本模板”(About this template)。另外,如果你想要分享这个模板,请遵循Creative Commons的“署名-非商业性使用-相同方式共享”许可。

演示blog

Haruhi Suzumiya 'Red and Black' v2

下载模板

安装

解压缩haruhiv2.tar.gz,将得到两个文件夹iconset72/和images/,以及7个文件template.html,haruhiv2.css,haruhiv2iehacks.css,haruhiv2.js,prototype.js,effects.js和readme.pdf。

  • iconset72/:目录下有模板默认的widget dock的图标。如果你想继续使用的话,上传到FTP服务器的/images/目录。需要说明的是,这些图标来自Mac4Lin Leopard GTK Icon Theme,我为它们加上了倒影,大小为72x108px。推荐大家扩展dock的时候仍然用这个主题的图标,因为它们不仅漂亮,而且风格统一。
  • images/:目录下的是背景图片,同样上传到/images/。
  • template.html:HTML模板。接下来我们要修改的基本上就是这个文件了。
  • haruhiv2.css:CSS层叠样式表。如果你已经把图片(包括背景和图标)上传到/images/,那么就不用改它了,不然你需要把文件里的URL指向相应的图片目录。上传到服务器的/styles/目录。
  • haruhiv2iehack.css:IE专用的CSS,同样上传到/styles/。
  • haruhiv2.js:Javascript脚本。上传到/scripts/目录。
  • prototype.js:Prototype javascript框架。上传到/scripts/目录。
  • effects.js:Script.aculo.us javascript框架的效果库。上传到/scripts/目录。
  • readme.pdf:这篇文章的PDF版本。

自定义模板

“红黑「春日」v2”模板需要自定义的部分有:导航栏(navigation),摘录栏(sinppets)和小玩意儿坞(widget dock)。导航栏位于整个页面的右上角,将网站的布局清晰的呈现在用户的面前。摘录栏在blog标题和导航栏下方,分为左中右三个,你既可以在这里放Twitter饭否叽歪,也可以放blog feeds,将你和blog的个性自信的表现出来。小玩意儿坞总是在页面底部,它将大量的widgets收藏其中,只在用户点击时展开相应的widget,节省了网络带宽之外,更重要的是有Fisheye效果的dock,显然很酷。(wyt:不过,可怜的IE6不会看到这个效果,因为IE6不支持有透明度的png图片)

接下来将介绍三者的自定义方法。

导航栏 Navigation

导航栏在<div id="navigation" />中,每个tab应该是class="nabs"的SPAN。示例如下:

<!-- Begin Navigation -->
<div id="navigation">

    <span id="homepage" class="navs">
        <a href="<$BlogURL$>">首页</a>
    </span>

    ... ...

</div>
<!-- End Navigation -->

摘录栏 Snippets

摘录栏在<div id="snippets" />中,它包括标题和列表,标题的class="snippet-title",列表的class="snippet-list"。不过根据实际情况的需要,你也可以把列表改成一段文字或图片,只要小心不要超过原有的大小破坏页面布局,就可以了。示例如下:

<!-- Begin Snippets -->
<div id="snippets">

    ... ...

    <!-- Right snippet -->
    <h4 class="snippet-title">订阅我的博客</h4>

    <ul class="snippet-list">
        <li><a href="http://luliban.com/blog/feeds/atom.xml">原始feed</a></li>
        <li><a href="http://feed.luliban.com/">Feedsky feed</a></li>
        <li><a href="http://feeds.feedburner.com/luliban">Feedburner feed</a></li>
    </ul>

</div>
<!-- End Snippets -->

小玩意儿坞 Widget Dock

Widget Dock比前面两者复杂一些,需要修改三个地方。首先是<div id="dock-container" />。Dock container中定义了所有dock item,是一个id="dock-name"的SPAN,其中IMG的SRC就是之前上传的图标URL,宽度默认为48,高度为72。其次是<ul id="widget-list" />。Widget list中有widgets的实际HTML代码,每个widget应由一个id="widget-name"和class="widget"的LI包装。最后是Javascript脚本haruhiv2.js,其中第二行中定义的widgets变量,包含了所有widget的name模板中的dock container和widget list的name,必须和Javascript脚本中widgets的name相对应。

示例如下:

template.html
<!-- Begin Dock container -->
<div id="dock-container">

    ... ...

    <span id="dock-profile">

        <a href="<$BlogOwnerProfileURL$>" class="dock-item" onclick="return false;">
            <img src="/images/profile.png" width="48" height="72" alt="Profile" />
        </a>

    </span>

    ... ...

</div>
<!-- End Widget dock -->

... ...


<!-- Begin Widget list -->
<ul id="widget-list">

    <!-- Begin Widget profile -->
    <li id="widget-profile" class="widget" style="display: none;">

        <h4 class="widget-title">My Profile</h4>

        <!-- Profile container -->
        <$BlogMemberProfile$>

    </li>
    <!-- End Widget profile -->

    ... ...

</ul>
<!-- End Widget list -->

haruhiv2.js
// A list of widgets' names
var widgets = ['profile','search','recent-posts','gallery','favorite-blogs','rss','about'];

然后只需要将模板发布,就大功告成了。有什么意见,建议和砖头,欢迎留言。


P.S. 把feed换了个目录,Feedsky又要重新验证了:869bc65b

标签: ,

2008年3月16日

有备无患:为Blogger传统模板(FTP发布)添加标签云

Blogger的传统模板一直不支持标签的输出。虽然有hack可以从feed中抓取标签列表,但不能分析每个标签所含的文章数,所以仍然不能生成随标签使用频率而字体大小和颜色变化的真正意义上的“标签云”。

所以,我写了一个python的自动化脚本,可以从ftp服务器上分析blogger文件,计算出每个标签的使用频率,并将这些信息保存在服务器上,供模板中的javascript脚本调用。效果么,你可以看看这个演示网页,或者点击我blog下方widget dock左起第四个“文件夹”图标(wyt:还在用IE6的同学们应该看不到。因为IE6不支持widget dock用的透明png,所以我把widget dock给隐藏起来了,实际上“标签云”还在那里。IE7、Firefox、Opera、Safari等应该都没问题)

使用方法很简单,要执行脚本首先得有python。Linux大多默认安装,Windoze上安装Python的方法见这篇文章

另外,脚本中用到了BeautifulSoup分析HTML文件,simpleJSON生成JSON格式的数据流。你也必须安装这两个python模块。如果你和我一样用Gentoo,just emerge it。Windoze用户可以用easy install工具快速安装。

接下来下载压缩文件:konatag.tar.gz,解压缩用得到两个文件konatag.py和konatag.js。

konatag.tar.gz

修改konatag.py其中的ftp服务器,用户名,密码以及归档(archives)的路径参数,以便脚本可以访问你的ftp服务器。

if __name__ == '__main__':
    options = dict(
        server='yourftpserver',    # 服务器地址不用包含ftp://
        username='yourusername',   # 用户名
         password='yourpassword',   # 密码
         path='/path/to/archives/'  # blogger的归档路径
    )
    ftp = FTPServer(**options)
    blogger = Blogger(ftp)

保存退出之后,在终端(wyt:也就是Windoze的命令行)执行:

$ python konatag.py

事实上,如果高兴的话,可以像我一样把这个脚本扔到crontab的计划任务中,每星期执行一次自动更新你的Blogger的标签信息。

执行完脚本之后,登录ftp,在你的blogger归档目录中会多出一个konatag.json的文件,这是一个包含JSON格式数据的文本文件。不用去管它,将konatag.js上传到任何你能记住的目录。接下来我们将要修改Blogger模板。需要说明的是,konatag.js使用prototype库,所以在模板里还必须包含相应的js文件。

<!-- 将js的调用加入<head> -->
<script type="text/javascript" src="/scripts/prototype.js"></script>
<script type="text/javascript" src="/scripts/konatag.js"></script>
<!-- or: 如果你想直接调用我这儿的javascript脚本的话 -->
<script type="text/javascript" src="http://demos.luliban.com/scripts/prototype.js"></script>
<script type="text/javascript" src="http://demos.luliban.com/scripts/konatag.js"></script>

<!-- 这个div是“标签云”的容器,加入<body>中
     id可以随意指定,但要与下面的javascript对象的第一个参数相一致 -->
<div id="konatag"></div>

<script type=text/javascript>//<![CDATA[ 
    // Konatag的第一个参数是刚才提到的div的id
    // 第二个参数是脚本上传的JSON数据的路径
    new Konatag('konatag', '/blog/archives/konatag.json', {
       startSize: 13,    // 使用频率最低的标签的字号,单位是px,请随意设定,下同
        stopSize: 24,     // 使用频率最高的标签的字号,单位同样是px
       startColor: '#3d81ee',    // 使用频率最低的标签的颜色
        stopColor: '#930fe3'      // 使用频率最高的标签的颜色
    });
//]]></script>

这样就大功告成,只需要重新发布一遍模板就可以了。有什么意见,建议和砖头,欢迎留言。

标签: , ,

2008年3月9日

有备无患:用脚本自动更新Twitter

如果你也是一个Twitter中毒者,那么也会不消停的在网页上在IM上在手机上,或许还会在第三方服务上发送Twitter消息。不过,你有没有试过在terminal上"骚扰"你的朋友们呢?Digital Streets上有一个很骇很饥渴(wyt:英议very hack very geek)的方法,只需输入一行命令:

$ curl -u yourusername:yourpassword -d status="Your Message Here" http://twitter.com/statuses/update.xml

如果你觉得每次输入一长串用户和密码很麻烦,也可以把他们保存起来写个脚本:

#!/bin/bash
#

USERNAME=yourusername
PASSWORD=yourpassword

if [ $# != 1 ]
then
echo "Usage: ${0##*/} your tweet as you would like it to read"
exit 1
fi
tweet=$1
curl -u $USERNAME:$PASSWORD -d status="$1″ http://twitter.com/statuses/update.xml

如果这样还不能让你提起精神,我们还可以把这段脚本修改一下加到cron里,让它每周每天甚至每小时自动发送消息。比方说,你打算在twitter上作一个奥运会倒计时,可以试试下面这个脚本,把它放到/etc/cron.daily目录下。然后,你的Twitter每天就会更新这样一段消息,"距离北京奥运会开幕,还有 DDD 天 HH 小时。":

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# 记得替换你的用户名和密码
USERNAME="yourusername"
PASSWORD="yourpassword"
# 奥运会将于2008年8月8日开幕,不过我家黄历说"诸事不宜"
OPENDATE="20080808"

declare -i sec_open=`date --date="$OPENDATE" +%s`
declare -i sec_now=`date +%s`

declare -i sec_total=$(($sec_open-$sec_now))
declare -i date_day=$(($sec_total/60/60/24))

if [ "$sec_total" -lt "0" ]; then
    declare status="丫睡过头了吧,北京奥运会都开幕 $((-1*$date_day)) 天了。。。"
else
    declare -i date_hour=$(($(($sec_total-$date_day*60*60*24))/60/60))
    declare status="距离北京奥运会开幕,还有 $date_day 天 $date_hour 小时。"
fi

curl -u $USERNAME:$PASSWORD -d status="$status" http://twitter.com/statuses/update.xml

标签: ,

2008年3月7日

悠言悠闲:论男女球员防守时的区别

OK,我不是想写一篇学术论文,或者进行什么两性方面的讨论,只是前几天Digg上一前一后的两张照片够搞笑。Korver,有这张照片为证,你这辈子没指望当上什么最佳防守人了,有没有听见WNBA在召唤你?Blake,Nowitzki的锁喉功至少还有点含金量(罚款),你这掐脖子功到底是从哪里得来的,莫非“养家狂人”在你家作客?

korver blake

标签: