EGP Framework v1.0.0 beta 发布了…

近来PHP的框架越来越多,把自己这两年积累的东西组合起来,才发现,原来每个有经验的PHP程序员都可能有自己的框架。

EGP Framework
想到给框架命名就让我烦,记得曾经好像说过,框架就是个屁,然后就给这个框架命名为:EGP,谐音:一个屁 -_!!

发布这个框架,并不求太多人会来支持我或者使用这个框架,纯粹是为了学习和爱好,才开发了这个框架。当然,非常欢迎大家来跟我交流技术,或者参与到这个框架的开发中来。

简单的说一下这个框架吧,这是一个基于 PHP5.2 以上版本的轻量级 MVC 框架,速度超快,不相信的话就自己测试吧。当然,这个框架也是非常容易扩展的,像其他的框架例如:Zend Framework/Solar/Zoop/Pear 之类的都可以拿来直接使用。

当前版本为v1.0.0Beta,大家可以在项目的主页下载到最新版本,或者浏览源代码。

跟其他的框架不同,EGP是不会使用模板和ORM的,原因很简单,就是我不喜欢,我想这也是自己写框架的优点吧。提到这里可能很多人想要批评我,对,你们就继续批评吧,我就继续写代码好了,因为这个框架只为喜欢它的人而存在。

不过这个框架没什么文档,现在才开始打算写一些文档,而且也还有许多的功能没有完成,以后有时间再慢慢补充吧。

顺便感谢一下同事 Hyper,帮我完成了不少的工作,当然,这个框架也已经应用在我们公司的项目中了,而且也开源了。

下载地址:EGP Framework v1.0.0.beta.zip
项目主页:http://egp.googlecode.com/

jQuery 表格 zebra crossing & hover & click 效果插件

继续编写了一个 jQuery 插件,可用于表格中的 zebra crossing & hover & click 效果,使用方法很简单:

$('table').tablegrid(); //如果不做任何设置则可以直接这样调用
$
('table').tablegrid({
    
oddColor  : '#E0E0E0', //奇数行背景色
    
evenColor : '#F0F0F0', //偶数行背景色
    
overColor : '#C0D0E0', //鼠标悬停时背景色
    
selColor  : '#FFCC99', //行选中时背景色
    
useClick  : true       //是否启用点击选中
});

点击这里下载:
http://www.tblog.com.cn/down/jquery/jquery.tablegrid.js
http://www.tblog.com.cn/down/jquery/jquery.tablegrid.min.js

(未完,点击阅读全文)

jQuery Checkbox 全/反选操作插件

编写了一个 jQuery Checkbox 全/反选操作插件,提供了自动切换/全选/反选/获取字符串值的功能,使用方法如下:

$('input[@name=checkAll]').checkbox().toggle('input[@name=checkbox]'); //自动切换全选/反选
$
('input[@name=checkAll]').checkbox().checked('input[@name=checkbox]'); //全选
$
('input[@name=checkAll]').checkbox().unchecked('input[@name=checkbox]'); //反选
$
('input[@name=checkbox]').checkbox().val(); //获取字符串值

点击这里下载:
http://www.tblog.com.cn/down/jquery/jquery.checkbox.js
http://www.tblog.com.cn/down/jquery/jquery.checkbox.min.js

(未完,点击阅读全文)

Web开发人员必须学习的5门课程

简介

web开发人员都应该学习的5门课程:

  1. 你并不总是最聪明的那一个人
  2. 经验肯定是有一定用处的
  3. 没有银弹(即没有什么技术可以解决所有问题)
  4. 一种新的好东西并不一直是好东西(这里的东西指技术或者应用)
  5. 不是每一场仗都值得打 (不要总是认为自己的想法是正确的)

越来越多的Web开发人员通常都会问一些同样的问题。比如:哪一种开发语言最重要?初级开发人员的薪金会是多少?公司提供的免费培训有用吗?如何评估一个新的项目?尽管这些问题都很重要,但是开发人员往往对其他人的回答不以为然。一般来说,他们自己都不知道如何去寻找答案。以下五个建议或许有用。

你永远不是最聪明的人

在互联网泡沫到来之前我和一个同事一起从事语音识别系统扫描编码的工作。不久我们就发现通过电脑或者PDA可以很方便的上网,并且是无键盘操作。每当我质疑他的一些想法时但都遭到了他的坚决反对。他觉得他永远不可能犯错误。他曾经参加过技术讨论会的!在接下来的几个月里他有很多的设计都没能成功实现。

如果有一天你发现你与我的那位同事处境相似,那么也许你应该认识到你不一定总是正确的。你并不是办公室里面最聪明的人,所以主动接受别人的建议或许更能显示出你的大智慧。

经验真的很重要

作家永远不想承认这个事实,我们开发人员也是这样。尽管如此,我发现那些有过成功项目经验的人会更容易在接下来类似的项目中获得成功。当需求明确准备开发的时候,程序员通常都非常有自信有能力解决所有的问题,而不管所使用的方法是不是最佳的甚至可靠的。

事实上,经验从来都是很非常有用的。我的建议是相信别人的经验并向他们学习,而不是让自己嫉妒心无限膨胀。当自己犯错误的时候,多问几个为什么,多向别人寻求反馈并且尊重他人的意见。 (未完,点击阅读全文)

Google Code Project中文翻译

闲来无事,翻译了一下 Google Code Project 中的一些关于 wiki, issue, downloads 的描述,以便于更多不是非常熟悉英文的人加入到项目开发中来,英文水平有限,所以可能有些地方并不是很准确

