个性化你的Apache

今天晚上把Apache2.2.4编译了一遍又一遍,颇有味道。若有同好者,请看此文。

1. apr.
apr=Apache portable runtime, official website here: http://apr.apache.org
View Informations:

C++代码
  1. # path/to/httpd/bin/httpd -V  

It will show something like this:

C++代码
  1. Server version: Apache/2.2.4 (UNIX/EAXI.COM)  
  2. Server built:   Aug 22 2007 12:28:35  
  3. Server’s Module Magic Number: 20051115:4  
  4. Server loaded:  APR 1.2.8-dev, APR-Util 1.2.8  
  5. Compiled using: APR 1.2.8-dev, APR-Util 1.2.8  
  6. Architecture:   32-bit  
  7. Server MPM:     Prefork  
  8.   threaded:     no  
  9.     forked:     yes (variable process count)  
  10. Server compiled with….  
  11.  -D APACHE_MPM_DIR="server/mpm/prefork"  
  12.  -D APR_HAS_SENDFILE  
  13.  -D APR_HAS_MMAP  
  14.  -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)  
  15.  -D APR_USE_SYSVSEM_SERIALIZE  
  16.  -D APR_USE_PTHREAD_SERIALIZE  
  17.  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT  
  18.  -D APR_HAS_OTHER_CHILD  
  19.  -D AP_HAVE_RELIABLE_PIPED_LOGS  
  20.  -D DYNAMIC_MODULE_LIMIT=128  
  21.  -D HTTPD_ROOT="/usr/local//httpd/"  
  22.  -D SUEXEC_BIN="/usr/local//httpd//bin/suexec"  
  23.  -D DEFAULT_PIDLOG="logs/httpd.pid"  
  24.  -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"  
  25.  -D DEFAULT_LOCKFILE="logs/accept.lock"  
  26.  -D DEFAULT_ERRORLOG="logs/error_log"  
  27.  -D AP_TYPES_CONFIG_FILE="conf/mime.types"  
  28.  -D SERVER_CONFIG_FILE="conf/httpd.conf"  

apr version informations at: path/to/httpd-src/srclib/apr/include/apr_version.h

2. Operating System Information
It will be displayed at error pages, httpd -V informations list.
os info at path/to/httpd-src/os/

3. Apache release
It will be displayed at error pages, httpd -V informations list.
Apache release informations defined at path/to/httpd-src/include/ap_release.h

王通和admin5的SEO讲课内容

大家要学习SEO,首先就要把SEO看的简单一点,其实SEO真的没有大家想象的那么复杂,不过你看了很多SEO资料后,你学习的不好
。主要是因为几个原因:
1、不认真,太多细节没有注意到
2、实践少,没有多多实践和总结
因为今天群的朋友基础不一样,所以我从最基础开始讲
SEO是Search Engine Optimization的缩写,即“搜索引擎优化”。而从事这方面工作的就是Search Engine Optimizer,即“搜索
引擎优化师”。
SEO是专门研究各大搜索引擎排名的技术,是数百种低成本网站推广策略中最常用和长期有效的营销手段之一。
既然是研究各大搜索引擎排名的技术,我们要考虑的第一个问题就是:
全球的搜索引擎都喜欢把什么样的网站,放到搜索结果的自然排名前面
答案非常简单: 肯定是优秀的网站!
那么,什么样的网站才是优秀的网站呢?
1、内容是用户需要的内容
2、网站的各方面设计细节要符合搜索引擎的标准? 

如果第一点你做不好,你把排名搞上去了,那叫作弊,搜索引擎不喜欢。你的排名就长久不了
如果你的第一点做的很好,但是你的网站技术的各方面细节不符合搜索引擎的口味,依然获得不了好的排名。
但是,一单你经过调整了,内容好,又把网站优化的很合理,这样排到搜索引擎前面也只是时间的问题了,并且会排名会越来越好
,并且长久获得较好的排名
讲到这里,大家就要问了。各大搜索引擎喜欢的基本标准有那些呢?
我根据我多年的实践经验。我把影响搜索引擎排名的因素总结了八大方面
这八大方面,也许大家都知道几方面,或者都了解一些。
但是,我在这里要告诉大家一句最残酷的话:  知道不等于会,了解不等于能够按照要求去做好
过去,我在教程中,把一些要点写的很清楚,但是很多学习过的人,依然不能按照要求来执行,于是取得不了好的效果,最后经过
我重点强调几次后,才能很好执行。
好了,现在就开始讲这八大因素
第一条因素:服务器因素
重点强调:
1、服务器的地区分布影响排名
我做过很多次试验
相同的英文关键词, 用相同的方法,总是服务器在美国的网站排到第一页的速度快   放在国内服务器上的慢
所以大家要做英文站,一定要放国外。用户爽,搜索引擎也爽
2、服务器的速度和稳定性
服务器速度快了,蜘蛛爬行你网站的时候效率就高。慢了,用户不喜欢,搜索引擎也不太喜欢。 因为搜索引擎的标准是围绕用户的
爱好的。
关于稳定性   可以举一个例子。 我的电子商务指南一直排google第一页   2004年底   经常被黑客攻击  网站经常打不开
于是,可能出现了很多次这样情况,google爬行我的网站,突然服务器完蛋了。于是我的排名就很快下降了
后来调整了半年,才又重新恢复到第一名
 
纯打字讲的有点慢了。我需要加快速度。 :)
第二条因素  网站的内容因素
大家记住一下几个要点:
1、网站的内容要丰富
2、网站原创内容要多
3、用文本来表现内容
第三条因素:Title和meta设计因素
 
