博客防垃圾评论探讨

由于 Web/HTTP 的流行(Web 基于 HTTP, 超文本传输协议), 人们开发了大量的 Web 开发库, 这使得, 提交一个表单发表评论是一件非常简单的事. 如果使用脚本语言, 甚至能仅用 3, 5 行代码便能解决.

博客防垃圾评论, 是每一个博主十分关心了头疼的问题, 特别是使用了 Wordpress 这类十分流行的开源博客软件, 那么被垃圾评论盯上的机率就更甚了. 同时, 这些软件也提供了防垃圾评论(anti-spam)插件, 用于解决这个问题.

1. 垃圾评论的分类

垃圾评论根据产生方式在可以分为两大类: 人工垃圾评论, 机器人垃圾评论.

Read more »

fdevent - 方便的跨平台IO多路复用接口

fdevent是一套方便的跨平台IO多路复用C语言接口, 主要想法来自 epoll 和 lighttd 的 fdevent, 接口的使用几乎和 epoll 一样.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
while(1) {
    nfds = fdevents_wait(evs, 1000);
    if(nfds == 0){
        //printf("timeout\n");
        continue;
    }
 
    for(i = 0; i < nfds; i++) {
        fde = evs->events[i];
 
        if(fde->flags & FDEVENT_IN){
            //
        }
 
        if(fde->flags & FDEVENT_OUT){
            //
        }
    }
}

项目主页: http://www.ideawu.net/person/fdevent/

单独编译一个PHP模块

以libcurl为例

cd 源码目录/ext/curl
PHP安装目录/bin/phpize
./configure
make

得到 ./modules/curl.so
拷贝到 PHP 的模块目录
修改 php.ini
重启 Apache

重流程还是重工具?

开发一套流程系统, 是把业务的有效性是由系统来判断, 还是由人来判断? 是帮助人操作业务, 还是记录人操作业务的历史? 流程系统是越俎代庖替人搬砖头, 还是记录人搬砖头的经过? 流程系统是一个机械自动化工具吗?

"打开方式"里无法选择程序的解决方法

不知道什么原因, 鼠标右键里的"打开方式", 无法选择某个程序, 如果把该程序改名, 就能选择. 经一番搜索, 终于知道注册表里该程序的路径有误.

HKEY_CLASSES_ROOT\Applications\your app.exe\shell\open\command

把"command"或者"your app.exe"删除即可.

一对多关系的不稳定性

经典的对象关系模型有三个: 一对一(one-to-one), 一对多(one-to-many), 多对多(many-to-many). 事实上, 一对多只是一种游离的中间状态, 任何设计中一旦使用了一对多关系, 迟早会发现只有多对多才能满足业务的变更. 对象关系要么是一对一, 要么是多对多, 没有一对多.

以博客程序作为例子, 想当然地, 认为博客作者只能是一个人, 所以用户和博客文章的关系是一对多的. 但是, 如果不把博客当为个人的日记本来使用, 把博客当做文章发布平台, 这时, 这个模型就不能使用了, 因为文章的作者是可以有多人的.

这只是其中一个例子, 你可能认为有真正的文章发布平台, 不应该把博客程序当做文章发布系统. 想想, 人们会本能地认为一个部门只能属于一个公司, 一个小组只能属于一个部门, 但是, 多个公司合办的交流部门呢? 两个部门合作的小组呢? 这种例子数不胜数.

根据我的经验, 一旦有人设计对象关系模型(如数据库设计)时使用出了一对多关系模型, 我们应该像看到了想抢我们饭碗的人一样警惕起来: 真的是一对多关系吗? 就跟我们问一个从天而降的不明类人生物: 你是地球人吗?

工作流系统

做工作流系统的人, 往往分不清哪些应该是软件做的, 哪些是实际发生的. 首先必须明确的是, 工作流系统必须是一个记录器, 只负责记录发生了哪些事件. 其次, 工作流不是一个工业自动化控制系统, 它不应该去控制机械设备的运行.

从逻辑上说, 流程是动作及其动作之间联系的集合. 动作分为系统动作了业务动作. 记录文字在本子上就是一种系统动作, 审核人登录软件系统点击一个按钮也是一种系统动作. 运送货物是一种业务动作.

工作流系统只关心系统动作, 所以必须将业务中的业务动作转换为系统动作的表示. 如前面举的运送货物的例子, 应该分解为"开始运送"和"结束运送", 这样, 才能在工作流系统中体现. 工作流系统只记录运送什么时候开始, 什么时候结束, 而不是去控制汽车运送货物.

基于工作流系统分析一个业务流程时, 除了分析业务流程本身, 还要分析它在软件系统中会对应多少个页面.