日志分类:tech

ISAPI_Rewrite正式版(非lite版)无效的原因

2010-12-11 19:35| 分类:tech web开发| 标签: | 9,901 次点击

天~已经两个月没写博客了,基本都去Buzz和新浪微博了,博客的更新频率只会越来越低,如有兴趣,可以follow我的新浪微博:http://t.sina.com.cn/tsenfine ,或者follow Buzz:https://www.google.com/profiles/yi.chenfang。我自己也有数月没打开Google Reader了。

因多个web项目需要用到rewrite,而lite版只支持全局的,所以升级了ISAPI为正式第三版,信用卡付款,现在还没没扣款,也还未发注册码。不过有45天试用,先下来用用。

先是备份lite版的httpd.conf文件,然后卸载了lite版的,然后重装。安装好后发现新版确实好用多了,不仅可对单个网站rewrite,而且可对单个文件夹下的文件rewrite,方法跟apache下的.htaccess差不多。但测试了下却发现原来的rewrite规则全都失效了。

于是找原因,首先在自己博客上找,没想到在2008年12月10日和2009年年11月12日都出现过类似的问题,真让我怀疑江恩说的“循环”的存在 : )

ISAPI Rewrite/IIS Rewrite无效的可能原因  2008-12-10

新版ISAPI Rewrite (Rewrite3_0067_Lite)无效的原因 2009-11-12

ISAPI_Rewrite正式版(非lite版)无效的原因 2010-12-10

首先是按以前两篇博客的内容检查了一遍,从IIS的“web服务扩展”到NTFS权限设置都检查过,又是重启IIS又是重启服务器的,但仍旧不行。后来看安装文档中的帮助文件:

一、首先应该检查ISAPI rewrite是否有在运行,方法有两种,一种是根据安装文档中的帮助来检查:

Put the following lines into httpd.conf file:

RewriteLogLevel 9
LogLevel debug

This will create error.log and rewrite.log files by default in the installation directory. If log files are created, this will indicate that ISAPI_Rewrite is running.

另外一种是随便写个规则看有没有在执行来检查。

二、我检查出来是有在运行的,那么打开Helicon Manager.exe,可以直接修改站点根目录下的.htaccess,但我却忘了清空全局的httpd.conf,导致后来调试问题一堆。正确的方法是应该清空全局的,然后把需要的规则写入站点目录下的.htaccess下。

当然我两个站点,一个是可以的,一个却不行,看了帮助文件夹下的:

If rules are working in httpd.conf file but not in other sections or .htaccess files, make sure to include RewriteEngine on directive in every section and .htaccess file. Also remember that rewriting base inside .htaccess files by default is different from httpd.conf. ISAPI_Rewrite automatically strips the local directory prefix from the path when in .htaccess or <Directory> section and applies rules only to the remainder. So if your rules start with a ‘/’ character, this should be removed in .htaccess file in the root folder of web site.

原来是规则不一样,比如像以下这种

RewriteEngine on  
RewriteRule /(\d{1,20}) /product.jsp?pid=$1

需要改成:

RewriteEngine on

RewriteBase /
RewriteRule (\d{1,20}) /product.jsp?pid=$1

这可以去参考帮助文件中的Example。

总结,像这种比较普遍的错误,看软件自带的帮助CHM还是非常有用的,比google出来的更方便更权威。

为wordpress安装lightbox2插件

2010-03-15 21:38| 分类:tech wordpress 博客维护| 标签: | 3,486 次点击

三年前,正是lightbox这个特效让我接触了mootools,然后又通过mootools接触了jquery,到后来用jquery花费一个暑假开发了美女PK——www.facepk.com,FacePK上最大的特色其实就是Lightbox特效。

所以lightbox这个特效和我很有渊源,不过我的博客一直没有用上。一是懒,二是觉得直接打开图片也挺方便,所以都没去改。

基于以下两个原因,我现在加上了lightbox2插件。

1、因为最近发了“灵感发明”这个系列的图片,博客上图片比较多,为了让用户体验好些。

2、虽然我倾向于简洁,但点击图片打开新窗口显示图片毕竟比较传统,不够现代化,用lightbox这样的效果应该会好些。

3、lightbox都有插件了,安装简单。

安装确实前所未有的简单,只需在后台添加新插件处搜索“lightbox”,即可找到lightbox2进行安装,然后启用就行了,所有带图片的日志都可以看到这个效果了。

Lightbox Appearance用灰色(Grey)的,看起来酷些。

要看效果,可点此测试:http://blog.linggan.com/1.html

新建一个日志存档页面

2010-03-10 14:23| 分类:tech wordpress| 标签: | 11,103 次点击

基于以下原因我打算启用一个存档页面

1、随着时间推移,日期分类越来越长,在侧边栏占据很多空间。

2、基本没人去按日期看我的文章。

3、没人看的内容在每次访问时都载入一遍,太浪费了。

4、文章短的时候,右侧比左侧还长,主次不分。

5、如果一次性读取出来,有兴趣的人也许会去看,可增加PV。也便于自己看。

以下给出两个方法:

一、插件法:

网上找到了WP-EasyArchives这个插件,由mg12开发,可在自定义页面上显示对搜索引擎友好的树形结构存档列表,Download

安装方法:
1. 将压缩包解压到 {WordPress 根目录}/wp-content/plugins/
2. 登录你的 WordPress 后台, 到 Plugins 页面激活插件 WP-EasyArchives
3. 在主题文件的适当位置追加添加代码:<?php wp_easyarchives(); ?>

比如我是复制一个page.php页面,然后在里面加入上面这句代码即可。然后就可以把rsidebar.php里按日期排序的代码(<?php wp_get_archives(‘type=monthly’); ?> )删掉了。