这一条因素是大家都知道的因素,也是大部分人知道并且还会犯错的因素
要点重点强调:
Title和Meta设计原则:1、每个页面的title和meta标签都要不同,并且要与该页面的内容相符合。2、title和meta的长度要控制
合理:     title设计越简洁明了越好,尽量不要超过25个汉字。     网页描述meta标签不要超过100个字,3、title和meta标
签中的关键词密度     title中合理突出1-2个关键词就可以了,不要太多     网页描述meta标签,核心关键词合理出现四次左
右。     关键词标签已经不被重视,合理放几个关键词就可以了。
 
大家常翻什么错误呢?
1、title中堆积一大堆关键词
这是严重不合理的
我认为:一个页面只排一个词,最合理。
如果你堆积关键词,别人一看就知道你过度SEO
而真正的SEO,优化过之后,就像没有优化一样,很合理,自然。
1、每个页面的title和meta标签都要不同,并且要与该页面的内容相符合。2、title和meta的长度要控制合理:     title设计
越简洁明了越好,尽量不要超过25个汉字。     网页描述meta标签不要超过100个字,3、title和meta标签中的关键词密度    
title中合理突出1-2个关键词就可以了,不要太多     网页描述meta标签,核心关键词合理出现四次左右。     关键词标签已
经不被重视,合理放几个关键词就可以了。
这几点,大家一定要记住,我重复强调了一次
大家可以现在检查一下自己的网站,是否这几方面都符合
这条因素也很简单,也是做html时候的基本知识
然后我们来讲第4条因素:网页的排版
强调一下第三点
1、大标题要用<h1>
2、文本中的的关键词用<b>加粗或者加重
3、网页中的图片要加上alt注释
加alt注释的图片,是网页中的重要图片   比如产品图片  明星图片等等
网页中的修饰图片不要乱加
加这个只是为了说明图片的内容
因为 图片搜索引擎的用户越来越多,在百度中都超越了MP3用户。

合理的加图片说明,不要在说明中堆积关键词

第5条因素:域名、文件名、url路径因素
先讲域名
如果你做英文站,直接采用包含关键词的域名非常有助于排名
比如 你要排  china tour  这个关键词
如果你选用了 chinatour.com
那么很快就可以获得好的排名。我在做英文关键词,都会专门选择域名。
如果你是中文站,那么现在可以考虑一下全拼的域名  因为各大搜索引擎都可以很好的识别拼音了。这样对你的排名也非常有利
比如大家在google搜索一个  网络赚钱   排第一的就是一个做的很差的网站  但是它很短时间就跑到了前面。

文件名
中文网站无所谓,如果你做英文站, 文件名要用关键词  并且各个单词之间要用中横线-分开
这点很重要,不要用下横线
接下来讲url的权重
为什么是这样规则呢? 其实很简单
二级域名比栏目页具备优势:abc.web.com比  www.web.com/abc/

有排名优势
栏目页比内页具备优势: www.web.com/abc/比  www.web.com/abc.html这样的路径有排名优势.
静态路径比动态路径具备优势: www.web.com/abc.html比  www.web.com/adc.asp?=321 这样的路径具备优势。
比如我注册一个域名   我用这个域名的首页排 电子商务 这样的一个关键词。那么搜索引擎就认为这个网站整个网站都围绕这个主
题。
那么,我这个网站针对电子商务的专业成都,肯定要超越其他网站的一个栏目
来规划url的时候,要需要注意地点。就是目录的层次不要太深。最少不要超过3层
你的层次越深,权重越低
大家可以看看新浪   它的新闻虽然多,但是层次都不超过3级
第六个因素: 网站的导航构架
这个要注意一下几点:
1、导航结构要清晰明了
2、超链接要用文本链接
3、各个页面要有相关链接
这一条,说起来很简单,做起来就不那么容易了。大家可以多观察一些超链接结构比较合理的网站。如果你的构架合理了,用户喜
欢,搜索引擎也喜欢。
如果策划网站的超链接结构呢?  不同类型的网站,策略不同。这个属于SEO策略的范畴。这里就不详细讲了
第7条因素:关键词的密度和分布
一般认为,关键词密度在3%~5%左右为适宜,不要刻意追求关键字的堆积,否则触发关键字堆砌过滤器(keyword stuffing filter
)处罚的后果。
但是,没有必要刻意去强求
如果每一个页面都去计算密度,调整,累死了也做不好
所以,大家只要处理好分布,密度自然就会合理了
那么,一个关键词,在一个网页的那些地方合理出现呢? 主要是以下几个地方。大家重点记一下
Title、meta、网页大标题、网页文本、图片alt注释、网页底部超链接文本
在一个网页中,你的关键词能够在一下6个地方合理出现,就OK了。但是,千万千万不要堆积关键词。
堆积关键词,后果很严重。哈哈。
一些刚刚SEO入门的朋友特别喜欢堆积关键词,但是不可取。这样很直接都可以看出是SEO过度。会被处罚的
第8个因素:反向链接因素和PR值因素
PR值大家下载google工具条,浏览每一个网页的时候,自动出现他的PR值
反向链接可以用这个语法来查  link:url
这条因素之所以放到最后,是因为它是非常非常重要的
比如你要查 百度的   输入 link:  www.baidu.com
做反向链接大家都知道。这里给大家说一个最为关键的要点
反向链接的链接按钮,不要用图片
要用文字
而且要用  关键词  作为链接按钮
那么大家在搜索我的名字的时候   肯定图王的网站排第一
比如。 我们如果在1万个网站上  用  王通  这个词链接指向图王的站长网    www.admin5.com
接下来就要讲一下反向链接的质量和数量
但是现在,反向链接的质量就更为重要了
这个道理很简单。 比如说  你自己说你是好人   但是没人相信
如果有1000个流氓说你是好人, 别人也不一定相信。这1000个流氓就好比1000个垃圾链接
但是有一个非常有威望的知名人士站出来指着你说,你是好人。那么大家都会相信。这个人就好比一个高质量的反向链接
在做反向链接的时候,大家要注意一点:
千万千万千万不要。在短短的时间迅速的获得几十个或者上百个高质量的反向链接
那么你很容易被google放进沙盒。因为google怀疑你是购买的。这样他不删除你,你也很那获得好排名
所以做链接,特别是高质量的反向链接。要一点一点的做
八大因素讲完了
然后讲一下常见的集中对搜索引擎不利的因素
1、框架网页  搜索引擎抓不到
2、过度JS调用  JS里面的内容搜索引擎也抓不到
3、flash网页  flash太多,搜索引擎也不喜欢,企业网站多范这个错误
其他常见作弊就不讲了。
我提倡大家把SEO看的简单一些
把以上每一条的细节都做好。那么排名自然会越来越好。
不过,八大因素虽然说着简单,每一个细节都能够做好的人却很少。
还是那句话: 知道不等于会!  所以学习SEO就要不断的学习,不断的实践,不断的总结

