我看”YouTube成功的秘诀”

今天看了王建硕写的YouTube成功的秘诀,我也想从技术的角度说说我的看法:
个人感受Youtube的成功关键在于对FLV这项新技术的应用,FLV是一款比传统视频文件(如AVI)更加小巧快速的视频播放格式,当初 Macromedia推出FLV这个格式的时候,很多Flasher也在跃跃欲试,YouTube对FLV技术的成功应用和推广,决定了它最后的成功。有 趣的是Macromedia眼睁睁的看着自己的蛋被别人孵出个金凤凰,是不是印证了一项新技术的发明者往往不是最成功的那个。^_^

IE下Javascript错误:Unterminated string constant

最近总是出现很多灵异事件,快被逼疯了。一段很简单的Javascript代码

href=”javascript:void(0);” onclick=”window.open(’http://stumbleupon.com/newurl.php?url=’+document.location.href+’&
title=’+escape(document.title));”
在IE下提示出错:Unterminated string constant
Firfox下没问题,查看IE下源文件,复制出来看,很简单,也应该不会有问题啊。有一个细节很搞笑,document.location.href+’&在源文件里看后面是有换行的,可复制出来却没有。问题的根源也当然就是这个换行符罗~!

科幻:Google模式终将取代国家机器

在Google十周年之际,我们可以看到,Google已经不仅仅是一个互联网公司,它带给我们更是一种精神和模式,它对所有人开放,共享一切给每 一个人,反过来每个人都很自愿的贡献自己的力量,共同创建一个崭新的未来。公平、自由、开放、合作已经成为Google吸引大家加入的源头,Google 已经成为一个标志,表现了人们对未来的一种渴望和追求。

由此可见,我相信终有一天,Google的模式不只限于互联网,它将取代国家机器,成为指引人类前进,规范人类社会发展的新势力。

有一天,地球上将不再有国家存在,只有一个”Google”精神规范和指引人类共同创建美好的未来!

session_start(): Cannot send session cache limiter

PHP生成XML文件,莫名其妙的生成如下的错误:

session_start(): Cannot send session cache limiter - headers already sent
检查了一下代码,确认
header(’Content-type: text/xml’);
前面确实没有echo任何东西。
session_start()也看不出什么问题。只是提示出错的位置位于这个PHP文件的第一个字符,
(output started at xml.php:1)

试着重新将全部php代码复制到一个新文件,保存。问题解决。

网页变空白,刷新后又正常的问题

最近我的WP博客打开很奇怪,第一次访问页面是空白的,刷新后又恢复正常显示。通过对http header的分析,可以看到如下区别:

网页刷新后又正常显示的http header回应:
HTTP/1.x 200 OK

Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Connection: close
网页变空白的http header回应:
HTTP/1.x 200 OK

Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Pingback: http://www.zhaiduo.com/xmlrpc.php
Content-Length: 0
Connection: close
目前还不清楚是什么原因,HTML网页就没这个问题,难道是WP的bug?升级试试。
update:貌似问题解决^_^

LHC:大型强子碰撞实验

God Particle?
最近全球目光纷纷投向人类有史以来所做的最大一次实验:大型强子碰撞实验(Large Hadron Collider),这项由欧洲原子能研究机构(CERN)负责的历史性的实验,将使人类的知识领域迈上一个新的纪元,我很高兴能见证这个时刻!由于这项碰撞试验的结果数据量特别巨大,相当于一年全世界出版书籍的1000倍,需要动用全球八万多台电脑的配合分析,我们将在2010年以前得到最终的实验结果,而最快的前期数据发现结果将在今年年底公布。真是令人期待~!期待物质的尽头到底是什么?^_^

AS3中利用EventDispatcher定义自己的事件驱动类

flash.events.EventDispatcher已经给我们很好例子如果定义自己的事件驱动,那么我们在什么时候可以用得上呢?这里有一个例子:当我们装载XML的时候,XmlLoaded函数响应Event.COMPLETE事件,

