Other articles


  1. Speedup scons over your small project

    TL;DR

    In your SConstruct file, add the tools keyword argument to Environment and DefaultEnvironment initialization to explicitly specify the tools needed in your project. It saves a lot of time.

    The Story

    My resume was written in LaTeX and convert to PDF using a handwritten Makefile, of which I ...

    read more

    There are comments.

  2. VPN服务关闭

    以下为XXX VPN服务商的最后一个newsletter。

    Goodbye my friends.

    This is the last newsletter you'll receive from XXX VPN service provider.

    Some of you may have heard about this, and some have received the refund I issued. Due to GFW's blockage, XXX has stopped providing VPN service.

    The refund for active users ...

    read more

    There are comments.

  3. 在虚拟主机上运行Flask-Twip

    关于Flask-Twip的介绍请参考前一篇文章

    Flask-Twip支持在普通的虚拟主机上运行,通过虚拟主机的CGI界面运行。

    什么是CGI

    CGI界面(Common Gateway Interface)是在每次HTTP请求时,由HTTP server调用一个脚本,在调用脚本时将客户的HTTP request headers信息放在环境变量中,然后将脚本到stdout的输出当作HTTP response返回给客户端。

    每个HTTP请求都会进行一次fork操作,CGI脚本的性能非常糟糕。不过对API proxy来说足够了。

    如何在普通虚拟主机上搭建Flask-Twip

    要在虚拟主机上搭建Flask-Twip,需要虚拟主机提供了SSH访问以方便搭建环境。

    准备工作:安装Python

    Flask-TwipFlask框架的一个扩展,Flask本身已经支持Python3,但是它依赖的werkzeug目前最高仅支持Python2.7。为了方便未来支持Python3,Flask-Twip本身仅支持Python2.7。

    首先判断Python版本:ssh ...

    read more

    There are comments.

  4. Flask-Twip

    Flask,拿twip练手。项目叫Flask-Twip

    项目主页: https://github.com/yegle/flask_twip/

    原来twip是Twitter API Proxy in PHP,现在仍然叫twip是因为现在是Twitter API Proxy in Python。当然未来也不排除蛋疼写个RubyNode.js版,所以twip还是当作Twitter API Proxy来解释比较好。

    Flask-Twip作为Flask的extension存在,与twip类似使用MPL 1.1开源。

    目前支持原来的O模式,T模式还在测试尚未release ...

    read more

    There are comments.

  5. Flask与`unicode_literals`

    最近在写Flask,遇到一个诡异的问题

    Traceback (most recent call last):
      File "/Users/yegle/git/apkay/apkay-venv/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__
        return self.wsgi_app(environ, start_response)
      File "/Users/yegle/git/apkay/apkay-venv/lib/python2.7/site-packages/flask/app.py", line 1685, in wsgi_app
        with self.request_context ...
    read more

    There are comments.

  6. Email与TLS加密传输

    提起Email与TLS加密传输,很多手动设置过Email客户端的人会说:我知道这个,我在用的qq邮箱/hotmail/yahoo.cn邮箱支持TLS加密传输。

    曾经我也以为邮件的加密传输就是这么简单。但是昨天发现的一个事实让我知道,GFW不会让大家这么省心。

    诡异的connection reset

    事情的起因是:我想参与金山WPS for Linux版的测试,用我的Gmail邮箱向帖子中提到的邮箱地址wps_linux@kingsoft.com发送了报名邮件发送了报名邮件。

    接下来的几天我的邮箱收到了多次Gmail发出的Delivery Status Notification:

    This is an automatically generated Delivery Status Notification
    
    THIS IS A WARNING MESSAGE ONLY.
    
    YOU DO NOT NEED TO RESEND YOUR MESSAGE.
    
    Delivery to the ...
    read more

    There are comments.

  7. Hello World

    由于Wordpress的臃肿低效,以及对markdown语法的喜爱,这里将成为我的新Blog。

    博客的内容偏geek,不会涉及太多生活相关的内容。我不喜欢道听途说、转载+自己理解这种低级的博客风格,喜欢刨根问底甚至翻阅源码的问题解决思路。

    废话不多说。写完这篇,开始准备本博客的第一篇日志。

    read more

    There are comments.

  8. Bash计算方差

    一个计算方差的bash函数,使用bc进行计算,默认精度是20(bc的-l选项)

    join(){
        # Concatenate arguments with seperator
        # like implode() in PHP or string.join() in python
        local ret=""
        local seperator=$1
        shift
    
        for i in $@
        do
            if [[ -z $ret ]]
            then
                ret=$i
            else
                ret="${ret}${seperator}${i}"
            fi
        done
        echo $ret
    }
    
    variance(){
        local total=`join '+' $@|bc -l`
        local ...
    read more

    There are comments.

  9. 抛砖:使用脚本添加、删除挂载的思路

    写这个日志的主要目的是想抛砖引玉得到更好的解决方案,为了准确描述我的需求只好废话比较多地讲一下具体的需求了:-)

    最近有一个需求,需要限制某个用于察看线上日志的log用户的权限,要让权限要尽可能小但是又能看到日志文件。这样的需求很明显需要用chroot来完成。但是细想起来有一个日志目录访问问题。

    假设目录所在文件夹是/var/logs,为了保证log用户能访问到这个文件夹,至少需要chroot环境中包含这个目录。如果直接这么做,log用户的chroot环境就与日志所在文件夹混在一起,不方便维护。我想到的解决方案是使用mount将目录bind到另一个文件夹下,然后在这个文件夹上级目录创建chroot环境。

    例如:log用户的chroot环境处于/home/log中,那么使用mount --bind /var/logs /home/log/home/log。这样就可以让log用户进入chroot环境后看到日志,而又可以分开维护chroot文件夹和日志文件夹。

    继续顺着这个思路往下走,就遇到了这篇日志的主要问题:如何使用脚本添加、删除挂载。

    最终目的是尽可能自动化地进行chroot环境的创建及删除,所以同样地也要做到挂载的自动创建及删除。在挂载方面需要自动化完成以下目的:

    1. 执行创建chroot脚本后,挂载相应目录并将挂载信息写入fstab
    2. 执行清理chroot脚本后,卸载对应目录并删掉fstab中的挂载信息

    第一条相对简单,在创建chroot脚本里直接写相应的mount语句并加入echo XXX >>/etc/fstab就可以。

    第二条是我遇到的难点 ...

    read more

    There are comments.

Page 1 / 3 »

blogroll

social