程序技术 |

python 和消息机制(一):消息队列简介

简介消息队列是生产者消费者模型的扩展,主要特点是: 异步:把接受到的任务放到队列里面,以后处理 分布式:消费者/worker 可以方便地横向扩展 关于消息队列,这篇文章有详细的介绍。 这个系列的文章主要介绍 python 消息队列的有关知识,会讲到下面几个概念: amqp: Adcanced Message Queue Protocol,官网在这。 rabbitmq: Erlang 语言的amqp 协议实现 pyamqp:python message queue 的客户 ...

  • Cizixs Wu
    Cizixs Wu
3 min read
程序技术 |

编写自己的 tftp 客户端(1)

tftp 协议一般用来 PXE 协议中传输文件,因为协议内容比较简单,所以非常容易实现。关于 tftp 的详细信息,可以参考维基百科或者 RFC 1350。 这是两篇文章的第一篇,主要是 tftp 理论知识,第二篇是 python 实现的技术和细节还有具体程序的说明。 下面我会简单介绍 tftp 协议的主要内容,为后面编写 tftp client 和 server 做好准备。 tftp 发送流程 client 端向 server 端 69 端口发送 RRQ(读请求)或者 WR ...

  • Cizixs Wu
    Cizixs Wu
9 min read
程序技术 |

socket 编程基础知识

这篇文章介绍了网络的基本概念,socket 编程的基础知识和 C 语言提供的 socket 库使用。 本文只考虑 ipv4,不考虑 ipv6。 只考虑网络上 AF_INET socket 类型,不考虑 UNIX 域协议以及其他类型。 TL;DR 概念什么是 socket计算机里面最令人烦的就是这些名词,它们都很抽象,而且解释起来就和没有解释差不多。socket 就是这样的一个概念,不过我还是要试着说明一下。 简单来说,socket 是对底层网络通信的一层抽象,让程序员可以 ...

  • Cizixs Wu
    Cizixs Wu
19 min read
程序技术 |

抓包神器 tcpdump 使用介绍

tcpdump 命令使用简介简单介绍tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。 要想使用很好地掌握 tcpdump, 必须对网络报文(TCP/IP 协议)有一定的了解。不过对于简单的使用来说,只要有网络基础概念就行了。 tcpdump 是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键。 选项tcpdump 的选项也很多,要想知道所有选项的 ...

  • Cizixs Wu
    Cizixs Wu
14 min read
程序技术 |

linux 系统启动过程

Linux 系统的启动过程简介我们都知道:操作系统运行的代码是在硬盘上的,最终要跑到内存和 CPU 上,才能被我们使用。 那从摁下电源键到看到系统界面,操作系统是怎么霸占了所有的硬件资源,把自己加载到内存开始运行的呢?可以想到有两个可能性:操作系统自己实现的,或者有其他贵人帮忙。如果是操作系统自己启动的,就有了一个“鸡生蛋,蛋生鸡”的问题;如果是后者的话,一定有在操作系统启动之前就能工作的神力,把沉睡在硬盘的操作系统变到工作状态。 事实上,Linux 系统的启动正是上面第二种 ...

  • Cizixs Wu
    Cizixs Wu
8 min read
程序技术 |

解析 python decorator

首次看到 python 的 decorator 的时候,感到非常新奇,也非常困惑。这个看起来很酷,在各种源码里经常出现的家伙到底是什么意思,怎么使用? @myDecorator def aFunction(): print("inside a Function") 这篇文章就解释一下自己的这个疑惑。 从函数开始函数可以看做一个容器,它根据接受的参数进行运算,并返回出结果(没有返回的函数可以看做返回值是 None )。 在 Python 这样的高级 ...

  • Cizixs Wu
    Cizixs Wu
21 min read
程序技术 |

凯撒密码和维吉尼亚密码

