20年来我得到的20条编程经验

发布于:2010年05月27日 作者:Lay 分类: 查看:3005 回复:0

原文来自:http://www.blueidea.com/tech/program/2010/7628.asp

我从11岁开始编程,并且一直都很喜欢技术和编程。这些是我一直以来获得的经验教训。作为一个程序员,你可能需要这样的忠告。我更希望每个人在获取这些忠告的同时能够学到更多。

阅读全文

VeryIDE Apps 3.1 新特性预览——广告位篇

发布于:2010年05月26日 作者:Lay 分类: 查看:3716 回复:0

这次更新主要是QQ群里一位朋友提出来的,我觉得很好,所以就做了。

阅读全文

网站后台用户体验一个容易被遗忘的策划

发布于:2010年05月04日 作者:Lay 分类: 查看:3238 回复:0

原文:http://ucdchina.com/snap/5424

网站策划的目的是为了运营,以B2C网站为例,策划人员除了策划网站的前台页面之外,后台系统的策划也是必不可少的(如,产品发布模块,等某些大型 网站可能会有订单处理后台、结算处理后台等),我们必须先指明关键指标的适用角色,操作后台的角色无疑是:数据录入员、订单处理人员、结算人员。

阅读全文

VeryIDE Apps 3.0 新特性预览——分享篇

发布于:2010年05月02日 作者:Lay 分类: 查看:5634 回复:3

你是否需要经常将用户报名的数据发给客户?是否需要将广告的效果分析让客户查看?但是你又不方便把 VeryIDE 的后台交给他人?

如果你的答案是肯定的话,那这篇数据分享你一定要看看。

阅读全文

修改 SQL 文件,让 VeryIDE 兼容 MySQL 4

发布于:2010年04月27日 作者:Lay 分类: 查看:3495 回复:0

今天有朋友问到,VeryIDE 在 MySQL 4 下安装报错:

阅读全文

PHP 开启 XSLT 扩展

发布于:2010年04月27日 作者:Lay 分类: 查看:3869 回复:1

在 VeryIDE Apps 3.0 中,使用到了 XSLT  扩展来系统配置进行处理,所以需要在 PHP 扩展中开启对 XSLT 的支持。

至于 XSLT 是什么请看这里:http://zh.wikipedia.org/zh-cn/XSLT

阅读全文

有感于 PHP serialize() 和 unserialize()

发布于:2010年04月20日 作者:Lay 分类: 查看:3648 回复:1

最近在开发一个基于 VeryIDE 的商家库(类似 www.j.cn)时,在行业分类数据存储时用到了 PHP 内置的数据序列化和反序列化。

阅读全文

腾讯微博开通啦!

发布于:2010年04月16日 作者:Lay 分类: 查看:3074 回复:0

好不容易从QQ好友里要到一个邀请码,马上去注册一下看看。

阅读全文

知识产权(软件著作权)知识小问答

发布于:2010年04月15日 作者:Lay 分类: 查看:3574 回复:0

1.受著作权法保护的软件应当符合哪些要件?

享有著作权的软件应当符合以下两个条件:(1)软件必须具有独创性,即软件必须是由开发者独立开发完成的劳动成果,而不是抄袭他人软件而来的,才能享有著作权;(2)软件必须固定在某种有形载体上,即软件通常要被固定在有形的、可被复制和利用的载体上,如光盘等。

2.软件著作权是否需要登记才能产生?

根据《计算机软件保护条例》,计算机软件的著作权是从软件开发完成之日起自动产生,无须进行登记。目前,对计算机软件实行的是自愿登记制度。根据国家版权局的《计算机软件著作权登记办法》,软件著作权人可向软件登记机构办理登记申请。申请登记获准后,由软件登记管理机构发放登记证明文件。

由于软件著作权极易产生纠纷,且发生纠纷后不容易证明自己的权利,因此,版权登记证书一般被作为软件著作权权属的初步证明。

3.合作开发的软件著作权归谁所有?

由两个以上的自然人、法人或者其他组织合作开发的软件,其软件著作权的归属由各合作开发者签订书面合同约定。无明确约定的,一是合作开发的软件可以分割使用的,开发者对各自开发的部分可以单独享有著作权,但行使权利时不得扩展到合作开发的软件整体的著作权。二是合作开发的软件不能分割使用的,软件著作权由各开发和作者共同享有,由合作者通过协商一致行使。如不能协商一致,又无正当理由,任何一方不得阻止他方行使除转让权以外的其他权利,但所得收益应合理分配给所有合作开发者。

4.委托开发的软件著作权归谁所有?

受他人委托开发的软件,其著作权的归属由委托者与受托者签订书面协议约定,如无书面协议或者在协议中未明确约定著作权归属的,软件著作权属于受委托开发者,即实际进行开发的一方。

5.职务软件著作权归谁所有?

职务软件是指自然人在单位任职期间所开发的软件,主要指下列三种情况下开发的软件:(1)针对本职工作中明确指定的开发目标所开发的;(2)开发的软件是从事本职工作活动中所预见的结果或者自然的结果;(3)主要使用了单位的资金、专用设备、未公开的专门信息等物质条件,并由单位承担责任的软件。职务软件的著作权归属单位,开发者享有署名权。

