命令行下进行svn合并

平常进行SVN操作都直接在命令行下,当然合并也要在命令行下操作,SVN合并的命令是 svn merge,具体的帮助请用 svn merge –help查看。
用实例来说明吧:
主干: /trunk
某分支:/branches/1.02.05
现在要把1.02.05分支上的修改合并到主干上,步骤如下:
1.先查看1.02.05从哪个版本迁出的,当前版本是多少

svn log /branches/1.02.05 --stop-on-copy|vim -

假设得到的迁出版本是1000,当前版本是2000
2.进入主干版本,进行合并操作

cd /trunk
svn merge /branches/1.02.05 -r 999:2000

注意,这里起始版本要我们查询到的起始版本-1
在合并过程中少不了出现冲突的提示,看看哪个版本需要保留,哪个版本要删除,耐心解决。
最后用svn status查看影响了多少个文件,有可能出现有整个文件处于冲突状态,用svn resolved解决,再svn commit -m ‘message’ 提交,提交后注意测试看看有没有BUG。

No Comments

安装php-memcached,libmemcached提示“configure: error: “could not find memcached binary””的解决

先发一下牢骚,这些名字怎么这么接近,甚至是一样的。服务端:memcached,PHP客户端扩展:memcache,memcached,顺便想个别的名字不行吗,我想搜索关于php-memcached的资料,90%以上会搜索到服务端的memcached。

以下是正题。

如果memcached和php-memcached是在同一台机子里运行,一般不会出现这个问题,真出现了,只要加上”with-memcached=你的memcached路径”即可。

我这里碰到的情况是,memcached安装在另外一台机子,上面只有mysql和memcached。需要安装php-memcached的机器是没有memcached的,在安装libmemcached时,就会出现标题的报错,这时,只要从安装有memcached的机器那复制memcached放到本地的/usr/bin下即可顺利通过。

, , ,

No Comments

[转载]50点提高PHP编程效率

这些总结很 实用,希望给来我博客的人一点帮助。来源:Web思想者

1、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

2、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

3、$row[’id’] 的速度是$row[id]的7倍。

4、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

5、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

6、注销那些不用的变量尤其是大数组,以便释放内存。

7、尽量避免使用__get,__set,__autoload。

8、require_once()代价昂贵。
Read the rest of this entry »

No Comments

[转载]从PHP5.2.x迁移到PHP5.3.x

php官方已经不再积极更新php5.2.x了,看到一篇文章讲从php5.2.x升级到php5.3.x的,先做个记录。目前的项目还是基于php5.2.x,时机成熟再迁移吧,毕竟这是劳民伤财的事。
来源:Web思想者论坛,以下为原文:

目录
一、PHP 5.3.x中发生了什么变化
二、向后不兼容的变化
三、新功能
四、Windows支持的变化
五、SAPI modules中的变化
六、PHP 5.3.x中不建议使用的功能
七、PHP 5.3.x中去除不推荐的功能
八、新参数
九、新函数
十、新的stream wrappers
十一、新的类常量
十二、新方法
十三、新扩展
十四、移除的扩展
十五、扩展中的其他变化
十六、新的类
十七、新的全局常量
十八、INI文件handling的变化
十九、其他变化
Read the rest of this entry »

No Comments

[转载]关于团队成员利益选择的思考

最近都在看别人的博客,看到这篇,转过来备忘,来源:博评-Sting的网经

公司组织机构调整,团队职能重新分工,团队核心骨干员工成为各部门竞相游说的焦点,大家通过薪酬、绩效、职位提升等来诱惑和吸引这些关键员工。团队中一个核心骨干员工在摇摆中接受了其他团队难以抗拒的诱惑。在接受前反复征询我的意见。尽管从内心中我希望他留在这个团队,但基于对他未来发展的考虑,只能够建议他:这样重大的抉择,需要自己来做出选择,我和其他人都无法替代你做选择。其实做出选择的原则很简单,只需要基于个人职业发展规划来做选择,看是否符合自己对未来期望,不用考虑太多其他的东西(例如我们的感情、金钱、权力等),有能力钱可以很容易挣回来。一天晚上与他吃饭喝酒,他满眼通红地说:其实在征询意见时候,一直希望我明确说出让他留下,而我一直没有说出这话;他在经济上很需要那笔钱,但觉得愧对于这个团队,在做出选择后,他就得自己无比的势利,打算不干了。劝说了半天,谈到了自己的例子,其实在成长过程中,我们都会犯这样的错误。

