Python中的super

Posted on 2017-11-22 in Code • Tagged with pythonLeave a comment

最近读了 laike9m 的一片文章,加上文章中提到的 Python’s super() considered super! 和 StackOverflow 上的一个答案,以及一些实践,简直是对super有了全新的认识。

首先,用 super 的直接好处是可以避免指定父类的名字,也就是说,如果有一天我们修改源码继承自另一个父类,super 引用依旧生效。比方说:

#  Previous
class LoggingDict(dict):
    def __setitem__(self, key, value):
        logging.info('Settingto %r' % (key, value))
        super(LoggingDict, self).__setitem__(key, value)

# Modified
class ...
Continue reading

僵尸进程和孤儿进程简介

Posted on 2016-11-30 in Linux • Tagged with linuxLeave a comment

前言

最近在做内部使用的 Docker base image,老大甩给我几个链接让我关注一下 Docker init process 的问题,其中有一篇文章详细描述了 Docker PID 1 僵尸程序回收的问题,我也趁此机会学习了一下有关僵尸进程和孤儿进程的知识。

基本概念

Linux 系统中运行的所有进程按照一颗树的形式组织。每个进程都可以生成子进程,并且除了最顶端的init进程,每个进程都会有一个父进程。

当我们启动系统的时候,kernel会启动最顶端的init进程,然后由init进程启动余下的部分,比如说SSH服务,Docker服务,Apache/Nginx,图形化界面等等,而它们又可以继续生成其他的子进程。

Unix process hierarchy

通常来说,当一个子进程退出的时候,父进程会收到操作系统发来的SIGCHLD信号并且调用wait()或者waitpid()来取得子进程的终止状态,这个行为被叫做 ...

Continue reading

Vagrant use KVM as provider

Posted on 2016-11-4 in Virtualation • Tagged with vagrant, kvm, libvirtLeave a comment

Vagrant is built-in support providers like VirtualBox, Hyper-V and Docker. But if you want to use custom provider like KVM on your local system, you have to do a few more steps.

I do below steps on Ubuntu 16.04 64bit.

Check hardware virtualization

First, you need to check whether ...

Continue reading

Linux 文件的三个时间

Posted on 2016-8-2 in Linux • Tagged with linuxLeave a comment

每个 Linux 文件下面都会记录许多的时间参数,其实是有三个主要的变动时间,他们的意义是什么呢?

mtime

mtime 可以理解为 modification time,当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。

ctime

ctime 可以理解为 status time,当该文件的“状态”(status)改变时,就会更新这个时间,比如说权限与属性被更改时,都会更新这个时间。

atime

atime 可以理解为 access time,当“该文件的内容被取用”时,就会更新这个读取时间(access)。举例来说,使用 cat 去读取文件时,就会更新该文件的 atime。

举个例子

在默认情况下,ls 显示出来的是文件的mtime。

jonathang@jonathang-pc ...
Continue reading

台北故宫游览非官方指南

Posted on 2016-7-24 in Life • Tagged with taipeiLeave a comment

台北故宫

  1. 总的来说,推荐游览,绝对值回票价,秒掉台北101几条街。

  2. 成人票价 NT$250,可以租讲解,一台用 ipod touch 改的机器(NT$200),还可以在 Google Play 或者 App Store 上下载台北故宫博物院出品的带着故宫走故宫常设展两个 app,功能没有讲解设备多,但是可以辅助使用。

  3. 游览时间平时开放到 18:30,周五及周六会延长到 21:30,但是这个延长时间段对台湾当地居民是免票的,所以游览的人数可能会增多。

  4. 馆内禁止背双肩包进入,禁止带水壶,禁止拍照。所有的这些可以在正馆入口右侧的寄存区寄存,需要提前准备好一个 10 块的硬币,拿回东西的时候会退回。

  5. 台北故宫的藏品很多,据说有60万件,每三个月会换一次,因此每次去看到的藏品都可能不一样,比如说这次我们没有看到王羲之的《快雪时晴帖 ...

Continue reading

设计模式 #2:观察者模式

Posted on 2016-7-12 in Code • Tagged with code, pythonLeave a comment

概括

观察者模式 = 发布者(publisher) + 观察者(observer / subscriber)

模式定义

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

例子:气象监测应用

建立下一代 Internet 气象观察站。该气象站必须建立在 WeatheData 对象上,由 WeatherData 对象负责追踪目前的天气状况(温度、湿度、气压)。 对问题进行分析,发现我们要做的是: 建立一个应用,有三种布告板,分别显示目前的状况、气象统计及简单的预报。 当 WeatherObject 对象获得最新的测量数据时,三种布告板必须实时更新。 * 系统必须可扩展,让其他开发人员可以建立定制的布告板。

解决方案1

subject.py

class Subject(object):
    '''Subject interface class'''
    def register_observer ...
Continue reading

设计模式 #1: 策略模式

Posted on 2016-7-6 in Code • Tagged with code, pythonLeave a comment

这是我有关图书 Head First 设计模式 的笔记,因为我刚开始学 Java,很多特性还不熟,所以这里选择用 Python 来实现。

定义

策略模式(strategy pattern)定义了算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

起始例子

class Duck(object):
    def quack(self):
        print "quack"
    def swim(self):
        print "swim"
    def display(self):
        raise NotImplementedError("abstract display")


class MallardDuck(Duck):
    def display(self):
        print "green"


class RedheadDuck ...
Continue reading

在Mesos中启用SSL

Posted on 2016-7-4 in Others • Tagged with mesosLeave a comment

出于安全考虑,近期我们想在我们的 Mesos 环境中启用 SSL。

默认情况下,Mesos 集群中所有的通信都是不加密的,这使得任何人都有可能进入集群,拦截以及控制 mesos 任务。

好消息是,从版本 0.23.0 起,Mesos 在 libprocess 中引入了 SSL/TLS 来加密 Mesos 组件之间的底层网络通信。并且,Mesos 的 WebUI 也开始支持 HTTPS。

而坏消息是,如果我们想启用 SSL/TLS,需要从源代码编译并安装 Mesos,而其他通过包管理(比如 yum 和 apt-get)的方式都是没有集成 SSL 特性的。

1. 通过源代码安装 Mesos ...

Continue reading

Python 内置函数之 filter

Posted on 2016-5-5 in Code • Tagged with pythonLeave a comment

介绍

filter 过滤列表中的元素,并且返回一个由所有符合要求的元素构成的列表。符合要求的定义为,针对该元素,函数的返回值为 True。

用法

filter(function, iterable),等同于 [item for item in iterable if function(item)]

例子

比如说,之前在 CheckIO 上有一道测试题,需要验证一个密码的可靠性,要求就是密码长度至少为10位,并且同时包含大写字母,小写字母以及数字。

我的解题思路是使用正则来检查字符串:

import re

def checkio(data):

    #replace this for solution
    is_secure = False
    if len(data) >= 10:
        if re.search('[a-z ...
Continue reading

Python 内置函数之 map

Posted on 2016-5-3 in Code • Tagged with pythonLeave a comment

map 是 Python 中的一个内置函数,它会将一个函数映射到一个可迭代对象的所有元素上。

用法:
map(function_to_apply, list_of_inputs)

举个例子,我们有一个包含一组整数的列表,需要计算并返回一个包含每个数字平方的新列表:

items = [1, 2, 3, 4, 5]
squared = []
for item in items:
squared.append(item ** 2)

map 就会有更 pythonic 的解决方式:

items = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, items)

多将 map 与匿名函数 lambda 配合使用 ...

Continue reading