6.软件著作权人享有哪些权利?

软件著作权人主要享有下列权利:

(1)发表权。即决定软件是否公之于众的权利。

(2)署名权。即表明开发者身份,在其软件上署名的权利。

(3)修改权。即对软件进行增补、删节、或者改变指令、语句顺序的权利。

(4)复制权。即将软件制作一份或者多份的权利。

(5)发行权。即以出售或者赠与方式向社会公众提供软件的原件或者复制件的权利。

(6)出租权。即有偿许可他人临时使用软件的权利,但是软件不是出租的主要标的的除外。

(7)信息网络传播权。即以有线或者无线方式向公众提供软件,使公众可以在个人选定的时间和地点获得软件的权利。

(8)翻译权。即将软件从一种自然语言文字转换成另一种自然语言文字的权利。

7.软件著作权的保护期是多少年?

由自然人享有的软件著作权,保护期为自然人终身及死后50年,截至于自然人死亡后第50年的12月31日;软件是合作开发的,截至于最后死亡的自然人死亡后的第50年的12月31日。由法人或者其他组织享有的著作权,保护期为50年,截至于软件首次发表后的第50年的12月31日,但软件自开发完成之日起50年内未发表的,其著作权不再受保护。

8.常见的软件盗版侵权行为有哪些?

对软件的盗版侵权行为主要有以下几种表现形式:

(1)擅自按原样复制和销售软件产品的复制品;

(2)将热销的软件收集起来,做成“集锦盘”复制并销售;

(3)在销售计算机硬件时,未经授权将软件预装到硬件中;

(4)应客户要求,擅自为用户拷贝或刻录软件的复制品;

(5)最终用户擅自扩大安装使用范围;

(6)未经授权通过网络销售软件或擅自将软件上传到网上提供给网络用户;

(7)从网上下载未经授权的软件并复制和销售,或以其他方式超出许可销售范围使用;

(8)故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施;

(9)故意删除或者改变软件权力管理信息。权力管理信息是指识别作品、作品的作者、对作品拥有任何权利的所有人的有关信息,或有关作品使用条款和条件的信

摘编自《软件正版化工作手册》,中国检察出版社2004年版

阅读全文

JavaScript 报 Stack overflow at line 错误总结

发布于:2010年04月15日 作者:Lay 分类: 查看:3396 回复:0

原文见:http://www.cnblogs.com/S.Sams/archive/2009/01/18/1377783.html

今天对 VeryIDE 模块作调整,将 PHP 文件移到了子文件夹中,导致引用图片出错,引起死循环。

阅读全文

关于 PHP 缓存方式的思考

发布于:2010年04月08日 作者:Lay 分类: 查看:2812 回复:0

阅读全文

PHP 处理 JSON 字符串经验分享

发布于:2010年09月13日 作者:Lay 分类: 查看:5133 回复:0

VeryIDE Apps V3.0 初次使用 PHP 来处理 JSON 数据遇到不少问题,这里记录一下心得与体会。

以前在 JavaScript 中也用过 JSON 类型的数据,怎么没遇到这么多麻烦?

阅读全文

VeryIDE Apps 3.0 新特性预览——表单篇

发布于:2010年04月06日 作者:Lay 分类: 查看:4118 回复:0

《系统篇》《广告篇》后,这次轮到《表单篇》的发布。

阅读全文

VeryIDE Apps 3.0 新特性预览——广告篇

发布于:2010年04月05日 作者:Lay 分类: 查看:3422 回复:0

接上一篇《VeryIDE Apps 3.0 新特性预览——系统篇》,这次继续来了解一下广告系统的变化。

阅读全文

VeryIDE Apps 3.0 新特性预览——系统篇

发布于:2010年04月05日 作者:Lay 分类: 查看:3823 回复:2

离上一次 VeryIDE Apps 2.0 发布差不多有半年之余,这个版本的开发确实有点长,主要原因是数据底层发生了很大变化,工程量比较大,另外一个原因就是有其他事情的插入。

这次的升级不同与以前版本,可以说是革命性的,核心程序与数据库结构几乎都发生了重大改变,目的是更规范化、更通用化和以后更好的扩展。

阅读全文

Windows 下小巧强大的编程利器:Intype

发布于:2010年02月28日 作者:Lay 分类: 查看:5353 回复:3

Intype是一款模仿Mac上Textmate的文本编辑器。

用过Notepad2,用过Notepad++,这次无意间用上了Intype。据说是一款模仿Mac上Textmate的文本编辑器。当然Mac都没用过,更别提Textmate了。

阅读全文

优化PHP代码的40条建议

发布于:2010年02月06日 作者:Lay 分类: 查看:3605 回复:0

本文中作者将结合自己的实际工作经验对PHP优化及高效提速问题进行总结,希望可以给你在使用PHP时带来帮助。

原文地址:http://reinholdweber.com/?p=3

英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。

1. If a method can be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2. echo is faster than print. echo 比 print 快。

