Windows 下 Python 双版本共存解决方案

Standard

Python 是一门很不错的语言,语言简单易学,又不失脚本语言的灵活性,还有海量的第三方库,覆盖的很全面。但也有不少“硬伤”,比如 Python 2.x 和 Python 3.x 版本之间的不兼容等等。

虽然我遇到的问题并不是很普遍,但还是把整个过程记录下来,以供以后查阅。

问题描述

平常我使用 Python 的环境一般是 Python 2.7,因为一些历史遗留的原因一直没有更换。但总会遇到一些傲娇的 package 需要 Python 3.x 的环境。因为 Python 不是向下兼容的,所以如果把原来的 2.x 代码放到 3.x 的环境下运行那肯定是要报错的。所以便需要两个版本共存。

我的需求是,平时使用的时候 python 指向的是 Python 2.7,用 python3 来表示 3.x 的环境,同时不希望修改系统的环境变量,免得引发一系列连锁问题。

解决方案

解决的方法其实也很简单,假设原来的安装目录是 C:\Python27,那么我只需要在这个目录下新建一个名为 python3.bat 的文件,其中的内容是:

@ echo off
C:\Python34\python.exe %*

这样也不需要修改环境变量,直接打 python3 可以进入命令行,或者用 python3 xxx.py 在 3.x 环境下来执行某个文件。

Continue reading

用MongoDB建立炉石传说卡牌数据库

The_Grand_Tournament_Banner
Standard

MongoDB 简介

MongoDB 是一个面向文档的数据库管理系统。与传统的SQL Server、MySQL等关系型数据库(Relational Database Management System)有所不同,它是非关系型的数据库,即 NoSQL。

NoSQL 的设计思维与传统的数据库设计还是有一点差别的。在传统的数据库设计思维中,在设计阶段就需要对表的字段名称、字段类型进行规定(DDL),如果插入的数据不符合要求,则数据库不会接受这条数据以保持完整性。

INSERT INTO TABLE members VALUES('小明', 'Hello MongoDB!')
INERT INTO TABLE members VALUES('John', 20, 'john@example.com')

-- 在关系型数据库中,上述两条插入语句不可能同时成功

而在 MongoDB 中,以文档表示每条记录,而集合则是一组文档。如果说 MongoDB 中的文档类似于关系型数据库中的行,那么集合就如同于表。

{"name": "小明", "greeting": "Hello MongoDB!"}
{"name": "John", "age": 20, "email": "john@example.com"}

集合是无模式的,意味着一个集合里面的文档可以是各式各样的。MongoDB 中的文档格式类似于JSON,每个文档包含着一些键值对。注意到,不仅是值的类型不同(字符串和整数),它们的键也是完全不一样的。在集合里面可以放置任何文档会带来很多好处,例如某些种类很多的字段就不必专门建表去存储了,减少了设计表时的成本。但随之而来的问题是:“还有必要使用多个集合吗?”问得好!为何要用多个集合呢?下面是一些理由:

Continue reading

随便谈谈Android的逆向工程

Android_Robots_Banner
Standard

假期里闲来无事,就开始倒腾。

所谓(软件的)逆向工程,听起来很貌似高端,它实际上就是根据软件运行后的表现进行逆向分析和研究,从而推理出该软件的处理逻辑、功能结构等要素,以制作出功能相近,但又不完全一样的产品。它的目的、也是难点在于,在不能轻易获得源代码的情况下下,直接从对软件的分析,推导出它的设计原理。

为了让逆向工程的结果看起来有点用,我选了《么么答》这款应用作为“实验对象”。

《么么答》是人人网旗下的一款社交教育类问答游戏,拥有海量题库。可以与好友对战答题或是进入天梯PK。

我猜应该有很多人玩得比我还熟,就不多作介绍了。


初体验

逆向工程的第一步是要“使用”这款软件,熟悉它的流程。把所有能点的按钮啊、菜单啊都点一遍,知道它有哪些功能。当然,重点就是测试答题的过程了。稍试几次,便容易发现一个清晰的答题的流程:

  1. 选择分类
  2. 读取题目
  3. 互相答题
  4. 最终结果

对一般用户来说,所能体验到的东西也就这些了。但对于逆向工程来说,还远远不够,要从这个看似简单的流程中读到更多信息。


Continue reading

如何在网页中给单词加上注释

Standard

