Webcc: 轻量级 C++ HTTP 程序库

2019-08-14
阅读 6 分钟
17.2k
几年前,它只支持简单的 SOAP 调用(名字叫 cSoap),结果慢慢演化成了一个纯粹的 HTTP 程序库,目前有 250 多次代码提交,还在不断完善,且应用在了我们公司的产品中,击败了 Qt 的 QtHttpServer。几乎是 C++ 最好用最完善的 HTTP 程序库了。

Webcc:基于 Asio 的 C++ REST 程序库

2018-05-24
阅读 3 分钟
6.2k
Webcc 是我自己写的一个 C++ Web Service 程序库,网络通信基于 Boost Asio,跨平台,轻量、高效。它并非只是一个玩具,目前正应用于我们实际的项目,而且还在不断更新和完善。

如何优雅的使用 Vim(二):插件介绍

2018-04-24
阅读 5 分钟
13.3k
作为一个编辑器,颜值比什么都重要,Vim 也不例外。Vim 自带的配色方案(Color Scheme),我用得最多的就是 desert 和 ron。最近,发掘了下面几个:

如何优雅的使用 Vim(一):基本配置

2018-04-23
阅读 5 分钟
13k
转眼间,Vim 已用了十年。从一开始的抵触、不解,到随之而来的习惯、喜欢,再到近几年编辑器层出不穷的盛况下对 Sublime Text 等短暂的尝试,以及最后即现在的回归,这是一个复杂的过程。目前,我对 Vim 仍停留在配置和使用阶段,并没有为它开发过任何插件。希望接下来十年,能为它做一些贡献。Vim 是一个难学难上手,即...

Asio 注意事项

2018-01-29
阅读 6 分钟
12.6k
在包含 Asio 头文件之前,定义宏 BOOST_ASIO_NO_DEPRECATED,这样在编译时,Asio 就会剔除那些已经过时的接口。

Python 的异步 IO:Asyncio 之 TCP Client

2017-12-05
阅读 9 分钟
15k
关于 Asyncio 的其他文章: Python 的异步 IO:Asyncio 简介 Python 的异步 IO:Aiohttp Client 代码分析 如果不知道 Asyncio 是什么,先看「Asyncio 简介」那一篇。 一个简单的 HTTP Server 首先,为了便于测试,我们用 Python 内建的 http 模块,运行一个简单的 HTTP Server。 新建一个目录,添加文件 index.html,内...

Python 的异步 IO:Aiohttp Client 代码分析

2017-11-24
阅读 4 分钟
19.7k
Python 的异步 IO:Aiohttp Client 代码分析 Aiohttp 是 Python 的一个 HTTP 框架,基于 asyncio,所以叫 Aiohttp。 我主要是看源码,想理解它的设计,所以附上了类图与时序图。不可避免的,可读性会比较差。想找教程的话,请移步 官方教程,写得还是挺不错的。 一个例子 下面这个例子,通过 HTTP GET 列出 GitHub 的 pu...

浅析 Python 的类、继承和多态

2017-07-04
阅读 5 分钟
8.7k
最最基本的就是 __init__ 方法,相当于 C++ / Java 的构造函数。带双下划线 __ 的方法都是特殊方法,除了 __init__ 还有很多,后面会有介绍。

openSUSE 安装 PostgreSQL

2017-07-03
阅读 4 分钟
8.5k
自从 Ubuntu 弃 Unity 转 Gnome,我也就弃 Ubuntu 而转 openSUSE 了。Leap 的软件版本是旧了一点(比如 Vim 还停留在 7.4),好处是稳定、优雅、省心。滚动发行版 Tumbleweed 目前还差那么一口气,试用之后觉得不够稳定,并不适合日常使用。openSUSE 的 KDE 桌面堪称一绝,上班用 Windows、娱乐用 Mac、写代码用 Linux ...

看例子,学 Python(三)

