1. HTTPS 与服务器名

    一直以来都觉得用 HTTPS 的话,所有传输的信息都是密文传输的。正是因为如此,用 hosts 配合 HTTPS 来绕过墙访问一些敏感网站一直是一种看过去天衣无缝的完美方法:所有的程序都不需要修改,不需要知道如何使用代理,只要照常使用就可以了。唯一的缺陷是,hosts 的地址可能不时会失效,需要更换。而这唯一的缺陷,还可以用私设反向代理来解决。完美,毫无破绽。

    提问

    可当我对安全协议有一些了解之后,发现这件事情并没有那么简单。HTTPS 只是简单地将 HTTP 协议包裹进了 SSL/TLS,作为它们的应用数据。而 SSL/TLS 的协议流程,简单地来说可以分为握手和交换数据两大部分。而 HTTP 的数据,作为应用数据,显然是在交换数据阶段进行传送的,换句话说,握手这件事情,应该跟 HTTP 协议里的东西没有半毛钱关系。毕竟,握手的大多数内容都可以被认为是明文进行的嘛,如果握手的内容里有 HTTP ...

    read more

    There are comments.

  2. 半完美解决 zip 文件中中文文件名乱码的问题

    前一段由于收了某个 zip 文件,用 Ubuntu 自带的归档管理器打开,哎呦,那真不是一般的蛋疼……因为里面全是中文文件名,那个乱码啊……

    于是我就下决心要解决这个问题。

    虽然我的系统还在 9.10,但看到网上一篇文章教人如何在 10.04 中解决这个问题,我就了解了,这个问题至今没有解决。那么什么叫做“半完美”呢?大概意思就是说,对我来说差不多完美了,不过还是很可能出问题的……

    命令行方法

    一般的方法是利用命令行的方式:

    LANG=C 7z x xxxx.zip
    convmv -f gbk -t utf8 *
    

    用这个方法,我就写了一个 unzip 的小脚本:

    #! /bin/sh
    LANG=C /usr/lib/p7zip ...
    read more

    There are comments.

  3. [翻译] 使用 Python C 扩展实现生成器/yield

    原文:Implementing a generator/yield in a Python C extension

    在 Python 中,生成器 (generator) 是一个返回迭代器 (iterator) 对象的函数。虽然有很多方法来实现,不过最优雅和常用的形式是使用 yield 语句。

    举例来说,这是一个简单的例子:

    def pyrevgen(seq):
        for i, elem in enumerate(reversed(seq)):
            yield i, elem
    

    这里的 pyrevgen 函数就是一个生成器。给定一个序列,它将会返回一个迭代器用以逆序输出这个串的元素并附上序号。比如说:

    >>> for i, e in pyrevgen(['a', 'b ...
    read more

    There are comments.

  4. 写了个小小的 vc-fix

    我们的 C++ 老师给我布置了 C++ 的大作业来替代其他同学交的无聊题目。大作业的第一题就是完整的高精度库,并且要求使用运算符重载。因为原来用 C 写过,这次写,思路上没有太大问题,不过全部程序被我 C++ 化了,代码看过去很诡异……呃……

    我自己的机子上,自然使用 g++ 编译,不过我猜老师会要求 VC6 能够编译……我就用上次安装的 VC6 编译了一下,发现好几个错误和无数警告……其实也是我意料之中的。

    其中我觉得最讨厌的莫过于 for 循环的循环变量不被视为 for 循环的局部变量这一点,导致大量变量被其认为是重复定义,这个是 VC6 和标准就语言上相去最远的问题了……不想每个都去改,麻烦死了。

    在网上一找,还真找到一个简单的方法:

    #define for if(0) ; else for
    

    其实我也不知道这个是什么机理 ...

    read more

    There are comments.

  5. 在 Git 中隐藏文件里的部分内容

    我们都知道,在 Git 里面,可以通过 .gitignore 或者 .git/info/exclude 来指定一些不希望被 Git 跟踪的文件。但是有的时候,我们只希望一个文件中的一部分内容不被跟踪,这样的内容可能是密码这类不希望被其他人知道的信息,也可能是一些临时性的调试语句,只是自己看看,不想让它进入源中。

    往常来说,因为无法指定让 Git 不跟踪这些内容,就不得不在添加修改的时候用 git add -p 仔细剔除它们,不仅十分麻烦,而且在没有其他修改的时候仍然会看到本地工作目录存在修改,很是不爽。我就想,既然 git 如此强大,这件事情应该也是可以做到的吧?答案当然是肯定的。

    简单地来说,方法是利用 git 的 filter 功能,这个功能支持在 checkout 之后更新工作目录时对文件进行修改,也支持 checkin 经过过滤器修改的文件内容(而不是工作目录中的文件本身 ...

    read more

    There are comments.

  6. 在 GitHub 上建一个新的博客

    一直想着将技术向博客迁移到 GitHub Pages 上,觉得这样大概可以使我显得更 Geek 一点吧?不过呢,因为一直以来各种事情很多,所以一直没有去做。(其实跟事情多也没什么关系吧,看看你自己都多久没写博客了……)最近看到之前买的虚拟空间快要到期了,因为不怎么打算继续续下去了,所以估量着把里面的东西迁移出来。另一方面,末日的2012过去了,新世界2013年到来了,顺便也就盘算着重新开始写博客?不过果然还是觉得有点麻烦呢……

    既然是将这里定位于技术向的博客的话,自然除了关于这个博客本身的事情以外,其他都是技术讨论了。我其实也一直想把技术之外的一些内容单独放在一个博客里,只不过因为太懒了也是一直没去建的,估计在短时间内也不会去做吧,现在都没什么写东西的激情了呢。

    这个博客的标题“鬼の领地”是延续自之前的博客的,它取自我中二的年代,正如我的常用 ID upsuper 一样。同时与之前我的每一个博客一样,我会把过去的内容挑选一些放入新的博客里面。另外原来参与 @fanzeyi 同学的 PyCodersCN 项目的时候翻译过的一些文章也准备放进来。因为实在懒于写自己的东西(大多只是一些小东西,就不想单独写文章了),所以也考虑不定期的译一些自己觉得不错的文章放在这个博客里,就当练练中英文水平好了(其实是为了充数吧)。

    关于这个博客本身,目前是准备使用 ...

    read more

    There are comments.

  7. 2013年新首页

    由于之前跟其他人一起合租的一个虚拟主机空间很快就要到期了,而我的域名 upsuper.org 一直停靠在那上面,没有迁移到自己后来买的 VPS 上,于是今天决定把域名指过去。之前已经花了一番功夫把博客里面的大把文章转移到了这个 GitHub 上面的新博客里,剩下的主要就是首页了。

    当年做的首页很久没有维护了,有一些链接甚至应该已经是死链了。而现在感觉能放上去的链接实在太少了,不好保留原来的样式,所以就新做了一个。既然重新做,这自然又是练手的好时机,一面看看自己(自我感觉良好)的设计,一面学习学习那些新的技术。

    之前在做 white 这个应用的时候,就研究过 CSS3 里许多有趣的东西,其中不少就被我用在了这次做新首页上。

    设计

    参考了 Reeoo 网站里面的一些设计之后,脑中大概形成了新首页的设计:中间照旧地放上标志性的 Logo,旁边将链接围成一圈,然后绕着中心旋转;作为平衡,在链接圈外加一圈逆向旋转的虚线;鼠标放到链接上时停止旋转,并且呈现某种与所指链接有关的效果。

    以最近所活跃的网站作为链接选择的标准,最后选择了这个博客Twitter 页面GitHub ...

    read more

    There are comments.

  8. 闰年判断的优化及其他

    今天 Javran 发来短信给了一个短小的论年判断代码,并且问我是否认为有更简单的表达。下面是他最初给的代码:

    return ((y & 3 != 0) ^ (y % 100 == 0) ^ (y % 400 != 0));
    

    一切的探究就从这个代码开始了。

    当然,这个代码是错的,因为疏忽了运算符的优先级,为达到本来的目的,这段代码大概应该这样改(测试代码3):

    return (((y & 3) != 0) ^ (y % 100 == 0) ^ (y % 400 != 0));
    

    接着,我将其中“!=0”和“==0”可以进一步缩短,现在代码现在变成这样(测试代码4):

    return !!(y & 3) ^ !(y % 100) ^ !!(y % 400);
    

    OK,对于抑或得到的思路,精简到这里差不多了 ...

    read more

    There are comments.

  9. PHP 空间也做 LaTeX 公式显示

    原来一直以为只有自己的机子安装了 LaTeX、dvips 等等这些软件才能显示 LaTeX 公式。

    今天上网查找了一下,发现不是这样的,原来比较基本的 LAMP 空间也可以这样了,这完全得益于一个叫做 mimeTeX 的开源软件。虽然这个软件生成的没有 LaTeX 生成的漂亮,不过还是比 Word 的公式编辑器生成的漂亮,最重要的是可以在网站上使用!

    要安装这个,有一个比较必要的前提,就是你的网站必须不能运行在 PHP 的安全模式下,还有就是网站必须允许是用 .htaccess 配置文件,否则可能不行……不是……是肯定不行……另外权限设置比较严格的服务器上注意把相应权限设置妥当。

    如果服务器是 Linux 平台下的,首先,我们要下载这个软件,源代码可以点击这里下载:mimetex.zip。这里推荐解压后直接上传整个文件夹的代码上去,因为最好可以在服务器端编译,而非客户端编译好,否则平台可能不兼容。在解压出来的文件目录中新建一个 complie.php 文件,其中输入 ...

    read more

    There are comments.

  10. [翻译] Python 内部:可调用对象是如何工作的

    原文:Python internals: how callables work

    【这篇文章所描述的 Python 版本是 3.x,更确切地说,是 CPython 3.3 alpha。】

    在 Python 中,可调用对象 (callable) 的概念是十分基本的。当我们说什么东西是“可调用的”,马上可以联想到的显而易见的答案便是函数。无论是用户定义的函数 (你所编写的) 还是内置的函数 (经常是在 CPython 解析器内由 C 实现的),他们总是用来被调用的,不是么?

    当然,还有方法也可以调用,但他们仅仅是被限制在对象中的特殊函数而已,没什么有趣的地方。还有什么可以被调用呢?你可能知道,也可能不知道,只要一个对象所属的类定义了 __call__ 魔术方法,它也是可以被调用的。所以对象可以像函数那样使用。再深入思考一点,类也是可以被调用的 ...

    read more

    There are comments.

« Page 2 / 3 »

social