工作10多年也经历了众多公司政治的纷争。其实我自身也曾经经历过类似的利益 VS. 忠诚 痛苦选择经历。那正是2002年底左右,从亚信出来,加入了一家做电信计费的系统集成公司。研究生毕业后第一家电信系统集成公司的副总及原来的一帮团队也在这家公司干,因为BOSS/NGOSS巨大的机会又重新聚到了一起,副总因为为人及能力深得老板的信任。大家对于未来也充满了信心,都希望在时机成熟时候一起创业。副总对我无比的信任,也给我提供了很好的平台,这也是我职业发展生涯中能力成长最快的一段时间,从普通程序员蜕变成架构师、管理者。2003 年由于闹非典前前后后的影响,公司接近6、7个月没有项目可做及项目回款,工资也欠了3个月的。而当时我的正处于买房花钱、借钱给家中、结婚的几重压力中,在焦虑中选择了离开,希望能够找一个相对稳定的单位缓解压力。与副总沟通过几次,希望副总能够帮助我选择。副总让我自己做选择,并通过各种途径帮助借钱来解决我最大的问题。最终还是向副总提出离职请求,我看到了他眼中的失望和伤感。我离开几个多月后,副总移民去美国了,其实我一直知道他在美国的女朋友一直在催他去美国,只不过基于对团队成员的信任及承担的责任,他一直没有同意。作为核心团队员工的我离开后,他妥善安置了相关人员就出去了。在出国前的酒桌上,我和他都伤感而哭泣,我为自己的背叛而道歉。他很淡然地说:不存在背叛的问题,忠诚并不是只是愚忠。作为你的领导和朋友,我能够做的就是为你提供好的平台来帮助你成长。正如做BOSS系统必须了解软件需求一样,团队每一个人都有自己的需求,包括成长需求、金钱需求、职位提升需求、成就感等等,如果我作为领导连你们的核心需求都不清楚,那我不可能带好这个团队。在重大事情的抉择上,对你最负责的做法就是尊重你的选择而不能让我的想法干扰你的选择。即使你们基于自己的利益做出了不利于整个团队的选择,只要不是有意伤害其他人的根本利益,那也不存在背叛的问题。如果作为一位领导只是从自己利益出发,而不考虑并满足员工的需求,那我不可能走得如此的远,领导的肚量决定了其高度。

这么多年,我一直牢记和反省这个曾经犯过的教训,正如《硬球》里面说的:“与带你来的人共舞”。但假如在利益和团队之间员工选择了利益,虽然令人遗憾,但不存在所谓的背叛问题。管理的核心目的之一其实就是要在能力能及范围内合理地满足员工的需求,包括对于成长需求、能力提升、金钱利益、成就感等,如果我们不能提供这些,那应当支持员工的选择。只有真正为员工利益着想,才可能打造一个有战斗力的团队。

我仍然相信:心有多大事业就有多大,胸怀有多宽事业就有多广。心胸宽则能容,能容则众归,众归则才聚,才聚则事业强。海纳百川,有容乃大,所以领导者成就大事业必须要有容人、容智、容物、容事的肚量。

周末再把《活法》翻出来看了一遍,通过稻盛和夫自己的经历,让人感到人生中尚有觉得温暖的东西。在职场政治的纷争中,让我还能够坚持信仰善的东西。

No Comments

[转载]为什么我在一个人战斗?

崔凯的博客看到这篇文章,虽然我不是老板,但感同身受,就转过来,跟大家分享,以下是原文。

很多小公司的运营者,可能都会有这样的感受。“为什么只有我一个人在战斗?”
这里不是说他们感受不到团队的温暖,而是团队只能按照他的思路做事,每一步都是计划好的。

没有专门负责产品研究的人员去分析用户、分析产品、分析运营模式。所有的思考都要领导一个人来完成,没有人出谋划策,每个人都像流水线上的机器一样,各人自扫门前雪。指挥他干什么,他就干什么。企业家雇佣的不是最有价值的大脑,而是一双手而已。
Read the rest of this entry »

3 Comments

MySQL的多列索引

项目最近出了点问题,数据库最先出现问题,这也是一般项目的问题,从合作方那要了数据库备份及慢查询记录,发现存在以下二个问题:
1、数据库存在太多垃圾数据,表容量过大;
2、许多查询没有对应的索引;
知道了问题所在,就开始着手优化了,针对第1点,只要及时清理垃圾数据就可以。我们的重点在第二点—-索引,这也是今天我要记录的。

什么是索引?

