Bun Wong's Blog

专注于 Web 应用程序开发

mod_rewrite 将大写路径重写成小写路径

2010/08/13 •

一个同事今天提到的一个问题,将凡是包含大写字母的路径都通过 301 HTTP 头重定向到小写字母的路径,通过 Apache 的 mod_rewrite 可以达到目的,这里使用了 RewriteMap 的内部映射函数 int:tolower,请查看 http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html#RewriteMap

RewriteBase /
RewriteMap lowercase int:tolower
RewriteRule .*[A-Z].* ${lowercase:$0} [L,R=301]

貌似 RewriteMap 不能写到 .htaccess 内,会提示以下错误,只能放到配置文件了,如果有更好的解决方案,请联系我啦 :D

.htaccess: RewriteMap not allowed here

Mac OS X 编译 sphinx 的一问题解决办法

2010/08/07 •

昨天研究了一下 sphinx,回家在 Mac OS X 下用同样的方式编译 sphinx 时发生错误,

svn export http://sphinxsearch.googlecode.com/svn/trunk sphinx
cd sphinx
./configure --prefix=/usr/local/sphinx --with-mysql
make
...
sphinxstd.cpp: In function ‘bool sphIsLtLib()’:
sphinxstd.cpp:1001: error: ‘_CS_GNU_LIBPTHREAD_VERSION’ was not declared in this scope
make[2]: *** [sphinxstd.o] Error 1
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1

最终在 sphinx 的 bug list 下找到该问题的解决办法 (bug #515)。

...

Mac OS X 命令行配置 Alias

2010/08/07 •

Mac OS X 的 Terminal profile 在控制台启动时加载,路径是 /etc/profile (for everyone) 和 ~/.profile (for 当前 user),编辑此文件,即可在每次启动控制台时生效,例如:

alias ls='ls -G'
alias grep='grep --color=auto'

标题中文转换成英文文件名

2010/08/05 •

因为要考虑到 SEO,今天按需求给项目写了个简单的函数,把文章标题和商品标题转换成英文文件名,

转换规则是:

中文中文 => Zhong-Wen-Zhong-Wen
中文chinese => Zhong-Wen-Chinese
chinese chinese => Chinese-Chinese

Mac 下的 MySQL 管理工具

2010/07/23 •

这段时间一直在家里用 Mac 开发东东,经常需要操作 MySQL,以往在 Windows、Ubuntu 下驾轻就熟的官方老版本 MySQL GUI Tool (MySQL Administrator 和 MySQL Query Browser),现在已经被升级为 MySQL Workbench,界面换了,交互变了,资源也用多了,感觉还没有老版本用得自然……

MySQL Workbench

...

Mac 仔满一周啦

2010/07/12 •

嘻嘻,MacBook 入手满一周啦,这周下来感觉 OS X 是越用越好,虽然是从键盘按键学起,折腾到目前为止工作的大部分软件都已经安装上 (AMP, Eclipse, Photoshop, MS Office, Firefox, QQ, YM...),可以开工干活了 :)

MACBOOK 3

我开QQ微博啦~~~

2010/06/25 •

昨天在 facebook 看到星哥提到了 QQ 微博,上去注册了一个,估计大家都可以过把推瘾,以后大家不用翻墙了 :)

建议装上 2010 版,可以直接管理微博

PS: 我的微博是 http://t.qq.com/bunwong:) 欢迎一起来 t

《高性能网站建设指南》

2010/06/17 •

最近翻读了一次这本书的中文版,想当初 Y! 建立了很多优化前端性能和体验的标准,正好作为这一标准的初级指南,这本书覆盖了大部分最重要和最有效的实践,建议大家拜读一下 :)

封面

FreeBSD 的一些个性化设置

2010/06/12 •

1. FreeBSD 的 ls 是没有文件类型颜色高亮的 (就是一律灰白色),在 Ubuntu 下有默认 ls 别名 ls --color=auto,而在 FreeBSD 下,需要编辑用户目录下的 .cshrc 文件,例如 /root/.cshrc,加上一行

alias ls    ls -G

如果需要对所有用户生效,可修 改  /etc/csh.cshrc

2. FreeBSD 下命令行提示符默认只显示主机名,而在 Ubuntu 下会显示登录用户和当前目录,不需要经常 pwd,继续修改 .cshrc,加入

set prompt = "%n@%m:%/# "

3. FreeBSD 默认无安装 vim,先编译安装上 vim,然后在用户目录下增加文件 .vimrc,加上

set nu ai sw=4 ts=4 sts=4

4. 开机自动运行 apache,需要修改 /etc/rc.d/local,加入

/usr/local/apache2/bin/apachectl start

libmemcached 编译错误

2010/06/11 •

今天在一台主机上编译 memcached 的客户端库 libmemcached,在运行编译后,出现如下错误

