@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.
+ 2 - 0 | §Links 2006-04-28: UTF-8 Mail
  • UTF-8 Mail Header Fix
    用 PHP 的 mail() 函数发送 UTF-8 编码的邮件,不同的邮件客户端下面显示有时候会变成乱码。解决的方法是调用 mail() 函数的时候设置邮件头信息 :
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: BASE64

    但对于邮件主题或者发件人部分的中文字符,还需要进行如下转换 :
    $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
  • 解决WP邮件通知在gmail中的标题乱码
标签 ( JAVA/C++ ) :
+ 1 - 0 | §《冬荫功》: 绝对功夫
之前看到市面上各式各样名为《拳霸2》的dvd,一直以为那是借着《拳霸》的名气来包装的垃圾片;这次CJ出了D9买来一看才知道确实是如假包换的 Tony Jaa 继主演《拳霸》之后的又一部纯粹的泰式功夫片,只不过更确切的名字应该叫《冬荫功》。记得那时候《拳霸》在国内公映的时候就几经波折,如今出现了一堆讲中文的大反派的《冬荫功》,估计要想去看影院的公映是希望不大了。  查看全文
+ 1 - 1 | §MySQL的大小写敏感性

在 MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。

奇怪的是列名与列的别名在所有的情况下均是忽略大小写的,而表的别名又是区分大小写的。

要避免这个问题,你最好在定义数据库命名规则的时候就全部采用小写字母加下划线的组合,而不使用任何的大写字母。

或者也可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你需要在配置文件的 [mysqld] 区段下增加一行 lower_case_table_names=1)。这样MySQL 将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项同样适用于数据库名)。

当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。

换句话说,如果你希望在数据库里面创建表的时候保留大小写字符状态,则应该把这个参数置0: lower_case_table_names=1 。否则的话你会发现同样的sqldump脚本在不同的操作系统下最终导入的结果不一样(在Windows下所有的大写字符都变成小写了)。

标签 ( 开发/理论 ) :
+ 1 - 0 | §Links 2006-04-26: EMC的女秘书
+ 1 - 0 | §Links 2006-04-23
标签 ( 网摘分享 ) :
+ 1 - 0 | §Links 2006-04-21: 功夫壁虎
标签 ( 网摘分享 ) :
+ 1 - 0 | §Links 2006-04-20: 表格文字自适应
标签 ( WebDev网摘分享 ) :
+ 2 - 0 | §SVN 初体验

要在新服务器上装版本控制系统了。本来打算和以前一样用 CVS 来进行源代码管理,碰巧看到 duduwolf 对 SVN 大力推荐,加上这篇文章对于各种版本控制系统功能的完整比较,一直为 CVS 的各种缺陷感到郁闷的我自然毫不犹豫投奔了 SVN 的怀抱。

安装过程算不上一帆风顺,但我不打算在这里写出一篇完整的安装手册来,只简单记录几点体会。

服务模式

SVN 可以通过内置的 svnserve 提供服务,也可以和 Apache 配合通过标准的 http/https 来提供服务。用 svnserve 的好处是配置相对简单,但不足是 svnserve 所能提供的权限管理最小粒度只能到版本库(和 CVS 一样)。这对于开源软件的开发使用可能问题不大,但对于用作公司内部源代码控制来说就太简单了。所以我选择用 Apache + SSL + SVN 。

当初使用 CVS 最让我觉得美中不足的就是它的目录权限控制。因为针对每个用户只能控制其访问整个版本库的读写权限,以至于我不得不创建了N个独立的版本库。即便这样,每个版本库下面还是有许多项目是希望能分别控制权限的。当时采用的方法是禁用了CVS的目录浏览功能,并对每个项目目录名增加随机编号。只有知道确切的目录名称才可以访问到该项目。现在既然改用 SVN ,如果还是无法对版本库里面的每一个子目录进行精确的权限控制的话,还不如用 CVS 。通过配置AuthzSVNAccessFile文件来控制每一个项目目录的访问权限虽然算不上特别方便,但总比 CVS 那样完全没办法好。

数据存储

SVN 同样可以使用两种数据存储方式: Berkeley DB 和 FSFS 。在我看来, Berkeley DB 的优势在于其成熟性,但需要更多的日常管理和维护,并且是平台依赖的。所以我选择更简便的 FSFS 。

APR libraries

