博文

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创建的项目了。