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

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

上次心血来潮又写了一篇关于快速切换任务的博文,有访客留言讨论,虽然最终没能得出一个满意的方案,但触发了我的灵感——最迅速的切换任务方式应该是类似于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

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

也煽情一回

2009-01-15 1:56| 分类:life| 标签: | 2,016 次点击

一、那一刻,我深切体会到了一个词——凄美

你俩,都是我的好朋友,我看着你俩从青涩到成熟

当然我没比你们大多少,我同时也从青涩到成熟(呕~)

也许我们曾经很要好,曾经没有猜忌的瞎胡闹

但当你俩宣布在一起时,我就知道终有一天,我与你们之间,将会有明显的隔阂

因为我明白整体的概念

你俩已成整体,于是另外的人,无论曾经与你们多么要好,现在也是对立的

只是我没料到这么快

你俩不想被打扰,我能理解,所以我才这么久没联系你们。一年多啊。

说是让你们帮忙,实际不是想聚聚么?

我已尽量避免打扰你们,但当我好不容易才打扰一次(半年啊)时,而且打扰的方式

仅仅是请大家撮一顿,竟也不给我机会

当你们说出:我们想去逛逛

我还边起身边笑着说:走吧一起下去吧

可是你们都没动,我瞬间明白了含义

——“我们”已不代表我们

你们没感到我的笑已变的僵直,更不会感受到我眉宇间的凝重

举着茶壶的手停在半空

整体已经形成,外界无法入侵

身处高楼,我却觉得在谷底

这可是真真切切的作为一个附属品的感受啊

我的算盘打错了,你俩的“凝聚力”,已超出我想象

我面对的实际不是三人博弈,而是二人博弈

以后再不能这么不自量力了

我又开始展现我自嘲的本领,试图潇洒些

但说了什么,现在已完全记不起来

可见当时虽然潇洒,但大脑已处混沌状态了

脸也微微的红了

幸好还有一位朋友,否则我将何其尴尬?

除了自嘲,我还在心中默默的自我安慰:

“还好你们不是心照不宣的对视,否则我更会崩溃”

“你俩的眼神交流,不知道是没有,还是没让我发现,总之我没看到,也幸好没看到了”

安慰归安慰,我还是得正视:

人啊,不要太自傲,总觉得自己是个主角,可能在别人眼里,你只是个调剂品。

二、大学哥们情谊的归宿

这次来办事,本不想打扰这里的任何人,但无奈必须打扰到

可却发现早已物是人非

有曾经的同室兄弟因为要陪女友而不愿多等一早上

有曾经并肩作战的好友无甚要事,询问“有空否?”,却含糊回应

我一直反省是否是自己言语或态度原因,抑或是自己要求太高了

无奈天资不高反省不出来,我又不愿承认是自己看错人了,于是我只能把这种转变归咎于环境和时间

环境让情谊变质

时间稀释了感情

不过我还明白了一点:

人家不会在意你是一年来一次,还是一年来十次

别太把自己当根葱,很可能你只是个蒜头

但愿只是因为专业不同

但愿只是因为你们还未毕业

但愿只是因为你们还未校门,还未感受过分别

用hoekey+taskswitchXP实现快捷键快速切换任务

2009-01-08 21:07| 分类:windows windows软件| 标签: | 6,969 次点击

一、灵感的来源:

昨天看到博客上的一个留言,jasonzhao网友提到:

“taskswitchXP不是你想象的那么弱的。它可以快速定位到任何一个你想要的程序, 还有其它功能,比你匆匆一瞥 要牛鼻多了 (反而是它的预览我完全不用), 也比你这个文章里做的结果牛鼻。 而且还是opensource ,只是可惜作者2年不更新了。 但是其实代码稍微改改就非常强大。”

看到“taskswitchXP可以快速定位到任何一个你想要的程序”,我突然想到其实任务栏也可以隐藏起来不用,不是吗?直接用快捷键切换任务。我继续联想到刚刚给弟弟的电脑远程控制,他的电脑上似乎就没有任务栏。反正你关注的只是当前的任务。

为了让自己专心,我去掉了Google Desktop侧边栏,为了再专心点,我又去掉了任务栏左侧的快速启动栏,为了不被任务栏右侧的状态栏的消息打扰,我又用PS Tray Factory去掉了状态栏。为了不要掉“开始”按钮,我甚至用BBlean替换掉Explorer(当然还有Explorer太慢的原因)。现在电脑上只有一条任务栏在上面,右侧仅显示时间,桌面一直是全黑的与显示器边框一样(所以传出微软要黑屏的消息时我一点也不担心,黑吧黑吧,我本来就是黑的)。

人的大脑其实是单cpu单线程的,我一直都是个很容易开小差的人,所以很怕有什么东西打乱了我的思路,所以我觉得每个时候只要有一个窗口展现在我眼前就行了,不需要其他任务的状态(比如任务栏上的任务、Firefox的下载状态)。

所以我现在多了一个追求——去掉任务栏,用快捷键切换任务。

二、灵感产生的追溯(为何会产生这个灵感):

虽然这个灵感水平不怎么样,但灵感产生的前提是:你一直都在想一个问题,只是想不出来,于是先丢一边,后来又有人提起,才突然想起了这个问题更好的解决办法。能因jasonzhao网友的一句话而想到这个方式,必然也是有原因的,其他人看到这句话可不会有这么多的想法。

其实我以前也曾考虑过用strokeit+hoekey+PodXP实现鼠标手势和热键快速切换任务栏任务,或者用AutoHotkey+Hoekey+PodXP实现快捷键切换任务栏中的程序,但当时的立足点是“纯粹用鼠标”,或者“纯粹用键盘”,并不是立足于“迅速”,虽然最终也实现了想要的效果,但操作感觉并不怎么样(慢啊),所以就不再往那条路上摸索。再后来换成了BBlean shell,就基本放弃了热键切换任务或者手势切换任务的追求。而这次由网友的留言重新引发起探索的激情。

三、实现灵感的必要性:

现在的任务栏在上方,超出了我的视线之外(视线是平行于屏幕中间的),几乎不会吸引我的眼光,所以我倒不会因为任务栏分心。但从切换的速度上,效率可是非常低的。原因如下:

首先是Icons难认,鼠标老点错:

我是用任务栏上的icons识别程序的,可惜各个程序的Icons常常更换,不容易辨别。比如chrome的Icon是自己的那个三色图标image ,chrome创建的Analytics图标是Analytics自己的Iconimage ,这两个不会弄错,而chrome创建的Gmail和Adsense的快捷方式的Icon却是一个蓝色的小g图标image ,这个图标在黑色的背景下几乎看不到,害得我常常找不到Gmail任务何在,点几次才点到Gmail。另外windows live writer最近更新,又换了一个莫名其妙的image 图标,也总是让我在任务栏里迷失方向。

怪不得win7的任务栏默认没有文字而只有大大的icons,原来就是强化icons的视觉感受。

其次是鼠标需要移动的范围太大:

BBlean也可以像win7那样只用Icons展现的方式展现任务,并且可调大小,可是我却很不习惯,虽然鼠标这样移动的范围就少了,但都挤在一个角落,另外一边的空间都浪费了。