安装 SVN 的时候最好指定 --with-apr=  和 --with-apr-util= 参数到 Apache 安装的根目录(ServerRoot)下,而不是使用缺省的 SVN 安装包中自带的 apr 。否则如果你安装的 Apache 版本不同有可能导致 APR 库不匹配,出现类似 Can't set position pointer in file '/svn/test/db/revs/1': Invalid argument 的错误。Updated 2006-04-20 16:30 -- 比如说如果你安装的是apache 2.2.0版本,就需要在编译安装svn的时候指定--with-apxs和--with-apr参数到你的apache2.2.0安装目录下:
./configure --prefix=${subversionInstallFolder} /
--with-apxs=${apacheInstallFolder}/bin/apxs /
--with-apr=${apacheInstallFolder} /
--with-apr-util=${apacheInstallFolder} /
--with-ssl /
--with-zlib /
--enable-maintainer-mode

make clean && make && make install

签署证书

既然是公司内部的源码控制系统,通过 SSL 来加密保护登录信息还是很有必要的。证书的制作所填写的信息其他都关系不大,只要注意生成根证书和服务器请求签证文件时的两次 Common Name 不能一样(理论上Common Name 应该是用户将会用来访问的完整域名字符串),否则会导致证书生成的时候出现 error 18 at 0 depth lookup:self signed certificate 错误。

Updated 2006-06-29 12:52 -- 似乎还是有不少朋友在安装svn的时候碰到各种各样的问题,所以我把自己用来进行 svn server 恢复的完整脚本提供给大家下载( 点击下载 svn_recover.rar 13,473 字节),仅供大家参考。需要说明的几点:

  1. 不要直接运行 reinstall.sh 脚本。因为这个脚本是针对我自己的 svn 服务器的情况来写的,目的是在重装服务器的时候可以完全实现自动化。所以如果你不去了解脚本的实际工作就放服务器上执行,由此造成的任何后果我可不负责 :)
  2. 我的 svn server 不需要提供其他的服务,所以我的安装脚本是完全以 svn 服务为中心的,如果你的服务器还需要提供 php / mysql 等服务的话,这个脚本可能并不适合你。
  3. 为了 recover 的方便,我把 svn 所需要的一些关键文件放在了 resource 目录下面,安装脚本自动从 resource 目录下读取相关的文件拷贝到对应的目标目录下。你如果想用这个脚本,需要在 resource 目录下提供你自己服务器环境下的真实文件。本压缩包中的资源文件仅作示例。

标签 ( 开发/理论 ) :
+ 0 - 1 | §今天你“谷歌”了吗?

这么个绝对算不得琅琅上口的名字,居然成了 Google 中文名的最终定稿,套用佟掌柜的经典台词来说那就是:这造地是什么孽啊……  

听说这个名字让人联想起“李谷一的歌”来;李谷一的嗓子固然没话说,可这跟互联网巨头的联系可就远了去了。与其叫“谷歌”,倒不如干脆叫“高歌”,至少念起来顺口一点。

但愿这名字只用在 google.cn 上,眼不见为净。不然只好去用 Herock 的偷梁换柱之招了。

标签 ( 网络 ) :
+ 1 - 0 | §Links 2006-04-12: PHP Scalability
标签 ( PHP ) :
+ 0 - 1 | §Links 2006-04-07: Code Igniter
  • Code Igniter
      an Open Source Web Application Framework that makes writing kick-ass PHP programs simple as apple pie。 这是 CodeIgniter 对自己的一个描述。看看别人是如何评价的:CodeIgniter: the PHP answer?
      确实, Rails 的横空出世带给 PHP 巨大的震动。大家突然发现一个好的框架可以成就一个语言;而再美妙的语言如果缺乏一套强大易用的框架来支撑,多少会显得中气不足。于是,各式各样的 framework 应运而生, Zend 也急吼吼的占了个坑先。然而就目前来看,真正愿意去使用“别人”设计的 PHP framework 的开发者并不算多。更多时候我们宁愿按照自己实际应用的特点来实现一套自己的 framework -- 这样做至少不用去阅读一大堆的文档来熟悉理解别人的设计思路。
      最近不断有朋友问我关于 framework 的问题,或者让我推荐一款框架。但实际上,虽然我自己也很希望能挑出一个比较满意的框架来支撑日常 web 应用的开发,可挑来挑去挑花了眼,文档也看了,别人的评测文章也读了,代码也 Down 下来研究了,到头来现在用的还是自己写的一套东西:虽然简陋,可是够用、好用。 PHP framework 的现状就好比战国争雄,风云变幻,快到你不敢轻易去接受。虽然我看好 CakePHP ;也觉得 Zend 亮的第一招虽不算惊艳但后劲十足;可也仅限于观望而已。
      这次这个 Code Igniter ,同样雄心勃勃。在今年的两月份发布了第一个 beta 1.0 版本,到四月初已经是最新的 version 1.3 。同样 Down 了它的 1.3 版本粗略浏览了一番,有几个初步印象:
    1. 其兼容于 PHP 4.x 的代码目前来说是好事,但对于以后的扩展就不见得有利。
    2. 文档化工作相当细致,条理也很清晰,这对于快速理顺思路,上手使用非常重要。
    3. 可以方便的在 framework 中创建多个 web application。
    4. 用一套 Help 函数集来封装了许多常用的重复性功能,比如文件操作/安全性控制/XML解析等。实际上即便不想使用一整套框架,单独把这套 Help 函数集拎出来也不错。
    5. ActiveRecord/Scaffolding/Logging/Caching/Template/URI Routing等常规功能的支持。不过似乎没发现关于 Ajax 方面的内容。
      总的来说, CodeIgniter 的文档书写、编码风格和设计思路都颇合我的胃口,值得长期关注:)

