跳槽 跳槽… 生活/$%^&@#幸福….

10月 16, 2006 on 10:54 pm | In 未分类 | No Comments

从去年从国企走人,我就老跟job打交道。
似乎今年到北京以后,我就一直遇到跳槽…
开始是自己。当然,偶们是相当保守的,在年初有也有三四家挖人的吧,不过我刚入IT行业,还不熟,不敢跳,再说我刚从国企走了才几个月,实在不想老换工作。总不能让人说我,从来没有安心工作过吧。
不过后来因为某些事,让我实在不爽。年轻气盛,收东西走人。其实我犹豫了很久,不过既然已经是这样,俺也不能回头,于是在农村老家呆了个把月之后,又到新公司上班了。
上班之后因为人手不齐,马上着手帮着招人,没料想,我本是去找人来上班的,居然碰到两人反过来挖我的,个别条件还特别诱人,哈哈。不过我自小就梦想着做老板,说实话,那一套糊弄员工的法子,鼓舞人心的话,我可能更会说。真的我是很缺钱,不过每个月多拿个千把两千块钱,治标不治本。如果老这样下去,我只能永远站在找工作的人群中间,也许薪水会越来越高,可是肯定会离自己的梦想越来越远。网上有人做噱头,嚷嚷什么年薪十万招什么,说真的,年薪十万很多么?北京一个技术主管不拿十万,太不正常了。有什么好嚷嚷呢(刚刚看了王翌的博客,他也在批)
平时没电话,今儿个晚上一下子来了好几个,最后一个是一个老朋友打来的,不知道怎么了,一个劲儿要我和他一起干。说发现了新大陆,很赚。我只好很委婉告诉他(我认为自己是尽力想委婉一些,他是不是这么认为就不一定了),这玩意儿早不新鲜了,不过最后看他这么难得雅兴,只好对他说,那您继续研究研究,要是确实可以咱俩一起干。。。(汗,这话我对三个哥们儿都说过了,没办法,这些哥们儿要创业是家里出钱,俺可是自己慢慢存血汗钱,对待项目哪能不认真?俺可不指望VC啊天使什么的,俺的MSN签名上说了,长翅膀的只是鸟人,不是天使,因为世上哪可能有天使?) 最后电话打完,我已经是饥肠噜噜。一看表,8:40,这电话真够长的,不过还好我有先见之明,用了免费接听的号。不知这哥们儿手机打长途多少钱一分钟啊。100把块钱的手机费了吧。
话说回来,现在的确是穷疯了,做梦都想钱。不知我的冒险精神还在不在。我会是一个不会放过机会的人吗?

PS:老婆大人又上网了,跟我说正在找工作,她也要跳槽了(汗,这才是主题),因为新制度已经让太多人受不了了,她们的同事都组织起来了拒领工资了(我的工资拖了好几天了,现在要放我面前,不管扣多少我也要了….好像已经扣了我几百块钱的税了吧),好像还要组织什么抗议活动。这年头,教育机构都能商业化,真是奇怪。真希望她能找一个北京这边的工作。两个人在一起,才是幸福。幸福,蒙昧以求的幸福啊。老大还写诗,好像有一首就是写什么幸福的。这人真怪,有个诗人朋友已经够****的了,居然还写诗。也怪,不然人怎么能开专栏?

select id,title from ** 与select * from **的速度测试。

10月 16, 2006 on 3:46 pm | In 未分类 | 1 Comment

老是喜欢用select *,后来自己觉着不行,会影响速度,今天俺 做一个测试看看倒底有多大影响?
数据表结构:

  1. CREATE TABLE `xoops__art_text` (
  2.   `text_id` int(11) NOT NULL auto_increment,
  3.   `art_id` int(11) NOT NULL default '0',
  4.   `text_title` varchar(255) NOT NULL default '',
  5.   `text_body` longblob,
  6.   PRIMARY KEY  (`text_id`),
  7.   KEY `art_id` (`art_id`)
  8. )