在开始之前,先定义一些基本的概念。 明文P(Plain text):指没有经过加密的普通文本 密文C(Cipher text):指加密后的文本 加密(Encryption/Encipherment):将明文转化为密文的过程 解密(Decryption/Decipherment):将密文还原为明文的过程 加密钥匙Ek(Encryption Key):加密时使用的钥匙(配合加密算法的数据) 解密钥匙Dk(Decryption Key):解密时使用的钥匙(配合解密算法的数据) ...

  • Cizixs Wu
    Cizixs Wu
9 min read
程序技术 |

wsgiref 源码解析

图片来源 介绍要很好地理解下面的代码,最好有一定的 socket 编程基础,了解 socket 的基本概念和流程。 wsgiref 是 PEP 333 定义的 wsgi 规范的范例实现,里面的功能包括了: 操作 wsgi 的环境变量 应答头部的处理 实现简单的 HTTP server 简单的对程序端和服务器端校验函数 我们先看一个简单的代码实例,然后跟着例子去理解源码: app.py # pep333 定义的程序端可调用对象 def hello_world_app(e ...

  • Cizixs Wu
    Cizixs Wu
15 min read
程序技术 |

python wsgi 简介

基础知识Python 知识 iterator 和 generator 函数的高级用法:嵌套函数,作为参数传递等等 了解 decorator 会对理解 wsgi 有很大的帮助 python 的 callable 概念 classmethod 和 staticmethod 的概念 web 编程的基础 HTTP 基础 对于 web 应用程序来说,最基本的概念就是客户端发送请求(request),收到服务器端的响应(response)。 下面是简单的 HTTP 请求: GET / ...

  • Cizixs Wu
    Cizixs Wu
17 min read
程序技术 |

Linux 文本处理

这篇文章记录了 Bash 中常用的文本处理的程序,但是并不对每个程序做很详细的解释,只是列出来一些实用的用法。算是读书笔记,也可以看做一个备忘。 1. 查看cat(concatenate) -A 选项可以显示非打印字符,这个在调试 MS-DOS 的回车符时比较有用。 cat 主要用来查看文件和拼接文件。cat file1.txt file2.txt file2.txt > file.txt 会把三个文件的内容输出到file.txt。 cat > foo.txt ...

  • Cizixs Wu
    Cizixs Wu
5 min read
程序技术 |

【翻译】curl自动化http操作

HTTP 脚本背景这篇文档假定读者熟悉HTML和简单的网络知识。 大量应用转到网络使得HTTP 脚本被大量使用,自动化地从网络获取信息、伪装成用户、上传数据到网络服务器也变得至关重要。 curl是进行各种 url 操作和转换的命令行工具,这篇文章只关注curl在 http 请求中的应用。我想你已经知道使用curl --help或者curl --manual 来初步了解curl。 curl不能保证完成你所有的任务。它能发出请求、获取数据、发送数据和获得信息,你或许需要通过其他 ...

  • Cizixs Wu
    Cizixs Wu
25 min read
程序技术 |

c string function implementation

本文主要讲述一下c语言里的字符串常用的函数以及一些经典的实现,讲解了数组和指针的用法。 C 中的字符串文字的处理是计算机重要的功能之一,C语言自然也提供了完备的机制。 字符串 VS 数组c语言中并没有字符串类型,使用的字符串都是用数组实现的。比如,下面定义的str字符串, char str[] = "Hello,world!" 实际上是如下的数组: ————————————————————————————————————————————————————— ...

  • Cizixs Wu
    Cizixs Wu
12 min read
程序技术 |

Python 编码那些事

似曾相识?如果你经常使用Python的话,对下面这种情况应该很熟悉: UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1: ordinal not in range(128) 你当然知道这是编码错误,也能根据提醒知道默认的ASCII码无法解析这里的数据,但是却不知道到底为什么会出现这种情况,并且应该怎么解决。那么这篇文章就是为你而准备的,请继续往下读。 认识编码计 ...

  • Cizixs Wu
    Cizixs Wu
8 min read