clients/ms_conn.o: In function `ms_get_udp_request_id':
/root/libmemcached-0.40/clients/ms_conn.c:194: undefined reference to `__sync_fetch_and_add_4'
clients/ms_conn.o: In function `ms_reconn_socks':
/root/libmemcached-0.40/clients/ms_conn.c:1051: undefined reference to `__sync_fetch_and_add_4'
clients/ms_conn.o: In function `ms_reconn':
/root/libmemcached-0.40/clients/ms_conn.c:919: undefined reference to `__sync_fetch_and_add_4'
/root/libmemcached-0.40/clients/ms_conn.c:956: undefined reference to `__sync_fetch_and_add_4'
clients/ms_thread.o: In function `ms_setup_thread':
/root/libmemcached-0.40/clients/ms_thread.c:225: undefined reference to `__sync_fetch_and_add_4'
clients/ms_thread.o:/root/libmemcached-0.40/clients/ms_thread.c:208: more undefined references to `__sync_fetch_and_add_4' follow
collect2: ld returned 1 exit status

关于 FreeBSD 下 root 无法远程登陆

2010/06/09 •

今天安装了 FreeBSD8 玩玩,配置好网络后,发现 putty 无法用 root 用户登录,

login as: root
Using keyboard-interactive authentication.
Password:
Access denied
Using keyboard-interactive authentication.
Password:

Google 结果默认配置下 FreeBSD 不允许 root 登录 -_-#,vi /etc/ssh/sshd_config,把

#PermitRootLogin no

改成

PermitRootLogin yes

当然最后要 /etc/rc.d/sshd restart 重启一下 sshd 即可

Drupal Taxonpage Module(6.x-0.3)

2010/04/28 •

伟大的分类学,被引入到 Drupal CMS 中,Everything is NODE,Every attribute is TERM 是很重要的 Drupal 思想,这与以往我们先有分类后有内容的概念不同,而这种低耦合的结构往往让处理内容来得更简单高效。

正因为 Drupal 中 Everything is NODE 思想,那么我们的页面生成,固然可以作为一个 Node,Drupal 默认包含的 Page 类型,是非开发人员最快捷的创建页面的方法;而对于开发人员则可以开发一个模块实现 hook_menu() 来生成页面。在项目中,页面的实现通常都是不负责开发的运营人员完成的,考虑到页面内容的维护难度,我们根据分类学,开发出这个名为 Taxonpage (Taxonomic page) 的模块,其大致功能是通过分类词来实现一个页面或者页面上的一个元素,并且负责渲染出该元素及内部的关联的 Node。

安装 Taxonpage 模块会产生一个名为 Page Elements 的词汇表,里面的每个分类词都对应一个页面上的元素,每个元素是可多继承的 (即非单根结构),这样可以直观看出页面的结构。

Taxonpage terms

每个元素,都必须设定一个渲染标识 (THEME NAME),用户可根据该标识定义模板,并递归产生其优先模板顺序,多继承和渲染标识特性可很好地解决模板重用的问题。当元素为根元素时,系统会自动根据其 PATH 值创建对应的 URL 页面,并且递归渲染其子元素。

Taxonpage settings

6.x-0.3 版本增加了页面元素的导入和导出功能,如下图。

Taxonpage Export/Import

如有任何问题或建议,可随时与本人交流 :)

Taxonpage 下载:taxonpage-6.x-0.3.zip

如何改变 Linux 的用户 ID

2010/04/19 •

为了解决 NFS Server 到 Web Server 的权限问题,我把 Web Server 上 apache 的用户标识 (uid) 修改成 NFS Server 上的,比如 NFS Server 上的目录所属用户为 210,所属组为 220,那么在 Web Server 可以输入命令

usermod -u 210 -o apache
usermod -G 220 -a apache

Drupal Debugger Module

2010/03/31 •

平时我们做调试信息输出,最常用的就是 var_dump,而在项目上线后,经常由于忘记删除 debug 信息而被客户提交致命缺陷……也有时 debug 页面并非可见的,如远程接口调试、后台运行的调试等,这也是 Debugger Module 要开发的原因 :)

Debugger  settings

Debugger 可设置日志输出类型,包括:不输出,输出到浏览器,输出到 Watchdog,输出到文件。

Debugger 下载:debugger-6.x-0.1.zip

又是一个无眠的夜晚

2010/03/09 •

