IE的innerHTML对pre标签不友好!

IE的pre标签使用innerHTML会使white-space不正常,基本上就是pre标签跟div标签一样了。

要注意!可以用div来模拟pre。

obj.style.backgroundColor为什么取不到值?

obj.style.backgroundColor只能赋值,不能取值,取值要用getComputedStyle或者currentStyle。看下例函数:
function getRealStyle(id, styleName){
var element = document.getElementById(id);
var realStyle = null;
if(element.currentStyle){
realStyle = element.currentStyle[styleName];
}else if(window.getComputedStyle){
realStyle = window.getComputedStyle(element, null)[styleName];
}
return realStyle;
}

用onmousemove做拖拽时要注意iframe。

用onmousemove做拖拽时要注意iframe,在鼠标经过iframe时,鼠标就会失去控制。

解决方法是:写个position:absolute层在onmousedown时遮盖页面,onmouseup时隐藏。还要注意在IE下该层要添加一个透明的背景图片,不然还是遮不住iframe。

拖拽需要三个方法,onmousedown,document.onmousemove,document.onmouseup。

Yahoo的OpenID登陆

前两次写了Windows Live ID当作OpenID使用的方法Google的OpenID的登陆,这次写Yahoo的OpenID的实现方法。

先说一下Yahoo的OpenID仅有Plaxo等几个网站可以获取用户属性,所以暂时不要考虑这个东西吧。

而且Yahoo还会出现了下面这段警告:
Warning: This website has not confirmed its identity with Yahoo! and might be fraudulent. Do not share any personal information with this website unless you are certain it is legitimate.
你是不是很郁闷呢?其实解决方法很简单,请参考:http://tihualong.javaeye.com/blog/309246
...

因为其他的OpenID提供者同时支持OpenID1.1与OpenID2.0协议,但是Yahoo的程序员像我们一样不喜欢考虑兼容性的问题。只支持OpenID2.0协议标准。

那么OpenID2.0协议标准有什么特殊的地方呢?

OpenID2.0中提出了一个新的东西叫做OpenID Relying Party discovery的,我们的问题就出在这个OpenID Relying Party discovery上。

先解释一下这个OpenID Relying Party discovery是什么东西。

当你重定向到OpenID提供者站点去请求认证的时候,OpenID提供者会使用这个叫做OpenID Relying Party discovery的机制自动验证return_to的URL处于指定的范围内,并且与OP通过realm参数获取到的XRDS文档中获取到的return_to的URL相同。

我是这么理解的:我的Consumer程序告诉了OP我的return_to地址是什么,但是OP不信任我,要通过我的realm参数(注意:这个地方是OP向RP发出的请求,所以要求你realm参数的url必须是外网的ip地址或者能通过外部的DNS查找到的域名)查找一个基于yadis协议的XRDS文档中的return_to地址,两个return_to地址相比较,如果相同,好,我相信你了,放行。(不知道这样理解有没有问题,我觉得应该没问题吧)

好,原理理解了。下面我们要做的就是:

1、 编写一个XRDS文档保存到你的网站上,存放成什么扩展名的没什么关系,但是你要保证Yahoo或者其他OP获取到这个文档的Content-Type是” application/xrds+xml”,不然他们会认为这个文档不是他们要找的文档。

2、 将你第一步编写的XRDS文档的地址公布在你网站的首页,或者你的openid.realm参数指定的页面上(建议)

我们先来编写XRDS文档:(起名xrds.php)
<?php
header('Content-type: application/xrds+xml');
?>
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS
xmlns:xrds="xri://$xrds"
xmlns:openid="http://openid.net/xmlns/1.0"
xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="1">
<Type>http://specs.openid.net/auth/2.0/return_to</Type>
<URI>改成你的return_url地址</URI>
</Service>
</XRD>
</xrds:XRDS>

将你编写的XRDS文档的地址公布在openid.realm指定的页面,建议单独写一个页面维护,然后设置openid.realm参数为你创建的这个页面
<?php
header('X-XRDS-Location: 改成你的xrds.php地址');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-XRDS-Location" content="改成你的xrds.php地址"/>
</head>
<body>
网页内容
</body>
</html>


