易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
Windows Cache Extension for PHP Beta 发布

Windows Cache Extension for PHP Beta 发布

本则新闻自于Cnbeta.com,可惜我没有IIS 7及更高版本。否则倒可以尝试尝试。。http://www.cnbeta.com/articles/92522.htm

也许您同时喜欢PHP的开发速度和Windows的易用性,但PHP和Windows的配合似乎永远没有Linux好?今天微软终于可以让Windows的PHP用户向Linux下的朋友们炫耀一下:
Windows Cache Extension for PHP Beta 发布,这是一个面向PHP的Windows缓存扩展,用于提高PHP应用程序的速度,而且无需修改任何代码!支持IIS 7.5和IIS 7.0.

  • PHP 5.2 and PHP 5.3 support
  • Configurable file cache
  • Configurable PHP opcode cache
  • Relative file path cache
  • PHP functions to obtain information about the cache status

访问:Windows Cache Extension for PHP

有趣的输入法细节

apple4.us上今天贴出来一篇:

刚才看东西,看到「揭橥」一词,突然想起前两天听说 Snow Leopard 的拼音中添加了一个小功能:如何拼写罕见字。

比如「橥」,如果你不认识这个字,怎么打出来?

Snow Leopard 的拼音提供了这样一种选择:先拆字,打 zhu mu 两字,然后按 shift+ 空格,系统会自动写出「橥」来。

是个不会太多用、但贴心的功能。而我此前没有听说过其它中文的拼音系统有这样的功能(如果有,请指正),为什么?

结果回复纷纷,有人说搜狗就可以。。。由于我是用五笔的,所以我试不出。
回复中说:zhu mu输入后可以显示“橥”,但我试了一下,直接输入 zhu 也能显示,只是要翻页,而且要很多页。我没有用过snow leopard,所以我不知道与它比起来效果如何?再加上,我用的是五笔输入法中的纯拼音输入。或许与拼音输入又不一样。所以我也没有办法测试。。

不过。这样的贴心功能,确实很不错。(如果实在不会打,以前的老金山词霸,有个偏旁部首检字的。直接去里面翻字典就行了。哈哈)

叶金荣的MYSQL优化PPT

叶金荣的MYSQL优化PPT

原来的PPT是在线的,由slideshare提供,网址为:http://www.slideshare.net/secret/IzjEa4qGWlMeLH,不过为了方便大家下载,并使用PPT观看,我还是做了一下本地备份。

因为,我看到了PPT中每个页面下面基本上都有注释,而线上的版本是不存在注释的。所以。尽量还是下载回本地看吧?

使用wps或者office 2007观看。

PHP的命名空间真这么糟糕么?

PHP的命名空间真这么糟糕么?

PHP的命名空间啊。被很多人所诟病,理由就是那个反斜杠。被当成转义符的反斜杠承担起了命名空间的重任。可想而知,他承受的压力有多大。。。

还好,还是有人在支持的,以下就是一篇支持文章,翻译过的。翻译人当然不是我,我要会翻译也就不写程序了。去翻译点文章忽悠人了。

原文如下,来自于:http://www.mikespook.com/index.php/archives/394

几年前(大约应该在02-03年之间,也就是php5刚出来那会)曾经跟朋友讨论过一次关于php的命名空间的问题。当时觉得,php要是能有命名空间,那是多完美的事情啊。
如今,php5.3已经包含了命名空间。但是似乎并没有当年的那种感慨了。大约是旧的系统要迁移,新的系统要重新设计,这个名字空间都有点鸡肋的感觉。看来还要习惯一下才好。
看到这篇文章,觉得说得是有点对的。也不长,就随手翻译出来。翻译后的感觉:作者 超级喜欢使用“However”。
能说明两个问题:

  1. php本身为什么是这样
  2. php的名字空间为什么是这样

作者:Craig Buckler
原文:http://www.sitepoint.com/blogs/2009/08/13/are-php-namespaces-bad/
207ce891440a9ad60d2de6d6a9a47aeb