有人可能会问,既然连任务栏都可以去掉,而且操作速度还可以加快,那么微软为何要有占用那么多的空间来放状态栏任务栏等等呢?

我觉得,直观,必然与速度相冲突,越直观易用,操作速度就越慢。微软创造出那些“状态栏、任务栏、快速启动栏、开始菜单”虽然直观了,但操作速度却变慢了。这些所谓的“栏”上的任务或程序,其实只需要一个标识就可以互相切换。这个标识可以是类似与TC中的文件夹首字母——即程序或任务首字母,也可以是自定义的数字。然后用Ctrl或Win+1、2、3、4来切换。

不过微软虽然不像我们这样重视操作的超便捷性,但他明白以后的电脑必然是速度快到分不清是刚启动还是切换到那个程序,所以windows7取消了快速启动栏——“启动”与“切换到”没有区别,可以看出微软在可弱化两者的概念区别。

总之,实现用快捷键切换任务,是有实际应用价值的,对我来说,很有必要。

四、实施第一步(快捷键切换任务):

本来我是想找“快捷键切换任务的软件”,但在Google和百度上搜索“快捷键切换任务”却是自己的文章——AutoHotkey+Hoekey+PodXP实现快捷键切换任务栏中的程序,看来并无多少这样的软件,于是想到干脆不用特别的软件,而用强大的hoekey一个个配置,让每个快捷键对应一个任务。

可是纵观键盘上的快捷键,很多都已经被占用,于是打算用ctrl+1、2、3这样的来切换,最终hoekey配置如下:

^1=Show|TTOTAL_CMD ;
^2=Show|XFrame_Wnd ;
^3=Show|Chrome_XPFrame ;
^4=Show|WindowsForms10.Window.8.app.0.33c0d9d ;

这样按住ctrl+1可以切换到tc,按住ctrl+2可以切换到tw,以此类推。为何选择ctrl而不是其他的键呢?因为我原本是想在打字时就可以不移动手掌切换任务,所以用ctrl键比较方便,但后来看到易名网友的另一个留言(看到后我才发觉原来我的博客上早就有人提出用这个方法切换任务了,只是我当时一根筋没注意到):

“我现在可以用StrokeIt来实现用鼠标轮切换程序,也可以用热键来切换程序,比如用WIN+1切换到第一个,WIN+2切换到第二个……如果用顺序选择的话,则不如用Win+TAB继续按TAB来选择。当然,如果切换到Ctrl+,或.来选择也可以。实现上述问题的办法,就是从HOTKEYP上着手的。”

留言中提到的是用win键而不是ctrl键,于是我也考虑了一下win键的可行性:其实并不需要把手指固定在asdf那些键上,实际上我在操作时也只是打字的时候固定在那里。更多的时候两手都有小动作,比如我在写这篇文章时基本上是每句完就按一下ctrl+s,即把手指都移开了。所以不需要用Ctrl这个键。于是我又加了一组hoekey配置:

~1=Show|TTOTAL_CMD ;
~2=Show|XFrame_Wnd ;
~3=Show|Chrome_XPFrame ;
~4=Show|WindowsForms10.Window.8.app.0.33c0d9d ;

不过这样子不能用win+小键盘上的数字来实现切换,不知为何。

后来又考虑到我从来不用快捷键打开菜单栏上的菜单,都是用鼠标直接点击,而Alt在windows系统中都是用来点击菜单栏上的菜单的,既然我不用,那么这个Alt就可以用来做切换任务的快捷键。我又加了一组hoekey设置:

@t=Show|TTOTAL_CMD ;
@x=Show|XFrame_Wnd ;
@c=Show|Chrome_XPFrame ;
@w=Show|WindowsForms10.Window.8.app.0.33c0d9d ;
@f=Show|MozillaUIWindowClass
@u=Show|Afx:00400000:8:00010011:00000000:00DA06C7

这样就可以实现用Alt+字母快速切换任务了。

但要注意,这样子只是激活任务,并没有让任务窗口最大化,所以如果任务被最小化的话,用hoekey切换时。虽然可以在hoekey里面再加一句让任务最大化,但我认为没有必要——实际上我的桌面是全黑的,完全不用到桌面,最小化就没有必要了。如果人要离开,可按下F10关闭桌面(这里用到了Nircmd软件),或者按下win+L锁定桌面。(不知道有没有软件能实现锁定桌面的同时关闭桌面?)

五、实施第二步(隐藏任务栏):

因为开头时jasonzhao网友提到的“taskswitchXP可以快速定位到任何一个你想要的程序”,我有点怀疑,于是发邮件询问,jasonzhao给出了一个设想:

“把所有的单个字母的按键快捷都去掉,改成,和TC一样的功能,按下字母(一个或者连续几个),跳到对应的以这个字母(一个或者连续几个)开头的task那儿。”

把TC的快捷切换文件夹的思想用到快捷切换任务的操作上,我之前都没有想到,不过想来应该很好用。比如用Alt+D,调出任务列表,然后点一个字母跳到这个字母开头的程序并激活,这样跟TC的文件夹跳转或磁盘跳转(我磁盘跳转用的也是Alt+D快捷键)就非常像了。但目前TaskSwitchXP还没有此功能,只能用数字键来快速跳转到所需要的程序,比如用ctrl+space调出任务列表,然后按8跳转到第八个程序,意义不大。

不过当配置TaskSwitchXP时,看到有个排除列表的功能,于是我又想到了一点——可以不用去管任务栏上任务的顺序(任务栏的顺序在用Alt+Tab切换时有用,但我已经证明Alt+Tab的方法可行性不高,并且任务很多的时候速度也不快),甚至可以把不需要的任务在任务栏那隐藏起来。或者,直接不用任务栏(任务栏上的任务似乎也没法隐藏),用一个新的东西代替,比如这里的Taskswichxp的任务列表。

用Taskswichxp替代任务栏(BBleanbar),并把常驻程序在Taskswichxp的任务列表中隐藏起来,这样切换时就只有几个程序,切换也就快一些。而切换tc、ff、tw、writer这种常用程序直接用第一步所设置的快捷键也非常快。

于是我把tc、ff、tw、writer、chrome排除在任务列表,然后隐藏起任务栏,即实现了刚开始的想法。现在还有一个问题,就是如果在Taskswichxp那排除了chrome.exe,则chrome创建的快捷方式比如Gmail、Adsense,也都被排除了,而用Alt+C想切换到chrome时却可能切换到Gmail或者Adsense上,暂时没有解决办法,只能不排除chrome,让chrome和chrome创建的快捷方式都在任务列表里显示。

ghs.google.com被封的四种解决办法

2009-01-07 11:52| 分类:Internet 网络管理| 标签: | 21,949 次点击

Google的App服务可以用两种地址来访问,一种是在google域内,比如www.google.com/a/chenfangyi.com/的形式,一种是在自定义域内,比如mail.chenfangyi.com的形式,后者只需要在google App设置里设置为自定义的域名,然后设置域名的Cname到ghs.google.com。

但问题来了,这个ghs.google.com在国内被墙了,直接按google默认要求的做是无法使用自定义域名访问App服务的,我找到下面四种方法来绕过这个限制。