搞笑的法律

这25条法律涉及世界各国的方方面面,其中英伦三岛占了大半份额。到底奇不奇怪,看完之后自由分晓:

1、根据英国法律,在英国海岸发现的死去鲸鱼的头是国王的合法财产,而尾巴则属于女王,除非女王想用鲸鱼骨缝制紧身外套。

2、在巴林,男性医生能够合法地检查女性的生殖器,但是严禁在检查时直视女性生殖器,男医生只能通过镜子反射来检查。

3、在英国伦敦,如果你身染瘟疫,则不允许在街上截停出租车。

4、在美国的佛蒙特州,女性必须经过丈夫同意才能戴假牙。

5、在美国科罗拉多州的博达市,在城市边界线内打死鸟是非法的,同时“拥有”宠物也是非法的,因为按照法律上的定义,当地居民只能是“照顾宠物的人”。

6、在英国约克城,在古城墙内谋杀苏格兰人是合法的,但那只是在他携带弓箭的情况。

7、在英国切斯特,威尔士人严禁在日出前进城和日落后继续呆在城内。

8、在美国肯塔基州,携带隐藏超过六英尺长的武器是非法的。

9、在美国佛罗里达州,未婚女子若在周日跳伞则会面临牢狱之灾。

10、在英国,一名男子如果内急想在公共场合解手,那他必须瞄准他车子的后轮并把右手搭在车上。

11、在圣萨尔瓦多,醉酒司机若出现在行刑队面前,则被会判处死刑。

12、在英国伦敦,荣誉市民可以赶着羊群,不用交费就能走过伦敦桥。他们同样也被允许驾车带着鹅穿越切普赛德街。

13、在英格兰,所有14岁以上的男子必须每天进行两小时的长弓练习。

14、在印度尼西亚,对手淫的处罚是斩首。

15、在美国佛罗里达州的迈阿密,在警察局内用滑板滑行是非法的。

16、在英格兰西北部的兰开夏郡,任何人不得在被当地治安官在海滨叫住后激狗叫唤。

17、在英国,一名怀孕妇女可以合法地在任何地点放松自己,甚至如果她要求的话,可以在警察的头盔中。

18、英国皇家海军船只经过伦敦港口时,必须为伦敦塔警卫提供一桶朗姆酒。

19、在美国俄亥俄州,把鱼灌醉是违反州法律的。

20、在美国亚拉巴马州,司机驾车时蒙着眼睛是非法的。

21、根据英国2006年避免逃税法规中的规定,不向税务官告知任何你不想让其知道的事是违法的,尽管你不必向他告知任何你不介意让他知道的事情。

22、在法国,严禁把猪命名为“拿破仑”。

23、在英国,把带有英国君主像的邮票贴得上下贴反会被视为是一种叛国行为。

24、在英国国会大厦中死去是非法的。

25、在英国伦敦,出租车内严禁载有患有狂犬病的狗或狗的尸体。

如何关闭QQ空间?

从最开始因为好奇而开通 Qzone 到现在,我就没觉得那空间有什么优点,也许唯一的优点就是与 QQ 的紧密结合。还记得以前有要紧的事需要更新空间还得起个大早,赶着网速快才能打得开。现在的速度貌似改善了许多,但幼稚的风格、对高分辨率显示的不支持、多种代码的封闭,以及最可恶的就是腾讯一切向钱看的精神。

如果你也对此耿耿于怀,现在你可以通过登陆.

http://imgcache.qq.com/qzone/web/load_login_2.htm

把上面地址复制到浏览器里打开~

否则会发生错误:

 [attach=101]

下面会有一个调查,填写完毕就可以了。

如果发生服务器繁忙的情况:

[attach=102]

可以返回重试一下。

已经成功关闭:

[attach=103]

 

PHP日历算法,公历农历换算