经过两晚的通宵,上线经验的不足让我们吃了不少苦头,前端的部署一翻折腾后已经七七八八了,本来打算今晚可以安稳的睡个好觉,然而现在又爬起 来,或许是同事高调的打噜声,也或许生物钟已经错乱了 :(

也许是上天慰劳我的加班苦累,今天发票中了个百元大奖,无奈是只有杭州人才能享用,看来光荣纳税人的福利还是没有着落到我身上,继续履行纳税的光荣 义务吧~~~

“我哋呢班打工仔 一生一世为钱币做奴隶”,歌神教导我们,打工仔需要忍,要么就做 BOSS,要么就清心寡欲,否则别指望有翻身的一天 :(

继 续想老婆睡觉去~~~

空间搬了

2010/02/08 •

webyee 的空间到期了,换了一个主机空间,大家帮忙测试下速度,噶噶...

Drupal 下 files 为符号连接目录的 imagecache 异常

2010/02/03 •

Drupal 可调用 file_create_path($source) 来返回 $source 的真实存在路径,而 file_create_path 函数内部是通过调用 file_check_location($source, $directory) 来检查 $source 是否存在于 $directory 内的,这里的 $directory 是 file_directory_path(),也就是我们熟悉的 sites/defailt/files 目录...

《后来》英文版

2010/01/06 •

哈哈,在辞海发现的一首英文歌...

Oh life, the wonders that you bring
The beauty I can see
That I keep deep inside of me
Oh life, I feel that I can breathe it again
In a world where love will still remain

Choose your words, make them wise
Many things have brought us where we are
I am here, here with you
Close your eyes, let love heal the sorrow

Once again I feel alive
I'm sure of this inside
And I need you more than ever
Life's taught me so much more
Feel stronger than before
Oh this feeling stays here forever

Long ago, I was blind
I thought the love was always here to stay
But we walked away, and we said good bye
Even though I knew I loved you still

Suddenly you were gone and she was in your arms
It's a picture I remember
I was lost, could not be saved
My life just drained away
I only wished that we could start over

But true love will find its way
Now our love is here to stay
I lost it once and now I found a way to live again

Oh life, the wonders that you bring
The beauty I can see
That I keep deep inside of me
Oh life, I feel that I can breathe it again
In the world where love will still remain

But true love will find its way
Now our love is here to stay
I lost it once and now I found a way to live again

Oh life, the wonders that you bring
The beauty I can see
That I keep deep inside of me
Oh life, I feel that I can breathe it again
In the world where love will still remain

20个该做和不该做的实用网页设计

2010/01/04 •

原文 : http://webdesignledger.com/tips/20-dos-and-donts-of-effective-web-design

DO : 使你的页面结构化 - 例如 960.gsthe 1kb grid
DONT : 到处摆放区块

DO : 把焦点放到重点上
DONT : 在页面上放置无关的广告

DO : 选择正确的颜色主题
DONT : 使用 20 种不同的颜色

...

男人三十

2009/12/28 •

今天我过生日啦,除此之外没什么特别,依然是忙忙碌碌的加班,一个人在杭州很冷,又想起君哥笑话里的瓜娃子,确实很悲剧 :D

今年第一个为我祝生的是 Biran,Big Boss 在千里之外的 CA 居然记得我的生日,是相当感动啊,不得不赞叹这位好老板是多么的体恤下属啊,哈哈……接着是大小老婆的祝贺,以及陆续收到几位好友的电子贺卡,嘻嘻,当然不能忘记分公司三位美女送的蛋糕仔了,明天可以当早餐食了……

今天老总来电,我估计还要在杭州呆到一月底啊,悲剧……项目第一版的工作算是已完成,明后两天就要做联调了,希望一切顺利,好过个舒心的的元旦假期,也希望分公司的同事们可以快点接力,明年可以在广州陪老婆,工资翻倍,就是今年生日的愿望啦,嘎嘎嘎……

往年今日

2009/12/25 •

又到圣诞啦,对我来说每年的年底总是很忙,从圣诞到元旦的最后一周,中间还有两个纪念日。

08 年的今日还在深圳大展,现在这个钟点应该是饭后寻宝大行动,还记得欢聚一堂的 Y! 兄弟姐妹们,还有那只一等奖的鸿运牛牛,还有岁末大抽奖 :D 08 年也确实算是我的 LUCKLY YEAR。

今年的这周到了,很遗憾不能陪家人过,只身在杭州的日子是很空虚啊,还好分公司的同事都很和谐,展望明年不用长期出差,不然老婆会好可怜哦。

大家圣诞快乐!!!

性能研究(二): 浏览器缓存的用法

2009/12/20 •

这是关于优化网页性能系列的第二篇文章,你可能会奇怪为什么会在 YUI Blog 看到关于性能的文章,这证明了其实大多数网页性能是受前端影响的,就是说 UI 的设计和开发。

在上一篇文章里,我讲述了 二八原则对减少HTTP请求数的提示。浏览器会花费 80% 的时间去装载包括脚本,样式表和图片等外部组件,减少 HTTP 请求数能最大限度地减少响应时间,但为什么不总是把所有组件都保存到浏览器缓存呢?

Drupal 渲染注册流程剖析

2009/12/19 •

昨天晚上遇到一个很纠结的问题,是关于 Drupal Theme 的 Template 文件路径问题。原则上只要 Theme 主题目录下存在同名的 tpl.php 的话,Drupal 将不再使用 Module 目录下的默认模板,出现的问题则不同,Drupal 找不到 Theme 目录下的文件而总是用原默认模板...

性能研究(一): 二八原则关于减少HTTP请求数的提示

2009/11/15 •

首先这篇文章不是我原创的,当然我也不是标题党 -_-,只是这几天杭州天气好冷,周末一直宅在宿舍,挖了一些 Y! UE Blog 的老文章在看,其中有几篇三年前的关于前端优化的文章挺不错,百度了一下好像还没有译文,这里献丑翻译了一把,原文于此:http://yuiblog.com/blog/2006/11/28/performance-research-part-1/

你的柔情我永远不懂

2009/11/07 •

陈琳已去世一周,或伤感或困惑,时间也将会冲刷一切,今天再听到这首歌,缅怀这位杰出的音乐人……

今天搬到新宿舍,脱离酒店生活

2009/11/04 •

哈哈,终于解脱了,在新宿舍有自己的单人房,虽然心里没啥兴奋,但总算有一个私人空间吧,晚上睡觉也可以安稳一些,已经几个月没睡好啦,很想念花都呢...

出奇地额头上长了青春痘,估计是连续几天吃了特价 8 元太湖大闸蟹所致。最近食神不错,今周日又约好表姐回广州吃大闸蟹了,11月啦,大闸蟹剩下的时间已不多了 :P

1031 余杭径山古道

2009/10/31 •

今天杭州分公司的户外活动日,目的地是余杭的径山。经过两个小时左右的车程,途中加上当地一位不厚道大叔的忽悠风波,我们终于到达了径山的山顶 (那个原本是我们 Hiking 的目的地...而不是出发地... -_-#),因此大家今天的运动强度绝对顶得上走一星期的西湖,先下山到了径山水库,再原路上山,估计有个10公里,那个累啊...接着到这边的特 色农家乐就餐和游戏,结果本人连个安慰奖都没有拿到,获奖的都是领导们,黑幕啊,:'(

Portfolio - Diamond Banquest Hall

2009/10/28 •

呵呵,半个多月都没有更新过 BLOG 了,发上最近帮朋友做的作品,欢迎大家来拍砖

特此鸣谢 Grin, Lion, Haturn 的积极参与和鼎力协助 :)

上班了

2009/10/09 •

悠长的十一假期结束,今天回公司上班了,没什么工作状态,看了一上午的 Smashing,这两天是适应期,慢慢挨过下周又要出差了,T_T...

10个有用的可用性发现和方针

2009/09/27 •

今天看到 SmashingMagazine 的一篇文章,是关于可用性设计的,感觉相当好,这里把这 10 点标题列出来,有兴趣的请看原文 http://www.smashingmagazine.com/2009/09/24/10-useful-usability-findings-and-guidelines/

  1. 表单字段标签最好放在字段输入框上方
  2. 用户焦点大部分集中在人脸上
  3. 优质的设计是网站可信度的标志
  4. 大部分用户会滚动页面
  5. 蓝色是链接的最佳颜色
  6. 搜索框的理想宽度是27个字符
  7. 适当地留空白更易理解阅读
  8. 有效的用户测试不一定要很大的测试规模
  9. 充实的产品页能使你突出
  10. 大部分用户对广告熟视无睹

12:12, 谁在想念我

2009/09/25 •

人家说当看到小时和分钟是同一个数字时,就是有人在想你了,此刻,谁在想念我呢?

正在听郑秀文的《为何又是这样错》,一股情感涌上心头。。。

吃完饭出发去机场了,很快就能看到日夜想念的人了 :)

0919 西溪湿地

2009/09/20 •

昨天天气很好,跟瓜姐到了因《非诚勿扰》而闻名的传说中的西溪湿地公园玩了一圈。恰逢柿子节,从周家村到深潭口,逛了三个小时左右,一路上总算是搜刮了两个能吃的红柿子,其它都是青的,然后坐了一小时的摇橹船感受了下葛优的逍遥后……游毕 :D

又要飞了...

2009/09/14 •

上周五收到通知,明天又要出发到杭州进行项目二期的工作了。八月份回来至今,虽说一个半月啦,但是总觉得跟家人相处的时间很短暂 :( 加上想起同事睡觉的呼噜声就头疼,不知道接下来的几周怎挨啊,真希望项目快点上正轨能在广州开发就好了……

PHP MVC & BPF

2009/09/01 •

好久没有写技术文章,上段时间的工作比较忙,公司的需求分析快出来了,Brian 的合作项目 Deadline 一日一日逼近,压力啊压力啊...

又听到 PHPChina 的人在吵架了,CodeIgniter / Kohana, Yii, QeePHP / FleaPHP,到底谁是牛谁是猪,有必要争出个结果么,你自己想用啥就用啥,这才是 Open Source 的真谛啊,难怪 NINNY 姐这么无视那群家伙...

个人就 PHP MVC 框架而言,觉得兼容/功能跟性能总是成很大的反比...

0822 白云山

2009/08/25 •

在杭州呆的近两个月,可能是一直缺少运动的原因,每天下班都很累,所以上周六跟老婆二人上白云山走走。说来惭愧,这是平生第一次爬白云山,真有点枉为广州人了 :)

一 大早吃了个M记,准备好行装马上起程,到山下时已经差不多十二点,别看大街上热浪汹涌,想不到山上倒是相对凉快,不过这个月份真的不是爬山的好时节,带上 山的几瓶水到半山就已经处理完,还是得到帮衬士多的高价矿泉水 =.= 强烈建议,下次爬山,尽量减轻装备,适量干粮,多带开水,不要是甜的饮料,扇子,蚊水...

下山到南门的云台花园,已经四点多,跟标哥和钊鸿到陶然居吃川菜,又吃上美味的大螺了...

遗忘的和不该遗忘的

2009/08/21 •

周三突然问了自己一个问题——我已经多久没有执笔写字了,印象中除了平时刷卡时需要签签名外,生活中已经基本上没有写字的必要了,或者计算机的进步真的已经使键盘鼠标操作取代了传统的手工作业,人们的思维也已潜移默化,不少传统精髓逐渐被遗忘了。我见过很多80、90后的年轻人,包括我自己在内,别说会写一手好字,把自己名字写好的也没多少个, 但却能让 WOW 的微操精确到 1 Pixel。我外公是帮人写对联起家的,后来交给阿姨,到我这一代是否已经没有传承了?!昨天跟老婆说起了这个貌似严峻的问题,就当是为了以后教子女写好 字的需要,抽起一筋决定晚上去买文房四宝,希望让这不该被遗忘的东西流传下来...

地铁九号线开工啦

2009/08/13 •

今天早上等车的时候,见到车站旁正在进行地铁采土样本的施工啦,日盼夜盼,地铁终于盼来到我们花都了,希望站口就在新世纪广场附近啦,以后上班就不用跑老远。

话说回来,回来广州已经半年啦,每天都是早车出,晚车归,很累呀,那天跟老妈子说地铁开通就不用再坐公车这么累啦,她却说等到地铁开通我还没有自己的车 子,就真失败啦...哈...老妈子的话总是这么意味深长 :D 粗略算算,一天在 615 上坐 3 小时,这样下来一个月在车上浪费的时间不少于 70 小时啊,真的很浪费,不过车上的乘客也很有意思,有些面孔是天天都能见到,加以时日,真的可以组建一个 615 车友会... :)

