|
王志勇(自由勇):程序设计。 公历1980-09-26 天秤座 我的联系方式:信息反馈。 与此相关的链接 Blog存档 Archives 2008年09月(1) 版权声明:此网志按照创作共用约定的方式授权,请勿转载。 本Blog使用中国电信服务器 |
友情链接的点击次数统计 2008年07月11日 13:02 我的Blog首页目前有73个友情链接,但从未统计过从我的Blog中点击出去的次数,感觉还是有点遗憾。在程序上实现,借助Ajax,已经测试成功了,如这里的方案。实现的效果如下图: 因为需要连接到一组新的数据库,并产生73个变量名,可能会使页面处理的速度稍微慢一点点,也可能感觉不出来。这似乎还不是一个至关重要的应用,所以在性能和应用之间,为了保证更高的性能,还是迟迟没有使用它。 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思考哲学问题的时候,倒是经常头晕,有时候严重到了一思考十分钟就开始头晕。然后出去走一走,锻炼锻炼身体,头晕只能减缓一些。这可见,思考、学习新问题的时候,大脑皮质在发生变化,人很容易感觉疲劳。反复运用已经熟练的知识、技术和经验,就不那么容易疲劳了。 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网页的点击次数。 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的方便之处,便于读懂程序,思路清晰。 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次,如下表: 总结:(以下的byte就是字节) 1、半角的字符,如英文、数字、半角符号,ANSI和UTF-8文本编码的体积比是1:1,UTF-8格式会多出3个byte。 总之,英文、数字、半角符号,在ANSI和UTF-8编码格式下都占用1个byte;中文,全角标点,在ANSI下占用2个byte,在UTF-8下占用3个byte。 2007年01月09日 21:54 尽管此Blog将Trackback地址用字母和数字混合,如“kqvu00001174“,今天在审核后台却无休止地收到很多的垃圾Trackback,原来的程序已经不能自动封闭一些IP了,需要做改进。我的2个新方案如下: 方案1:朋友们发送Trackback和评论之前,必须先点击我设定的一个页面,写入Cookies,才可以发送Trackback和评论,实际上相当于匿名登录。如果垃圾制造者仍然发送Trackback和评论,我马上更改相关参数,提示朋友们重新点击我设定的页面,就可以避免这些spam。 方案2:更改Trackback程序的文件名,相当于更换电子邮件地址。因为很多Trackback地址已经被加入到spammer的“收藏”中了,我们要让它失效。 审核后台的垃圾Trackback很多,他还在不断地发送,现在临时改变了Trackback程序的文件名,朋友们可以点击“直接发送Trackback”来Trackback给我。 2006年10月04日 10:54 当超过10项的搜索结果,Google会自动分页,你是否曾注意到,这个分页的链接,只出现在网页的底部,而网页顶部却没有分页的链接?分页的链接如下图: 从用户体验的角度,如果顶部也出现分页链接,实际上可有可无的。因为按照逻辑的操作,用户起码应该是快速浏览完每页的10项搜索结果,才会浏览下一页,或者干脆按键盘的“End”键,跳到网页底部,按“下一页”。所以说,顶部的分页链接作用不大。除非是网页一屏就显示所有的内容,顶部的分页链接才会起到作用,但这时候仍然是可有可无的。 从程序设计的角度,按照逻辑的程序设计,如果顶部也出现分页链接,如果仅仅在服务器端的程序做处理,必然要让循环程序再多循环一次,因为每天海量的搜索,这将耗费无数的服务器CPU、内存资源。也可以在客户端用JavaScript,将分页链接显示在顶部,这样就会减少一次循环。这种JavaScript方式,在我的程序中,得到了应用,也就是使用将后面的变量值提前到赋值之前来调用,网页的任何位置都可以在客户端显示服务器端程序的任何变量,而不用顾虑变量赋值的先后,其原理是……,这样的好处一是可以不用position:absolute而可以精确定位,二是Firefox竟然能够识别这样的JavaScript。今天正好想到了Google的分页链接的设计。 总之,Google的这种细微的人性化设计,也就是在一定情况下,顶部不需要分页链接,为产业起到了榜样的作用。 2006年09月02日 20:34 很多做网页的用户都在问,哪个网页制作软件好?4年前,我这是样回答的:“编辑器用FrontPage或者Dreamweaver,或文本工具。图像软件用Photoshop,Flash软件用Flash5。要学会撰写文章、网站策划”。那么是FrontPage好还是Dreamweaver好? FrontPage和Dreamweaver大家应该很熟悉,是最著名的网页编辑工具。FrontPage是微软的Office中的一件组件;Dreamweaver是Macromedia公司出品的网页三剑客其中的一个软件。FrontPage和Dreamweaver只要任选其一即可,用哪个都一样。究竟这两个哪个好,我一直不敢做结论。但我个人的感觉是,其实都不好。 我是在2000年12月份开始用FrontPage自学做网页,做出了很多的网页。4个月之后,发现FrontPage产生了很多的垃圾代码,没多久就学会了手写HTML代码,当时使用Windows98的记事本,垃圾代码就再也没有了。电脑报纸上很多的文章,都在讲Dreamweaver,当时Dreamweaver是“公认”的专业网页制作软件。我当时对这种公认产生了一点质疑,因为Dreamweaver产生的垃圾代码数量与FrontPage差不多,怎么能算是专业级的呢?当时还年轻,我的质疑并没有成为刻骨铭心的观点,或者说是很轻微的质疑,不喜欢用就是了,所以也没多想。Dreamweaver就没有用过,因为没必要。任它有再强大的功能,对我来说,都用不上。 EmEditor是我用过的最好的文本工具,也是我的网页制作最常用软件,非常好用,可以很好地支持ANSI编码、UTF-8编码、Unicode编码、big5编码等世界各国编码。2005年、2006年是我每天编程序时间最长的时候,我使用ASP和JSP语言编写网页程序,也是用EmEditor编写,非常好用。选择语言很重要,各有长处,2003年以前,受宠的是ASP,目前受庞的是PHP、ASP.net。我建议大家还是学习PHP、JSP编程,国内的“主流”,早一天选择对的语言,就节省无数的时间。 我现在的网页制作过程是,用EmEditor编写基本的页面的HTML代码、程序代码,然后要花很多的时间做后台程序,后台程序有时候是很关键的。后台程序可以用任何语言写,ASP、PHP、JSP,都可以。我的后台程序的功能是,实现数据库的修改、删除、移动,或者修改网页,或者由它来产生新的网页,或者由它产生新的程序。 学习网页编程,可以少走很多的弯路,用编程来制造一个机器,然后用机器来制造机器,是很方便的。 2006年08月20日 22:56 在我使用QQ的这6年当中,我基本上是最远离QQ的人,但前前后后有1000多人与我联系过。好友列表删了很多次,现在剩下120多人,有20多人是我最常联系的。那些很少联系的,全部删掉了,因为超过150人的时候,我的QQ会很慢。QQ软件现在太臃肿了,2000年、2001年的时候,QQ安装目录只有1~3兆左右,2003年是30兆左右,现在达到了65兆,占用13~20兆的内存。 尽管有各种各样的不足,在中国,还是得用它,因为没有比它更好的了。我向软件开发人员提一个方案,可以让QQ软件支持2万的好友列表,甚至更多。其实非常简单,给每个用户本地再建立一个.db数据库,如accu.db,常联系的好友存放在User.db,不常联系的,存放在accu.db。这两个数据库的好友,可以互相导入导出,这样也不用删除不常联系的好友了。 你看,这样一来,User.db的体积也小很多了。现在我的User.db达到了500K,它里面写入了好友的很多信息,可以供离线的时候也能查看好友信息,所以会达到500K,很占资源。accu.db这个文件则只需要写入好友名称和QQ号码即可,2万的好友,以平均8位数QQ号码、8个字符的好友名称计算,这个数据库文件也只有380K~500K,在这个臃肿的时代,小得惊人。 2006年08月16日 19:05 有一道数学题,9根火柴最多可以组成多少个三角形,经一位老师提示,他说“摆成2个正四方形,再加上另一根火柴,得到9个三角形”。但是,我得到的结果却是11个三角形,如下图:为了看清楚,右图将火柴换成直线。 但如果摆成3个正三角形,交错在一起,我数了一下,共有30个三角形,或许还有更多,如下图: 将上图放大,共有30个三角形: 在我编程序的过程中,其实经常会遇到类似的数学问题,这是锻炼非线性思维和创造性思维的好方法。各位还有没有更好的摆放方法? 2006年08月12日 12:32 自动Trackback最典型的例子是Donews Blog,如果你是Donews的Blog用户,如果你的文章中链接到了另一位Donews的Blog用户的文章,它就会自动给这位用户的文章发送Trackback,而不需要你手动发送。近日发现hopesome的Blog也支持自动Trackback,站内、站外的Blog都可以自动发送过来,与Donews Blog的原理完全一样。例如这个页面,就是我的Donews Blog自动发给hopesome的。当然,在我已经有2个以上的Blog的这种情况下,反而给我带来了不便。 实现自动Trackback有这么2种方法,双方都不受ASP、PHP、ASP.net编程语言的限制: 方法1、以Donews和hopesome的Blog为例:这些Blog必须同时写入自动发送Trackback、自动接收Trackback的程序,并且在同一个页面,自动发送、自动接收的程序缺一不可,否则都无法成功。工作原理如:例如有Donews的A用户,与有Donews的B用户,A用户链接了B用户的文章,请注意,是任何人点击了A用户的文章的.aspx页面,然后,会自动搜寻正文中是否含有外部超链接,如果有,它就会向外发送ping,合法的Trackback包括发送人名称、标题、文章网址、简述4个部分,这4个部分,是从A用户的数据库里调出来的,其中“简述”可以取该文章的前200个字。如果ping成功,将发送Trackback,并且写入一个数据,表示已经发送,以后不会再重复发送;B用户的文章页面的接收方式如:在B用户的文章页面,实际上暗含着自动接收Trackback的程序,它收到一个合法ping之后,就会做相应的处理,写入数据库。严格的做法是,如果留言处已经含有ping过来的地址,将不再做处理。反过来,如果B用户的文章链接到A用户的文章,则是B用户的文章发送ping,A用户的文章接收ping。 方法2、如果不需要使用ping功能的话,只需要将访问来源的地址进行记录即可,写入评论处。Blogger的站内导航页、搜索引擎、spam等等的地址,进行过滤,不写入评论处。严格的方法就是先写入审核后台,如果得当,审核到评论处。把访问来源应用到Trackback,可以接收到任何外站对该页的链接页面,不会错过任何一个用户对此文的引用,成功率100%,让web2.0的应用畅通无阻。 上述“严格的做法”,指的是在更大程度上减小错误。你可能会发现,方法1可能存在着一定的问题,就是假如A用户的文章链接到了intel的网页,那么每次访问A用户的这篇文章,都会向intel发送ping,浪费了双方很多的服务器资源。这里可以做限制,如果ping五次之后,将不再自动发送ping,也就是这样记录,当该文章点击率超过5次,将不再自动发送ping。 2006年08月10日 13:47 有了Trackback,可以将各个Blog连接起来,形成一个大网,变成一个大型的社区。如果您需要向www.auiou.com的文章发送Trackback,请先打开您要向我发送Trackback的文章,点击这篇文章的“直接发送Trackback到此文章”,如下图的位置: 在新的页面正确填写您的名字、您的文章标题、您的文章地址,“您的文章简述或您的评论”不可省。如下图示例: 发送Trackback前请先阅读注意事项: | 文章分类 Category: Blog的发展 Development 为什么写博客 W-do we Blog 互联网 Internet 社会 Society 教育 Education BBS社区研究 Community 编程 Program 友人 Younet QQ研究 QQ Research 公告 Announcement 最新的评论 Comments: 近期的主题: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|