2013年4月26日星期五

解决Windows下安装Eric5时出现的“Sorry, please install QtHelp.”问题

PyQt4在Windows中使用了DirectX作为加速,不过,PyQt4没有使用最新的DirectX库(应该是使用的DirectX9)。在最新的Windows 8中,并不包括这些旧版本的DirectX,这就导致了PyQt4工作不正常,并对Eric5的安装造成影响。

安装Eric5时,会碰到以下错误提示:

Checking dependencies
Python Version: 3.3.1
Found PyQt4
Sorry, please install QtHelp.
Error: DLL load failed: 找不到指定的模块。
Press enter to continue...

这是因为缺少DirectX库导致了这个问题。解决方法:
去微软的官方网站下载DirectX在线安装程序:
http://www.microsoft.com/zh-cn/download/details.aspx?id=35
然后根据提示安装DirectX库即可(可以看到安装的库大部分是2006~2008年的)。

2013年4月23日星期二

解决Cygwin下使用https缺乏证书的问题(比如git)


Cygwin下默认没有证书包,因此使用https会出现以下错误:
error: error setting certificate verify locations
即没有找到相应的根证书位置。解决方法很简单:
运行Cygwin的安装程序setup.exe安装ca-certificates包即可解决。

CMD命令提示符恢复默认代码页936


用一些命令行程序,默认代码页可能会被修改,可能导致不能显示中文、光标错位等奇怪问题。改回来的方法(永久修改参见修改注册表那部分):

临时修改方法,命令行输入:
chcp 936

其它一些语言:
rem 英文
chcp 437

rem 日文
chcp 932

rem 简体中文
chcp 936

rem 韩文
chcp 949

rem 繁体中文
chcp 950

rem utf-8
chcp 65001

如果想将代码页作为默认,需要修改注册表:

1 win键+R打开“运行”对话框,输入regedit打开注册表编辑器。

2 找到 [HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]

3 修改"CodePage"=dword:000003a8

【注】十六进制"000003a8"或十进制"936",表示“936 (ANSI/OEM - 简体中文 GBK)”。

    如果代码页改成65001之后,仍无法正常显示UTF-8字符,则需要改变字体属性:在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定将属性应用到当前窗口。
    通过以上操作并不能完全解决问题,因为显示出来的内容有可能不完全。可以先最小化,然后最大化命令行窗口,文件的内容就完整的显示出来了。

----------------------------------------------------------------------------------------------------------------


附: chcp详解

功能说明
显示活动控制台代码页数量,或更改该控制台的活动控制台代码页。如果在没有参数的情况下使用,则 chcp 显示活动控制台代码页的数量。

补充说明
只有随 XOX 一起安装的原始设备制造商 (OEM) 代码页才能在使用 Raster 字体的命令提示符窗口中正常显示。其他代码页则可在全屏幕模式下或者在使用 TrueType 字体的命令提示符窗口中正确显示。 就像在 MS-DOS 中一样,您不必准备代码页。 在指派了新代码页之后启动的程序将使用该新代码页,但如果程序(除了 Cmd.exe)是在指派新代码页之前启动的,那么该程序将使用原来的代码页。

语法
chcp [NNN]

参数
NNN 指定代码页。下表列出了MSDOS所有支持的代码页及其国家(地区)或者语言:
代码页     国家(地区)或语言
437          美国
850          多语言(拉丁文 I)
852          斯拉夫语(拉丁文 II)
855          西里尔文(俄语)
857          土耳其语
860          葡萄牙语
861          冰岛语
863          加拿大 - 法语
865          日耳曼语
866          俄语
869           现代希腊语
936           简体中文
950           繁体中文
65001       UTF-8

/? 在命令提示符下显示帮助。

示例
要查看活动代码页设置,请键入:
chcp
出现类似于下面内容的消息:
活动代码页:437

如果要将活动代码页更改为 850(多语言),请键入:
chcp 850
如果指定的代码页无效,则会显示以下错误消息:

无效代码页

参考文章:http://m.oschina.net/blog/108542

2013年4月22日星期一

C语言中关于char是否为有符号的问题


gccchar默认是有符号数,但是“char a = 255;”是正确的,a会自动保存为-1。如下代码:
char ch = 255;
printf("ch = %d\n", ch);
结果为-1
那么,这里有这么一个现象:
char ch = 255;
ch -= 128;
printf("ch = %d\n", ch);
得到的结果为“ch = 127”,这并不是因为255 - 128 = 127,而是-1 - 128 = 127。因为char是单字节的,-1 - 128是不够减的,由于存储空间只有8位,第九位无法表示符号,所以被舍弃,丢了符号位的数字转换为二进制成为了127
这里举个简单点的例子:
-1288位二进制为1000 0000
-128 - 1 得到的8位二进制为 0111 1111 DEC:127
这是因为,8位二进制无法表示-129,舍弃第九位后,就变为127了。

如何查看自己的gccchar的处理呢?方法如下:
#include <limits.h>
int main()
{
    printf("CHAR_MIN = %d\n", CHAR_MIN);
    return 0;
}
limits.h中定义了char的最小值CHAR_MIN,如果CHAR_MIN = -128,则char是有符号数,如果CHAR_MIN = 0,则char是无符号数。

解决Cygwin下vi和vim的复制粘贴问题

vi(vim)修改了默认的鼠标行为,这样导致我们无法调出右键菜单复制文本。解决方法很简单,按住shift键屏蔽vi(vim)对鼠标的控制,然后用鼠标复制代码即可。

解决Cygwin下vi和vim方向键和Backspace不好用的问题


