Google显然要和Wikipedia拼一下。似乎选择了一个比较独特的角度,而不是和Wikipedia正面交锋?与维基百科按话题区分不同,Knol的重点是个人用户或用户群。Knol不编辑信息。只要作者不批准,用户不能修改信息,也不能写新信息,用户可以通知Google内容是否客观。这使得Knol看起来像一个WordPress MU,一个大博客,你可以在上面写任何东西…只不过分类只有一个——Knowledge。
此外,Knol首页的Slogan狠狠地雷了本人一下——”Who needs a search engine? Ctrl+F”。Google啊Google,太幽默。

[singlepic=15420,700,618]

被基于Python的Trac好好地郁闷了一下之后,昨天转投了另一个开源的软件项目管理工具RedMine。RedMine是基于Ruby的一种SM软件,能够支持多种数据库,推荐使用的是MySQL。
在DreamHost上很轻松地架起了svn中checkout的最新版本RedMine,立刻被它的相对简单的安装过程(比起WordPress一键安装还是差得十万八千里,不过比Trac那是强太多了,Trac给我的影响不但是不再使用Trac,更是决定不会去学Python)和优秀的界面,以及多种SVN的支持所吸引。

[singlepic=15190,700,609]

Software Management(SM)软件的核心之一,基于issue的软件项目管理。可见RedMine对于中文的支持相当好,界面也很舒服。功能不算多,但绝对够用。尤其是上面的过滤器,以及点击栏目就可以按照本栏去排序,很方便。

[singlepic=15194,700,609]

在issue界面还实现了一个右键菜单,能够快速地更新issue状态。虽然架设在内网,这样的设计仍然加速了issue的处理。

[singlepic=15191,700,609]

RedMine带有新闻系统、Wiki系统、讨论版系统,基于标准的wiki format格式化文本。

[singlepic=15192,700,609]

RedMine能够支持多种版本控制系统(RedMine支持:Subversion、Darcs、Mercurial、CVS、Bazaar和Git)
方便的是,在Commit的Message中可以加上标签,链接到相应的issue。已关闭的issue还会被删除线标识。清晰明了。

[singlepic=15193,700,609]

版本路线图,根据issue的完成比例来计算整个项目的完成程度。

美国生活科学网(livescience.com)日前评出了自1822年以来的10大革命性计算机,其中IBM设计和组装的走鹃(Roadrunner)超级计算机位居榜首.
以下就是美国生活科学网所评出10大革命性计算机简介:

第十名:巴贝奇分析机

[singlepic=15178]

查尔斯·巴贝奇(Charles Babbage, 1792-1871)生前为英国皇家学会会员、剑桥大学数学教授。他最早提出人类制造出通用计算机理念,用以代替大脑计算复杂的数学问题。由于还没有没有电子技术应用,巴贝奇设想就架构在当时日趋成熟的机械技术上面。巴贝奇将他设想的通用计算机命名为“分析机”,希望它能自动解算有100个变量的复杂算题,速度达到每秒钟运算一次。

巴贝奇天才般地提出了类似于现代电脑五大部件的逻辑结构,也为后世通用处理器诞生奠定了坚实的基础。英国政府曾资助巴贝奇的研究工作,但后来停止对他的援助。1822年,巴贝奇终于研制出了一台可工作的模型机。近年来,科学界已经普遍确认巴贝奇在信息科学领域的鼻祖地位。1991年,英国肯圣顿(Kensington)科学博物馆根据巴贝奇当年留下来的图纸重新建造了一台差分机。图为后人完成的巴贝奇分析机。

第九名:ENIAC

[singlepic=15189]

1946年2月14日,世界上第一台真正意义上的电子计算机ENIAC在美国宾夕法尼亚大学诞生。该机器使用了18800个真空管,长50英尺,宽30英尺,占地1500平方英尺,重量达30吨。ENIAC真空管的损耗率相当高,几乎每15分钟就可能烧掉一支真空管。不仅如此,ENIAC也是位耗电大户。据说ENIAC每次一开机,整个费城西区的电灯亮度都会随之降低。

第八名:IBM System/360

[singlepic=15181]

