软件构建中的理想设计特征


1、最小复杂度。设计的手艺好目标就是要复杂度最小,避免作出“聪明的”设计,因为“聪明的”设计常常难以理解
2、易于维护。 易于维护意味着在设计时为做维护的程序员着想。
3、松散耦合。松散耦合意味着在设计时让程序各个组织称部分之间的管理关系最小。通过应用类接口中合理还凑向、封装及信息隐藏等原则设计出相互关联尽可能小的类。减少关联也就是减少了集成、测试和维护时的工作量。
3、可扩展性。可扩展性是只可以增强系统功能而无须改变底层结构,可以改变某一个方面功能而不影响其他部分。
4、可重用性。可重用意味着代码可以在其他系统的组成部分中重复使用,降低整体的成本和提高生产效率。
5、高扇入。高扇入就是说让大量的类是有那个某个给定的类。这就是意味着设计出的系统很好的利用较低层次上的工具类。
6、低扇出。低扇出就是让一个类里少量或者适中的使用其他的类。高扇出说明了一个类使用了大量其他的类,因此可能变得过于复杂。
7、可移植性。可移植性是说应该设计的系统很方便的移植到其他的环境中。
8、精简性。精简就意味着系统没有多余的部分。这样有利于后面的单元测试。
9、层次性。层次性就意味着尽量保持系统各个层次保持可分解,使你能在任何层面观察系统。
10、标准技术。一个系统所依赖的外来的,古怪的东西越多,别人在第一次想要理解它的时候就越头痛。尽量使用标准化,常用的方法,让整个系统给人一种熟悉的感觉。

关于PHP最佳实践方法的两个PPT


Best Practices of PHP Development
View more presentations from Matthew Weier o’phinney.

Everyday Best Practices of PHP Development
View more presentations from Matthew Weier o’phinney.

利用CodeIgniter缓存进行攻击


CI自带的缓存系统确实很方便,但她存在一个很大的弊端,看缓存系统的源码:
CI把md5(index.php+uri_string)作为缓存文件名(没完全copy,详见libraries/output.php)
这个uri_string允许URI串夹杂垃圾信息,比如:
http://ci-site.com/index.php/index/index/1
http://ci-site.com/index.php/index/index/1/2
http://ci-site.com/index.php/index/index/1/2/3
上面三个请求,CI将生成3个不同的缓存文件
问题来了,假如攻击者写一个并发访问脚本:
每秒并发访问100次(任何adsl用户都有足够带宽发起攻击)
循环访问 index.php/index/index/1 至 index.php/index/index/10000000
那么服务器将生成一千万个首页垃圾缓存,在同一个目录里面!
假如你的网站首页html有10kb(一般来讲,10kb作为首页不算大)
这个缓存目录的尺寸将达到:10kb x 10,000,000 = 100GB
完成攻击所需时间:大约27小时
更重要的是CodeIgniter本身并没有提供更详细的缓存检测机制和缓存容量限制机制,加入你没有对cache目录进行磁盘配额限制的话,那么一轮并发高的缓存攻击将有可能将硬盘塞满,之后网站就会变得异常缓慢。而且更要命的是CodeIgniter本身没有缓存清除机制,只能干等着缓存过期或者手动清除,CodeIgniter最大的优势在于它的性能和学习曲线。
总觉得CodeIgniter本身就是一个半成品,没有缓存清除机制也就算了,还没有模块化缓存(即只缓存页面某个或者某几个部分)的的机制,CodeIgniter这么优秀的Framework在缓存方面算是做得很失败了,不过得益于它优秀的扩展性能,仍然有很多解决方法,况且任何Framework都不是完美的。
解决CodeIgniter大体上有四种方法
1)关闭缓存,我觉得这基本上算不得一种解决方法,因为这牺牲了网站的性能
2)架设缓存服务器,对于一般的中小型网站来说这也比较奢侈,且不说squid或者vanish的学习曲线有点长,也没与服务器设备。
3)增加严格的检测机制,这是一个非常可行的方案,比如对URI每个传入参数的类型进行严格的验证,在一个页面显示前进行详细的处理,比如ID为10000的记录数据库中根本不存在,那么使用show_404()方法输出404页面,这个页面并不会被缓存,假如没有增加这个验证,程序输出的页面将会被缓存,只是页面的某个区域的内容为空而已。比如显示文章的区域是空,侧边栏和头部都是从模板中继承过来了,仍然被缓存了。
4)使用其他cache类替代CodeIgniter的缓存类,比如APC

Python和其他语言数据类型比较


静态类型语言
一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。
动态类型语言
一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型语言
一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。
弱类型语言
一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 ‘12′ 和整数 3 进行连接得到字符串’123′,然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。

Google Analytics官方在线培训与资格认证


从3月3日开始,Google推出了一个官方在线课程,培训主要的课程有Analytics的使用入门,报表解读,基本设置(有用信息过滤,电子商务跟踪,目标跟踪设置,多域名与子域名设置等等),还有 更高级的应用,比如自定义报表,报表切分,图表管理,趋势搜索,事件跟踪和真实页面浏览量,甚至是直接在代码中增加自定义参数。共有26个主题。
我对其中的多域名比较感兴趣,因为我觉得会有人利用这个多域名来作弊(刷统计数据),现在的广告主更相信第三方数据,如果这个真被用来作弊或者真的可以通过这个来作弊,很多广告主在选择大流量站点投放广告时又多了很多头痛的事。
另外,在课程完毕之后,官方还提供了一个测试(IQ test – Individual Qualification test)来证明你是否是个合格的Google Analytics网站分析人员。
不过要参加这个资格测试还需要花费50美圆,课程都是全英文的,测试当然也是,通过75%的测试就被认为合格。其实,个人觉得参加测试是没有啥意思了,不过课程是肯定应该去学习一下的,毕竟访客分析对于商业网站的运营是越来越重要了,学好了Google Analytics对你分析访客数据提高网站的可用性都是非常有帮助的。另外对于使用Google Analytics来跟踪Adwords PPC广告数据的朋友也应该去听一听,这对你控制广告预算,减少无效关键词的广告支出,>跟踪PPC广告的转换关键词,提高ROI都是非常有好处的。
如果有兴趣在课程结束后参加测试的朋友的话,可以参考Google Analytics IQ的FAQ,我大概看了一下,通过后IQ资格为18个月的有效时间,时间过了也许还需要重新测试吧,FAQ中也没有提到通过了会发证书,所以想拿“文凭本本”的朋友估计没戏。哎,在中国,本本还是挺重要的啊!哈哈…,不过对于在家工作的朋友来说,学到真本事才是真的,个人觉得web分析技术要比网站的SEO重要得多,要想成为web分析领域的专家可不容易。