PHP开发者对于PHP中命名空间的实现,已经变得异常的渴望。当PHP应用开始变得巨大,并且更加复杂的时候,命名空间是解决代码冲突的必要手段。
我最近的一些指南收到了大量关于PHP的命名空间实现的评论。问题主要集中在语法和反斜杠上面。在解决这些问题之前,让我们先来快速回顾一下PHP的历史。

混乱的PHP

像C#和Java这些语言,是被设计和遵循严格的语法标准的。PHP是演化的。最早的版本发布于1995年,版本号3,是面向过程的语言。版本4包含了最基本的面向对象,而版本5提供了合适的标准OOP模型。命名空间在版本5.3被加入其中。

PHP批评者声明说这个语言是混乱的。函数名不一致(例如strpos,str_split,substr),对象处理是无用的,还有一些语法同其他语言相比,不是极其怪诞,就是异乎寻常。

然而,PHP仍然保持着使用最广泛的服务器端开发语言的头把交椅。它的才华主要在下面的长处:

  • 初学者可以从简单的面向过程编程开始。他们无须触及OOP技术仍然可以有所见数。
  • 10年前为PHP 3编写的代码仍然可以运行在PHP 5.3下。可能需要一些微小的调整,但是很少需要大量重写。

PHP代码可能并不总是可爱的、有逻辑的或者优雅的,但是相比其他选择它的开发总是快捷和容易被理解的。

PHP命名空间的实现

不像C#和Java,PHP不得不保持没有名字空间代码的兼容性。这个已经被实现,你可以选择使用或者不使用命名空间。然而,如果你使用PHP 5.3或更高版本,我推荐使用命名空间,即使你在项目中只使用相同的名字。

使用namespace和use作为命名空间操作符看起来很有逻辑。一些开发者可能不同意,但是在这种情况下它们如何命名其实并不重要。

最后,回到反斜杠的问题上。多数批评者人为这是丑陋的,难以阅读,并且在Mac上难以输入。即便如此,我仍然认为它比曾经提议过的两个冒号要好。例如下面的静态方法调用:

// PHP 5.3 beta版静态方法调用
echo ::App::Lib1::MyClass::WhoAmI();
// PHP 5.3正式版静态方法调用
echo \App\Lib1\MyClass::WhoAmI();

第二行可以被快速录入,更少的错误可能,容易阅读,并且容易理解。如果你在字符串之外看到反斜杠,你就知道那一定存在命名空间。

当然,如果PHP使用“.”作为公共方法、静态方法和命名空间会更好。这样可以同Java、C#、JavaScript、Python和许多其他语言一致起来。不幸的是PHP的历史和向下兼容让这一切难以实现。

没有语言是完美的,而PHP更加不会是完美语言中的一员。无论如何,命名空间已经被很好的实现,特别是考虑到它可能产生的限制和问题。我相信你一定会学习并且着迷那个反斜杠的。

相关阅读:

ucapi手册

ucapi手册

搜索ucenter的手册时,发现了ucapi.com网站,上面已经有一些内容了,什么使用手册,官方API,官方例程之类的。
以前下载的都是离线版的chm文件 ,经常会在硬盘里找不到。现在有一个在线版的。方便很多。查起来也很容易

呵呵。也算是推荐一下了。。
如果是用comsenz系统的人,估计都会用到ucenter吧。那么ucapi这样的东西就必须要看了

清除广告代码,为更换博客系统做准备

清除广告代码,为更换博客系统做准备

sablog确实不错。但我的资源耗费相对来说其实并不厉害。所以我想更换到wordpress看看。
当然,等手头的任务完成后换。

当然,可能会象帕兰映像那样,开始搞WP模版并出售(不是我搞,我只提供一个展示的平台)

更改的另一个原因是,我现在的分类有点乱,有些文章我都不知道放在哪个分类下面,改版时我要仔细规划一下。

google notebook。。。

google notebook。。。

在很久前,google notebook还是我有点喜欢的一个小功能,方便(有点方便啦)。然而等到ff升级到3。5后就再不支持了。
郁闷啊。