测试文件代码:

  1. <style type="text/css">
  2.     div{
  3.     border:1px solid black;
  4.     background-color:#888;
  5.     height:20px;
  6.     margin-left:30px;
  7.     display:inline;
  8.     align:left;
  9.     text-align:right;
  10.     }
  11. </style>   
  12. <?php
  13.     function test(){
  14.     $dbserver="localhost:3306";
  15.     $dbuser="testuser";
  16.     $dbpass="testuser";
  17.     $dbname="test";
  18.     $max=100;
  19.     $connection=mysql_connect($dbserver,$dbuser,$dbpass);
  20.     mysql_select_db($dbname);
  21.    
  22.    
  23.    
  24.     $sqls=array();
  25.     $sqls[]="select text_id,cateid from text limit 100";
  26.     $sqls[]="select text_id,cateid,text_title from text limit 100";
  27.     $sqls[]="select text_id,cateid,text_title,text_body from text limit 100";
  28.    
  29.    
  30.     $time1=new timer();
  31.     $i=0;
  32.     foreach($sqls as $sql)
  33.     {
  34.         $time1->reset();   
  35.         for($j=0;$j<$max;$j++)
  36.         $rs=mysql_query($sql);
  37.         $times[$i]=$time1->tick();
  38.         if($times[$i]>$max) $max=$times[$i];
  39.         $i++;
  40.     }
  41.     print_r($times);
  42.     $texts=array();
  43.     $texts[]="method a:";
  44.     $texts[]="method b:";
  45.     $texts[]="method c:";
  46.    
  47.    
  48.    
  49.     echo "<br/>";
  50.     echo "max:$max;";
  51.     echo "<br/>";
  52.     $i=0;
  53.     foreach($times as $time)
  54.     {
  55.         echo $texts[$i++];
  56.         echo "<div id=bar_$id style='width:".(($time/$max)*780)."px;'>&nbsp;";
  57.         echo $time."ms ";
  58.         echo "</div><br/>";
  59.     }
  60. }
  61. test();
  62. test();
  63. test();
  64. test();
  65. test();
  66. test();
  67. test();
  68. test();
  69.  class timer
  70.  {
  71.      var $_start;
  72.      var $_current;
  73.      function timer()
  74.      {
  75.      /**
  76.      这是记录下开始操作时的时间。
  77.      */
  78.          $this->_start = array_sum(explode(' ', microtime()));
  79.      }
  80.      function tick()
  81.      {
  82.    
  83.          $this->_current = round((array_sum(explode(' ', microtime()))-$this->_start)*1000, 0);
  84.          return $this->_current;
  85.      }
  86.      function reset()
  87.      {
  88.          $this->timer();
  89.      }
  90.  }
  91.  
  92.    
  93.     ?>

测出来的一组结果:

  1. method a: 79ms
  2. method b: 79ms
  3. method c: 1010ms

相比之下,当用了select * 之后,只多取了一个text/longblob类型的字段,整个时间相差了十几倍!
所以,以后写代码,俺 还是要勤快一点,用select id,name,title 而不能用select *.那样太浪费资源了.

如何打造一个您自己的输入法……….

10月 14, 2006 on 1:47 am | In 未分类 | No Comments

今天在公司实在弄得郁闷了,下了一个输入法,可是也很郁闷,因为那个输入法说的是超级牛叉,可是带流氓软件,俺就我喜欢了。
狠狠之余,想,俺也是一个编程人员啊,俺咱个,就不能自己写一个输入法呢?
于是乎,马上行动,到网上找相关资料,呵,网上资料还真我少,不过可惜的是,没有那么让人满意的。
就在俺一米六二大侠要放弃的时候,忽然眼前一亮,看到了一个东西:输入法生成器。这是一个什么东东?难不成是一个可以做我自己的输入法的东东?一米六二在心里想。赶紧去看看去。不过快要上班了,一米大侠只好再等到下班再说。
下班回家,马上迫不及待地打开电脑,看一下这是一个虾米东东。经过一米大侠灰常灰常辛苦地工作,终于知道是怎么回事了。首先要弄一个词库。这个很easy的说啦。一米大侠马上去网上屁颠屁颠地去下了一个。哈,一个三M的大文件,这个词库这下够大了吧。哈哈。
按照说明一看,不对啊,人家要的是汉字在前,编码在后,要按:

阿a
啊a
这样的顺序去排序。可是俺下的是编码在前,汉字在后的,这可不行。得写个程序去换。用什么呢?perl是一个很不错的选择的啊,可是俺没有。VB俺也是相当地熟练啊,可是俺又已经抛弃了这个老朋友。那。。。。 OK,用PHP。俺一米大侠不是一向自称PHP高手吗。好办!
然后又鼓岛了好一阵子(此处略去N多文,总之是用来形容俺做的灰常灰常的辛苦的),俺把这个词库文件整理成了汉字在前编码在后一行行分开的格式了。
现在可以了吧?
一米大侠抱着灰常灰常激动的心,那是何等激动的心情啦,简直就是去见网友MM的那种激动啊(流口水中。。。),打开C:\Program Files\Windows NT\Accessories\imegen.exe,然后打开俺刚才整理好的文件,咦,提示俺没有TEXT字段?
噢,回头看了看教程,文件应该是这样的TXT文件:

  1. [Description]
  2. Name=一米六二输入法
  3. MaxCodes=12
  4. MaxElement=1
  5. UsedCodes=abcdefghijklmnopqrstuvwxyz
  6. WildChar=?
  7. NumRules=3
  8. [Rule]
  9. ca4=p10+p20+p30+p40
  10. ce2=p10+p20
  11. ce3=p10+p20+p30
  12. [Text]
  13. 工a
  14. 式aa
  15. 工aaa
  16. 工aaaa
  17. 工期aaad
  18. 黄花菜aaae
  19. ....