PHP代码
  1. <?php  
  2. ###########################################  
  3. #作者: 沈潋(S&S Lab) #  
  4. #E-mail:shenlian@hotmail.com #  
  5. #web: 点击查看链接 #  
  6. # #  
  7. #版权声明: #  
  8. #作者开放版权 #  
  9. #允许无条件地使用本文件的全部或部分 #  
  10. #可作任何修改或增补 #  
  11. #如果您使用了本文件,请给作者写一封E-mail #  
  12. #如有问题欢迎同作者联系 #  
  13. #谢谢您的关注! #  
  14. ###########################################  
  15. /* 
  16. *修改:小许 
  17. *mail: san@xfocus.org 
  18. *web : 点击查看链接 
  19. * 
  20. *说实在的,我对古历可以说一窍不通,下面这个数组还是不理解 可是作者的信箱好像不通 
  21. *基本上是依样画葫芦,所以出现错误,见笑见笑,呵呵 
  22. */  
  23. #农历每月的天数  
  24.   
  25. $everymonth=array(  
  26.   
  27. 0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),  
  28. 1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),  
  29. 2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),  
  30. 3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),  
  31. 4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),  
  32. 5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),  
  33. 6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),  
  34. 7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),  
  35. 8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),  
  36. 9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),  
  37. 10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),  
  38. 11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),  
  39. 12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),  
  40. 13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),  
  41. 14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),  
  42. 15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),  
  43. 16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),  
  44. 17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),  
  45. 18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),  
  46. 19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),  
  47. 20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),  
  48. 21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),  
  49. 22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),  
  50. 23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),  
  51. 24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),  
  52. 25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),  
  53. 26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),  
  54. 27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),  
  55. 28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),  
  56. 29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),  
  57. 30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),  
  58. 31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),  
  59. 32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),  
  60. 33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),  
  61. 34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),  
  62. 35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),  
  63. 36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),  
  64. 37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),  
  65. 38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),  
  66. 39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),  
  67. 40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),  
  68. 41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),  
  69. 42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),  
  70. 43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),  
  71. 44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),  
  72. 45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),  
  73. 46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),  
  74. 47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),  
  75. 48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),  
  76. 49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),  
  77. 50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),  
  78. 51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),  
  79. 52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),  
  80. 53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),  
  81. 54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),  
  82. 55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),  
  83. 56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),  
  84. 57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),  
  85. 58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),  
  86. 59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),  
  87. 60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),  
  88. 61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),  
  89. 62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),  
  90. 63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),  
  91. 64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),  
  92. 65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),  
  93. 66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),  
  94. 67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),  
  95. 68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),  
  96. 69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),  
  97. 70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),  
  98. 71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),  
  99. 72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),  
  100. 73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),  
  101. 74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),  
  102. 75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),  
  103. 76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),  
  104. 77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),  
  105. 78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),  
  106. 79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),  
  107. 80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),  
  108. 81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),  
  109. 82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),  
  110. 83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),  
  111. 84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),  
  112. 85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),  
  113. 86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),  
  114. 87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),  
  115. 88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),  
  116. 89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),  
  117. 90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),  
  118. 91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),  
  119. 92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),  
  120. 93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),  
  121. 94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),  
  122. 95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),  
  123. 96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),  
  124. 97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),  
  125. 98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),  
  126. 99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),  
  127. 100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),  
  128. 101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),  
  129. 102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),  
  130. 103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),  
  131. 104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),  
  132. 105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),  
  133. 106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),  
  134. 107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),  
  135. 108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),  
  136. 109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),  
  137. 110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),  
  138. 111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),  
  139. 112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),  
  140. 113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),  
  141. 114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),  
  142. 115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),  
  143. 116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),  
  144. 117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),  
  145. 118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),  
  146. 119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),  
  147. 120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)  
  148.   
  149. );  
  150. ##############################  
  151.   
  152. #农历天干  
  153.   
  154. $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");  
  155. #农历地支  
  156.   
  157. $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",  
  158. "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");  
  159. #农历月份  
  160.   
  161. $mmonth=array("闰","正","二","三","四","五","六",  
  162. "七","八","九","十","十一","十二","月");  
  163. #农历日  
  164.   
  165. $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",  
  166. "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",  
  167. "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");  
  168. ##############################  
  169.   
  170. #星期  
  171.   
  172. $weekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");  
  173. #阳历总天数 至1900年12月21日  
  174.   
  175. $total=11;  
  176. #阴历总天数  
  177.   
  178. $mtotal=0;  
  179. ##############################  
  180.   
  181. #获得当日日期  
  182.   
  183. $today=getdate();  
  184. if($today["year"]<1901 || $today["year"]>2020) die("年份出错!");  
  185. $cur_wday=$today["wday"];  
  186. for($y=1901;$y<$today["year"];$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和  
  187.   
  188. $total+=365;  
  189. if ($y%4==0) $total++;  
  190. }  
  191.   
  192. switch($today["mon"]) { //再加当年的几个月  
  193.   
  194. case 12:  
  195.   
  196. $total+=30;  
  197. case 11:  
  198.   
  199. $total+=31;  
  200. case 10:  
  201.   
  202. $total+=30;  
  203. case 9:  
  204.   
  205. $total+=31;  
  206. case 8:  
  207.   
  208. $total+=31;  
  209. case 7:  
  210.   
  211. $total+=30;  
  212. case 6:  
  213.   
  214. $total+=31;  
  215. case 5:  
  216.   
  217. $total+=30;  
  218. case 4:  
  219.   
  220. $total+=31;  
  221. case 3:  
  222.   
  223. $total+=28;  
  224. case 2:  
  225.   
  226. $total+=31;  
  227. }  
  228.   
  229. if($today["year"]%4 == 0 && $today["mon"]>2) $total++; //如果当年是闰年还要加一天  
  230.   
  231. $total=$total+$today["mday"]-1; //加当月的天数  
  232.   
  233. $flag1=0; //判断跳出循环的条件  
  234.   
  235. $j=0;  
  236. while ($j<=120){ //用农历的天数累加来判断是否超过阳历的天数  
  237.   
  238. $i=1;  
  239. while ($i<=13){  
  240.   
  241. $mtotal+=$everymonth[$j][$i];  
  242. if ($mtotal>=$total){  
  243.   
  244. $flag1=1;  
  245. break;  
  246. }  
  247.   
  248. $i++;  
  249. }  
  250.   
  251. if ($flag1==1) break;  
  252. $j++;  
  253. }  
  254.   
  255. if($everymonth[$j][0]<>0 and $everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补  
  256.   
  257. $mm=$i-1;  
  258. }  
  259.   
  260. else{  
  261.   
  262. $mm=$i;  
  263. }  
  264.   
  265. if($i==$everymonth[$j][0]+1 and $everymonth[$j][0]<>0) {  
  266.   
  267. $nlmon=$mmonth[0].$mmonth[$mm];#闰月  
  268.   
  269. }  
  270.   
  271. else {  
  272.   
  273. $nlmon=$mmonth[$mm].$mmonth[13];  
  274. }  
  275.   
  276. #计算所求月份1号的农历日期  
  277.   
  278. $md=$everymonth[$j][$i]-($mtotal$total);if($md > $everymonth[$j][$i])  
  279.   
  280. $md-=$everymonth[$j][$i];  
  281. $nlday=$mday[$md];  
  282. $nowday=date("Y年n月j日 ").$weekday[$cur_wday]."<br>".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday;  
  283. echo "<font color=#3333ff>$nowday</font>";  
  284.   
  285. ?>  