超速绯闻

2009/08/08 •

昨天晚上跟老婆看了这部韩国片子,一位中庆的旧同事介绍的,是一部家庭喜剧,虽然说这是部喜剧挺牵强,搞笑成分不多,基本上不能用正常人思维来理解,13 岁的小孩就当老爸了,比小宝哥还厉害,不过里面的小孙子确实可爱,每次看到这小子的镜头都会笑一把,难怪最近网上也盛传起他的 QQ 表情了。尾段找小孩的部分也几感人,不过总感觉韩剧里所勾画的家庭观没有中国戏里面那么浓重是真的,是不是现代年轻人越来越不需要家庭呢?

关于 max/min 函数的运算规则

2009/08/05 •

今天群里又有人提问 min() 的用法,本以为很理解,就是求出一个集合之中的最小值,比如我们常用的对一个数组或者对一堆数值中调用 min()

min(array(3, 2, 1, 0));
min(3, 4, 5, 6);

因为要比较的值的类型都相同,运算结果也显然易见。而如下这种比较的值中存在不同类型的,的确比较少用

min(1, 1.1, 'a1', '1.1');

名字成分分析的小玩意

2009/08/04 •

昨天找一些 SNS 的案例,无意中回到一年多前曾留意过的 Geekaa.com,里面那个名字成分分析挺有意思的,它可以根据输入的名字 (里面是用帐户名) 来计算出你的成分,就类似人家街上算命卜卦的老先生一样,当然跟人家那样引经据典的忽悠你不同,也很无厘头,但相信还是一个很有趣的点子吧...

