Recently in 中文 Category

在美国,星巴克已经成为又一家快餐连锁店。宣布关闭600间分店的举动可以看成是拒绝快餐化,但无法掩盖的是一杯星巴克的卡布奇诺实质上不过是一堆脂肪和加了咖啡因的糖水还有牛奶,典型的美国标准迎合典型的美国人对于快餐和每日清早一杯咖啡的需求,外挂一副无辜的"饮料"外表让人以为其热量并非恐怖。可以肯定是星巴克的拿铁中牛奶所占比例绝非"标准",无怪我当初享用完冻拿铁后腹部翻江倒海,日后光临星巴克除黑咖啡外其余均从菜单上删除。Tom Mullaney 在芝加哥论坛报上感叹星巴克在1990年代的辉煌一去不复返,这看来全是 Howard Schultz 的错。

星巴克几乎可以在美国任何一家机场找到,然而,那种店只是一个柜台,旁边一个巨大的玻璃柜塞满各式各样的点心,全然一副快餐店的景象,可惜的是连快餐店理应有的坐椅都找不到,更何况沙发。

中国的星巴克是咖啡馆,找一个角落在沙发里窝居上几个钟头,附加免费wifi。哦,美国的星巴克也有wifi,不过要求T-Mobile账号外带昂贵的价钱标签。

考虑到星巴克在不同国家的发展意图,我现在终于明白为什么中国没有罐装的星巴克咖啡。Doubleshot, Doubleshot Light, Iced Coffee 等一齐消失得精光,连影子都不见。
当星巴克原本的意图在它的发源地无法实现的情况下,或许在其它国家还有一线希望。当然,在美国经济不景气的现在,5美金只为一杯咖啡似乎太随意了。

其实很简单, in-genia 早就发布了英文版的集成包, 只需要运行一个安装程序, mysql 和 php 以及 typo3 就都安装在本地电脑上了。下载链接在 这里 。最新的版本在最底部(德国人的奇怪思维)。

软件主要是通过MAMP来运行的, 该软件还包括一个简单的widget, 可以控制mysql服务器的运行以及打开主程序界面 (一个网页而已)。 php可以选择 php4 或 php5。

今天成功地用TYPO3的TypoScript和Spry Accordion Widget(当然还有CSS和JS)结合在一起实现了动态(会动的!)菜单。TypoScript的确是很强大,不过在 TSref 里找东西有点烦人,而且也没有很完整的教程,目前我还在处于瞎子状态中。Google找了半天发现德文资料居多,比英文还多,这倒是头一次碰到。下面是昨天发现的几个还算有点用的网站:

下面是setup的部分代码

marks.ACCORDION = HMENU
 marks.ACCORDION.special = directory
 marks.ACCORDION.special.value = 48
 marks.ACCORDION.1 = TMENU
 marks.ACCORDION.1.target = page
 marks.ACCORDION.1 {
  expAll = 1
  noBlur = 1
  wrap = |
  NO {
   wrapItemAndSub = <div class="AccordionPanel">|</div>
   linkWrap = <div class="AccordionPanelTab">|</div>
   doNotLinkIt = 1
  }
 }
 marks.ACCORDIONL.2 = TMENU
 marks.ACCORDIONL.2 {
      wrap = <div id="AccordionPanelContent1" class="AccordionPanelContent"><ul class="list1">|</ul></div>
  target = page
  noBlur =1
  NO {
   RO = 1
   ATagBeforeWrap = 1
   allWrap = <li>|</li>
   linkWrap= |
  }
 }

用.special属性生成只有pid=48的网页目录,然后生成第2级目录。

下面是template文件的代码:

<div id="Accordion1" class="Accordion">
###ACCORDIONL###
</div>

TypoScript还算比较容易上手,有1个星期基本上就没问题了。不过TYPO3实际用起来还没经验,估计要等到1,2个月后才知道了。

苹果上的浏览器有很多种,本人也试过不少。作为开发者当然有不同的目的因而每个浏览器有不同的特点和功能,作为用户使用起来的感觉当然也很不一样。有的浏览器可以换皮肤 (象FireFox, Opera, Shiira等等),有的包括自带rss阅读器 (Safari等)。撇开是否包括自带rss浏览器不谈 (本人对rss一向不太感冒),这里主要讨论用户的操作方便性。本人最喜欢的浏览器是OmniWeb和Camino,Flock也可以算喜欢不过主要是在Windows上用它。

目前苹果上的主要浏览器有:

FireFox

Flock

OmniWeb