偶的文件中没有前面的[Description]和后面的[Text]。。。偶马上就加上了。
再打开。。。。 哗,生成了,可是没有提示俺录入了多少个记录啊?再看生成的MB文件,哇靠,居然只有1K,肯定有古怪!俺上琢磨啊,下琢磨啊,还是没有琢磨出来。只好打开网上教程给的文件,这一打开不要紧,俺的眼神老是偷偷看人家MM,是早已经火眼金睛了,一下就发现,俺这文件是GB2312编码的,人家是Unicode的!
OK,Now these is the Problem.俺马上用Editplus来转码,就是打开,然后另存为… 存的时候选一下编码为Unicode.
再用Imegen打开,这下就识别了信息,在嘎吱嘎吱地读了….
俺心里可高兴了..
不过没多久,又提示我:0X75*******内存不可读.然后程序就挂了。这个警告俺是常见,VC程序老见到,一般是写程序时用错指针了才会出来。可这imeGen是MS的作品啊,不会这和弱智的!
偶是相当地泄气,后果那是相当地严重。不行,俺可不能就这么投降。
偶先弄一个只有一个字的字库,试试看,可以,生成了输入法。
再加了几行,也可以。这时的输入法虽然也叫一米六牌,可是只有几个字,还是让人不满意的。
于是这次有加了好几百行,也行。
于是几百行几百行地加,终于被偶加到67576行的时候,发现问题了。
哈哈,65576,好像这个数字俺深有印象呢。好像是C语言中整型的边界啊。
那这俺没法子了,人家输入法编辑器最多只能容忍你的词库有这么条记录了。
俺又想了想,还是不爽。俺可以构造一个最精洁的词库啊。于是,去Google一下。
功夫不负有心人,Google没让我们风流倜傥的玉树临风的一米六二失望,没多久就down了三个词库,都很小,加起来刚5万多条记录,比较合适。一个是拼音词库,一个是五笔词库,一个是输英文打汉字的词库。俺马上把这三个文件用php处理了一下,粘到了一起,排序,再生成,哈,It’s Wonderful!
这个输入法,那是灰常灰常地酷啊,您要想打出”文件”两个字,可以输入wenjian,也可以输入”file”直接通过英文得到中文,也可以用五笔,打yygy出”文”字,打wrh出“件”字。
唯独不爽的是,毕竟不是自己编程处理的,所以窗口处理这个没法子插手,不然,嘿嘿……

俺坚持不转载,所以点评一下..一段测试php的Single quote,double quote,heredoc,(s)printf的速度的代码,牛*的很.

10月 12, 2006 on 9:59 pm | In 未分类 | 1 Comment

首先看记时的,我只用了$times这样一个数组,看看人家是这么用的,这就叫差距:

  1. class timer
  2. {
  3. var $_start;
  4. var $_current;
  5. function timer()
  6. {
  7. /**
  8. 这是记录下开始操作时的时间。
  9. */
  10. $this-&gt;_start = array_sum(explode(' ', microtime()));
  11. }
  12. function tick()
  13. {
  14. /**
  15. 记下操作结束时间并算出当前耗用的时间。我只用了time函数,人老外用了microtime,并且用了array_sum(explode(' ', microtime())
  16. 这么一个优雅的写法。让人脸红...
  17. */
  18. $this-&gt;_current = round((array_sum(explode(' ', microtime()))-$this-&gt;_start)*1000, 0);
  19. return $this-&gt;_current;
  20. }
  21. function reset()
  22. {
  23. $this-&gt;timer();
  24. }
  25. }

?>

哈,看出来人家的水平了吧…
我开始测试时也没想到过了客户端浏览器解析HTML时会带来的可用内存容量的变化可能会导致服务器端的速度变化,因此我做了send to buffer下的测试,人家老外就不一样,用了一个超级无比绝*简单的方法解决了:人用了html中的来搞定,把所有输出内容用这个玩意儿包含起来,不就不会让浏览器解析了么?所以以后不要鄙视专写HTML页的人了,人也是相当有用的!
注:我后来也做了测试,结果跟老外的是一样的,俺今天没有泡MM了,看了下代码,还是发现了问题所在了。附:老外测试结果:
(但是很奇怪的是,偶的测试中,单引号终于没有双引号快… 个鸟人.我的系统是win2003.偶用Single Quote 来输出带变量替换的字符串到buffer时,用了超长时间,不知道为什么…)
老外的结果...

一个测试PHP效率的代码,检测Single Quote,Double Quote,HereDoc的效率

