放Amazon的成本

HS放了一个StackExchange的构架更新,其中说到把服务放在Amazon上的成本是自己购买后的4倍。

我厂也是Amazon的用户,关于我厂为什么用上了Amazon是有一个段子的。话说当年运维部门遇上用户大幅增加的时候一个礼拜都在加班,尽在机房过生活了,人手不够用到老大把自己怀孕的老婆都叫来插网线。后来另一个游戏在上线的时候发现运维部门的资源如此紧张,没办法就硬着头皮试了试Amazon,结果这一试让厂里后来的游戏都放到了Amazon上来了。这是2008年的事了,经过了这几年的成长,现在我厂也要回到自己的数据中心了,甚至已经在Amazon的产品也要回到数据中心了。

似乎从这两个案子来看,Amazon是适合创业公司在初期资源不足,无暇顾及底层支持的一种选择,一旦业务的增长到了一个阶段,可以腾出手来做优化和成本缩减的时候,离开Amazon就是一个合理的选择了。

关于我厂的故事,还是猫说的多

planet的https的bug

前几天给啄木鸟设置planet,发现拿不到https站下的东东。调了一圈发现是这个问题

TypeError: ssl() argument 1 must be _socket.socket, not _socketobject

Google了一圈是timeoutsocket.py的问题,就给删除了,但是依旧不行。最后看到了redhat的bugzilla里有报这个bug,顺藤摸瓜找到了一个可用的patchplanet实在是年久失修了。

Set nameserver in dhclient.conf

在FreeBSD上使用OpenVPN的时候不能自动更改DNS,手动更新resolv.conf之后呢,等到DHCP renew地址的时候就再次被改回去了。

解决之道是在/etc/dhclient.conf里写下如下即可保持自行设置的DNS在第一个位置上。

prepend domain-name-servers 8.8.8.8;

还有更多关于dhclient.conf的,请参看man手册。

BTW: 自行设定DNS之后就要把内部域名的解析换成/etc/hosts。当然也可以在本地搭一个BIND,把内部域名给forward到内部DNS去(此王道也!)。

Use CUPS on FreeBSD

最近把工作机从Mac换到了FreeBSD之后,有许多在Mac OS X和Windows这些成熟桌面操作系统不需要关心的问题,都需要手工去解决,在一些人看来这就是折腾,其实在我看来这也确实是折腾。不过那又怎样,我们就是不折腾不舒服司机( cc @delphij @quakelee)。

先安装printer/cups,然后在/etc/devfs.rules里写上如下:

[system=10]
add path 'unlpt*' mode 0660 group cups
add path 'ulpt*' mode 0660 group cups
add path 'lpt*' mode 0660 group cups

自然的还要在/etc/rc.conf或者/etc/rc.conf.local里写上cupsd_enable="YES"

在这些做完了之后呢还要在/etc/make.conf里写上如下

WITH_CUPS=YES
CUPS_OVERWRITE_BASE=YES
WITHOUT_LPR=YES

这样一来呢,Ports里有支持CUPS的软件在安装的时候就可以自动挂上CUPS的支持了。然后要做的事情就是buildworld了。这样就会把lpr替成cups的lpr。

说到这里我就顺嘴带几句别的。公司使用的是Fuji Xerxo DocuCentre-II 3005打印机,前几天我在Mac上设置的时候没有发现相关的驱动支持,我就去Fuji Xerxo的网站上下载了一个Mac OS X 10.5 / 10.6 Driver,杯具就是从这里开始的。那天下午我试这个驱动试了多次,浪费A4纸4张,全是乱码。后来问了个使Mac的同事,告诉用Generic PCL Laser Printer驱动就可以了,操勒,不但能正常打印,还可以双面。Fuji Xerxo的家伙们,即然你们做出了这么牛B,这么标准的产品,那还提供那个废柴驱动干啥,WTF。

Link: CUPS on FreeBSD

Set nameserver in dhclient.conf

在FreeBSD上使用OpenVPN的时候不能自动更改DNS,手动更新resolv.conf之后呢,等到DHCP renew地址的时候就再次被改回去了。

解决之道是在/etc/dhclient.conf里写下如下即可保持自行设置的DNS在第一个位置上。

prepend domain-name-servers 8.8.8.8;

还有更多关于dhclient.conf的,请参看man手册。

BTW: 自行设定DNS之后就要把内部域名的解析换成/etc/hosts。当然也可以在本地搭一个BIND,把内部域名给forward到内部DNS去(此王道也!)。

关于字体的显示技术笔记

今天整了一下公司的工作电脑,配置桌面的时候看字体的显示怎么也没有Mac OS X下的那种感觉。调了半天也不尽人意,后来@jjgod同学给了个关于字体显示的论文,做点笔记,还请知晓的相关技术的朋友指正。

在显示器上字体大概有三种技术。

  • Hinting
  • 是把字体的形状发生一变化,以适应计算机显示器上像素点,以此呢来提高在低分辩率的可识别能力。

  • GrayScale Anti-aliasing
  • 这是利用显示器的灰度明暗产生的字体显示技术,是在字体形状的边缘产生一些有明有暗像素点,骗过人眼使得字体的形状看起和设计的差不多。

  • Sub-pixel Rendering Anti-aliasing
  • 这是要有显示器支持的一种技术,基本上是应用在LCD上的。原理是利用LCD显示器的每个像素点都有rgb三个点混合而成,控制rgb这三个点的亮度和色品以达到一种类似GrayScale Anti-aliasing的效果,实际上是从效果上提高了水平分辩率。

就Hinting技术在FreeType的配置来说,hintstyle有四种:none,slight,medium和full,slight可能是使用比较淘人喜欢的一个值。

update:和@jjgod聊过之后,纠正了我对AntiAliasing概念的混淆,关于AntiAliasing的名词有GrayScale, Sub-pixel Rendering和Sub-pixel Positioning,这几个概念是不同的。

参考:

DNS动态更新和通知机制

DNS的动态更新是在RFC 2136里引入的,BIND8以后就支持了这一特性。用起来还是挺不错的。

Notify机制是在RFC 1996中提出来的,也是在BIND8以后支持的,微软的DNS服务器也是支持这一特性的。

Notify的工作原理是这样的:发现一个master zone的序列号发生改变之后,向该zone的所有slave发送一个变更通知。而确定slave的方法就是查NS记录,然后去掉SOA记录中的master。

上面这个机制在一个有load balancer的环境里就有问题了,NS记录里只记录的是load balancer的一个虚拟IP,master的notify就不可能完整的送达所有的slave。BIND有一个also-notify的参数,以解决这类问题。