其他技术

暂时未能找到对应分类的技术相关资料信息

Postgresql的pgadmin 4启动仅显示启动界面

MitchellChu 2017-06-30 其他技术 编程语言

今天安装postgresql 9.6之后,想使用pgAdmin 4打开进行管理,结果,pgAdmin 4打开后,仅显示软件启动界面,一直都没反应,启动界面用鼠标点击下就消失了,然后,然后就没有然后了。多次尝试都是这个情况。但每次启动界面出现后,进程管理器中是能够看到该进程。每启动一次,后台就会多出一个进程。 网上搜索一圈,在stackoverflow上看到说是要安装Java 8,虽然不太相信(pgAdmin使用的python,Flask),但抱着试试心态也装了个Java环境,但没任何作用。无奈之下,删除重装,问题依然如故。 最后的最后,在看pgAdmin的maillist的时候,发现有个问题:a bug report: pgAdmin4 only shows splashscreen, no UI, no error这个问题进去一看,和我的描述一模一样,前面的thread说是1.4要升1.5,可我的pgadmin已经是1.5。后面看到Mike Surcouf说的,是因为proxy的问题,瞬间醒悟。我一直都启用全局代理的呐,关掉关掉!! 解决方案: 在pgAdmin 4(v1.5)下,直接关掉代理,重新启动pgAdmin 4一切正常。

Python重新安装所有模块

MitchellChu 2017-03-10 其他技术

系统重装后,Python2.7也重装了,重装的时候,Python选的路径还是原来的,直接覆盖,因为很多packages,舍不得!但在使用命令行工具的时候,却报错: Fatal error in launcher: Unable to create process using '"' 处理的方法是将所有的python2.7下可以用命令行直接调用的包重新安装。也即Scripts文件夹下的exe对应的包重装,方法如下: @echo OFF REM 指定Scripts所在路径 set ScriptsHome=D:\Program Files\Python\2.7\Scripts REM 遍历文件,并获取文件名 for /F "delims=\" %%a in ('dir /b /a-d /o-d "%ScriptsHome%\*.exe"') do ( REM 调用pip install来重新安装, REM 注意::这里使用--force-reinstall参数 pip install %%~na --upgrade --force-reinstall ) 在重新安装的过程中,会有很多package提示没有(因为那时真的没有,有些包提供了几个命令行工具而已!=.=!!!),忽略即可,实在不放心,你可以尝试两遍上面的代码来重装,当所有的packages重新安装后,直接使用时将不会出现上面的错误。   TIPS:在安装的时候 ,如果有的包依赖了lxml的话,将会出现报错: Cannot open include file: 'libxml/xpath.h': No such file or directory ********************************************************************************* Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed? ********************************************************************************* 这个报错是因为lxml在编译安装(需要VC++的编译环境,没有的话,请先安装VCForPython27,微软官网下载)的时候需要libxml2的支持,然而,似乎没有简单的方法可以直接处理,因此,直接到这里1下载对应的whl文件来进行安装更合适。 pip install path\to\lxml.whl   当然,如果你pip都报错的话,自然需要先安装好pip这个命令在来操作上面这些了。   参考: 1. http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

使用Scrapy构建自己的定制网络爬虫

MitchellChu 2016-03-12 其他技术 编程语言

爬虫(Web Spider or Web Crawler),顾名思义:一个在网站之间互相游走的虫子,专好觅食各类页面数据。随着Spider技术门槛降低,爬虫也开始泛滥起来,很多时候爬虫变成了扒虫。然,技术本无善恶,全在用者之念。此处不做过多计较,我们当下要讨论也仅仅是定制一款自己的网络爬虫,仅此。
爬虫就Mitchell个人经验来说分为两大类:
•通用型网络爬虫:该类爬虫并无明确采集目标,每个能够爬及的页面都是其采集对象,除非满足系统指定条件,否则此类爬虫基本全年无休的辛勤劳作。最常见的就是搜索引擎的爬虫,如:Google,Baidu,Yahoo,Bing等;
•专用型网络爬虫:这种爬虫仅针对自身偏好的网站或者主题作为采集目标,采集到的内容或涉及到的URL为此爬虫不感兴趣的,将被爬虫直接忽略,此类爬虫根据需要采集的目标多寡采集时间有所不同。如:各类垂直搜索站,金融爬虫,站点采集等;

FLV音频视频文件的加密解密方式

MitchellChu 2016-03-02 其他技术

在FLV文件结构一文中,我们已经了解了FLV文件的大致结构信息,同时在FLV文件校验一文中,我们可以完成对FLV文件的完整性进行校验。此文在这两篇文章的基础上尝试进行更深入一些的探讨——对FLV文件进行加密和解密操作。 在互联网时代,资源的分发已经变得非常容易,FLV也不例外,对于资源的版权方来说,分发难度的降低一方面降低了自身资源的传播成本,另一方面却由于没有良好的防止非法分发而带来对自身的利益侵害。稍稍驻步,我们就能看到已经有很多为保护版权而创造的各种方法,CSS。AACS,Key 2 Audio,Always-Online等等。本文作为保护FLV来说,也算是一种尝试,在实践中,灵活的使用也可一定程度保护资源的非法传播。下面让我们来简单聊聊:   Mitchell Chu 注:以下方法名称并非“官方”说法,而是自创,请注意!   第一式: 反位 反位的方法算是最基础的加密方式,原理就是将二进制中的比特位全部取反(注意:不是反码,是特定的异或操作)。代码如下: byte GetReverse(byte b) { return (byte)(b ^ 0xFF); } byte Encrypt(byte data) { return GetReverse(data); } byte Decrypt(byte data) { return GetReverse(data); } 加密: 对每个字节进行操作之后,我们就能得到一个被加密的新的FLV文件,此时,FLV文件的Header,Tag之类的已经全部被抹掉了,剩下的就是一堆数据而已。 解密: 解密此文件的方式非常简单,仅需要对FLV重新再来一遍异或操作即可得到原始文件。 优缺点:  这种加密解密方法的优点是,简单的没有负担,无需任何高达上的算法,不需要复杂的操作。但缺点是,只要有原始文件对比后,基本瞬间能了解加密算法,破解难度很低。 说明: 这种方法并非一无是处,相反,操作的恰当,还是有可为之处,比如,我们仅对某些敏感数据进行操作(哪些是敏感的?可以在FLV文件结构一文中找找:P),那么,在表面看起来这是一个完整(也可以是不完整)的FLV,但得到数据,没有得到具体算法的人拿到FLV也不再那么容易发现数据的加工之处。播放之时,却会因为数据的错误导致播放失败。 说到这里,看到网上曾经有了对FLV的加密方式是对每个字节进行-128,在此表示怀疑:此方法能否保证加密后的数据是真的能够被安全还原么?    第二式:对称加密 对称加密这个方法的原理是让合法用户在请求之后,系统同时发送解密密码,这样,用户在获得FLV资源的时候,同时拥有一个匹配的密码,这样,在播放之前,可以通过这个密码来得到正常的FLV源文件。 这个方法的实现种类很多,这里就不放出代码,只要是对称加密方式均可用在此处。 加密: 初始化密码,而后用对称加密算法+密码对FLV文件进行加密,得到加密后的FLV文件。 解密: 获得密码,而后用相匹配的对称加密算法+密码来完成对FLV的解密,得到正常的FLV文件。 优缺点: 如果不嫌事多,可以达到一人一码或者说一机一码(广告词啊,这是),但劣势也明显,一旦获得一次密码,也就丧失了对FLV的控制权,因为解密后,就是FLV原始文件嘛——所以,很多时候,要隐藏机密算法。 说明: 稍显复杂的一个算法,但在使用配套的客户端(Flash Player/PC 播放器等),还是能够比较好的完成对FLV的保护工作的,不同重点的防护是对自身加解密算法和FLV对应文件密码做保护,同时还得顾虑到解密的文件处理方式。   恩,本来还有第三式的,但还是到此为止吧,以免贻误众生。 使用上面的加密解密方法基本上已经能够完成对FLV的保护,当然,要保护FLV也不一定要使用加密方式,当年的Key 2 Audio不是通过创造多余的数据区来达到毁灭消费者的光驱么。 本人并不是积极的DRM(数字版权管理)拥护者,个人觉得适当保护对版权所有者,正版消费者有一定的益处,但过度的保护反而会让版权者迷失,而失去精进的动力,陷入过度的依赖DRM,反而可能会伤及正版消费者利益,比如:Online-Always的DRM,当年刺客信条的正版用户体验竟然不如盗版 。  

FLV文件完整性校验方法

MitchellChu 2016-02-28 其他技术