10月 11, 2006 on 11:18 pm | In 未分类 | 2 Comments
  1. <?php
  2. /**
  3. * fileoper是一个文件操作类
  4. *
  5. *<pre> 目前有writeover,readover,mkdir三个方法。
  6. *其三个方法均是静态方法。注意mkdir可以
  7. *  逐级地建目录,这是与php自带的mkdir不
  8. * 同的地方。所有对文件的操作都应该通过
  9. * 这个对象进行,这样可以通过改写这个对
  10. * 象实现对文件IO过程的日志。</pre>
  11. *
  12. *@package  authorcn
  13. *@subpackage  common
  14. *@author renlu <helloasp@hotmail.com>
  15. *@link http://www.162cm.com
  16. *@example  FILEOper::writeover("d.txt","hello,this is a test.")
  17. *@name fileoper
  18. */
  19. class fileoper  {
  20. /**
  21. *读取文件内容。
  22. *@param $filename 给定的文件名.
  23. *@return   string(文件内容)
  24. *@access  private
  25. *@static
  26. */
  27.   function readover($filename)
  28. {
  29. if(file_exists($filename))
  30. {
  31. $file=fopen($filename,"r");
  32. flock($file,LOCK_SH);
  33. $filedetail=fread($file,filesize($filename));
  34. fclose($file);
  35. return $filedetail;
  36. }
  37. else
  38. return "";
  39. }
  40. /**
  41. *写入数据函数
  42. *@param  $fileanme  文件名称
  43. *@param  $data  文 件内容
  44. *@param  $method  已经不再用了.
  45. *@access  private
  46. *@static
  47. */
  48.   function writeover($filename,$data,$method="w")
  49. {
  50. $file=fopen($filename,$method);
  51. flock($file,LOCK_EX);
  52. $filedetail=fwrite($file,$data);
  53. fclose($file);
  54. return $filedetail;
  55. }
  56. /**
  57. * 递归建立一个目录
  58. *
  59. * @param string $dirstring 目录名
  60. */
  61.    function mkdir($dirstring)
  62. {
  63. $dirstring=str_replace("\\","/",$dirstring);
  64. $arr=explode("/",$dirstring);
  65. $temparr=array();
  66. for($i=0;$i<sizeof($arr);$i++)
  67. {
  68. $temparr[]=$arr[$i];
  69. $path=implode("\\",$temparr);
  70. if(!is_dir($path))
  71. {
  72. echo $path;
  73. mkdir(implode("\\",$temparr));
  74. }
  75. }
  76. }
  77.   function deletefile($file)
  78. {
  79. unlink($file);
  80. }
  81.   function file_exists($file)
  82. {
  83. return file_exists($file);
  84. }
  85.   function is_file($file)
  86. {
  87. return is_file($file);
  88. }
  89. /**
  90. * 将内容添加到一个文件的结尾
  91. *
  92. * @param string $filename 文件名
  93. * @param string $data 数据
  94. */
  95.   function appendfile($filename,$data)
  96. {
  97. $file=fopen($filename,"a+");
  98. flock($file,LOCK_EX);
  99. $filedetail=fwrite($file,$data);
  100. fclose($file);
  101. return $filedetail;
  102. }
  103. }
  104.  
  105. function returnNull()
  106. {
  107. return "";
  108. }
  109. ob_start("returnNull");
  110. $time[]=time();
  111. $total=1000;
  112. for($i=0;$i<$total;$i++)
  113. {
  114. echo "自在不成人,成人不自在。
  115.     能用钱解决的问题,都不是问题。但没有钱是最大的问题。
  116.     做什么也不做官。
  117.     缺什么都不能缺梦想。
  118.     与成功人共事,朝理想飞奔。
  119.     我肯定会成功的。
  120.     与员工同分享。10亿的百分之一也有1000万,10万的100%也只有10万。所以想办法挣10亿,而不是100%---愿与员工分享,是企员能做大的前提条件。
  121.     结识一批朋友,哪怕目前不能帮你任何忙。
  122.     人无完人,容人之过,知人善任,方可成事。
  123.     做梦也想成功的人,终会成功。
  124.     成大事者,集勇气、运气、耐心、平常心于一身也。
  125.     多走一小步,进步一大步。
  126.     为商者,利至上。然无客户至上,亦无利也。
  127.     先招忠士,再养悍将。
  128.     尝试每天进步一小步。
  129.     制定目标,并努力实现。
  130.     \"晚上我要学会自己做饭\",同\"我要在这个月学会开车\",\"我要在明年升到销售总监的职位\"一样,也是一个目标。目标都应该努力实现。否则,修改您的目标。
  131.     重要的事先做,感兴趣的事是要多花时间做。
  132.     每天总结自己。
  133.     学会奉承你的手下,激励你的手下,引导你的手下,信任你的手下。
  134.     马上动手行动吧。不要拖延。
  135.     做之前先想好,做之后还要想。
  136.     给员工发足够的薪水。发不出薪水,再有前景的企业都留不住人。除非你的员工实在没地方去。
  137.     让员工感觉受到重视。
  138.     目标应该分段去实现。
  139.     要会说,也要做。有的人会做,但也要会说。
  140.     万一有一天你成功了,记住:不是因为你比别人更聪明,更有能力,可能只是你有一批能力不错的员工,还可能只是因为老天瞎了眼,把五百万大奖错发给你了。
  141.     活到老,学到老。想一切人学习,当然尽可能挑更成功的人学习。
  142.     告诉自己:我很愉快。我很有信心做好这件事。
  143.     培养自己的自制能力。
  144.     人往往败给自己。
  145.     学会养一些会偷懒的人。
  146.     要有心机。要学坏。学会拍马屁,学会给人戴高帽子。
  147.     人不可能无缺点。学会利用他人的缺点,总有突破口。
  148.     洞察一切,推测未来。虽然你不是姓诸葛的,也要去学着这么做。";
  149. }
  150. $time[]=time();
  151. for($i=0;$i<$total;$i++)
  152. {
  153. echo '自在不成人,成人不自在。
  154.     能用钱解决的问题,都不是问题。但没有钱是最大的问题。
  155.     做什么也不做官。
  156.     缺什么都不能缺梦想。
  157.     与成功人共事,朝理想飞奔。
  158.     我肯定会成功的。
  159.     与员工同分享。10亿的百分之一也有1000万,10万的100%也只有10万。所以想办法挣10亿,而不是100%---愿与员工分享,是企员能做大的前提条件。
  160.     结识一批朋友,哪怕目前不能帮你任何忙。
  161.     人无完人,容人之过,知人善任,方可成事。
  162.     做梦也想成功的人,终会成功。
  163.     成大事者,集勇气、运气、耐心、平常心于一身也。
  164.     多走一小步,进步一大步。
  165.     为商者,利至上。然无客户至上,亦无利也。
  166.     先招忠士,再养悍将。
  167.     尝试每天进步一小步。
  168.     制定目标,并努力实现。
  169.     "晚上我要学会自己做饭",同"我要在这个月学会开车","我要在明年升到销售总监的职位"一样,也是一个目标。目标都应该努力实现。否则,修改您的目标。
  170.     重要的事先做,感兴趣的事是要多花时间做。
  171.     每天总结自己。
  172.     学会奉承你的手下,激励你的手下,引导你的手下,信任你的手下。
  173.     马上动手行动吧。不要拖延。
  174.     做之前先想好,做之后还要想。
  175.     给员工发足够的薪水。发不出薪水,再有前景的企业都留不住人。除非你的员工实在没地方去。
  176.     让员工感觉受到重视。
  177.     目标应该分段去实现。
  178.     要会说,也要做。有的人会做,但也要会说。
  179.     万一有一天你成功了,记住:不是因为你比别人更聪明,更有能力,可能只是你有一批能力不错的员工,还可能只是因为老天瞎了眼,把五百万大奖错发给你了。
  180.     活到老,学到老。想一切人学习,当然尽可能挑更成功的人学习。
  181.     告诉自己:我很愉快。我很有信心做好这件事。
  182.     培养自己的自制能力。
  183.     人往往败给自己。
  184.     学会养一些会偷懒的人。
  185.     要有心机。要学坏。学会拍马屁,学会给人戴高帽子。
  186.     人不可能无缺点。学会利用他人的缺点,总有突破口。
  187.     洞察一切,推测未来。虽然你不是姓诸葛的,也要去学着这么做。 ';
  188. }
  189. $time[]=time();
  190. for($i=0;$i<$total;$i++)
  191. {
  192.  
  193. print <<< EOT
  194. 自在不成人,成人不自在。
  195.     能用钱解决的问题,都不是问题。但没有钱是最大的问题。
  196.     做什么也不做官。
  197.     缺什么都不能缺梦想。
  198.     与成功人共事,朝理想飞奔。
  199.     我肯定会成功的。
  200.     与员工同分享。10亿的百分之一也有1000万,10万的100%也只有10万。所以想办法挣10亿,而不是100%---愿与员工分享,是企员能做大的前提条件。
  201.     结识一批朋友,哪怕目前不能帮你任何忙。
  202.     人无完人,容人之过,知人善任,方可成事。
  203.     做梦也想成功的人,终会成功。
  204.     成大事者,集勇气、运气、耐心、平常心于一身也。
  205.     多走一小步,进步一大步。
  206.     为商者,利至上。然无客户至上,亦无利也。
  207.     先招忠士,再养悍将。
  208.     尝试每天进步一小步。
  209.     制定目标,并努力实现。
  210.     "晚上我要学会自己做饭",同"我要在这个月学会开车","我要在明年升到销售总监的职位"一样,也是一个目标。目标都应该努力实现。否则,修改您的目标。
  211.     重要的事先做,感兴趣的事是要多花时间做。
  212.     每天总结自己。
  213.     学会奉承你的手下,激励你的手下,引导你的手下,信任你的手下。
  214.     马上动手行动吧。不要拖延。
  215.     做之前先想好,做之后还要想。
  216.     给员工发足够的薪水。发不出薪水,再有前景的企业都留不住人。除非你的员工实在没地方去。
  217.     让员工感觉受到重视。
  218.     目标应该分段去实现。
  219.     要会说,也要做。有的人会做,但也要会说。
  220.     万一有一天你成功了,记住:不是因为你比别人更聪明,更有能力,可能只是你有一批能力不错的员工,还可能只是因为老天瞎了眼,把五百万大奖错发给你了。
  221.     活到老,学到老。想一切人学习,当然尽可能挑更成功的人学习。
  222.     告诉自己:我很愉快。我很有信心做好这件事。
  223.     培养自己的自制能力。
  224.     人往往败给自己。
  225.     学会养一些会偷懒的人。
  226.     要有心机。要学坏。学会拍马屁,学会给人戴高帽子。
  227.     人不可能无缺点。学会利用他人的缺点,总有突破口。
  228.     洞察一切,推测未来。虽然你不是姓诸葛的,也要去学着这么做。
  229. EOT;
  230.  
  231. }
  232. $time[]=time();
  233. for($i=0;$i<$total;$i++)
  234. {
  235. echo sprintf("自在不成人,成人不自在。
  236.     能用钱解决的问题,都不是问题。但没有钱是最大的问题。
  237.     做什么也不做官。
  238.     缺什么都不能缺梦想。
  239.     与成功人共事,朝理想飞奔。
  240.     我肯定会成功的。
  241.     与员工同分享。10亿的百分之一也有1000万,10万的100%也只有10万。所以想办法挣10亿,而不是100%---愿与员工分享,是企员能做大的前提条件。
  242.     结识一批朋友,哪怕目前不能帮你任何忙。
  243.     人无完人,容人之过,知人善任,方可成事。
  244.     做梦也想成功的人,终会成功。
  245.     成大事者,集勇气、运气、耐心、平常心于一身也。
  246.     多走一小步,进步一大步。
  247.     为商者,利至上。然无客户至上,亦无利也。
  248.     先招忠士,再养悍将。
  249.     尝试每天进步一小步。
  250.     制定目标,并努力实现。
  251.     \"晚上我要学会自己做饭\",同\"我要在这个月学会开车\",\"我要在明年升到销售总监的职位\"一样,也是一个目标。目标都应该努力实现。否则,修改您的目标。
  252.     重要的事先做,感兴趣的事是要多花时间做。
  253.     每天总结自己。
  254.     学会奉承你的手下,激励你的手下,引导你的手下,信任你的手下。
  255.     马上动手行动吧。不要拖延。
  256.     做之前先想好,做之后还要想。
  257.     给员工发足够的薪水。发不出薪水,再有前景的企业都留不住人。除非你的员工实在没地方去。
  258.     让员工感觉受到重视。
  259.     目标应该分段去实现。
  260.     要会说,也要做。有的人会做,但也要会说。
  261.     万一有一天你成功了,记住:不是因为你比别人更聪明,更有能力,可能只是你有一批能力不错的员工,还可能只是因为老天瞎了眼,把五百万大奖错发给你了。
  262.     活到老,学到老。想一切人学习,当然尽可能挑更成功的人学习。
  263.     告诉自己:我很愉快。我很有信心做好这件事。
  264.     培养自己的自制能力。
  265.     人往往败给自己。
  266.     学会养一些会偷懒的人。
  267.     要有心机。要学坏。学会拍马屁,学会给人戴高帽子。
  268.     人不可能无缺点。学会利用他人的缺点,总有突破口。
  269.     洞察一切,推测未来。虽然你不是姓诸葛的,也要去学着这么做。 ");
  270. }
  271. $time[]=time();
  272. $str="结果:\n";
  273. $str.=join("\n",$time);
  274.  
  275. fileoper::writeover("do.txt",$str);
  276. ?>

检测结果:
以下分别为几次测试结果:

  1. 结果:
  2. 1160578850
  3. 1160578851
  4. 1160578855
  5. 1160578862
  6. 1160578863

这次双引号用了1秒,单引号用了4秒,hereDoc用了7秒,sprintf用了1秒。

  1. 结果:
  2. 1160578710
  3. 1160578711
  4. 1160578715
  5. 1160578722
  6. 1160578722

这次双引号用了1秒,单引号用了4秒,hereDoc用了7秒,sprintf用了0秒(我想是不到1秒)。

  1. 结果:
  2. 1160578773
  3. 1160578775
  4. 1160578779
  5. 1160578786
  6. 1160578787

这次双引号用了2秒,单引号用了4秒,hereDoc用了7秒,sprintf用了1秒。

三次汇总,是sprintf最快,heredoc最慢。双引号要比单引号快,这个我想不通,不知道为什么?明明双引号还要做替换,为什么却还更慢?
但是根据PHP.net上的结果,应该是单引号最快,双引号其次,heredoc第三,sprintf最慢。是不是我的代码有问题?谁能告诉我一下?

很丢人的说 俺用错了sprintf….. 怪不得那么快.关于sprintf的取消…

我后来查了一下,确实是双引号最快,单引号其次,Heredoc最慢。是我当时记错了。

wordpress的deskor_mywords插件

10月 8, 2006 on 3:14 pm | In 未分类 | No Comments

这个其实很简单,我只是把hello插件拿过来稍稍改了改。
deskor_mywords.php文件需要上传到wp-content/plugins/目录下。内容如下:

  1. <?php
  2. function deskor_mywords() {
  3.     $words = "自在不成人,成人不自在。
  4.     能用钱解决的问题,都不是问题。但没有钱是最大的问题。
  5.     做什么也不做官。
  6.     缺什么都不能缺梦想。
  7.     与成功人共事,朝理想飞奔。
  8.     我肯定会成功的。
  9.     与员工同分享。10亿的百分之一也有1000万,10万的100%也只有10万。所以想办法挣10亿,而不是100%---愿与员工分享,是企员能做大的前提条件。
  10.     结识一批朋友,哪怕目前不能帮你任何忙。
  11.     人无完人,容人之过,知人善任,方可成事。
  12.     做梦也想成功的人,终会成功。
  13.     成大事者,集勇气、运气、耐心、平常心于一身也。
  14.     多走一小步,进步一大步。
  15.     为商者,利至上。然无客户至上,亦无利也。
  16.     先招忠士,再养悍将。
  17.     尝试每天进步一小步。
  18.     制定目标,并努力实现。
  19.     \"晚上我要学会自己做饭\",同\"我要在这个月学会开车\"\"我要在明年升到销售总监的职位\"一样,也是一个目标。目标都应该努力实现。否则,修改您的目标。
  20.     重要的事先做,感兴趣的事是要多花时间做。
  21.     每天总结自己。
  22.     学会奉承你的手下,激励你的手下,引导你的手下,信任你的手下。
  23.     马上动手行动吧。不要拖延。
  24.     做之前先想好,做之后还要想。
  25.     给员工发足够的薪水。发不出薪水,再有前景的企业都留不住人。除非你的员工实在没地方去。
  26.     让员工感觉受到重视。
  27.     目标应该分段去实现。
  28.     要会说,也要做。有的人会做,但也要会说。
  29.     万一有一天你成功了,记住:不是因为你比别人更聪明,更有能力,可能只是你有一批能力不错的员工,还可能只是因为老天瞎了眼,把五百万大奖错发给你了。
  30.     活到老,学到老。想一切人学习,当然尽可能挑更成功的人学习。
  31.     告诉自己:我很愉快。我很有信心做好这件事。
  32.     培养自己的自制能力。
  33.     人往往败给自己。
  34.     学会养一些会偷懒的人。
  35.     要有心机。要学坏。学会拍马屁,学会给人戴高帽子。
  36.     人不可能无缺点。学会利用他人的缺点,总有突破口。
  37.     洞察一切,推测未来。虽然你不是姓诸葛的,也要去学着这么做。";
  38.     $word = explode("\n", $words);
  39.     //echo "hello kitty!";
  40.     //echo $words[];
  41.     echo $word[mt_rand(0,count($word))] ;
  42. }
  43.  
  44.  
  45. ?>

然后在插件管理中激活他。再在主题编辑器中,相应需要显示的地方,写上:

  1. <?php
  2. if(function_exists("deskor_mywords"))
  3. deskor_mywords();
  4. ?>

我的风格是dent-10,所以我改了wp-content/themes/dent-10/index.php这个文件。
ok,大功告成。当然,您可以加一些风格点缀。

一个显示最新评论的wordpress插件

10月 6, 2006 on 12:27 pm | In 未分类 | No Comments

用法:将deskor_comments.php传到wp-contents/plugins目录,然后在插件管理中激活。
在需要显示最新评论的地方,比发themes/你的风格名称/sitebar.php中加:

  1. <?php
  2. /**
  3. 25是调用最新评论的条数。
  4. 先判断一下是否已经包含了插件文件,函数是否存在,免得出错。
  5. */
  6. if(function_exists ("get_deskor_comments"))
  7.  get_deskor_comments(25);
  8. ?>

deskor_comments.php文件的内容:

  1. <?php
  2. /*
  3. Plugin Name: deskor_comments
  4. Plugin URI: http://www.162cm.com
  5. Description: 一个显示最新评论的插件<br/>调用方法:在需要显示的地方写上:<?php get_deskor_deskor_comments(10);?>
  6. Author: renlu xu <helloasp@hotmail.com>
  7. Version: 1.0
  8. Author URI: http://www.162cm.com
  9. */
  10.  
  11.  
  12. function get_deskor_comments($count=10)
  13. {
  14.     global $wpdb;
  15.      $res=$wpdb->get_results("SELECT * FROM $wpdb->comments order by comment_ID  DESC limit ".$count);
  16.      foreach($res as $row)
  17.      {
  18.     
  19.          echo "<li>";
  20.          echo "<a href=\"".get_permalink($row->comment_post_ID)."#comment-".$row->comment_ID."\">[";
  21.          echo $row->comment_author."]says(".xoops_substr($row->comment_content,0,45);
  22.          echo ")</a></li>";
  23.         
  24.      }
  25. }
  26.  
  27.  
  28.  
  29.  
  30.     /**
  31.     截取函数,从xoops中挪过来的.
  32.     */
  33.     function xoops_substr($str, $start, $length, $trimmarker = '...')
  34. {
  35.  
  36.     if (function_exists('mb_internal_encoding') && @mb_internal_encoding(_CHARSET)) {
  37.         $str2 = mb_strcut( $str , $start , $length - strlen( $trimmarker ) );
  38.         return $str2 . ( mb_strlen($str)!=mb_strlen($str2) ? $trimmarker : '' );
  39.     }
  40.     // phppp patch
  41.     $DEP_CHAR=127;
  42.     $pos_st=0;
  43.     $action = false;
  44.     for ( $pos_i = 0; $pos_i < strlen($str); $pos_i++ ) {
  45.         if ( ord( substr( $str, $pos_i, 1) ) > 127 ) {
  46.             $pos_i++;
  47.         }
  48.         if ($pos_i<=$start) {
  49.             $pos_st=$pos_i;
  50.         }
  51.         if ($pos_i>=$pos_st+$length) {
  52.             $action = true;
  53.             break;
  54.         }
  55.     }
  56.     return ($action) ? substr( $str, $pos_st, $pos_i - $pos_st - strlen($trimmarker) ) . $trimmarker : $str;
  57. }
  58.  
  59.  
  60.  
  61. ?>

通过XOOPS模块整合Mu.wordpress的完整方案(一)

10月 6, 2006 on 3:52 am | In 未分类 | No Comments

1.先建一个xoops块:
目录为proxy,以下有
index.php,header.php,footer.php,newblog.php,xoops_version.php
先看xoops_version.php

  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. $modversion['name'] = "博客";
  7. $modversion['version'] = 1.00;
  8. $modversion['description'] = "与wpmu交互的模块";
  9. $modversion['author'] = "";
  10. $modversion['credits'] = "wpMu proxy";
  11. $modversion['help'] = "system.html";
  12. $modversion['license'] = "GPL see LICENSE";
  13. $modversion['official'] = 1;
  14. $modversion['image'] = "images/system_slogo.png";
  15. $modversion['dirname'] = "proxy";
  16.  
  17. $modversion['hasAdmin'] = 1;
  18. $modversion['adminindex'] = "admin.php";
  19. $modversion['adminmenu'] = "menu.php";
  20.  
  21.  
  22. // Templates
  23.  
  24. $modversion['templates'][1]['file'] = 'newblog.html';
  25. $modversion['templates'][1]['description'] = '';
  26.  
  27. $modversion['hasMain'] = 1;
  28.  
  29. ?>

2.思路:
用户在点击菜单时,系统会自动判断用户时否已经拥用了WordpressBlog.如果没有,则会显示设定Wordpress的表单。
文件index.php

  1. <?php
  2. require_once("header.php");
  3. $sql="select * from wp_users where user_login='".$xoopsUser->getVar("uname")."'";
  4. $rs=$xoopsDB->query($sql);
  5. $rows=$xoopsDB->getRowsNum($rs);
  6. if($rows)
  7. {
  8.     require_once("class/xoops_mu.php");
  9.     $xoops_mu=new xoops_mu();
  10.     $xoops_mu->userLogin($xoopsUser->getVar("uname"),md5($xoopsUser->getVar("pass")),time()+365*24*3600,"/wpmu/",".newag.com.cn");
  11.  
  12.     header ("location:http://".$xoopsUser->getVar("uname").".newag.com.cn/wpmu/");
  13. }
  14. else
  15. {
  16.     $xoopsOption["template_main"]="newblog.html";
  17.     $xoopsTpl -> assign("email", $xoopsUser->getVar("email"));
  18. }
  19.    
  20.     require_once("footer.php");
  21.     ?>

3.如果用户已经有了blog,那会自动转向到blog中。
如果没有,是调的一个模板,这个模板询问用户是否要创建一个Wordpress博客。用户选择开通后,会进入newblog.php
newblog.php代码:

  1. <?php
  2.     require_once("header.php");
  3.     if(file_exists("class/sqlgenerator.php"))
  4.         require_once("class/sqlgenerator.php");
  5.     require_once("class/fileoper.php");
  6.    
  7.     $blogtitle=$_POST["blogtitle"];
  8.     $blogdomain=$_POST["blogdomain"];
  9.     $email=$_POST["email"];
  10.  
  11.     require_once("class/xoops_mu.php");
  12.     $xoops_mu=new xoops_mu();
  13.     if($xoops_mu->addNewWPUser($xoopsUser->getVar("uname"),$xoopsUser->getVar("pass"),$xoopsUser->getVar("email"),$xoopsUser->getVar("uname").".newag.com.cn","wpmu","http://".$xoopsUser->getVar("uname").".newag.com.cn/wpmu/",$xoopsUser->getVar("uname")))
  14.     {
  15.         //echo "创建wp用户成功.<br/>";
  16.     }
  17.     if($xoops_mu->CreateBlog($xoopsUser->getVar("uname"),$xoopsUser->getVar("uname").".newag.com.cn",$xoopsUser->getVar("uname"),"/wpmu/"))
  18.     {
  19.         //echo "创建Blog成功.<br/>";
  20.     }
  21.    
  22.     //$xoopsOption["template_main"]="success.html";
  23. //    $xoopsTpl -> assign("uname", $xoopsUser->getVar("uname"));
  24.     header("location:http://".$xoopsUser->getVar("uname").".newag.com.cn/wpmu/");
  25.    
  26.     require_once("footer.php");
  27.     ?>

其实主要还是调用了xoops_mu这个类来进行新博客的创建工作。
经过我的分析,进行了这样一系统工作:
在wp_site,wp_user,wp_signups三个表中插入了相应的行(感觉有点数据冗余,域名都插入了好几次),在wp_usermeta中插入了5行数据.然后建了wp_数字_****这样形式的8个表(前一阵看还是7个,记得当时没有wp_*_options这个表,现在又多了一个表).这一系列工作我就没有去细看,直接用phpmyadmin把sql导出了,然后做了相应一些处理后,直接执行了。
在前面一篇blog的xoops_mu类里。不过注意那个类是没法直接运行的,毕竟只是交流,示例一下WP整合是怎么一个思路。
有兴趣的话,等我完全搞完后发一个资料内传阅一下。
PS:个人感觉mu.wordpress.org上的那个版本有点乱,我开始下了一个nightly版本,不过developer太马虎了,居然出来巨搞笑的BUG,用***.com就可以,用***.com.cn,居然图片,js文件的地址就成了com.cn/***了,所以我放弃了,再下的wordpress.mu.1.0Rc4 好像也改动了一些文件。但改了文件版本号应该改一下。

WP的多用户版本mu.wordpress与XOOPS的整合…

10月 5, 2006 on 7:42 pm | In 未分类 | No Comments

这是自己分离出来的代码,没有自己测试,所以很可能无法正常运行。主要是示例wordpress.mu注册和登陆时的一些操作.

  1. <?php
  2.     /**
  3.     这个wp_应该跟wp里设的前缀是一样的.
  4.     */
  5.    
  6.     define("WP_DB_PREFIX_FORXOOPS","wp_");
  7.     /**
  8.     这是运行WP.mu的主站的域名.
  9.     */
  10.     define("WP_BLOG_HOST_FORXOOPS","