第一种方法:把要做映射的域名(比如mail.chenfangyi.com)做A记录到一个没有被墙的ghs.google.com的ip。这个IP可以通过国外代理ping得到,也可以通过google去找,比如66.249.91.121;这个方法的缺点是一旦这个IP被封,则所有已经做的记录都必须更改,还得等所有A记录在全球生效。

第二种方法:把任意一个域名或二级域名(比如chs.chenfangyi.com)做A记录到一个没有被墙的ghs.google.com的IP,然后在需要做映射的域名上,创建CNAME到chs.chenfangyi.com就等同于ghs.google.com。这个方法的优点是当这个IP被封的话,只需修改做A记录的那个域名的IP,比较方便。

第三种方法:这个方法的原理跟第二种是一样的,只是不用自己来做这个ghs映像,而用互联网上其他人已经做好的,我找到了两个比较多人用的:Matrix Chou 的ghs.sinoestate.com和 James Fang 的ghs.leafz.net。 (实际上自己做ghs映像理论上都有被GFW的风险,绑定到国外IP上的域名都有被GFW的可能性,所以非常重要的域名就不要绑定到国外IP),为何要选择比较多的人用的镜像呢?因为比较多人用的话,ghs镜像的域名所有者就会有点服务意识,当IP被封的话,可以及时更改镜像的A记录指向,当然,也可能他并不维护这个IP指向。这种方法最方便,但稳定性、自主性、安全性无法保证。

第四种方法:这种方式不是真正的自定义域名,而仅仅是转发。方法很简单,如果你所在的域名解析服务商有转发服务的话,那直接把mail.chenfangyi.com转发到Google App的登陆地址,不过国内DNS服务商的此类服务越来越少且不稳定了(跟监管有关,比如DNSPod老早就停止了这项服务)。如果有自己的空间或服务器,可以自己做转发。(做A记录到一个IP,然后用自己空间上的程序做转发)。

目前ghs.sinoestate.com指向的IP209.85.171.121可以访问,因为我使用DNSPod的域名解析,改起A记录来很方便,所以使用第一种方法。

Palm os和PPC终极比较

2008-12-26 1:14| 分类:移动生活| 标签: | 2,775 次点击

今天先写初步的,关于这两个操作系统,我实在是有太多话了,一时半会儿说不完,也没那么多时间,下次有空了再加上,以下是在手机上写的,现在发上来:

我已经受够了在装着windows的电脑上一只手按键盘一只手抓鼠标,在ppc上还得一只手按键盘一只手抓触控笔。

目前看来这种操作模式还没法改观,一直没有哪种关于提高电脑操作速度的技术能让我兴奋起来,我不认为盖子推崇的win7触摸屏或者jobs引以为豪的多点触摸对提高操作速度有啥用,我感觉这就像是在退化,我们本来就是为了解放被键盘束缚的双手才用上了鼠标,现在又要我们用两只手在屏幕上飞舞。我觉得不可思议,不过改进一下鼠标是可以提高效率的,比如采用指尖套或者诺基亚前段时间申请的手势感应专利。

不过触摸屏和多点触摸提高了直观和易用性这倒是真的,但我主要看重的是操作速度,嗯,这里主要说的不是反应速度或者运行速度,而是操作速度。

从命名上就可以看出区别,palm意为手持,手掌,专为手持而设计的系统。而pocketpc着重点是pocket和pc,就是为了把pc装入pocket,所以功能啊使劲加,大小啊让他能放入pocket,但便携性是有了,遍捷性却没有提上去。(后来改名为windows mobile也是一个道理,就是为了把windows能mobile起来,所以把windows功能减啊减,让它最终能够mobile起来)

建议微软不要跟苹果去比酷炫,比多点触摸,赶紧把单手操作的便捷性提上去。当然,微软现在认为跟palm竞争没前途了,他是不会参考采纳这个意见了,单手操作,估计palm是智能手机中永远的王者。塞班的S60也很好单手操作(他也只能单手操作),但没什么好骄傲的,还不是因为你丫不是触摸屏吗,不就是因为你丫是数字键盘而不是qwerty嘛,你这样微软的smartphone也可以做到,看人家palm,在全键盘上面还那么照顾到单手操作(E71我是没用过,不知道怎么样)。

phpmyadmin安装错误图解

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

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版本不一致的问题,没有大碍,就不解决了。

windows2003下安装MySQL

3:46| 分类:web开发 服务器| 标签: | 5,091 次点击

前面提到我在Windows2003安装IIS+PHP,为了搭建wimp(windows+IIS+mysql+php)现在需要安装mysql,mysql如果全手动安装的话太复杂了,所以我选择了用win32 exe自动安装,mysql.com上下载太麻烦也慢,所以就上mysql.cn下载了:mysql-5.1.30-win32.zip,一步步安装下来。

 

image23

image26

image32

image35

image38

image41

image44

image47

 

image50

 

image

image

360会提示新增一个服务,允许便是。

image

 

如果想修改刚才的设置,可以在开始菜单的MySQL Server Instance Config Wizard里重新设置一遍,也可以用这种方式修改mysql数据库的密码。默认用户名是root。配置好后可以在开始菜单的MySQL Command Line Client输入密码执行mysql命令。

而我的目标只是把wordpress环境配置好,需要导入以前空间上的wordpress数据库,因为我对phpmyadmin比较熟悉,所以需安装一下phpmyadmin来操作数据库。下一篇文章会提到windows2003安装phpmyadmin中遇到的问题。

以下有几个教程不错:

MySQL安装图解[组图]
图解MySQL数据库的安装和操作:这里就是手动安装

Windows2003安装IIS+PHP+MySQL图解(wimp平台搭建)

2008-12-18 18:08| 分类:服务器| 标签: | 7,049 次点击

php的安装方式有很多,不过因为是在服务器上使用,所以我要求:

1、不用自动安装的exe(这样安装完全不知道系统被加了什么东西,有没有被添加服务,强烈建议抛弃此方式)
2、不修改环境变量(修改环境变量往往是为了在升级php时比较方便,但在服务器上为了一个使用php就修改环境变量太不合算了)

最终选定的方法是手动安装。

一、安装php程序所需文件。

先去官网php.net下载最新版的php-5.2.8-Win32.zip,然后在服务器上解压于C:/php下,并且在php文件夹下添加everyone用户组(这里权限设置是必须的,否则配置好不能正常运行)。

image

在php文件夹下找到php.ini-recommended,复制一份并命名为 php.ini,修改php.ini中的两个地方:

1、找到;extension=php_mysql.dll,去掉前面的分号。
2、找到extension_dir = "./",改为extension_dir = "C:/php/ext/" (C:/php/ext/为ext子目录的绝对路径)

然后把php.ini复制到Windows目录下面,把libmysql.dll复制到System32目录。

至此为止,php程序所需要的文件都有了。

二、配置IIS使之支持php。

资源管理器中新建一个目录作为网站目录,权限中添加everyone组。

添加筛选器:IIS中新建一个网站,打开属性对话框,选择ISAPI筛选器选项卡,添加一个名为php、可执行文件为php目录下的php5isapi.dll的筛选器(ISAPI Filters),如图:

image