书接上回,我们讨论了FLV文件的结构,有了这些基础之后,我们就能够对FLV文件进行一些操作了,比如本文要讨论的——校验FLV文件的完整性。 完整的FLV文件应该按照FLV文件的结构提供完整的数据信息,如:FLV Header,FLV Body中的Previous Tag Size,Tag。那我们下面由简入繁的步骤来对FLV文件校验一番。 最简单的校验方法,仅校验FLV Header信息,如(.NET代码): public static bool IsValidFlvHeader(byte[] bytes) { if (bytes.Length != 9) return false; byte[] header0 = new byte[] { 0x46, 0x4C, 0x56 }; byte flvVer = bytes[3]; byte flvType = bytes[4]; byte[] header_offset = new byte[] { 0x00, 0x00, 0x00, 0x09 }; if (!header0.SequenceEqual(bytes.Take(3).ToArray())) return false; if (flvVer != 0x01) return false; if (flvType != 0x01 && flvType != 0x04 ...

FLV文件格式详解

MitchellChu 2016-02-28 其他技术

在集体挺进HTML5的时代,来讨论Adobe Flash相关的话题似乎有点过时,但现如今还是有很多的视频网站采用的是Flash播放器,播放的文件也依然还有很多是FLV格式,而且仅从一个文件格式的角度去了解和分析FLV应该也还说的过去的。 FLV(Flash Video)是Adobe的一个免费开放的音视频格式,babala~~ 省略若干字的介绍,要看,到官网看吧,这里不赘述,我们主要来讨论下FLV文件格式的细节,在此之后,我们会进一步讨论下FLV的加密解密相关内容。 整体上,FLV分为Header和Body两大块。 Header: 记录FLV的类型,版本,当前文件类型等信息,这些信息可以让我们对当前FLV文件有个概括的了解。 Body: FLV的Body是Flv的数据区域,这些是FLV的具体内容,因为FLV中的内容有多种,并可同时存在,因此,Body也不是一整块的数据,而是由更细分的块来组成,这个细分的块叫Tag。 这就是整个FLV的大概结构,下面我们进入到比特/字节数据的世界,看看FLV的内部世界。   HEADER Flv 文件的Header总共由9个字节组成,他们构成如下: ---------------------------------------------- 字节序 | 46 | 4c | 56 | 01 | 05 | 00 | 00 | 00 | 09 | ---------------------------------------------- 字符序 F L V 1 / \ 9 ...

Windows 7下启用对SATA硬盘支持的AHCI模式

MitchellChu 2016-02-18 其他技术

在主板支持AHCI(Serial ATA Advanced Host Controller Interface)模式的情况下,一般为了兼容也会将这个模式切到IDE的模式,在IDE模式下使用SATA硬盘,写问题不大,但读的速度大受影响,建议在Win7下开始对SATA硬盘的支持以获得更好的读性能。 如果Win7没有开启SATA模式的时候,切换到AHCI模式会出现蓝屏,因此,操作顺序应为: 1.Win7上先行切换SATA模式(后附方法) 2.重启到主板切换为SATA的AHCI模式 3.重启后进入Win7,自动安装AHCI相关的驱动 4.重启,正常使用.

用时间换空间的缓存算法

MitchellChu 2016-02-18 其他技术 编程语言

在使用Scrapy爬网站的时候,产生出来的附加产物,因为在Scrapy爬取的时候,CPU的运行时间紧迫度不高(访问频次太高容易被封禁),借此机会难得来上一下,让自己的内存解放一下。 算法原理: 通过将要缓存的数据用二进制展开,得到的二进制数据映射到缓存字段上,要检验是否已经缓存过,仅需要去查找对应的映射位置即可,如果全部匹配上,则已经缓存。 # 二进制就是个二叉树 # 如下面可以表示出来的数据有0, 1, 2, 3四个(两个树独立) 0 1 / \ / \ 0 1 0 1 因此对缓存的操作就转化为对二叉树的操作,添加和查找只要在二叉树上找到对应路径的node即可。   算法关键代码: def _read_bit(self, data, position): return (data >> position) & 0x1 def _write_bit(self, data, position, value): return data | value << position   实际使用效果如何呢? 在和Python默认的set相比较,得出测试结果如下(存取整型,不定长字符串,定长字符串): Please select test mode:4 Please enter test times:1000 ==================================================================================================== TEST RESULT:: ==================================================================================================== set() ...

Python在Console下显示文本进度条的方法

MitchellChu 2016-02-13 其他技术

在用Python处理耗时的任务时,往往希望能够了解到任务当前的处理进度,这个时候需要在任务中不断打印出任务的进度信息。一般我们是这样的: def process_mission(): """ 任务处理方法 """ # 这里是任务处理过程 print('当前处理到第[%d]项' % count) # 这里是任务处理过程  这种方式会在窗口输出一堆类似下面这样的信息: 当前处理到第1项 当前处理到第2项 当前处理到第3项 当前处理到第4项 当前处理到第5项 .... 这种信息有可能非常非常的长,也有可能输出的时候非常非常的快,以至于根本就无法看清楚(输出非常快的时候)。 这时候,我们期待这样的功能: [================== ] 25.60% 但如果纯粹的使用print是无法达到效果的,会变成和前面一样,满屏都是这种杠杠。 如何正确显示进度条呢? Python提供了一个模块,叫:progressbar,当使用这个模块之后,你要显示进度的仅需如下: import progressbar # 先定义一个进度条 # http://blog.useasp.net/ pbar = progressbar.ProgressBar(maxval=100, \ widgets=[progressbar.Bar('=', '[', ']'), ' ', \ progressbar.Percentage()]) for i in xrange(100): # 更新进度条 pbar.update(i+1) pbar.finish() # Ok,到此完结。  是不是很容易就完成进度条的显示?不过遗憾的是,这个python模块并不是默认的,而是需要安装: pip install progressbar 如果没有安装pip可以参考这里 。 对于只要一个简单进度条的人来说,安装个python包似乎有点动静太大,那么,自己动手写一个便是了。 下面是Mitchell自己写的一个类似的进度条,不用安装包,简单易用。 # 在使用本方法之前,请先做如下import # from __future__ import division # import math # import sys # ##blog.useasp.net## def progressbar(cur, total): percent = '{:.2%}'.format(cur / total) sys.stdout.write('\r') ...

VS清除打开项目时的TFS版本控制提示

MitchellChu 2015-12-15 .NET技术 其他技术

对于曾经做过TFS版本控制的项目,在版本控制服务不可用的时候,依然会在每次打开项目的时候都提示:当前项目是版本控制的项目,但是当前版本控制不可用,balabala的信息,如果是需要进行版本控制的项目在临时无法连接到版本控制服务器的时候出现这个提示,也属于正常的,但是如果是不再需要进行版本控制的项目,还这么次次打开都这么提示,就有些受不了——关键是,没有TFS,只能想办法删除了。 在项目中要永久清除TFS版本控制,需要操作三步(请确保操作之前没有在使用当前项目): 清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc 删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可; 修改项目的解决方案文件:*.sln 先要确认解决方案文件(*.sln)是可修改的,如果是Read-Only的文件,则需要先调整为可修改。 切勿使用Visual Studio打开文件,使用文本编辑器打开*.sln文件,在文件中,我们将能看到类似下面的代码: GlobalSection(TeamFoundationVersionControl) = preSolution SccNumberOfProjects = 4 SccEnterpriseProvider = {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} SccTeamFoundationServer = here is your project's tfs SccLocalPath0 = . SccProjectUniqueName1 = project-unique-name1.csproj SccProjectName1 = your-project-name ...

Sublime Text一个文件内创建多个代码片段(snippets)

MitchellChu 2015-11-30 其他技术

在使用IDE做开发的很多时候,为了减少代码的输入,会创建代码的片段,在需要的时候直接呼出即可。这种方法往往能够提高我们的效率,同时也大大降低我们代码的出错几率!在Sublime Text中,同样提供了创建代码片段的功能(Snippets),但ST默认提供的创建代码片段的方式是一个代码片段一个文件,这种方式对于代码片段的管理有些不便——虽然和Emacs一样提供文件夹的方式来集中管理,不过还是有些不够方便,本文就从创建ST默认的代码片段开始,到一个文件多个snippets的过程做个记录。 ST(Sublime Text)创建Snippets ST的Tools->New Snippet...为创建代码片段,点击后,出现代码片段的模板,如下(ST3): <snippet> <content><![CDATA[ Hello, ${1:this} is a ${2:snippet}. ]]></content> <!-- Optional: Set a tabTrigger to define how to trigger the snippet --> <!-- <tabTrigger>hello</tabTrigger> --> <!-- Optional: Set a scope to limit where the snippet will trigger --> <!-- <scope>source.python</scope> --> </snippet> 这个即是单个snippet的全貌了。 TIPS: content :这个即是代码片段,注意: <![CDATA[ ]]>  这个是不能删掉的,表示数据内容。如果要开启Tab触发的话(一般都会开启吧),那么: tabTrigger:这个就需要取消注释了,这个里面填写的是触发字符串,当在ST编辑时,和此内容匹配时,即可用Tab直接呼出content内容来替换当前位置tabTrigger的内容 scope: 应用的范围,Mitchell Chu创建比较多的snippet是针对python的,所以,这里我一般是source.python,当然,你也可以是其他内容,比如,针对js的可以是source.js 但根据需要对上面三个内容作出了适当修改后,我们就得到了我们需要的一个代码片段了(snippet),比如像下面这样: <snippet> <content><![CDATA[ #!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright @ ${1:2015} ${2:Mitchell Chu} # Blog: http://blog.useasp.net/ ]]></content> <!-- Optional: Set a tabTrigger to define how to trigger the snippet --> <tabTrigger>!python</tabTrigger> <!-- Optional: Set a scope to limit where the snippet will trigger --> <scope>source.python</scope> </snippet> 确认无误,我们保存到文件即可完成一个代码片段的添加。 注意: 代码片段的文件一定要保存为:.sublime-snippet...

Python产生token唯一值的算法性能比较

MitchellChu 2015-11-08 其他技术

在很多场合的时候,我们都需要产生不重复的字符串来标志操作的唯一性,比如:HTTP请求中,我们需要产生SessionID,在数据存储的时候,我们也可能需要生成唯一的字符串来作为数据的ID以便我们进行索引。本文的由来是在使用tornado的时候,需要使用Session,Session需要有唯一的ID值。为了尽可能快速的生成安全可用的Session ID,而对Python当前的一些比较通用的生成方法进行了比较。为了方便说明,后继的所有说法均以token作为SessionID, 唯一字串等的统一表述。 在网络中比较流行的是使用uuid4().hex的方式来生成token,但另外一种声音是,uuid4().hex的安全性不高,需要使用安全性更高的算法来代替,后继出现了使用os.urandom(24),或者自行随机生成字符串的形式(uuid4使用的是os.urandom(16)),再到后来,使用OpenSSL和M2Crypto的方式来生成随机数。OpenSSL和M2Crypto需要Python安装pyOpenSSL和M2Crypto。M2Crypto由于接触少,因此没有对M2Crypto进行测试。   测试环境: CPU: Intel Xeon E3 3.30Hz 3.70Hz Memory: 16GB System: Windows 7 64-bits # times:测试次数 # func: 要测试的函数名称 # 此方法是入口方法 # 各个算法以函数的形式定义,接受times参数即可——By MitchellChu def crash_testx(times, func): import time print('\r\n--------------------------------------------') print("test function: %s" % func.func_name) print("begin time: %s" % time.strftime('%Y%m%d %X')) begin_time = time.time() (crashed_times, hash_data_len) = func(times) print("end time: %s" % time.strftime('%Y%m%d %X')) print("take time:%s" % (time.time() - begin_time)) print("test times: %d, crashed times:%d, hash data length:%d" % (times, crashed_times, hash_data_len)) print('--------------------------------------------\r\n')   产生方式(generate method) ...

Windows下git使用代理服务器的设置方法

MitchellChu 2015-08-26 其他技术

SVN中,使用TortoiseSVN来进行版本控制时,设置代理非常简单,只需要在设置里面添加代理的信息即可。而git在GUI(v0.17.GITGUI)中却无法找到类似的设置,只能求助git bash来设置。 Git支持四种协议1,而除本地传输外,还有:git://, ssh://, 基于HTTP协议,这些协议又被分为哑协议(HTTP协议)和智能传输协议。对于这些协议,要使用代理的设置也有些差异: 使用git协议时,设置代理需要配置core.gitproxy 使用HTTP协议时,设置代理需要配置http.proxy 而是用ssh协议时,代理需要配置ssh的ProxyCommand参数 由于个人需求仅仅是HTTP的代理(相对来说,HTTP有比较好的通适性,Windows配置git/ssh比较棘手),设置的时候,只需要针对单个设置http.proxy即可,在需要使用代理的项目下面使用git bash如下命令进行设置 ——你的Uri和port可能和我的不同,你懂的。: git config http.proxy http://127.0.0.1:8088 # 也可以是uri:port形式  这个是不需要鉴权的代理设置,如果需要鉴权,可能需要添加用户名密码信息: git config http.proxy http://username:password@127.0.0.1:8088 如果git的所有项目都需要启用代理,那么可以直接启用全局设置: git config --global http.proxy http://127.0.0.1:8088 为了确认是否已经设置成功,可以使用--get来获取: git config --get --global http.proxy 这样可以看到你设置在global的http.proxy值。  需要修改的时候,再次按照上面的方法设置即可,git默认会覆盖原有的配置值。 当我们的网络出现变更时,可能需要删除掉原有的代理配置,此时需要使用--unset来进行配置: git config --global --unset http.proxy  在命令之后,指定位置的设置值将会被清空,你可以再次使用--get来查看具体的设置情况。  如果使用了HTTPS,肯呢个会碰到HTTPS 证书错误的情况,比如提示:SSL certificate problem。。。,此时,可以尝试将sslVerify设置为false: git config --global http.sslVerify false  恩,到此,可以试试git来获取/更改项目了,此时,项目应该是使用代理来进行通讯的。   后记: 如果非必要,一般不使用--global的方式来设置代理,毕竟代理有的时候访问一些项目比直接访问还慢,特别是当代理在国外,项目源在国内的时候,按需使用才是王道。 不要多次使用不同的参数来设置代理,一般使用文中两种方式酌情选用即可,--global,--system,--local各级设置后,可能会给自己带来不必要的麻烦。git默认是先到git Repository的配置文件中查找配置文件,如果没有才会到--global设置的文件中查找,因此,单个项目文件中的设置会覆盖--global的设置。 使用--global来配置的信息保存在当前用户的根目录下的.config文件中,而仓库中的配置保存在项目仓库的根目录下的.git/config文件中。 如果是Linux的用户,再使用git/ssh协议时,根据网上的说法,需要使用connect工具来做代理的转换。—— 本人Linux下的暂时没有配置git使用代理,暂时无法验证,摘录方法如下: GIT协议配置:安装完毕connect之后,你可以在特定的目录中建立一个socks5_proxy_wrapper(或其他的文件名亦可),然后文件内容改为: #!/bin/sh connect -S 127.0.0.1:8088 "$@" 而后即可以配置git了,设置gitproxy: git config core.gitproxy /path/to/socks5_proxy_wrapper # 路径要改 抑或export GIT_PROXY_COMMAND: export GIT_PROXY_COMMAND="/path/to/socks5_proxy_wrapper" ...

获取本机系统内已经安装的浏览器列表

MitchellChu 2015-01-15 .NET技术 其他技术

最近突然碰到个比较棘手的问题,客户需要罗列出机器上所有可用的浏览器列表,至于作用么,就是让用户可以选择自己喜欢的浏览器来浏览指定信息。对于混杂的浏览器市场,这个需求确实够喝上一壶的了。 带着泪流满面的表情进入了无穷无尽的方案寻找中,不过到现在还是没有一个完满的答案。本文就记录下已经得到的一些信息吧。 对于一些标准的浏览器(有国内的么?自然是没有,谢谢),他们都会将自己的信息保存到StartMenuInternet这个注册表项下面,里面提供了丰富多彩的内容,基本上你想要的,他都能告诉你。需要注意的是,在64位系统中,会有两个位置可以找到。 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Clients\StartMenuInternet HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet 上面这两个路径下,就包含了机器上所有的浏览器信息(再次排除国内浏览器)。如果是在32位系统中,只有后一个路径可以使用。 知道位置之后,在程序中要获取浏览器列表信息就比较简单了,参见以下C#(.NET)代码: public static void BrowsersData() { RegistryKey browsersKey; browsersKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet"); if (browsersKey == null) browsersKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); using (browsersKey) ...

将自己写的Python代码打包放到PyPI上

MitchellChu 2014-09-09 其他技术

如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index)。刚开始我以为要将代码打包放到PyPI上是一件非常复杂繁琐的事情,不过看过《Dive Into Python 3》的PACKAGING PYTHON LIBRARIES介绍(CHAPTER 16),并自己动手操作了一下,发现打包发布这个事情并没有想象中的那么有难度。为了方便其他朋友阅读的方便,就尝试写了这个博文,来记录下如何将自己写的Python代码打包上传到PyPI上。 在Python的世界里,有个叫Distutils的工具模块可以帮我们轻松的解决这个问题,既然这样,让我们开始打包之旅吧。 要打包代码,首先你的确保你的代码得是个包。比如,你写了一些功能的代码块,为了方便引用,你就需要将代码变成一个包,下次需要使用的时候,直接引用这个包里面的某个具体功能就好了。在Python中,要将这些代码变成包非常容易,你的这些功能的合集,可以用一个你觉得合适的名称来命名,创建这个命名的文件夹,并在文件夹下创建一个__init__.py文件,剩余的就是将你这些代码放入到这个文件夹下面即可。整理成包的文件结构大概像下面这样: somefunctions/ | +-- __init__.py | +-- myscripts1.py | +-- mysscripts2.py | +-- mymorescripts.py | somefunctions就是你包的名称,下面my***.py的各种文件就是你原有的各种代码模块。是不是很简单就将自己的代码变成了包?确实很简单,你这步就是新建一个文件夹,把文件全放进去而已——哦,还有添加个__init__.py文件(文件内容可以为空). 到这里,我们已经有Python包了,如果不传到PyPI上的话,你都可以直接用了,最直接的方法是将这个文件夹拷到你的项目目录下,然后在项目代码里,你大概就能引用它了: import somefunctions module = somefunctions.myscripts1 ### 这里你就可以调用myscripts1里面的功能了. 当然,我们的目标是打包到PyPI上,而不是将这个包拷来拷去的,后面安装一下,引用起来将更加的方便。 好了,既然要放到PyPI上,那么我们就需要在上面的基础上,在加点料。首先,我们需要调整下文件的目录结构,把上面的改成下面这个样子: somefunctions/ | +-- somefunctions/ . | . +-- __init__.py . | ....

reStructuredText链接报重复目标名的编译警告

MitchellChu 2014-09-06 其他技术

在进行reStructuredText的文件编译的时候,有的时候会出现下面的警告信息: warning: check: Duplicate implicit target name: "license" 编译中出现这个警告是因为.rst文件中包含了两个相同的链接名称,但这两个相同的名称指向的目标地址却不一样导致的。比如下面的这两个: `我的博客 <http://blog.useasp.net/>`_ '我的博客 <http://blog.useasp.net/default.aspx>`_ 这两个相同的文字,指向了不同的地址(虽然访问后是一样的)。在reStructuredText编译的时候就会出现编译警告了。 要解决这个问题,其实只需要在后面在加一个下划线,变成下面这样即可: `我的博客 <http://blog.useasp.net/>`__ '我的博客 <http://blog.useasp.net/default.aspx>`__ .. 希望你已经看到了最后下划线数量的不同了。   

Emacs中reStructuredText模式(rst-mode)的快捷键

MitchellChu 2014-09-06 其他技术

这篇是前面一篇reStructuredText教程文章的补充,因为本人使用Emacs来编辑rst文件,为了加快编辑速度,需要使用到rst-mode下的快捷键,因此根据文档整理出一份快捷键对照表,方便自己后继查找使用,也希望能够给有需要朋友一些帮助。 快捷键 说明 M-x rst-mode 进入rst-mode。 ...

reStructuredText(.rst)语法规则快速入门

MitchellChu 2014-09-05 其他技术

这几天写了个Python的模块,用Markdown写个个README,传到GitHub,感觉效果还不错,就难抑冲动,打了个包,也想放到PyPI上,结果放上去,发现README变成了源代码。一查,才发现PyPI竟然不支持Markdown格式的README文件,好像支持的README要reStructuredText格式的,对菜鸟的我来说这是个坑啊,好不容易在Emacs下用Markdown用的有点熟路了,结果发现却不被支持。只好重新看看reStructuredText的语法了,因此,也就有了此篇reStructuredText语法快速入门。 先文绉绉的来一段reStructuredText的介绍吧: reStructuredText是一种轻量级的文本标记语言,直译为:重构建的文本,为Python中Docutils项目的一部分。其一般保存的文件以.rst为后缀。在必要的时候,.rst文件可以被转化成PDF或者HTML格式,也可以有Sphinx转化为LaTex,man等格式,现在被广泛的用于程序的文档撰写。  好了,时间无多,直接正题: reStructuredText大致分章节,段落,块和列表这几种内容。而在这其中reStructuredText最主要用得到的标记也就是: 标题 段落 列表 表格 块(如:代码块) 样式 下面一一介绍:     标题(Title) 来看看标题的实例: =================== 这就是一个标题 =================== ---------------- 这也是一个章节标题 ---------------- 怎么样,看起来不难吧,你只要按这个写法,就能被reStructuredText认识,并被解释为章节标题。reStructuredText可用于作为标题修饰的字符有很多很多: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 只要你想,上面的任意一个都可以用来作为标题的修饰符,当然,reStructuredText也是有推荐的,它推荐下面这些字符: = - ` : . ' " ~ ^ _ * + # 这些字符是上面一堆字符中稍微看起来不会那么奇怪的一部分,当然,个人建议不要那么花哨,尽量用这两个中的一个: = - 上面实例的写法也许有点复杂,.rst文件中,你还可以只给出下半部分的字符即可: 这个标题和上面的一样 =================== TIPS:作为修饰的字符长度要大于等于文字长度。另外,标题是能够嵌套的。   段落(Paragraphs) 段落一般隶属于某个章节中,是一块左对齐并且没有其他元素体标记的块。在.rst文件中,段落和其他内容的分割是靠空行来完成,如果段落相较于其他的段落有缩进,reStructuredText会解析为引用段落,样式上有些不同。 这里是一段reStructuredText的内容,它可以很长很长。。。。最后,末尾留出空行表示是本段落的结束即可。 这里是另外一段reStructuredText的内容,这段内容和上一段之间,乃至后面的其他内容之间都要留出空行进行分割。 这个也是段落,当时由于缩进了,会变成引用段落。显示和直接的段落有点不同   列表(List) 列表在HTML中被分为两种,一个是有序列表(Enumerated Lists),一种是无序列表(Bullet Lists),在reStructuredText中,我们也能找到这两种列表,还有一种称为定义列表(Definition Lists),这和HTML中的DL一样,在.rst文件中可以支持嵌套列表。 无序列表要求文本块是以下面这些字符开始,并且后面紧跟空格,而后跟列表项的内容,其中列表项比趋势左对齐并且有与列表对应的缩进。 * + - • ‣ ⁃ 还是那句话,用最常用的几个字符就好,不用那么花哨。下面是示例: - 这里是列表的第一个列表项 - 这是第二个列表项 - 这是第三个列表项 - 这是缩进的第一个列表项 注意,这里的缩进要和当前列表项的缩进同步。 - 第一级的第四个列表项 - 列表项之间要用个空格来分割。 有序列表在格式上和无序列表差不多,但是在使用的前缀修饰符上,使用的不是无序列表那种字符,而是可排序的字符,可以识别的有下面这些: arabic numerals: 1, 2, 3, ... (no...

Tornado中的secure cookie

MitchellChu 2014-08-13 其他技术 编程语言

在开始用Python的web框架Tornado的时候,以为Tornado中的get_secure_cookie和set_secure_cookie是用来设置加密后的Cookie信息的,但今天看了源代码之后,发现情况并非如想象的那样,secure_cookie在Tornado中的作用是对Cookie值进行签名而已。新版本(v4.0)和老版本(1.0)相较而言,虽然增加了第二个版本的secure_cookie,但功能仍然是一样。 在Tornado 1.0中,使用的是SHA1进行签名,而在Tornado 4.0中的新版本中使用的是SHA256进行签名,同时输出的Cookie格式有差异——开始第一个数字是版本号(secure cookie使用的version,而非Tornado的版本)。 新版本的set_secure_cookie设置Cookie的相关源码如下: ## Tornado 4.0中web.py的部分源码 ## set_secure_cookie相关的源码 MIN_SUPPORTED_SIGNED_VALUE_VERSION = 1 MAX_SUPPORTED_SIGNED_VALUE_VERSION = 2 DEFAULT_SIGNED_VALUE_VERSION = 2 DEFAULT_SIGNED_VALUE_MIN_VERSION = 1 class RequestHandler(object): def set_cookie(self, name, value, domain=None, expires=None, path="/", expires_days=None, **kwargs): name = escape.native_str(name) value = escape.native_str(value) if re.search(r"[\x00-\x20]", name + value): raise ValueError("Invalid cookie %r: %r" % (name, value)) ...

Emacs的临时文件和备份文件

MitchellChu 2014-07-18 其他技术

Emacs在编辑文件的时候实际上并非对文件本身进行编辑,而是会将要编辑的文件内容拷贝到Emacs的一个临时缓冲区(buffer)内,而我们编辑的时候,也只是对这个缓冲区的内容进行更改。为了便于在需要的时候能够方便的应对,Emacs会自动产生一些其他的辅助文件,其中最常见的有临时文件和备份文件。 临时文件(Auto-Save file) Emacs的临时文件的文件名是使用“#”包围,这种文件一般是在Emacs中编辑时,emacs自动保存的文件,他在编辑文件的同一个目录内生成一个以#file-name#这样的文件,这个文件会在我们保存文件之后被emacs删除。这个文件的作用是为了防止在进行编辑的时候异常退出造成的损失。 1. 在Emacs内使用[C-x,C-f]打开要编辑的文件(test-file.txt) 2. 在打开的buffer中编辑内容 3. Emacs自动侦测buffer是否更改,如果更改会自动Auto-Save 4. 此时我们能够在编辑的文件同一目录下看到临时文件为: #test-file.txt# 5. 使用[C-x,C-s]保存当前buffer 6. 当前buffer中的内容被写入文件,#test-file.txt#消失——被Emacs自动删除  如果你不想产生这个临时文件也是有办法的,就是关闭自动保存功能,在你启动的.emacs文件内添加下面这行 (setq auto-save-default nil) ;; 默认值是t, 要关闭直接用nil更改默认值  当然,一般是不建议关闭的,因为在异常退出之后,如果你想要恢复自己辛苦编辑的内容,它能帮上大忙,你只要在emacs内打开你要恢复的文件,然后在恢复即可。 1. 打开要恢复的文件,如:test.txt 2. [M-x] 3. 输入:recover-file 回车 4. 确认恢复 用起来还是不错的。   备份文件(Backup files) 备份文件是在第一次保存的时候,如果保存的文件已经存在,Emacs会自动将当前已经存在的文件重命名作为备份文件,并将当前buffer的内容写入同名的文件中来替代原来的文件。而备份文件使用的是一个“~”作为后缀(如:file-name~)。大概的流程如下: 1. 打开文件,如:MitchellChu.txt 2. 编辑...(这涉及到临时文件的问题,忽略) 3. 在emacs内发出保存指令 4. emacs先将MitchellChu.txt保存为:MitchellChu.txt~ 5. 保存完成后,Emacs将当前buffer的内容写入MitchellChu.txt 注意:此时的MitchellChu.txt已经不再是原来的那个文件,但所有连接到原来那个文件的,现在被这个新文件接管。  当然,上面的这个流程是可以定制的,比如,我们可以要求emacs通过拷贝,而非重命名的方式来备份文件,在.emacs或者Emacs内设置个变量就成: ;; 在.emacs文件中添加下面这行表示使用拷贝模式 (setq backup-by-copying t) ;; 默认是nil,开启之后使用拷贝模式 ;;;;;;;;;;;;;;; ;; 如果是在Emacs中 ;; 你可以通过直接设置这个变量的值来改变模式 ;;;;;;;;;;;;;;; ;; [M-x] ;; set-variable ;; backup-by-copying ;; t ;; 回车,即可修改模式  这里同上,还是建议不要修改这个值,因为重命名的方式Mitchell个人感觉要优于拷贝模式。 备份文件默认仅会发生在Emacs第一次写入的时候,即,开启Emacs之后,第一次打开文件并保存的时候,编辑期间多次保存并不能产生多次备份动作。然而,下次重新打开Emacs,再次执行同样的动作的时候,同样在第一次保存时,Emacs是会将上次的备份文件覆盖的(如果有)。这也许是你不想要的,这时候你可以通过设置,让每次的备份文件都不同。具体的操作涉及到比较多的参数,这个功能觉得没有太大用处的,这里就不赘述,如果感兴趣,可以参看:version-control。

Python用fork来创建子进程

MitchellChu 2014-07-02 其他技术 编程语言

今天看到别人的源代码中有fork子进程来操作数据。但是由于fork之后,没有及时的退出,导致系统中的Python进程越来越多,子进程越来越多了。自己随手写了Python下fork进程的测试代码(来说明这个问题不一定完全合适): def fork(a): def now(): import datetime return datetime.datetime.now().strftime("%S.%f") import os import time print now(), a if os.fork() == 0: print '子进程[%s]:%s' % (now(), os.getpid()) while 1: a-=10 print '子进程的a值[%s]:%s' % (now(), a) ...

Eclipse启动找不到JRE报错的解决方法

MitchellChu 2014-06-17 其他技术

今天下载了Eclipse后发现居然运行不起来,报错说是在当前的(Eclipse根目录下)jre/bin/找不到javaw.exe,无法运行。但我明显就装了JRE啊。当然了,本人没有配JAVA_HOME变量。 启动运行报错的几种解决方法: 1. 既然说是在这个目录下找不到javaw.exe,那么就把我安装的jre目录直接拷贝到当前文件夹下。 2. 老老实实的在环境变量中配置JAVA_HOME变量 3. 最简单的就是直接修改Eclipse下的配置文件eclipse.ini,在其中加入(我是第一行了): -vm d:\Program Files (x86)\Java\jre7\bin\javaw.exe 无论怎么样,再次启动运行,它就老实了。 注意:使用的Eclipse版本必须要和JRE相对应,64位的jre匹配64位的Eclipse,否则启动也会报错。你猜我使用的是啥版本的?

Linux下Putty链接后Emacs黑底蓝字处理

MitchellChu 2014-05-14 其他技术 Unix & Linux

在CentOS 6下装了一个Emacs24.3,在宿主终端上显示Emacs的字体还是非常不错的,可是用Putty一连接,Emacs的字体就抽风,里面的链接变成了黑底蓝字——作死的节奏啊这是!在屏幕上只能看到蓝色的一小团,贴近了看才能看清楚字的内容。后来,一查才发现,原来是终端连接上没有开启xterm-256色。 查看设置: tput colors ## 如果是显示8,恭喜,xterm终端默认还是8色 echo $TERM ## 查看终端类型,CentOS下默认好像是xterm  如果你也是上面显示的这个数值,那说明同样没有开启对终端的256色的支持。 开启Putty终端256色的支持要做2件事情: 1. Putty客户端工具里面要开启对Xterm-256colors的支持 Putty设置: Putty->Change Settings...->Window->Colors->(勾选)Allow terminal to use xterm 256-colors mode->Apply 2. CentOS(Linux)上开启Xterm-256colors。  开启Xterm-256color有两种方式,其一是修改连接用户的.bashrc文件;其二是修改.Xresources文件。如果是使用CentOS的命令行模式(没有安装XWindow)的话,.Xresources文件可能不存在,此时可以用第一种方式实现。 修改~/.bashrc: ## 务必注意,修改的是使用PuTTY连接到Linux的用户目录下的.bashrc vi ~/.bashrc ## 打开用户的.bashrc文件 ## 在末尾附加下面代码 if [ "$TERM" == "xterm" ]; then export TERM=xterm-256color fi ## 保存~/.bashrc文件 修改~/.Xresources: ##在~/.Xresources文件中添加下面这句 xterm*termName:xterm-256color ##保存~/.Xresources文件 修改完成后,记得重新登录下,以便让修改后的xterm配置生效。生效后,再次输入开篇的命令,你可以看到结果的不同: tput colors ## 这个时候返回的应该是256 echo $TERM ## 此时返回的应该是xterm-256color 此时,在开启Emacs,就会发现,可恶的黑底蓝字终于得到了拯救。 其实你也可以在修改前后对比下Emacs内输入M-x list-colors-display(看不明白?可参看Emacs快捷键对照说明),看看前后的效果。——应该明显不同哦(8个颜色和256个颜色) TIPS: 1. 如果上述修改后,没有得到正确的结果,说明你可能需要安装ncurses-term包来提供xterm-256color类型支持。里面有许多附加的终端类型定义。 2. 这种方法只能让PuTTY支持256色,如果你的Emacs还是显示的不符合你胃口,那么你就要考虑换配色方案了,而不是在这里寻找原因。 ##在Emacs里面的minibuffer(小缓冲区域)内输入下面的命令,你就可以看到各种Themes了 ## Mitchell觉得manoj-dark,tango-dark,tsdh-dark都还不错 M-x customize-themes RET

Emacs的常用快捷键功能对照表

MitchellChu 2014-05-12 其他技术

Emacs的功能非常多而且复杂,在Linux的shell下使用的时候,如果不能够灵活使用快捷键,很多操作不可能顺利完成,正因为这一点,本文罗列了一些在Emacs下常用的快捷键组合。这样可以让Emacs的初学者——比如MitchellChu,可以比较快速的上手Emacs。 这篇文章中的快捷键提取自Emacs的帮助文档中,因此,在不方便联网的时候,你也可以通过帮助文档来获取同样的信息。 本文中出现的键值简写说明: Ctrl,CTL,C均表示为同一个功能键(普通键盘中的CTRL键); META,EDIT,ALT,M均表示为同一个键(常用键盘中的ALT键); SHITF,S均表示同一个键(键盘中的Shift键); ESC表示键盘中的ESC键; SPC表示键盘中的Space键(键盘中最长的那根空格键); Deletespace,Backspace意为同一个键(Backspace键); RET,ENTER表示同一个键(回车)。 本文中出现的组合键说明: [C-x]类型,短横线分隔表示同时按下。表示按下CTRL键之后,在不松开CTRL的前提下,按下x键。 [C-x,o]类型,逗号分隔表示依次按下。按下CTRL键后,再按下x键(同上),之后松开所有键,再按o键; 快捷键类型说明: C-x是字符扩展:C-x之后输入一个另一个字符或者组合键,来达到执行新的命令的目的。 如:C-x,C-c,这个就是接组合键的扩展,作用是退出Emacs M-x是命令名扩展:M-x之后输入的是一个命令名称。 如:M-x customize-variable 则属于命令扩展, M-x replace-string 也属于命令扩展  Emacs常用快捷键对照表 快捷键 快捷键备注 ...

疯狂的春运火车票抢票,不得不祭出火车票抢票软件

MitchellChu 2014-01-28 其他技术 万象漫谈

2014年的春节如期而至,各行各业辛苦工作的人终于可以卸下沉重的工作,期待着新年之际,能够回家和已经离别将近一年的家人短暂团聚,为来年的工作充电打气,我和媳妇也是这万千春节迁徙大军中的一员。回家,是多么一个温馨的词,但从等待火车票开售到开售,再到检漏,连续多日不间断的在12306上面辛勤的耕耘,期待收获一张回家的车票。然而,现实总是离理想有点遥远,最后,终于明白,一份耕耘,不一定有一张车票。 刚开始,还期待连续多日来的出票能够给我们留那么一张两张,但随着预售的票已经开出2月6号之后,我明白这种等待已经无法等待到任何一张票了。曾经几次,甚至准备和媳妇就在外地过年,但每每听到媳妇如此坚持回家的念头,看到媳妇如此坚持的在12306上苦苦刷票,,,这种种的种种,让我决定,要去抢食!决定之后,就开拔——搞个12306的工具。 网上已经有很多抢票的软件,但是各种12306抢票软件用下来,明显感觉到,这中所谓的软件,大部分都是鸡肋,也许他们根本的目的不是帮我们抢到票,而是推销他们的各种产品(如:浏览器,广告)。好吧,我承认我用过的浏览器插件很多。。。但是我没有抢到票。写这种软件并不是很难,自己却为了图省事,一而再再二三的在各种软件中选择,眼看着就他妈的过年了。痛定思痛,自己写一个! 操刀吧!开始的想法是,由于现在票源紧张,不一定买得到直达的车次,那么,要求低点,买同一趟车的各个段的票,回头不下车也能一路折腾到家里了。在这个思想的指导下,经过XXX时间的艰苦奋斗,终于,当当当当。。。 终于,终于,媳妇不用昼夜不分的惦记着回家的车票了,不用时刻不停地在12306那个搓网站上不断的刷新,刷新,再刷新!更重要的是,这回回家的票可能有了新的希望。软件说来,功能是简单的,功能也不是强大的,目的却是明确的——买到票!功能如下: 1. 用户自动登录 2. 自动根据左侧设定的规则,生成可用的车次 3. 根据目标车次里面的内容筛选需要预定的车票信息 4. 自动查找可用的票源 5. 找到匹配的票源信息,快速提示并自动提交订票订单 当然,在后面还有很多的细节处理,为了快速实现功能,都被我毛糙的处理一带而过。好吧,看看效果吧,在这个只能检漏的日子里,霸王硬上弓一下。 测试过后发现结果还是不错的,27日的票买了一张坐票(BTW:这个票忘掉退票了,算免费给回家的某位无座的朋友的新年礼物了~),当然,这个票单张,媳妇不满意。继续刷,在经过一天的检漏,终于成功获得29同车次同车厢的票两枚,终于可以回家了,不仅有票,还能有直达(没刷到两张卧铺,遗憾...),虽然时间上到家有点晚。 后记: 1. 12306的自动5秒刷新机制就是个坑爹的设计,只能说:非常成功挡住了大部分正常购票者。 2. 个人牢骚:往年都会加开临时列车往老家方向过,今年也坑爹,取消了老家那边的所有临客,更奇葩的是,你妹,年后你的临客又出现了!!! 3. 12306现在不知道有多少人是按下面这个路线走的,至少我指望硬卧?刷到无座,保留,再刷,硬座,退无座,再刷,硬卧,退硬座。  

Windows下Python,setuptools,pip,virtualenv的安装

MitchellChu 2014-01-16 其他技术 编程语言

Windows 2003平台,安装Python2.7.4,Python3.3,setuptools,pip,virtualenv。 安装Python2.7.4(当前版本是2.7.6),安装路径:C:\Python27 安装Python3.3.2,安装路径:C:\Python33 安装完毕之后,请勿将python的目录添加到系统的环境变量中。 优先安装setuptools后面的pip和virtualenv可以通过easy_install来安装。 setuptools可以在 http://pypi.python.org/pypi/setuptools 找到Windows的安装方式,现在官网建议使用的是下载ez_setup.py来安装。 下载完ez_setup.py,CMD下路由到下载目录,使用: C:\Python27\Scripts\python.exe ez_setup.py 下载完毕最新版本之后,系统会自动安装setuptools,安装完毕之后,会在scripts下会有一个easy_install.exe可执行文件。 当安装完毕setuptools之后,剩下的就比较简单了。 # 安装pip >C:\Python27\Scripts\easy_install.exe pip #安装完成pip之后,接着安装virtualenv >C:\Python27\Scripts\easy_install.exe virtualenv==1.10.1 安装完毕之后,同样在Scripts下面可以看到pip.exe和virtualenv.exe文件。需要注意,当前irtualenv的版本是1.11,安装的时候如果不设定==1.10.1,默认会安装最新版本,而1.11版本的virtualenv是有问题的,安装1.11后,在创建环境的时候会失败,报错: setuptools pip failed with error code 1.这个问题是1.11的本身的问题,用1.10.1版本,没有这个问题,所以我们安装的时候需要明确版本1.10.1。 安装完毕virtualenv之后,就可以创建虚拟环境了: #创建虚拟环境:先在cmd中路由到需要创建虚拟环境的目录下,创建的虚拟环境是在该目录下的一个文件夹 >c:\python27\Scripts\virtualenv.exe vProject 创建之后,我们可以检查下vProject下是否有文件,同时确认下vProject\Scripts\下是否有activate.bat和deactivate.bat两个文件。至此,虚拟环境就创建好了。运行虚拟环境只需要在CMD下运行activate.bat,并在当前窗口中进行操作——所有的操作此时都已经在虚拟环境中进行的。

使用mingw来编译boost jam

MitchellChu 2013-12-31 其他技术 编程语言

由于编译boost是需要使用bjam(本文是单独编译boost jam 3.1.18)的,而bjam的只是源代码而已,因此,编译boost的第一步就需要编译bjam。不过boost jam的编译还是相对简单,Windows下只需要double click根目录下的build.bat即可。当然,直接双击,在没有对应环境的前提下还是不可能编译成功的。如果是安装有Visual Studio(使用VC),一般是可以成功的,如果不成功到VC目录下运行VCVARS32.bat应该问题就不是很大了。当然,我们也可以指定编译选项 —— 而我机器上有Mingw和VS,默认使用VS,但我更想它使用Mingw来编译。 因此,在cmd下输入: #注意,需要路由到build.bat的这个目录下 #Build.bat 支持的参数有: # borland, como, gcc, gcc-nocygwin, # intel-win32, metrowerks, mingw, # msvc, vc7, vc8, vc9, vc10 build.bat mingw 要这个编译顺利进行,请保证下面这些地方已经处理妥当: 1. Mingw是安装在C:\MinGW下,如果不是,需要打开build.bat修改 ###在build.bat中找到下面的代码 if EXIST "C:\MinGW\bin\gcc.exe" ( set "BOOST_JAM_TOOLSET=mingw" set "BOOST_JAM_TOOLSET_ROOT=C:\MinGW\" goto :eof) #### 将路径修改成MinGW实际所在路径,如我的测试路径 if EXIST "D:\Env\MinGW\bin\gcc.exe" ( set "BOOST_JAM_TOOLSET=mingw" set "BOOST_JAM_TOOLSET_ROOT=D:\Env\MinGW\" goto :eof) 2. 保证MinGW的bin目录已经添加到系统环境变量中,因为后继编译需要使用gcc。 3. 如果是在Cmd中执行build.bat,请保证命令行的当前路径是build.bat所在根目录 —— 这在需要传递参数给build.bat的时候很重要。

MinGW生成C可执行文件,运行报dll丢失

MitchellChu 2013-12-30 其他技术 Unix & Linux 编程语言

MinGW下使用g++.exe/gcc.exe编译出来的可执行文件,在运行时报libgcc_s_dw2-1.dll丢失的错: 无法启动此程序,因为计算机中丢失libgcc_s_dw2-1.dll。尝试重新安装该程序已解决此问题。 这个问题的原因是因为gcc编译器在默认的情况下使用的不是静态关联,所以在执行文件下没有找到该DLL就会导致这个报错。最简单的解决方法是将此DLL直接放入到可执行文件的同目录下即可,当然,还有可能会报: 无法启动此程序,因为计算机中丢失libstdc++-6.dll。尝试重新安装该程序已解决此问题。 这种情况下,只能再次把丢失的DLL拷贝到可执行文件的目录下,这样问题就能得到解决。 虽然上面的方法能够解决这个问题,但每次新项目之后都需要将这些文件放入到部署文件夹。如果对这种方式不太满意,你可以考虑在编译的时候加入:-static-libgcc -static-libstdc++ g++.exe source_files -o target_file -static-libgcc -static-libstdc++ 这将直接告诉编译器,使用静态链接来处理关联。编译之后,就不需要再次将DLL文件拷贝到可执行文件的目录中。 如果你是使用CMake来编译,也可以在CMakeLists.txt中添加这两个参数: project(projectName) cmake_minimum_required(VERSION 2.8) #...... ### 添加下面这段代码 if(WIN32) set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++") endif(WIN32) ### 添加结束 #..... #其他代码 这样在编译的时候,就能自动添加这两个参数到编译器上。

MySql命令行执行多行命令编辑时非常有用的命令

MitchellChu 2013-10-17 其他技术 编程语言

在MySql命令行下进行多行命令编辑是很正常的一个操作,但有的时候,我们在执行多行命令编辑的时候,难免会有各种失误,一旦到此时,我们往往不得其法,其实了解一下MySql命令行的一些参数和提示的信息将会对多行命令编辑起到事半功倍的效果。 为了避免尽可能的错误,首先自然是要了解在多行命令行下,MySQL会给出的各种提示符的作用,下标是在MySQL命令行编辑时可能出现的一些提示符,小伙伴们,你震惊了吗? 提示符 含义 mysql> 准备好接受新命令。 ...

MySql获取数值类型的最大值的另类方法

MitchellChu 2013-10-16 其他技术 编程语言

在MySql中有的时候需要获取整数的最大值——比如在LIMIT的时候: -- 需要获取第5条记录到最后的所有记录 -- 不得不在最后输入一个最大值,这个值如果简单点我们希望是BIGINT的最大值 -- 不过,我们忘了BIGINT的最大值是? SELECT * FROM table_name WHERE condition=cvalue LIMIT 5, 838882; 当忘掉整数的最大值的时候,我们最简单的方法是使用~0,让后通过位移来取得各个整数类型的对应最大值: -- 通过~0来获取BIGINT的最大值(无符号) -- 通过~0的右移位数来获取各个整数类型的最大值 -- \G 是让每一列占据一行显示 SELECT ~0 as max_bigint_unsigned , ~0 >> 32 as max_int_unsigned , ~0 >> 40 as max_mediumint_unsigned , ~0 >> 48 as max_smallint_unsigned , ~0 >> 56 as max_tinyint_unsigned , ~0 >> 1 as max_bigint_signed , ~0 >> 33 as max_int_signed , ~0 >> 41 as max_mediumint_signed , ~0 >> 49 as max_smallint_signed ,...

MySql服务端系统变量大全(V5.6)

MitchellChu 2013-09-14 其他技术

MySql 5.6服务端的系统变量大全(来自官方文档) Name Cmd-Line Option file System Var Var Scope Dynamic ...

MySql启用SQL trace追踪SQL语句的操作

MitchellChu 2013-09-14 其他技术

在MsSQL Server中我们要追踪SQL,只需要开启MS SQL中的事件追踪器(SQL Server Profiler)就可以了,而且设置非常的方便。但在MySQL中要实现类似功能需要做些处理,而且操作也比较繁琐 —— 鼠标党,被MS毁了。 要启用MySQL的Sql Trace,需要启用查询日志功能,各个版本操作不一,下面简要说明: 在MySql5.1.12之前 在my.cnf或者my.ini中的[mysqld]节下配置: log = /path/for/file/live-query.log  而在MySql 5.1.12中,你需要在上述配置文件中的[mysqld]中配置: general_log=1 MySql 5.1.29中,包括之后版本(本文处在:5.6.11版本),你就需要再加上一句: general_log_file = /path/for/file/live-query.log  而这些所有的参数都是可以在线设置的,也就是说,如果你不想因为修改设置而重启MySql的话,那么在线设置应该是个更好的选择,在进入MySql的操作中: --这里按照最新版本来设置 --查询关于log的设置 SHOW VARIABLES LIKE 'general_log%'; /× 返回结果类似: +------------------+------------------------------------------------------------ ------------------+ | Variable_name | Value | +------------------+------------------------------------------------------------ ------------------+ | general_log | OFF | | general_log_file | dev-mc.log | +------------------+------------------------------------------------------------ ------------------+ 2 rows in set (0.00 sec) 注意,general_log_file 的默认值是'机器名'.log */ -- 开启日志 SET GLOBAL general_log ='ON'; -- 设置日志的文件路径:本例在Windows下 SET...

EA(Enterprise Architect)中的一些参数翻译

MitchellChu 2013-07-03 其他技术

在EA(Enterprise Architect)使用过程中,一则是英文,二则不是很熟悉,在实际操作中并不是很方便,因此拿出一些比较常用的列出其对照表,以便使用的时候方便查阅。 Interaction Elements Actor 角色/执行者,通常用于用例场景图中,在描述用户交互时表示当前用户/操作者。 Lifeline ...

MySql用户权限配置管理--查看,赋予,回收(GRANT,REVOKE)

MitchellChu 2013-06-19 其他技术 编程语言

  MySql用户管理使用CREATE USER,DROP USER,RENAME USER,SET PASSWORD等语法来完成,而MySql中用户权限配置管理中大部分都可以使用GRANT(赋予权限)和REVOKE(撤销权限)这两个语法来操作。其中,需要注意的是GRANT语句来赋予权限时,当被赋予权限的用户在系统中不存在时,会创建该用户,而后对该用户进行权限赋予。而REVOKE语句用来权限回收(撤销权限)时,即使被操作的用户所有的权限都被回收,但该用户并不会删除,要删除用户,请使用DROP USER或者直接到mysql.user中删除该用户。   GRANT语法: GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_specification] ... [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] [WITH with_option ...] object_type: TABLE | FUNCTION | PROCEDURE priv_level: * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name user_specification: user [IDENTIFIED BY [PASSWORD] 'password'] ssl_option: SSL | X509 | CIPHER 'cipher' |...

Windows虚拟主机权限设置批处理bat

MitchellChu 2013-06-17 其他技术

  这是一个来源于网络上的Windows服务器下的虚拟主机权限配置批处理脚本,脚本在交互上的设计也比较好(当年用的权限配置bat一运行就巴拉巴拉的自个玩去了,都不知道执行到什么地方了)。在这里非常感谢作者们的无私分享。   这个权限设置仅针对的是Windows下IIS服务器的权限配置,并不是放之四海皆能的万能的权限配置批处理程序,同时需要注意的是,这个文件中使用的权限设置批处理脚本并不一定适合所有人,IIS_WGP就我知道的很多服务器上并没有使用。在切换到自己的生产环境中,需要先进行评估自己服务器上的安全水平之后在酌情修改。千万不要一拿到脚本直接放到生产环境运行,之后就不闻不问了,等回头出现了安全隐患就回来骂娘哦。 @ECHO OFF SETLOCAL REM REM CHANGELOG -- REM by amxku&自在轮回, C.Rufus S.T REM 2006-12-10 REM add some tips ;) REM by amxku, C.Rufus S.T REM 2007-07-10 REM VH_Gh0st For IIS V1.4 REM 鬼仔说被权限弄挂过一次,所以加个还原的 ;) REM by amxku, C.Rufus S.T REM 2008-06-23 TITLE VH_Gh0st For IIS V1.4 - 红狼安全小组 ECHO. ECHO "+++++++++++++++++++++++++++++++++++++" ECHO "+ VH_Gh0st For IIS V1.4 +" ECHO "+ 虚拟主机C盘权限设置[IIS] V1.4 +" ECHO "+ +" ECHO "+...

Windows下禁止超级用户关机和重启

MitchellChu 2013-06-17 其他技术

   Windows下有的时候,为了能够实现机器多用户使用,我们会使用多个用户的方式来处理,而普通用户涉及到权限的时候,一般为了简便,会将用户直接放入Administrators组中。多个用户同时处理的时候,可能会碰到用户一不小心关机,导致其他用户受到不必要的损失,为了不使用户彼此不受干扰,我们可以禁止用户关机和重启功能,只能注销自己的当前账户。这样就比较好的保护了其他在线用户的资料完整性。    设置方式,第一步,先禁用所有Administrators组的关闭系统权限,设置如下: ========================================== http://blog.useasp.net/ MitchellChu's Blog 禁用Administrators组中用户的关机和重启功能 ========================================== 控制面板->管理工具->本地安全策略->安全设置->本地策略->用户权限分配->关闭系统->右键:属性->删除Administrators->应用->注销所有Administrators组用户    如果你要所有用户的关机重启功能,可以重复第一步,将属性中的所有账户或组删除,设置完毕之后,第二步,添加有关机权限的用户组或用户,设置方法仅是在第一步中属性对话框中点击:添加用户或组按钮进行添加。    

WMI中的SQL,WQL简明教程系列5:工具,命名空间,路径

MitchellChu 2013-06-17 .NET技术 其他技术 编程语言

  WMI的WQL简明教程系列的前四篇文章[1,2,3,4]完全介绍WQL的各个基本知识,相信对于WMI的WQL的开发来说,这些知识已经足够我们步入WMI的世界,并能准确的驾驭WQL中的各个使用细节了。这些掌控的所有细节,自然只有在实战中进行发挥,才能体现我们学习WMI的WQL的作用。在实际中使用,我们还需要一些辅助的工具来进行开发。WMI的基本知识就像是武功修练中的内功心法,我们练得非常的醇厚,自然可以徒手独步武林,但在我们还没有练到随心所欲,化腐朽为神奇的境界,选择个武器共创天地也不失是个好主意,同样的道理,在全然彻底的了解WMI中的方方面面的时候,工具神码都是浮云,而在我们未能做到这个之前,选择一些工具来帮助我们就显得非常重要了。   由于MitchellChu也是初涉WMI不久,在WMI中的工具可能涉及不够全面,因此如果有不正确的地方,请各位不吝赐教。下面是用过的一些工具,以表格方式放出: 工具名称 描述 ...

WMI中的SQL,WQL简明教程系列4:语法

MitchellChu 2013-06-16 .NET技术 其他技术 编程语言

  WMI的WQL简明教程系列的前三篇文章[1,2,3]分别介绍WQL中的关键字,运算符和WMI中的类,由这三个东西,理论上已经能够完成WQL语句的编写了,不过也仅是理论上。就好比盖房子,理论上有水泥,钢筋和砖头是可以盖的,但实际上,并不是一定能盖出好房子的,甚至房子盖不成的也有,要盖好房子,还需要一个设计图纸,相对应的,咱们的WQL也同样,只有了一些基础的配件,有的时候并不一定能够装配出能正常运行的WQL语句。为了能够让我们能够组装出能够运行的WQL语句,就需要WQL的设计图纸——语法。   从WQL关键字篇我们能够看到,WQL并没有UPDATE,INSERT这类SQL中的语句,因此我们能够想象的到,WMI的WQL最主要的功能就是为了查询系统数据,因此我们学习WQL语法的时候,首先只要能够了解到查询数据的语法,基本上就能够应付大部分情况了,怎么样,还是相当的简单吧?那让我们开始吧,先看看下面的WQL: SELECT * FROM Device WHERE __CLASS = "Modem" OR __CLASS = "Keyboard"   从上面的语句中我们能够看到WQL的基本语法结构,其和SQL语法类似,但WQL中多处了ASSOCIATORS OF和 REFERENCES OF两个查询结构,具体的WQL查询分为Schema,Data和Event查询,他们的区别: 数据查询:用于获取类实例,它返回特定类的所有实例,包括各自的请求属性集 Schema查询:获取类定义,使用的基本语法的形式与其他类型的查询一样 事件查询:用于过滤出一个特定事件通知的属性。事件表征被管理环境的变更。 每个查询允许添加一些附加的操作符,如: WITHIN:指定轮询 GROUP:分组相同的事件 HAVING:过滤WITHIN和GROUP子句收集事件的通知。一般与NumberofEvents属性(收集事件数量)一起。这样可以侦测何时特定事件的数量超过了时间间隔中设置的极限。 下面是Schema和Data查询的语法结构: ; ----------------------------------- ; http://blog.useasp.net/ ; MitchellChu's Blog ; WQL tutorial ; WQL schema and data 查询的语法结构 ; ----------------------------------- DATA-WQL = ("SELECT" <PROPERTY-LIST> "FROM" <CLASS-NAME> <OPTIONAL-SEL-WHERE>)/ ("SELECT" ASTERISK "FROM" <CLASS-NAME> <OPTIONAL-SEL-WHERE>)/ ("SELECT" ASTERISK "FROM META_CLASS" <OPTIONAL-META-WHERE>)/ ("ASSOCIATORS OF {" <OBJECT-REL-PATH> "}" <OPTIONAL-ASSOC-WHERE>)/ ("REFERENCES OF {" <OBJECT-REL-PATH> "}" <OPTIONAL-REF-WHERE>) ;======================================== ; PROPERTY-LIST:属性列表 ; 属性列表有属性名组成,多个属性名使用逗号分隔 ; 如果奥全部选择,可以直接使用*(星号)代替 ;======================================== PROPERTY-LIST = <PROPERTY-NAME> <PROPERTY-LIST2> PROPERTY-LIST2 = [COMMA...

WMI中的SQL,WQL简明教程系列3:类

MitchellChu 2013-06-15 .NET技术 其他技术 编程语言

  系列1和系列2两篇文章比较简单的介绍了下WMI中WQL的关键字和运算符,有这两样东西我们就能够按照WQL的语法规则来写WQL语句了,等等,我们的WQL要操作的是什么?没错,我们会发现,在WQL语句中还缺少一个要操作的对象,这就是本文要说的,WMI中最重要的一个组成部分——类。用过SQL语句的都应该清楚,无论是在MS SQL 还是MySQL中,我们如果要从数据库中查询数据,必须需要在SQL语句中指定查询的对象——表。在WQL中类的作用就相当于表,我们需要的数据会在不同的类中,而要将数据取出来,就要去找到各种对应的类。   如果我们把WQL比作SQL的话,WMI你就可以粗略的看作是数据库了,而WMI中的类,就是数据库中的表了,而类中返回的各种实例对象,可看作是表中的数据了。这个类比不完全正确,当深入会发现,每当要查询数据的时候,我们需要连接到指定的命名空间下,连接成功后,才能进行类的操作。现在暂时不去细究,初步有个概念就好,等具体操作的时候我们就能够明白了。   那么,在WMI中,我们有多少类可以供WQL查询呢?这个Mitchell倒是没有具体去统计数字,但在普通的操作中,能够涉及到的却并不是十分的多,我们可以用表格的形式列出在Win32下面比较常用的一些类。表格如下: 类名 描述 Win32_Fan 系统风扇 ...

WMI中的SQL,WQL简明教程系列2:运算符

MitchellChu 2013-06-15 .NET技术 其他技术 编程语言

  系列1中我们已经介绍了WMI的查询语言WQL中的关键字,相信在看完关键字之后,对于WQL的语句肯定不会那么陌生了,然而,有了关键字,自然还是不够的,至少在使用WHEE子句的时候,我们需要用到一些条件不是,而这些条件自然而然的就需要使用到本文说到的东西——运算符。虽然可以看作是SQL的一个子集,但是关键字会有些不同(前面已经有说过),运算符也会有些诧异。那么让我们看看在WQL中有哪些运算符。   既然WQL是SQL的一个自己,可以预见的是WQL中的运算符和SQL中的运算符应该差别也不是很大,在前面将关键字的时候,我们给出的WQL语句中就有部分运算符在使用了,而在关键字列表中,我们也给出了部分的运算符。先给个例子: SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE   在上面例子中我们在WHERE子句中就使用了=运算符,TRUE运算符。进入主题,WQL的基本运算符有以下这些: WQL运算符 WQL运算符描述 使用类型 = 等于 ...

WMI中的SQL,WQL简明教程系列1:关键字

MitchellChu 2013-06-15 .NET技术 其他技术 编程语言

  WMI(Windows Management Instrumentation, Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WMI 通过编程和脚本语言为日常管理提供了一条连续一致的途径。而要在编程或者脚本语言中使用WMI,那自然不可或缺的就是WMI的查询语言(WQL,WMI Query Language),WQL是在美国国家标准研究所结构查询语言(ANSI SQL)的一个子集,并在此基础上作出稍许语义变化。WQL非常类似与通常使用的SQL语句,却没有SQL语句那么的复杂多变,算起来也可以说只是SQL语句的一个小子集。   要了解和使用WQL,WQL中使用的关键字是不可或缺的一环,像下面这些语句,你了解多少呢? SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True SELECT * FROM Meta_Class WHERE __Class LIKE "%Win32%" ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"} WHERE RequiredQualifier = Locale 看不懂? 没关系,本文就是本着看懂WQL语句的目的而来的。下面这个表格就是WQL会用到的关键字列表,而且后面还有对关键字的解释,相信你在看完MitchellChu整理翻译的这张表之后,上面这些语句应该不在话下了——至少知道他们大概是干什么的了。 WQL 关键字 关键字解释 AND ...

SublimeText2 快捷键一览表

MitchellChu 2013-06-14 其他技术

  Sublime Text比起Notepad++,UltraEdit之类Code编辑器来说,其功能有过之而无不及,配合着各种插件使用,Sublime Text在实际的使用中变得非常的顺手——当然,如果你还不顺手,那就请顺手写个插件吧。而在众多功能中,Sublime Text 还提供了无比强大的快捷键阵容,如果能够在Coding的时候灵活的使用快捷键,将能够使得你的效率倍增,相信在不久的将来,Sublime Text将是你跨平台使用的最佳Coding利器。   然而,对于新入门的Sublime Text 的newbie来说,强大的快捷键阵容让人无所适从,或者连记住这些快捷键都将是一个困难重重的不可完成任务。使用Sublime Text需要的是时间和耐心,本着这个目的,Mitchell花了一些时间,将Sublime Text2中的快捷键整理了一份,同时对一些重要的快捷键进行了中文翻译,以方便和我一样的新手能够比较简单查找,然后在实践中不断的重复使用,以达到炉火纯青的地步(我是不指望这么高的追求的,但你可以有~~)。   现在分享下在Sublime Text 2中的快捷键不完全翻译版本,用表格的形式放出,如果有错误之处,还请大家指正,如下:   快捷键 功能 ctrl+shift+n 打开新Sublime ...

VisualStudio使用IIS调试出错的处理方法

MitchellChu 2013-06-14 .NET技术 其他技术

  在Visual Studio 2008/2010中,当网站需要进行web调试的时候,我们一般都是直接使用VS自带的Server进行调试,也就是直接F5就解决了问题,但并不是所有的问题都能在这种问题下解决,因此我们有的时候需要使用IIS作为Web Server来进行调试。使用IIS作为宿主的时候,很有可能不会像使用VS自带的Web Server调试来的顺利,而我最近的一次调试中就出现下面这个报错: 英文报错:Unable to start debugging on the web server.An authentication error occured while communicating with the web server. 中文报错:无法在WEB服务器上启动调试。   当然,也可能出现其他的错误,经过摸索,问题解决了,在网上也看到有很多人在使用IIS6/7进行调试的时候出现不能调试的情况,为了让有同样的问题朋友们能够有一个更简单的处理方式,我将可能出现问题的地方做了个初步汇编,如果出现不能使用IIS来调试Web程序时,可以按照这个步骤来检查下开发机器上的配置是否正确。 No1. IIS配置检查   要使用IIS来调试网站,自然要在IIS中配置好网站,具体的配置请参见IIS新建网站的配置说明,这里不赘述。为了保证网站能够正常运行,你可能需要关注网站的权限问题。在网站能够正常运行的情况下,却无法使用Visual Studio进行Web Debugging的时候,请检查下面配置: 网站配置项中,网站标签下的连接是否启用了保持HTTP连接项,IIS6的操作路径: IIS6管理器中右键当前调试网站--属性--网站--连接--保持HTTP连接  检查是否启用Windows身份验证。IIS6路径: IIS6管理器中右键当前调试网站--属性--目录安全--身份验证和访问控制--编辑--用户访问需经过身份验证--集成Windows身份验证 如果是ASP这样的网站也许你要启用在服务端进行ASP调试的选项,路径为:  IIS6管理器中右键当前调试网站--属性--主目录--应用程序设置--配置...--调试--调试标志--启用ASP服务器端脚本调试 && 启用ASP客户端脚本调试 启用IIS中ASP.NET的调试项,这项也可以从web.config中设置,路径为: IIS6管理器中右键当前调试网站--属性--ASP.NET--Edit Configuration(编辑配置)--应用程序--公共编译、页和运行时设置--勾选:启用调试--确定 如果你是IIS7,可以尝试启用IIS7中的Class .NET AppPool,经典的.NET应用程序池,路径: 当前调试站点--高级设置--应用程序池--Class .NET AppPool(经典模式) 上述问题配置配置如果设置之后,还是无法正常使用IIS调试VS中的Web程序,那么你可能还需要检查。 No2. 注册表配置检查[1] 禁用环回检查,将DisableLoopbackCheck 注册表项值置为1,Mitchell自己在Windows2003的问题就是这个方法解决的,注册表路径: 开始--运行--输入:regedit--确定--路由到下面路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa --右键:Lsa--新建--DWORD值--键入:DisableLoopbackCheck--右键:DisableLoopbackCheck--修改--数值数据框输入:1--确定。 ##注意: 操作后如果无法直接生效,可能需要重启系统。 ...

Windows和Linux下的关机重启命令

MitchellChu 2013-06-02 其他技术 Unix & Linux

  MitchellChu从零开始学Linux,开始学Linux的时候,最基本的还是要学会怎么开机关机啊,要是关机/重启这种基本命令都不会,说出去也没有人相信我学习过Linux的呀。   在Linux下面,关机和重启的命令非常多,不像Windows,要学重启关机的命令,一个shutdown就全部搞定,当然,Windows下有shutdown,那Linux下是不是也有shutdown?——所以,非常自然的我学到的第一个命令是shutdown了。    Windows下shutdown还是相当的简单的: REM 重启使用/r或-r参数 REM /t或-t指示多少时间之后执行(单位:s) REM 如:/t xxx 指示xxx秒后执行 REM 如果不指定/t参数,则系统默认在60s后执行操作 REM 下面是在5s后重启系统 shutdown /r /t 5 REM 关机使用/s 或-s参数 REM 同样可以使用/t或-t参数 REM 下面指令是在5s之后关闭当前系统 shutdown -s -t 5 REM 要取消当前的shutdown指定的操作可以使用/a 或-a参数 REM 下面指令执行取消当前所有的shutdown 操作 shutdown -a   在Windows下,你有这个命令,重启关机不求人,如果是服务器版本的话,可能会需要更多的参数,具体的可参见官方文档或在cmd下查看帮助。   Linux下的关机重启命令比Windows下的多的多了,而且因为在Linux下更多的是使用文本界面(终端界面),因此,命令要比Windows更深入了解才行。首先对应的是Linux下的shutdown命令。先看看关机重启命令在Linux下怎么写的: #shutdown 和Windows下的这个命令非常类似,因此也就比较类比学习了 #Linux下的shutdown命令格式: #shutdown [OPTION]... TIME [MESSAGE] #重启使用-r参数 #如果不给定TIME,shutdown无法执行 #TIME使用的是分钟,而Windows使用的是秒钟,这是个区别 shutdown -r 10 #系统在10分钟之后重启 #关机使用-P参数 #-P参数是关机&关闭电源 #这个和Windows下的shutdown -s类似 shutdown -P now #立即关机并切断电源 #如果只是关闭CPU,而不关闭电源,就是用-H参数 shutdown -H 1 System is going down in 1 minute! save your works Pls. #1分钟后关闭系统CPU #The system...之后的是Message信息,会发送到各个登录的用户界面中提醒用户注意保存工作 #取消shutdown命令 shutdown -c #取消shutdown的操作 当然,如果是在当前的文本模式窗口输入的命令,因为shutdown是前台执行,如果要取消,也可以直接Ctrl + C,终止命令的执行。 在知道shutdown的基本用法之后,我们来看看它的所有参数 shutdown shutdown命令的工作实质是给init程序发送信号(signal),要求其切换系统的运行级别(Runlevel)。系统的运行级别包括: 0:关闭系统 1:单用户模式,如果没有为shutdown命令指定-h或-r参数而直接执行,则默认将切换到此运行级别 2:多用户模式(不支持NFS) 3:多用户模式(支持NFS),一般常用此种运行级别 5:多用户模式(GUI模式) 6:重新启动系统 shutdown -参数 时间 讯息 -k:并非真正关机,只是送出讯息 -r:关机后重新开机 -h:关机后不重新开机 -f:快速关机 -n:快速关机,不要经过init的程序 -c:取消关时的程序 -t:在警告讯息和删除信号间做停留 时间可用now或任意数字 (代表分钟) 注意:这里是网上找到的比较老的一些参数。  但是我当前CentOS的版本为6.4,参数有所不同:   reboot 快速重启,类似于Ctrl + ALT +DEL 说明:若系统的 runlevel 为 0 或 6 ,则重新开机,否则以 shutdown 指令(加上 -r 参数)来取代 reboot -参数 参数: -n : 在重开机前不做将记忆体资料写回硬盘的动作 -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里 -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d) -f : 强迫重开机,不呼叫 shutdown 这个指令 -i : 在重开机之前先把所有网络相关的装置先停止 参数可选  CentOS 6.4中的参数 halt   说明:若系统的 runlevel 为 0...

CentOS网络配置相关文件配置选项说明

MitchellChu 2013-06-01 其他技术 Unix & Linux

CentOS 修改IP地址等网络相关的配置文件 找到对应网卡的IP地址配置文件:ifcfg-eth数字. 路径:/etc/sysconfig/network-scripts/ifcfg-eth数字 文件内配置项说明 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0 BOOTPROTO=static #设置网卡获得ip地址的方式,选项有:static(静态),dhcp(通过DHCP获取IP)或bootp(使用BOOTP协议获得IP) BROADCAST=192.168.0.255 #子网广播地址 HWADDR=00:17:F3:05:18:20 #网卡物理地址(MAC) IPADDR=192.168.0.2 #BOOTPROTO=static时,使用此IP地址 IPV6INIT=no #初始化IPv6的功能 IPV6_AUTOCONF=no #是否自动化配置IPv6 NETMASK=255.255.255.0 #网卡对应的网络掩码 NETWORK=192.168.1.0 #网卡对应的网络地址 ONBOOT=yes #系统启动时是否启用此设备,yes时,系统启动时激活 #TYPE=Ethernet #网络类型 #USERCTL=no #非root用户是否可控制该设备 2014年03月18日补充更新:NETWORK这个参数在CentOS中不要设置,官方已经弃用,并且在设置之后可能会出现不能成功添加网关的问题,可以参见最新的博文:CentOS网络配置中NETWORK设置后引起的问题. CentOS官方帮助:http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html   CentOS 网关配置相关的配置文件 路径: /etc/sysconfig/network 文件内配置项说明 NETWORKING=yes # 表示系统是否使用网络,一般为yes。如果为no,则不使用网络,很多系统服务无法启动 #NETWORKING_IPV6=no #是否启用IPv6 #FORWARD_IPV4=no #是否开启IP转发功能 #HOSTNAME=localhost.localdomain #设置本机的主机名,设置的值要和/etc/hosts中设置的主机名对应;注释掉,一般先解析主机名或者域名,再解析DNS GATEWAY=192.168.1.1 #设置网关的IP地址 #GATEWAYDEV=gateway #网关设备名称 CentOS 官方帮助:http://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-sysconfig-network.html   CentOS DNS相关的的配置文件 路径:/etc/resolv.conf 文件内配置项说明 #最重要的就是nameserver,其他可以忽略 nameserver 8.8.8.8 #google域名服务器 nameserver 8.8.4.4 #google域名服务器 #search mitchellchu.com www.mitchellchu.com #定义域名的搜索列表 #domain mitchellchu.com #定义本地域名 #sortlist #对返回的域名进行排序 网络设备重启 service network restart 或 /etc/init.d/network restart IP地址修改 即时生效: ifconfig eth0 192.168.0.2 netmask 255.255.255.0 重新启动网络设备后生效 参见 /etc/sysconfig/network-scripts/ifcfg-eth数字 的修改 修改当前网关 Default Gateway 即时生效: route add default gw 192.168.0.1 dev eth0 重启网络设备后生效: 参见:/etc/sysconfig/network的配置 修改DNS 参见:/etc/resolv.conf配置 修改后即时生效 修改主机名 即时生效: hostname centos1 重新启动生效: 参见:/etc/sysconfig/network配置,注意这里还有/etc/hosts的配置 网络配置的CentOS官方帮助:http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-networkscripts.html

IIS6 404自定义错误页面带来乱码的处理方法

MitchellChu 2013-06-01 .NET技术 其他技术

  ASP.NET MVC在IIS6上绝少出现因为文件编码问题而导致的乱码问题,即使出现,也可以通过web.config的配置或者修改文件编码来解决,然而今天碰到的这例乱码问题,却无法使用这些方法来解决,无论怎么修改,乱码依旧。让人懊恼不已!   问题是这样的:ASP.NET MVC2在IIS6上进行部署,由于系统还有一些暂时未能完全使用MVC架构的代码存在,就利用了IIS6中自定义错误页面的URL重定向机制,将404错误页面转发回系统页面进行处理,在系统中进行判定页面是否不存在或者重新配置页面地址重定向,让MVC Routing能够进行处理。想法是不错的,处理英文的时候也是非常顺畅的,但碰到中文的时候,系统就情不自禁的抽起疯来,根本就无法达到预期的效果。—— 一查,参数未解码的时候中文编码都是%ufffd,一解码全是乱码,能达到预期效果反而奇怪了!   开始以为是配置上问题,检查了下config文件,发现request和response的Encoding都是UTF8,进而检查文件编码,也是UTF8,这和配置中的编码一致。理论上这样乱码应该不存在的,但理论往往和实际相差甚远!只好进一步检查,在历尽千辛万苦,最后发现问题原来出现在IIS的URL重定向上。当访问一个不存在的页面(含中文参数),IIS6会触发404错误,并将产生错误的内容重定向到指定的URL上,目标页面获取参数信息,但在处理中文时,需要进行解码,但根据IIS6定向过来的内容解码就会出现乱码,这就导致组合后的新地址经过MVC 路由后,无法正确的加载指定功能 —— 参数不对。   以前我一直的说法是找到问题就是成功解决问题的关键,这话的确没错,接下来要解决它,只需要找到为什么IIS6传递过来的内容会出现解码错误即可。然而,随着进一步的检查发现,问题远没有想象的那么简单,IIS6.0在处理字串的时候默认使用的是Unicode编码(注:这里比较乱,有说GBK,也有说GB2312,还有说是ASCII,谁知道请告诉我,IIS6使用的默认编码是什么?这里用Unicode)。这个编码和我们有什么关系么?—— 我现在是没有想出具体的关系的,但是肯定是有关系的。以下为本人观点,猜测成分比较大,如果你有更详细的这方面资料请分享,将非常感激。   在我们站点都使用UTF8的时候—— 这里我们需要补充个基础知识,UTF8的字符集是明显大于Unicode编码的。当IIS6检测到错误的时候,需要将UTF8转为IIS6的编码,并进行封装再转交给我们站点内处理,由于IIS6使用的是Unicode编码,在将UTF8字串转为Unicode时,因为字符集不够,所以出现无法转换现象,在无法转换是,系统用%ufffd来表示未能转换的字符。因此使用Unicode处理数据,再转交给站点内模块,程序设置为UTF8编码,UTF8去解码Unicode编码字串,结果可想而知,解码出来的中文自然而然就是乱码。这个思路大概用下面的图来概括(注:图中用的是GBK表示) 这个图片描述的可能有误,但迄今为止尝试了很多各种编码的组合方式,都没有很好的将中文转成在程序中获取到的那种样子,所以也不能确定到底IIS6使用的是什么东西。   解决方法网上有提供一些,但他们能真正的解决问题吗?   1. 最多人的建议是使用UrlEncode方法将所有的中文进行编码之后传到服务端。   但这种方法对于自定义错误页面的方法根本就无法解决。IIS6同样会将URL中的中文变成乱码。   2. 另一种比较多的方法是在BeginRequest事件中处理,用Encoding去尝试转码来解决编码问题。   个人认为这个方法也没能真正解决问题,因为我们一旦获取到的是%ufffd这种的参数时,就意味着我们的参数已经出现问题了。再说,这个方法和前一种方法一样,真正错误的是在IIS6中的自定错误页面过来的参数,在这之前已经出现错误,后面怎么弥补都无济于事。   调试可以发现,在Request对象中,虽然QueryString,Url中的所有的都是乱码,但是RawUrl是正常的。如下图:   经过多次的测试发现,如果要比较好的解决这个问题,可以使用以下两种方法:   1. 如果真的要在BeginRequest中处理乱码——当然,你也可以在你需要获取参数的时候进行处理,使用RawUrl。因为只有这个参数能够完整的保留中文信息。   2. 对当前处理逻辑调整,直接处理掉可以处理的页面内容,而不要依赖IIS6的自定义错误页面来解决在程序中原本是非错误的页面,比如:数据库中页面,先要进行404跳转之后,再进入指定页面再来处理,这种处理方式比较闹心,但当下却还是有一些在用,我这篇文章就是这么来的。    当然了,上面的建议都是理想状态的,对于现存的项目来说,要实现不是一时半会,还需要仔细斟酌。针对我当前特定版本的解决方法,项目是MVC的,直接在Route中添加了对应规则,让这些都转入指定的模块中"销毁"吧,这和上述第二点原理一样,但却治不了根。    根据网上的一些信息综合起来看,这个问题应该是出自IIS6内部,不仅是中文,就连很多国际友人在做开发的时候也碰到过各种各样的Unicode Problem。有些反馈是说在IIS7下面没有这种现象,这个我没有测试,如果哪位有条件的可以测试下。     问题暂时解决了,可以先休息会,毕竟这个问题折腾了我好几天啊!   参考: CSDN 设置404页面所导致的乱码问题的帖子: http://bbs.csdn.net/topics/390358009 IIS.NET上面关于Unicode字符丢失的帖子:http://forums.iis.net/t/1085091.aspx/1  

Chrome卡死无响应的问题解决方法

MitchellChu 2013-05-31 其他技术 网络锁事

  前天[5月28日]开始Windows7 X64下的Chrome最新版[27.0.1453.94 m]突然频频出现卡死,新标签页打开之后半天没有反应;或者显示白板;再或者一直显示尝试连接到XXX的提示,一直处于加载状态,但是直接访问View-Source的时候,却能非常快的加载起来。开始只当是系统的暂时性发作,也没有理会,但连续两天都出现这种问题,就让我非常的郁闷,每次都需要右键标签页,然后复制,借此看是否能够顺利加载起来。今天要查询资料稍微多些,多次使用Chrome后,终于忍无可忍,毅然决然的下定决心要看看怎么回事,要是抽风也不带抽两天的不是?   首先可以明确知晓的是这两天对Chrome并没有做任何修改操作,但知道系统有Chrome的自动更新程序,所以想看看Chrome这两天是否做过更新,于是第一个Idea出来了——找找Chrome的日志,看看Chrome这两天做过什么。找了一圈却没有找到Chrome的日志文件,上Google这么牛逼的网站上搜了一圈(抱怨下:Google被G·F·W墙的好厉害啊!!!),好像也并没有有价值的信息。一条路就这样被堵上了。   一计不成咱再来一计,Google上搜不到,我本地能搜吧?于是非常简单的在系统盘搜索了一下修改日期在28号之后的文件,发现好多好多文件啊,亲!这样一个个文件扫过去倒是相当好的消磨时间的方法。那换换方法吧,因为Chrome下安装的扩展程序太多,担心是这个问题,先把所有Chrome下的所有的扩展程序禁用了,但是问题依旧,依旧的那么卡,还是经常的死在那里。于是想想,还有插件没有禁用,好吧,chrome://plugins进入到Chrome的插件下面,都给它禁用了。——回来一看,嘿,还真好了,看来还真是插件的问题!!!   终于把问题缩小范围,接下来去看看这两天有哪个插件动过了。回到本地搜吧:   非常庆幸,就一个——FlashPlayer!在前天早上11点多动过。   问题确认是,那么把其他插件全部恢复看看是不是这个问题了。恢复之后,所有一切都正常,因此,肯定就是FlashPlayer无疑了。怎么FlashPalyer会有问题呢? ——这个就不太清楚了,但是在Windows下有个金牌的处理方式:重装!   在Chrome下转到:http://get.adobe.com/cn/flashplayer/ 获取最新的FlashPlayer,网站会自动识别当前浏览器,并会提供对应的FlashPlayer版本,选择立即下载即可。特别提醒:建议使用Chrome访问,其他的浏览器访问之后,可能得到的版本不同。如下图IE和Chrome的比较:   获取新版本的FlashPlayer安装之后,Chrome的卡死问题消失,不过在Chrome的任务管理器中查看,突然发现Chrome的GPU占用的内存500M往上,好大啊。嗯恩,回归正题,再次到chrome://plugins下查看的时候发现已经有两个FlashPlayer插件了,一个是开始禁用的,一个是后来安装的,看了下版本,果然不一样啊,原来Chrome用错了FlashPlayer的版本,导致了Chrome抽风。 问题解决了,也收录下Chrome下面查看各种功能配置的地址,以便下次需要DEBUG的时候用的,地址是:chrome://chrome-urls,在Chrome地址栏输入之后,能看到如下的界面:

强制IE浏览器或WebBrowser控件使用指定版本显示网页

MitchellChu 2013-05-30 其他技术 HTML&HTML5 网络锁事

  自从装了IE10之后,就发现好些个网站显示都不是那么的正常,网站上有些功能竟然还会出现一些意想不到的BUG——本来就是针对IE开发的,现在IE下竟然用不起来了,让用户情何以堪?但是就为少量用户使用的系统去大动干戈的调整功能,这实在是让人头疼!在经过一番折腾之后,竟然找到一个非常M$的方法来解决 —— 强制高版本的IE浏览器用低地版本模式显示网页。   就是直接让IE10默认以指定的IE版本的浏览器模式来运行,并用这个指定的版本来进行解析页面,在上一篇定义文档兼容性的文章中,我们已经其实知道了浏览器模式和文档模式的区别,并且我们通过修改X-UA-Compatible来修改了浏览器的文档模式。这个方法本来能够解决我们当下的问题,但实际上,我们不想让整个网站用IE8或者IE7来解析,我们仅是想针对少数的几个人在核心的功能上使用IE8来处理。当然,我们还是能够使用页面上添加meta元素的 —— 但在这里,我们寻求到另外的一个解决方案:由于使用核心功能的人群可控,并且数量少。因此直接控制IE,让高版本的浏览器(版本>=8)按照指定的低版本模式进行解析。方法是直接调整注册表项: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 在FEATURE_BROWSER_EMULATION这个注册表项下添加一个DWORD的值,名称为:iexplore.exe值为十进制的8888或者8000。保存后,重新打开IE浏览器(IE8或更高),你就会发现,浏览器此时使用的是IE8模式在进行浏览。   这个方法本来是用在解决那些使用了IE WebBrowser 控件的应用程序在需要特定的浏览器版本支持下的。既然如此,那么让我们更进一步的了解下,在我们的程序中如果使用了IE WebBrowser之后,应该如何指定浏览器版本。其实,如果有心,你可以打开上面两个注册表项的任意一个,说不定就能看到上面已经有一些值了,这些都是已经指定特定浏览器版本的程序。 比如我这里就有下面这些: devenv.exe是VS2010的应用程序,在这里我们可以看到,M$强制要求devenv.exe中使用的浏览器版本为IE9。既然他都这么用,自然而然,我们也应该能从中找到解决问题的方法了。如果你在应用程序:SomeApplication.exe中使用了IE WebBrowser的控件,那么你如果想在SomeApplication.exe这个程序中的WebBrowser控件以某一个指定的版本的浏览器进行解析页面,你就可以在上述的那个注册表项中加入你的程序了。比如你要指定为IE8运行,那么你只要新建一个DWORD值,名称为SomeApplication.exe,值为:8888即可。   到此我们已经会为浏览器和WebBrowser控件指定特定的浏览器运行版本了,但可能你会发现,后面的数值有那么一些不好理解,那我要使用IE怎么办?同样IE8怎么会有8000和8888这样的数值呢,个表示什么?如果你也有疑问,那么请看下表吧,罗列出了常用的数值对照说明表:   值 说明 10001 (0x2711) Internet Explorer 10。网页以IE 10的标准模式展现,页面!DOCTYPE无效 ...

定义文档兼容性,让IE按指定的版本解析我们的页面

MitchellChu 2013-05-29 其他技术 HTML&HTML5

   作为开发人员,特别是作为Web的前端开发人员 ,最悲催的莫过于要不断的,不断的去调试各种浏览器的显示效果,而这其中最让人头痛的莫过于MS下的IE系列浏览器,在IE系列中的调试我们将会发现没有一个是好伺候的,于是不得不学习各种Hack技术来满足各种浏览器之间的兼容。在这种痛苦中不断的挣扎,MS可能也实在是看不下去了,于是在IE8开始,微软引入了文档兼容性,而这,终于可以让前端的开发人员稍微能够喘口气。   文档兼容性是对 Microsoft Internet Explorer 6 中引入的兼容性模式的扩展,使您可以选择 Internet Explorer 用于显示网页的特定呈现模式。——微软的官方文档。   在这里先介绍两个概念:浏览器模式(browser mode)和文档模式(document mode)。这两个模式的引入,让我们在IE浏览器上能够简单的处理兼容性问题,当然,其实也并不简单,先看看这两个概念的定义:   浏览器模式(browser mode):于切换IE针对该网页的默认文档模式、对不同版本浏览器的条件备注解析、发送给网站服务器的用户代理(User-Agent)字符串的值。网站可以根据浏览器返回的不同用户代理字符串判断浏览器的版本和安装的功能,这样就可以向不同的浏览器返回不同的页面内容。   默认情况下,IE8的浏览器模式为IE8。用户可以通过单击地址栏旁边的兼容性视图按钮来手动切换到不同的浏览器模式。在IE8中,IE8兼容性视图会以IE7文档模式来显示网页,同时会向服务器发送IE7的用户代理字符串。   文档模式(document mode):用于指定IE的页面排版引擎(Trident)以哪个版本的方式来解析并渲染网页代码。切换文档模式会导致网页被刷新,但不会更改用户代理字符串中的版本号,也不会从服务器重新下载网页。切换浏览器模式的同时,浏览器也会自动切换到相应的文档模式。   简而言之:浏览器模式的改变,能够改变请求中User Agent的值,让服务器获取后,能够按照UA的值进行对应处理(如果服务器上有这个处理功能)。而文档模式的改变只反映在本地的浏览器解析HTML上,对客户端显示会有影响,而对服务器透明。同时,修改浏览器模式会影响文档模式,反之却不成立。   使用文档兼容性的方法比较容易,就是在我们要反馈给客户端的HTML代码中的head中添加一个meta元素,用来描述当前的文档需要使用何种浏览器版本来解释当前文档,代码类似下面这样: <html> <head> <!-- Mimic Internet Explorer 7 --> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" > <title>测试模拟IE7浏览模式</title> </head> <body> <!--这里是你网站的内容--> </body> </html> X-UA-compatible在使用中,大小写不敏感,如果你需要客户端模拟其他的浏览器版本来解析文档你可以设置为对应的版本即可,通常的设置有如下几种:   X-UA-Compatible值 说明 IE=5 ...

使用Netcraft查看指定网站的一些技术信息

MitchellChu 2013-05-29 其他技术 网络锁事

  Netcraft公司于1994年底在英国成立,多年来一直致力于互联网市场以及在线安全方面的咨询服务,其中在国际上最具影响力的当属其针对网站服务器,域名解析/主机提供商,以及SSL市场所做的客观严谨的分析研究。——来自百度百科。当然这个不是今天要介绍的,今天要介绍的是Netcraft下面的一些功能。这些功能为我们查询指定域名的网站的一些信息,于了解一个网站的信息还是非常有帮助的。比如:OS及历史变更,网站使用技术,安全信息,IP地址,DNS等一系列信息。当然,如果你愿意,还可以监控这个网站的performance。   查询网站的一些基本信息的使用的方式也非常的简单。进入Netcraft官网,找到What's that site running?在搜索框中输入你需要查找的域名,网站将返回所有关于该域名下的域名信息列表(含服务器信息),如果你想了解指定域名下的详细信息,只需要在Site Report那栏点击即可了解非常详细的信息。下面是查找信息的操作图教程: 1. 找到进入What's that site running页面的入口,下图左侧的Internet Exploration 选项下有入口——其他几个是神码?try it! 2. 你也可以直接访问:http://uptime.netcraft.com/up/graph,进入后的页面大概是下面这个样子。   3. 把你要查找的域名填入框框内,Search一下,就能出类似下面的结果 非常的明显,OS显示的是使用的系统,IP address是IP地址了。当然,如果你需要关于更详细的信息,也是可以的。 4. 在页面头部有个Report字样,你点击进去,就能获取关于该域名的更详细的资料,以及历史变更和网站页面使用的技术,详细信息的页面如下: 怎么样,非常的详细吧,DNS,IP,域名注册商什么的,一清二楚。当然,如果你想对站点本身有些了解,它还提供Site Technology,查看网站使用的前台技术似乎也不是那么难。 当然,这只是皮毛,还有更多的功能等着去发现,你可以试试。

Ubuntu 12.04.2 LTS x64在文本模式下无法正常登陆

MitchellChu 2013-05-28 其他技术 Unix & Linux

  今天安装的Ubuntu 12.04.2 LTS x64,在图形界面下非常正常的能进行登陆登出操作,但是在切换到文本模式下,却完全无法进行正常的登录操作,经过再三确认,用户名,密码均正确的很,就是一直登录不了,提示Login incorrect!    在进行过尝试和Google之后,发现可能的问题是:使用了小键盘! —— 不能使用小键盘?Ok,认了,于是再次到文本模式下测试,按理说,这个问题应该解决了,但结果令人非常的让人崩溃,还是登陆不了!难道还有其他问题,应该没有了啊,我安装选择的是美式键盘,即使小键盘无法识别,那其他键应该是认的啊。   在文本模式下测试了小键盘,的确会有问题,主要表现为: 1. 在刚切换到小键盘的时候,可能会出现小键盘无法识别的情况; 2. 文本模式下如果没有识别小键盘的状态下,不断的按Num Lock键,我们会发现键盘上的Num Lock灯会错乱几下(偶尔),而后如果切换到Num Lock On 的状态下,是能够正常输入数字的。 3. 接上面第2点,如果处于Num Lock Off的状态下,会发现小键盘其实编程了光标键,这个时候可以将光标移动到***login:这个提示符之前,也可以是上一行,当然,移动不要紧,回来就是,但如果移动之后,将会发现其实你即使再切回Num Lock On的状态,输入用户名之后,你也没有办法登陆的 —— 整个界面现在处于文本编辑状态?!   本人是Linux文盲,对于这个还真是非常好奇,之后还多测试了一下,连Caps Lock也试过,发现也会错乱,当然,这些和解决问题都没有任何关系!问题终归还是要解决的,因此非常努力的思考方法。   黄天总是不会辜负有心人啊,在经过不知道多少个脑细胞之后,脑残的将登陆用户名小写,尝试登录 ——成功!竟然成功了,难道Linux系不是大小写敏感的吗?后来经过搜寻,遭到网上一位朋友的一句话,大意是:Unix和Linux下的用户名都必须是小写的。但我觉得这个欠妥当,后面在这里看到好像用户名都是小写的,这个让我疑惑的是,我安装的时候是大写的,而且系统显示的也是大写的用户名。怎么登陆就会是要小写的呢?   系统虽然能够登陆了,但为什么我填写的是大写,最后还是小写,但系统又显示大写的这个问题却困扰着我,作为菜鸟的我,暂时还没有办法了解到这个问题的根源,只好暂时搁置了。

MySQL中GRANT权限的时候特殊字符转义

MitchellChu 2013-05-21 其他技术

在MySQL中使用了下划线的数据库名,今天在GRANT的时候,死活无法为用户赋予权限,一直报错。查看了官方的文档,文档中说:如果使用下划线的数据库在使用GRANT的时候,需要对数据库的下划线进行转义。但是该如何转义呢?转义方法和MS SQL比起来还真是千差万别啊!

MySQL中CREATE DATABASE和CREATE SCHEMA区别

MitchellChu 2013-05-21 其他技术

一般创建数据库我们都习惯于使用CREATE DATABASE 来完成,但是在MySQL中,官方的文档在 CREATE DATABASE 语法一节中写了一句:也可以使用CREATE SCHEMA。那么CREATE SCHEMA和CREATE DATABASE有什么不同吗?

开始程序菜单中的项无法正常显示的处理方式

MitchellChu 2013-05-15 其他技术 万象漫谈

在Windows 7中,由于对开始菜单中的应用程序文件夹进行了重新的归类,从而导致了系统抽风,现象有两个。一是原本应该显示的系统文件夹项消失的无影无踪,但是打开应用程序的所在的目录查看,这些程序项的文件夹却存在于根目录下。二是在控制面板中,点击管理工具,根本无法进入管理工具界面,而是报系统引用错误。 本文针对这个问题进行了初步的探讨,并给出了当下问题的解决方案。

NuGet无法正常更新的处理方式,错误:请先验证匹配的扩展签名再进行更新

MitchellChu 2013-04-28 .NET技术 其他技术

在VS2010下面,NuGet不知道怎么回事,经常出现抽风症状,以前是更新完了之后打开报错,参见NuGet新版本覆盖老版本后进入VS报错。这个问题完了,这回又来个索性无法正常更新了。在2.2.40116.9051升级到2.5.40416.9020的时候直接报错:请先验证匹配的扩展签名再进行更新!

Subversion搭建版本控制环境

MitchellChu 2013-04-26 其他技术

版本控制(Revision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程式档案都得到同步。最简单的版本控制就是保留软件不同版本的数份copy,并且适当编号。许多大型开发案都是使用这种简单技巧。虽然这种方法能用,但是很没效率。一是因为保存的数份copy几乎完全一样,也因为这种方法要高度依靠开发者的自我纪律,而常导致错误。因此,有人开发出了将部份或全部版本控制工作自动化的版本控制系统。

html5shiv,让IE9以下的IE支持HTML5元素

MitchellChu 2013-04-26 其他技术 HTML&HTML5 Javascript(s)

随着HTML5日渐流行,很多时候我们会在页面中使用HTML5元素,然而悲催的是,IE的大部分版本(IE9以前)对这些HTML5元素表现出来的是不知所措的视而不见,让我们辛苦布局好的页面在IE下显得是浆糊一桶。为了让这不同的IE版本之间能"认识"HTML5元素,html5shiv出现了! html5shiv的最大特点是让那些个不认HTML5的IE浏览器承认HTML5元素,并按照最基本的处理方式处理HTML5元素——块化(display:block)。

最新最全的汉语拼音表

MitchellChu 2013-04-19 其他技术 网络锁事 万象漫谈

2013年04月19日整理发布的当下最新最全的汉语拼音表V2.0,该表是根据国家拼音标准方案整理而来。并在此基础上进行了部分扩充。

博客换套皮肤

MitchellChu 2013-04-19 其他技术

博客更换了Skin,同时为博客增加了标签系统,这样方便博文之间的聚合。现在看来,老界面好像真的有点老啊。 老的博客界面

原创:清除VisualStudio中AshkSVN的密码

MitchellChu 2013-04-08 其他技术

删除AshkSVN中的SVN账户信息(密码)的方法汇总。

SQL Server中反斜杆的使用

MitchellChu 2013-04-06 其他技术

  在MS SQL Server中,有一些特殊字符在使用的时候需要特别小心,比如单引号,单引号在使用时需要转移,一般就是直接Double 下双引号就能够实现单引号的转义了,而另外一个字符:\,在一般字符串的使用中是无需转义的,直接使用即可。然而在用作对象的时候(这个情况还是非常常见),一不小心就会出现错误。本文给出反斜杆在对象中的使用方法。

SQL Server中修改数据库所有者的2种方法

MitchellChu 2013-04-06 其他技术

  在MS SQL SERVER中,我们有时候会碰到这种数据库,所有者是登录数据库的用户,但我们却没有办法直接在数据库管理工具中直接修改数据库所有者。这样会给我们后继的一些操作带来不便,本文寻求数据库所有者的修改办法。在SQL 2005/2008中,修改MS SQL SERVER数据库所有者有两种方法.

LUbuntu下文字界面和图形界面的切换方式

MitchellChu 2013-04-02 其他技术 Unix & Linux

Lubuntu & Ubuntu下文本界面和图形界面直接的切换快捷键。

VS 2010中的正则替换无法使用编号9

MitchellChu 2013-04-01 其他技术

在VS2010中无法使用第九组表达式进行正则替换,有谁知道是怎么个情况?

LUbuntu,Ubuntu下设置自定义桌面分辨率

MitchellChu 2013-03-26 其他技术 Unix & Linux

用户在lubuntu/ubuntu下自定义桌面分辨率的方法。

Sublime Text 2安装插件管理器的方法

MitchellChu 2013-03-20 其他技术

Sublime Text的插件安装方法,这里介绍的是Package Control(插件管理器)的安装方法:一个是通过ST2的控制台来完成安装的,而另一个是通过手动安装来完成的。

[资料整理]MS SQL SERVER下通过SQL获取每个表的大小

MitchellChu 2013-03-20 其他技术

在Sql Server中使用SQL语句来统计每个表占用的空间大小。

[资料整理]VC下创建ASP中能访问的COM组建

MitchellChu 2013-03-20 其他技术

资料整理出来的关于在VC下编写ASP能够访问的COM组件的方法。

字符串搜索算法汇编

MitchellChu 2013-03-01 其他技术

字符串匹配中使用的各种方法汇编

字符串搜索:ZBox算法

MitchellChu 2013-03-01 其他技术

字符串搜索算法之zbox算法

Excel中多列数据的去重方法——交叉检测去重

MitchellChu 2012-12-14 其他技术

使用VBA方式对Excel中的单元格数据进行数据去重。本例是对两列数据进行比较去重,当然,你也可以扩展为其他的方式.

百度网盘:4G大文件高速秒传原理分析,优劣及隐患

MitchellChu 2012-11-24 其他技术 万象漫谈

介绍百度最近推出的极速秒传功能,说明其工作的原理,以及分析了其优劣,并说明其可能带来的隐患问题.

使用jQuery智能感知来提高js编程效率

MitchellChu 2012-11-23 .NET技术 其他技术

介绍了在VS2010中使用jQuery智能感知的方法以及技巧。

Plura,一个和SETI类似的分布式网格

MitchellChu 2012-11-22 其他技术 科技前瞻

Plura processing的网格计算网络介绍,Plura非常类似SETI模式,都是利用客户端的运算能力来解决大型运算项目.

移动开发开源工具——PhoneGap

MitchellChu 2012-11-22 其他技术 HTML&HTML5 Javascript(s)

粗略的介绍下PhoneGap,放在这里。

电脑上同时打开多个msn同时聊天的简单操作方法

MitchellChu 2012-09-17 其他技术

让MSN同时能够登陆多个帐号的简单方法

免费的虚拟主机供应商——youhosting

MitchellChu 2012-09-14 其他技术

一个免费虚拟主机提供商:youhosting

让你的网站快起来——国内外免费的CDN服务提供商列表

MitchellChu 2012-09-14 其他技术

国内外的一些比较优秀的CND服务供应商 —— 当然,是免费的

MSN的另外一个在线即时联系的代码

MitchellChu 2012-09-13 其他技术

使用MSN的代码生成即时联系代码的另外一种方法

可恶的电信,让网站访问时不时空白屏幕

MitchellChu 2012-09-11 其他技术 万象漫谈

最近的电信劫持频繁让网站出现白屏.

HTML5 Boilerplate流行的前端模板

MitchellChu 2012-09-06 其他技术 HTML&HTML5

当下流行的Web前端开发模板项目HTML5 Boilerplate介绍。

httpd.exe的CPU居高不下的另外一个处理办法

MitchellChu 2012-08-30 其他技术

使用netsh winsock reset处理httpd.exe占用CPU过高的问题一例。而不使用配置mpm_winnt.c。

抛弃MS SQL Server开始转向PostgreSQL等开源产品——PostgreSQL安装简介

MitchellChu 2012-08-29 其他技术

开始尝试PostgreSQL,合适的话,就放弃MS SQL SERVER,MySQL现在成了Oracle的玩物,没有意思了。

像素格式(PixelFormat)有关的一些信息

MitchellChu 2012-08-20 其他技术

关于像素格式的一些说明信息,来自MS的KB294880

导出hg或git中项目的方法

MitchellChu 2012-08-06 其他技术

如何在git/hg项目中导出源代码.

如何解决FCKEditor编辑器工具栏上图标模糊的问题

MitchellChu 2012-08-06 其他技术

解决FCKEditor,CKEditor工具栏上图标模糊的问题.

Visual Studio 2012 和 .NET 4.5已经完成

MitchellChu 2012-08-02 其他技术

Visual Studio 2012和.NET 4.5已经完成,需要加速跟进啊。

软件中关于项目的一些英文的意思

MitchellChu 2012-08-01 其他技术

软件项目中使用的一些英文单词。

out of the box的意思

MitchellChu 2012-08-01 其他技术

out of the box的释义

整理版微信产品经理张小龙演讲:如何把产品做简单

MitchellChu 2012-08-01 其他技术

微信张小龙在腾讯微讲堂做的演讲的整理版,比原先和菜头的那个具体些。

FCKEditor下SyntaxHighlighter代码加亮插件的安装方式

MitchellChu 2012-07-31 其他技术 Javascript(s)

由于官方文档无法访问,这里放出官方文档的原文,并附上翻译,翻译质量有不足之处请多指正。

微信张小龙谈移动互联网产品设计原则

MitchellChu 2012-07-25 其他技术 万象漫谈

和菜头在7月24好腾讯大讲堂关于张小龙演讲的摘录

ThunderMail将停止开发了?

MitchellChu 2012-07-21 其他技术

宣布不再开发的Thunderbird最近却又释出14版本,这是怎么回事?

[转]facebook为什么在日本发展不起来而Twitter却日益火爆?

MitchellChu 2012-07-11 其他技术 万象漫谈

从民族角度对Facebook在日本的原因进行了分析。

国外免费DNS一例

MitchellChu 2012-06-13 其他技术

国外的一个免费DNS服务提供商.

在网站页面中嵌入QQ,MSN,Skype,旺旺的在线状态

MitchellChu 2012-06-07 其他技术 HTML&HTML5 创业途中

怎么获取到QQ,MSN,Skype,阿里旺旺和淘宝旺旺的在线代码?这里介绍了获取的方法,并且提供了各个IM的官方网站生成工具地址。

Canon iP1180,时隔4年的打印头终于可以正常使用了

MitchellChu 2012-06-02 其他技术 万象漫谈

4年之后,让我的Canon iP1180重获新生。

Nuget.org经常出现无法解析的现象

MitchellChu 2012-06-01 其他技术

出现无法解析"NuGet.org"主机错误的解决方法。

网站面包屑导航

MitchellChu 2012-05-30 其他技术

摘录的关于面包屑导航的一些说明。

Nuget新版本覆盖老版本后报错

MitchellChu 2012-05-30 .NET技术 其他技术

VS2010在老的nuget没有卸载的时候安装了最新版本的nuget后,每次启动VS都会弹框报错。 未能正确加载 "Microsoft.VisualStudio.FSharp.LanguageService.FSharpPackage....

实现.NET安装程序的静默化安装,附:Windows Installer 帮助文档

MitchellChu 2012-05-24 其他技术

Windows Installer 的命令行的帮助文档,可以用它来执行安静模式操作。

完成ASP.NET MVC3入门教程的翻译(9篇)

MitchellChu 2012-05-11 .NET技术 其他技术

在经过这段时间的断断续续的努力,终于将ASP.NET MVC3入门教程(电影示例)中的9篇英文资料翻译完成。希望能对初学者有用!

DNS可以ping通,域名却ping不到地址,访问是DNS查找错误?

MitchellChu 2012-05-10 其他技术

域名无法访问,报DNS查找错误,但DNS确实可以ping通的,这个是什么问题啊?苦恼中...

在Windows的CMD中如何设置支持UTF8编码?

MitchellChu 2012-04-24 其他技术

在Windows 的命令行下(MD DOS)启用对UTF8编码的支持的方法。

VS中无签名UTF8和带签名UTF8格式

MitchellChu 2012-04-21 其他技术

给出带签名UTF8和无签名的UTF8格式的区别。

博客升级到SubText最新版过程点滴分享

MitchellChu 2012-04-21 其他技术

最近升级SubText系统的一些经验总结分享。

让我们的网站随时随地运行

MitchellChu 2012-04-11 其他技术

探讨下如何让我们的网站更方便的随身携带,更方便的展示给客户,这里给出了一些思路.

C#参数后的冒号:命名实参和可选实参

MitchellChu 2012-04-03 .NET技术 其他技术

C# 4.0中提供命名参数和可选参数,文章介绍一些带来的益处和存在的一些问题,具体可参见MSDN中的Named Arguments and Optional Arguments相关章节

资料:ASCII编码表

MitchellChu 2012-04-02 其他技术 HTML&HTML5

ASCII码对照表.

w3c 关于Element属性(Attribute)的表述翻译

MitchellChu 2012-04-02 其他技术 HTML&HTML5

W3C文档中对Element 的Attribute描述的翻译。个人随便翻译,仅供参考!

项目管理工具

MitchellChu 2012-03-28 其他技术

收集些项目开发过程中可以用到的工具,这里是个列表,有时间再逐一扩充内容。

创建新网站时不得不收藏的最佳开源资源

MitchellChu 2012-03-12 其他技术

网站开发中使用的各种资源收集,本文章是收藏之用。

Windows2003系统盘急剧消耗磁盘空间

MitchellChu 2012-03-11 其他技术

Windows 2003 系统盘急剧消耗磁盘空间!看看你是否启用了搜索索引吧。System Volume Information文件夹将吞噬你的系统盘!

电脑耳麦电流声很大怎么办?

MitchellChu 2012-03-05 其他技术 万象漫谈

电脑的耳麦出现电流声非常大,以至于听不清说话了,知道是为什么吗?

.NET开源维基百科:Screwturn wiki

MitchellChu 2012-02-23 .NET技术 其他技术

.NET开源的Wiki系统Screwturn介绍,并说明在当前版本(V3)下的一些优缺点。

.NET Console程序在远程桌面运行时自动退出的问题

MitchellChu 2012-02-19 .NET技术 其他技术

.NET的Console程序在远程桌面中运行时,当用鼠标移动Console的窗口时,会自动退出!元凶何在?

搜索引擎开发教程

MitchellChu 2011-12-28 其他技术

搜索引擎开发中的两本书,留个底.

新分析工具将追踪你光标移动轨迹

MitchellChu 2011-10-30 其他技术 科技前瞻

一个新的用户行为的分析工具

最新欺诈盗窃QQ方法,网络钓鱼无处不在,警惕!!!

MitchellChu 2011-10-24 其他技术

网络钓鱼,无处不在,今朝被我碰到,钓我Q。我这Q上没有朋友,么有会员...就一个壳~~

Windows 2003 安装Powershell 2.0

MitchellChu 2011-08-29 其他技术

Windows 2003 中如何安装Powershell.

[转]编译原理龙书、虎书、鲸书

MitchellChu 2011-08-22 其他技术

编译界的三本牛书,放在这里保存之用,来源于网上转载.

韩国网站排行板

MitchellChu 2011-08-17 其他技术 服装服饰

韩国网站的排名表,仅供参考.

Windows输入法原理篇

MitchellChu 2011-08-05 其他技术

Windows系统中输入法的基本原理及消息处理机制

Outlook 2007中Hotmail帐号的设置方法

MitchellChu 2011-07-30 其他技术

Hotmail邮件的客户端设置之Outlook 2007设置.

[转]电话号码之死——iMessage,Skype,Google Voice

朱秀德 2011-06-20 其他技术 科技前瞻

我讨厌电话号码。他们是一个过时系统的遗迹,无线和运营商仍旧使用,让人们深陷于他们的服务之中—就像一个技术“监狱”,这个“监狱”本身毫无意义,只能显示运营商对用户的懒惰和敌意。

11 Best Web Developer tools for Firefox and Internet Explorer(FF和IE的11个Web开发人员推荐工具)

朱秀德 2011-06-10 其他技术

Here are 11 web developer tools & add-ons that i personally use and find them very useful. These are the tools that i need whenever i am doing any web application development, In their absence i feel i have become a handless person.

[转]What is the maximum length of a URL? (URL的最大长度是多少?)

朱秀德 2011-05-30 其他技术

2006-10-13: Although the specification of the HTTP protocol does not specify any maximum length, practical limits are imposed by web browser and server software.

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。