if(empty($_REQUEST['openid_mode'])){
$openid_server = 'https://open.login.yahooapis.com/openid/op/auth';
$data['openid.ns'] = 'http://specs.openid.net/auth/2.0';
$data['openid.mode'] = 'associate';
$data['openid.assoc_type'] = 'HMAC-SHA1';
$data['openid.session_type'] = 'no-encryption';
$AssocHandle = getAssociationHandle($openid_server.'?'.http_build_query($data));
setcookie('cookieAssocHandle', $AssocHandle);
unset($data);

$data['openid.assoc_handle'] = $AssocHandle;
$data['openid.ax.mode'] = 'fetch_request';
$data['openid.ax.required'] = 'attr1,attr2,attr3,attr4,attr5';
$data['openid.ax.type.attr1'] = 'http://axschema.org/contact/email';
$data['openid.ax.type.attr2'] = 'http://axschema.org/namePerson/first';
$data['openid.ax.type.attr3'] = 'http://axschema.org/namePerson/last';
$data['openid.ax.type.attr4'] = 'http://axschema.org/contact/country/home';
$data['openid.ax.type.attr5'] = 'http://axschema.org/pref/language';
$data['openid.claimed_id'] = 'http://specs.openid.net/auth/2.0/identifier_select';
$data['openid.identity'] = 'http://specs.openid.net/auth/2.0/identifier_select';
$data['openid.mode'] = 'checkid_setup';
$data['openid.ns'] = 'http://specs.openid.net/auth/2.0';
$data['openid.ns.ax'] = 'http://openid.net/srv/ax/1.0';
$data['openid.ns.sreg'] = 'http://openid.net/extensions/sreg/1.1';
$data['openid.realm'] = $RealmUrl;
$data['openid.return_to'] = $AuthUrl;
$data['openid.sreg.optional'] = 'nickname,email,fullname,dob,gender,postcode,country,language,timezone';
$data['openid.sreg.policy_url'] = $PolicyUrl;
$data['openid.sreg.required'] = 'email';
$data['openid.trust_root'] = $RealmUrl;
//$data['xopenid_lang_pref'] = 'tw';

$LocationUrl = $openid_server.'?'.http_build_query($data);
}else{
if('id_res' == $_REQUEST['openid_mode']
&& $AssocHandle == $_REQUEST['openid_assoc_handle']){
$openid = !empty($_REQUEST['openid_identity']) ? formUrl($_REQUEST['openid_identity']) : formUrl($_REQUEST['openid_claimed_id']);
$email = $_REQUEST['openid_sreg_email'];
$fullname = $_REQUEST['openid_sreg_fullname'];
$nickname = $_REQUEST['openid_sreg_nickname'];
$timezone = $_REQUEST['openid_sreg_timezone'];
}
echo('<pre>');
echo("<a href=$LoginUrl>BACK</a>\n\n");
print_r($_REQUEST);
echo('</pre>');
}

注意:有部分函数和变量有遗漏,请参考Windows Live ID当作OpenID使用的方法Google的OpenID的登陆

陈书伟穿着很个性,他坚信自己的公益诉讼能成功。

陈书伟此人的简述:

  事实上,陈书伟的公益行动得到了社会和行业主管部门的认可。2006年年末,以陈书伟为首发起的"万人诉讼维权活动",披露了电信运营商"霸王条款"等侵害消费者权益的问题,得到国务院的高度重视,温家宝总理为此批示"严肃整顿通信市场",随即国家对通信市场进行全面整顿,为此,"万人诉讼维权活动"被检察日报评为2006年全国十大公益活动之一。

  陈书伟与当地法院的较劲儿只是表象,其背后是他与电信运营商侵害消费者权益的斗法。为指导全国消费者有效维权,陈书伟写下了13万字的小册子,对此,某电信运营商发布了《应对"反黑联盟"工作部署》,广东某电信运营商发出《关于应对反黑申诉联盟投诉指南手册的通知》,要求成立部门,监控陈书伟,通过"控制、引导舆论,对政府施加影响"等途径,封杀"团诉通信运营商的计划"。某电信运营商一份材料显示:该手册分析的问题一旦传播,将引发客户大面积投诉,要求各下属单位"严密把控大众传播渠道,将社会影响面缩减到最小",确保该手册在报纸、电视、网站上无字、无声、无图。陈书伟打官司难以得到支持,不难发现其背后的原因,但陈书伟还是坚持把它做下去。2008年11月、12月,福田法院受理陈书伟诉某通信公司深圳市分公司、某电信公司深圳分公司等电信服务纠纷,共30多宗。虽然证据确凿,当地通信公司进行了整改,但2009年2月16日、25日陈书伟还是败诉了。他认为案子涉嫌被人操纵,遂在上诉状中写一"操"字,福田法院却认为自己受辱,遂于2009年4月23日将陈书伟拘留。

转移域名到name.com【图解】

为什么要转移域名到国外呢?原因很简单,因为电信疯了,终于全部都疯掉了!我不想疯,而且我感觉国内的域名提供商很垃圾,就拿我的域名转出前的提供商厦门百优科技来说吧,修改DNS、修改注册信息居然还要通过客服来操作,太垃圾了吧。

下面就说说如何转移域名到name.com。

第一步:跟域名提供商要转移码和解锁,必须要求解锁,因为那帮人比较猪,必须要提醒它们的每一步操作。

第二步:登录name.com,没有帐号请注册。

第三步:点击下方的Transfer Domain Names


