程序技术 | 2015-05-13 python 和消息机制(一):消息队列简介 简介消息队列是生产者消费者模型的扩展,主要特点是: 异步:把接受到的任务放到队列里面,以后处理 分布式:消费者/worker 可以方便地横向扩展 关于消息队列,这篇文章有详细的介绍。 这个系列的文章主要介绍 python 消息队列的有关知识,会讲到下面几个概念: amqp: Adcanced Message Queue Protocol,官网在这。 rabbitmq: Erlang 语言的amqp 协议实现 pyamqp:python message queue 的客户 ...
程序技术 | 2015-04-12 编写自己的 tftp 客户端(1) tftp 协议一般用来 PXE 协议中传输文件,因为协议内容比较简单,所以非常容易实现。关于 tftp 的详细信息,可以参考维基百科或者 RFC 1350。 这是两篇文章的第一篇,主要是 tftp 理论知识,第二篇是 python 实现的技术和细节还有具体程序的说明。 下面我会简单介绍 tftp 协议的主要内容,为后面编写 tftp client 和 server 做好准备。 tftp 发送流程 client 端向 server 端 69 端口发送 RRQ(读请求)或者 WR ...
程序技术 | 2015-03-29 socket 编程基础知识 这篇文章介绍了网络的基本概念,socket 编程的基础知识和 C 语言提供的 socket 库使用。 本文只考虑 ipv4,不考虑 ipv6。 只考虑网络上 AF_INET socket 类型,不考虑 UNIX 域协议以及其他类型。 TL;DR 概念什么是 socket计算机里面最令人烦的就是这些名词,它们都很抽象,而且解释起来就和没有解释差不多。socket 就是这样的一个概念,不过我还是要试着说明一下。 简单来说,socket 是对底层网络通信的一层抽象,让程序员可以 ...
程序技术 | 2015-03-24 salt api 配置和使用 ##准备工作 安装salt 使用 CherryPy 来实现 restful 的 api,供外部的程序调用。 根据官方的文档配置 salt repo: http://ppa.launchpad.net/saltstack/salt/ubuntu/ 然后使用命令 sudo apt-get update && sudo apt-get install salt-api -y 安装 salt-api。 添加用户salt-api 使用 eauth 验证系统(使用api所 ...
程序技术 | 2015-03-12 抓包神器 tcpdump 使用介绍 tcpdump 命令使用简介简单介绍tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。 要想使用很好地掌握 tcpdump, 必须对网络报文(TCP/IP 协议)有一定的了解。不过对于简单的使用来说,只要有网络基础概念就行了。 tcpdump 是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键。 选项tcpdump 的选项也很多,要想知道所有选项的 ...
程序技术 | 2015-01-18 linux 系统启动过程 Linux 系统的启动过程简介我们都知道:操作系统运行的代码是在硬盘上的,最终要跑到内存和 CPU 上,才能被我们使用。 那从摁下电源键到看到系统界面,操作系统是怎么霸占了所有的硬件资源,把自己加载到内存开始运行的呢?可以想到有两个可能性:操作系统自己实现的,或者有其他贵人帮忙。如果是操作系统自己启动的,就有了一个“鸡生蛋,蛋生鸡”的问题;如果是后者的话,一定有在操作系统启动之前就能工作的神力,把沉睡在硬盘的操作系统变到工作状态。 事实上,Linux 系统的启动正是上面第二种 ...
程序技术 | 2014-12-21 解析 python decorator 首次看到 python 的 decorator 的时候,感到非常新奇,也非常困惑。这个看起来很酷,在各种源码里经常出现的家伙到底是什么意思,怎么使用? @myDecorator def aFunction(): print("inside a Function") 这篇文章就解释一下自己的这个疑惑。 从函数开始函数可以看做一个容器,它根据接受的参数进行运算,并返回出结果(没有返回的函数可以看做返回值是 None )。 在 Python 这样的高级 ...
程序技术 | 2014-12-20 Sublime Text: python 程序员不完全指南 1. 插件Package Control唯一需要手动安装的插件,官方介绍: The Sublime Text package manager that makes it exceedingly simple to find, install and keep packages up-to-date. 安装的话官网上有自动安装脚本。 GitGit 和 Sublime 的深度集成,直接执行 Git 命令,轻松告别 Terminal。 GitGutter实时查看 git di ...
程序技术 | 2014-11-30 凯撒密码和维吉尼亚密码 在开始之前,先定义一些基本的概念。 明文P(Plain text):指没有经过加密的普通文本 密文C(Cipher text):指加密后的文本 加密(Encryption/Encipherment):将明文转化为密文的过程 解密(Decryption/Decipherment):将密文还原为明文的过程 加密钥匙Ek(Encryption Key):加密时使用的钥匙(配合加密算法的数据) 解密钥匙Dk(Decryption Key):解密时使用的钥匙(配合解密算法的数据) ...
程序技术 | 2014-11-09 wsgiref 源码解析 图片来源 介绍要很好地理解下面的代码,最好有一定的 socket 编程基础,了解 socket 的基本概念和流程。 wsgiref 是 PEP 333 定义的 wsgi 规范的范例实现,里面的功能包括了: 操作 wsgi 的环境变量 应答头部的处理 实现简单的 HTTP server 简单的对程序端和服务器端校验函数 我们先看一个简单的代码实例,然后跟着例子去理解源码: app.py # pep333 定义的程序端可调用对象 def hello_world_app(e ...
程序技术 | 2014-11-08 python wsgi 简介 基础知识Python 知识 iterator 和 generator 函数的高级用法:嵌套函数,作为参数传递等等 了解 decorator 会对理解 wsgi 有很大的帮助 python 的 callable 概念 classmethod 和 staticmethod 的概念 web 编程的基础 HTTP 基础 对于 web 应用程序来说,最基本的概念就是客户端发送请求(request),收到服务器端的响应(response)。 下面是简单的 HTTP 请求: GET / ...
程序技术 | 2014-10-19 Linux 文本处理 这篇文章记录了 Bash 中常用的文本处理的程序,但是并不对每个程序做很详细的解释,只是列出来一些实用的用法。算是读书笔记,也可以看做一个备忘。 1. 查看cat(concatenate) -A 选项可以显示非打印字符,这个在调试 MS-DOS 的回车符时比较有用。 cat 主要用来查看文件和拼接文件。cat file1.txt file2.txt file2.txt > file.txt 会把三个文件的内容输出到file.txt。 cat > foo.txt ...
程序技术 | 2014-05-14 【翻译】curl自动化http操作 HTTP 脚本背景这篇文档假定读者熟悉HTML和简单的网络知识。 大量应用转到网络使得HTTP 脚本被大量使用,自动化地从网络获取信息、伪装成用户、上传数据到网络服务器也变得至关重要。 curl是进行各种 url 操作和转换的命令行工具,这篇文章只关注curl在 http 请求中的应用。我想你已经知道使用curl --help或者curl --manual 来初步了解curl。 curl不能保证完成你所有的任务。它能发出请求、获取数据、发送数据和获得信息,你或许需要通过其他 ...
程序技术 | 2014-04-10 apt 背后的故事 这篇文章介绍的是ubuntu系统的apt-get软件包的格式、管理,和其他系统可能会有出入。 1. debian sources list 格式sources.list是debian系统用来指定软件源的文件,它的基本格式为: deb uri distribution [component1] [component2] […] 我们使用国内的163源来说明每一行的具体含义下面是来自163源ubuntu帮助页面的条目: deb http://mirrors.163.com/u ...
程序技术 | 2014-03-05 c string function implementation 本文主要讲述一下c语言里的字符串常用的函数以及一些经典的实现,讲解了数组和指针的用法。 C 中的字符串文字的处理是计算机重要的功能之一,C语言自然也提供了完备的机制。 字符串 VS 数组c语言中并没有字符串类型,使用的字符串都是用数组实现的。比如,下面定义的str字符串, char str[] = "Hello,world!" 实际上是如下的数组: ————————————————————————————————————————————————————— ...
程序技术 | 2013-09-07 Python 编码那些事 似曾相识?如果你经常使用Python的话,对下面这种情况应该很熟悉: UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1: ordinal not in range(128) 你当然知道这是编码错误,也能根据提醒知道默认的ASCII码无法解析这里的数据,但是却不知道到底为什么会出现这种情况,并且应该怎么解决。那么这篇文章就是为你而准备的,请继续往下读。 认识编码计 ...
程序技术 | 2013-09-06 RESTful API design 这篇文章主要介绍RESTful的基本概念和设计时需要注意的事项。所有的内容仅针对刚接触RESTful的同学,其他人请移步。 RESTful, WTF?如果你遇到问题会主动上网查找的话,你会在wikipedia上发现这样的定义: Representational state transfer (REST) is a style of software architecture for distributed systems such as the World Wide Web. ...
程序技术 | 2013-08-14 solve sudoers error problem Tricky ProblemToday I tried to install openstack in my ubuntu12.04 with devstack.It should be simple, but a lot of trouble occured while doing it. The main one is about privileges.As I only work in ubuntu default user, and use ‘sudo’ somtim ...
程序技术 | 2013-08-10 Python ConfigParser Module Python ModulePython has a rich library which is clear, simple and easy-to-use.It covers all subjects you might think of, from text process to network parser, from email to UI.About python libraries and modules, you can refer to python wiki, ...
程序技术 | 2013-08-10 Use Jekyll to Write Blog Quick StartUse jekyll to write posts is as easy as play Fruit Ninja, there is barely learning process.To create a new post: rake post title="post title" It will automatically create a post under _post folder with format ‘date-titl ...
程序技术 | 2013-07-29 Basic Regular Expression What is Regular Expression and Why?Regular Expression(Regex for simplicity) is a sequence of characters that forms a search pattern, mainly for use in pattern matching with string, or string matching. There is a very famous quote about rege ...