接下来按 如何在wordpress的页面里调用具体分类的文章 介绍的方法添加一个独立页面用来显示日志存档。

不过这样子还有一个问题,就是在导航那里会出现这个分类,而我不想链接在导航里出现(不让定制页面的标题这个分类在Nav导航的显示)。查看header.php的代码,看到:

<?php wp_list_pages(‘sort_column=menu_order&depth=1&title_li=’); ?>

于是搜索了下wp_list_pages,看到官方对wp_list_pages的介绍

只要加一句exlude排除一下即可,我的这个 “自定义页面”的ID号是1156,于是把上面那句改为以下即可。

<?php wp_list_pages(‘exclude=1156&sort_column=menu_order&depth=1&title_li=’); ?>

二、函数法(不用插件):

这么安装完后我与本博客主题的作者prower上的archives页面对比,发现他在排版上比这个插件生成的漂亮很多。搜了一下发现这里有个方法:不用插件打造自己的存档页 ,只需把prower的V3主题下载下来,然后覆盖掉自己的functions.php和archives.php页面,在新建页面的模板中选择archives就可以了。

最终我还是选择了用插件法+prower博客的排版,把这个日志存档的链接放在了导航上搜索框的右边,效果见此:日志存档

wordpress模板编码不一致导致排版混乱

2010-03-09 17:30| 分类:tech web开发| 标签: | 3,264 次点击

刚刚给博客加了个“发明灵感”的分类,见此:http://blog.linggan.com/faming。模板代码是一模一样的,只改了分类cat的ID号,排版却乱了。

那只可能是文件编码问题了,看了看原来模板文件pageforeye.php和pageforlife.php都是GB2312,而新建的这个是UTF-8的,改成UTF-8的就可以了。

像这种文章对读者是没用的,但我已不再更新自己的另外一个博客维护日志(现在更新的博客只有这个了,其他思想碎片都用微博记录),又想记录这些维护细节,没办法只能发在这个博客上,RSS里又没法限制输出,只好打扰订阅者了。

解决wordpress评论IP都是127.0.0.1的问题

2009-09-16 17:48| 分类:tech web开发 wordpress 博客维护| 标签: | 12,740 次点击

自从博客从dreamhost搬回到国内空间后,近一年的时间内,评论者的IP都是127.0.0.1,在我的博客上留言是不要求填写名称或邮箱的,所以有的时候有的访客留言没有留下任何其他信息,一条留言就真的只有一条留言,看的有些郁闷。今天准备解决一下这个127.0.0.1留言的问题。

搜了一下,可能是由于空间商的PHP版本问题,也可能是因为启用了某种缓存加速的方法而导致的,使得获取的都是本机IP。是空间商的原因,并非程序的问题,不过可以通过修改程序来重新获取IP。或者更简单的方法是通过Comment IP Fixer这个插件来实现获取真实IP(修改程序的话,每次升级wordpress程序还得再改一次,麻烦),我启用这个插件后,确实可以正常的取得评论者的IP了,感谢插件的作者jerryhong。

被GFW的域名A记录指向由国内IP更换到国外IP的测试

2009-08-01 17:57| 分类:Internet tech| 标签: | 3,787 次点击

关注我blog的朋友们可能知道,.chenfangyi.com(前面带个点)这个已经被加入GFW的关键字了,导致一些国外的服务,只要链接里包含.chenfangyi.com,页面就不能访问,所以我后来改了博客地址为chenfangyi.com,这样的话URL中出现博客地址就不会被断开连接了,于是我可以使用Google Friend Connect、Adsense等服务,我以为这样子就代表我的网站可以被全球各个地方访问了(仅仅是.chenfangyi.com被GFW,而chenfangyi.com一切正常),但后来发现完全不是这样的,我太小看GFW了。

7月21日,我发现了一个非常不错的国外网站——posterous,这个网站可以实现邮件发布文章,而且分发到你的各个博客上,我当时就在posterous发了一篇感慨《找了好久的东西》,但当我想用这个服务,实现发到post@posterous的文章都分发到chenfangyi.com时,却发现了添加不了,我刚开始没意识到国外根本就访问不了我的网站,以为是wordpress设置的问题,于是发邮件问了posterous的工作人员,posterous站方还是很认真的回复了我,回复如下:

Enigma —
I just tried both those addresses, as well as:
http://www.chenfangyi.com/
http://chenfangyi.com/
and none of them worked. That’s probably why we can’t authenticate your account. I’m not sure why your blogs are inaccessible — where are they hosted?
Cheers,

1、通过专门的网站判断被GFW的情况:

到posterious给我发邮件时我才意识到问题的严重性,开始检查博客的访问情况,找到了http://internetsupervision.com/这个网站,发现除了国内可以访问,其他地方都不能访问,这时才意识到原来我的博客一直被阉割着我还不知道!具体自查结果可以看这里《不查不知道,一查吓一跳!》

我顿时觉得连个说话的地方都没了,我的博客域名指向的是国内的IP,国外的用户想访问我的博客,比我们想访问一个被GFW的国外网站更难——因为你很难找到国内的代理服务器。所以几乎就不会有国外用户来访问我的博客了。

2、通过Analytics判断出被GFW的情况:

之前在Analytics统计中还是可以看到一些国外的IP,我还以为国外都可以正常访问,但我没发现近一个月来巴西的访客居然大于美国,这显然是不正常的,唯一的解释是美国那边不能访问了。(我当时也没有其他有被Google收录的域名绑定到这个空间上,排除是通过返还其他域名到博客的统计)

以下是7月份的流量来源图:

image

以下是2008年1月至5月(未被屏蔽前的流量来源统计)

image