标签 ( PHP ) :
+ 0 - 1 | §Links 2006-04-05: CSS Caching Hack
  • CSS Caching Hack
    为了防止页面被浏览器给Cache住而导致用户看不到更新了的内容,我们通常会在URL后面添加一个随机变化的参数,比如 http://.../myarticle/10022.xml?e234kk23s8234 。不过我们往往会忽视 CSS 样式文件被Cache的后果。事实上现在的页面内容和表现日渐分离,整体观感完全依赖于 CSS 文件,一旦你对服务器上的 CSS 文件做了些关键性的修改(比如增加了样式定义)并且在你的 html 文件里面使用了这些新的样式定义,用户再来浏览你的页面可能会发现页面忽然变得极其丑陋,必须按Ctrl-F5强制刷新所有内容才能看到正常的页面表现。这是因为在你的html页面得到更新的时候,css样式文件并没有被浏览器同步更新。因此,我们应该为引用的css样式文件也添加这样一个可以变化的参数来根据实际情况要求浏览器真正重新抓取一遍,比如:<link rel="stylesheet" xhref="http://www.zeali.net/css/zeal.css?version=1" type="text/css" />
  • Google Related Links
    类似 Google AdSense ,在你的页面上放置一段代码,Google自动把相关的新闻、链接显示出来。当然理论上来说这些相关内容是真正与你的页面相关,而非别人通过付费购买的 AdWords ,你也并非通过放置这段代码来赚取广告费,纯粹为了提高页面内容的丰富性。这样一个缺少明显驱动力的东西愿意去使用的人大概也就不多,何况据说目前这个服务对中文的支持度还有待提高。。
  • How to quit your software job and become a millionaire instead
标签 ( WebDev ) :
+ 1 - 0 | §幸运的米兰,爆发的Pippo

传说中的飞刀,例无虚发。你无法看清它从何处飞来,却能在身躯倒地间感受它的存在。

长发依旧飘逸,剑气更加逼人。僵持之中先拨头筹,危难之时力挽狂澜,皮波的爆发,米兰之福。

银狐先生现在应该认真考虑一下今夏带往德国的前锋人选问题了。

标签 ( 体育 ) :
+ 0 - 1 | §开始招人

如果你拥有以下特长之一,同时愿意与我们同甘共苦共同发展,或者凑巧对体育有着狂热的爱好,请联系我(工作地点:上海)。

  1. 熟悉LAMP环境下的web应用开发 + Ajax + PHP frameworks
  2. C/C++/Java + 网络编程 + Linux Shell
  3. C# GUI + MySQL
我的联系方式
+ 0 - 1 | §PHP中文手册下载

chm 格式的 PHP 手册中文版,文件生成时间: Sun Mar 26 15:49:18 2006。可以到这里或者php.net下载。中文手册支持中文索引及搜索。集成最新的用户注释(截至03/26/2006)。一册在手,基本上可以不需要到php.net上去在线搜索帮助了。

标签 ( PHP ) :
+ 0 - 0 | §用BAT批处理快速删除CVS目录
Windows 下的 BAT 批处理命令行脚本虽然不像 Linux Shell 那样灵活强大,不过在某些情况下你还是可以利用它来完成一些事情。比如用 来对项目源代码进行控制的时候。  查看全文
标签 ( 开发/理论 ) :
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号