失眠夜的只言片语

2009/07/18 •

今天周五,出差在外的我每到这天夜晚都注定是一个失眠之夜,但与这时无聊寂寞的气氛郁闷无奈的心情对比,或许失眠,真的算不上什么...

无聊地呆在酒店里面翻看着电视节目,之后又无聊地看完了一部《战争之王》,对电影我一向很少评价,可能是我看过的大片不多,总是品味不出之间的优劣,朋友们讨论电影的时候我通常只是在一旁静静听着,而在这个无聊的晚上,总想把一些七零八落的感受记下来。

...

Drupal 后台主题

2009/07/17 •

今天发现了一个很不错的主题,很适合用来做 Drupal 的后台,因为 Drupal 中后台和前台是可以选择不同的主题,前台通常都是自定制的了,如果你已经很厌倦了 Drupal 默认的丑陋的 Garland 主题,又或者你不希望被人发现你用的是 Drupal ( 或许你是个 soho 分子,你并不希望客户知道这个被你说的天花乱坠的网站是用开源 CMS 开发的 ) ,就不妨试试这个叫 RootCandy 的主题吧 :)

PHP 5.3.0 非官方升级手记

2009/07/13 •

上周五无聊下载来一个 PHP 5.3.0,尽管对这个 non-unicode 的 PHP 6 来说兴趣不大,只是作为一个 PHP FANS 和 DEVELOPER,不得不随时留意着 Zend 的动态,而最近 Zend Studio 7.0 也发布了,官方邮件说是支持 PHP 5.3 的语法,支持 Zend Framework 1.8,同样也是基于最新版本的 Eclipse 这样一个 IDE。我没去下载,毕竟不是免费的东东,而我一如既往支持我至爱的 PDT。

...

Drupal 优秀模块列表

2009/07/03 •

这里用来记录下 Drupal 的 Module 列表,发现了好用的模块的话会加上来 :)

Drupal .htaccess rewrite 规则分析

2009/06/24 •

Drupal 默认通过 apache 的 mod_rewrite 来实现 Clean URLs 功能,大家可以打开根目录下 .htaccess 看到关于 mod_rewrite 的规则,下面我们来分析一下 Drupal 的 rewrite 规则:

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on
...

0620 杭州一日游

2009/06/22 •

周五晚上小翻翻特意从武汉跑过来杭州找我玩,感动了一小把,第二天就约好跟小玲妹和翻仔来个杭州游,终于绕着西湖逛完一圈啦,从断桥走完白堤过苏堤再到河坊街和延安路,怪不得个个都说:杭州好小哦~~~那天晚上到河坊街吃了传说中的东坡肉、臭豆腐和乾隆鱼头,东坡肉就一个字——腻,不过味道还算不错,只是吃完半个月内你会对肉失去感觉,真是痛并快乐着~~~

关于用 Drupal 重建 Blog

2009/06/19 •

