黄良懿的博客

总有一些美好,期待着我们去发现
RSS 图标 Email 图标 首页图标
  • 尝试用Windows Live Writer发文

    发表于 2010年03月23日 黄良懿 4 条评论

    听说Live Writer的名头已久,正好今天在PC上重装MSN,顺便试了一下,确实挺不错,可以直接在客户端编辑发文不用再跟在线编辑器死磕,文章分类和标签这两个最重要的属性也可以直接设置,没写完的保存本地草稿或远程草稿都可以。

    配置起来非常简单,现在WordPress后台的“撰写选项”中启用XML-RPC发布功能,然后直接开启Live Writer,选择其他日志类型,并输入WordPress首页地址、用户名、密码即可。

    Word一脉相传的编辑方式,直接拖拽添加图片、链接等,从Excel里直接粘贴表格等等都是熟悉而亲切的使用习惯,下面是来自Excel的表格和直接拖拽进来的图片:

    Name Age Credits
    Richie 29 12
    Tom 22 7

    Blue hills

    这里有一个直接从IE里拖过来的链接,猛击进入Live Writer的扩展插件:扩展程序,不过太少了点。

    相关日志:


  • 改用php-fpm+eAcclerator替代spawn-fcgi+xcache跑wordpress

    发表于 2010年03月16日 黄良懿 没有评论

    VPS上一直用的是Nginx + PHP FastCGI,其中FastCGI是用Lighttpd的spawn-fcgi来做管理,稳定性上面倒没什么可挑剔的,一直很正常,就是有一点很不好,三到五天就会出现一次PHP把内存吃光的情况。 VPS是384M的内存,1G+的交换文件,理论上5个Nginx进程加上8个PHP FastCGI是不该超出的,但连虚拟内存都吃光的情况还真出现过。 每次都是ssh连上以后盲敲指令killall php-cgi解决。碰了两三次后索性写了段shell到crontab里缓解此问题,具体作用是每小时的13分和43分检查并杀掉内存占用过多的处于休眠状态的PHP FastCGI进程:

    13,43 * * * * ps aux|grep php-cgi|awk '(($5>150000||$6>60000)&&$8=="S"){print $2}'|xargs kill -9

    查了php.ini中内存限制的配置和xcache的相关配置,算下来的最大内存总占用应该是在500m内的,这还是因为XCache未能实现opcode的共享存储,导致重复占用的缘故。 这里要特别提一下,这个问题是因为内存地址映射关系在多进程中的复杂性所造成的,XCache和APC都没解决,最近刚发现最新版本的eAcclerator已解决了此问题,这次也一起更换了opcode cache模块。

    一开始怀疑是PHP自身的内存管理问题,但一来公司的mod_php同版本代码并未出现该问题,另外同VPS上另一个用户所启动的PHP FastCGI进程却也并未出现该问题。 经粗略的排查,发现当大量使用WordPress中后台的各类功能后内存占用会急剧狂飙,但未安装任何插件的干净的WordPress则无此问题。 由于机器上不止一份WordPress实例,而且插件众多,难以一一排查,只好从PHP自身来考虑解决此问题。

    首先尝试的是将PHP替换为5.2.13和5.3.2分别测试过,不过问题依旧。倒是用5.2.13换了php-fpm来启动后解决了该问题。
    安装方法很简单,在php源码目录下执行以下指令:

    wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.13.diff.gz
    gzip -dc php-5.2.13-fpm-0.5.13.diff.gz | patch -p1

    随后在原来的配置参数后面加上--enable-fpm重新make && make install就可以了。

     

    更新php后也用eAccelerator替换掉了XCache,随后查看运行状况,问题确实得到了解决,虽然不确定到底是由于php-fpm还是eAccelerator,但可以确定的是eAccelerator在FastCGI的模式下,其opcode cache确实可以通过shm共享。

    更换php-fpm带来的也不仅仅是这样的好处,当你升级php或者是更改php.ini时,它可以平滑的关闭老进程并启动新进程使服务持续可用,此外还可以根据目前的服务压力,动态的增加或者减少PHP FastCGI进程的数量。 更多的信息可以猛击这里(php-fpm文档中文翻译),英文好的同学则建议猛击这里查看原文

     

    使用过程中多次刷新查看phpinfo,并利用空延迟脚本使执行落在不同的php-cgi进程上,证实其缓存确实是放在共享内存中。

    附上一张eAccelerator的使用情况截图:

    eaccelerator

     

    相关日志:


  • 解决Zend Optimizer无法加载及与eAccelerator的冲突

    发表于 2010年03月16日 黄良懿 没有评论

    在VPS上下载了3.3.9的Zend Optimizer,找说明安装后出现错误:

    cannot restore segment prot after reloc: Permission denied

    找了下,问题是出在SELinux上,关闭SELinux即可解决:

    1. 修改/etc/sysconfig/selinux,修改为SELINUX=disabled
    2. 执行/usr/sbin/setenforce 0立即关闭,且无需重启系统

    如果你不希望关闭SELinux的话,也可以

    chcon -t shlib_t ZendOptimizer.so

    chcon -t texrel_shlib_t ZendOptimizer.so

     

    操作后php-fpm start启动,一切正常。 但ShopEx网站返回502错误,修改php.ini输出错误日志查看后发现访问Zend Guard做了encode的php文件均无法正常执行,错误是Connection reset,但命令行查看php -v时显示Zend Optimizer已加载,phpinfo()也显示正常。
     反复尝试多次后发现是装载次序的问题,修改php.ini,使eAccelerator在Zend Optimizer之前装入即可

    相关日志:


  • 如何用两个立方体表示所有日子的组合

    发表于 2010年02月4日 黄良懿 4 条评论

    今天碰到一个很有趣的问题,如何用两个立体表示所有的日子(不需要年和月)。

    一开始就考虑123是可能需要重复出现的,而12种组合里扣除3个以后无法表示10个数字组合,故此路不通。 而且这问题应该没这么简单吧?

    花了下空间图,结果发现了一个很取巧的方法,其中一个立方体上写上456789,另外一个则是310221。通过仔细的组合,其实能够让第二个“奇怪”的立方体表示出01、02、03、10、11、12、20、21、22、30、31,其他也就不用多说了。思考的时候也考虑过把数字颠倒或者是用LED字体,通过两个立方体组合显示等,不过都没办法解决。

     

    啊哈,当然没那么简单。不能这么的取巧,不同的数字要分步在两个立方体上。  又再考虑了下,其实3在重复组合中是个特例,仅需要30和31 。 所以,只要让3和0分开,两个立方体上都有1和2,那么就刚好可以匹配所有选择。 不过这个答案还是不对,因为无法表现01-09的所有组合。 0也是个特殊化的数字,没有00,然而需要从1-9并没有办法减少对数字的需求,所以我面对质疑还是肯定的说,如果需要表现01-09,则应该是无解的,因为10个基本数字外仅容许两个冗余,1和2已经把名额用光了。 嗯,当然,如果我们说的立体不是正六面体的话,那自然是很简单的啦,哈。

     

    好吧,我也承认这个只是取巧,不可能采用。  回到电脑前查了一下,发现这个问题其实还是有解的,恰恰是我思考中考虑过的,通过字体来“欺诈”,呵呵,很多字体特别是LED字体中的6和9颠倒过来是一样的,可以省出一个空格,只要这个空格放上0并且和之前那个0不在同一个立方体上就可以做到了。 当然,这就不再是数学的解法了。

     

    有些时候,完成一件事情所需要的条件我们都具备或者是不费力的拥有,却无法得出一个最优的答案。 事实上我考虑这个问题的时候一开始并没有限于数学领域,否则也不会有相邻组合的取巧做法和非正六面体组合的想法,然而得出最接近真相的方法是数学方法,于是在得到需要01-09的时候也自然的用了数学方法准确的证明此题无解。

    记录下来,提醒自己不要钻进一个胡同后,蹲在胡同里考虑所有前面巷子转弯的组合就断言罗马不可达,不要忘了递归算法能解决问题最重要的办法就是算不出来就回溯,换个方法再算!

    相关日志:


  • MyEclipse 7.5下如何安装Aptana

    发表于 2010年01月21日 黄良懿 1 条评论

    Aptana是一个基于Eclipse的开源Web开发环境,其JavaScript支持相当出色。Aptana包括了HTML、JavaScript、CSS的代码建议功能,JavaScript 自定函数也都会出现在代码建议中,还支持代码语法错误提示。

    除此之外,Aptana还支持十几个热门AJAX框架的代码建议:JQueryDojoYahoo UIPrototypeRicoscript.aculo.us等。

    JavaScript调试功能也是其特色之一,目前仅支持Firefox,想要IE的调试支持则需要付费。

    在MyEclipse 7.5下的安装十分不顺利,查了不少资料均提及MyEclipse 7.5的插件方面的支持做了调整,反正从Update site安装、在MyEclipse默认的下载选择中安装、下载安装包以后Add Archive、下载后解压到common目录下等等方法都无法正确安装Aptana,而link文件的方法MyEclipse 7.5下貌似也不再支持(至少我把文件放在MyEclipse和Common下面都没有任何反应)。

    有一些文章指出7.5的插件安装需要通过修改%MYECLIPSE_HOME%MyEclipse 7.5configurationorg.eclipse.equinox.simpleconfigurato下的bundles.info加入新插件信息才能解决,无奈之下打开此文件,里面的内容节选如下:

    com.genuitec.eclipse.aspphp.core,7.5.0.zmyeclipse75020090612,file:e:softGenuitecCommonpluginscom.genuitec.eclipse.aspphp.core_7.5.0.zmyeclipse75020090612.jar,4,false

    com.genuitec.eclipse.aspphp.ui,7.5.0.zmyeclipse75020090612,file:e:softGenuitecCommonpluginscom.genuitec.eclipse.aspphp.ui_7.5.0.zmyeclipse75020090612.jar,4,false

    com.genuitec.eclipse.ast.deploy.core,7.5.0.zmyeclipse75020090612,file:e:softGenuitecCommonpluginscom.genuitec.eclipse.ast.deploy.core_7.5.0.zmyeclipse75020090612,4,false

    com.genuitec.eclipse.browser,7.5.0.zmyeclipse75020090612,file:e:softGenuitecCommonpluginscom.genuitec.eclipse.browser_7.5.0.zmyeclipse75020090612.jar,4,false

     

    略一看就知道,大致的规则是将文件名的第一个下划线之前的内容放在最前面,紧跟一个逗号,随后是下划线以后的内容,继续逗号,文件的URI,最后的4,false貌似是固定的,至少绝大部分文件都是如此。

    试着将Aptana下的文件列表生成类似的条目并加到此文件中,并重启MyEclipse,Bingo,果然看到了Aptana的欢迎页面。

    最后贴几张图和加至文件中的条目列表:

    HTML的语法建议

    阅读全文 »

    相关日志:

    • 没有相关的日志

  • 给某网站Windows主机下Discuz!论坛的一些优化建议

    发表于 2010年01月6日 黄良懿 2 条评论

    近期由于网络方面的问题,该网站双线之一被和谐,故此另外一条线路承受了过多的压力,时不时会出现以下的错误:

    Discuz出错信息

    看到之后第一反应是调整MySQL连接数,这个数字可以通过show variables like 'max_connections';获得,并在my.cnf中修改。(根据错误的出现频度,下面例子中的数字建议修改为服务器上当前设置的2倍为宜)

    [mysqld]
    set-variable=max_connections=500

     

     

     

    阅读全文 »

    相关日志:


  • PHP实现类似tail命令读取最后n行的方法

    发表于 2010年01月1日 黄良懿 没有评论

    需要分析日志时tail命令可是常需要用到的,可惜php内并没有提供类似的方法,所以自己实现了一个。 调用方式为tail($filename, $rows),每次默认读取1024字节作为缓冲,返回字符串数组,文件尾的行靠前(这里的行为和tail有所区别,如果需要以原序返回的请自行调用array_reverse)。 代码如下:

    /**
     * 读取文件最后若干行的数据
     *
     * @param string $filename
     * 文件名
     * @param string $rows
     * 行数
     * @param string $size
     * 内存缓冲区大小,默认为1024字节
     * @param string $ending
     * 行尾分隔符,默认为\n
     * @return array
     * 读取成功则返回字符串数组,文件尾的字符串靠前,读取失败则返回false
     */
    function tail($filename, $rows, $size = 1024, $ending = "\n") {
    	$ret = false;
    	if ($rows > 0 && $fp = fopen($filename, 'rb')) {
    		$pos = filesize($filename);
    		$ret = array();
    		flock($fp, LOCK_SH); 
    
    		$data = '';
    		$found = 0;
    		while ($found < $rows) {
    			$pos = $pos - $size;
    			if ($pos < 0) {
    				$size = 1024 + $pos;
    				$pos = 0;
    			}
    			fseek($fp, $pos, SEEK_SET);
    			$data = fread($fp, $size) . $data;
    			$tmp = explode($ending, $data);
    			$count = count($tmp);
    			for ($i = 1; $i < $count; $i++) {
    				$ret[] = $tmp[$count - $i];
    				$found++;
    				if ($found >= $rows) {
    					break;
    				}
    			}
    			$data = $tmp[0];
    			if ($pos <= 0) {
    				break;
    			}
    		}
    		flock($fp, LOCK_UN);
    		fclose($fp);
    	}
    	return $ret;
    }
    

    相关日志:


  • 家常食谱:白斩鸡+鸡汤

    发表于 2009年12月9日 黄良懿 9 条评论

    诸多朋友知道我是广东人,往往在感叹完广东人真会吃之余好奇的问问广东靓汤怎么煲,QQ、MSN、手机以及当面咨询都有过,抽空整理了下我常做的一个拿手招牌菜和大家分享下: 白斩鸡+鸡汤。

    当然,虽说是拿手菜,其实做法也挺简单,味道倒是吃过的都说不错。 而且,大快朵颐之余鸡汤还能缓解感冒的症状以及改善人体的免疫机能,所以一直是秋冬令进补的首选之一。

    上海有诸多主打白斩鸡的店面,比较具备代表性的自然便是“振鼎鸡”,不过身为广东人,一定要强调下其白斩鸡绝非粤系风味。须知正宗的广东白斩鸡乃是热菜,店家绝活的调料亦不会是江浙沪系的甜味,而是咸的。 强调这并非冷盘的原因是地道的白斩鸡需得肉鲜嫩滑,在鸡腿骨内仍有鲜红的骨髓,鸡肉却熟透之时剁之上桌为佳。  这次说的这个做法,比较适合家里2到4人食用,既有鲜嫩的白斩鸡吃,又有鸡汤喝,不亦说乎。 要是鸡没被屠宰场的人蒙走鸡肠鸡肫鸡心鸡油,还可以多炒个青椒鸡杂,美味无比。

     

    好了,言归正传,先说选材。 前面提过,白斩鸡吃的是嫩滑,故而选材自是以肥瘦适中的草鸡、阉鸡(白斩鸡是否美味的第一大关键)为宜,乌骨鸡次之,老母鸡则建议纯炖鸡汤。 配料方面推荐的是红枣和枸杞,其作用是补血养颜、保健强身、延缓衰老、增强性功能。 这个选择大家往往日常都很容易见到,原因嘛看功效就知道了,谁喝谁知道~~ 当归、黄芪、党参等也是常见配料,大家视家人和时令情况选择吧,其功能Google便知。 用量方面,红枣大概放一手抓的量,枸杞放手心平摊一层左右的量则其味道不会太重,偏好其甜味或是想补身的可以多放一些。

    阅读全文 »

    相关日志:


  • 转:健身计划

    发表于 2009年12月2日 黄良懿 3 条评论

    呆蚂蚁:这是一份给标准体重在69公斤人士提供的增肌用健身计划,仅供大家参考。

    饮食方面:只有摄入的能量大于消耗的能量,人才能变壮。因此,消瘦者 的膳食调配一定要合理、多样,不可偏食。平时除食用富含动物性蛋白质 的肉、蛋、禽类外,还要适当多吃一些豆制品及赤豆、百合、蔬菜、瓜果 等。 在摄入足够蛋白质的情况下,宜多进食一些含脂肪、碳水化合(即 淀粉、糖类等)较丰富的食物,使瘦弱者体态健壮起来。

    训练计划参考:

    一:心肺功能训练计划: (有利于提高你的消化吸收)

    每周3-4次,每次20-25分种,心率控制在(220-你的年龄)x80%左右

    二:力量训练计划参考:(隔天训练)(计划要根据自身情况逐渐调整)

    阅读全文 »

    相关日志:


  • 转:人体各肌肉群的锻炼方法

    发表于 2009年12月2日 黄良懿 没有评论

    以下锻炼方法仅供参考,具体方法依个人情况而定。

    肱二头肌

    上臂前面凸起的就是肱二头肌。基本动作:1、两臂弯举,此动作可站也可坐,正反握哑铃,杠铃多种方法。两上臂必须紧帖两腋,利用肱二头肌收缩的力量使两手向胸前尽力弯起。2、反手窄握引体向上,也是利用肱二头肌收缩的力量达到锻炼的目的。(练六组,每组12-15次)。

     

    肱三头肌

    上臂后面凸起的就是肱三头肌。练好肱三头肌能使你的手臂肌肉线条清晰。基本动作:1、有正反握两个动作,脸朝上平躺在宽凳上,双手与肩同宽,紧握杠铃上举,然后以肘关节为支点,慢慢的向后弯曲到头顶,然后用肱三头肌的收缩力把杠铃恢复到原位。(练六组,每组12-15次)。

     

    三角肌

    肩膀上的肌肉就是三角肌,分成前束,中束,后束。基本动作:1、前束,手握哑铃或杠铃在身前,握距与肩同宽,用力抬起手臂前平举,使手臂与身体成90度(练六组,每组12-15次)。2、中束,手握哑铃在身旁,把手臂侧平举从两侧抬起至头顶。(练六组,每组12-15次)。3、后束,两手握杠铃比肩同宽,把杠铃放在颈后,向上伸臂推起杠铃,然后缓缓屈臂,将杠铃置于颈后肩部原位。(练六组,每组12-15次)。

     

    阅读全文 »

    相关日志: