博文

目前显示的是 2012的博文

在Windows上配置PHPStorm调试

图片
最近打算改造一下Share站,所以还是打算把PHP捡起来写一写.. 所以打算重建一下本地的PHP环境了... IDE还是使用PHPStorm了,首先去官网下载PHP 最新的版本是5.4 于是下载了5.4的VC9的None-ThreadSafe版,因为我打算用Nginx的FastCGI模式,所以就不用在意线程安全了,本身我也装了VC2008,用VC9就足够了,反正5.4版也只提供了VC9的编译版本. Nginx直接下载最新版,修改一下conf/nginx.conf 里面直接就有注释过了的语句,把它打开就可以了:         location ~ \.php$ {             #root           html;             fastcgi_pass   127.0.0.1:9000;             fastcgi_index  index.php;             fastcgi_param  SCRIPT_FILENAME  E:/WorkSpace/PHPWork/share/$fastcgi_script_name;#前面写PHP文件的目录             include        fastcgi_params;         } 然后去下载Xdebug的PHP版本,扔到PHP的ext目录下,Xdebug的版本也很多,不过选择就简单了,首先我用的是NS版,所以不需要TS版的Xdebug,然后因为用的是X86,所以我选择了32位版.. 把它扔到ext目录之后,开始修改php.ini 原本的php目录下是没有php.ini的,于是图方便,直接把php...

张千帆:宪政转型与人格再造的中国使命

  2011年,在辛亥革命推翻帝制整整一个世纪之后,中国正陷于难以自拔的官僚腐败和社会危机。武昌兵变推倒了摇摇欲坠的大清帝国,终结了数千年皇权统治,但是皇权的结束远非真正意义的共和的开始。一百年来,中国战乱频发、生灵涂炭,人民屡遭浩劫,宪政命运多舛。虽然改革开放给中国带来了三十年的相对安宁,让中国摆脱了大饥荒和“大革命”的威胁,并逐步回到了世界文明家庭之中,但是专制权力结构并没有发生本质变化。 辛亥革命百年之后,民权不张,公权必然无限膨胀,巧取豪夺、强征滥拆甚至草菅人命之事屡屡出现。改革三十年,中央放松管制,人民获得了劳动致富的机会,改善了自己的生活,但是也为各级官员腐败创造了大量资源和机会;人民的劳动成果遭到各级官员和极少数既得利益者的攫取与瓜分,人民收入的增长跟不上财政收入的增长,社会贫富差距不断拉大。改革一方面彻底瓦解了全体官民对正统意识形态的最后一点迷信,造成不可遏制的腐败、堕落、庸俗和拜金主义;另一方面则极大透支了中国的自然资源并破坏了生态环境,破坏的速度超过发展的速度,而且只要政绩体制不变,这个破坏过程就没有止境,直到危及每个人的基本生存。承载着几千年文明的中国鲜有像今天这样没有信仰、没有是非、没有道德勇气、没有自我反省和净化的能力,贪官污吏鲜有像今天这样多如牛毛,空气鲜有如此浑浊,食品鲜有如此不安全,草原和湖泊鲜有萎缩得如此之快…… 如果这一切在国内不可维持下去,那么今日中国也在历史上罕有地呈现出对外扩张的趋势。这种扩张一方面体现为中国向发达国家输送廉价劳力和产品,通过“低人权优势”压榨国内工资、消耗国内资源以吸引国际投资并维持增长;另一方面则体现为利用欠发达国家和中国同样的体制弊病掠取它们的资源,借以满足国内维持增长的需要。这种掠取不仅会激起这些欠发达国家人民的反感和反抗,而且也可能将中国直接卷入和发达国家的资源争夺之中。官方在正统意识形态彻底破产之后一直在寻求可接受的替代品,但最后必然发现惟一可以利用的是国人尚剩的一点民族自尊感。加上政府长期灌输形成的扭曲历史观、台湾与少数族群聚集地区的分离主义隐患、政府控制下的国内媒体对“敏感”事件的高度选择性和误导性报道……这一切都注定国家主义意识形态在中国呈星火燎原之势;只要领土主权受到任何挑逗,民族主义情绪完全有能耐在一夜之间将1930年代的德国法西斯或日本军国主义在中国死灰复燃。今日中国在表面一片歌舞升平...

Microsoft Visual Studio Express 2008

Python的很多C语言编写的库在Windows下安装都需要安装这个巨大无比的Microsoft Visual Studio Express 2008,但是网上提供的地址大都已经过期了,这个才是正确的: http://www.microsoft.com/zh-cn/download/details.aspx?id=3092

在Windows下配置Tornado开发环境

最近因为工作的需要,需要在Python+Tornado环境下开发,Tornado是Facebook开发的一款轻量级的非阻塞的Web服务器,理论上它是很快的 但是对我来说面临着一个问题——那就是我可不习惯用VIM进行开发……虽然我也会一点基本的操作,但是做不到熟练,对于一个立刻要开始上手写程序的人来说,去跨越VIM这个门槛太高了,于是我最初想到了用PyCharm的SSH-FTP部署功能,但是这样就没办法使用PyCharm的断点调试等功能了。于是还是要想心思把它运行到Windows上来 为此,我搜索了相关的资料,但是无论是任何资料都没有说明这个东西如何在Windows下跑起来,但是只有一个英文的资料说了一句,这东西是可以跑在Win下的,但是不可以使用它的非阻塞功能……于是这个给了我去尝试的信心。摸索了一下午,终于把它运行起来了,虽然并不完美,但是用来调试和编写程序是一点问题也没有的。 我所有的操作都是基于PyCharm这个IDE的,网上可以自己下载到。 安装Python、PyCharm然后配置好Python的路径。 选择File-Settings-Project Interpreter-Python Interpreter,选择右下角的Install,先把PIP装上,然后搜索并安装Tornado,过一段时间它会提示你安装完成。 实际上完成这两步就已经可以运行Tornado了,但是问题是偶尔它会报告fork命令失败。这就是那个英文的资料提到的那句话了,Tornado尝试运行Linux下的命令自然会失败,因此需要在程序的主程序文件中(例如website.py)中指定server.start(num_processes=1),当线程只有一个的时候,Tornado自然就不会再尝试fork更多的线程了 之后安装了现有系统中所调用的其他相关的库,唯一要注意的就是图像库PIL和MySQL的库,不能使用官方的库,也不能使用PIP来安装,必须要手动下载。MySQL要用到的是MySQL-python-1.2.3.win-amd64-py2.7.exe,PIL的是PIL-1.1.7.win-amd64-py2.7.exe,这些在网上搜索一下就可以得到了。 现在就可以使用PyCharm来编写Tornado的程序了,断点调试等功能一切运行正常,唯一有问题的就是这个ID...

开始尝试安装Windows8

Win8的RTM已经出了,要是以前的我,估计从Beta版都开始尝试了,现在实在是有点抽不出时间来,所以也只有等到RTM了之后我才开始尝试…… 从网上下载了Win8的64位专业版,刻录到我的U盘上,开始了安装。 一开始就碰到了麻烦,网上所有人都说安装的时候没有碰到需要输入序列号的过程,但是……我却碰到了,搜了半天,发现用NG4HW-VH26C-733KW-K6F98-J8CK4可以顺利痛过验证 安装速度非常的快……过程也很流畅,安装完了之后,系统提示让你输入计算机的名称并选择默认的基调颜色…… 之后是输入用户名,默认让你使用你的Windows通行证账号登陆,于是我正好用了我之前注册的Outlook账号……然后系统进入了初始化阶段,屏幕不断的颜色渐变。 但是,等它设置完成之后,我甚至都无法想象……原来它已经设置完成了……屏幕上仅仅显示着一堆的方框,内容在不断的变化而已.. 摸索了半天不知道怎么进入文件系统,没辙了,于是用快捷键Win+E解决……顺带发现,原版的桌面在Win+D下就可以找回来了 然后就是破解了,我用的是电话激活,首先Win+X调出快捷方式,选择A,使用管理员的控制台,输入 slmgr.vbs -ipk TNHV9-74XMY-QVT69-CV8W6-RRDHC 后面是电话激活用的序列号……我是在 这里 找到的,然后Win+E打开文件夹,在左侧“计算机”上右击属性,然后拔掉笔记本的网线,点击电话激活链接,选择国家为英国,它会提示你使用电话激活并给你 9组数字……之后转到我的台式机,安装一个SkyPE,拨打它给你的固定电话开始激活,SkyPE检测到你拨打400开头或者800开头的电话会自动免费帮你接通的 然后提示你按1开始进行激活……之后按照语音的提示依次输入那10组数值,然后电话会问你这个版本是授权给一台电脑还是多台,选1,选错了不要紧,继续选1就行了(我反正就按错了) 然后就提示可以激活了,电脑会用纯正的英文给你报出9组数字,考验听力的时候到了……记下来,然后依次填上去,Win8就激活成功了。然后把这组数字记下来,以后可以一直使用它激活。 用了一段时间发现不少—— 1.关闭程序必须要拖住标题栏往下拖,或者你ALT+F4 2.Chrome的最新版在平板模式下无法输入中文 3.关联outlook账号之后,...

我的蹭网之旅之——在网络风暴中蹒跚前进

这一两个月,我的蹭网生活一直并不顺利。 如我之前所提到的,华北电大这边提供了IPv6的接入。但是也如他们自己校内论坛上抱怨的一样——这里的内网环境十分的糟糕。 各种攻击源源不断,直接导致我的IPv6连接不稳定。最初还好,还能够稳定的使用半小时左右,最近半个月更加的变本加厉,连10秒都坚持不了了。刚开始还可以ping通,仅仅过去不到10秒钟,马上就没办法连接了。 最初,我感觉到是有网络攻击,因为接收到的网络数据包的数量远远的大于我所发送的,而我并没有开始下载,而且就算是断网了,我也可以持续不断的收到数据包。 我之前尝试了各种办法,包括用tracert跟踪路由,用show route分析路由表等等……但是只有一个结果那就是:只有那么极其短暂的几秒,我能够上网,其他的一概不可以。然后网关可以ping通,但是第二跳只有在那短暂的几秒内可以ping通,然后很快就挂掉了…… 于是我有段时间甚至放弃了,认为这可能是学校对于蹭网者做的某些限制而放弃了挣扎…… 但是我内心中的极客之魂让我不能停止尝试啊!! 于是今天再次不甘心的在网上搜索——不得不说,这鬼地方没外网,而且3G信号极其糟糕让我难上加难——但是皇天不负有心人,终于让我搜索到有人反映IPv6也有同样的时断时续的问题,虽然他所提供的办法并没有解决我的问题,但是他很明确的指出了这个问题的结症是在多网关和多IP地址导致的。 这一下至少让我更加坚定的相信我是可以去搞定这件事情的。于是我到处寻找解决方案。 网上提供了很多,最接近的提示说:所有带2002开头的IPv6地址都是错误的,而对应的网关也是假冒的一些地址。但是他给出的解决方案是修改前缀策略:即将2001的级别提高,让它能够被优先选择到。 这个很明显解决了我一部分的问题——之前访问PPG这种既有IPv4地址又有IPv6地址的网站,该死的收费系统就提示我登陆了,就是这个一直干扰了我的想法,让我认为是学校针对蹭网者做出了硬性限制。 但是问题并未完全解决,但是至少已经能够把上网的时间延长到1分钟左右。我虽然不断的删除那些涌现出来的假的网关,但是我使用delete route的速度明显没有攻击者的快,我甚至感觉不到自己已经把那个网关删除了,它就又再次恢复了。面对如此疯狂的进攻,我又不得不回到了我最初尝试的方案上,使用防火墙。 首先,我很容易...

用JS做了一个POI表头合并语句的生成器

最近的项目里面要用到POI,不得不说,这比我之前用到的PHPExcel的效率高太多了,本来是件很轻松的事情了。结果碰到的问题就是这个项目的部署限制非常多,不允许在项目目录下放置Excel模板文件,也不允许在数据库中使用BLOB字段存放模板。这样就导致需要手动的将现有的Excel文件的标头用POI语句写出来。 本来这个事情也不算是个很困难的问题,但是碰到一些特别复杂的多行标头,麻烦就来了……因为行特别多,合并单元格需要数来数去的很麻烦,这就让我萌生了想要自动化完成的想法。 还好,Excel自07版之后就是以XML文件为基础的,不再是以二进制文件为基础的了,这样就不需要借助一些第三方工具来读取二进制的配置,只需要把相关的XLSX模板转化为XML文件,然后对XML文件进行操作就好了。 演示在 这里 具体的使用方式如下: 首先先把模板文件另存为Excel 07以上的格式,即XLSX格式。 将文件的后缀名改为RAR,例如原有的为01.xlsx,变更后即为01.rar。 用WinRAR或者其他压缩工具解包。得到一个文件夹。提取其中的xl/worksheets/sheet1.xml文件。(如果有多个标签页,应该是挨个编号的) 把内容拷贝到下面的文本框中,点生成语句,就会自动生成POI语句了。 源代码如下: $().ready(function(){ $("#submit").click(function(){ if($("#input").val() == ""){ alert("请输入内容!"); return false; } //开始从XML文件中把 列抓出来 var str = $("#input").val(); str = str.replace(/^[\s\S]+ /,""); str = str.replace...

最近的工作感触,记录一下

首先就是发现自己对Jquery的理解还是皮毛啊,根本就没有发现它的精髓,一直都只是会用一些change、blur之类的事件+匿名函数的方式,但是上次遇到了动态添加元素并且绑定事件的情况下就没辙了,后来发现Jquery还有live这样的事件委派发方法。 当需要在页面上动态的添加元素,并且同时要给元素添加事件的时候,老的办法自然就是在HTML里面写上一大堆的onclik=、onchange=之类的,但是作为代码洁癖的我自然是不能这么写的,之前我采用的办法是把之前写的绑定事件再次绑定,但是这次我碰上了麻烦,因为我发现这样做了之后之前存在的同类元素的事件并没有消失,重复绑定之后造成了事件会重复执行。Live这样的事件委派方法就解决了这样的问题了。 先看看Live方法的定义: .live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。在我们的例子中,当点击新的元素后,会依次发生下列步骤: 生成一个click事件传递给 <div> 来处理  由于没有事件处理函数直接绑定在 <div> 上,所以事件冒泡到DOM树上 事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。 执行由 .live() 绑定的特殊的 click 事件处理函数。 这个事件处理函数首先检测事件对象的 target 来确定是不是需要继续。这个测试是通过检测 $(event.target).closest('.clickme') 能否找到匹配的元素来实现的。 如果找到了匹配的元素,那么调用原始的事件处理函数。 由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。 它的作用基本上和.bind() 的作用是完全一致的,只是似乎对部分事件的支持不足,但是在新版本中基本上也修正了。 $("p").live("click", function(){     $(this).after("<p>It Wor...

今天终于顺利把eclipse的项目导入到IntelliJ IDEA中了

这东西我一直都是没搞定的...今天阴差阳错的尝试居然终于搞定了... 之前一直没搞定主要的原因就在于确实缺少这方面的教材,加上我的IntelliJ IDEA的版本又很高(11.1),导致网上根本没有类似的教材.不过终于让我摸索出来了. 首先自然还是新建项目,然后选择从eclipse中导入已有项目 然后Ctrl+Alt+Shift+S,设置Project Structure: 选择Project,设置好Project的JDK(这一步一般都会在导入项目的时候强制让你去做) 然后设置好你的输出目录,我这里保持默认就可以了 然后切换到Modules,首先把自己已有的框架添加进去,比如我现有的项目用了Spring和Hibernate,那么就直接点击+号,然后把它俩添加进来,设置不用更改,保持默认就可以了。之后再添加Web,更改Web Resource Directories,把第一个项目改为原项目的WebContent目录。 然后这个时候下方应该出现了两个让你Fix一下的错误了,点击它,让它自动生成Artifacts,它会自动的生成一个[项目名称]:war exploded的设置,保持它的设置不用改变就可以了。 理论上它现在应该添加了一个output root下有WEB-INF和Web facet resources的文件夹结构。 然后点击Run,选择Edit Configurations,添加一个Tomcat的路径,Deployment下使用我们刚才添加的那个Artifacts,然后保持默认就可以了…… 然后,如果你的项目是GBK的项目,记得在File-Setting-File Encoding里面把默认的文件编码改为GBK。 这样就应该可以正常的启动由eclipse创建的项目了。

一边学Python,一边学算法

不带着问题去学习永远是没有什么成就的。 于是为了更好的学习Python,我还是决定开始看算法的研究书,然后用Python来实现这些算法。在学习算法的同时巩固Python的知识。 今天看的是《计算机程序设计艺术》第一卷,用Python验算了欧几里得的求最大公约数的算法 算法的描述是: 有数m和n,求它的公约数的方法是: 1.找到m和n之间的最大数,求它们的余数 2.如果余数为0,则其中较小的那个数即为所求 3.如果余数不为0,则将较大的数置为较小的那个数值,将较小的那个数值置为1中产生的余数,继续进行步骤1 于是产生的程序如下(Python3): __author__ = 'Siglud' # -*- coding: utf-8 -*- def find_greatest_common_divisor(x, y): '''查找最大公约数函数 根据计算机程序设计艺术中第一节的算法来求最大公约数''' temp = x > y and x%y or y%x if temp == 0: return x > y and y or x else: if (x > y): return find_greatest_common_divisor(y,temp)#此处一定要有Return,否则还会执行一轮 else: return find_greatest_common_divisor(x,temp) x = input("请输入x的值:") y = input("请输入y的值:") print(find_greatest_common_divisor(int(x),int(y))) 值得注意的是以下几点: 如果要在Python的程序中使用中文,记得加注释:# -*- coding: utf-8 -*- ,这样才能顺利的进行调试。 在递归的调用中记得一定要用return调用下一轮的函数,否则最后还会执行一轮,这样产生的数据就是错误的了。 ...

开始了,我愉快的蹭网生活~

莫名其妙的跑到华北电力来了...然后莫名其妙的连上了他们的校园网... 结果很正常的...需要登录= = 但是我却惊讶的发现虽然我其他啥都不能用,但是却可以用Google Talk... 最初我以为是Talk连接的是其他端口导致可以使用,后来验证发现并不是如此...结果打开笔记本就发现我获取到了IPv6的地址.... 果然,现阶段的防火墙对IPv6的概念都是0....于是所有走IPv6的数据连接都可以毫无障碍......=v= 于是顺理的上了PPG(PPG一直都有IPv6的地址),然后上去求助找打了Google的HOST,甚至连Twitter都畅通无阻了.... 剩下的就等IPv6的代理,好让我畅游外网了...=3=

今天骑车骑在路上突然想到以前犯的错误

犯错误不可悲,可悲的是不知道自己犯了错 今天骑车骑在路上的时候突然想起来以前做毕业设计的时候,在座的老师的提问。 问题是:你们做的这个内网OA系统所采用的是什么样的加密?可以保证用户不会越权读取其他人的信息? 我当时的回答是Base64……在座老师的笑而不语…… 于是今天我不得不重新的更正一下:不应该用Base64,应该用RSA。 因为RSA是非对称加密,可以保证发信息的人的信息的有效性和安全性。而Base64不能算是加密,只能算是一种编码,主要用于邮件方面对附件等二进制信息的传输。与之相对应还有DES,这个是对称加密,主要用于文件保密,但不能适用在需要点对点阅读传输的情况下

莫名其妙的通过改HOST访问Blogger了

因为Blogger不支持HTTPS,而且你强制让Blogger使用HTTPS之后会导致页面无限死循环,所以虽然可以通过HTTPS访问到页面也基本没办法使用的.会提示你在Google.cn上根本就不存在Blogger这个网站. 但是这一点在某个特殊的地方可以被突破..那就是 Draft.blogger.com 首先,还是要翻墙到Blogger,同时将Draft.blogger.com设置为自己的默认,然后直接用访问http://Draft.blogger.com 这时候就不会出现报错提示了...整站也可以正常使用 当然了,对应的blogspot网站还是无法使用,但是至少不用翻墙写了...看不看得着是另外一回事了

在Windows 2008 R2下安装Oracle 10g R2

服务器有需要重装,因为本身有6G内存,为了能够发挥6G内存实际的功效,所以64bit的操作系统是必要的,但是之前有同事在64位的Win7上都无法正确的安装Oracle 10g,所以我特别留心的查看了一下到底需要注意哪些事情. 首先,要下载Oracle 10g的64位Windows版,但是Oracle 10g R2本身就不支持Windowns 2008R2这么新的操作系统,Oracle推荐是安装11g,如果一定要装,首先应该更改安装文件的配置文件: 位置位于/install/oraparam.ini文件.打开它,然后找到: #You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE Windows=5.0,5.1,5.2,6.0 改为: #You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE Windows=5.0,5.1,5.2,6.0,6.1 其实就是在末尾添加",6.1 "这句话,意思就是让它兼容Windows 6.1,也就是Windows 2008 R2. 然后就可以顺利开始安装了.安装的时候切记选择 不要安装实例 ,在安装过程中可能会提示你检查操作系统要求状态为"错误",无视它就行了. 安装完成之后,开始打补丁P8202632,其实就是Oracle 10g R2的10.2.0.5版升级包,官方网站其实在你下载Oracle 10g R2 for Windowns 2008 R2的版本的时候就提到过,如果你在WIndows 2008 R2下安装,你一定要升级这个包. "If installing on Windows 7 or Windows Server 2008 R2, then 10.2.0.5 patchset or higher must be used." Oracle本身提供了这个升级包的下载,但是需要用服务ID登陆后下载...我仅仅只是作为测试用户的...