这个想法不是这几天才有,当我接触到 Drupal Module 开发的那一天开始,我就被这个好东西深深吸引,而以前辛辛苦苦写框架写控制器写模型做出来的东西,都可以用 Drupal 和它的第三方 Module 来很简单的实现,因此现在主要问题不是出现在功能实现上,而是如何把内容更好的表现出来。尽管现在对 Theme 的开发还不是很熟练,要按照 Drupal Template 的机制来实现当前的主题对我来说还有相当难度,但是我想这个 Blog 是个很好的练习机会。

0606 杭州西湖

2009/06/06 •

六一儿童节那天,终于坐上平生第一次飞机了,没什么惊喜,机上的空中小姐并没有想象中的 PL,经过近乎两小时,飞机安全到达萧山机场 -_- 下机后得知法航在大西洋失事,怕怕~~

在杭州算是呆了几天了,给我的感觉是一个很和谐很舒服的城市,杭州城很小,道路不宽但很干净,两旁都是梧桐树,唯一不好这里没有禁鸣喇叭,到下班高峰期确实是挺烦人的;说到苏杭不得不说这里的美人,MM 个子好像都不高,皮肤白白的,尽显出江南人的玲珑和秀气;至于伙食,像人一样,精致小巧,份量不多,我在杭州吃了三天的饺子馆,烤饭和锅贴不错,就是上火了一点,昨天品尝了一下西湖莼菜汤,味道也很好。

...

Ubuntu Locale 配置

2009/06/04 •

今天朋友买了一台美国的 VPS,上面安装的是 Ubuntu 8.04 系统,由于本地 SSH 客户端的 Locale 是 zh_CN,而 VPS 系统并没有 zh_CN 这个配置(只有 en_US 的),因此在配置和编译的时候总出现警告,python 配置 trac 的时候甚至无法进行,因此不得不找解决方法...

PHP 的 callback 类型

2009/06/01 •

在前一篇文章 深入 Drupal 引导流程 (3) - session_set_save_handler中,提及到一种 callback 类型,在 PHP 原生类型里面并没有一种类型叫做 callback,按照官方文档的说法,callback 仅仅是在文档里面提及到的虚构类型 (伪类型)。callback 就是回调的意思,顾名思义它常被以参数的方式传递给其他函数,让别人来调用自己。PHP 的 callback 可以包括全局函数和类方法。

...

深入 Drupal 引导流程 (3) - session_set_save_handler

2009/05/26 •

接下来是 Drupal 的会话阶段,Drupal 是采用 PHP 内置的会话机制,但是它重载了 PHP 内置的会话处理器 (PHP 内建处理是把会话保存为文件方式的),把会话数据保存在数据库内。

case DRUPAL_BOOTSTRAP_SESSION:
  require_once variable_get('session_inc', './includes/session.inc');
  session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy_sid', 'sess_gc');
  session_start();
  break;

...

深入 Drupal 引导流程 (2)

2009/05/20 •

这段时间一直在研究 Drupal 的源代码,哈哈,少时间来更新 Blog,今天我们再续 Drupal 的引导流程

case DRUPAL_BOOTSTRAP_EARLY_PAGE_CACHE:
  // Allow specifying special cache handlers in settings.php, like
  // using memcached or files for storing cache information.
  require_once variable_get('cache_inc', './includes/cache.inc');
  // If the page_cache_fastpath is set to TRUE in settings.php and
  // page_cache_fastpath (implemented in the special implementation of
  // cache.inc) printed the page and indicated this with a returned TRUE
  // then we are done.
  if (variable_get('page_cache_fastpath', FALSE) && page_cache_fastpath()) {
    exit;
  }
  break;

早期页面缓存阶段...

0516 华南植物园

2009/05/18 •

那天天气不错,带上老婆和小姨子,去华南植物园喂蚊子去。植物园固然没有动物园这么生气勃勃,但对于我们这种天天忙碌工作着的人来说,倒是一个能够更加亲近大自然的地方。

深入 Drupal 引导流程 (1)

2009/05/11 •

对于每个请求,Drupal 通过一系列的引导指令阶段来引导它自己。这些阶段在 bootstrap.inc 中定义

/**
* First bootstrap phase: initialize configuration.
*/
define('DRUPAL_BOOTSTRAP_CONFIGURATION', 0);
...

SPL autoload 初体验

2009/05/07 •

昨天终于把项目的东西赶了出来,有点累,但是满有成就感,哈…… Drupal 看了两周,算是对 HOOK 部分有了个大概了解,不得不感慨下老外的设计思想确实很值得我们去学习,为啥国人就做不出一个像样点的 CMS 来呢?!或者准确点来说 Drupal 压根不能归类于 CMS 吧,很建议大家去研究下,前段时间我就吐血推荐给标老大去玩玩,算是对开源界做点贡献,哈哈 :)

...

Drupal 生成缩略图功能

2009/04/25 •

提到 Drupal 生成缩略图,或者你第一次时间想到的会是 Image Module,但本文说的是并不是一些第三方的工具包。其实,尽管说 Drupal 内核的图片处理能力不算强,但对于生成缩略图的小功能还是应付有余,大家可以看看 Drupal 图片处理核心文件 includes/image.inc的说明。

Drupal 内置的缩略图方法有 4 种:resize, scale, crop, scale & crop,总有一款适合你 :)

...

Drupal 外部身份验证模组开发

2009/04/22 •