索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。
所有的MySQL列类型能被索引。在相关的列上的使用索引是改进SELECT操作性能的最好方法。
一个表最多可有16个索引。最大索引长度是256个字节,尽管这可以在编译MySQL时被改变。
对于CHAR和VARCHAR列,你可以索引列的前缀。这更快并且比索引整个列需要较少的磁盘空间。
Read the rest of this entry »

2 Comments

xhprof自定义日志存放目录和文件名

用xhprof来分析PHP代码性能已经一段时间了,之前都按默认的配置,发现存放日志都要在同一个地方,文件名还是很不好识别的,极不方便,今天看了看xhprof的代码,发现这都可以配置的,罪过呀。
先POST一下原来的调用代码:

  1. $xhprof_random = mt_rand();
  2. if (function_exists('xhprof_enable') && $xhprof_random === 1) {
  3.     xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
  4. }
  5.  
  6. define('ROOT', dirname(__FILE__));
  7.  
  8. // Your code here
  9.  
  10. if (function_exists('xhprof_disable') && $xhprof_random === 1) {
  11.     $xhprof_data = xhprof_disable();
  12.     if (file_exists(ROOT . '/xhprof')) {
  13.         require_once ROOT . '/xhprof_lib/utils/xhprof_lib.php';
  14.         require_once ROOT . '/xhprof_lib/utils/xhprof_runs.php';
  15.         $xhprof_runs = new XHProfRuns_Default();
  16.         $xhprof_runs->save_run($xhprof_data, 'xhprof');
  17.     }
  18. }

查看/xhprof_lib/utils/xhprof_runs.php,可以看到在new XHProfRuns_Default()时,可以传一个参数,该参数即是日志存放路径,在调用save_run方法时,可以传第三个参数来指定文件名,这样一来,在分析日志时,通过日志文件名就知道是哪个请求的,方便多了,新的代码:

  1. $xhprof_random = mt_rand();
  2. if (function_exists('xhprof_enable') && $xhprof_random === 1) {
  3.     xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
  4. }
  5.  
  6. define('ROOT', dirname(__FILE__));
  7.  
  8. // Your code here
  9.  
  10. if (function_exists('xhprof_disable') && $xhprof_random === 1) {
  11.     $xhprof_data = xhprof_disable();
  12.     if (file_exists(ROOT . '/xhprof')) {
  13.         require_once ROOT . '/xhprof_lib/utils/xhprof_lib.php';
  14.         require_once ROOT . '/xhprof_lib/utils/xhprof_runs.php';
  15.         $xhprof_runs = new XHProfRuns_Default('../xhprof');
  16.         $file_name = 'gateway_' . $_GET['action'] . '_' . microtime(TRUE);
  17.         $xhprof_runs->save_run($xhprof_data, 'xhprof', $file_name);
  18.     }
  19. }

,

No Comments

[转载]可同时区分IE8、IE7、IE6、Firefox3、Firefox2的CSS hacks

phpchina上看到的,转过来,做个备忘。
可同时区分IE8、IE7、IE6、Firefox3、Firefox2的CSS hacks:

  1. color:/*\**/#00f\9; /* IE8 */
  2. }
  3. .test,
  4. .test:-moz-any-link{
  5.     color:#f60; /* Firefox2 */
  6. }
  7. .test,
  8. .test:default{
  9.     color:#000; /* Firefox3 */
  10.     *color:#f00; /* IE7 */
  11.     _color:#0f0; /* IE6 */
  12. }

可同时区分IE8、IE7、IE6、Firefox的CSS hacks:

  1. .test{
  2.     color:#000; /* Firefox */
  3.     color:/*\**/#00f\9; /* IE8 */
  4.     *color:#f00; /* IE7 */
  5.     _color:#0f0; /* IE6 */
  6. }

关于IE8的hacks:

  1. .test{
  2.     color:/*\**/#00f\9; /* IE8 only */
  3.     color:#00f\9; /* 适用于所有IE版本 */
  4. }

No Comments

php的一个判断值是否等于0的陷阱

先给一段代码:

  1. $a = 'Zero';
  2. $b = 0;
  3. if ($a == $b) {
  4.     echo 'True';
  5. }
  6. else {
  7.     echo 'False';
  8. }

我们预期的结果是False吧,但很遗憾,输出结果是True。
为什么会这样呢?原来是PHP在做字符串和数字进行比较时,会把字符串转为数字,如果字符串首字母不是数字或-时,会被转成0,然后杯具就发生了,解决办法有2种:
1、如果确定2边的值的类型就用===来代替==;
2、如果不确定,可以把在比较前做一下类型转换,确保等式2边的值类型一致。
这个问题是项目组一个同事发现的,做一下记录。

No Comments