统计一个目录下的文件数

※ 来源:·水木社区 http://newsmth.net·[FROM: 218.247.129.*]

发信人: nwn (Lie), 信区: DOS
标  题: Re: 如何用DOS命令,获取一个目录下的文件数目?
发信站: 水木社区 (Fri Mar  9 09:54:55 2007), 站内

dir /b | find /v /c "$$$$" > 1.log
该结果统计当前目录下的文件和目录数。

如果只需要文件,使用 dir /b /a-d | find /v /c "$$$$" >1.log

※ 来源:·水木社区 newsmth.net·[FROM: 125.46.17.*]

今天去水木看到的.果然强.我来解释一下意思

dir /b  使用空格式(没有标题信息或摘要)。

dir /a-d /a是显示具有指定属性的文件。d是目录,-d就是去掉目录

| 通道符,把dir /b的输出当中后面find的输入

find

/v 显示所有未包含指定字符串的行。

/c 仅显示包含字符串的行数

"$$$$" 特殊字符,一般文件中都没这个字符,不过可以用$$$$来命名文件夹,所以我建议用冒号,这个不能当作文件夹或者文件的名字.

> 输出到

1.log  文件

 

这个比较好:dir /b | find /v /c ":" > 1.log

=============================

扩展:

包含子目录:

 

C++代码
  1. tree /F | find /c "."          // 带点的文件  
  2. tree /F | find /v /c "/"       //  /是文件命名时禁止使用的,统计全部文件  

Linux 下:

 

 

C++代码
  1. # ls -l * |grep "^-"|wc -l           // to count files  
  2. # ls -l * |grep "^d"|wc -l           // to count dir  

Linux,包括子目录

 

 

C++代码
  1. # ls -lR * |grep "^-"|wc -l           // to count files    
  2. # ls -lR * |grep "^d"|wc -l           // to count dir    

 

用PHP读取MP3的标签信息ID3v1版

读取部分:

PHP代码
  1. $filename = "srkl.mp3";  
  2. $fp = fopen($filename"rb"or die("Unable to open this mp3.");  
  3. fseek($fp,-128,SEEK_END);  
  4.   
  5. $header = fread($fp,3); // Header[3]  
  6. if (‘TAG’!=$headerdie("Unknown Header Information:".$header);  
  7.   
  8. $title = trim(fread($fp,30)); // Title[30]  
  9. $artist = trim(fread($fp,30)); // Artist[30]  
  10. $album = trim(fread($fp,30));   // Album[30]  
  11. $year = fread($fp,4);   // Year[4]  
  12. $comment = trim(fread($fp,28)); // Comment[28]  
  13.   
  14. fseek($fp,1,SEEK_CUR);  // reserve  
  15.   
  16. $track = ord(fread($fp,1)); // Track[1]  
  17. $genre = ord(fread($fp,1)); //Genre[1]  
  18. fclose($fp);  
  19.   
  20.   
  21. echo " 
  22. Title:$title 
  23. Artist:$artist 
  24. Album:$album 
  25. Year:$year 
  26. Comment:$comment 
  27. Track:$track 
  28. Genre:$genre 
  29. ";  

写入:

PHP代码
  1. ////////////////////////////////  
  2. $title = "生日快乐";  
  3. $artist = "小S";  
  4. $album = "旅程";  
  5. $year = "2006";  
  6. $comment = "这是我的第一个专辑哦!";  
  7.   
  8. //fseek($fp,1,SEEK_CUR);    // reserve  
  9.   
  10. $track = "1";  
  11. $genre = "4";  
  12.   
  13. // 规定字节,不足用\0补  
  14. $title = str_padsubstr($title,0,30) ,30,chr(0));  
  15. $artist = str_padsubstr($artist,0,30) ,30,chr(0));  
  16. $album = str_padsubstr($album,0,30) ,30,chr(0));  
  17. $year = str_padsubstr($year,0,4) ,4,chr(0));  
  18. $comment = str_padsubstr($comment,0,28) ,28,chr(0));  
  19. $track = chr(intval($track));  
  20. $genre = chr(intval($genre));  
  21.   
  22. //  
  23. $mp3 = substr(file_get_contents("srkl.mp3"),0,filesize(‘srkl.mp3’)-128);  
  24. $fp = fopen("1.mp3","wb"or die("Unable open.");  
  25. fwrite($fp,$mp3);  
  26. fwrite($fp,"TAG");  
  27. fwrite($fp,$title);  
  28. fwrite($fp,$artist);  
  29. fwrite($fp,$album);  
  30. fwrite($fp,$year);  
  31. fwrite($fp,$comment);  
  32. fseek($fp,1,SEEK_CUR);  
  33. fwrite($fp,$track);  
  34. fwrite($fp,$genre);  
  35. fclose($fp);  

参考资料:
(来自CSDN)
关于Mp3文件的ID3v1标签的格式错误地方指正!首先非常感谢原作者,给我非常大的帮助,有误的地方我给予指正,望这能表达出我是对原作者的一些感谢! 
    原文地址: 
  http://dev.csdn.net/develop/article/14/14798.shtm 
  
    ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下: 
      char   Header[3];         /*标签头必须是"TAG"否则认为没有标签*/ 
    char   Title[30];         /*标题*/ 
    char   Artist[30];       /*作者*/ 
    char   Album[30];         /*专集*/ 
    char   Year[4];         /*出品年代*/ 
    char   Comment[30];       /*备注*/ 
    char   Genre;         /*类型*/ 
      ID3V1的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30个字节,则使用’\0’补足,否则将造成信息错误。 
  
  
  
  结构应该是: 
  char   Header[3];         /*标签头必须是"TAG"否则认为没有标签*/ 
  char   Title[30];         /*标题*/ 
  char   Artist[30];       /*作者*/ 
  char   Album[30];         /*专集*/ 
  char   Year[4];         /*出品年代*/ 
  char   Comment[29];       /*备注*/ 
  byte   track;       /*音轨*/ 
  byte   Genre;         /*类型*/ 
  
  以上仅是个人看法,有误之处,还请指正!

UTF-8转unicode PHP版本+Javascript版本

PHP代码
  1. function uni($str) {  
  2.     $ret = ;  
  3.     for($i=0;$i<mb_strlen($str,‘utf-8’);$i=$i+1) {  
  4.         $ret .= "&#" . uniord(mb_substr($str$i, 1, ‘utf-8’)) . ";";  
  5.     }  
  6.     return $ret;  
  7. }  
  8. echo uni("海海家园");  
  9.   function unichr($u) {  
  10.     return mb_convert_encoding(pack("N",$u), mb_internal_encoding(), ‘UCS-4BE’);  
  11.   }  
  12.     function uniord($u) {  
  13.     $c = unpack("N", mb_convert_encoding($u‘UCS-4BE’‘UTF-8’));  
  14.     return $c[1];  
  15.   }  

JavaScript 版本

JavaScript代码
  1. <script>  
  2. function unicode(s){  
  3.    var len=s.length;  
  4.    var rs="";  
  5.    alert(len);  
  6.    for(var i=0;i<len;i++){  
  7.       var k=s.substring(i,i+1);  
  8.       rs+="&#"+s.charCodeAt(i)+";";  
  9.    }  
  10.    return rs;  
  11. }  
  12.   
  13. function runicode(s){  
  14.    var k=s.split(";");  
  15.    var rs="";  
  16.    for(i=0;i<k.length;i++){  
  17.       var m=k[i].replace(/&#/,"");  
  18.       rs+=String.fromCharCode(m);  
  19.    }  
  20.    return rs;  
  21. }  
  22. //alert(unicode("我是一个神"));//我是一个神  
  23. //alert(runicode("&#25105;&#26159;&#19968;&#20010;&#31070;"));  
  24. </script>  

从朋友那得到的新方法:(2007.8.14)

JavaScript代码
  1. <script language="javascript" type="text/javascript">  
  2. var oSource = document.getElementById("source");  
  3. var oShow2 = document.getElementById("show2");  
  4. var oTt = document.getElementById("tt");  
  5.   
  6. function action(pChoice){  
  7.  switch(pChoice){  
  8.   case "CONVERT_FMT1":  
  9.    oShow2.value = ascii(oSource.value);  
  10.    break;  
  11.   case "CONVERT_FMT2":  
  12.    oShow2.value = unicode(oSource.value);  
  13.    break;  
  14.   case "RECONVERT":  
  15.    oShow2.value = reconvert(oSource.value);  
  16.    break;  
  17.  }  
  18. }  
  19.   
  20. function ascii(str){  
  21.  return str.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,"\$2;")});  
  22. }  
  23.   
  24. function unicode(str){  
  25.  return str.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,"\\u$2")});  
  26. }  
  27.   
  28. function reconvert(str){   
  29.  str = str.replace(/(\\u)(\w{4})/gi,function($0){  
  30.             return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{4})/g,"$2")),16)));  
  31.             });  
  32.               
  33.  str = str.replace(/()(\w{4});/gi,function($0){  
  34.             return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{4})(%3B)/g,"$2"),16));  
  35.             });              
  36.  return str;  
  37. }  
  38. </script>   