网上也看了很多文章,都是说要改xpi文件里的内容,他们是这么说的:

首先下载google-notebook.xpi插件包

wget http://dl.google.com/firefox/google-notebook.xpi

将其解压,编辑install.rdf文件

修改第14行 <em:maxVersion>3.0.*</em:maxVersion>

将版本号3.0.*改为3.5.*甚至3.6.*

然后保存,再进行打包,将其重命名为google-notebook.xpi

再在Firefox中打开文件中选中打包后的google-notebook.xpi,接下来的事情就同正常的安装插件一样步骤了

2009.7.11号更新:如上方法最为简便的就是直接用解压缩程序打开然后再双击install.rdf选用记事本(windows)或者gedit(Linux)打开,编辑完成后保存关闭,此时解压缩程序检测到源文件改变自然会提示是否更新,选择是即可。但在Linux下可能需要解决权限问题方可采用此法 (此方法可行性较小,建议直接解压)

2009年8月10号更新:当前Google貌似修改了原xpi文件,进行了一些检测机制,所以在打包之前记得将 META-INF 文件夹删除

还有人说,直接安装Nightly Tester Tools就可以了,因为这个插件可以帮忙强制安装。下载地址为: https://addons.mozilla.org/en-US/firefox/addon/6543

试试吧?

旁注:原来,NTT就是可以自定义一些FF的属性,比如版本号啥的。这样可以让插件以为你现在的平台是3.0以前,所以就能够安装了。。。果然狠

践行极简风格

原文链接,作者:谭佳理。

本文from apple4us

http_imgload.cgi

六年以前,我曾于微软赴任项目经理一职。工作伊始即与上司有一场单独谈话,末了,她问我是否还有疑问。我答:有的,吾等何日方可削减产品中无必要之功能。

她顿陷入惶惑之中,想必这样的问题此前从未有人提及,也从未有人关心,所以不知如何作答罢。

我知其不解,便进一步阐明:其实,功能多并不意味东西好,而是要根据用户的需求来规划,不如考虑何时开始删减吧。

显 然,她被吓坏了,楞像只初探尘世的雏鸟般呆定在了巢里,于是我便就此打住。再后来,我终明白为何她如此困惑,历来项目经理的首要职责便是考虑如何谋划产品 功能,弃顺归逆岂不是砸人饭碗?这亦令我想到曾制作过浩繁冗长的功能列表,并辅以 P1 ,P2 ,P0 等标签来区分优先等级,有时还会用到 P-1 。对的,负一,这种用法仿佛使项目经理自觉重要的正序标签又升一级,即便实际上无甚新意。

若是乏人使用,移去它也无妨。强留其中只会显得突兀,或藏于说明文书一隅,偶现天地,以示自己来过世间。不过上述所言并非我之要旨,只因解决此类问题还不算是最困难的一环。

软 件的日渐臃肿并非全是劣品充斥其中,多数情况下这些功能仅及达标。有些个尚未完成,有些个运作错误,反映在实际中要么用户界面不对,要么内联机制有误,要 么未达用户预期。说白了就是自尊心在作祟,是为了不致落后他人,而令项目经理孳生的那苍白而贫乏的自尊。不仅如此,在作品里还可能掺杂有开发者与测试者为 证明自我价值所做的多余努力,最后,整个团队一齐陷入到这般狂热的情绪之中。

于是,问题到了无法除残去秽的地步,亦让人无瑕眷顾,最后就纷纷烂在了那里。若不想删掉它们,你就得不断修补、再修补。痛苦,且无止境。

这本该可以避免的。将精力放在真正重要东西上,凡事宜简,并专精于少数。如果是新公司,别忙着扩充人马,请运用好已有的雇员,特别是,别找一个只会开会和召集会议的项目经理。善于招纳实干之士,创造之士,也别忘记保持你自身的努力。赋予创新类团队最大的职权,并落至实处。

寡言行而多思辨,终将至丰饶之地。