obj.addEventListener(Event.COMPLETE, XmlLoaded);
但这还不够,仅仅是表明XML装载完成,如果要通知其他实例,我们还需要设定一个自定义的事件响应。

我以前的做法是:
设置一个变量isLoad来探测XML装载完成,如果isLoad为true,函数GetXml()返回XML字符串内容

var test:LoadXml=new LoadXml(me,”zhaiduo.xml”);
test.obj.addEventListener(Event.COMPLETE, XmlLoaded2);
function XmlLoaded2(event:Event):void{
trace(test.GetXml());
}

现在可以改为:
先自定义FinishLoadingEvent类,然后在XmlLoaded函数中提交新的FinishLoadingEvent事件,

dispatchEvent(new FinishLoadingEvent(FinishLoadingEvent.FINISH_EVENT, myXML.toXMLString()));
这样,XML装载完后,我们会得到自定义的事件,加上对这个事件的侦测,我们就可以轻易让其他实例获得XML字符串。
test.addEventListener(FinishLoadingEvent.FINISH_EVENT, XmlLoaded3);
function XmlLoaded3(event:FinishLoadingEvent):void{
trace(event.source);
}

mod_rewrite限制图片不良引用

昨天一网站流量突然多了5G,很明显是不良网站在盗链图片。由于服务器是apache2.0,支持mod_rewrite模块,所以用它来阻止不良引用。在图片目录下添加.htaccess文件,输入如下内容:

RewriteEngine On

#条件:访问来源不是yoursite.com
RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/ [NC]

#条件:访问来源不为空
RewriteCond %{HTTP_REFERER} !^$

#规则:图片后缀为jpg或png的禁止访问

#RewriteRule .(jpe?g|png)$ - [F]

#规则:图片后缀为jpg或png的跳转到图片/images/no_hotlink.gif
RewriteRule .(jpe?g|png)$ /images/no_hotlink.gif [R,L]

有航班去马尔代夫的航空公司

从国内去马尔代夫的机票倒是好订,如果想从国外飞到马尔代夫呢?这里有一些航空公司的网址,可以方便我们订票。

到达马尔代夫[ 马累国际机场 (MLE)]的**航空公司**

航空公司

航空公司代码

国家

其他国家出发地

时间

飞行频率

EMIRATES阿拉伯联合酋长国

EK

UAE 阿联酋

杜拜,希思罗, 伦敦(盖特威克) ,科伦坡,罗马,巴黎, 法兰克福,苏黎世

170分钟

每日

AIR LANKA斯里兰卡

UL

SRI LANKA 斯里兰卡

科伦坡,巴黎,罗马,米兰,法兰克福,苏黎世,希思罗,新加坡,东京,大阪,香港,孟买, 慕尼黑 ,新德里,特里凡得琅,杜拜,台北

70分钟

每日

SINGAPORE AIRLINES新加坡航空公司

SQ

SINGAPORE 新加坡

新加坡,巴黎,罗马,米兰,法兰克福,苏黎世,希思罗,东京,大阪,香港,孟买,晨奈,新德里,迪拜,悉尼,墨尔本,柏斯,台北,雅加达,吉隆坡

250分钟

每日

MALAYSIAN AIRLINES马来西亚航空公司

MH

KUALA LUMPUR 吉隆坡

纽约,吉隆坡,苏黎世,希思罗,新加坡,东京,香港,大阪, 慕尼黑 , 孟买 ,新德里,悉尼,墨尔本,雅加达,珀斯,台北

275分钟

两次/周


更多航班可以看这里(PDF格式)

从马累回国:
SQ:马累 (MLE) -〉新加坡 (SIN) -〉广州 (CAN)
EK:马累 (MLE) -〉迪拜国际机场 (DXB) -〉广州 (CAN)
UL:马累 (MLE) -〉科伦坡 (CMB) -〉北京 (PEK)

深发信用卡没信用!