然后点击“主目录”,修改“执行权限”为“纯脚本”:

image

添加映射:继续点击“配置”,在映射选项卡那添加一个扩展名为.php,可执行文件为C:\php\php5isapi.dll的映射,如图:

image

添加服务扩展:在IIS的“web服务扩展”里添加一个扩展,扩展名是PHP,要求的文件就是php5isapi.dll的路径,选中“设置扩展状态为允许”。

image

至此php已经配置成功,你可以在网站根目录下写一个php信息查看的文件phpinfo.php:

<?php
phpinfo();
?>

即可用http://localhost:80/phpinfo.php查看了。无需重启IIS,更无须重启服务器。

注意:期间有两个地方需要设置权限,如果这两个地方权限没设置好的话则php页面无法正常显示,分别是:

1、添加php目录的everyone权限
2、添加网站程序所在目录的everyone权限。

域名被GFW后绑定到国内IP的问题

15:38| 分类:Internet| 标签: | 5,894 次点击

因为我的博客域名荣幸的被GFW了,所以现在只有国内用户可以访问我的blog,而且博客无法使用国外的Friend Connect之类的服务,还有各种各样被GFW的问题。因为我的这个GFW的症状比较特殊,我一直没找到跟我有同样遭遇的人。今天想把域名的IP指向到自己的服务器上(原来是指向到一家虚拟主机提供商),再次Google了一下。

我用的关键词是“国外无法访问国内”,想不到第一篇就是百度知道上的“我有一个域名,绑在国内服务器就国外无法访问,绑在国外就国内无法访问,怎么回事?”:

“我有一个玉米,万网注册的,绑在国内服务器上(OAO的虚拟主机),国外的ip就无法访问,绑在国外服务器(Bluehost和lunarpages的虚拟主机,都试过),国内就无法访问,到底怎么回事?”

对呀,如果我把www.chenfangyi.com绑定到国外的IP上,那从国内能不能访问?

答案是不能。

如果你想被GFW,需要网站同时达到两个条件:

一、网站的域名被加入GFW自建的“封锁关键字列表”(被GFW进行了“域名关键字封锁”)。
二、域名绑定到国外IP。

如果只符合第一个条件,那么在国内就不会被封锁,但会有很多问题

而我正是因为不满足第二个条件,所以才出现了非典型性的怪异的GFW症状。

至于为什么域名绑定在国内IP就不会被GFW,并不是GFW仁慈不想封锁国内IP,而是因为GFW无法控制国内用户对国内IP的访问封锁,但可以封锁国外用户对国内IP的访问(所以国外用户都不能访问我的博客)。

难怪找不到有人跟我同样遭遇的。因为一般网站都是放在国外才被屏蔽的(国内的只会被拔网线而不会被GFW),只会出现典型的GFWed症状。而我本来放在dreamhost上,后来转移到国内的空间商,而与此同时,我的域名被GFW了,所以就掩盖了被屏蔽的事实。这么说,从我转移到国内的那一刻起,我的博客就一直被GFWing,Oh my god!

这样子就好解释了,GFW没那么复杂,我的域名享受的待遇跟wikipedia.org、flickr.com是一样的,只不过我的IP在国内。所以出现的情况相反。

那么,如果我把网站移到国外上,那就跟维基百科和flickr一样了,会被彻底的GFW,从国内无法访问,显然这是不行的。接下来,先把这个博客移到自己的服务器上吧。(不必担心被封的域名指向到服务器IP,GFW会把服务器IP封掉,GFW没有能力封国内的IP)

在windows2003 IIS中安装SMTP服务器

2008-12-17 17:49| 分类:web开发 服务器| 标签: | 11,339 次点击

上一篇日志中我测试了几个免费企业邮箱的SMTP服务,最终结论是都不可行,只能自己搭建一个SMTP服务器。这里我以自己使用的windows2003为例,记录一下配置的过程。

一、组件设置:

win2003中默认是不安装SMTP服务的,所以得添加这个SMTP Service服务。如图:

image

把这里的SMTP Sevice打上勾

image

之后选择安装文件盘的位置(我是重新下载了一个系统,然后解压,直接定位到这个i386文件夹中),点击确定即可安装了,如果有再弹出则按同样的方法。安装完360会提示新增系统服务。

二、IIS设置:

安装完后无需重启,IIS中会多了些内容:

image

右击属性,可以看到以下选项,按照以下图示进行配置即可:

image 

 image image

在“连接”那里默认就是“仅以下列表除外”,而在“中继”那里默认是“仅以下列表”,所以必须修改一下(事实上只修改了这一个地方,其他地方默认的即可),否则会出现以下情况:

OE发送邮件到test@xingta.com,一直提示“正在验证身份”,然后又提示:

image

至于下面的“域”则可以不用添加,因为我们只是把这台服务器作为SMTP邮件发送服务器,而不需要收邮件。

image

按CSDN上有人说的:哪位朋友在IIS里面设置过SMTP虚拟服务器,并成功利用SMTP虚拟服务器发送过邮件

1,你先把SMTP组件安上,  
  这样,在服务和应用程序就可以看到默认SMTP虚拟服务器了。  
  右击,属性,这里主要要改三个地方,一个是访问里的,访问控制,选匿名访问,还有连接里面,选项成仅以下列表除外,然后在传递里的出站安全里,也选匿名访问,最后在安全里,加个可以使用这个SMTP的用户,服务器端就设好了。  
  2,客户端比如用OE来发,在SMTP服务器里选你刚才建立好的服务器,用户名和密码都输入好,就行了。这个速度发起来快,而且附件没有限制(当然要邮箱能放下哈),其他差不多没什么了。前一阵子刚好研究过。呵呵。。
  

而他所说的都是默认的设置,那都可以不用作任何设置即可,但我测试了确实不行,必须在中继设置那里选中“仅以下列表除外”,而命名下面都已经“忽略上表”了,不知道为何。

三、OE中设置

OE是用来测试SMTP服务器的。你也可以用ASP邮件发送程序如jmail或者一些CMS的后台(后台自带邮件程序)来测试。

 

image

最终配置后如下:

image image image image

image 默认就是这样的。

没有截图的地方保持默认即可。因为刚才在IIS中并没有设置登录的用户名和密码,所以此时你的服务器就是公用的无需权限的SMTP发送器,“我的服务器要求身份验证”这项打不打勾都可以。

然后即可用OE发信了,邮箱里都可以收到(这里显示的邮箱是为了防止spam,我用自己的Gmail收件):

image

测试成功。我同时也测试了用这台服务器上的一个CMS后台的jmail发送程序发送,无需填写密码,只需填写站长信箱和SMTP服务器地址即可发送邮件。

四、添加权限

这样子这台SMTP服务器显然不够安全,很容易被垃圾邮件利用(防止自用的IIS SMTP被垃圾邮件利用),所以需要添加一些权限设置。

为了让这些配置在以后的更换IP时不需要重新设置,尽量用127.0.0.1来代替实际IP地址,所以先把SMTP的IP地址设置为“全部未指定”

image

然后在连接里设置:

image
在OE里也把SMTP服务器改为127.0.0.1

image