NFS,Memcached,Tokyo tyrant实现session共享性能测试

NFS,Memcached,Tokyo tyrant实现session共享性能测试

如果不使用passport,那么把用户session存入数据库留给多个程序调用是最方便的手段了。看到这个性能测试方案,想着留下来以备案。
tokyo tyrant现在开始被人推崇了。记得以前ruby也是。为什么这么多的好东西,都是日本人发明的?真是郁闷。。。。

原文如下:

在我负责的某个项目(调查类型的网站),不久前进行了一次推广调查。因为推广邮件是在同一时间发出,所以在5分钟之内,访问量剧增,发生了15000次左右的并发业务操作,整个系统的反映速度降低很明显。

该项目使用3台web服务器,2台mysql数据库。3台web服务器间的session共享通过NFS实现。经过后来调查,访问速度骤降是session并发导致的。
因此,开始考虑其他的session共享方案。考虑到未来能更容易的进行横向扩展,所以计划采用memcached和Tokyo tyrant。
memcached在国内的应用已经很广泛了。Tokyo tyrant是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍,想深入了解的人可以参考:http://blog.s135.com/post/362/。
在论证备选方案的可行性开始之前,先做个压力测试是必须的。
【测试环境】
4台pc安装JMeter模拟client,web服务器一台,一台cache服务器(用来安装NFS服务,Memcached,Tokyo tyrant)。
使用4台pc安装JMeter模拟client的原因是:使用JMETER进行并发测试的时候,单台PC只能发起4100个并发线程(这个不同机器会有不同),因此要做15000的并发测试,必须4*4100.
web服务器上apache设置:MaxClient 256
原来MaxClient 150 的情况下会成为性能瓶颈,改成256之后,apache没有成为瓶颈。针对某个功能做压力测试的时候,务必要做到其他环节不会成为系统贫瘠,不然测试就毫无准确度可言了。

安装NFS, memcached, Tokyo tyrant的cache服务器配置:
CPU: Intel(R) Pentium(R) 4 CPU 2.40GHz
Mem: 256M
HD: 40G
这台机器有点太寒碜了,呵呵,不过据说memcached对硬件配置要求很低,刚好可以验证下。
【测试程序】
因为是测试session的并发性,所以设计成个最简单的session操作流程:
1 page1.php创建session,往session写入1kb的数据,记录$time_start。
2 header至page2.php
3 page.php取得session,记录下$time_end,并计算出时间差$time_end-$time_start。
page1.php代码:
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();

session_start();

$_SESSION['name']='abcdefghjiasdfsadflklklasdlklkjsfdkjkasdflkjsadfkljkljsdfaasdfsafdlklkjsadfkljsdafkljljksdflkflsadflkjlkjsdaflkjdsfaljklsdfajljfsd
sadflsadfljklkjsdfjlksdfaljkfjlkfslkjsadfjlksdflakkljsfdlkjsafdlkjsafdlkjlasdfkjlkjasdfljkasdlkjfsdlkjsdflkjlkasjdfljkasflkjasflkjdsaflkjlksdafklasdljksadkljfjklsdfjklfkjlsafkjlsjkldafljksljksaljklksjfdajklsdfakljsafdkljsafkdljkljsfadjklsafdasdfsfdaabcdefghjiasdfsadflklklasdlklkjsfdkjkasdflkjsadfkljkljsdfaasdfsafdlklkjsadfkljsdafkljljksdflkflsadflkjlkjsdaflkjdsfaljklsdfajljfsd
sadflsadfljklkjsdfjlksdfaljkfjlkfslkjsadfjlksdflakkljsfdlkjsafdlkjsafdlkjlasdfkjlkjasdfljkasdlkjfsdlkjsdflkjlkasjdfljkasflkjasflkjdsaflkjlksdafklasdljksadkljfjklsdfjklfkjlsafkjlsjkldafljksljksaljklksjfdajklsdfakljsafdkljsafkdljkljsfadjklsafdasdfsfdaabcdefghjiasdfsadflklklasdlklkjsfdkjkasdflkjsadfkljkljsdfaasdfsafdlklkjsadfkljsdafkljljksdflkflsadflkjlkjsdaflkjdsfaljklsdfajljfsd
abcdefghjiasdfsadflklklasdlklkjsfdkjkasdflkjsadfkljkljsdfaasdfsafdlklkjsadfkljsdafkljljksdflkflsadflkjlkjsdaflkjdsfaljklsdfajljfsd';


