Bun Wong's Blog

专注于 Web 应用程序开发

技术交流

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 目录...

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/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/

Portfolio - Diamond Banquest Hall

2009/10/28 •

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

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

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. 大部分用户对广告熟视无睹

PHP MVC & BPF

2009/09/01 •

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

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

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

关于 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,里面那个名字成分分析挺有意思的,它可以根据输入的名字 (里面是用帐户名) 来计算出你的成分,就类似人家街上算命卜卦的老先生一样,当然跟人家那样引经据典的忽悠你不同,也很无厘头,但相信还是一个很有趣的点子吧...

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
...

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;

早期页面缓存阶段...

深入 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 才开始加上的,我们可以用一个简单的字符串处理方法来获取这个值

    ...

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

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

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;
}

...

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]-->

...

隐藏 Apache & PHP 的版本号

2009/02/24 •

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

Apache:
开启 httpd.con...

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,以...

无聊写的一个 CAPTCHA

2008/12/22 •

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

Captcha

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

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

2008/12/19 •

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

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

Google Analytics

最近一个月访问数:342

Ads