默认的vi(vim)没有配置文件,因此导致了方向键出现ABCD,以及Backspace只会移动光标,字符不消失的问题。cygwin自带vi(vim)配置文件的例子,直接拷贝即可,参考以下命令:
$ cd /usr/share/vim/vim73
$ cp vimrc_example.vim  ~/.vimrc

2013年4月14日星期日

QQ一代死保上二代保护和申诉心得


  网上有好多的心得,我这里只说一下我的经验,可能与网上有出入。另外,不排除腾讯以后会修改策略,这里仅以这篇文章发布的时间为准。
  我有两个一代死保号,仅知道2个历史密码和当前密码。根据我的观察,腾讯的策略并没有那么复杂,关键在于IP地址是否经常变化。如果能保证IP地址不变(一个数字都不变),大概挂3~4天就能改密码(网上说的7天大概是因为IP地址后两位有变化),2个月就能上保。下面我详细说明下我是怎么做的。
  先解释一下IP地址的重要性。IP地址用于身份识别,理论上每个上网的人必须分配一个唯一的IP地址(类似于门牌号码),这样别人才能找到你并与你通信(PS:警察叔叔可以随便就能找到你,网络并不是完全匿名的)。根据运营商的策略,每个地区会有很多固定的IP地址段,将IP地址段与位置联系起来,就能大概知道上网者的位置。这也是为什么网上的天气预报能自动判断你所在的城市,而跟贴评论的时候,有些网站也会显示你是XX地区的网友。当然,IP地址的位置不一定绝对正确,但准确率是相当高的。
  根据以上的原理,腾讯作为一款网络工具,最直接的方式是通过IP地址来判断你是否真的是你(腾讯不能查你的身份证,也不能通过密码来确定,因为你的密码可能会被盗)。因此,如果你一直在用某个固定的IP登录QQ,那腾讯基本上就确定你是同一个人。如果你经常用北京的IP:1.2.3.4(此地址为虚构)地址登录QQ,突然用上海的IP:2.3.4.5地址登录QQ,会发现有验证码。并且聊天的时候,你的朋友会被提醒,你是在不常用的地点登录的。这是因为腾讯感觉有问题,你可能不是真正的你。
  上面说了,理论上一人一个IP地址,但实际上,由于IP地址资源比较少,存在很多人共享一个IP地址上网的情况,比如:网吧、办公室、手机2G/3G网络等等。还存在IP地址经常变化的情况,比如网上经常说的宽带拨号用户。这时候腾讯就不能判断你是否是同一个人了。因此,在这种情况下,上保和申诉都是非常困难的(甚至挂很长时间密码都改不了),并且时间长度也不一样(但肯定超过2个月)。
  当然,腾讯还有其它辅助手段,来判断是否允许你上保和申诉成功。比如:是否是同一个系统、提供的资料是否完整准确、是否有争议(好多人在申诉)。
  下面说一下我的过程。我采用的是最优的方式,即固定IP,固定系统,号码没有争议:我弄了一台Windows服务器(可7×24小时运行),带独立IP地址,因此IP地址可以保证完全一样。系统也可以保证同一个。号码从比较可靠的人那里得到的,没有别人申诉。
  刚开始挂上,不要立即申诉,而是马上删除所有不相关的好友,添加3个以上的可以帮忙申诉的好友。这几个好友不要在同一个IP地址下。好多人喜欢将自己的小号作为帮助申诉的好友,并且这几个小号天天挂在同一台电脑上,这样容易申诉失败。
  耐心的挂3~4天,期间重新登录一两次。然后打开修改密码的页面,会发现可以修改密码了。修改密码后,记下原来的密码,这样就有一个历史密码了。如果你的历史密码没有凑够3个,则每隔十天换一次密码,以凑够历史密码。有时候,挂的时间长了(3天以上没下过线),会发现密码仍然不能改,这时候重新登录一下就可以改了。
  注意,对于价值比较高的号码,经常会收到类似:“您的号码即将冻结”、“您的号码有异常”等等的电子邮件,这类邮件是典型的钓鱼邮件,专门盗你号的,千万不要上当。判断方法很简单,看看发件地址是不是腾讯的就可以了(腾讯官方地址:service@tencent.com),另外QQ邮箱也会有提示,标明此邮件非腾讯官方邮件(腾讯的官方邮件都是蓝色标题)。
  凑够历史密码以后,剩下的就是等待了。计算好时间,挂两个月。期间有时间就重新登录一下QQ,并和几个好友寒暄几句,这样是为了刷登录和通话记录。最好开通会员(我用手机绑定的)和财付通(我绑定了银行卡并做了实名),并充上点钱。QQ资料填写成你的,姓名、生日、电话等敏感信息,要填写准确,你可以设置成仅自己查看,这样防止别人知道你的真实信息。
  两个月后,我尝试着把其中一个号拿去安全中心上二代保护(下午5点左右发起的),我只填写了我的真实姓名和三个历史密码,等待四个小时后,提示我证据不足,失败了。于是我发起申诉,填写了我的姓名、身份证号、历史密码,并发起了三个好友辅助(如果这三个号都是你的,注意完成辅助的速度不要太快,要隔上个10分钟完成一个辅助;三个号码的常用登录地址不要一样),由于已是凌晨,我先睡觉了。第二天,我惊喜的收到了申诉成功的邮件。
  我第二个号码挂了接近3个月,直接上保成功。上保成功后,我又接着申诉,结果申诉也成功了。
  网上有教程说,上保/申诉的时间很重要,一般是凌晨、中午。我个人感觉不太靠谱,因为上保/申诉基本上都是机器自动判定的,很少有人工介入。