几乎同样的访问数,没被屏蔽前来自33个国家,屏蔽后却只有15个国家,而且访问数少了很多,显然是GFW的功劳!

3、通过更改A记录到国外来证实chenfangyi.com也被GFW的猜测

我从7月24日就开始烦这个被屏蔽的事,当时发了这么一条唠叨,但仍抱有一丝幻想——如果把chenfangyi.com指向到国外IP上会怎样?www.chenfangyi.com指向到国外IP上是肯定不行了,以前就是在dreamhost上的,国内肯定访问不了。但chenfangyi.com还没有试过,于是在7月最后一天,我做了一个决定

要测试chenfangyi.com绑定到国外空间上,得找一个可以绑定域名的国外空间或博客,我刚开始选择的是posterous,但pposterous需要把DNS都交给它,所以作罢,最方便的是做A记录指向。因为我现在已经没有dreamhost了,没有免费的国外空间了可用了,于是昨晚试图找几个免费的国外空间,但无果,没找到哪个是有效的,今早突然想通,我只不过是想测试一下域名指向到国外IP会怎样,并不需要有一个空间啊,直接指向到任何一个国外网站的IP不就行了?

于是我立即对chenfangyi.com做了A记录到Google的国外IP208.67.219.230上。我想如果过一会儿A记录生效后,全球其他地方可以访问而beijing不能访问,则证明GFW是对chenfangyi.com都生效了!那我就一定得换域名了。过了一小时候,果然,chenfangyi.com已经不能访问了,internetsupervision.com检测结果表明,除了北京,其他国家都能访问。北京的提示:基础连接已经关闭: 接收时发生意外错误。而用U代理可以正常访问chenfangyi.com,即google页面。

以下是internetsupervision.com的检测结果(此时chenfangyi.com指向到google的国外IP208.67.219.230)

image

 

用u代理访问chenfangyi.com可以正常访问,访问到的是google页面。

image

ping chenfangyi.com是正常的,说明解析是解析过去了,只不过GFW是判断出解析到国外IP后再执行屏蔽的:

image

 

以上的检测确定不仅.chenfangyi.com被GFW,chenfangyi.com也被GFW了,只是两个关键字被封锁的程度不同而已(一个加入了URL关键字屏蔽列表,一个并没有)。这个域名已经被阉割了,只能换个域名了!

国内比如tools.chinaz.com已经没法查到www.chenfangyi.com的PR了,通过http://www.top25web.com/pagerank.php查到的两个网址的PR都是2。而原来www.chenfangyi.com的PR是4的,可惜了。

image

ASP返回错误页和http状态查询工具

2009-03-21 4:09| 分类:tech web开发| 24,080 次点击

IIS默认的错误页是很不友好的,很多人看到默认的错误页时都会说:网站打不开了!白白损失了这部分流量。而如果错误页直接跳转到首页又对搜索引擎很不友好,搞不好首页还会被封掉。所以根据情况,有两个方法解决这个问题:

如果是博客等内容型的网站,可以返回一个带有404错误的搜索框让访客搜索,若是电子商务型网站,则可以返回一个带有404错误的进度条进行跳转。这两种方法即照顾了访客又顾及到了SEO。

可以在Google webmaster tools中查看自己网站错误页有多少。

修改默认错误页的方法很简单:在IIS中右键单击要管理的网站,在自定义错误中设置404为相应的错误信息页。这里有两种方式:

1、如果“消息类型”你选择的是“文件”,则只能使用.html或htm结尾的文件,否则用户访问错误页时会出现代码。用这种方式设置的错误页,虽然.html文件中没有输出404状态,但IIS执行后会自动输出404状态。

2、如果你“消息类型”选择了“URL”,则必须用asp文件(因为只有在asp文件中才能设置404状态),否则访问错误页时会返回200状态码。还要在asp文件中加上:

<%Response.Status = "404 Not Found" %>

如果你希望定时跳转到首页,则也有两种方法:

1、利用meta标签的refresh进行跳转

<meta http-equiv="refresh" content="3;url=http://chenfangyi.com/?xxx">
据Google中文博客管理员介绍,Yahoo就使用的此方法进行跳转。

2、使用js进行跳转

<script style="text/javascript">

  setTimeout("testTime()",2500);

  function testTime() {

    location = "http://chenfangyi.com/";

  }

</script>

我感觉使用js的方法好一些,因为meta标签跳转担心搜索引擎会识别为“200”或“302”见这里的这段话:

常常看到许多网站的自定义404错误页面采取类似这样的形式:首先显示一段错误信息,然后,通过Meta Refresh将页面跳转到网站首页、网页地图或其他类似页。根据具体实现方式不同,这类404页面可能返回“200”状态码,也可能返回“302临时重定向”,但不论哪种,从SEO技术角度看,均不是一种合适的选择。
对“200”状态的情况我们上面已经谈过,那么,当404页面返回“302”时,搜索引擎会怎么对待呢?从理论上说,对“302”错误,搜索引擎认为该网页是存在的,只不过临时改变了地址,仍然会索引收录该页,这样,同样会出现类似于“200”状态码时的重复文本问题;其次,以google为代表的主流搜索引擎对302重定向的适用范围要求越来越严格,这类不当使用302重定向的情况存在很大的风险。

 

最后可以用Firebug或一些Server Header检查工具,如下面这个:

URL
输入待检查的网址

Firebug中的调试:

image

 