我有2张深圳发展银行的信用卡,由于还有其他的卡,决定销掉一张卡。电话登记后,一女客服客客气气的建议我保留卡,并承诺帮我加积分,免年费。我信以为真,于是决定保留。可是昨天我还是收到了深发的年费通知,一张50.1元,一张40元,我这才恍然大悟,女客服的温柔嘴脸原来还是有目的的,就是推迟到我缴年费的时候。中午赶紧去还了这笔“恶帐”,电话登记销掉所有深发的卡,让它们见鬼去吧!
感想只有一个:信用卡不用太多,找个服务好,真正有“信用”的就行了~
千万记住:发信用卡的不一定有信用,没信用的也可以发信用卡!

Stage和null object的关系

最近接触flash CS3比较多,但是由于基础不好,常常被一些简单的问题搞得晕头转向。虽然从flash8和MX2004一直都有接触,但是CS3的不同到这两天才开始有所领悟。以前习惯直接在actions frame里面coding,这给之后直接用as3来coding带来了很多不习惯。

AS3里代码和源文件的分离,一段很简单的代码

package com.zhaiduo{

import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;

public class Example extends Sprite {

public function Example() {
  stage.align = StageAlign.TOP_LEFT;
  stage.scaleMode = StageScaleMode.NO_SCALE;
}

}
}
就会出现如下错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.zhaiduo::Example$iinit()
at learn_fla::MainTimeline/learn_fla::frame1()

后来发现这和Stage有着密切关系,新建的fla文件如果直接在actions frame里面coding,stage是[object Stage]。但是我们写在as文件里面,如果不和一个实例linkage,stage就是null。所以会出现上面的错误。
mwsnap171.jpg

Chrome - 来自Google的浏览器

Chrome
Chrome是Google新推出的一款测试版浏览器,赶紧下载下来尝尝鲜,感觉有如下优点和不足:

优点:

  1. 运行速度快于IE8测试版,和Firefox2差不多
  2. 普通网页内存占用较小
    memory use of different browsers
  3. 界面简洁,实用,给访问浏览网页带来更大空间
  4. 匿名模式(incognito)访问网页,可以有效选择是否让浏览器记录个人的隐私资料。
  5. 充分结合其它浏览器的优势:如Opera的缩略图功能,各大浏览器实用的Tab功能
  6. 优化过的网页开发调试辅助工具:如源文件查看,javascript debug,console和task manager
  7. 在支持多语言,国际化。从浏览器的http访问头看:agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13chrome应该是跨系统,跨平台的。
    不足:

  8. 插件功能欠缺:看看firefox在中数不清的插件,就会知道差距。

  9. 缺乏更加专业的针对网页开发人员的功能,如firefox的鼠标选取察看部分网页源代码,
  10. 访问长页面或者是多图片的页面的时候,CPU占用较高,造成Chrome僵死

通过Google查询网络用户地理位置

Google的Ajax API运用中有一个google.loader.ClientLocation对象,可以方便我们实时高速地查询网络用户的真实地理位置,这给不方便使用数据库的站长带来了极大的方便,同时减少了网站负担,也省去了自己不断更新IP地理位置数据库的麻烦。

ClientLocation对象返回属性包括

ClientLocation.latitude

ClientLocation.longitude

ClientLocation.address.city

ClientLocation.address.country

ClientLocation.address.country_code

ClientLocation.address.region

测试结果如下: (查看例子)
纬度:23.117
经度:113.25
城市:Guangzhou
国家:China
国家代码:CN
地区:Guangdong

体检结果给自己的健康敲响警钟!

周末去体检中心花390元做了一个全身标准体检,今天终于拿到结果。这是给自己健康的警钟!一定要加强运动了!

体检结果