最近公司的项目是使用 Drupal 为基础的二次开发,估计最近几个月都以这个方向为主,作为 Drupal 的新手,现在也只能一边埋头看文档一边写些 Example 了。上头给了一个小需求,是把 Drupal 的登录模块修改成可以使用自己的验证方式和默认 Druapl 验证方式的切换。

Google 出来的结果很多都是 for Drupal 5.x 的,大家要注意啦, Drupal 6.x 和 5.x 的 HOOK 函数和参数表有很大的差别,所以建议大家多看看 Drupal API手册。后来绕了一大圈发现 Drupal 6.x 的默认模组 (modules) 里面,有一个叫 OpenId 的模组可以实现这个功能。当然,我们的外部身份验证需求通常不唯一的,比如可能是 Discuz! 论坛或者你当前站点的身份验证,制定一个外部身份验证模组正是我们今天的题目解决的问题。

...

几个 PHP 5.2 函数的旧版替代方法

2009/04/20 •

由于 Blog 虚拟主机的 PHP 版本是 5.1.6,因此有某些 PHP 5.2.0 才开始支持的函数或者常量还不能使用,这里放上改写的一些替代的方法

  • pathinfo

    pathinfo 的第二个参数可以传入常量来直接返回某部分的内容,包括 PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION, PATHINFO_FILENAME,其中 PATHINFO_FILENAME 用于返回文件名的正名 (就是除了扩展名的部分),在 PHP 5.2.0 才开始加上的,我们可以用一个简单的字符串处理方法来获取这个值

    ...

今天 Blog 换肤了

2009/04/20 •

哈哈,这几天把 Blog 做了个脱胎换骨啦,基于 CodeIgniter,生成全静态,也换了新的主题,用 YUI CSS,嘻嘻,晚点等完善后再把源代码放上来吧……

SSH Client 会话空闲超时的解决办法

2009/04/06 •

最近工作时经常要同时维护 3 台 Ubuntu 的主机,但当 SSH Client 窗口在几分钟没有键盘操作的时候,会话就会超时断线,特别对于 SFTP 管理时会更加烦躁 :(

找了一些关于 SSH Server 的资料,发现通过修改 sshd 的配置文件,能够让 SSH Server 发送“心跳”信号来维持持续连接,下面是设置的内容

打开服务器 /etc/ssh/sshd_config,我在最后增加一行

...

Lighttpd 配置笔记

2009/04/03 •

最近要给公司配置一台静态服务器,用来存放图片、JS、CSS和静态文章等,打算用 Lighttpd 来当 Webserver,摸索了一下,发现有些地方不如 Apache 简单,做做笔记以后有用 :)

  • 关闭 Lighttpd 的目录索引功能

    server.dir-listing = "disable"

  • 一个简单的虚拟主机设置

    $HTTP["host"] == "img.hdwong.com" {
        server.name = "img.hdwong.com"
        server.document-root = "/www/public_html/img.hdwong.com"
    }

Ubuntu 修改 root 密码

2009/04/03 •

创建自己的用户

useradd -m USERNAME
passwd USERNAME

用这个普通用户 (需要修改 /etc/sudoers 把它加入到 sudoer) 登录

sudo -s
passwd

然后输入新密码和确认密码就可以了

人物加点 Demo

2009/03/28 •

又到周五,睡觉前搞了这个东东,用来在创建游戏角色时的界面

TinyMCE 插入图片时返回文件全路径

2009/03/26 •

在 TinyMCE 内插入图片,如果图片是在相同主机时,路径会变成相对路径,且主机头会被去掉,需要在设置时加上下面两个设置,就会返回全路径了。

tinyMCE.init({
    //...
    relative_urls: false,
    remove_script_host: false,
    //...
});

CodeIgniter Upload Fixing —— 上传任何文件类型

2009/03/25 •

昨天下班前遇到了一个很抓狂的东西,本来以为很快搞定的。我用 CodeIgniter Upload Library 上传一些文件,但是我不需要限制这些文件是否符合指定格式(因为这个是管理员后台,都是自己人上传),按照 CodeIgniter 官方文档的说法,allowed_types 的设置默认是 None 的,当时认为是不去设置 allowed_types 就会接受上传所有类型的文件了,谁知令人烦躁的是居然不设置这个就上传不了文件,把它换成 jpg|png|gif 就好了,但是又只能上传图片类型文件。

今天实在受不了,打开 CodeIgniter 的代码( system/libraries/Upload.php ),用 xdebug 跟踪,到 Line202

// Is the file type allowed to be uploaded?
if ( ! $this->is_allowed_filetype())
{
    $this->set_error('upload_invalid_filetype');
    return FALSE;
}

...

周末开发了一个小 Game Demo

2009/03/22 •

哈哈,这个周六日无聊搞了个东东,还算不上一个完善的游戏,只是作为一个 Demo 来看看。

CodeIgniter 访问 $_GET

2009/03/12 •

在开启了 rewrite 的情况下,CI 会 unset 掉 $_GET 超级全局变量,在 config.php 里面,我们可以看到2个关键的设置

/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string. The default setting of "AUTO" works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
|
*/

$config['uri_protocol'] = "AUTO";

$config['enable_query_strings'] = FALSE;

...

开发服务器配置笔记 (Apache PHP MySQL SVN Trac)

2009/03/10 •