在网上看到的几个注意点:
1、切记不要将404错误转向到网站主页,否则可能会导致主页在搜索引擎中消失
2、切记不要使用绝对URL(例如:http://chenfangyi.com/nofound.php形式),如果使用绝对URL返回的状态码是“302”+“200”(已测试)
3、在“消息类型”中一定要选择“文件”或“默认值”,而不要选择“URL”,不然,将导致返回“200”状态码(这点与我自己测试的不一样,我选择了相对URL,最终用firebug测试的结果是404)

wordpress Adsense插件更新为All in One Adsense and YPN

2009-03-19 2:27| 分类:tech wordpress| 标签: | 2,982 次点击

今天看了看adsense injection的主页,发现作者并没有更新,原来的adsense无法固定在左上角的问题仍在,于是寻找新的adsense插件,发现All in One Adsense and YPN 最适合我。

需要先禁用adsense injection插件,否则启用All in One Adsense and YPN会提示“该插件会引发致命错误,无法启用”。神奇的是启用这个插件后不用设置,它保留了adsense injection的设置(好像这个插件本就是Adsense Injection的升级版)。不过要记得去掉第一个框里的“pub-”:

image

 

如下图,该插件可以设置广告在左上角。效果见本博客。

All in One Adsense and YPN

AutoHotkey打造的史上最强的Alt+Tab脚本快捷键切换任务

2009-01-18 15:02| 分类:tech windows软件| 标签: | 13,797 次点击

上次心血来潮又写了一篇关于快速切换任务的博文,有访客留言讨论,虽然最终没能得出一个满意的方案,但触发了我的灵感——最迅速的切换任务方式应该是类似于Total Comander那样用几个快捷键组合来切换程序。

那篇博文里用Hoekey+Taskswichxp实现快捷键切换任务的方式并不正规,属于歪门邪道,而且还要对所有可能运行的程序进行配置,非常繁琐。我本来的目标是能够不使用任务栏,但最终任务栏还是没能去掉,仍然在那。所以以hoekey作为入口点是不对的,于是想到用比hoekey强大百倍的AutoHotkey来实现。这几天在厦门落脚了,这套房子里暂时还没有网络,于是今天就想好好的学学AutoHotkey,看看能否实现。

我现在用着一个阮一峰推荐过的AHK脚本——Favmenu,这个脚本就是模仿TC中切换文件夹的操作,正是这个脚本的强大让我相信AHK能实现我所需的功能。但看着AutoHotkey.chm密密麻麻的帮助,就没了兴致,想找找看有无其他已经做好的实用脚本可以用得上。后来看到AutoHotkey文件夹下有一个未解压的“AutoHotKey懒人包@appinn.com.7z”,点进去看看,居然有一个“AltTab.ahk”,看了介绍感觉这正是我一直要找的东西!

这个脚本是替换自带的Alt+Tab,我看到了以下几个功能:

1、替换掉系统的 Alt + Tab 功能。
2、Alt + Tab 之后,按住 alt,输入程序首字母可以快速选择到程序。
3、在右键菜单中还可以对程序设定呼出热键。
4、在右键菜单中可以结束进程。

而第二点正是我一直要寻找的功能。立即试用了一下,发现了一些不足:

1、当标题开头是中文时,无法通过快捷键切换任务。
2、列出所有任务,不像taskswitchXP那样可以排除一些任务。

但不管怎样,我还是很满意的,而且这是AHK脚本,等下我可以自己修改成适合自己的。倒没有相见恨晚的感觉,我是到前段时间才悟出可以不需要任务栏的,要是之前看到这个AHK脚本,只会觉得很普通,没什么用的,只有等到自己发现了,需要了,再去找到这个东西,才会欣喜若狂。(确实最近很着迷快速切换程序,本来还抱怨没有网络,不然就可以写信或留言给阮一峰,问问他是否有兴趣写一个AHK切换任务的脚本)

随着电脑配置越来越高,任务列表实际上早就应该按文件夹的方式——竖向排列了。微软在win7里面也意识到了任务逐渐增多,但因为习惯考虑,还是采用任务栏横向排列的方式,但他强化了用icons来识别,这样就节省了很多任务栏的空间。但有多个notepad程序时就不是那么好辨认了,所以还是用竖向任务列表比较合理。

接下来探讨这个AHK如何改进,现在写下思路:

1、因为标题中可能有中文,这时就无法切换,而进程只有英文的,可否用进程名来识别切换呢?不能,那样的话chrome创建的Gmail、Adsense等程序都是一样的进程,切换起来得按很多次了。

2、可否增加一个选项,松开ALT的时候列表窗口不消失,切换到那个程序时才消失,就像Total Commander的Ctrl+D一样?也不行,因为除了要用快捷键切换任务,Alt+Tab同时还担任着在两个任务间切换,所以如果不消失的话在两个任务间切换就比较麻烦了。

3、可否自己更改目前的这个脚本来实现排除一些任务?不用了,我在这个AHK的代码中看到作者在“TO DO”中写道:include a filter for docked windows to be displayed in alt-tab 。看来作者有可能在下个版本中就加上这个排除功能,现在只需等版本更新。

4、既然标题可能有中文,那能否用软件把所有程序的标题都改为英文的?我找了找,确实有这样的软件,但要么是如同窗口魔术师(g-WinOperator)这种只能临时更改标题的,要么是用Ultra编辑器编辑文件来实现,非常麻烦。所以也放弃。

5、既然无法用软件更改标题,那么这个AHK脚本的下个版本有没有可能加上重命名标题的功能(就像这里提到的)?不太可能,因为作者用英文,在全英文环境下可以很方便地切换,就不太可能为中文用户制作出可自定义窗口名的功能。

最终决定自己写个AHK,用这个AHK动态更改标题(即每次按下Alt+Tab时就把标题改为英文的),使之可以与Alt+Tab的那个AHK脚本配合,实现用字母切换任何程序。现在写下这个脚本的制作过程:(如不想了解可直接下载最后一段中的AHK脚本使用)

第一步:取自WinSetTitle中的例子——更改一个新的notepad文件标题为“This is a new title”,加个#Persistent让这个AHK一直运行,而不是运行一次就退出。

#Persistent
DetectHiddenWindows, on
!Tab::
WinSetTitle, Untitled – Notepad, , This is a new title
Send {Alt down}{tab}

加一句Send {Alt down}{tab},即可实现按住Alt+Tab时可在更改标题的同时实现Alt+Tab切换效果。但这时只对标题中有“Untitled – Notepad”的任务生效,于是想用正则来实现规则,在AutoHotkey.chm中文版中搜索“正则”,可以看到在SetTitleMatchMode中有说明,默认是打开模糊匹配(1)的,但必须是以字符开头的,而我是结尾的,所以直接去掉“Untitled”还是不行的,还必须把需要SetTitleMatchMode改成2。见如下:

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
!Tab::
WinSetTitle,  – Notepad, , This is a new title
Send {Alt down}{tab}

但这时不能更改未被激活的程序标题,所以还必须打开DetectHiddenWindows功能,设置DetectHiddenWindows, On

第二步:因为notepad用标题来识别不方便,所以直接改为用类名来识别。

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
DetectHiddenWindows, On
!Tab::
WinSetTitle,  ahk_class Notepad, , notepad
Send {Alt down}{tab}

但这样子notepad改后的所有标题都是notepad,没法识别,所以还得传递标题值,我想到一个WinGetTitle函数。

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
DetectHiddenWindows, On
!Tab::
WinGetTitle, Title, ahk_class Notepad
WinSetTitle,  ahk_class Notepad, , Notepad – "%Title%"
Send {Alt down}{tab}

但这样子标题会越拖越长,所以每次就取最后一段(十个字),这样就不会变长了。这属于字符串处理了,于是在chm里搜索“字符串 处理”,可找到用StringLeft来处理:

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
DetectHiddenWindows, On
!Tab::
WinGetTitle, Title, ahk_class Notepad
newtitle=%Title%
StringLeft, OutputVar,newtitle,6
WinSetTitle,  ahk_class Notepad, , Notepad – %OutputVar%
Send {Alt down}{tab}

这样子也不行,最终标题都会变得一样,从最后一个开始选取或者后面第N个开始选取字符串也不行。从后面第N个(比如notepad是第10个)开始选取,再加一行notepad.exe也不行。如果用另外的方法,先把notepad取出来,再把余下的字符串加到尾巴上去,就可以了!!但没看到有这个函数。

尾巴上加一个notepad形成首尾对称(如下)也不行。

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
DetectHiddenWindows, On
!Tab::
WinGetTitle, Title, ahk_class Notepad
newtitle=%Title%
StringTrimRight, OutputVar,newtitle,10
WinSetTitle,  ahk_class Notepad, , Notepad – %OutputVar% – Notepad
Send {Alt down}{tab}   

看来只能用判断语句了,如下

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
DetectHiddenWindows, On
!Tab::
WinGetTitle, Title, ahk_class Notepad
newtitle=%Title%
IfInString, newtitle, Notepad
{
StringTrimRight, OutputVar,newtitle,10  ;去掉原有title后面的 – notepad共计10个字,输出为OutputVar
WinSetTitle,  ahk_class Notepad, , Note – %OutputVar%
}
Send {Alt down}{tab}   

至此,已经可以实现notepad的标题前后对调。

现在加上chrome和TW的,这两个程序不需要判断,直接设置标题为chrome和“S世界之窗”(TW和TC都以T开头,所以用S世界之窗,以S开头):

(不知道为何chrome的用“WinSetTitle,  ahk_class Chrome_WidgetWin_0, ,Chrome ”不行,所以用标题判断。)

最终代码:

#Persistent
DetectHiddenWindows, on
SetTitleMatchMode, 2
!Tab::
WinGetTitle, Title, ahk_class Notepad
newtitle=%Title%
IfInString, newtitle, Notepad
{
StringTrimRight, OutputVar,newtitle,10  ;去掉原有title后面的 – notepad共计10个字,输出为OutputVar
WinSetTitle,  ahk_class Notepad, , Note – %OutputVar%
}

WinSetTitle,  ahk_class XFrame_Wnd, , S世界之窗
WinSetTitle,  谷歌浏览器, ,Chrome
WinSetTitle,  ahk_class WindowsForms10.Window.8.app.0.33c0d9d, ,Writer

Send {Alt down}{tab}

效果如图:

image

总算是完全实现了我预期的设想。

phpmyadmin安装错误图解

2008-12-19 3:57| 分类:tech 服务器| 标签: | 5,402 次点击

phpmyadmin安装很简单,只需把phpmyadmin的程序代码解压放入网站根目录下的phpmyadmin文件夹中即可。然后复制config.sample.inc.php,重命名为“config.inc.php”。文件config.inc.php是phpMyAdmin的配置文件,上传服务器时必须上传该文件。

修改phpMyAdmin连接MySQL的用户名和密码。寻找到代码行:

// $cfg[‘Servers’][$i][‘controluser’] = ‘pma’;
// $cfg[‘Servers’][$i][‘controlpass’] = ‘pmapass’;

将“//”注释号删除,同时输入MySQL中配置的用户名和密码(远程服务器的请联系你的空间服务商),比如:

$cfg[‘Servers’][$i][‘controluser’] = ‘root’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘******’;

如果需要通过远程服务器调试使用phpMyAdmin,则需要添加blowfish_secret内容定义Cookie,寻找到代码行:

$cfg[‘blowfish_secret’] = ”;

设置内容为COOKIE(任意字母)

$cfg[‘blowfish_secret’] = ‘xxx’;

配置好后可能出现以下几个错误:

一、没法登录,或者试几次后才可以登录。

image

注意,在win2003下总是出现这个提示,应该是IE没有设置好,但如果这么提示后不理他,定位鼠标到地址栏,然后按下Enter键就可以登录了。我在Internet选项里设置为如下也不行,不知道是哪个地方出错了。

image 

二、提示:“无法载入 mcrypt 扩展,<br />请检查 PHP 配置”

image

这是php配置的问题,需要做两个步骤:

1、将libmcrypt.dll移动到C:\windows\system32目录中
2、去掉C:\windows目录下的php.ini文件中;extension=php_mcrypt.dll前面的分号

然后重新启动IIS即可,这里并不是权限设置的问题,mysql程序文件夹属性只需要默认的Administrator和System权限即可。

三、提示:“没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果.”

image

这仍旧是php的配置问题,解决办法:去掉C:\windows目录下的php.ini文件中;extension=php_mbstring.dll前面的分号

四、我进入phpmyadmin时还提示:

image

应该是php中的mysql库版本与mysql版本不一致的问题,没有大碍,就不解决了。

techweb博客又变为wordpress了

2008-11-10 10:27| 分类:Internet tech web开发 wordpress| 标签: | 2,454 次点击

前段时间看到《techweb博客升级了》,变成了wpmu搭建的wordpress平台,当时还把自己的数据导出了一下,想转移到自己博客上来,后来不知为何又变回oblog的,再过一段时间在google里就《techweb博客从昨天起就被google搜索结果认定为恶意软件》,而且不是一天两天了,感叹techweb这也算大站了,居然还总是被挂马,难道是机房别的机子的ARP病毒导致的?今天看到techweb程序员写的《TechWeb博客终于切换成功了。》才知道了原因。

这篇文章说到oblog的安全性:

“安全性。这是最致命的。oblog继承了asp程序的本性,安全性非常差。经常出现漏洞,博客三天两头的被挂马。”

果然,看来就是oblog的问题导致techweb博客被google认定为恶意网站,用ASP程序的无奈啊,基本可以理解。我还注意到了这次改版为wordpress跟上次一样,原有的链接都没有失效,比如http://tsenfine.blog.techweb.com.cn/archives/2007/200788141730.shtml,仍可以跳转到wordpress的日志下http://tsenfine.blog.techweb.com.cn/archives/3,应该用的是301重定向,techweb这点做的非常细致,转移过程中SEO也做的很到位。

文章还说到了关于oblog的SEO的问题:

“搜索引擎体验不好。页面很多东西都是js的。oblog是静态页面+js结合的方式。都什么年代了,还这么老土。除了性能我们也要友好的搜索引擎体验。”

这点我也非常认同,oblog我安装过但没使用过,我本来还以为在techweb上oblog肯定是经过优化的,shtml应该是伪静态,想不到是真的静态生成了页面!怪不得侧边栏取得最近文章列表都是用Ajax输出,显然这非常不利于SEO,而且最近一段时间techweb博客的侧边文章列表都显示不出来了。

屈伟还提到wordpress mu版给每个用户建了上十个数据表,这的确跟国内网站程序的开发模式很不一样,但我觉得wordpress mu迁移数据起来可能比lyceum更简单。

把oblog的sqlserver数据库都导入到mysql,这应该是项挺麻烦的事,期待屈伟的下文——wordpress mu的技术解决方案。

本站已启用Gravatar和Ajax评论插件

2008-10-31 15:22| 分类:tech web开发 wordpress| 标签: | 3,065 次点击

刚才登录wordpress后台,看到有几条留言居然有头像,而且都是一些挺出名的blogger,显然他们不可能在我的博客上注册,难道是wordpress的新功能?联想到之前在reader里看到的某个头像服务,于是登录reader找了找,原来是Gravatar头像系统。

可是我一直对这个不太感兴趣,所以看到此类文章只是把文章加了星标而没去实施,并没有添加Gravatar服务啊,我估计是由于Gravatar被Automattic收购后wordpress里就自动加了这个功能。

另外又联想起在博客上“回复留言”时会出现一个头像,估计是由于我正在使用的插件WP Thread Comment调用了头像。在后台“设置”那看了看,果然是WP Thread Comment这个Ajax评论插件,在“编辑HTML”处的代码是:

<div class="comment-childs<?php echo $deep%2 ? ‘ chalt’ : ”; ?>" id="comment-[ID]"><?php if(function_exists("get_avatar")) echo get_avatar( $comment, 32 ); ?><p>[author] <em>reply on [date] [time]</em>:</p>[content]</div>

这里调用了get_avatar的函数,本来以为wordpress本身并没有地方可以设置头像,后来搜了搜“wordpress 内置Gravatar”才发现wordpress2.5开始就有了这个功能了,2.5版本是在“Setting > Reading”里设置,现在2.7版本是在“设置 > 评论”里设置,所以这个函数肯定就是调用Gravatar.com上的头像了,原来wordpress早就整合了Gravatar了,只是我火星了。。

因为wordpress已经整合,所以现在只需要在模板的合适的地方调用get_avatar这个函数,而不需要像以前那样在模板里插入Gravatar.com上的图像,使用Gravatar服务就更简单了。只需三步:

1、在wordpress后台启用avatar头像服务。

2、给模板添加get_avatar函数。

详见wordpress官方文档

(1)、如果你的模板只是给自己用或者只是修改一下自己的模板,则只需要用:<?php echo get_avatar( $comment, 32 ) ?>

(2)、如果你是模板制作者,不确定模板的使用者的wordpress是否是2.5以上,是否支持get_avatar函数,可以使用以下语句来判断:

if (function_exists('get_avatar')) { get_avatar( $comment, 32 ); } else { //不支持的话要显示的内容 }

(3)、如果你用了WP Thread Comment这个插件,那么你还必须去后台的WP Thread Comment管理处修改一下它的默认代码,可以变得美观一些。我是改为:

<div class="comment-childs<?php echo $deep%2 ? ‘ chalt’ : ”; ?>" id="comment-[ID]"><?php echo get_avatar( $comment, 32 ) ?><p>[author] <small>reply on [date] [time]</small>:</p>[content]</div>

并且在css中设置:.avatar{float:right;}

3、注册Gravatar会员。

现在你只是实现了在自己的wordpress上能显示别人留言的头像,而如果你想让你在自己或别人的博客上的留言也能显示自己的头像,可以在www.gravatar.com上注册,以后只需用这个注册的邮箱在各个支持gravatar服务的博客或BSP上留言,就能显示你的头像了。

提示一下,如果你是wordpress.com的注册会员,则可以用wordpress.com上的会员邮箱和密码直接登录,这两家已经整合了。我用的就是之前在wordpress.com上注册的邮箱。

小结:这个思路确实很新颖,我一开始还没反应过来呢,看到有人有头像时还愣了一下。我还想网站是我的,我都没有你们的头像图片,怎么会显示用户的头像呢。。。不过对OpenID、Friendfeed、这类服务,或者开放平台这类概念,我一直反应比较慢。。twitter也是风靡了很久才有点兴趣去使用。

wordpress排版混乱的解决

2008-10-20 11:26| 分类:tech web开发 wordpress| 标签: | 7,724 次点击

刚才看了看自己的博客,发现侧边栏掉到了下面,而在firefox和chrome中正常,用firebug没发现什么问题,但用ie development toolbar发现了DIV的嵌套出现了错误,如图:(sidebar本应该是与content并列的,但这里却嵌套在content中)

div 

不过FF是正常的,只是不知道为何在下面总有一行放空(好像是编码的原因):

image

后来观察了一下博客,的确是有两篇文章的html出了点问题:(注意中间那篇文章的“发表评论”和“阅读全文”链接,与其他文章的不一样)

divproblem

我把这篇日志的内容清空,重新发布,博客的排版就正常了。看来问题的确出在这篇日志上。

在wordpress后台的“设置”-“撰写”中的“允许 WordPress 自动纠正错误嵌套的 XHTML 标签”打上勾,然后再重新发布一遍文章,仍然有这个问题,看来wordpress这个功能还不完善。只能手动来修改原来的日志了。

不知道为什么这篇文章在wordpress撰写的html编辑器上看不到<p>等代码,所以我直接用writer下载这篇日志,然后以源代码的形式查看,writer发布的日志是没有div标签的,我也没看到有哪个地方多了<p>或者</p>,但再把这些代码复制到wordpress的撰写页中发布,仍然有问题。考虑到一般嵌套的问题都是由于换行引起的,于是我只能重新给这篇日志换行再发布,最后就没有问题了。

这篇文章真水啊,没什么技术含量,以后写篇文章分析下用writer发布日志好,还是直接在wordpress后台发布好。

手动修改wordpress前缀

2008-10-19 3:10| 分类:tech web开发 wordpress| 标签: | 13,353 次点击

这是对之前的一篇《多个wordpress共用一个数据库》的补充

现在有两个博客,第一个博客是刚刚搭建好的,还没有写文章,且前缀名已经不是wp_了,我只是想把前缀改的更规范一点,于是就直接下载这个wordpress的数据库(.sql格式),用UltraEdit打开,用新的前缀替换掉之前的前缀,然后重新导入,修改wp-config.php即可,访问和管理一切正常,也没有乱码。详见:《多个wordpress共用一个数据库》。

对于第二个博客

(more…)

让wordpress首页显示特殊页面(flash首页等)

2008-10-18 18:48| 分类:tech web开发 wordpress| 标签: | 11,927 次点击

对于一些简单的企业网站,我觉得用wordpress来搭建比用重量级的joomla或者drupal更适合,链接更友好,后台也更简单,而wordpress的企业模板数量也介于joomla和drupal之间,不会太少。不过这篇文章主要不是说wordpress和另外两个CMS的区别,主要是要解决一个首页显示flash的问题。

大家知道,企业网站首页往往需要用一个flash,flash非常有利于迅速展现企业的形象,而一般的虚拟空间为了wordpress和一些论坛程序的正常使用,都把默认主页设置为index.php,如果你想把wordpress的index.php放在根目录下(显然这样有利于SEO),但又想把index.php拿来做flash的页面,则wordpress的运行将会出现问题。这时如果修改index.php为default.php,这会让wordpress所有发布的页面都是500或者404;同样,如果修改默认首页文件为index.html,然后让flash动画结束后跳转到index.php,那么wordpress的自定义永久链接的功能也都失效了(我没有试过这个方法,因为我目前的空间无法自定义首页文件名,但猜想应该不行)。 (more…)

建议把wordpress目录与网站目录分开

18:26| 分类:tech web开发 wordpress| 标签: | 3,927 次点击

网站做久了,往往在根目录下有很多文件,比如robot.txt,sitemap.xml,这些文件若与wordpress的程序文件放在一起,便显得杂乱不堪,若能把wordpress安装目录与这些文件分开来放就好多了。备份比较方便,也比较安全(其实没安全多少,只要随便评论一篇文章就可以得知你的后台地址了)。

wordpress可以做到,这就是php较之asp的强大之处,wordpress可自己创建和修改.htaccess来控制URL,具体做法如下:

(more…)

继TC之后,又用上了Vim(GVim)

2008-08-25 20:49| 分类:tech web开发 windows| 标签: | 5,509 次点击

出于对善用佳软的佩服和信任,继上次换用total commander之后,我又试了下Vim(其实我很怕接触新软件),之前用的是Editplus和DW(主要用Editplus写后台,DW写js文件,偶尔也用用微软的Expression Web Designer(EWD),因为现在不用.net了,所以就不用VS和VWD了)

我大致地看了看xbeta的这篇《普通人的编辑利器——Vim》,先了解到三点:

(more…)

blog的文章太长了?看看www.chenfangyi.com/twitter/

2008-08-12 3:35| 分类:Internet tech web开发 wordpress| 标签: | 2,537 次点击

 

update:原本地址是piece.chenfangyi.com,现在地址已改为www.chenfangyi.com/twitter/

一、问题/想法:
在网上浏览,常常有些需要记录下的东西,可能是一时的灵感,也可能是一些需要记下以便以后来找的东西,但因为内容不够,写成一篇blog字数会不够,所以就把想法埋在心里面,或者新建个记事本记下(除了有时用用简单的googlenotebook和opera自带的笔记功能,我从不用Evernote等记事软件,不习惯)。久而久之就忘了!或者找不到了!可惜了。

二、目标:

(more…)

VMware主机访问虚拟机调试网站

2008-08-01 21:52| 分类:tech web开发| 标签: | 7,654 次点击

我现在机子的系统是XP,IIS一直有问题,重装了很多次都不能解决问题。因为使用了很久(一年半多了),所以不忍换新的。为了调试网站,就在vmware中安装了windows server 2003来调试。具体做法见之前写的《vmware组建XP+windows 2003开发者模式》,简单说就是把虚拟机中的IIS网站路径设为网上邻居中的路径(这个路径就是主机上的网站程序目录),然后在虚拟机中访问和调试(这样子调试ASP网页是没有问题的,但.net网站会因为权限不够的问题而不能正常调试)。但是这样子有很多问题。

比如我在虚拟机中也装上了FF3和firebug,甚至还装了The World和IE Development Toolbar,但在虚拟机中浏览器的鼠标手势都不能使用(Maxthon也是如此),所以每次都得去按后退按钮,很不符合我的习惯。

而且,今天发现了IE6的一个bug(DIV浮动IE文本出现3px间距的bug  IE 3-Pixel-Jog Bug),虚拟机中的win2003是IE6,主机是IE8,所以在虚拟机的IE6可以看到这个bug,但我想试试IE8中是否有这个bug,就必须让主机来访问这个网页了。

后来想到当初我做《VMware虚拟网络环境下使用Bind9模拟主DNS服务器,缓存DNS服务器》这个实验时曾把各个虚拟机用NAT相互连接起来,可以实现虚拟机和主机的互访。当时主要是测试Bind9搭建的DNS服务器的,除了用到虚拟机中的域名解析外,只是简单的ping了下,为何现在不试试用NAT中的IP直接访问虚拟机中的IIS架设的网站呢?于是google了下自己的博客,找到了《VMware采用NAT连接搭建虚拟局域网》,启动了VMware的共享上网服务,重启客户机,看到客户机中的本地连接是1Gbps,可以连接上了。然后在客户机中用ipconfig看到IP地址是:192.168.203.136,马上在主机xp中访问,发现可以正常访问,大功告成。

很惭愧,这么简单的调试网站的方法我没有想到,都已经做到用主机和虚拟机中的几台客户机搭建局域网的程度上了,还是没想到可以在主机用IP直接访问客户机中的网站。以前只懂得在虚拟机中调试,好多时间都浪费了!

给自己看的:

IIS问题,我今天最后一次用阿江探针查看了,发现IIS不支持Microsoft.XMLHTTP,而2003的IIS是支持的,不知道是不是这个原因,但我安装了MSXML4.0 sp2也没用,不打算再探究这个IIS的问题了。

DIV两列并排的标准写法——理解CSS中的float

16:00| 分类:tech web开发| 15,766 次点击

今天在一个项目中用到了两个DIV左右对齐,我用的是左边的:float:left,右边的float:right,如下:

用firebug可以看到这两个div不在上级div(main)中

效果是可以实现两者左右对齐,但我需要让两个DIV没有间隙的靠在一起,于是用firebug调试,居然发现这两个DIV都不在他的上一级ID为main的DIV中(你也可以用firebug调试下看看),我调试了很久,最后删掉CSS中的float:left和float:right,才可以看到终于在main中了。

我隐约想起float的意思就是浮动,应该是浮动在上一级DIV层上的,所以当然不在上一级层中了,查了一下小雨的CSS手册,确实如此。平常以为不写float那么默认就是float=left,其实完全不是的,默认是不浮动的。加个float:left与不加是完全不一样的。

导致犯这个错的原因是我做web开发一直不求甚解,只要求达到效果就行,能灵活运用就行。对理论的都不是很熟,所以才导致这个错误。不过这样也才能真正明白float的作用(我想看CSS教程很难理解出来吧)。

所以这样看来,用float做DIV左右定位并不是很好的选择,怪不得yaml框架中实现两列并排(三列并排另当别论)只用了左边的float:left,右边的都不用float:right,而是设定margin-left来达到效果,这才是DIV并排的标准写法(这样可以仍受上级DIV的限制,而不是像float:left、float:right那样乱浮动,上级main都没法控制它们了),例子如下:(注意这时还是必须设float:left,这样才能使col2往上移,与之并排,col1还是浮动层的,不在main中,但col2在main中,两个div只跟一个div的高度一样)

用firebug可以看到这两个div在上级div(main)中

 
 
总结,做DIV并排布局的时候,要保证有且只有一个DIV不是浮动的(没有float属性)。

Pages: 1 2 3 Next