Opera

Safari

Shiira

(详细列表见Link)

以上的浏览器用的都是目前最广泛的标签浏览方式,当然你也可以选择用窗口浏览。


Safari在最开始转用苹果的时候用了一阵,不太喜欢,也没什么特别功能可以吸引人的,逐渐就没用它了。当然作为苹果自己的浏览器它还是值得推广一下的。


OmniWeb 和 Shiira 提供给用户"不太一样的"浏览方式,但总的而言还是基于标签的。OmniWeb 有非常强大的标签浏览功能,用户可以创建workspaces (工作区),可以快速地切换到不同的工作区,可以在浏览时自动保存工作区(保存所有打开的标签页),抽屉式(向左或向右弹出)的窗口里用户可以选择用网站截图或文字方式快速切换所有打开的标签页。OmniWeb 还有很系统化的书签管理,极简的用户界面 (所有图标都是灰色的) 和占位非常少的收藏列表,在浏览网页时基本上可以忽略浏览器的存在,有助于集中注意力在网页上,而且让换皮肤的意义大大减少。OmniWeb 还有很多的plugin支持,而且是专门为在苹果系统上使用而开发的。作为一个付费的浏览器而言它的功能是很值得的购买的,其它功能比如阻挡广告等也一应俱全,我第一眼看到它的 Preferences Panel的确感觉有点吃惊因为它的选项不是一般的多。


Shiira 除了广大群众都接受的在顶端显示标签的方式外,还提供在浏览器的底部显示网站截图。该浏览器有一个叫做"Tab Exposé"的功能,类似mac的Exposé,可以将所有打开的tab显示在桌面上,很酷的功能不过本人觉得没什么用。Shiira没有阻挡广告的功能,这个功能我还以为是所有浏览器都应该具备的呢。


Camino 和 FireFox 基本上一样,不过 Camino 和苹果系统融合的更好一些,而且我喜欢它也是因为这一点。Camino目前对于中文的支持的还非常不完善,因此我只是用它来测试网页的兼容性,它是基于Mozilla的内核。它的操作方式很简单,没什么特别的功能,从IE过来的用户很容易就习惯。Camino运行 (在苹果系统上) 比FireFox更流畅一些,估计是和苹果系统的兼容性的程度问题。


作为免费浏览器 Camino 和 Shiira 还是非常值得推荐的。OmniWeb 对于有能力购买它的群众应当是第一选择,我作为OmniWeb的忠实使用者当然在此要大力推荐它。Safari 适合安分的人,而且它还支持Windows,在苹果上用惯了转到Windows上也不用怕。


其它的浏览器比如Opera, NetScape 这里就忽略了,Opera 的操作本人一直没能习惯而且界面有点花哨,NetScape已经入土了,Internet Explorer 在2003年就没再继续开发了,还有其它的浏览器就不谈了。不过在测试网页的兼容性时应该包括Opera,毕竟很多人还是喜欢它的。


OmniWeb 的使用截图:

View image

关于 Font Metrics 的一些基础

UPM: Units per Em
UPM的意思是每个em由多少个单位(unit)组成。Em大概可以理解成一个字母的宽度,但它没有固定的大小,计算机处理字体时都先将Em变成一定的point(点),比如某个字体的大小是12pt(points),那么在这个例子中em就等于12pt。Em是字体最基本的单位,在不同的字体中不一样。Em不是字母"M"的宽度,但基本上等于一个 em dash (Unicode: 2014) 的宽度(但也不完全等于)。在一个字体中,一个字母(或标点符号)和这个字体的 em square (边长是一个em的正方形)的比例是固定不变,不管字体的大小是12pt或100pt。
UPM一般设为1000。在1995年左右,有建议将UPM设为2的正次方倍数,1024或2048是最理想的数值,即2的10或11次方。这是因为当时的计算机运算速度很慢,象1024这样的数值方便计算机运算,正如人类计算1000除以10很容易一样,1024除以2对于计算机而言一样容易。2048曾被认为是最理想的数值,因为可以包含足够多的细节也很容易计算。但随着计算机运算速度的提高,UPM一般都设为1000,当设计师想要更高的精确度或更多的细节时,可以将UPM设为2000,2048,甚至10000(FontLab的最大限制)。

在FontLab 5中设置字体的UPM值,见下图。
FontMetrics-UPM.png