Predefined Wiki Page Labels:

Featured             = 列出在项目主页
Phase-Requirements   = 项目规划和需求分析
Phase-Design         = 项目设计和关键问题
Phase-Implementation = 开发者指南
Phase-QA             = 测试计划和质量规范
Phase-Deploy         = 如何安装和配置程序
Phase-Support        = 计划支持的用户和宣传
Deprecated           = 废弃的,大多数用户不应该参照这个

Open Issue Status Values:

New = 新添加并且未审核的问题
Accepted = 已通过审核的问题
Assigned = 已经指派相关人员处理
Started = 正在处理这个问题

Closed Issue Status Values:

Fixed = 开发者提出的需要变化,已经解决
Verified = 已经解决的问题
Invalid = 无效的问题报告
Duplicate = 重复出现的问题
WontFix = 决定不解决这个问题
(未完,点击阅读全文)

被否决的Google Logo

FROM:http://www.yeeyan.com/articles/view/pestwave/11347?ad=referral

优胜劣汰,Google Logo也不例外。幸福的Logo是一样的,不幸的Logo各有各的不幸······

原本打算庆祝:2003年儿童节
拒绝原因:太幼稚

原本打算庆祝:香烟问世150周年
拒绝原因:政治上欠妥

原本打算庆祝:植入式广告(Product Placement)发明50周年
拒绝原因: 星巴克给的钱太少

原本打算庆祝:几年荷兰画家蒙德里安(以抽象几何图案等为特点的) 诞辰130周年
拒绝原因:太抽象


(未完,点击阅读全文)

用mysql触发器自动更新memcache

不错的一篇文章,用于项目中可以带来更多的便利,按照方法已经调试成功,可以大大提高项目的速度。

FROM:http://www.ooso.net/index.php/archives/436

mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的自动更新。简单记录一下安装测试步骤。

安装步骤

  • 安装memcached,这个步骤很简单,随处可见
  • 安装mysql server 5.1RC,安装办法也很大众,不废话了
  • 编译libmemcached,解压后安装即可
    ./configure; make; make install
  • 编译Memcached Functions for MySQL,在http://download.tangent.org/找一个最新的版本下载就是,
    ./configure --with-mysql=/usr/local/mysql/bin/mysql_config --libdir=/usr/local/mysql/lib/mysql/
    make
    make install
    接下来有两个办法让Memcached Functions for MySQL在mysql中生效

  • 在mysql的shell中执行memcached_functions_mysql源码目录下的sql/install_functions.sql,这会把memcache function作为UDF加入mysql
  • 运行memcached_functions_mysql源码目录下的utils/install.pl,这是一个perl脚本,作用同上一条

(未完,点击阅读全文)

扩展ArrayObject

使用过Zend_Config的朋友或许对下面这种数组使用方式并不陌生了:

<?php
$config = array(
    
'db' => array (
        
'adapter' => 'mysql',
        
'config' => array (
            
'host' => 'localhost',
            
'port' => '3306',
            
'dbname' => 'mydbname',
            
'username' => 'dbuser',
            
'password' => 'dbpassword',
            
'charset' => 'utf8',
            
'prefix' => '',
        
),
    
),
);
$config = new Zend_Config($config);
echo $config->db->adapter;
foreach ($config->db->config as $k => $v) {
    
echo "$k | $v \n";
}
echo count($config);
//... 甚至其他更多的方法

下面的扩展,通过几个魔术方法,不仅可以实现Zend_Config可以做到的事情,还可以继承Array_Object所有的可用方法
(未完,点击阅读全文)

is_file比file_exists快N倍

for ($i=0; $i<10000; $i++) {
    
is_file(__ROOT__ . '/App.php');
    
file_exists(__ROOT__ . '/App.php');
}

XDebug测试结果为:

php::is_file
————————————-
total self: 0.5ms
total cum: 0.5ms
calls: 10,000

php::file_exists
————————————-
total self: 41ms
total cum: 41ms
calls: 10,000

查看手册,虽然这两个函数的结果都会被缓存,但是is_file却快了N倍

在Firefox中开启Chrome的优秀功能

FROM:http://www.yeeyan.com/articles/view/sunwell008/13529

喜欢Chrome的新功能?不舍得放弃Firefox?来看看这里有没有你用得上的……

整个互联网都在为了谷歌Chrome的创新功能而欢腾,但是在我们比较Chrome和Firefox的速度测试最 终却没有明确谁是胜者——这意味着你对于浏览器的选择将会仅仅取决于它们的功能。撇开一些特别的东西(即进程管理)不谈,很多Chrome的优秀功能已经 可以在Firefox 3上使用了,这再一次证明了其拓展性的力量。从匿名浏览到优化下载管理器再到地址高亮以及改良的搜索,让我们来看看如何将谷歌Chrome的优秀功能带入 Firefox。

潜入者开启匿名浏览


Chrome的匿名浏览使得你可以查看色情网站而不会在你的电脑上留下任何该浏览进程的记录。在Firefox中,潜入者扩 展可以做同样的事情。主要的区别在于:在Chrome中是将单一窗口变成匿名模式,而在Firefox中则是整个浏览器都变成匿名模式(这应该也可以在 Chrome中实现因为它将每个标签页当作单独的进程来进行管理)。不过坦白说来,你的多任务处理能力就真的那么强吗?  (来源) (未完,点击阅读全文)

Theme Brought to you by Directory Journal and Elegant Directory