测试Movable Type的预约发布功能

不知道行不行,如果你们可以看到这篇日志那就是可以。

% crontab -e
% 0 */2 * * * cd /path/to/mt/; ./tools/run-periodic-tasks
% chmod 755 /path/to/mt/tools/run-periodic-tasks

也可以用cPanel的时钟守护作业来预约,我是选2小时一次,减少系统开销

注意要将 path/to/mt/tools/下的run-periodic-tasks文件权限改为755。

参考

安装Movable Type 4.25中文化包

下载地址:http://www.thinkjam.org/zoptuno/archives/2009/05/mtos425-zh-package.html
作者:Just 平生一笑

安装很简单,对应覆盖即可。然后登陆后台设置语言即可,管理即是中文的啦。

但是有一个问题就是当前的blog重新发布后仍然是英文的,如果中文化之后新建的blog就没有这个问题。怎么解决呢?

方法是:设计 -> 模板 -> 刷新Blog模板 -> 重置到初始状态 -> 重新发布
注意:如果你有修改模板的要再改一遍,然后再重选风格,再重新发布

感谢Just的翻译,速度很快啊!

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,基本上是原域名提供商没有解锁。

FreeBSD 7.2-RELEASE发行了,速度真快!

去年这个时候还是7.0-RELEASE,几年5月2日就7.2-RELEASE,更新速度够可以的。

7.2-RELEASE修正了下列安全公告所指明的问题:

  1. lukemftpd 中的跨站请求伪造问题。
  2. OpenSSL 对格式不正确的签名检查存在问题。
  3. ntpd 密码学签名绕过问题。
  4. BIND DNSSEC 对格式不对的签名检查存在问题。
  5. telnetd 任意代码执行问题。
  6. 本地特权提升问题。
  7. db 中的信息泄露问题。
  8. OpenSSL 远程可触发的崩溃问题。

7.2-RELEASE对内核的改动:

  1. 内核调试器 ddb 新增了 show mount 子命令。
  2. FreeBSD DTrace 子系统新增了对于进程执行的探测点 (probe) 支持。
  3. [amd64] FreeBSD 内核虚拟地址空间增加到了 6GB。
  4. 对 jail(8) 子系统进行了更新。
  5. kld 支持从内核模块为 FreeBSD 系统调用翻译层安装 32-位 系统调用了。
  6. ktr 新增了 KTR_CALLOUT class 的 KTR 跟踪点, 用以描述 callout 回调完成执行。
  7. 用以对已经分配的 System V 共享内存进行记账的变量由 int 改为了 size_t。
  8. sysctl 叶节点新增了一个表示其为 MPSAFE 的标志。
  9. FreeBSD 32-位 系统调用翻译层新增了为 VFS_AIO 安装 32-位系统调用的支持。
  10. [amd64, i386] FreeBSD 虚拟内存子系统新增了针对应用程序的透明 superpages 支持; 应用程序的内存页会根据使用情况动态地升级为 superpage, 或反之降级为普通内存页, 而无须对程序代码进行任何修改。

详见:http://www.freebsd.org/zh_CN/releases/7.2R/relnotes-detailed.html

PHPanywhere可以做为跨平台的代码编辑器吗?

想找一个免费的跨平台代码编辑器,可以编写PHP代码就可以,但要支持FTP编辑,这样开发就也方便了,上班也可以,下班回家也可以。PSpad是不错,FTP编辑的功能不错,但是不能跨平台,是WIN应用的软件。其他的基本也是如此,很难实现跨平台,包括收费的。

有人介绍 PHPanywhere ,是B/S结构软件,跨平台没有问题,只要有游览器就可以了!但有致命的缺陷,就是要托管给PHPanywhere,你放心吗?我不放心,FTP的用户名和密码啊,高度危险啊!

而且,大陆客户用PHPanywhere速度超慢!速度很重要!

所以,PHPanywhere不可以做为开发工具!

onlinephpeditor_screenshot.jpg