2009年02月01日 01:34
编了6年多的程序。过年的这几天开始正式学习PHP,经过这一个星期的练习,已经初步入门了,比想象中顺利很多,已经可以用PHP编写论坛、博客、网站程序,输出的HTML代码完全保持不变。学习一门新语言最好的方法,就是把以前写过的程序,翻译成这门新语言,绝大多数都有相对应的函数,在Google搜索“PHP 旧语言的函数”,或者搜索“PHP 要实现的功能或遇到的问题”,就可以找到相应的PHP函数。 这几天成功地把我以前写的一些程序,都翻译成了PHP,还用PHP写了一些新的程序。虽然PHP存在着很多的问题,比如substr()和array()等函数不能直接处理中文,不能直接调用中文的文件名,UTF-8编码的网页不能打开Unicode或者ANSI文本数据库,BOM经常会造成报错,等等。但是PHP的函数和数组果然很强大,也容易理解,调用起来也很方便,报错相对较少。如果PHP仅仅用来做英文网页,就不会出现那么多的问题。 因为PHP这几年在国内很流行,建网站还是有很多的便利之处。
2009年01月29日 12:49
PHP的substr()是一个十分重要的函数,可以实现对字符串的处理,例如截取字符串的某部分,如把IP地址220.181.20.58替换为220.181.*.*,需要用到substr()函数。让人郁闷的是,substr()不支持中文,会产生乱码。JavaScript的substr()函数和ASP的Mid()函数,无论是UTF-8还gb2312编码,都可以很好地直接支持中文。 另外如$pep="和平海底"; $auf=$pep[1];,$auf的结果是乱码,而不是“平”。如果使用数组array()函数如:$pep=array("和", "平", "海", "底"); $auf=$pep[1];,$auf的结果是仍然是乱码。 如果substr()或者array()的处理字符是英文或者数字、半角符号,则没有问题。我用PHP4和PHP5测试了一下,都有此问题。在网上搜索了一下,因为PHP把处理的全角字符的字节拆开来处理,ANSI编码拆为2个字节,UTF-8编码拆为3个字节,需要另外一段程序,如“php 截取”。如果大量地使用substr(),再加上另外的这段程序来处理段落的中文字符,在一定程度上大大降低了程序的效率,增加服务器的负担和成本。 PHP的替换函数str_replace(),以及查找字符的位置strpos()函数,则可以很好地直接支持中文全角字符。
2009年01月27日 19:05
程序如: <?$auiou=35080; 运行结果:35,080。
$pep=number_format($auiou, 3, "", ",");
$pep=substr($pep, 0, (strlen($pep)-4));
echo $pep;?>
2009年01月26日 07:31
如果已经设计好程序的思路,着手去开发的话,SNS封闭社区的核心程序的开发时间,至少大约需要1个月;BBS社区的核心程序开发,至少1个月;个人博客的核心程序开发,至少10天;多用户博客的核心程序开发,至少1个月。慢则几个月到几年的时间,因为设计程序的思路,需要一定的时间和经验。 程序搭建之后,可以根据需要,逐渐开发一些其它的功能。在很多应用上,比如社区、SNS、博客,有很多人建议使用开源程序,这的确节省了初期的很多开发时间和成本。但是,100%适合自己的程序,基本上是找不到的;其次,修改开源程序、增加新功能是十分困难的,对于专业的程序员来说也是很难实现的,因为需要深入了解程序的结构;第三,有不少开源程序都很占用服务器资源。与其花大的精力了解别人的程序结构,不如自己开发。做开发,则可以对自己的程序了如指掌,修改程序、增加新功能都容易了许多。虽然初期投入了一定的时间和成本,但是后期对于新功能的开发,则灵活、自主了很多,以及与网站的其它数据相连接,都更加便捷。 博客程序、BBS程序,我都已经亲自完成了,2009年我打算着手开发一个微型的SNS程序。
2009年01月04日 20:37
有这几个任务,一直在考虑去实现,只是很需要时间。 我现在阅读一些网页,经常是按Ctrl+D直接收藏,没几天的时间,现在我的收藏夹,就有新的150多个网址了。
固定链接 | 发表评论(11) | Trackback(0)
EmEditor 3.28和EditPlus 2.11的Bug
2008年11月22日 22:40
我使用的文本工具EmEditor版本是3.28,EditPlus 2.11的版本是v2.11,系统是WinXP SP2和SP3。最近发现它们都有相同的Bug,当一些文本文件中有“英、盈、影、映、莹、楼、搂、漏”等汉字时,整个文件的中文会变为乱码。实际上是当有这些汉字的时候,EmEditor和EditPlus会把原本ANSI格式(GB2312的编码)的文件,以UTF-8的形式打开,所以产生了乱码。用记事本打开文本文件,可以正常显示。 希望其它版本的EmEditor和EditPlus能解决这一Bug。
2008年11月04日 12:54
在做注册程序验证码用户名是否可用、在线上传文件、删除文件、投票程序等不需要刷新网页即可出现结果的程序的时候,可能需要用到Ajax。其原理是JavaScript通过onChange、onClick、onMouseOut等事件取读网页当前的一些用户操作的数据,然后将这个数据传送给一个动态网页进行处理。 但有时候,这个动态网页并不运行。我以前曾遇到这个情况,当时解决了,就是给这个动态网页写入不缓存于客户端的语句。前天再次遇到这个情况,动态页有时运行,有时不运行。昨天试验了很多次,再次解决问题的时候,想起了以前曾遇到过这个情况。 Ajax调用的动态页,应该要让这个动态页不载入客户端的缓存。同理,Blog的Trackback程序,经常无法接收信息,可以尝试在Trackback程序的动态页写入使其不写入缓存的语句。
2008年07月11日 13:02
我的Blog首页目前有73个友情链接,但从未统计过从我的Blog中点击出去的次数,感觉还是有点遗憾。在程序上实现,借助Ajax,已经测试成功了,如这里的方案。实现的效果如下图: 因为需要连接到一组新的数据库,并产生73个变量名,可能会使页面处理的速度稍微慢一点点,也可能感觉不出来。这似乎还不是一个至关重要的应用,所以在性能和应用之间,为了保证更高的性能,还是迟迟没有使用它。
固定链接 | 发表评论(24) | Trackback(0)
2008年07月05日 11:08
我第一次编写的论坛程序,在2002年10月完成,直到2003年,程序进行了5次大调整,就是后来的Webshu网页论坛。那时候对程序是十分不熟悉、陌生的,效率很低。不管写什么程序,只要有连接数据库的,就感觉像是一个大工程。现在建立数据库,比以前自然轻松了很多,只要规划好就可以了。可见,以前看似很复杂的事,只要熟练了,习惯了,就没那么难了。 2004年~2005年这2年,我几乎没有为自己的网站写任何程序,因为这对我来说是人生职业选择的一个时期,当中也在为职业选择做很多其它的事情。2006年5月,我的Blog程序完成了,“和平海底”Blog开通了。Blog程序与新闻系统、论坛程序,都是一样的,所不同的是Blog程序增加了RSS和Trackback,仅仅是多了这两个功能。 我现在编写的论坛程序,也包括我编写的Blog程序,核心技术的代码大约40行左右。因此,只要熟练运用核心代码,大多数功能都可以实现。由如此简单的核心代码,实现了极其复杂的前台交互和后台的数据处理的功能。程序与代数很相似,需要经常推导公式,多维数组也经常会用到,以及统筹顺序,习惯了就很好理解。编写程序并没有想象中的那么恐怖,它就像写作一样,是一个累加的过程。有极强的连贯性,如果不休息,一口气把一个大型的程序编写完毕需要100小时的话,如果按照正常的休息时间可能就需要2个月完成。因为休息之后,工作状态会大减,对前面所做的一些工作也会遗忘。 我现在编写的这个全新的代码、新版的论坛程序,已经编写了10多天。这几天几乎没有因为编写程序而感到头晕,反而感觉到一种轻松,我也觉得很奇怪。可能有这些原因:1、因为效率比以前提高了很多,程序的方法大多也是运用已经熟练的老方法,创造性的脑力劳动减少了。2、我这台新电脑是3G的赛扬D,速度比以前快了很多,用上去十分顺手和轻松。3、每天都有锻炼身体,体力加强了。以前写Blog思考哲学问题的时候,倒是经常头晕,有时候严重到了一思考十分钟就开始头晕。然后出去走一走,锻炼锻炼身体,头晕只能减缓一些。这可见,思考、学习新问题的时候,大脑皮质在发生变化,人很容易感觉疲劳。反复运用已经熟练的知识、技术和经验,就不那么容易疲劳了。
固定链接 | 发表评论(12) | Trackback(0)
2008年03月19日 08:33
网站计数器的统计方式有很多种,最常见的是刷新一次即增加一次,或者服务器记录多个用户的IP,在线的用户在一定的时间内刷新,计数器不会增加。我觉得这两种方式相对都比较消耗服务器资源一些,刷新一次即增加一次,服务器总是在频繁写入;记录多个用户的IP,同样也是让服务器频繁地写入。所以在2002年我设计和制作的网站计数器程序,只记录最后一位访问者的IP地址。这样的优点是减少服务器的负担,在线的某位用户刷新网页,计数器不会增加,只有其他的在线用户刷新网页,计数器记录的最后的IP地址才会改变。 但是这样的缺点是,如果总是一位访问者在访问某个网页,这个网页的访问次数总是不会改变,会让统计不准确。现在我设计了一个新的方案并测试成功,在记录最后一位访问者的IP地址的基础之上,再记录最后一位访问者的访问时间。如果IP地址没有改变,可以设定如果这位访问者在2分钟、5分钟或者15分钟、30分钟之后访问时,计数器会增加。当前的时间和最后访问时间做减法,如果差值大于1、大于4、大于14、大于29,或者IP地址不同时,则增加一。这样,可以在一定程度上提高大型网站的性能。
2008年03月15日 18:14
如果只做编程,不做其它事情的话,我现在一天大约可以完成3~8个功能的程序设计和编写,包括大的程序段和小的程序段。这一个多月,每天都是以3~8个功能的这样的进度完成的。每当我把要完成的功能计划出来,然后开始设计、开始去写的时候,很像是长长地吸了一口气,潜入水中。还没有动手写程序的时候,每次总是有些恐惧,因为总觉得可能会有很大的工作量,程序失败的机率也是常常有的,这样不行就经常要换其它的方法和思路。 现在每天大约20~30分钟就可进入最佳工作状态,编程很需要集中注意力。如果注意力不集中的话,可能这项工作会越拖越久,那种感觉可以用恐怖来形容。每天看着“√”越来越多,实现的功能越来越多,心里总是感到一种凉爽。
2008年03月10日 17:20
我现在养成了写工作计划和日记的习惯。我的工作计划和日记主要是写给自己看,所以写起来很简单。一条工作计划或日记可能只有几个字,或者十几个字,或者几十字。在我的程序编写工作中,所有要完成的小细节、想到什么要实现的功能、要修改或增加的程序,就马上记下来,完成之后打勾。 这样写工作计划和日记很轻松,可以很清楚地让自己看到自己的工作状况和生活状况是处于哪一个阶段,能够看到自己的振动频率,减少焦虑。这种方式,很有助于工作的进展。
2008年03月09日 23:07
与大家的Blog一样,我的Blog过去经常收到spam。在没有任何自动过滤、验证码的情况下,每天至少会收到10~30条,甚至更多。有的spam是用ping的方式,post处理程序正好能接收,所以不做过滤的话,一天可能会收到上百条spam。 我编写了几次程序,经过这样的一层一层过滤,已经大大减少了spam:Trackback的地址和评论的action地址用字母和数字混合、临时更改Trackback的文件名、临时更改评论的action地址、网址自动过滤、临时的验证码、自动验证码、自动封闭IP。 自动验证码使用了一个月,效果十分好,这一个月只收到四五条人工spam。这些spam有一个特点,就是留言内容里至少有一个网址,或者是超链接的HTML代码也写在留言内容当中。凡是留言内容中含有网址,则自动出现验证码。很高兴的是,spam发送者都不输入验证码。 spam问题终于彻底解决了。可见,验证码对人工spam十分有效。
2008年03月07日 22:19
这三个星期又完成了几十项功能的程序编写。在我这7年的网页设计、期间有5年的编程工作的这些经历当中,我觉得不少时候,编程反而比网页的页面设计容易。可以做一个比较形象的比喻,编程就好比是几何与代数,设计好比是美术,撰稿好比是写各种学科和专业知识的稿子。编程、设计和撰稿这三者的共同之处是,工作量庞大。 编程容易的方面是,在对数据的处理方面,大多数功能都可以实现出来,因为编程的过程与解几何题、代数题非常类似,只要数学问题可以解决,编程就可以逐步解决,算法更好,程序的效率就会更高,运行速度就会更快。对于编程而言,方法就是所谓的灵感,因此灵感往往来得比较自然。页面设计的灵感则来得很慢,因为页面设计是凭空去想象和创造,完全不知道自己的灵感是处于哪一个时空。我十分注重用户浏览的舒适度、页面设计的时尚风格,我浏览过的平面设计案例超过30万件,但仍然是常常无从下手。所以有时候,我在页面设计方面所需要花的时间,要远远多于编程。当我把更多的精力放在了编程方面,网站有了更多、更好的功能,所以页面浏览的体验也会变得不一样,会有一种更新鲜的感受。
2008年02月16日 22:45
我过去编程时做的记录很少,只是记录一些很重要的数据。而很多功能上的细节,从来不会记录。以至于一两年之后,读不懂自己写的程序。因为程序行数越来越多,程序文件越来越多,以前总觉得记录细节很麻烦,我都是从读自己的程序中,找出相应的细节。 最近养成了一个习惯,把要实现的功能、要修改的程序,都在一个文档上写下来,一想到什么全都记下来,完成之后就给它打勾。不记录不知道,一记录吓一跳,这几天已经完成了整整30个功能的程序的编写。以后翻查这个文档,能够更加熟悉自己编写的程序的功能,让程序更有价值。
2008年02月15日 09:49
这几天仔细研究了一下DIV+CSS,它的应用确实很不错,入门也较快。了解和学习DIV+CSS的最好方法就是,找一个最简单的教程,然后多练习几次,熟悉了这个原理,就能举一反三。DIV+CSS是近一两年开始在国际上流行起来的,很多共享的Blog程序,都是使用DIV+CSS的代码布局。 从本质上来说,DIV+CSS是网页技术人员的一个创意,把过去的table布局,使用DIV元素代替,然后这个创意,被广泛应用。我们具体谈谈DIV+CSS如何在重构网页上有优势。如果是单个网页进行重构,DIV+CSS代码布局比table布局不会有任何优势。当有很多个网页,如果重构后的DIV元素数量保持不变的话,只要更改公共的CSS部分即可,所有的网页都会一次发生变化。而使用table布局的网站,如果网站使用编程的话,公共程序无论是使用DIV+CSS还是table布局,也是更改程序就会一次发生变化。但是当有很多个公共程序的时候,或者有单个程序的页面,就需要一个一个网页地改。 在设计DIV+CSS布局时,需要非常注意DIV的区域名称的统一,以便于重构的简便。但是,网站并不需要频繁地重构,所以DIV+CSS在重构方面的优势就无法发挥。table布局的优势在于,它的历史比DIV+CSS悠久,table的使用简便。 DIV+CSS是否比table的结构更为清晰呢?我觉得不会,都一样,甚至非常之类似,几乎没有大变化。如果感觉不一样,可能是阅读代码的习惯不一样。DIV+CSS这一两年的应用,也在很大程度上推动了CSS的进展,使w3c标准得到了推广和日益普及。在DIV+CSS结构的网页中,几乎每一个元素的属性都是使用CSS定义,所以对于网页区域、元素的调整,真的起到了很大的便捷作用。而table布局中,如果table元素、td元素都是使用HTML参数,修改时可能需要进行批量修改。 顺便说说程序的调整和重构,它与DIV+CSS重构稍有类似。有时候,有好几个程序文件,需要同时更改多个变量名,或者同时删掉某部分,或者同时增加某段程序,需要一个一个程序地改,经常觉得很费时费力。减少这些重复重构的方法就是使用include文件,当然include的设计还是要花很多的心思,有时候已经把很多程序都做完了,还不及设计include文件。之所以这样,是因为include文件可能应尽量减少,不轻易使用,避免无法加载include文件而使网页报错。 总之,使用DIV+CSS还table布局,都没有关系,喜欢用哪一种就用哪一种,各有各的好处。如果你的网页在100K以内,完全可以使用table布局。DIV+CSS在页面下载方面,确实有table布局无法比拟的优势。DIV+CSS是一边下载,一边显示网页;大的table则是下载完毕之后,才显示这个table。table的解决办法就是,上下切割为多个table,就可以更好地一边下载一边显示网页。
2008年02月09日 20:34
用户留言的网址,可以在程序中实现自动认证,做起来也较容易实现。这里的认证,就是指如果留言的用户的网址在认证列表中,则会正常显示。其认证程序的方案如: 至少建立2组数据库。第一组数据库是已认证的网址列表;第二组数据库记录的网址列表,是当不希望该用户留下此类网址的时候,比如我的Blog的留言用户的网址,我只允许Blog地址,其它类网站的网址我都做了手工删除。有了这第二组数据库,这类网址会自动删除,而不需要我手工删除了,节省了很多的工作量。 当然,还可以建立第三组数据库,记录发送spam者的网址。如果网址一旦在这第三组数据库,则自动封闭IP。这几组数据库之外的用户网址,则进入审核后台来手工操作,一旦认定安全,则列入第一组数据库。这个认证方案,比较适合不需要用户注册的Blog,防止了不少spam,大大减少了经常人工检查用户的URL的工作量。 当然,如果想给第一组数据库的列表锦上添花的话,可以建立第四组数据库,当用户的网址在第四组数据库当中,则在用户留言之后,Blog页面出现相应的问候语。如果经常分别更新这些问候语,倒蛮有新意的,又增加了用户粘度。
2008年02月09日 14:19
一些访问量大的程序,需要进行不断改进和优化,将一些语句改为使用if导入include的文件(也就是if条件符合,则导入;不符合则不导入),这样的方式可能可以提高程序的效率。其它的优化方法还有很多种,在实际的编程中,可能会想到很多种方法。如何对比优化前后的执行效率的差别呢? 把要测试的程序部分,使用循环语句,让它们分别循环100次、1000次、1万次、10万次。然后分别测试一下优化前后的程序的运行时间,假如优化前让它循环1万次需要的时间是50秒,优化后让它循环1万次需要的时间是10多秒,说明程序效率提高了很多。
2008年02月07日 16:29
最近每天在审核后台总是有1~5条人工发送的spam。当我这几天启用验证码,需要用户输入的时候,这些spam就不见了,可见spam的发送者并不喜欢输入验证码。这些spam有一个特点,就是留言内容里至少有一个网址,或者是超链接的HTML代码也写在留言内容当中。刚才修改了一下程序,新规则是:只要留言内容中含有网址,就会自动跳出验证码,spam发送者就会没兴趣发了。正常发送评论的朋友,将不受任何影响。 还有一条老规则就是:当发布垃圾广告的时候,会自动封闭IP或者自动关闭一些评论功能。这条老规则使用了一年多,给我的Blog减少了大量的spam。这里的“垃圾广告”,我所见过的就是含有很多个网址的留言,正常参与者肯定不会这样发送,有时候我会在后台设定为多于或等于3个网址,系统自动认定为垃圾广告,有时候设定为超过5个网址。
2008年02月04日 10:12
漏洞总是层出不穷,可能认为很安全的业务当中,却存在着漏洞。我的银行帐号密码、手机用户密码,不敢在互联网上登录,哪怕只是查询一下余额、查询一些相关的业务。因为黑客技术是另外的一个世界,黑客技术就是利用网站的编程漏洞,或者业务流程中的漏洞,然后达到其目的。 这些黑客的操作流程,完全是在我们想象和注意力之外。木马的制作和传播的方式有无数种,在用户完全不知情的情况下就中了木马。如果在网上用自己的密码登录,说不定哪一天银行帐号里的钱就会被全部盗光,说不定哪一天自己的手机卡就换成别的主人,想追也没有办法追回来。
2008年02月03日 23:33
在循环程序中,如果某个变量是通过if判断而得到的值,这时候必须给这个变量清零,否则会出现意想不到的运算结果,而让程序出错。这个清零的赋值语句,可以放在每次循环的开始,也可以放在每次循环的结束部分。我现在在做的一个程序就是有100多行的语句,让这100多行的语句循环运行20次以上。 如果变量是数值型,可以赋值为0;如果变量是字符串型,可以赋值为""。如果不清零也可以,只要在非if语句之外,有这个变量的赋值语句就可以了。
2008年02月02日 22:33
我2006年写的一些程序,现在读起来还有一些印象,但是有些部分已经完全读不懂。我写过的程序当中,有一些程序的思路很简单,读起来容易些。但有些程序很复杂,程序的行数越多,就越难读懂。要完全读懂自己写的这一部分程序,至少要3天的时间。在需要修改这些复杂的程序时候,先把它读懂,再继续来做,会节省不少时间。实在懂不读的时候,重新再做一遍,这样就明白以前为什么这样写了。有时候重新做,比修改要快。 写程序和写文学作品一样,需要连贯,停下了,就会停得更多。越写就越会写,越不写就越不会写。写程序最好一气呵成,如果一个月就可以连续写完的话,断断续续两年也完成不了。
2008年01月20日 10:19
如果有A、B两个网页,想统计B页的点击次数的话,通常的统计方式是:从A点击,打开B页,在B页写入统计的代码或者程序。但是,如果B页我们无法修改,不能在B页写入代码,怎么办呢?例如,如果想统计友情链接的每个域名的点击次数,就是属于这种情况,只能在自己的博客页面(父窗口)做修改。 方案是,建立一个JavaScript的function aa(bb){},想统计点击次数的超链接的写入方式是<a href="http://www.auiou.com" onclick="aa(23);">文字</a>。前面的{}部分,onclick后的结果要让它产生类似于一个以前的网页特效,就是在当前页点击某文字,当前页某部分的图片、或者文字即出现,所不同的是,这里要让它出现的换成了代码,而不是图片或者文字。然后,可以用很多种方式的程序来实现。比如,可以让它用.js的方式调用一个asp或php文件,如document.write('<script src=http://…….php></script>'),在这个asp或php文件中写入计数器的程序。或者,使用<iframe>的方式,iframe的目标页也是这个asp或php程序。 这样,就实现了在B网页不做任何改动,而由A网页来分别统计很多个B网页的点击次数。
固定链接 | 发表评论(13) | Trackback(1)
2008年01月05日 11:32
很多Feed服务者都提供RSS订阅数统计。尽管这个统计数字对很多Blogger而言没有太大意义,但这个统计数字仍然在较广泛地使用。或许有不少Blogger是因为Feed服务者有订阅数统计的功能,才选择Feed托管。 我的Blog是自己编写的程序,所以改动程序会感觉很方便。使用Wordpress、LBS、 PJBlog、Z-Blog等等的用户,如果不使用RSS托管,而想让自己的RSS能够实现统计订阅数的话,通过编写程序,还是可以实现的。只要有思路,绝大多数的程序都可以实现。 我的设想是这样的,订阅数的统计方式很可能是当对方添加你的RSS地址,验证RSS有效性的时候,或者第一次更新RSS的时候,你的阅读数就会增加一。如果阅读者使用网络版的在线RSS浏览器,无论是换了一台电脑,无论如何刷新,阅读数都不会再增加一。而如果阅读者使用如“周博通”RSS阅读器的客户端软件,每安装一次,重新添加你RSS地址,阅读数极可能会再增加一。因为客户端的RSS阅读器是不需要注册的,没有办法识别阅读者。基于这个原因,订阅数就会变得不准确。 至少有2个办法可以给你的RSS增加订阅数统计的功能:1、读者刚添加你的RSS,在验证RSS的有效性的时候,在这里做一个统计的程序。2、或者在xml文件里多写一个<item>,这个item是永远不会更新的。因为它只会下载过一次,所以实现了统计订阅数的可能。 方法2的好处是,如果你的博客已经开通很长时间,当你这次修改程序的时候,你的老读者仍然会下载这个固定不变的<item>,所以这时候订阅数会增加一,而以后则不会再增加一,这样就实现与Feed托管服务者完全一样的订阅数统计的功能。
2007年11月01日 11:58
其实不需要。有的网站密码,强制使用字母与数字的混合,目的是提高安全性,防止密码被破解。可是,这种强制方式似乎并没有起到多少作用。可以做一下对比,强制字母与数字混合,如果密码中不含特殊字符(如~!@#$%),26个英文字母(如果服务器程序设定为区分大小写,则为52个),加上10个数字,以6位以内的密码为例,破解一个字母与数字混合需要的次数是:1、当区分大小写时,626+625+624+623+622+62=57731386986,约577.31亿次;2、不区分大小写时,366+365+364+363+362+36=2238976116,约22.39亿次;3、纯字母,区分大小写时,526+525+524+523+522+52=20158268676,约201.58亿次;4、纯字母,不区分大小写时,266+265+264+263+262+26=321272406,约3.21亿次。破解一个使用纯数字的密码需要的次数:106+105+104+103+102+10=111110,约11.11万次。 由上述的数据可以看出,使用6位以内的纯数字,约有11.11万种组合,使用6位以内的字母与数字混合,约有577.31亿种组合(程序区分大小写)和22.39亿种组合(程序不区分大小写),使用6位以内的纯字母,约有201.58亿种组合(程序区分大小写)和3.21亿种组合(程序不区分大小写)。 这些数字虽然差别很大,但是在实际使用中,6位以内的纯数字的11.11万种机率的安全性,已经是很高了。而577.31亿种组合与201.58亿种组合,实际应用中差别并不大,因为当服务器在短时间内收到太多的请求,就像是遭受到了攻击,服务器应该尽快采取措施来避开攻击;同时,服务器程序可以使用多种方式来避开密码破解程序。Google对帐号的密码安全级别自动评定程序,参考价值就少了很多,也许只是起到提醒用户选用更加难猜的密码。 因此,强制字母与数字的混合只是提高安全性其中的一种方式,但它不是绝对有效的。因为原有的安全机率已经很高了,在盗号木马面前,所有的密码安全级别都一样。在用户体验方面,因为我很少使用数字与字母混合,在遇到强制字母与数字的混合的网站,下次再登录时,容易忘记密码。
2007年07月29日 00:02
Blog评论留下网址有这些好处,Blog地址是用户的网络ID,给用户归属感。我的评论功能的input表单主要有“名字”和“网址”2项,当审核后台的spam多的时候会启用“验证码”。 但是大约有5%的用户,“网址”并不是填写他们的Blog地址,而是填写电子邮箱地址,或者是一个英文单词,或者是一句中文,或者是填写“没有”。我在后面特别提示“可省,仅限于您的Blog地址或者专栏地址”,但是仍然存在这些情况。所以我对用户添写的网址做自动过滤,规则有2条:1、凡是网址处填写的网址包含“@”这个符号,网址会自动清除,因为这多为电子邮件;2、凡是不包含“.”,网址也会自动清除,因为这不是网址。例如用户填写http://abc,网址就会自动清除。 “名字”和留言内容不受影响。
2007年05月06日 23:54
条件语句是程序中的极其核心的部分。在处理一些复杂的条件语句的时候,可能会套用多层的if,在程序中也可能会用到else。但是如果你用了2层if、3层if,或者更多的时候,则不要用else,因为这样会让本来简单的程序的原理,变得十分复杂。一个月之后再来读这段程序,自己都会读不懂。以PHP以例,如果遇到这种情况: if ($a>=500) 如上所示,套用2层的if,使用了一个else,这个程序的逻辑关系就变得十分复杂。可以这样做简化: if ($a>=500) {$c==1} if ($c==1) {statement} 这种原理,是把$c和$d作为临时变量,用临时变量来传递信息,代替else,在这里的第9条中我有提到。在复杂的程序中,可以多次调用这些临时变量。以Blog程序为例,如果用户发帖时没有写名字,$c等于2;如果没有写内容,$c也等于2。$c默认为等于1,当等于1的时候,就可以成功留言。这就是减少用else的方便之处,便于读懂程序,思路清晰。
{statement
if ($b>=300 && $b<=2000)
{statement2}
}
else
{statement3}
if ($a>=500 && $b>=300 && $b<=2000) {$d==1}
if ($a<500) {$c==2}
if ($d==1) {statement2}
if ($c==2) {statement3}
2007年04月09日 16:52
QQ的消息发到对方,对方就会收到,这是目前几乎所有的消息传递的流程,比如电子邮件、MSN消息、QQ群消息等等。有一种特殊的情况,就是如果已经误发给别人,不希望对方看到这条消息,这时候就需要紧急撤消。从编程序的技术角度,实现这一功能是比较容易的,因为只要有了程序的设计原理,就可以实现。程序的原理是这样的: 以QQ这款IM软件为例,比如我发给对方一条消息,QQ的聊天记录会显示“自由勇 16:48:31”,完整的记录为“自由勇 (2007-04-09 16:48:31)”,请注意,这2个记录都可以做为一个关键词,或者是字段值。因此,当我误发给某一个人的时候,我马上进行紧急撤消,程序后台会去搜索“自由勇 (2007-04-09 16:48:31)”,对此条消息进行删除。如果对方在线,会从对方的聊天记录中删除这条;如果对方不在线,则会从中转服务器中删除。 之所以可以把“用户名+时间”作为搜索的关键词,是因为在一秒钟的时间内,同一个人不可能发出2条不一样的留言,人类的思维还没有快到这种程度,因此程序设计者尽可以放心去这样做。 电子邮件、MSN、QQ群都可以应用这一原理,实现这一功能,需要电子邮件提供者、MSN开发者、腾讯提供程序支持。之所以需要这种紧急撤消的功能,也许每个人都会有那个万分之一,或者十万分之一机率的误发重要消息的时候。
2007年02月25日 17:48
很多功能在没有剖析原理之前,看起来总是那么酷,就像是披着神秘的面纱、穿着华丽的外衣,这些功能应用起来,总是会放出夺目的光彩。动态页(如asp、php、jsp、asp.net)与静态页(htm)相比较而言,最方便的是动态网页可以使用include,而静态页只能使用.js文件。include产生的结果,与直接写在网页上的数据完全相同。 这里要说的2台服务器部分数据实现同步更新,例如我有一个网站是a.com,我的Blog地址是b.com,我想使用include的方法在a.com显示b.com的最新内容,有2种解决方案:方法一、在b.com用xml语言产生rss文件,然后在a.com远程调用这个xml文件;方法2、在b.com做一个form的post程序或用xml语言编写post程序,在a.com做一个处理post的程序作为接收,而产生让a.com来include的动态文件,如*.asp、*.php。这个post的action地址是保密的,最好使用hidden的input做验证,同时在a.com做地址的来源检测,如果http头不是b.com,则拒绝更新。 此include的原理也可以应用到你的门户网站,例如你的网站某部分的数据需要经常更新,你可以用很多种方法来更新这些include文件,例如上述介绍的post原理,也可以在站内让程序做处理。这里要举一个Blog的例子就是刘韧老师刚开通的liuren.org,首页的Blog最新条目,是使用include方法而不是.js文件,很酷。 当然,这里的前提是2台服务器都需要支持程序语言,语言种类可以不同。这种原理就好比是开通了一个或多个的“秘密通道”,你就可以轻松让很多人来编辑同一个网页。由此可见,编程的好处在这里又可以体现出来。
2007年01月17日 12:15
语言设置指的是<meta>这里的charset,如简体中文是charset=gb2312,UTF-8是charset=utf-8;文本编码指的是文件的储存格式,我们新建的文本文件默认都是ANSI格式,所以不能含有如©、®这类字符。为了不让网页出现乱码,语言设置和文本编码应该相对应,简体中文的文本编码格式是gb2312,UTF-8文本编码格式是UTF-8。语言设置和文本编码对于任何客户端网页都适用,如.htm、.asp、.php、.jsp、.aspx的网页。 ANSI和UTF-8文本编码的体积,我这里做了一些实验,同一个字符重复N次,均去掉了Unicode签名(BOM),如下表: 总结:(以下的byte就是字节) 1、半角的字符,如英文、数字、半角符号,ANSI和UTF-8文本编码的体积比是1:1,UTF-8格式会多出3个byte。 总之,英文、数字、半角符号,在ANSI和UTF-8编码格式下都占用1个byte;中文,全角标点,在ANSI下占用2个byte,在UTF-8下占用3个byte。字符 编码格式 重复次数 文件体积 英文、半角字符: a ANSI 100次 100 bytes A ANSI 100次 100 bytes a UTF-8 100次 100 bytes a UTF-8 1000次 1000 bytes a UTF-8 10000次 10000 bytes 汉字、全角字符: 好 ANSI 100次 200 bytes あ ANSI 100次 200 bytes 好 UTF-8 100次 300 bytes ® UTF-8 100次 200 bytes 한 UTF-8 100次 300 bytes 好 UTF-8 1000次 3000 bytes 好 UTF-8 10000次 30000 bytes Unicode编码格式: a Unicode 100次 200 bytes 好 Unicode 100次 200 bytes ® Unicode 100次 200 bytes 한 Unicode 100次 200 bytes 한 Unicode 1000次 2000 bytes
2、中文字符,ANSI和UTF-8文件的体积比是1:2,UTF-8格式多出3个byte。
3、©、®这2个字符,在UTF-8格式下,与中文字符的体积一样。
4、韩文字符不能使用ANSI格式。韩文在UTF-8格式下,一个字符占用3个byte;韩文在Unicode格式下,一个字符占用2个byte;
5、Unicode码则比较折中,所有字符都占用2个byte。
| (点击申请) |
文章分类 Category:
Blog的发展 Development
为什么写博客 W-do we Blog
互联网 Internet
社会 Society
教育 Education
BBS社区研究 Community
编程 Program
友人 Younet
QQ研究 QQ Research
公告 Announcement
最新的评论 Comments:
» 毁谤别人的匿名者
» 一家门户网站的博客管理
» Entropay(欧贝
» 又一位不可思议的扮音天
» Google搜索结果在
» 声卡无声硬件排除一例
» 如何关闭ixwebho
» 今天值得纪念的数字
近期的主题:
2012-01-26:多了解一些信息没有坏处
日益低效的快递
关于香港地铁吃东西事件的翻译
2012-01-15:怜悯和爱
惨不忍睹的网站空间(人为造成)
QQ空间不能发表日志/说说/微博解决一例
新年的钟声敲响了
惠州之印象
2011-10-20:最近4个不好的用户体验
女童遭辗压无人帮助视频之感想
网络才是真实的,现实一切都是幻象
本博客的程序有发布的计划
真正的神曲和一些圣乐分享和回顾
Go Daddy的97.74 IP段又被大规模killed
时间过得很快
国外的域名查询也不安全
祝我31周岁生日快乐
有关国内近两年史无前例的清晰的UFO
Android(安卓)平板电脑的使用体验
2011-08-24:经验 & 近期动态
2011-08-03 养花
2011-06-18
2011-06-02:同龄人年轻程度却相差10岁
2011-05-28:随谈(浅谈)中英文输入速度
Go Daddy空间切换系统更换IP时现在需要慎选4GH主机
2011-05-18:随谈现实与理想(8)
随谈:2011-05-18 贴吧与新闻评论的管理
随谈:2011-05-13 心情很沉重很沉重
随谈:2011-05-08 有良知的人会提升
博客不应大量转载
随谈:2011-04-28 通过网络调查真相当中的一个途径之一
有关UFO与2012的谦卑交流与解答(1)
cPanel的主机网页长时间500错误解决一例
版权声明:本博客所有文章,均符合原创和创作共用的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
和平海底2 | Auciou | 自由勇专栏
公益:UFO与真相研究交流区
Gratitude | Time
Blog存档 Archives
2012年01月(N)
2011年10月(8)
2011年09月(4)
2011年08月(2)
2011年06月(2)
2011年05月(6)
2011年04月(10)
2011年03月(16)
2011年02月(16)
2011年01月(15)
2010年12月(12)
2010年11月(9)
2010年10月(3)
2010年05月(4)
2010年01月(7)
2009年12月(10)
2009年11月(4)
2009年10月(8)
2009年09月(24)
2009年08月(20)
2009年07月(6)
2009年06月(11)
2009年05月(16)
2009年04月(20)
2009年03月(29)
2009年02月(18)
2009年01月(15)
2008年12月(17)
2008年11月(10)
2008年10月(13)
2008年09月(8)
2008年08月(4)
2008年07月(5)
2008年06月(9)
2008年05月(12)
2008年04月(15)
2008年03月(26)
2008年02月(22)
2008年01月(29)
2007年12月(30)
2007年11月(28)
2007年10月(30)
2007年09月(8)
2007年08月(8)
2007年07月(21)
2007年06月(23)
2007年05月(31)
2007年04月(34)
2007年03月(29)
2007年02月(18)
2007年01月(41)
2006年12月(23)
2006年11月(10)
2006年10月(10)
2006年09月(29)
2006年08月(33)
2006年07月(17)
2006年06月(30)
2006年05月(4)
2006年01月(3)
2005年09月(4)