给一个字符串,怎么判断它是什么编码呢?php有一个函数:mb_detect_encoding。不过这个东西需要有mb_string库,不是到处都能用的。今天看手册,在评论里找到了这个东西。
function is_utf8($string) {
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[x09x0Ax0Dx20-x7E] # ASCII
| [xC2-xDF][x80-xBF] # non-overlong 2-byte
| xE0[xA0-xBF][x80-xBF] # excluding overlongs
| [xE1-xECxEExEF][x80-xBF]{2} # straight 3-byte
| xED[x80-x9F][x80-xBF] # excluding surrogates
| xF0[x90-xBF][x80-xBF]{2} # planes 1-3
| [xF1-xF3][x80-xBF]{3} # planes 4-15
| xF4[x80-x8F][x80-xBF]{2} # plane 16
)*$%xs', $string);
}
准确率基本和mb_detect_encoding一样,要对一起对,要错一起错。
编码检测不可能100%准确,这个东西已经可以基本满足要求了。
Month: January 2007
项目回忆录(四)
君之网
我休学回来重新读大一的时候,大概是03年11月份,加入了星智的Beyond创业团队。那时候我还只会VB,ASP也才学了一点点。做网站的经验也就是自己的个人主页和文学社的网站。之后做的第一个项目是CIC和九城的奇迹合作的一个活动的网站。还算顺利。之后就做了第一个有工钱的项目,化工原理精品课程。
04年开学后,他们雄心勃勃得要做一个校园门户,也就是君之网。包括新闻、博客、DV等等等等。现在看来,这还算是比较超前的。我负责开发博客频道。这也是我第一次用php。在看了当时已有的一些BSP,包括blogchina、blogcn之后,就根据自己的理解开始做了。一边学php一边做,一个星期也做出了一个原型。其实那时做的东西严格的说也不能算是blog。没有rss,也没有feedback。更像是一个托管的个人主页。这也是那个时候我对于blog的理解。其实现在很多人似乎还是这么觉得的。
第一次用php写程序,我就是使用面向对象的方法。不过也是对于面向对象的初步理解。就是把Blog,日志等等用不同的类封装了一下。这也是我第一次写比较复杂的程序。在开发过程中,开始体会到封装的好处。因为经常要写带分页的表格,就写了一个函数包装了一下。需要同样的功能的时候只要调用这个函数就可以了。因为原有一个人气不错的民间论坛君之华理,君之网上线以后很快有了第一批用户。君之博客也是我的第一个“blog”。
到了临近暑假的时候,老大开始和雏鹰网合作,做家教频道(这个项目团队内部很多人都反对,也成了团队最终分裂的导火线)。家教频道的程序也是由我来做。还是php。不过这个项目比之前的项目都要复杂的多,相当于一个招聘网站,还涉及到和雏鹰网的支付接口。按照程序员的习惯,我也继续沿用以前留下的一些代码,包括那个分页表格的函数。但随着功能越来越复杂,这个函数的参数也越来越多,以至于我自己也记不清楚了,于是开始把它改造成一个类。之后又分离出数据库访问,产生了一个类似ADO的东西。从这时起,我才开始明白什么是面向对象。原本预期能在暑假期间完成,但由于一些需求的变化,时间变得很紧。再加上是一个人在家里做,时间长了难免郁闷,于是开始在论坛灌水发泄。从那时起,养成了泡论坛的习惯。
最后,家教频道也是做出来了,虽然后来运营状况很糟糕。之后不久,创业团队就开始分裂了。
之后的某一天,君之网的Raid的两个硬盘同时崩溃。用了很多天才恢复到一个月前的数据。这之后,这个网站就渐渐没人去了。君之网最繁荣的时候还曾经被Bokee评为“非主流网站百强”。
用php实现一个堆
堆(heap)是一个很有用的数据结构。堆可以用于实现优先队列。比如一个任务队列,其中中有很多任务,而且不断有新的加进来。要求每次找到其中优先
级最高的那个来处理。如果每添加一个就要排序一次的话开销是很大的,时间复杂度为O(nlogn),但实际上我们要的只是其中最大的那个,因此完全没有必
要全部排序。堆这种数据结构保证了堆顶的元素始终是最大的。而且每添加一个新元素,或者弹出堆顶元素的时间复杂度仅为O(logn)。即使是有40亿个元
素,也最多需要交换32次。排序树(比如二叉搜索树)插入删除的复杂度虽然也是O(logn),但堆算法更简单,常系数也更小。同时,堆可以放在一个扁平
的数组中,不用额外的指针来维护结构,所使用的空间也更少。
[下载代码]
摄影版版聚
七宝
他们想要什么?(二)
google已经很牛了,想找啥就找啥。但有这么一类网站,比如hao123,却也有大量的用户。hao123有的东西,google都能找到。但为
什么就有这许多人不用google呢?使用google其实是需要IQ的。要输入合适的关键字才能找到想要的东西。比如想买CD,要是光输入CD,搜索结
果多半都不是想要的。对于一些用户来说,他想买CD,只要找到一个最有名的网上商店就可以了。虽然google更强,但对他来说没有什么意义。用google需要IQ,不是还有专门讲google使用技巧的么?用hao123不用IQ,虽然信息量少,但提供的却是对普通网民最实用的。用google和用hao123的显然是两类用户。用惯google的人多半会对hao123看不上眼,而用hao123的人至少当前还不会用
google。
又比如IM领域的QQ、MSN、GTalk。不是有个说法,小孩的QQ,白领的MSN,精英的GTalk吗?但MSN并不是针对白领设计
的,GTalk也不是针对精英设计的,但为什么用户就分成不同的群体了呢?MSN没有许多QQ的花里胡哨的功能,或许这就显得更专业,更严肃一点。而
GTalk功能更少,界面更简单。用GTalk的多半也是google的铁杆粉丝。虽然他们一开始不是针对特定的用户群,但由于不同设计理念,造成了用户
的分群。其实在不同的领域都有这样的现象。
不同的用户有不同的习惯和爱好,同一类产品对于不同的用户群还可以细分。QZone这个算不上blog,花哨而不实用的东西也会有那么多用户了。很多人就是喜欢花钱买东西装点自己的空间,来让自己感到满足。很多人都奇怪为什么会有人愿意花钱买QQ秀买虚拟的东西装饰QZone,但正是这样的一群用户养肥了腾讯。而sina的blog虽然界面单调,域名又是没法记的,用户却有一大把。除了sina的招牌,我想还因为很多人喜欢和一些名人在一起吧。sina搞名人博客的时候也有很多人表示不屑。对他们来说,BSP的用户里有多少名人确实是无所谓的,但很多人就是觉得,名人用的东西就是好的。
在用户分群已经成为事实的时候,试图改变用户的习惯多半是要失败的。在sina博客的用户里搞选秀的效果肯定比在donews上搞效果要好很多。而在sina博客上搞技术专家评选也肯定成功不了。要服务好自己的用户,或者对用户做一些广告之类的,就要针对他们的特点,效果才会好。
他们想要什么?(一)
前两年在一个团队里兼职做网站。相信很多帮客户做项目的人都会有这样的体会:客户不是说不出来要什么样的东西,就是要求总是变。今天说要这样,明天说要那样。这就还苦了我们这些干活的,尤其是美工兄弟。有时候,在改网页改烦了的时候,他们会说,以后需求说好了签个字,要改就加钱。不过到底没有付诸行动。
话说回来,真的是他们的需求变了吗?很多时候,客户真正需要的东西其实没变。只是他们说出来的需求变了。很多时候,在看到一个原型以后,客户会说这里不对,那里要这么弄。然后再不断修改的过程中,才能够逐渐接近客户的实际需求。
其实不只是客户如此,我们自己也经常这样。一起去吃饭,问到哪里吃?“随便。”“到四川餐馆好不?”“昨天刚吃过。”“要不苏州汤包?”“不喜欢那里”“要不就去那家‘随便’?”………… 我们学校那里还真有家店就叫“随便”。估计就是针对那些“随便”的人的。
做项目的时候,可以通过不断和客户交流,不断修改来接近客户的需求。那么做产品呢?对于用户,这种问题也同样存在。在没把用户想要的东西摆在他面前的时候,用户多半说不出到底要什么。或许他们会感到平时用的东西有点不方便,但一般也都习以为常。
在人们还不知道google的年代,也就是我刚上网的那个时候。在那时,最牛的网站就是sohu和netease,sina也刚出来。在这之后的几年里,在这些网站上找信息就成了网民的习惯。有时也会觉得,在那么长的网页上密密麻麻的一堆字里面找想看的东西有点累,但也没有想到会有其他的方式能提供那么多信息。直到看到了google,如此简洁的界面,输入想要找的东西,它就会帮你找出来。很快,google就流行起来。然后,类似界面的网站也多了起来。在google出现之前,有多少人想到过网站也能是这样的,并不一定要铺得满满的来显示内容的丰富。
要想做一个成功的产品,就要想到一般人想不到的。但不管怎么说,要一次就满足用户的需要还是很难的。在做项目的时候,可以通过和客户沟通,一次次修改来达到,做产品有时候也可以这样。现在流行的Web2.0不是有个特点是一直Beta么,可以通过频繁的渐进式的改进,而不是过很长时间来一次翻天覆地的改版。这样,用户就能够更快的感受到产品的改进,也不会出现对全新的新版不适应的情况了。
又老了一岁了
又老了一岁了。
啥也不说了。
今天拍的
展望未来
新年了,又是一年里展望未来的好时候了。最近乘车,一直看到一个世博会的宣传片,展望上海世博会的蓝图。不知道为什么,看那个宣传片,总会感觉有点讽刺的味道。为什么那几个小孩是80年代的衣服,配着80年代的音乐,做80年代的动作呢?
言归正传。看到那些儿童画,我想起了我小时候看过的,画过的关于未来的画。似乎绝大多数都免不了要画一些夸张的高楼大厦,多半还有些满天飞的车。在很多科幻片,科幻小说或者其他的大人对未来的展望也是如此。难道未来就一定就只有这些摩天大楼,和各种各样的机械吗?如果这一切都是真的,那么生活在未来的人们也太可怜了。每天放眼望去,就只有那些所谓人类科技的成就,那些没有感情色彩,冰冷的东西。

小孩子的幻想很大程度上还是受大人影响的,也反映了那个时候大人们的愿望。我小时候的那些小孩对未来的展望很多都已经成了真,虽然现在看来并不喜欢。但看看现在的小孩对未来的展望,这个未来似乎还是有盼头的。