2017-06-27
阅读 3 分钟
4.1k
看例子,学 Python(三) 看例子,学 Python(一)看例子,学 Python(二) 包 创建一个目录 myutil,把 mymath.py 挪到里面,再添加一个空文件 __init__.py: {代码...} myutil 便是一个包(package)。 import 最直接的用法: {代码...} 缺点是调用 fac 时太长,包和模块作为前缀都要写全。但是写成 import myutil.mym...

看例子,学 Python(二)

2017-06-26
阅读 6 分钟
5.6k
看例子,学 Python(二) 看例子,学 Python(一)看例子,学 Python(三) 模块 文件 mymath.py 定义了函数 fib 和 fac,mymath.py 就是一个模块。 A module is a file containing Python definitions and statements. 自定义模块 导入模块: {代码...} mymath.py 须在当前目录。 查看模块帮助: {代码...} 列出模块属...

看例子,学 Python(一)

2017-06-23
阅读 6 分钟
5.3k
很难说,这篇代码比文字还多的文章,是否适合初学者。它源于个人笔记,涉及的多是简单核心的概念,也许需要一些编程基础才能快速理解。内容方面,力求循序渐进,避开细枝末节,注重原理和示例的连续性,尽量不罗列特性,点到即止。

C++ 调用 SOAP Web Service

2017-06-21
阅读 4 分钟
12.7k
首先,gSoap 肯定是个不错的选择,但是如果你的程序要调用多个 Web Services(即有多个 WSDL),gSoap 会比较麻烦。还有一个问题就是,gSoap 从 WSDL 自动生成的代码实在是太难用了。当然,这些都不是什么问题,真在的问题是许可证(License),gSoap 用在商业产品中是要收费的。

Python 的异步 IO:Asyncio 简介

2017-03-24
阅读 5 分钟
50.2k
Asyncio 是并发(concurrency)的一种方式。对 Python 来说,并发还可以通过线程(threading)和多进程(multiprocessing)来实现。

基于 Asio 的 C++ 网络编程

2016-10-20
阅读 12 分钟
51.2k
说明:这篇教程形成于 Boost v1.62 时代,最近(2018/01)针对 v1.66 做了一次大的更新。此外,在代码风格上,C++11 用得更多了。

C++ 并发编程(七):读写锁(Read-Write Lock)

2016-09-19
阅读 2 分钟
60.1k
STL 和 Boost 都提供了 shared_mutex 来解决「读者-写者」问题。shared_mutex 这个名字并不十分贴切,不如 pthread 直呼「读写锁」。

C++ 并发编程(六):信号量(Semaphore)

2016-09-05
阅读 4 分钟
36.6k
Semaphore is a counter limiting the number of threads concurrently accessing a shared resource.This counter is always between 0 and the maximum value specified during the semaphore creation. When the counter is strictly greater than 0, a call to Wait returns immediately and decrements the counter...

C++ 并发编程(五):生产者 - 消费者

2016-08-24
阅读 3 分钟
25.3k
生产者 - 消费者(Producer-Consumer),也叫有限缓冲(Bounded-Buffer),是多线程同步的经典问题之一。详见 Wikipedia。

C++ 并发编程(四):基于 Asio 的线程池