1:体重超重,脂肪过多。要预防肥胖症、心血管病发生。
2:慢性咽炎,慢性鼻炎。建议要多喝水,避免刺激,改善工作环境,保持呼吸畅通。
3:轻度脂肪肝
4:胆固醇偏高。
5:低密度脂蛋白偏高。(这项是指血浓度太浓,容易引起动脉血管堵塞和硬化,建议是去做动脉硬化检查)
6:乙肝两对半全阴。表示你没有乙肝病菌,但没有抗体,要去防疫站注射”0-1-6”乙肝疫苗。

健康建议

1、脂肪肝是由于体内过多的脂肪沉积在肝脏所致,常于代谢障碍性疾病,如糖尿病、高血脂、肥胖等。脂肪肝不一定影响肝功能,轻者无症状,脂肪肝具有可逆性,大多数经采取低脂饮食,适度运动和限制饮酒而减轻。
2、多食含甲硫氨基酸丰富的食物,如小mai、芝麻、油菜、菜花、菠菜、甜菜头、干贝、淡菜等,可促进体内磷脂合成,协助肝细胞内脂肪的转变。
3、忌用动物油,不吃动物内脏、鸡皮、肥肉及鱼子、蟹黄等。忌辛辣和刺激性食物,如洋葱、蒜、姜、辣椒、胡椒、咖喱和酒类等,并定期做B超,必要时可到消化内科诊治。

Objects on PHP5, Javascript and AS3

PHP5, Javascript and AS3都有面向对象(Object)一说,但它们之间也有着不小的差异。作为我比较喜欢的3种编程语言,我很想把它们放在一起,做一个横向的粗浅的比较。
AS3 (Action Script 3.0)
在AS3里每个对象都是类,这个类可以被看作是对象的模板或蓝图。类似于Java,融合了多种语言的特点。不支持嵌套类和私类。感觉太靠近Java,太过严谨的语法让制作Flash的时候失去了一些乐趣,多了一些沉闷。毕竟FLASH不只是AS。

最简单的AS3 Class例子
package mypackage
{
public class MyClass
{
public var textVariable:String = “some default value”;
public var numericVariable:Number = 17;
public var dateVariable:Date;
public function myMethod(param1:String, param2:Number):void
{
// do something with parameters
}
public function MyClass() // constructor
{
textVariable = “Hello there!”;
dateVariable = new Date(2001, 5, 11);
}
}

class MySubClass extends MyClass
{
private var numericVariable2:Number = 1;
override public function myMethod(param1:String, param2:Number):Number
{
// do something with parameters
}
}

}
Javascript
Javascript是一种基于原型(prototype)的语言,就像一个具有初始值得模板,任何对象都可以作为另一个对象的原型。灵活度较高,比较随意。目前最满意的就是它了。这里有一个我写的浮动层的例子,很喜欢这种编程方式:)。
Object.prototype.inObj = 1;
function A()
{
this.inA = 2;
}
A.prototype.inAProto = 3;
B.prototype = new A; // Hook up A into B’s prototype chain
B.prototype.constructor = B;
function B()
{
this.inB = 4;
}
B.prototype.inBProto = 5;
x = new B;
document.write(x.inObj + ‘, ‘ + x.inA + ‘, ‘ + x.inAProto + ‘, ‘ + x.inB + ‘, ‘ + x.inBProto);
source
PHP5
PHP5借鉴了Java2的对象模型,类型指示弱于AS3。PHP5向OOP靠近是应该的,也是必然的。
class SimpleClass
{
public $var = ‘a default value’;
public $public = ‘Public’;
protected $protected = ‘Protected’;
private $private = ‘Private’;

public function displayVar() {
echo $this->var;
}

function __construct() {
print “In constructorn”;
$this->name = “MyDestructableClass”;
}

function __destruct() {
print “Destroying “ . $this->name . “n”;
}
}
$instance = new SimpleClass();
$assigned = $instance;
$reference =& $instance;
$instance->var = ‘$assigned will have this value’;
$instance = null; // $instance and $reference become null

OTOY开发出服务器端的3D实时渲染技术