这样子在OE中即可正常发送邮件。而在装在这台服务器上的ASP jmail程序上设置SMTP服务器为127.0.0.1,密码不用设即可发送邮件。而且垃圾邮件商无法连接到这台SMTP服务器。

 

注:配置过程中参考了 http://net.zdnet.com.cn/network_security_zone/2008/0605/908860.shtml,以下为引用:

“常规”选项卡主要设置IP地址,单击IP地址下拉项选择“127.0.0.1”,表示指向本地计算机IP地址,其他项使用默认即可。如果你是局域网接入,拥有固定IP地址,那么IP地址就应该选择相应的地址。

“访问”选项卡中设置访问权限。单击“身份验证”,选择“匿名访问”,表示任何用户都可以发送,其他两项不用选择;单击“连接控制”中的“连接”和“中段限制”中的“中断”,选中“仅以下列表除外”,表示可以许接入所有用户的访问。

“邮件”选项卡中设置邮件传输条件及限制,“限制邮件大小为”等四个选项可以使用默认值,无须更改;

“将未传递报告的副本发送到”可将发送不成功的邮件返回发件人,并且写明不成功的原因;“死信目录”设置没有发送成功的邮件被存放的位置。

“传输”选项中设置邮件传递时间,这里不用修改,使用默认值;“LDAP路由”选项用来指定服务器使用的目录服务器标识和属性,这里也不用启动它。

“安全”选项中设置使用发送服务器的有权用户,默认用户是“Administrators”,你可以单击“添加”添加使用用户。

打开Outlook Express,选择“工具→账号→邮件”,选中帐号点“属性”,在“服务器”标签下的“发送邮件(SMTP)”中输入“127.0.0.1”,即本机地址(如图3),“我的服务器需要身份验证”不选择。

测试SMTP服务器未必用OE,这里还有几篇测试SMTP的文章(我都没试):

Telnet到端口25以测试SMTP通信
在Windows Server 2003中手动测试 SMTP 服务(也是telnet)
如何設定 IIS SMTP Service 以支援發信功能(使用 DocuPack 中的 SMTP_Tester 來進行測試)
不用SMTP服务测试邮件代码[译](不知道说的是什么意思)

免费企业邮箱SMTP服务对比

15:49| 分类:web开发 服务器| 标签: | 11,139 次点击

一、QQ邮箱的SMTP服务。

虽然QQ邮箱并没有免费企业邮局的业务,但QQ邮箱可以免费用SMTP发信,理论上是可以用后台程序或者客户端程序(如OE)来发送邮件的。所以我这里也探讨一下用QQ邮箱做SMTP服务器的可能性。

首先,OE接收QQ邮箱的设置:(没显示的选项卡保持默认状态即可)

image  image  

 

注意,“使用安全密码验证登录”这个打钩不打勾都可以,但如果“我的服务器要求身份验证”没有打上勾则发送时会提示:503 Error: need EHLO and AUTH first,如图:

image

 

设置好了,在win2003下用OE,采用QQ的SMTP地址发送,可以正常发送邮件。

但如果把原来的邮箱地址换位我需要显示的邮箱地址,比如service@test.com,见下图:

image

发送时就会发生:"501 mail from address must be same as authorization user" 的错误

image 

 

因为QQ邮箱也有一个如同Gmail邮箱那样的功能,可以以多个帐号发信,所以我怀疑可能是因为没添加这个帐号的缘故,于是我在QQ邮箱中添加了这个service@test.com(这只是个例子,实际上我添加的是一个163的邮箱),但仍然是同样的错误。看来QQ邮箱虽然可以开通多邮件地址发送功能,但在客户端(或用代码)采用SMTP发送时却不允许用其他的邮箱地址。搜狗没有做这个限制,但也是有时可以有时不行的,以下会详细提到。

 

二、搜狗企业邮局的免费SMTP服务。

搜狗企业邮局我一直在用,星探论坛的注册确认邮件用的就是搜狗的SMTP服务器,虽然现在停止注册了,但搜狗并没有停掉老用户的服务。搜狗的SMTP发信服务参数我在Windows 2003安装并注册aspupload组件提过,这里说一下搜狗企业邮局的OE正确配置:(可以正常收发邮件)

image image

 

注意,如果又忘了勾上那个“我的服务器要求身份验证”了。用这个帐号发件时会提示:554 5.7.1 Relay access denied。

image

在win 2003中用OE,采用搜狗的SMTP发送,且邮箱地址为用户名,可以正常发送。

但如果发件地址不是搜狗原来的aaadmin@xingtan.com,而是service@test.com,发送到Gmail邮箱,有时可以正常发送,有时不行。

前两封可以,但连发两封之后,要发第三封时又出现:

image

看来还是不稳定的,就跟jmail组件发送一样,一会儿可以一会儿不行。过了一会儿,我重新发送这条在“发件箱”里的邮件,又可以了。然后发送第四条就又不行了:

这里的“服务器响应”所说的“发件人地址与拥有者不符”可能是搜狗自己的判断,也可能是Gmail的判断(即Gmail禁止了与实际拥有者不同的地址),为了搞清楚是搜狗SMTP服务器判断还是Gmail的收件服务器判断,我测试了一下发送给QQ邮箱的结果。

从“test第四条”开始测试QQ邮箱。总共发送了8条,期间test5和test8都出现了同样的报错情况。test5再次发送又成功了,而test8再次发送了两次才成功。错误提示与上面的一样。

看来提示“发件人地址与拥有者不符”并非Gmail或者QQ邮箱的返回消息,而是搜狗自己的,证明搜狗也做了这方面的判断,只不过有时判断失效,就可以正常发送了。这样子在实际中是肯定不能用的。(这里也解释了之前为何用jmail实现类似的功能时,测试了四封邮件,只收到一封而且延缓了几分钟,另外三封都没有收到)

三、Gmail企业邮箱服务

Windows 2003安装并注册jmail组件提到过Gmail的SMTP服务参数:

一、GMail存在smtp。其地址为:smtp.gmail.com
二、GMail的smtp要求SSL的安全链接
三、GMail的smtp端口号不是25是465

因为我用OE进行配置只是第一步测试,真正是第二步测试——把SMTP用于需要邮件发送功能的ASP后台程序,但后台程序不支持非25默认端口的smtp服务器(因为用的组件是Jmail),所以必然不能使用Gmail的SMTP服务,所以就没有在OE中测试Gmail。

四、微软免费企业邮局(windows live 免费企业邮箱)

这个不用说,pop3和SMTP都不支持,在OE上都不能用。

综上,没有哪一个免费的企业邮局可以提供不需要发件人地址认证的smtp服务,都会验证发件人地址和帐号(估计是为了防止垃圾邮件)。如果你需要显示你的公司邮箱地址的话,那么就必须在企业邮局提供商那注册(注册的过程其实就是一个认证域名和所有权的过程,这样可以一定程度上阻止你发送垃圾邮件)。如果搜狗的企业邮局还可以注册的话,那么搜狗的企业邮局用作网站后台的smtp服务是最好的选择,但搜狗企业邮局已经停止了注册,看来只能自己搭建一个SMTP服务器了。

关于免费的SMTP服务,CSDN上还有讨论:哪里可以提供免费的smtp服务

foobar2000自动更新播放列表