header( "location:./page2.php?sid=".session_id()."&time_start=".urlencode($time_start) );
page2.php代码:
<?php
session_id($_GET['sid']);

function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

session_start();
$name = $_SESSION['name'];

$time_start = urldecode($_GET['time_start']);
$time_end = microtime_float();
$time = ($time_end - $time_start)*1000;

$_file = './log/'. $_GET['sid'] . '.log';
$fp = fopen( $_file, 'a');
@fwrite($fp, $time);
@fclose($fp);

echo "$time Millisecond<br>";
echo $name;
?>
从代码可以看出,最后得到的time值并不是单纯的session操作的时间,session操作的时间会比这个值小。这样设计的原因是,这个值更能反映系统session并发操作的真实状况,但需确保测试环境的网络稳定,因为header函数的关系。

最后,再用perl写个简单的统计程序average.pl:
#!/usr/bin/env perl
my $log_dir = "./log/";
my $total_times = 0;
my $file_nums = 0;
opendir DH, $log_dir or die "无法打开 $log_dir: $!";
foreach $file (readdir DH) {
open LOGFILE, "< $log_dir$file";
while (<LOGFILE>)
{
$total_times = $total_times + $_;
$file_nums = $file_nums + 1;
}
}
print $file_nums . " sessions\n";
print "average time is:" . $total_times/$file_nums . "\n";
closedir DH;

【测试过程说明】
1 使用badboy先生成Jmeter脚本,然后用Jmeter进行分布式并发测试。
2 php对于使用memcached来存储session的实现已经非常简单,只需要进行如下配置:
session.save_handler memcache
session.save_path tcp://192.168.8.2:11211
3 如何使用Tokyo tyrant来存储session呢?因为Tokyo tyrant完全兼容memcached的client,所以配置和memcache几乎完全一样,只要改下IP和端口号就可以了。


【测试结果】
使用NFS共享session:
2000 sessions
average time is:57.2385746240701

3000 sessions
average time is:188.679696798311

4000 sessions
average time is:1139.70507353546

5000 sessions
average time is:5486.23318772304

5000 sessions
average time is:5526.97186436598

5670 sessions(说明:发起了6000个访问,却只成功了5670)
average time is:8324.00726914608

5489 sessions(说明:发起了6000个访问,却只成功了5489)
average time is:9749.52457159197

从上面的结果看,NFS支持并发能力非常有限。根本没有办法支持到15000个session。在6000个session的时候,就会发生session 丢失等未知的状况。即使在5000个session以内,虽然可以完成测试,但性能低下。
当然,这和我使用的NFS服务端的机器配置很低有关,相信优化配置,或者“采用session存储的时候,进行目录分级”可以进行一定程度的优化,但NFS的并发操作确实存在问题。
因为有另一个理由:为了方便测试,我写了个perl程序用来删除session目录下的所有文件。
del_files.pl代码:
#!/usr/bin/env perl
my $log_dir = "./log/";
unlink glob "$log_dir/*.*";

my $session_dir = "./session_tmp/";
unlink glob "$session_dir/*";

my $session_dir2 = "./session_nfs/";
unlink glob "$session_dir2/*";
当这个程序用于删除NFS目录下的session文件时,程序运行的时间明显比用于删除非NFS目录慢非常的多。

使用Memcached共享session:
5000 sessions
average time is:8.691506099701

10000 sessions
average time is:9.07290377616917

15000 sessions
average time is:9.10538846651721

15000 sessions
average time is:9.42796174685197