从程序员创业谈起

离开雅虎中国后的周鸿袆现在的身份是IDG公司的投资合伙人,手中拿着五亿美金用来做风投的他自然对创业有着说不完的话题。由于周鸿袆出身程序员,也一直是本刊的忠实读者,他希望一方面站在投资商的角度,同时以一种过来人的身份来探讨“程序员创业”这个话题。

一个周五的傍晚,在北京光华路的一个酒吧中,本刊约到周鸿袆进行这次对话。从昌平远道赶来的周鸿袆由于塞车而晚到了半个小时。由于开会讲了一天的话,他的声音有些嘶哑。不过在草草的吃了晚饭后,周鸿袆仍然用其快速的语调表达了自己的观点。

记者:我已经看到您在其它的媒体上接受了一些采访,也谈到了很多关于创业的话题。面对程序员这个群体,讲创业有什么特别的地方呢?

周鸿袆:的确如此,最近由于我的身份,只接受创业方面的话题。关于程序员创业,我之所以愿意谈我的观点,是因为我是程序员出身,也是从小公司做起来的,我自认为对待很多程序员个人包括共享软件作者和一些小网站还是很好的。我希望和他们分享一些经验和体会。

首先,我想说的是聪明人不一定能成功,很多程序员很聪明,但我一看就知道他们不会成功。因为我看到了一些问题,而且现在太多程序员存在很多误解。因此,我希望把我的观点告诉程序员。或许有一些程序员能够清醒,某个人可能因为我的某一句话有了感觉,对他以后的成长产生了帮助,这就足够了。

要知道,程序员总是以为自己优秀所以就能成功,其实不是。中国的程序员大部分是盲目的:看看CSDN的论坛就能够感觉到,要么有一群人自我感觉极端的良好,以专家自居,要么就是一群蓝领埋怨公司和社会环境不行,待遇不好。

应该说,中国程序员创业的成功率也是很低的。放眼望去,中国互联网成功的人士有几个是真正写过十年软件的。事实上,现状和我们所能听到的媒体宣传的故事很不一样。

很多程序员的最高理想就是写一个共享软件,一年可以挣几百万。但我希望谈的不是告诉程序员如何挣钱,挣钱很容易,而是要告诉程序员如何去创业。比如虽然FlashGet的作者收入很高,衣食无忧,但从创业的角度看,它并没有以商业公司的方式创业成功。

记者:那根据您的观察,中国的程序员在创业方面欠缺哪些?

周鸿袆:首先,我看到中国程序员的合作心态非常缺乏,我认为这是中国程序员最大的问题,当然这是有很多原因的。

大家经常说这句话:态度决定一切。但事实上好程序员基本上都比较傲气,因为程序员往往会觉得自己在做世界上一件十分伟大的事情,这就是驱动机器,修改一行代码,机器就能够工作,可以产生各种不同的行为。这很容易会让程序员产生一种错觉,认为自己可以Control Everything。程序员的自信在编程上是非常需要的,但不是适合一切场合。如果我们不说这些,可能很多程序员到现在还不知道自己错在哪里,仍然认为自己是King of the World。

事实上,程序员的能力只是控制了一个机器。但创业仅仅具备了和机器打交道这一种能力是绝对不够的,他还需要和合作伙伴、竞争对手、投资人、员工甚至整个社会环境打交道。很多程序员因为已经习惯了和机器打交道,不善于也不愿意其它的工作。很多程序员会内心认为“营销不是很简单嘛,市场很简单啊,管理也很简单啊,”我认为这种心态是非常害人的。

程序员还是一个很固执的人群,他觉得自己是机器的统帅,因此不会灵活,不会妥协。我当时也喜欢写程序,但我知道如果自己沉迷于写程序,肯定没戏,所以是逼着自己改变角色。

记者:在做公司的过程中,您应该也经常和不同层次的程序员打交道吧?有什么深刻的故事和印象?

周鸿袆:这两天,我收到几封程序员的来信。有一封信中大意说“我是个如此优秀的程序员,为什么我就不能成功呢,请你指点。这里有我的blog地址,看完你就会了解我了。”我想说的是:如果真的希望别人帮忙,就要把情况真实的说出来,而不是上来就说自己很优秀,这种语言就会让别人觉得很不舒服,不是很好的交流方式。我还真看了那个blog,但看完之后,觉得这个程序员就是一个空想狂。

可以说,很多程序员实际上是优秀带来了自负,这种自负使得其不要说创业,可能在在公司中工作也会遇到问题。所以,我甚至认为程序员在创业方面遇到的困难比其它类型的人员更大。如果程序员希望主导一个创业,可能首先就要逼自己不是一个程序员。

记者:所以我们不能只单纯谈程序员创业,而是要从程序员创业谈起。为了避免这些问题,要做哪些转变呢?

周鸿袆:是的,要从创业谈起。程序员首先要学会和别人合作。提到这点,很多程序员都会说“我正在带着其他程序员写程序啊,我会合作啊。”但这种合作是片面的,我所谈的不仅仅是程序员和程序员之间的合作,而是包括了程序员和其它各种角色之间的合作。程序员相亲,他们的语言比较能够容易理解。但作为一个程序员,你能不能商业人员、销售人员很好的合作呢。