3:42| 分类:Internet windows软件| 标签: | 4,455 次点击

刚才看到博客上有一个留言,关于foobar的:

“第三种办法的专集列表是有面板组件的,foo_albumlist
可以到我的blog去看看,我写那篇文章就是受到你的启发的,呵呵”

我看了这位朋友的博客,发现他写的这两篇教程真的不是一般的棒!分别是:foobar2000自动播放列表—按文件夹目录自动产生、更新foobar2000自动播放列表 (II),可以看出作者截图非常认真,以至于我都没什么好补充的,而且作者对foobar的设置风格跟我的很像,最终我按他所说的方法解决了foobar之前的设置带给我的问题,非常感谢他。

之前在《让foobar2000的播放列表按文件夹目录排序》一文中提到的最终方法是在分栏模式下用“专辑列表(视图下拉菜单选择“按目录结构”)+媒体库选择项+播放列表”来实现实时更新播放列表,但这样做的专辑列表是浮动的。这样就有了两个问题:

1、不美观,foobar的专辑列表是浮动的,如果稍微移一下位置就很难看
2、操作不够便捷,因为我用的是快捷键ctrl+0调出foobar播放列表,换专辑时还得用ctrl+home调出专辑列表,多按了一次。

没想到这位朋友的两篇文章一下给出了两个解决办法,第一个用的是默认面板,无需插件。我尝试了一下,最终设置的结果如下:

 image

两个画圆的地方是要去掉的,在“默认面板”下,我还真不知道怎么去掉 – -! 但作者的截图里是有去掉的。更简洁。

(我以前抱怨过foobar没法把专辑列表嵌入,因为一直在分栏模式下改动而分栏模式的确无法不依赖插件实现专辑列表的嵌入,想不到原来在“默认模式”下,foobar2000早就可以在“外观设置”那设置嵌入的专辑列表了)

另外一种方法是在分栏模式下,安装一个foo_albumlist插件(这个插件比较难单独下载到,我之前下载的一个HA_FB_OY_Green_Asion版本里有这个插件foo_uie_albumlist.dll)。

最终设置结果如下:

image

怎么样,看起来非常简洁吧?没错,这就是分栏模式的好处,可定制效果大大增加,最终我就选择了这个样式。

注:我没有菜单栏,所以可用按ctrl+p(panel)调出参数设置面板。

这是我写博客这么久碰上的最好的事~有人主动告诉我我没法解决的事~

博客被GFW挡在国内导致的问题

2008-12-15 10:07| 分类:Internet| 标签: | 5,141 次点击

我已两次提到我现在的这个博客域名被GFW的问题,具体可看:《www.chenfangyi.com非典型性撞墙,请更改feed地址》,博客被GFW导致无法使用Google Friend Connect,已经导致了订阅问题和Friend Connect无法使用的问题,这几次想在博客上加一些应用和插件,发现这样的GFW还带来很多问题。

一、Google Adsense广告不能显示,我用的是Adsense Injection插件,可以启用插件并设置好,但框架内的广告页无法显示。看了一下地址,去掉其他参数就是:

http://googleads.g.doubleclick.net/pagead/url=http%3A%2F%2Fwww.chenfangyi.com%2F

很明显,因为doubleclick.net是国外站点国外IP,而又包含了.chenfangyi.com的关键字,所以导致这个地址被GFW了。

二、Sitemap无法通知Google:

我的wordpress用了XML Sitemap Generator for WordPress 3.0.2插件,可以生成sitemap但提示无法通知google和ask.com

image

三、Akismet无法统计:

Akismet是wordpress自带的阻止spam的插件,因为博客升级为2.7后强化了“Akismet统计”这一入口,但点击后直接提示:

image

很明显,也是因为包含被GFW的关键字。

http://0545226b975e.web.akismet.com/1.0/user-stats.php?blog=http%3A%2F%2Fwww.chenfangyi.com

上次chrome还会提示:错误 320 (net::ERR_INVALID_RESPONSE): 未知错误

四、无法在后台更新和自动安装插件

wordpress2.7增加了后台直接更新和安装插件的功能,但在我的博客从没试验成功,怀疑也是因为数据传递URL中有被封关键字的原因。不过这个仅限于猜测,未经证实,因为我也没兴趣去测试一下其他的博客行不行,只知道在我的博客后台搜索和查看插件时提示:API 请求时发生未知 HTTP 错误。这样我就看不到任何插件了。同样,“一键升级”功能也不能用,会提示:升级失败: Could not download distribution (http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip)。不过从本地上传再启用插件是可以的。

肯定还有很多其他的问题,等发现了再加上吧。目前我也没有特别的渠道去申请解封,只能期待GFW快点更新,毕竟我的博客上面没有任何不和谐的内容,多是技术性的文章,应该属于误封吧。可怜我在网上找了几次,都没有找到跟我一样的例子,最多是网站被GFW了,无法从国内访问,可怜我的博客是被禁止了从国外访问。

非常巧的是我的一个在香港的高中朋友和一个在澳门的高中朋友在同一天发现我的博客不能访问。唉,这种事情,真不知道怎么跟她们解释。

网站程序迁移要注意的

2008-12-11 18:18| 分类:服务器| 标签: | 2,218 次点击

我需要把一个站点的程序从虚拟主机转移到独立服务器上,按以往的步骤,第一步应该就是修改一下conn.asp的连接字符串,然后马上测试程序能否直接使用。可我这次偷懒了一下,不想改conn连接字串,而是直接换了一个conn文件——即在几个引用了conn.asp的文件中修改<!– #include file="conn.asp" –>为新的<!– #include file="conn_new.asp" –>,想不到就是这一步操作不够规范和严谨导致我调试了整整一天!

原来,我新建的这个conn.asp编码是UTF-8的,而原来的conn.asp编码是GB2312的,而偏偏我的ASP程序中又到处都是On Error Resume Next,所以出错的页面都是空白一片,没有错误提示。

最终用On Error Resume Next真的是害人啊。。提到的方法解决了。

总结,转移程序平台时,要注意两点:
1、尽量不动源代码或修改少量代码,待测试好之后,证明程序是可以进行平台迁移之后,再做必须的程序上修改。这样可以排除服务器的环境问题。如果没测试好就改了程序,最后运行出错那时如何知道是服务器环境的问题还是程序代码问题?
2、因为有编码问题,所以最好不要添加或覆盖任何代码文件,只能修改代码再保存(不能覆盖)。
3、在每个服务器上代码编辑器和编辑器配置也最好统一,比如我在服务器上的UltraEdit新建一个空文档默认用的是UTF-8编码,而在本机上用EditPlus新建默认用的是GB2312,这样就很可能出问题。
4、打开所有的错误提示功能。比如在ASP程序中注释掉:On Error Resume Next;在客户端IE中去掉“友好错误提示”;在IIS应用程序配置中选择“向客户端发送详细的ASP错误信息”(默认已勾选)。

 

 

以下是这次错误的具体调试过程(留给自己看的):

这次引用的conn.asp编码与主文件冲突导致的具体问题是:

1、部分上传页面不能用了;
2、上传不成功按理说至少也得有错误提示,可是什么都没有。这种问题最麻烦,难调试(最后才知道是设置了On Error Resume Next才没有错误提示,冤啊~)。