设计字体的时候,第一步应当是确定字体的比例,即大写字母和小写字母的比例,这一步非常,非常,非常的重要。相应的,descender的比例也可以确定下来 (至于如何确定我可能大概也许在不久的将来会写个教程)。一个字体,尽管是不同样式(粗体,斜体等),font metrics 的设置应当是一样的,不然从常规体转到粗体的时候,用户发现字体大小竟然变了,这样的结果肯定不是我们想要的(当然这种可能性不应该排除)。

需要注意的是,descender的值都是是用负数表示的,因为它在基线(baseline)以下。

下图是一个比较不怎么典型的Font Metrics设置,在FontLab 5中。FontMetrics-KeyDimensions.png







关于上图的一点解释:
Set dimensions for the master,该选项只适用于有multiple master的字体,除非你的字体用有multiple master设置,可以无视。
Ascender,descender 等等就略过了,凡是看这篇文章能从头看到这里的人也应该知道。右边那个有图标的按钮是让FontLab自动计算左边的4个值,不建议用,经常是错的。
Copy values to TrueType metrics,是自动把上面的4个值添到TrueType信息里,见下一图。该选项适合懒人用。
Italic angle,意大利体的倾斜角度。Slant angle,斜体的倾斜角度。这两个选项适合给有一定倾斜角度的字体用,如果不是就无视。(意大利体和斜体的区别?什么‽你不知道‽) 这两个值一般是负数(没错,的确有向左倾斜的斜体)。
Underline,你的字体的下划线的中间的位置,因为是在基线一下,所以是用负数表示。(你的下划线在基线以上?)
Thickness,你的字体的下划线的厚度。
Font is monospaced,你的字体的所有字符都是一样宽度么? 如果是就钩上。
Font BBox,即Font Bounding Box,代表你的字体的上下限。该选项不是选项。



在FontLab 5中如何设置Font Metrics

终于步入正题了。见下图。请参照上图的数字的以便你确认下图的这些数字不是胡编乱造的。下图不是一个比较不典型的例子,不过这个不重要。我的系统是苹果的而且换了系统皮肤所以你在你的电脑上看到的有很大的可能性和下图不一样。

FontMetrics-Tables.png
关于上图的解释:
Font metrics,可以理解成字体的度量规格,是储存在字体里的一些数字,用来让程序知道该字体的ascender, descender, linegap (行距)等等是什么,以便程序能够正确地显示和处理字体,尤其是行距。当然,不同的系统和不同的程序处理字体的方式也不同。Windows一般用 OS/2 规格 (table),而苹果只用 hhea 规格。Font metrics 直接关系到你的字体在实际应用的时候是什么样子,所以非常,非常,非常的重要,就好比人的衣服一样。Font metrics 实际上比较复杂而且混乱,连微软自己的程序员都搞错了(他们的理解能力估计有问题)。
下面是 "基本的计算公式" 。

OS/2.TypoAscender + |OS/2.TypoDescender| + OS/2.TypoLineGap
= hhea.Ascender + |hhea.Descender| + hhea.LineGap
= OS/2.WinAscent + OS/2.WinDescent


注: "||" 表示绝对值。



关于 TypoAscender, TypoDescender, WinAscent 等等

根据Microsoft "最初" 的规定,Typo(即TypoAscender, TypoDescender, TypoLineGap)的值是 "应该" 和hhea的Ascender, Descender, LineGap一样的,用来计算一个字体默认的行距。
WinAscent, WinDescent 值表示字体的上下限,即一个字体的字符最高是多高,最低是多低,超过的这个限制的部分程序都会忽略(切掉)。这两个值并不代表字体 "真正" 的AscenderDescender。然而,基本上所有的Windows程序员,包括Microsft他们自己的,都认为WinAscent和WinDescent 就相当于字体 "真正" 的AscenderDescender。这个理解其实也不是不合理(对于程序员而言),因为WinAscent和WinDescent可以保证字体的任何部分都不会被"切掉",而TypoAscender, TypoDescender, TypoLineGap则无法保证。因此,很多情况下,苹果系统上显示的行距和Windows系统上的不一样,为了解决这个兼容性的问题有点麻烦。
"行距"在这里的意思是字体的默认行距,又叫做 baseline-to-baseline 的距离,即基线到基线的距离,也可以理解为行距。下面是苹果系统和Windows系统上计算行距的公式,不一定准确。
简单的来讲,在苹果系统上根据hhea规格,基线到基线的距离 = hhea.Ascender + |hhea.Descender| + LineGap。而在Windows系统上根据OS/2规格,基线到基线的距离 = OS/2.WinAscender + |OS/2.WinDescender|,(不过最近又有改动,改成用Typo值计算)。
为了在所有系统上都达到同样的效果(尤其是对于OpenType字体而言),即无论是在什么系统上都能满足上述的基本公式,要妥协一下。