我这些年还看到很多这样的例子:程序员动不动就把目标定为比尔·盖茨。其实,比尔盖茨不应该成为程序员崇拜的目标对象,这会让程序员迷失方向,因为微软另外一个创始人保罗·艾伦才是真正的程序员。再看其它一些例子,Google的第20名程序员都可以获得五亿美元。Adobe公司两个创始人也是一个精通技术,一个对商业精通,这样的搭配才能够更好的成功。因此,对于很多程序员来说,一定要找准真正的榜样,不要被外界的故事迷惑了头脑。如果剖开一些故事的外表,你会发现国外很多成功的程序员,背后一定有一个很强大的商业感觉的人或者一个团队。

记者:那也就是说,程序员应该作为一种创业的参与者,而不一定要做主导者了?

周鸿袆:程序员的商业感觉其实并不是很好。即便有商业感觉,其实这只是一个灵感,一个创意,但要要做成、做大还需要一系列的管理、市场、运营,这些对于程序员是不可想象的。程序员要明白,在自己不擅长的领域,找到一个可以弥补自己缺陷的合作团队才是出路。加入一个创业团队,可能个人占10%,但因为更容易成功,而且团队可以做100分的事情。而如果只是一个人做,很可能就失败了。

这方面,国外的程序员对自己的长短比较清楚。在硅谷,很多程序员技术上都很牛,但他们都非常知道自己只是在技术这个领域水平比较高,出了这个领域,自己什么都不是。正因为有了这种心态,他们特别懂得与人合作。我认为国外的程序员已经普遍意识到了这点,他们很愿意成为创业团队中的一员而并非自己创业。

因此,程序员需要调整心态,不要把自己当作精英人物,要承认自己在编程方面是优秀的,但永远有人比自己更优秀,对于其它的领域,很可能自己很无知。要知道,其实程序员的选择其实是最少的,因此抱有开放的心态是最重要的。

记者:你认为国内的程序员在哪些地方还与创业的要求存在一定差距?

周鸿袆:我认为现在的很多程序员经验过于不足,他没有认真踏实做过很多工作就奢谈创业。如果一个程序员没有在编程方面深入过,没有积累,也就是半瓶子醋。这样的程序员我接触过很多,他们自己也不清楚问题出在哪里,让人感觉又爱又恨。我认为程序员既然要凭借自己的技术,那就一定要踏实,要能够实现任何创意。

但现在一些程序员自己没有商业意识,却又很自负,不相信别人,不理解的事情就不做。我遇到过很多程序员,他们对公司做什么方向都质疑。他们希望自己先想清楚,可是一想就浪费了很长时间。很多程序员就可悲在这里,积累的不多,看不到方向,但他也不相信自己的公司和老板,这是一个悖论,需要程序员深刻反省。要知道,每个公司都有懂商业的人。

就这样,一些程序员极端自负,另外有一些程序员碰了很多钉子之后,感觉很自卑,于是便认为国内软件业不行,最后出国或者打工,很少有程序员能对自己能做公正的评价。

记者:您是否认为国内的环境是造成程序员浮躁的因素呢?

周鸿袆:这个倒问住我了,我以前没有仔细考虑过这点。但我想,不管怎样,程序员需要先从自身找问题,因为大环境就是这样了。我承认一个现实:程序员生存状态并不是很好,但程序员很多报怨其实是一种不切实际的期望值和自身的缺陷产生的反差。

首先,产品没有大小,只有市场的大小。很多人总是觉得这也小,那也看不上。认为公司做的产品很无聊,要做就要像CSDN论坛中某些人宣扬那样:做游戏一定要做3D引擎,好像只有这样才够牛。这其实就是一种浮躁。很多程序员写软件总是很多bug,基础知识也不牢固,没有参加几个项目,没有写过十万行代码,就奢谈做大项目,这有价值吗?

而且我还发现有些程序员特别愤青,骂环境,骂老板,其实这只能把自己的心态搞的很坏。很多人刚进公司时做的很差,虽然工资少,但他没有想到给公司增加了很多bug,公司实际上是在给他出学费。论坛上大家都在讨论哪里活干得少钱拿的多。甚至还有人列了一些黑名单。这种做法的结果就是程序员自己将周围环境搞的乌烟瘴气了。

有的程序员还非常喜欢指点江山,指点公司。我个人觉得这不是不可以,但指责别的公司对个人没有什么好处,因为存在就是合理的。如果看不到,恰恰证明是自己看不到。我看到很多程序员也写blog,技术交流的我认为非常好,但有些人是写评论。我是觉得程序员不要做评论家,中国不缺评论家,最缺的是实干家。

总之,程序员一般过于自我。总生活在自我的世界中,就不可能真正了解世界是什么。我很早就意识到了这些问题,也努力的去客服。我的经验就是看别人如何做的好,为什么能够做的好,什么是我所不能理解。程序员要学会慢慢站在别人立场上看问题。

记者:您对希望创业的程序员有哪些建议呢?

周鸿袆:对程序员来说,现在要做的也很简单,这就是需要大量的实践,要慢慢培养对产品,对商业的感觉。我的建议说出来可能有些忠言逆耳。对绝大多数程序员来说,自己一个人成功的机率是很小的,所以我认为加入一个创业的团队可能更为合适。现在有很多初期创业的公司,也需要很多优秀的程序员加盟。如果有理想,可以选择加入一个团队,也有相应的股份,这方面我可以充当一个桥梁。