在用一些简单的上传例子彻底排除了是组件安装的问题后,我选出有问题的页面中最简单的一个页面:musicupload.asp 进行排查。

删掉头部的一些引用设置编码的文件后就可以了,原来是编码的原因。

当时在虚拟主机上时,因为乱码问题,我把整个upload程序统一设置为了gb2312编码,实现方法如下,在每个文件头部添加一句:<!– #include file="codegb.asp" –> codegb.asp里写上编码方式,具体如下:

<%@ CODEPAGE=936%>
<%response.contenttype = "text/html"%>
<%Response.Charset="GB2312"%>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
</head>

本来我在虚拟主机上引用的是GB2312的conn.asp,所以是正常的,可现在在服务器上我引用的是UTF-8的conn.asp,所以就出现了很多不能上传的问题:

  包含<%@ CODEPAGE=936%> 不包含<%@ CODEPAGE=936%>或<%@ CODEPAGE=65001%>
原虚拟主机 可上传、页面正常 可上传、页面乱码
现服务器 不可上传、页面空白 可上传、页面不乱码

 

我重新在一个简单的上传例子中使用了<%@ CODEPAGE=936%> ,可以正常上传。证明只是我写的这个有问题,其他用到aspupload的程序未必有问题。于是把upload的所有页面都改为了UTF-8编码保存,并把引用的codegb.asp改为codeutf.asp,即为:

<%@ CODEPAGE=65001%>
<%response.contenttype = "text/html"%>
<%Response.Charset="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
</head>

但这样子又会乱码,就是把整个upload文件夹全部转换为UTF-8估计也会有乱码。最后我检查程序时发现了有一句:On Error Resume Next,去掉这句后,再查看网页就提示conn.asp“编码类型不一致”大致的错误,于是立即知道是conn.asp的问题。

实际上,写这个后台upload程序时我还是考虑到迁移的问题的,直接把整个upload文件夹移到服务器上来,直接就可以使用了。

On Error Resume Next真的是害人啊。。

18:01| 分类:服务器| 标签: | 2,448 次点击

一个站点,前台展示页面是一个UTF-8编码,后台程序用的是GB2312。

前台UTF-8,是因为前台用到了大量的Ajax评论,UTF-8方便,不用转码。

后台GB2312,是因为后台有Upload程序,用到了ASPupload组件,当时在虚拟主机上时用UTF-8会出现问题,所以全部就改为了GB2312,现在虽然在服务器上但懒得改回UTF-8,还未测试UTF-8有无问题)

前台和后台放在同一个服务器上,程序分别用两个目录,因为使用同一个数据库,所以我引用了同一个conn.asp文件(前台的那个),但接下来问题一大堆。最可怕的是没有错误提示,出错时只是一个空白页,到最后才发现原来是conn.asp的编码问题。因为ASP程序中写了On Error Resume Next,所以都没有错误提示。

解决办法,注释掉On Error Resume Next,在两个目录下(其实就可以看成两个站点了,前后台程序之间没啥关系)分别放两个conn文件,一个UTF-8编码,一个GB2312编码。让每个站点的根文件夹下都有conn文件,在转移网站程序时也比较方便。

尤其是网上的一些ASP实例,常常用到了On Error Resume Next,然后使用了代码里自己写的错误提示,这样子有的错误也会提示,但没考虑到的错误就不会提示了。如果久没接触ASP,突然用起来很容易忽略这一点,调试起来因为没有错误提示你不会意识这已是个错误!我就是这样,调试了一整天。

另外,这次转移服务器的调试,因为代码中加了On Error Resume Next,除了以上提到的代码编码的错误没有提示外,还有很多错误也都没有提示,比如:上传的文件夹不存在、加水印的组件不支持、文件夹没有更改的权限,这些通通都没提示,调试起来着实浪费时间。

ISAPI Rewrite中正则表达式的应用——URL Rewrite规则

17:15| 分类:web开发 服务器| 标签: | 5,982 次点击

前面提到我配置好了ISAPI Rewrite,其实就是为了实现一个效果,让:www.facepk.com/1 映射到 www.facepk.com/facepk.asp?id=1。因为坐久了腰有点酸,于是躺在床上用UCWEB粗略看了一遍正则表达式30分钟入门教程,写得非常不错,虽然后面都没看懂。不过现在简单的正则表达式应该能看懂并写几句的。

我是在ISAPI Rewrite自带的ReGexTest中测试正则表达式的。只需把rewrite规则写进去再写一段测试文本即可测试,如图:

 image

测试好了就可以写到httpd.conf里了。

总共试了几次:

1、RewriteRule /(\d+) /facepk\.asp\?id=$1 规则的目标太大,所有包含 /数字 的字符串都会被替换,很容易导致同一IIS下其他站点上也进行了正则转换,比如www.xingtan.com/99guiyi.htmlwww.facepk.com/face/20079159254176(8).jpg 都会进行正则转换。

2、RewriteRule /(\d{1,5}) /facepk\.asp\?id=$1 同样目标太大,想到刚开始时看的那个教程,于是加个$,变成:

3、RewriteRule /(\d{1,5})$ /facepk\.asp\?id=$1 就可以了,这个$的意思是必须在/1后马上跟个空字符才进行正则转换。

按理说这么写了之后,www.facepk.com/1www.xingtan.com/facepk/1 会被分别转换为www.facepk.com/facepk.asp?id=1和www.xingtan.com/facepk/facepk.asp?id=1,但实际上只进行了前者的转换。后者并没有,不清楚是什么原因,于是我又加了一条:

RewriteRule /facepk/(\d{1,5})$ /facepk/facepk\.asp\?id=$1

变成了:
RewriteRule /(\d{1,5})$ /facepk\.asp\?id=$1
RewriteRule /facepk/(\d{1,5})$ /facepk/facepk\.asp\?id=$1

但这样子www.facepk.com/1可以生效,而www.xingtan.com/facepk/1 仍无法生效。删了第一句后,www.xingtan.com/facepk/1 后者就可以了。换了一下顺序两个规则就都生效了。估计是两个规则冲突造成的,但不清楚是什么冲突,不去管了,最终可行的表达式:

RewriteRule /facepk/(\d{1,5})$ /facepk/facepk\.asp\?id=$1
RewriteRule /(\d{1,5})$ /facepk\.asp\?id=$1

ISAPI Rewrite/IIS Rewrite无效的可能原因

2008-12-10 6:36| 分类:服务器| 标签: | 8,061 次点击

对SEO的追求有点强迫的症状了。于是用上了ISAPI Rewrite,ISAPI_Rewrite是一个强大的基于正则表达式的URL处理引擎,我安装的是官方的ISAPI_Rewrite3_0058_Lite.msi 免费版。免费版与收费版的主要区别是:“No support for distributed .htaccess configurations, directory and web site level configurations. Only one global httpd.conf configuration file will be loaded from Lite version installation folder.”

安装运行后,打开管理工具中Internet信息管理(IIS管理),在网站单击右键选属性,就可以看到ISAPI_Rewrite已经被加入到了ISAPI筛选器中。

