|
与此相关的链接
和平海底2 | Auciou | 自由勇专栏
公益:UFO问答与2012年升华
郝相国先生外星人接触官方网站
呼叫星际联邦/祈祷/许愿
我们看不见外星人的原因
郝相国先生与外星人接触进展(6)
郝相国先生与外星人接触进展(5)
Blog存档 Archives
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)
| 分类文档:编程 87篇: |
一个很好的编程习惯 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次,均去掉了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。 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的记事本,垃圾代码就再也没有了。 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前请先阅读注意事项: 2006年08月06日 10:58 昨天用了6个小时的时间,把www.auiou.com的每篇文章分别读出数据,然后post到我的计世博客上面,以后就不用总是复制、粘贴到那里了,大大减轻了我的工作量。过去,把文章发到计世博客上面,对我来说是繁琐的,每次的标题、正文、一些说明文字,要复制、粘贴8~10个步骤,选择文章分类,鼠标至少要点击10次。现在发送一篇文章,只要点击2~5次鼠标就可以完成了,而且与原来通过复制粘贴发送后的文章,效果完全一样。 体会到了前所未有的轻松。以后如果Blog搬家,也轻松多了,就像打《empire时代Ⅱ》一样。 用了6个小时做的这个编程,工作量大约等于踢了3场足球赛,但是是非常值得的。在今后,一年的时间可能因为这个程序,至少给我节省60~150个小时的时间。如果你需要将文章发到你的多个Blog网站上面,要找一款软件,我觉得是很难找到的,除非这个软件是根据很多Blog网站的表单域名称、相关的属性特别定制了这些网站。如果网站改版,此版本的软件就会失效。所以,最好的办法就是,自己申请一个有域名的空间,学习网页编程,可以直接导出数据,一旦Blog网站改版,你也很快可以找到对策。Donews的Blog,因为关键的textarea没有表单域名称,所以昨天以失败告终,暂时只能复制粘贴发到上面。 www.auiou.com是我的Blog主站点,一切以这里为准,为了对用户负责,所有的评论都发到这里。这里的文章,在发表的当天,可能会有修改,所以不会立即发到计世博客上面,通常会在第二天以后。另外,朱仔明提到的左侧导航的“2006年08月(6)”的更新问题,今天也顺便解决了,实现了同步自动更新。尽可能地把事情交给机器去做,这就像是Photoshop的“动作”功能。 2006年06月01日 12:13 期待已久的王志勇Blog在昨天开通了。这与别人开通Blog的心情可能是完全不一样的,我体会到了苦尽甘来的乐趣,因为这个Blog程序完全是自己从零开始编写的,历时2个月的艰辛。编程序是创造性的过程,不同于传统重复性地劳动,说它艰辛,有这2个原因: 2006年05月31日 10:59 今天是端午节,你快乐吗?经过2个月的奋战,这个Blog终于开通了,有一种跑完10次万米马拉松的感觉,几千行的代码。这个Blog将成为我梦想的地方。先庆祝一下,也感谢这些年来朋友们的关心! 2006年05月28日 18:03 我从02年开始学习和从事网页编程,一年有80%以上的时间是一天工作10多小时。王志勇的Blog程序经过一年多的构思和设计,用了两个月的时间完成,其中核心程序用了两个星期完成。这次程序的完成,有很多的收获,也有了较多的进步,让我能更加全身心地投入到程序的编写工作中。此Blog程序的结构,可以支持1000万篇Blog以上的数据,如果应用到Blog的综合性网站,可以支持100万人以上的注册,理论上可以无限,只要有足够的服务器数量和带宽。 这两个月的编程序心得:
固定链接 | 发表评论(12) | Trackback(1)
{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}字符 编码格式 重复次数 文件体积 英文、半角字符: 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。
固定链接 | 发表评论(107) | Trackback(1)


固定链接 | 发表评论(11) | Trackback(0)
固定链接 | 发表评论(27) | Trackback(2)