1964年4月7日,IBM推出了划时代的System/360大型电脑,它是世界上首台指令集可兼容计算机。在此之前,计算机厂商要针对每种主机量身定做操作系统;而System/360的问世,则让单一操作系统可适用于整系列的计算机。 IBM System/360同时还和多项世界第一联系在了一起,如协助美国太空总署建立阿波罗11号资料库、完成太空人登陆月球计划、建立银行跨行交易系统以及航空业界最大的在线票务系统等重大事件。

第七名:Datapoint 2200

[singlepic=15182]

Datapoint 2200是1970年全球首批投放市场的终端用户电脑之一。该产品制造商为Computer Terminal Corp.(CTC),但该公司如今已不复存在。但Datapoint 2200的很多基本理念仍保留在我们今天所使用的个人电脑当中。如CTC曾向当时尚为创业公司的英特尔提出建议:尽量采用单一芯片,以减少机器的发热量。凭借此建议,英特尔一步步登上了PC处理器领域霸主的地位。

第六名:施乐(Xerox)PARC Alto

[singlepic=15183]

1973年4月,施乐帕罗奥多研究中心(Xerox PARC)推出了Alto,它是首台把计算机所有元素结合到一起的图形界面操作系统。Alto使用3键鼠标、位运算显示器、图形窗口和以太网络连接。 Alto能与另一台Alto计算机和激光打印机连成网络,这又是施乐PARC的一项重大发明。如今回头一看,正是这些技术组合在一起构成了信息革命的基础。

第五名:TRS-80

[singlepic=15184]

TRS-80于1977年推出,制造商为Tandy公司。该产品推出后,首先被放在 Radio Shack连锁店中出售。Radio Shack当时认为,如果首批进货销路不好,公司就留下来当作收银机使用。但由于该机器并不是针对计算机迷,TRS-80销量远远超出了预期。而TRS- 80销量大增后,又衍生出全球首轮第三方个人软件市场。

第四名:Apple II

[singlepic=15185]

Apple II于1977年推出,它是继Apple I的市场逐渐低迷之后的后续产品。Apple II吸取了Apple I存在的诸多不足,并由苹果联合创始人史蒂夫-沃兹尼亚克(Steve Wozniak)对其进行了重新设计。。Apple II更多体现出其游戏型电脑而非家用电脑的特点。Apple II表达了苹果这样一种理念:无论是新入门的电脑用户还是熟练的技术人员,也无论是电脑黑客还是商务用户,当他们在使用苹果电脑时,都能够获得轻松如意的感觉。

第三名:IBM PC

[singlepic=15186]

IBM PC机于1981年推出。该产品处理器是Intel 8088,运行速度为4.77MHz,其主板上配有64KB内存,并可扩展至640KB。由于它采用开放式结构,1982就出现了兼容机。IBM PC的重大历史意义在于:确定了硬件和软件的业界标准,从而使PC产业出现了“井喷”式的规模化增长。如今全球范围内大规模PC产业的形成,其源头就来自于IBM PC机。

第二名:苹果麦金托什机(Macintosh)

[singlepic=15187]

1984年1月24日,苹果发布了全新Macintosh(通常简称为Mac)个人电脑,它是全球首台采用图形用户界面的个人电脑,与当时采用DOS命令行、纯文本用户界面的IBM PC形成了鲜明对比。正是Macintosh的出现,引发了一场计算机世界的革命。Macintosh推出后,微软立即投入巨资研究开发Windows系统。1995年微软发布Windows 95后,普通PC用户已能享受到与Macintosh相当的图形用户界面。

目前广大普通计算机用户所熟悉的窗口、鼠标、桌面、点击、下拉菜单,甚至连桌面上的“垃圾桶”,其实都可以追溯到1984年的苹果Macintosh机。

第一名:IBM走鹃(Roadrunner)

[singlepic=15188]

走鹃超级计算机前不久刚刚组装成功,其造价高达1.33亿美元,它由IBM和洛斯阿拉莫斯 (Los Alamos)国家实验室技术人员共同开发和组装。走鹃提供给美国军方使用,其运算速度达到了1.026 petaflop,即每秒钟可进行1026万亿次浮点运算,为目前全球运行速度最快的超级计算机。走鹃投入使用后,将主要用于运算分析美国军方的机密军事数据,如核武器及其他军事战略数据等,并模仿核战争爆发后对人类生存环境的破坏情况,然后据此得出相应分析结论。