OTOY是一家开发3D实时渲染技术的公司,这种可以通过浏览器浏览的新技术着实让人吃惊:)。全部三维渲染的部分将由服务器来完成,客户端只需要通过浏览器,无需任何插件就可以轻松的享受电影院级别的虚拟三维效果。喜欢游戏的朋友也不再需要Xbox和PS这些专门的游戏机,通过浏览器或连接互联网就可以。:)另外一方面OTOY的图像技术可以轻易的和Ajax、Flash、Java以及ActiveX结合,甚至带动手机上的三维软件开发。
下面是他们做的基于电影《变形金刚》的三维实时动画测试。酷呆了!

Yahoo抢钱来了!!

越来越鄙视Yahoo!域名年费从9.95美元涨到今年五月份的 $12.95,现在又狂涨到34.95美元,真是facebook(非死不可)!WTF!!!

Important note: Beginning on July 1, 2008, Yahoo!’s annual domain renewal price increases to $34.95 per year.
GoDaddy.com趁机大量吸收yahoo域名的transfers,收取.com/.net/.org域名6.99美元的转移费,并作了域名续费保证,由此看来Goddady比Yahoo有良心多了,我的博客也是yahoo注册的,看来还是早点搬走好,yahoo让人失望,漫天要价,和强盗无异,严重鄙视!
Goddady Alert to Yahoo Customers

PHP5: Non-static method should not be called statically

今天发现PHP5调用静态方法的时候出现如下的错误:

Error message: Non-static method My_Class::mystatic() should not be called statically
根据网上搜索的结果:
These messages are generated in compile time, all the functions are
executed AFTER that, so error_reporting(0); does not have any effect and
this is expected behaviour. - 来源
这个错误只是一个E_STRICT错误(Runtime Notice),不会影响其后的程序执行。解决办法可以隐藏E_STRICT的报告。

另外:关于File_PDF找不到File/PDF/fonts/courierb.php的问题。
File_PDF最新源文件里面也没有这个courierb.php文件,先暂时复制courier.php为courierb.php。

手机上网的最佳选择-Opera Mini

这是我第一次用手机(长途客车上)写博客,感谢Opera Mini让我真正体会到用手机(Nokia N72)上网和用电脑没有区别.用手机上网我也有三四年的时间,其间也用过几种浏览器,可是效果一直不太满意!只能简单的发送和浏览文字和图像.Mini则完全不同,和我在电脑上用FireFox没什么区别!更有意思的是在手机上浏览时的缩放功能,动感而有效率!现在不用手提电脑我也可以方便在网上浏览和写博客,真是太让我兴奋!仿佛发现了新大陆!等待我去开拓和探索!Mini!你是最棒的!耶!~

这是直接在手机上传的照片
20062008687.jpg
另外,Flash看不到,正在测试:-)

在中国银行托收支票居然要户口薄

今天在中国银行要求托收一张支票,本以为有身份证就可以了,谁知他们却说由于没有任何证明,证明支票上的地址是发给我本人的(支票上是我的名字拼音),所以不能给我托收。

最可笑的是号称可以代表我身份的身份证居然形同废纸,磨尽嘴皮,中国银行还是要求我至少要提供居民户口薄,可是远在他乡的我一时半会儿,去哪里弄那个该死的居民户口薄哦。

作为一名中华人民共和国的公民,可能最郁闷的就是这个时候了。别人邮递给我支票,既然我可以收到,又有身份证做证明,干嘛还要那该死的居民户口薄!?

session_start(): Failed to initialize storage module

很多空间经常出现session_start的初始化错误,出错信息:

Fatal error: session_start(): Failed to initialize storage module: user (path: /tmp) in /home/*.php on line 1
从错误看来是系统临时目录/tmp无法保存session文件的问题,
原则上我们可以直接修改php.ini中的session.save_handler值从’user’到’files’。但是在虚拟空间里通常都没有修改权限。这是我的解决办法:
if(!is_dir(‘./tmp/‘))mkdir (‘./tmp/‘, 0700);
session_save_path(‘./tmp/‘);
session_start();
直接在session_start前面增加上面的内容。

由facebook走向开源想到的

facebook发言人证实facebook已经开始名为fbOpen的开源(open-source)计划,决定向广大开发人员开放基于PHP的facebook框架平台。他们希望透过开源可以帮助开发人员更好的理解facebook的运作和更轻松地创建应用程序。

作为从事PHP开发的我来说,从Zend Framework到facebook开源,php的主流开发已经进入基于各种成熟框架的二次开发阶段。对未来想从事PHP开发的朋友应该需要了解主要框架和OOP,以及MVC。PHP已经越来越成熟,不知道各位从事PHP开发的同仁们,对PHP开发网站的心态是否也越来越成熟?对于自己是否愿意用开源框架开发网站,我的看法是看自己的定位,对于喜欢在大公司,团队合作的,开源框架绝对是最佳选择。不喜欢用别人造好的轮子,那也可以自己造,不过开源的框架也是很值得参考的。

Windows 7的新界面

微软开发的Windows操作系统虽然有很多不尽人意的地方,但是它的设计理念一直是我很欣赏和喜欢的。随着Windows 7新界面截图的释出,我们可以领略到微软在新操作系统方面对人机界面的看法和前瞻。它不仅带领着人机界面设计的潮流,而且也深深影响着对互联网对网站设计新的要求和开发趋势。

2.jpg

8.jpg

10.jpg

11.jpg
图片来源:Windows 7 screen grabs look better than they sound

根据微软的Windows开发人员透露,Windows 7将于2010年1月份发布,基于Windows Server 2008 的开发内核(Vista也是这个)。包括32位和64位操作系统。

一些小问题的解决办法

返回缓存的前页:

header(‘Cache-control: private, must-revalidate’);
页面中CSS自动限制图片显示大小
max-width:500px;
width: expression(this.width > 500 ? 500: true);
返回整页源代码
document.body.parentNode.innerHTML
cpanel问题:cpanel Invalid License File
root@host [~]# /usr/local/cpanel/cpkeyclt
Updating Internal cPanel Information…..Done
mysql导入.gz格式备份文件
gunzip db.sql.gz
mysql -u root -p database_db < db.sql
IE javascript错误 - ‘not implemented’
IE中进行window.onload调用,出现not implemented的错误:
window.onload=yourfunc(‘yourarg’);
解决办法:
var OnLoad = “yourfunc(‘yourarg’)”;
window.onload = function() {eval(OnLoad);};

Yahoo! Domains涨价!

人民币升值,国际域名也开始涨价。这是来自Yahoo! Domains的通知:

Important note: Beginning on March 11, 2008, Yahoo!’s annual domain renewal price increases from $9.95 to $12.95 per year.
按8的汇率:$9.95 x 8 = 79.6 RMB
按现在7的汇率:$12.95 x 7 = 90.65 RMB
涨价10块人民币左右。真是人为刀俎,我为鱼肉!

setInterval的问题

setInterval作为定时触发某一个函数是很有用的工具,可是当我们要调用的函数带有变量的时候,常常出现如下的错误:

Error: parentnode.removechild is not a function
Error: useless setInterval call (missing quotes around argument?)
根据这里的解释,问题出在setInterval里用引号处理变量名的时候,例如:
codeSnippet = “clockUpdate(“ + fieldId + “)”;
fieldId会被当作是一个字符串变量被函数clockUpdate引用,如果fieldId不是字符串,而是对象,照样会被解析成字符串变量。所以在这里有一个技巧,帮助我们引用非字符串变量:
codeSnippet = “clockUpdate(“”+fieldId+””);”;
虽然mozilla定义的setInterval语法可以帮助我们轻松调用参数:
intervalID = window.setInterval(func, delay[, param1, param2, …]);
但是这个方法用IE7不管用,它会提示未定义参数的错误。
结合上面提到的,我想setInterval最好还是调用用字符串变量作为参数的函数。