15000 sessions
average time is:9.43535621960958
从以上结果可以看出,memcached性能很稳定,在5000,10000,15000个session几种情况下,每个流程处理的平均时间稳定在8毫秒到10毫秒之间。

使用Tokyo tyrant共享session:
5000 sessions
average time is:8.92114758491478

10000 sessions
average time is:8.35826919078823

15000 sessions
average time is:10.7764382680262

15000 sessions
average time is:11.4394629955285

15000 sessions
average time is:8.92091128031373

15000 sessions
average time is:10.3760389963784
tokyo tyrant速度也很快。但稳定性不如memcached,可能对机器的配置要求会高些吧,或者我对tokyo tyrant配置不了解也有可能。

从测试结果看,NFS用于存储session时候的并发性能明显不如memcached和tokyo tyrant。memcache和tokyo tyrant还可以进行更大规模的并发测试。但是限于我当前的硬件,没有再进行更大规模的测试。

ok了,Memcached和tokyo tyrant的表现都让人满意,符合预期。至于要选择哪个,就得考虑其他因素了:
1 是 否需要持久存储,Memcached是不支持持久存储的,当然可以考虑使用 Memcached+DB的方式来达到“一定程度上的持久存储”,即Memcached实时保存session,在每隔一段时间(比如1分钟)将 session保存到DB,至于能否接受这种方案,得看业务需求而定了。Memcached和tokyo tyrant的其他差别,可以参考下http://blog.s135.com/post/362/等资料

2 对于这两项技术的掌握程度,整体上说,这两个技术应该都是靠得住,tokyo tyrant在日本也有不少成功的应用。但从国内来看,Memcached应用得较多,使用tokyo tyrant的话,还是要有一定的钻研精神才行。

原文请见:NFS,Memcached,Tokyo tyrant实现session共享性能测试
CSS透明属性详解

CSS透明属性详解

对于CSS的各种特效,在网页上是被用的很多,但,有一些是在IE下独有的,比如滤镜。。。(有专门的程序现在可以处理哦,已经实现。黑黑,当然不是我写的)
以下内容就是帕兰映像对于CSS透明属性进行的解释。他的V7模版最终我还是没有用。准备等这次项目结束后更换到wordpress下,或许,我会请朋友帮做模版和开发插件了。
相信应该有人用吧?

.transparent_class {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}

上面的几个属性分别是:

  • opacity: 0.5; 这是最重要的,因为它是CSS标准.该属性支持Firefox, Safari和 Opera.
  • filter:alpha(opacity=50); 这个是为IE6设的,可取值在0-100,其它三个0到1.
  • -moz-opacity:0.5; 这个是为了支持一些老版本的Mozilla浏览器。
  • -khtml-opacity: 0.5; 这个为了支持一些老版本的Safari浏览器。

CSS透明度继承问题

但CSS的透明属性涉及到一个继承问题,当为父级元素设置透明度后,子元素将自动继承其透明度,比如本站的一个效果:

ksg_xoyo_dips.pdf

即使你又为子元素指定透明度为1也是无效的。

对于子元素是文字的情况,我的解决方法一般是如果多少还能够看清,就不管。另一个折衷的方法是,为文本子元素指定一个相对更深的颜色。也就是说,当 子元素继承透明度后,所得到的文本颜色正好就是你想要的。前提是,这个颜色还有加深的可能,和需要详细的计算颜色和透明度的值。

还有“取消透明度继承”的说法,这个说法是不太准确的,据我个人所知,没有任何取消透明度继承的方法。只能说,当想要实现“多个元素覆盖,只让指定的元素透明”时,可以使用的一些Hack。

搜了一下,找到一个不错的实现这种效果的方法 – 一个关于透明继承度的问题,有兴趣的朋友可以看看。原理很简单,添加一个空元素作为透明层,和不想透明但是要实现覆盖效果的元素为同级元素。父级元素使用position:relative定位; 两个子元素使用position:absolute定位,实现覆盖。

来源于 CSS透明属性详解 | 帕兰映像