防止你的网站被注入式攻击的第一步是理解什么是注入式攻击。一个注入式攻击是网站的某个访客在你的网站输入表单中输入了某种内容,试图改变你的MySQL查询本意。例如,某些人可能会在登陆窗口使用这种方法绕开登陆。如果你的查询用户名和密码的形式类似这样子:
[code=’sql’]
SELECT * FROM users WHERE username = {username} AND
password = {password }
[/code]
那么用户可以使用任意的用户名,使用这个密码:
[code=’sql’]’ OR ”=”[/code]
从而使得你的验证用户名密码的MySQL查询变成:
[code=’sql’]
SELECT * FROM users WHERE username = ‘anyuser’ AND
password = ” OR ”=”
[/code]
由于空串总是等于空串,所以查询条件永真。因此可以看到,MySQL注入的风险还是很大的,因为攻击者可以看到那些本来应该通过登陆才能访问的数据。防止你的网站受到注入式攻击是非常重要的。幸运的是,PHP可以帮助我们防止注入式攻击。
MySQL将会返回表中的所有行,根据你的程序逻辑,可能会导致全部用户都登陆了,因为他们都被匹配到了。现在,大部分情况下,人们会打开magic_quotes_gpc选项(也是PHP的默认情况),这样的配置将会自动添加反斜线,转义全部'(单引号),”(双引号),\(反斜线)和空字符。但事情并不是这么简单就能解决,因为并不是所有的会导致风险的字符都被转义了。PHP有一个函数可以转义全部可能带来多余SQL子句的MySQL字符。这个函数就是mysql_real_escape_string()
使用这个函数的时候要小心,因为你可能已经打开了magic_quotes_gpc选项,这时候使用mysql_real_escape_string()会导致第二次转义。下面这个函数避免了这个问题,首先判断
magic_quotes_gpc选项是否打开,然后再决定是否执行mysql_real_escape_string()
[code=’php’]

[/code]
需要注意的是,quote_smart()函数会自动给字符串加引号,因此你不需要自己加。
另外需要注意,因为不同的MySQL版本对于过滤的要求不一样,mysql_real_escape_string()需要一个MySQL连接才能工作,因此必须第二个参数传入一个MySQL连接。在本机安装MySQL的情况,可以省略,但是如果本机没有装MySQL,或者远程连接到MySQL,则这个参数必不可少,否则mysql_real_escape_string()将返回一个空字符串。
如果你有任何疑问,可以在下面评论,我们一起讨论。

测试环境

  • 系统 : Linux
  • 服务器 : Apache/2.2.8 (Unix) PHP/4.4.7 mod_ssl/2.2.9 OpenSSL/0.9.8c mod_fastcgi/2.4.6 Phusion_Passenger/1.9.1 DAV/2 SVN/1.4.2
  • 内存使用量 : 19.93 MByte
  • MYSQL 版本 : 5.0.45-log
  • SQL 模式 : 沒有设置
  • PHP 版本 : 5.2.6
  • PHP 安全模式 : 关闭
  • PHP 允许来自 URL : 关闭
  • PHP 内存限制 : 90M
  • PHP Max Upload Size : 7M
  • PHP Max Post Size : 8M
  • PHP Max Script Execute Time : 30s
  • PHP Exif 支持 : 是 ( V1.4 )
  • PHP IPTC 支持 : 是
  • PHP XML 支持 : 是

call.php
[code=’php’]
‘;
$a = new A();
echo $a -> a1.’
‘;
echo $a -> b -> b1.’
‘;

$a -> late();
echo $a -> b -> b1.’
‘;

echo ‘B:
‘;
// new B without a parameter, warning.
//$b = new B();
$b = new B(‘p’);
echo $b->b1.’
‘;
// Access to a private property, error.
//echo $b->b2.’
‘;

echo ‘C:
‘;
$c = new C();
?>
[/code]

define.php
[code=’php’]
‘;

// When access to a property,
// must put $this-> in front of them.
$this -> a1 = ‘aa’;
$this -> a2 = 1;
$this -> b = new B(‘not test2’);
}