按照默认安装的位置,可以在 C:\Program Files\Helicon\ISAPI_Rewrite 找到 httpd.ini 在此文件中输入Rewrite的规则即可。

正常情况下,修改rewrite规则不需要重起IIS,在为Apache编写的Rewrite的规则中,通常把

<IfModule mod_rewrite.c>
RewriteEngine On RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index.php?$2 </IfModule>

其中黑体的部分去掉即可成为ISAPI Rewrite的规则。

但在我的服务器上,调试了很久都调试不出来效果,不清楚到底有无加载这个筛选器,于是我在虚拟机上又试了试。一次便试验成功了,证明是我的服务器其他地方的配置问题,看到IIS下安装配置ISAPI Rewrite,实现asp的静态化的一句话:“默认是装在C:\Program Files\Helicon下,要注意的是这个目录everyone要有读取权限。”才恍然大悟。

因为对系统盘的权限设置过分严格,所以导致新安装的组件都没有everyone权限,包括这里的Helicon文件夹,所以无法正常运行ISAPI Rewrite。但我添加了everyone的读取权限以后,URL Rewrite仍旧没有生效,又找了很多原因,直到最后只重启了一下变成功了。原来更改了组件的权限之后需要重启IIS。现在总结下:

ISAPI Rewrite无效/ISAPI Rewriterule无效的几个可能原因:

1、最可能的原因:C:\Program Files\Helicon没有开放everyone组的读取权限。

2、其次可能原因:C:\Program Files\Helicon已经开放everyone组的读取权限,但没有重启IIS。

2、不可能的原因1:虽然URL Rewrite功能看起来像是新建了目录,但实际上网站程序所在目录对于everyone组只要有普通的读取权限,并不需要有写权限。只要网站能被访问就不是这个网站权限设置的问题。

4、不可能的原因2:不需要像网上那么多的教程那样在IIS中做其他设置(在每个站点都添加了ISAPI Rewrite的ISAPI筛选器,对于这个免费版,安装完即可在也只能在全局范围内生效。所以不需要对每个站点进行设置。

改了权限后,必须在服务里重启一下IIS服务。但我在虚拟机里面没有任何重启操作(安装完后应该有一次自动的重启)。怎样判断何时重启呢?我有个粗略的方法,IIS对于是否要重启的策略可能是这样:对组件访问权限的更改,要在重启后才能生效;而对组件配置的更改(如httpd.conf)则不需要重启即可生效。在我的虚拟机中刚安装后ISAPI Rewrite程序目录的设置和权限就已经是足够开放的了,而且之后没有更改过权限,所以才不需要重启。

实际上,URL重写还有另外一个软件:IIS Rewrite,因为该软件主页的PR值居然是0,所以就没试过这个软件。接下来学习一下正则表达式,好尽快做出效果。

Windows 2003安装并注册aspjpeg(Persits.Jpeg)组件

1:00| 分类:服务器| 标签: | 5,044 次点击

1、先到官方站点下载aspjpeg组件:http://www.aspjpeg.com/download.html
2、安装,注册码17361-38566-42221
3、无需注册,探针已经提示支持该组件了。(不知道为啥这个组件不需要注册)
4、动网论坛等需要此组件的地方即可马上使用。
5、实际上应该还要修改一下aspjpeg所在文件夹和要添加水印的图片所在文件夹的相关权限。但因为aspjpeg和aspupload同为persit公司的产品,在同一文件夹下,所以权限已经设置过了,见《Windows 2003安装并注册aspupload组件》,而一般要添加水印的图片都是上传的图片,所以这个图片文件夹也正好是设置过权限的,所以就不必再次设置。

Windows 2003安装并注册aspupload组件

2008-12-09 23:27| 分类:服务器| 标签: | 6,009 次点击

刚才访问自己一个站的上传页面,出现了以下错误:

Server 对象 错误 ‘ASP 0178 : 80070005’
Server.CreateObject 访问错误
/facepk/upload/step2.asp,行 14
检查权限时,对 Server.CreateObject 的调用失败。拒绝对此对象的访问。

这个页面是我以前写的,用到了aspupload组件,刚刚把虚拟空间上的站点搬到了服务器上,看来是服务器上没装这个aspupload组件的缘故,于是安装并注册了这个组件,具体步骤如下:

1、下载安装组件,我用的是AspUpload v3.0.0.5 特别版,一步步安装下去,中间需要输入SN,而安装包里自带了。估计“特别版”就是“破解版”的意思。

2、注册组件,打开他的说明文档START.html,发现有误:

说明文档中提到的注册语句是:regsvr32 c:\winnt\system32\aspupload.dll,而实际上默认安装的已经不是这个位置了。安装在c:\Program Files\Persits Software\AspUpload\ 下,所以必须输入:regsvr32 "c:\Program Files\Persits Software\AspUpload\Bin\aspupload.dll" 注册(必须有引号),如图:

image

image

3、修改组件所在目录权限设置:因为我对C盘的权限设置比较严格,所以注册成功后不出所料还是错误页面,这时应该如前面的《Windows 2003安装并注册jmail组件》的所说的,先更改Persits Software的权限,增加一个everyone组,然后刷新,错误就立即消失了。但这次不能删掉everyone组,否则会再次出现同样不能创建对象的错误。

image

4、因为这个aspupload组件不同于前面的邮件发送组件,这里是需要写入文件夹的,所以必须修改一下要上传的文件夹的权限。为了安全考虑,我只把需要上传图片的文件夹权限改了一下(把“修改”那项打钩即可),共有四个文件夹:/bbs/uploadface、/bbs/uploadfile、/bbs/PreviewImage、/facepk/face、/facepk/facebefore、/facepk/music(对于动网论坛,做到这一步还不够,因为上传时如果有用到水印,还会提示:

“Microsoft VBScript 运行时错误 错误 ‘800a01ad’
ActiveX 部件不能创建对象: ‘Persits.Jpeg’
/bbs/inc/Dv_ClsMain.asp,行 43”

我开始时没看清,一直以为是上传的组件错误了,原来是水印的组件。同一家公司的。(我自己写的程序即便没有权限也不会报错,因为On Error Resume Next,这点我下面日志会提到,浪费了我很多时间)

image image image

此文没有任何技术含量,纯属记录备忘,后面还会有一篇《Windows 2003安装并注册aspjpeg组件》­ :mrgreen:

IE安全级别过高导致无法使用serv-u新版

20:33| 分类:web开发 服务器| 标签: | 2,755 次点击

刚才在服务器上装了serv-u 7.3.0.2版,发现变化好大啊,以前是标准的win界面。现在纯粹就是个多了许多ajax效果的web界面。刚开始感觉很不习惯,而且我点那些链接一个也点不开。大概猜到是自己服务器上对IE的安全设置过高导致。于是重置了安全级别为“中”的级别设置,马上就可以了。估计是由于之前设置了禁用javascript或者禁止下载等原因,现在懒得去查了。

之所以用Serv-u是因为看到网上说IIS自带的FTP需要使用系统自己的账户,且不能多帐户不能用虚拟目录,功能太少了,所以就没安装FTP组件,而用serv-u。

Pages: Prev 1 2 3 ...6 7 8 9 10 ...14 15 16 Next