最近为新公司部署了一台内网的开发用服务器,主要配置了 Apache + PHP + MySQL,SVN 版本控制,Trac 项目管理,这里炒冷饭写一下…

  1. Apache

    官方下载 源代码,先安装 apr 和 apr-util

    cd srclib
    cd apr
    ./configure --prefix=/usr
    make
    make install

    ...

不同浏览器装载 Javascript 的 IE hack

2009/03/03 •

看到 PNP广州 群里的 arlex 提到的,挺经典,就记下来:

<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->

<!--[if IE]> 所有的IE可识别 <![endif]-->

<!--[if IE 5.0]> 只有IE5.0可以识别 <![endif]-->

...

《昨天》一个 80 年生人的回忆

2009/02/25 •

今天看到这样一个视频,看得很感动啊,想起很多以前小时候的东西啊,特别是初中小学时放学回家的那些路上……

隐藏 Apache & PHP 的版本号

2009/02/24 •

有朋友问起,如何隐藏 HTTP header 中发送包含在 Server 信息里面的 Apache 和 PHP 版本号(譬如我们可以到 Firefox 的附加工具里面找 Live HTTP Headers),下面是做法:

Apache:
开启 httpd.con...

终于又吃到都城的锡纸包鸡啦~~~

2009/02/24 •

阔别三个多月,今天中午终于又吃到你啦,依然好美味,O(∩_∩)O 哈哈~

Come back to Guangzhou

2009/02/20 •

完结了在深圳的最后一天回到了广州,如梦幻般的结束了三个多月的大展之旅,很多谢 F2E 的战友们,多谢文定、查理、乔伊、伊娃、阿伦、Fisher、迈克、Jimmy、大卫、依兰,还有 Y! 的兄弟姐妹们,虽然不能挨个的拥别,但我永远都不会忘记你们滴 :)

这段时间里没有接触过什么完整的项目,但参加 Training 和 Sha...

RGB 判别浅颜色 (Light Color)

2009/02/12 •

P4 Team 终于接到了 Elance.com 上的第一个活,恭喜下,对于这个 Project,团队里自然很重视。今天,Milestone1 里有一个关于 GD 库生成文字的 bug 需要 fix,大意是当用户选择浅颜色的时候给文字加一个边框,原因背景色是白色。

经大家讨论第一个方案,是把 RGB 的值求和,然后取一个值,当和大于等于此值就...

Magic Methods of PHP (2)

2009/02/09 •

关于 Constructors and Destructors

个人觉得构造函数和析构函数没有啥特别值得说的,都是一些容易遗漏的地方:

  • 子类的构造/析构函数默认不会调用父类的,需要显式地调用 parent::__construc...

Quadronica 一个年前开发的 Javascript 小游戏

2009/02/06 •

游戏有3种难度,Easy 有4种方块颜色,Normal 有5种方块颜色,Hard 有6种方块颜色,如下图1,玩家需要画出一个矩形,且矩形的四个角都是相同的颜色,矩形就会消除并得分。如下图2,四个黄色方块构成一个小矩形,下图3中,四个黄色方块构成一个较大的矩形,越大的矩形能获得更多分数。

Quadronica tutorial 1Quadronica tutorial 2Quadronica tutorial 3

...

Magic Methods of PHP (1)

2009/02/05 •

今天看了一下关于 PHP 的类内魔术函数,发现以前有不少地方是没有注意到的,算是系统地补习一下:

关于 Overloading

以前忽略了 inaccessible members 和 inaccessible methods,以...

Stay hungry, stay foolish

2009/02/04 •

农历年假已过,大家都应该回到工作岗位上班了,恭喜发财 :) 今天从明哥获悉 TVB 的职位已选中了另外一个同事,心情自然有点不爽,最近一个月来工作上的失意,职位的不稳定,轮番面试的失利,加之经济上的压力,让我身心疲惫,也让我这个本来自信心满充足的人有种井底之蛙的感觉。

...

无聊写的一个 CAPTCHA

2008/12/22 •

今天中午无聊了点,突发奇想写下了这个 Captcha 程序,或者网上已经有前辈写过,就当是练练手,加入 F2E 后我都很少写 PHP 了 :'(

Captcha

演示地址已死,源代码已死,心痛中…

技术交流会的演讲稿子: About PHP

2008/12/19 •

这周是“大烂鱼”小组的技术交流周,作为新加入的一分子(现在不知道是不是该叫“大笨烂鱼”了?),我理所当然也该选一个题目来进行讲述下。

毕竟新来还不久,对 F2E 同事们的技术底子还不是很了解,如果探讨前端的技术,就 HTML CSS JavaScript 一类,不用说的大家都是这方面的高手了...

温馨提醒:接近年关,请大家注意安全

2008/12/18 •

今天收到 HR 的邮件,要是早点看到这个邮件就好啦,上周陪老婆逛街的时候,正好就丢了一台手机……555

嗯,嗯,我觉得对大家都有一定帮助,就分享一下 :)

----- 原文

接近年底了,最近抢劫、盗窃案件时有发生。为保证自己的人身以及财产安全,我们需要尽可能多了解一些防护相关...

Impressions of ShenZhen

2008/12/15 •

人家说每一个传奇都市,就好比一个极具性格的人物,不是被人爱就是被人恨,但你很难对他没感觉。

深圳——正是这样一个城市。

Google Analytics

最近一个月访问数:544