3. Use echo’s multiple parameters instead of string concatenation. 使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4. Set the maxvalue for your for-loops before and not in the loop. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5. Unset your variables to free memory, especially large arrays. 注销那些不用的变量尤其是大数组,以便释放内存。

6. Avoid magic like __get, __set, __autoload 尽量避免使用__get,__set,__autoload。

7. require_once() is expensive require_once()代价昂贵。

8. Use full paths in includes and requires, less time spent on resolving the OS paths. 在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

9. If you need to find out the time when the script started executing, $_SERVER[’REQUEST_TIME’] is preferred to time() 如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10. See if you can use strncasecmp, strpbrk and stripos instead of regex. 检查是否能用strncasecmp,strpbrk,stripos函数代替正则表达式完成相同功能。

11. str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4. str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12. If the function, such as string replacement function, accepts both arrays and single characters as arguments, and if your argument list is not too long, consider writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments. 如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13. It’s better to use select statements than multi if, else if, statements. 使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14. Error suppression with @ is very slow. 用@屏蔽错误消息的做法非常低效。

15. Turn on apache’s mod_deflate 打开apache的mod_deflate模块。

16. Close your database connections when you’re done with them. 数据库连接当使用完毕时应关掉。

17. $row[’id’] is 7 times faster than $row[id]. $row[‘id’]的效率是$row[id]的7倍。

18. Error messages are expensive. 错误消息代价昂贵。

19. Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time. 尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。

20. Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function. 在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

21. Incrementing a global variable is 2 times slow than a local var. 递增一个全局变量要比递增一个局部变量慢2倍。

22. Incrementing an object property (eg. $this->prop++) is 3 times slower than a local variable. 递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

23. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one. 递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

24. Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists. 仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

25. Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance. 方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

26. Methods in derived classes run faster than ones defined in the base class. 派生类中的方法运行起来要快于在基类中定义的同样的方法。

27. A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations. 调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

28. Surrounding your string by ‘ instead of " will make things interpret a little faster since php looks for variables inside "…" but not inside ‘…’. Of course you can only do this when you don’t need to have variables in the string. 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。

29. When echoing strings it’s faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments. 输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

30. A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts. Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

31. Your PHP scripts are recompiled every time unless the scripts are cached. Install a PHP caching product to typically increase performance by 25-100% by removing compile times. 除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

32. Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request. 尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码(OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

33. When working with strings and you need to check that the string is either of a certain length you’d understandably would want to use the strlen() function. This function is pretty quick since it’s operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP). However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase & hashtable lookup followed by the execution of said function. In some instance you can improve the speed of your code by using an isset() trick. 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset()技巧加速执行你的代码。

Ex.(举例如下)
if (strlen($foo) < 5) { echo "Foo is too short"; }
vs.(与下面的技巧做比较)
if (!isset($foo{5})) { echo "Foo is too short"; }

Calling isset() happens to be faster then strlen() because unlike strlen(), isset() is a language construct and not a function meaning that it’s execution does not require function lookups and lowercase. This means you have virtually no overhead on top of the actual code that determines the string’s length. 调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

34. When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don’t go modifying your C or Java code thinking it’ll suddenly become faster, it won’t. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend’s PHP optimizer. It is still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer. 当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

35. Not everything has to be OOP, often it is too much overhead, each method and object call consumes a lot of memory. 并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

36. Do not implement every data structure as a class, arrays are useful, too. 并非要用类实现所有的数据结构,数组也很有用。

37. Don’t split methods too much, think, which code you will really re-use. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

38. You can always split the code of a method later, when needed. 当你需要时,你总能把代码分解成方法。

39. Make use of the countless predefined functions. 尽量采用大量的PHP内置函数。

40. If you have very time consuming functions in your code, consider writing them as C extensions. 如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

41. Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview. 评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

42. mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%. mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

43. Excellent Article (http://phplens.com/lens/php-book/optimizing-debugging-php.php)about optimizing php by John Lim 另一篇优化PHP的精彩文章,由John Lim撰写。

阅读全文

PHP读取索爱的便签 VNote(.vnt格式)

发布于:2010年01月22日 作者:Lay 分类: 查看:10671 回复:1

这两天因为公司年会的关系,要上台说两句,要准备点演讲稿什么的。

但是工作又太多,只能抽空在手机(索爱W595c)上用便笺(有的说便签)来起草下。但是用蓝牙发送到电脑上一看,是.vnt格式,用记事本查看一堆字母:

阅读全文

配置CuteFTP,让它更好用

发布于:2010年10月14日 作者:Lay 分类: 查看:4346 回复:0

CuteFTP使用技巧和心得。

使用CuteFTP也有不少历史了,也积累了一点使用心得之类的东东,这里就一一整理一下,以备不时之需。

阅读全文

解决 Dreamweaver CS4 在 Windows7 下的菜单错误

发布于:2009年11月21日 作者:Lay 分类: 查看:5818 回复:0

解决 Dreamweaver CS4 在Windows7 下菜单栏出错!

最近用上了Windows7,之前在XP的上 Dreamweaver CS4 启动后,菜单都乱了套,重新安装也不能解决。

阅读全文

123456...6页次:5/6 20条/页,共118条