2016-08-23
阅读 2 分钟
24.6k
目前项目中使用的线程池(详见:[链接]),虽然能用,但是代码复杂且很久没有人维护了。 本文结合 Thread 和 Asio,实现了一个线程池。一二十行代码,不能更简单了! 头文件: {代码...} 线程池类: {代码...} 成员变量 work_guard_ 的作用是,让 io_context 即使在没有异步任务可执行时也保持运行(即 io_context::run ...

C++ 并发编程(三):条件变量(Condition Variable)

2016-08-22
阅读 2 分钟
53.2k
条件变量(Condition Variable)的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒。经典的「生产者-消费者」问题就可以用条件变量来解决。

C++ 并发编程(二):Mutex(互斥锁)

2016-08-17
阅读 3 分钟
41.9k
The mutex class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.

C++ 并发编程(一):创建线程

2016-08-10
阅读 3 分钟
18.2k
这个系列是我近期学习 C++ 并发编程的总结,文章和代码最初都是基于 Boost.Thread,但是最近越来越发现,STL 内置的线程和同步工具已经足够完善了。

C++ 程序嵌 Lua(基于 LuaBridge)

2016-06-21
阅读 8 分钟
13.6k
Lua 的源码自带 Makefile,可以编译出静态库、解释器、编译器三个目标文件,作为宿主的 C++ 程序,除了要包含 Lua 头文件,还应该链接这个静态库。

C++ 的脚本语言:ChaiScript

2016-06-15
阅读 4 分钟
11.7k
ChaiScript 是一个可以方便的嵌在 C++ 程序里的脚本语言,相比于 V8(Google JavaScript)和 Lua 来说,它的用法要简单得多。 ChaiScript 和 STL 一样只有头文件,缺点是编译慢,而且因为大量使用模板,编译就更慢。 说明: 本文示例代码一律假定已经 using namespace chaiscript。 本文已经有些年头了,不代表 ChaiScri...

高性能 Lua 技巧(译)

2016-01-27
阅读 10 分钟
31.5k
此为 Lua Programming Gems 一书的第二章:Lua Performance Tips,作者为 Roberto Ierusalimschy。 我的翻译以 网上别人的翻译 为基础,做了比较大的修改,读起来更通顺。 关于性能优化的两条格言: 规则 1:不要优化 规则 2:还是不要优化(仅限专家) 不要在缺乏恰当度量(measurements)时试图去优化软件。编程老手和...

堆和堆排序

2016-01-25
阅读 4 分钟
3.9k
在讨论「堆排序」之前,先复习一下「选择排序」。 {代码...} 选择排序的空间效率很高(O(1)),但是时间效率很低(O(N^2)),主要花在了「从剩余元素中找出最小元素」,每次都要遍历剩余的全部元素。 有没有一种数据结构,能够方便的拿到 最小 元素? 如果重写 SelectionSort,改为反向遍历,每次「从剩余元素中找出最大...

终端音频播放器 MOC 源码分析

2016-01-21
阅读 9 分钟
3.7k
MOC(Music On Console)是 Linux/UNIX 平台的终端播放器,它采用 Client/Server 结构,基于 UNIX Domain Socket ,C 代码非常简洁,值得一读。

你可能不知道的 C++(二)

2016-01-17
阅读 10 分钟
6.6k
第一部分:你可能不知道的 C++(一) 此为《你可能不知道的 C++》的第二部分,讨论 类型,内联 & 模板。 类型 我们不讨论原始类型(int, double, etc.)和结构。原始类型比较简单,而结构其实就是类。 本节包含以下几个方面: 联合 类 指针和引用 常量 转型 联合 联合(union)的元素共用同一块内存空间,联合的大小...

你可能不知道的 C++(一)

2016-01-13
阅读 7 分钟
7.1k
说明:本文面向有经验的 C++ 程序员,不适合初学者。 第二部分:你可能不知道的 C++(二) 此为《你可能不知道的 C++》的第一部分,讨论 C & C++,编译单元,及对象。 C++ has indeed become too "expert friendly".C++ 着实已经变得太“面向专家”了。 Bjarne Stroustrup, The Problem with Programming, Technology ...

SQLAlchemy入门(一)

2016-01-11
阅读 6 分钟
26.1k
环境:Ubuntu 15.10 64-bit SQLAlchemy 是 Python 的 ORM 框架,它的理念是:数据库的量级和性能重要于对象集合,而对象集合的抽象又重要于表和行。 安装 直接通过 pip 安装: {代码...} 打开 Python,测试是否安装成功: {代码...} 创建引擎 SQLite 首先以 SQLite 为例,因为它比较简单。 {代码...} 参数 sqlite:///foo...