刚来到这里要办的几件重要事情之一,就是给宿舍申请网络。学生宿舍的网络是由两个 不同的实体来动作的。我所住的房子是归selfnet──一个1999年由学自己生建立的旨在为宿舍内学生提供Internet接入服务的组织管理和运营 的。当我来到他们的办公室时,第一个引起我注意的就是桌上放着一摞Ubuntu的安装盘(就是现在还在我家积压着一些的那种),供来者免费领取。办公室的 墙壁上还贴着各种关于Linux的宣传海报。这种浓重的Linux氛围,正如我想像的那样。
在后来接触到的很多和计算机相关事情中,都能感受到Linux和开源软件真正的被推崇、被重视:
关于计算机的所有的介绍/向导/说明,都必然有为Linux专门设置的部分内容。学校的VPN接入服务网页上的Linux部分除了涉及与Windows下对应的那个Cisco客户端,还专门为一个开源的VPN客户端的使用方法进行介绍。
校园的主计算机房(Computer Pool)虽然有些让我失望的用的是Windows XP系统(大概也是考虑大众的使用习惯吧,德国Linux普及得再好,Windows的市场占有率还是相对很高的),然而系统上安装的软件很多都是开源或 者免费的。默认浏览器是Mozilla,杀毒软件是Antivir,在开始菜单里你还能看到(g)VIM、Ghostview、Putty等等。不过出乎 我意料的是Office套件学校还是采用了Micro$oft的Office。等到了计算机系的机房,从外往里一看,所有没人用的机器都停留在 Ubuntu默认的登录画面,十分气势。
上周五上了第一次算法的练习课,虽然教授给了一个可以得到VC6的License的网址 ,但希望学生使用GCC来做作业的意思是很明显的,何况习题中还有调用xv的内容。
反观国内,虽然我不是计算机专业的,但从认识的计算机专业的同学、朋友口中,也能 对Linux的受重视程度略知一二。记得一次一个计算机系的同学看我拿着一本关于Linux的书时很惊讶的问我怎么也学这个。当我对计算机系能更多的接触 Linux表示出极大的羡慕时, 她说,我们就是讲操作系统时用过两次,就看看进程、线程什么的……这次在德国,我们班上有个从同济来的学计算机的老兄,据说看过几遍内核的代码,但令我不 解的是,他既不用Linux,对内核以外(或者说书本以外)所有关于Linux的东西也知之甚少。看上去还是个微软的忠实拥趸,几次劝我不要那么反感微 软,“微软还是很出色”的。这两天,大概由于教授的作业,这位仁兄在我看来是有点“硬着头皮”的装了个Ubuntu。装完后由于自己在这方面的知识缺乏, 到处碰壁,然后不断的在MSN上抱怨Linux这不是那不是,大喊“Linux drives me crazy!──大哥,是你自己要用的,没人逼你好不好?
今天先到这里吧,真不知国内什么时候才能形成一个很好的对Linux认识和重视的氛围。
Update [06.05.14]:
昨天在去海德堡的火车上和两位计算机科班出身的同学交流了一下,在听了他们从内核的角度讨论操作系统的问题后,发现自己对Linux的优越性其实在 某种程度上是一种盲目的支持。当他们给我讲解我从来没听说过的“大内核和微内核的优劣”时,我只能说我只是会使用一下Linux罢了。看来有太多的东西要 学习和掌握。不过,在看待Linux和Windows的态度上,我不能说我是中立的,但我也不能说我的同学是客观的,呵呵……
from: ownlinux.cn
delimiter $$
drop procedure if exists prc_page_result $$
create procedure prc_page_result (
in currpage int,
in columns varchar(500),
in tablename varchar(500),
in sCondition varchar(500),
in order_field varchar(100),
in asc_field int,
in primary_field varchar(100),
in pagesize int
)
begin
declare sTemp varchar(1000);
declare sSql varchar(4000);
declare sOrder varchar(1000);
if asc_field = 1 then
set sOrder = concat(' order by ', order_field, ' desc ');
set sTemp = '<(select min';
else
set sOrder = concat(' order by ', order_field, ' asc ');
set sTemp = '>(select max';
end if;
if currpage = 1 then
if sCondition <> '' then
set sSql = concat('select ', columns, ' from ', tablename, ' where ');
set sSql = concat(sSql, sCondition, sOrder, ' limit ?');
else
set sSql = concat('select ', columns, ' from ', tablename, sOrder, ' limit ?');
end if;
else
if sCondition <> '' then
set sSql = concat('select ', columns, ' from ', tablename);
set sSql = concat(sSql, ' where ', sCondition, ' and ', primary_field, sTemp);
set sSql = concat(sSql, '(', primary_field, ')', ' from (select ');
set sSql = concat(sSql, ' ', primary_field, ' from ', tablename, sOrder);
set sSql = concat(sSql, ' limit ', (currpage-1)*pagesize, ') as tabtemp)', sOrder);
set sSql = concat(sSql, ' limit ?');
else
set sSql = concat('select ', columns, ' from ', tablename);
set sSql = concat(sSql, ' where ', primary_field, sTemp);
set sSql = concat(sSql, '(', primary_field, ')', ' from (select ');
set sSql = concat(sSql, ' ', primary_field, ' from ', tablename, sOrder);
set sSql = concat(sSql, ' limit ', (currpage-1)*pagesize, ') as tabtemp)', sOrder);
set sSql = concat(sSql, ' limit ?');
end if;
end if;
set @iPageSize = pagesize;
set @sQuery = sSql;
prepare stmt from @sQuery;
execute stmt using @iPageSize;
end;
$$
delimiter;
可以存储为数据库脚本,然后用命令导入:
mysql -u root -p < pageResult.sql;
调用:call prc_page_result(1, "*", "Tablename", "", "columnname", 1, "PKID", 25);
其他重要的特性:比如在核心函数中对Unicode (统一编码)的支持,这意味着 PHP 6提供了更好的更可靠国际支持。
PHP 已经很流行,被无数的站点使用,被大部分因特网接入商所支持,被Yahoo这样的大网络公司使用着。在即将来临的PHP版本中准备增加一些成功的新特性, 使PHP在某些场合下更易用更安全。你准备好接受 PHP 6 了吗?如果你明天就升级了,你的程序会运行得很好吗?你该怎么办?这篇文章集合了PHP 6的改变,他们中的一些备份移植到版本的PHP v5.x,您目前的脚本可能需要进行一些调整。
如果你现在使用不是PHP,但是一直在考虑它,考虑一下它的新特性。这些特点,从Unicode的核心支持到XML支持,使它更容易为你写的功能填补PHP的应用。
PHP 6 新特性
PHP 6当前已经作为开发者快照使用,所以你可以下载和试用一下这篇文章列出很多特性,这些特性已经在当前的快照中实现了。见资源。
改进 Unicode 支持
在PHP的核心函数中,有很多对Unicode 字符串的支持的改进,这些新特性将产生巨大的影响因为它允许PHP为国际字符提供更多的支持。所以如果一个开发者或者架构师使用不同的语言,例如Java程序语言,是因为它具有超过PHP的国际化支持的话,当支持改进时他会花一点时间来考虑一下PHP。
因为今天你已经可以下载到开发者版本的 PHP V6,你将看到一些功能函数已经支持Unicode字符串。有一个函数清单已经被测试和验证了完全可以处理Unicode,参见资源。
命名空间
命名空间是一种避免因函数或者类之间的命名冲突而使你的函数和类以及方法无法读取,而不使用前缀命名惯例的一种方法。因此,通过使用命名空间,你可以命名别人可能已经使用的类名,而不用担心在运行时会出错。表一提供了一个在PHP中使用命名空间的示例。
您不用在源代码中做更新或更改,因为你写的任何PHP代码可以不包含命名空间而运行得很好。因为命名空间特性似乎会移植到PHP 5.3 X中,如果它可以使用,您可以在自己的程序中引用命名空间。
表一,命名空间示例
<?php
// I'm not sure why I would implement my own XMLWriter, but at least
// the name of this one won't collide with the one built in to PHP
namespace NathanAGood;
class XMLWriter
{
// Implementation here...
}
$writer = new NathanAGood::XMLWriter();
?>
Web 2.0 特性
依赖于你怎么使用PHP和你现在脚本的是什么样子的,现在的语言和语法差异,可能会或者不会最大程度的影响下面一些特性,这是指那些直接让你引用的Web 2.0功能到你的PHP应用程序。
SOAP
SOAP 是一种网络服务“说话”的协议,并且支持不少其他语言,例如Java和微软的.NET,虽然有其他的方法来驱动和使用网络服务,比如 表象化状态转变(Representational State Transfer )REST,SOAP仍然在使不同平台具有可操作性中是最常用的。此外,SOAP在PHP扩展和PEAR库中使用,SOAP在PHP中默认是不支持的,因 此你启用这个扩展或者叫你的ISP启用。此外,PEAR包允许你建立SOAP客户端和服务器,如SOAP包。
如果你改变了默认设置,SOAP将会在PHP 6中启用。这个扩展将提供你很容易的的实现SOAP客户端和SOAP服务,允许你编写的应用提供使用或者网络服务。
如果SOAP扩展是默认设置,那就意味着你不能在PHP中设置它们,如果您开发的PHP应用程序并且它们发布到一个ISP服务器上,您可能需要检查一下你的ISP,以验证SOAP并启用为他们升级。
XML
在PHP 5.1中XMLReader 和XMLWriter已经变成PHP核心的一部分,这使你工作起来更轻松如果在你的PHP程序中需要使用到XML的话。和SOAP扩展一样,如果你使用SOAP或者XML这是个好消息因为PHP 6比已经出炉的PHP4 更适合你。
被删除的东西
除 了具有的一些新功能,PHP 6引擎将删除一些在前面版本中已经有的功能。大部分这些功能,如register_globals 和safe_mode 在目前的PHP中被视为“破的”。因为他们可能会暴露一些安全风险。PHP在努力的清除中,在下一个版本中这些将从PHP中删除或者废弃。反对者认为大部 分ISP或者企业会保留现在的脚本因为升级到PHP6会破坏现在的的脚本,但是支持者认为很高兴看到PHP团队修补了这些漏洞,并且提供了一个干净,安全 的运行工具。
将从PHP删除的功能有:
magic_quotes register_globals register_long_arrays safe_mode
更详细情况请看这里:IBM 社区
译者Blog:Open ABC
下载地址:
安装介质