根据我的经验,我的设置一般是:

UPM = TypoAscender + |TypoDescender|
TypoLineGap = hhea.LineGap = 0
hhea.Ascender = OS/2.WinAscender
hhea.Descender = OS/2.WinDescender

计算 WinAscent 和 WinDescent 这两个值。下面是适用于拉丁文语言字体的公式(对于中文,阿拉伯文等其他文字要用其他方法):
WinAscent = Ascender * 1.20
WinDescent = Descender * 1.20
WinAscent + |WinDescent| = UPM * 1.20

1.2 可以换成 1.25, 1.3 等等,根据不同语言作出调整。



相关资料
OS/2 Table from Microsoft

浅析德文字母 eszett - ß

| | Comments (3)
Jan Tschichold 在 Treasury of Alphabets and Lettering 中, 声称 ß 是将"ſs"合并成连写(ligature), 他进一步强调 ß 是一种错误写法, 和它本身的名字 eszett (字面意义是"s-z")毫无关系. 他的说法实际上是错误的而且缺乏历史依据,很多历史学家也不同意他的看法.
字母 ß 的起源可以追溯到公元8世纪. 公元750到1500, 古高地德語和中高地德语的 s 有二种发音
1. ſ 和 s 都可以用来表示 s 的发音(象英文的 s)
2. 象英文的 th 一样发音的 s, 通常用 z 来表示. 同时,z 也用来表示 ſs, 这一用法一直延续到今天。
这样就产生了古高地德語的发音问题. 例如在 sissen(现代德语为 sitzen) 中, 无法清楚的表示这个词的发音是 "sis-san" 还是 "sit-san". 为了避免类似的混淆, 早在公元9世纪, 抄写员开始用"ſz"表示"ss". 到后来, "ſz"逐渐演变成了一个连写, 由此产生 eszett 这个名字. 有意思的是, 古高地德語和中高地德语的"th"发音的 s 现在其实已经不再使用了, 因此"ſz"这个字母基本上已经被废弃了. 下图为"ſz"在老式字体(Blackletter)中的2种写法, 右边是连写.
old-fz.png直到1800年, ſ 一直存在于小写字母表中. 后来, 它被使用的次数越来越少. 在1920年, Futura, Orpheus 和 Berthold 设计的 Bodoni 中都包含 ſ 这个字母, 因此掀起了一阵复兴的潮流, 但人们仍然很少使用字母 ſ.
在1800年左右, 欧洲的印刷厂越来越多的使用罗马体和意大利体, 老式字体(Blackletter)中的"ſz"也相应的演变成了罗马体的"sz"或"ſz".
语言学家 Jacob Grimm 为新高地德语创建了新语法. 他在1822年发表的论文中, 他将所有的字母都变成了罗马体, 他坚持用 ß 来代替老式字体(Blackletter)中的"ſz". 不过, 在他出版的 Das Deutsche Wörterbuch[The German Dictionary]中, 他使用 sz 来代替"ſz", 完全抛弃了字母 ſ.
1876年,在柏林举行的正字法(orthography)会议上, 讨论了如何将老式字体(Blackletter)中的"ſz"转变成罗马体, 以及应该用 fs 还是 ss. 在1879年, Journal für Buchdruckerkunst(一个很有权威的关于印刷技术的杂志), 将所有格式的 ß 都收集到了一起, 见下图. 最后决定莱比锡字体协会[the Typographic Society of Leipzig] 将"Sculzbacher Form"定为标准, 见下图中的1号. 这中方法可以说是"ſz"和"ſ-s"连写的妥协.
eszets-sulzbacherform.pngnow-fz.png现代的字体中, 字母 ß 通常分为2种, 见左图. 一种是 Sculzbacher Form, 另一种就是"ſs"连写. 与此同时, 有些人可能会将 ß 和希腊字母 β 混淆, 这一点也要注意.






ß 的大写官方规定可以用 SS 来表示. 例如 straße 的大写就是 STRASSE. 不过, 在此之前有很多非常创新的解决方法. 比如 Bauer Type Foundry 在 1910年发布的 Kleukens Antiqua 见下图左, 以及 Stempel Type Foundry 在1914年发布的 Ehmcke Rustika.当然, 广为人知的例子还有1957 Duden of Leipzig 的标题, 见下图右.
kleukensantiqua1910.pngduden1957.jpg