您便可以方便地给我发送Trackback了。
固定链接 | 发表评论(14) | Trackback(8)
1、思路。不知道什么时候会有思路出来,无法预测的。数据库怎样做最能承载大的负荷,每一个数据字段都是经过深思熟虑才会去用的,不会使用多余浪费的字段。最好的办法就是直接去执行、测试吧,一边测试一边调整。
2、有了思路,把它变成现实。这个门槛非常高,我觉得编程序考验人的统筹、综合逻辑思维能力,和数学逻辑能力。如果做的程序越多,这个实现起来会更方便,很快就可以画出程序的图纸。但是一切的程序都要从零开始编起,就像阿江写到的《快乐总是短暂的》。写这个Blog程序工作量十分庞大,需要非常多的时间。
看到阿江这篇文章的时候,我要和阿江握手了。我们都是程序员。
程序员最不愿意受别人支配而做程序,因为我们的薪水可能不及一个业务员的2/3,或者不到一半。实际上是一种有专业技术的高级奴隶,这里不讨论编程技术高级与否,如果你真的编过程序来应用,一定会有深刻的体会。在电脑前一坐就是10多个小时,连续几十天如此。早在01年的时候,我刚开始做网页的第4个月,颈椎就开始酸疼了,5年过去了,现在依然疼。
支配别人的人,有三种,一是他并不了解完成这件事所需要的工作量的多少、需要的技术含量,他只注重结果;第二种是略知一二;第三种是非常了解。其中第三种的人数比例是相当小的,第三种人越多,就越有利于团队精神。刘老大昨天发表了《为自己·为老板·为员工》说,“这三者的利益,在企业处在上升期的时候,容易统一。企业发展停滞或者倒退的时候,矛盾就大了”,我觉得这就是程序员的艰辛所在。
丁磊和周鸿袆各自做出了国内第一套电子邮件系统。我现在的心情和他们是一样兴奋的。我本人不了解电子邮件系统的原理,但是可以推测,电子邮件系统和Blog系统,在数据库方面具有非常多相似的原理。但实际做起来,什么时候完成,是个未知数。3个月?半年?2年?
固定链接 | 发表评论(28) | Trackback(4)
因为没有解决技术难题,所以这个Blog迟迟没有推出来。我是做网页技术的,今天是第6年,其中编程已经快4年了。做技术的人,不会轻易使用别人的Blog软件。亲自编写Blog后台程序来应用的人,国内估计不到千分之一。以300万的Blogger计算,估计不会超过3000人真的会去写Blog程序。梦想与实际往往有很大的差距,我把这个小小的梦想变成现实了。
我从2003年开始关注Blog,2003年是Blog在中国起萌的第2年。那时候比较关注竹笋炒肉、毛向辉的Blog。从Donews.net在2003年建站的第一天起,我也曾在那里徘徊,亲眼看到了洪波的Blog是如何在1年多的时间里成为中国的Blog教皇的,也看到了Donews一日千里的发展的场面。
我自己没有Blog,在互联网上就像是一个没有躯壳的灵魂一样到处飘荡。像洪波所说,Blog让每个人开始人格化。这3年我对Blog非常关注,Blog是对论坛的一种洗礼。
固定链接 | 发表评论(26) | Trackback(2)
1、程序的设计需要多多学习,多看一些相关的书籍,学习前人精彩的设计思想,可以少走很多的弯路。
2、需要灵感。我的这次灵感来自于繁忙的工作,在公司偶尔的一次瞌睡中想到了如何把数据库做得更好。3个月后开始动手,现在成功了。繁忙的工作也会让大脑处于活跃状态。
3、需要思考。编程序使用if语句、循环程序最多,有时候需要自己列很多的数学公式,特别是对数据库存储单元的处理、数据的统计。巧妙的设计,可以让原来需要循环3次的程序,变为2次循环即可。在访问量大的网站中,这会节省非常多的资源。这样你就可以用2万元做别人需要花4万元的事情。
4、经过实战的人,对程序会有好的见解,有发言权。因为编程序没有想象中的那么简单,会遇到非常多的麻烦,有很多难以解决的困难,编程序也是解决数学难题的过程。如果只有理论,没有实践、测试,实际上只是停留在初级阶段。每开发一个新的功能,都需要用到很多的知识,也需要非常多的时间。
5、养成工作的习惯。多做事,少讨论,每个人的经历相差很多,讨论没有结果。但学习性、交流性的讨论,有益于提高,也有益于身心健康。
6、现实不会给你那么多的被认可的机会,永远保持谦虚的态度,谦虚是一种平台,最终会建立你想要的人际关系。编程是一个庞大的世界,无穷无尽,一万年也无法将它用透学透,里面有无数新旧的理论,所以很难说自己是一只庞大的恐龙,还是一只小虫。以成绩来感染人。
7、编程序需要用到很多的理论,没有理论,就无法实现任何事情。与其它的学科例如数学、物理、化学甚至历史、地理、生物的联系都很紧密,编程是一种集合,数学是一种集合,物理也是一种集合,这些集合相交在一起的结果是,有很多相同的东西。例如需要建立很多数学公式,调用数学函数,数学公式是程序的灵魂;物理的理论,告诉我们如何去探索,这一点,编程序和物理实验非常相似,方兴东命名的互联网实验室似乎有异曲同工之意;编程序让我体会到了达尔文写的《物种起源》,奠定了生物学的基础,也奠定了人类文明的基础。程序是怎样来的?也是有它的起源、进化、变异。《物种起源》可以解释万事万物。习惯就是语言,语言就是习惯。程序语言是一种计算机语言,我们学习前人的语言,然后应用,我们会建立新的语言、新的理论,如此推动。
8、编程序是一种创造的过程,会很好地锻炼人的逻辑思维,有很多的取舍关系。例如我的这个Blog程序的评论功能有一个变量a,目前a有3个值,1、2、3(不用0是为了避免出错,因为当这个变量不存在的时候,系统会认为它是""或者为0,会让你在程序中出错。),1的含义代表允许评论,2代表关闭评论,3代表评论需要审核。在我以往编写的程序中,需要通过修改程序来确定是允许评论、还是关闭评论、还是需要审核,现在只要一个变量就解决问题。修改权限,以前半个小时的事,甚至几个小时的事,现在瞬间就完成了。这个变量a还可以同时现实更复杂的功能,例如当a=1时,允许评论、允许Trackback;当a=4时,允许评论、不允许Trackback;当a=7时,不允许评论、不允许Trackback,等等。
9、为了让自己读懂,套多层if的时候,尽可能少用else,取而代之的是临时变量,引用这个临时变量的次数越多,说明程序本身越复杂,这时候少用else,会让你更容易读懂,思路更清晰,不会乱了手脚。
10、尽多地把你要实现的功能,写给程序,让机器来完成,你不用总是重复地想那么多的逻辑。
11、编程序是个很艰苦的过程,很多人很快就会讨厌这种工作,厌倦的时候,咬住牙关。
12、像小学数学的线段图一样,养成必要时在纸上画草稿的习惯,想是很难想出来的。
13、编程序是一种财富,你可以做别人做不到的事情,进入别人无法到达的世界。
此Blog于2006年6月开通,这是我人生的又一个转折点。自己租用的服务器,使用中国电信的服务器。
最新的评论 Comments:
» QQ群需要黑名单功能
» 祝大家五一快乐
» QQ2010的年龄资料
» 有可能是这样
» 严肃地了解2012
» ANSI和UTF-8文
» 日记:2010-01-
» 为什么写Blog
近期的主题:
有可能是这样
QQ2010的年龄资料很不方便
QQ群需要黑名单功能
祝大家五一快乐
严肃地了解2012
日记:2010-01-17
祈祷website存活
获知真相
日记:2010-01-04
制作了新的博客风格
感受30岁的第1天
日记:2009-12-30
“蛇娃”的病是有希望治愈的
悲剧的原因
为他们的贝岸工作说句公道话
年底的感言
金山词霸与美式英语
有关斜视治疗的研究讨论
感动,回味中……
2个网站挂了
恭喜新博客开通!
快完成了
显卡与显示器“不兼容”偏色解决一例
寻1987年出生,我的被拐走的弟弟王志生(左手通观手,即断掌)
最近
网页中的路径/
循环程序的写法与速度对比
博客防spam/陌生人恶意留言另一方案
二级域名的博客在本地建立虚拟主机
重新编写了Trackback程序
Apache实现多域名解析同一空间简法
Apache在本地建立泛域名虚拟主机简法
使用Apache作为本地虚拟主机预览博客
ixwebhosting更换了服务器
博客+论坛的方式
如何关闭ixwebhosting的访问日志
一张原理图的绘制过程
祝我29周岁生日快乐
Photoshop,CorelDRAW,Word的选用
|