function late()
{
// Not working this way
//self::b=new B(‘not test3’);

// Works fine
$this -> b = new B(‘not test3’);
}
}

class B
{
var $b1 = ‘nothing’;
private $b2 = 8;

// Can’t overwrites constructor
function B_foo()
{
echo ‘Inside B constructor
‘;
$b1 = ‘test’;
}

// Constrcutor with a parameter.
function B($what)
{
echo ‘Inside B constructor
‘;
$this -> b1 = $what;
}
}

class C extends A
{
var $c1 = 123;

function C()
{
echo ‘Inside C constructor
‘;

// This is OK.
//parent::__construct();

// This is OK too, but not so OO,
// cause sons do not know their father.
parent::A();
}
}
?>
[/code]

输出
[code=’php’]
A:
Inside A constructor
Inside B constructor
aa
not test2
Inside B constructor
not test3

B:
Inside B constructor
p

C:
Inside C constructor
Inside A constructor
Inside B constructor
[/code]

总结
PHP对于面向对象编程(OOP)的支持还是很弱的。

  • 实例化一个类只能在类外面或者类的函数中(包括构造函数),而不能随声明随new。
  • 类的构造函数可以用与类名相同的函数,或者用__construct()。构造函数不能重载,且一旦定义了带有参数的构造函数,实例化该类的时候必须传递参数,否则会报warning。
  • 类的函数中访问本类的各种属性的时候,须使用$this关键字指定本身。在我的环境中(PHP 5.2.6),self::不起作用。
  • 类的成员不声明或者使用var声明,则默认是public成员。
  • 支持继承,使用extends关键字。默认不调用基类构造函数,必须使用parent::__construct();或者parent::A();(其中A是基类的名字)来显式调用基类构造函数。parent::可以使得派生类可以访问基类的成员。protected关键字有效。
  • 实例化类的时候,如果构造函数没有参数,可以简写为new A;

# 本文来自煎蛋(http://jandan.net/),作者为sfufoet。
如果你上次看了All 404,觉得还是不过瘾的话。这里有个网站,它专门收集奇奇怪怪的404页面,而且分门别类,而且还教你怎样玩转 404
404是一个http错误代码,指的是网页不存在。这些错误代码是一个叫Tim Berners-Lee(想扁他?走这里维基百科免穿墙。) 的家伙定义的。他在1990年开发了世界上第一款网页浏览器。http错误代码是在ftp错误代码的基础上演变而来的。
404的含义:第一个4表示客户端出错,也就是服务器对你说:嘿,天堂有路你不走,404无门你偏要闯进来;第二个0表示你把网址打错了;最后表示这个错误代码在4开头的错误代码中排行老四。
关于404还有一个有趣的故事,现实版的哦。Room 404,一般表示的是 4 楼第四个房间。在CERN(欧洲粒子物理研究所)是找不到这个房间的,因为在CERN第一个数4表示的第四栋楼,第二个数表示的不是第几层,后面两个数字合起来表示的办公室的编号,而第四号楼是没有编号为04的办公室的。
你知道正常页面返回的http代码是什么吗?答案是:200,我们看不到这个代码,因为浏览器正在显示服务器发送过来的页面。

#sfufoet:看了之后,觉得Room 404适合拿来拍鬼片。

这里有一些很有创意的404页面。

要到什么时候,我们才能避免为满是bug的旧版本浏览器进行编程?
相信软件从业者早就升级了自己的浏览器,前几天还在阅读器里看到,SEOer倾向于使用Firefox。
IE 6.0的盒模型bug实在让人郁闷不已,尤其是对于追求完美的人来说,简直都不敢打开IE去测试了。
残酷的数据:

[singlepic=15103]

浏览器种类

[singlepic=15102]

Microsoft Internet Explorer用户版本分布

[singlepic=15101]

Mozilla Firefox用户版本分布

FF的大部分用户还在使用危险的2.0.0.14,IE 7.0发布这么长时间了,作为高优先级更新也这么长时间了,还是占有率不高,唉。看来痛苦的hack手段还要持续相当一段时间。

如果你还在使用老版本的浏览器,拜托,快升级吧!