最近要看大段大段的英文,总是会遇到一些莫名其妙的词,想搞懂它的意思就得单独去查,甚是麻烦。又不想在电脑上装各种插件,但又希望能有一个一键切换翻译的选项。

几经波折,我看到在Chrome上有一款有道划词的插件,开启之后效果是这样的:

YoudaoTranslation

它不仅可以在单词后面加上中文注释,而且还可以选择适当的难度,很适合我这种只需要知道单词意思又不需要全文翻译的人。这样阅读起来效率会很高。

可是令人遗憾的是,这插件只有Chrome有,Firefox下就没有。为了能在 FF 下也能使用它,我开始了探索。

其实这插件的原理很简单,当页面载入的时候,会加载一段js,这段js如下:

javascript: void((function() {var element = document.createElement('script');element.id = 'outfox_seed_js';element.charset = 'utf-8',element.setAttribute('src', 'http://fanyi.youdao.com/web2/seed.js?' + Date.parse(new Date()));document.body.appendChild(element);})())

可以直接在控制台下运行这段代码(从void开始复制),看看页面上的单词是不是都加上注释啦!

 

其实,把这段代码复制到浏览器的地址栏中,也是可以达到同样效果的。也就是说,如果把这段代码作为地址存到书签里,只要点一下就相当于运行这段代码了。效果与安装插件一模一样。

接下来的事在Firefox中就很容易了:在书签管理器中新建一个书签(如果不能新建,就随便存一个然后修改),把名称改为“有道划词翻译”,地址部分填上面的代码(前面的javascript头不能少),然后保存即可。

接下来把这个书签放到你喜欢的位置,任何时候只要你想翻译,轻轻点一下,单词的翻译就自动跳出来啦,是不是很方便呢~\ (≧▽≦) /~

 

如何配置二级域名blog (或实现隐式URL跳转)

Standard

有人反映原来的域名/blog/<name>太难记,配置成二级域名会好记一点。下面,就以本站二级域名配置为例,来讲解一下配置的流程。

2014-06-21 Update! 此方法同样适用于实现同服务器ip下不同的域名跳转到不同的网站,类似于隐式URL跳转的功能。直接跳到配置部分

警告:以下步骤缺一不可,但不同步骤间的顺序可以颠倒。否则会自动进入高能模式。= =

 

STEP 1 修改DNS解析记录

先要登录 DNSPOD ,在其中加入一条 CNAME 别名记录:主机记录填 [ccei]xiao[/ccei](二级域名的名字),记录类型填CNAME,记录值填 [ccei]micourse.net.[/ccei],其他保持默认。这样,记录就修改好了,大约会在10分钟之内生效。

 

STEP 2 在Apache中添加虚拟站点

登录服务器,进入 /etc/apache2 目录,此时目录结构大抵如下:

/etc/apache2
├── apache2.conf
├── conf.d
├── mods-available
├── mods-enabled
├── sites-available
├── sites-enabled
└── ...

要关注的是后两个文件夹sites-availablesites-enabled,分别是所有可用和当前启用的虚拟站点。

先进入到sites-available目录,发现里面已经有很多文件了,每个文件代表一个虚拟站点,随意复制一个,使用sudo cp xiao <name>命令建立一个名为<name>的虚拟站点。

注意! 如果是多个域名共享一个IP地址,希望对应域名跳转到对应的虚拟站点,请把<name>命名为域名地址,如 xiaoyc.com 等。

接下来编辑它,把以下地方作修改:

  1. ServerName改成<name>.micourse.net
  2. DocumentRoot改成wordpress所在的安装位置,作为虚拟站点的根目录
  3. <Directory xxx>中的xxx也改成wordpress所在的安装目录

编辑完成后,输入命令:

sudo a2ensite <name>

这样便启用了虚拟站点。按照屏幕上的提示,还需要输入命令:

sudo service apache2 reload

这样,Apache的配置就生效了。

 

STEP 3 修改Wordpress的配置

在设置->常规选项下,将WordPress地址和站点地址都改成http://<name>.micourse.net

在设置->固定链接下,看一下地址显示是否正常(如果不正常,你可能要修改对应.htaccess文件为可写,这样wp会自动修复,否则忽略这一条)

 

STEP 4 总结

做了以上这三步,博客就会换成二级域名了,现在访问http://<name>.micourse.net试试看吧。

注:如此设置之后,原来的文章地址依旧可以访问,只是会出现404,但404页面中的链接是正常的。绝对引用原来的地址中的文件(js, icon等)依旧有效。