第四部:提交你的域名和转移码。Domain Name填写域名,注意domain.com就可以了,不要加www等二级域名。Auth Code填写转移码。Submit提交,如果转移码错误会提交失败。


第五步:结帐。提交你的域名和转移码完毕后,点击Checkout结帐。这一步就不图解了,如果账户有钱就从账户扣,不然就用信用卡刷(要支持美元,如果是中行的卡要开通全球漫游,20元每月,也是比较垃圾)。

第六步:点击顶部的Account,然后点击右侧的View Registrar Transfers,进入域名转移管理。




第七步:在域名转移管理列表,绿色的代表转移成功,橙色的代表正在转移中。点击show details可以查看该域名的转移信息。点击display查看详情,点击hidden隐藏详情。几小时后name.com会发送确认转移的邮件给要在注册域名的Email,注意确认。


第八步:大约七天时间转移就会成功,下面各个阶段的Progress(进展)。6/6代表完成,4/6代表就在转移过程中了,4/6的时间比较长。












注意:转移完成后,name.com不会邮件提醒你。如果Progress(进展)一直在3/6,基本上是原域名提供商没有解锁。

电信疯了,终于全部都疯掉了!

前天下午,公司客服来说,我们的网站客户不能登陆了!我一听头就炸了,出事了!一看,果然是的登陆不上了,所有跟我公司ERP的API接口相关的都不能使用了(公司的外部网站的数据都是调用内部的ERP的数据,网站服务器在电信机房托管,ERP服务器在公司内部,ERP是B/S架构的FreeBAPP项目,关于FreeBAPP详见blog.freebapp.org)。这下也就等于是我们公司网站所有和业务相关的都瘫痪了,重大故障啊!

排查,再排查,从服务器到路由器一个一个的查,都没有问题!

重装路由器,路由器是pfsense的,自己配置的,省钱啊,性能比上万元的还好用!推荐一下pfsense

都没有问题,期间路由器由于连续开机200天了,重启的时候硬盘报销了。换电子硬盘装Embedded版,需要串口连接管理,又去买串口配置线,结果买错,连接不了。再重装CD版,改Embedded版。为什么要改Embedded版呢,上个硬盘的报销就是因为CD版对硬盘的频繁读写导致的。Embedded版是在内存运行的,硬盘挂起了。

路由器重装了,还是不行,我当时一下就明白了什么问题,电信疯了我们公司光纤的8080端口,换个端口,果然问题解决了。我当时就要疯了,要疯就一起疯吧,把我也疯了!

打电话给我们的客户经理,说明问题。然后给我电信客服电话,我打过去,客服说要问网管,等会给我电话。一会儿,电信客服来电话说,我们公司光纤的80和8080的端口全部被疯了,理由是网站没有备案。我说,这是我公司的光纤,没有绑什么网站,而且我们的网站全部都备案过了,凭什么疯啊。客服说不知道,我说以后要疯端口,能不能提前通知啊,客服说找客户经理。我挂电话,然后打电话给客户经理,客户经理说根本不知道什么疯端口的事情,他怎么通知我啊!客户经理是我的朋友,算了吧!我要是找他麻烦,他也要疯了!

电信的这种行为已经不止一次了,大约今年三四月份的时候,突然一天下午,网站无法访问。我也是排查啊排查,结果没有问题啊,SSH、FTP都没有问题,就是访问不了HTTP。怪事了,打电话给电信托管机房,回答说,要备案,所以疯!我说,我已经备案了,为什么疯!电信说,我不知道你有没有备案,先疯掉再说!我说,你不能先问下再疯?电信说,那么多托管的,我一个一个的去问不是要疯掉了啊!我说,你不要疯了,我疯了!

再说一个事,公司去年底注册了89shop.cn,在name.com注册的。结果一直不能访问,也找不到毛病,DNS什么的都没有问题,但就是不能使用。后来联系name.comname.com回信给我,我整个人都疯掉了!

Hello David,

Thank you for contatcing us. The reason your domain name is not
functioning is because the .cn registry will not allow certain words. This
domain is included in their "black list" (they will not allow the number "89")
We can delete this non-functional domain and refund you
for your purchase. If you would like us to do this, please confirm by
replying to this email and we will take care of it right away. We
apologize for any inconvenience and thank you for choosing Name.com!

Regards,
Sky D.
Name.com
---------------------------------------
终于全部都疯掉了!
我的照片
本人毕业后一直从事服装营销工作,后爱上编程。偏爱开源软件,认为开源和分享是今后的主流。原本是用LAMP开发平台,现在采用BAPP平台,BAPP即 FreeBSD,Apache,PostgreSQL,PHP。主要开发B/S架构的呼叫中心,CRM,库存管理,销售管理,网站购物,在线记账等。




©2008 The FreeBAPP Project. All rights reserved.