diff --git a/libs/cpp.wiki b/libs/cpp.wiki
index a89f305..723d5c9 100644
--- a/libs/cpp.wiki
+++ b/libs/cpp.wiki
@@ -16,7 +16,7 @@
Home:[http://boost.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Boost_%28C%2B%2B_libraries%29 英文]、[https://zh.wikipedia.org/wiki/Boost_C%2B%2B_Libraries 中文]
+Links:[https://en.wikipedia.org/wiki/Boost_%28C%2B%2B_libraries%29 Wikipedia] [https://zh.wikipedia.org/wiki/Boost_C%2B%2B_Libraries 维基百科]
Boost 大概是最重要的第三方 C++ 库。其作者有很多是 C++ 标准委员会的成员。Boost 的很多子库后来都成为 C++ 的标准库。
@@ -26,7 +26,7 @@ Boost 大概是最重要的第三方 C++ 库。其作者有很多是 C++ 标准
Home:[https://wxwidgets.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/WxWidgets 英文]、[https://zh.wikipedia.org/wiki/WxWidgets 中文]
+Links:[https://en.wikipedia.org/wiki/WxWidgets Wikipedia] [https://zh.wikipedia.org/wiki/WxWidgets 维基百科]
这是一个非常老牌的 C++ 开源 GUI 框架,诞生于1992年。原先叫做 wxWindows,后来因为微软的法律纠纷,改为现名。
@@ -40,7 +40,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/WxWidgets 英文]、[https://zh.wikip
Home:[http://www.qt-project.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Qt_(toolkit) 英文]、[https://zh.wikipedia.org/wiki/Qt 中文]
+Links:[https://en.wikipedia.org/wiki/Qt_(toolkit) Wikipedia] [https://zh.wikipedia.org/wiki/Qt 维基百科]
这是一个非常老牌的 C++ 开源 GUI 框架,于1995年发布 1.0 版本。原先由 Trolltech 公司维护,后来该公司被 Nokia 收购。
@@ -52,7 +52,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Qt_(toolkit) 英文]、[https://zh.wi
Home:[https://apr.apache.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Apache_Portable_Runtime 英文]、[https://zh.wikipedia.org/wiki/Apache%E5%8F%AF%E7%A7%BB%E6%A4%8D%E8%BF%90%E8%A1%8C%E6%97%B6 中文]
+Links:[https://en.wikipedia.org/wiki/Apache_Portable_Runtime Wikipedia] [https://zh.wikipedia.org/wiki/Apache%E5%8F%AF%E7%A7%BB%E6%A4%8D%E8%BF%90%E8%A1%8C%E6%97%B6 维基百科]
这是由 Apache 社区维护的 C 开源库,主要提供操作系统相关的功能(文件系统、进程、线程、用户、IPC)。此外还提供了一些网络相关的功能。
@@ -62,7 +62,7 @@ APR 原先是 Apache Web 服务器的一个组成部分,后来独立出来,
Home:[http://www.cse.wustl.edu/~schmidt/ACE.html]
-Wikipedia:[https://en.wikipedia.org/wiki/Adaptive_Communication_Environment 英文]、[https://zh.wikipedia.org/wiki/ACE%E8%87%AA%E9%80%82%E9%85%8D%E9%80%9A%E4%BF%A1%E7%8E%AF%E5%A2%83 中文]
+Links:[https://en.wikipedia.org/wiki/Adaptive_Communication_Environment Wikipedia] [https://zh.wikipedia.org/wiki/ACE%E8%87%AA%E9%80%82%E9%85%8D%E9%80%9A%E4%BF%A1%E7%8E%AF%E5%A2%83 维基百科]
这是一个跨平台的 C++ 库,提供了一套网络通讯的框架;另外还支持线程、进程和 IPC。
@@ -70,7 +70,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Adaptive_Communication_Environment
Home:[http://pocoproject.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/POCO_C%2B%2B_Libraries 英文]
+Links:[https://en.wikipedia.org/wiki/POCO_C%2B%2B_Libraries Wikipedia]
它的名称源自“POrtable COmponents”,是一个基于 C++ 的开源库。
@@ -80,7 +80,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/POCO_C%2B%2B_Libraries 英文]
Home:[http://dlib.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/Dlib 英文]
+Links:[https://en.wikipedia.org/wiki/Dlib Wikipedia]
诞生于2002年的 C++ 开源库,提供了非常多的功能(网络、多线程、GUI、数值计算、图像处理、数据挖掘......)。
@@ -90,7 +90,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Dlib 英文]
Home:[http://www.cryptopp.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/Crypto%2B%2B 英文]
+Links:[https://en.wikipedia.org/wiki/Crypto%2B%2B Wikipedia]
它也叫“CryptoPP”或“libcrypto++”,是非常著名的开源加密库,诞生于1995年。基于 C++ 开发,大量用到模板语法。
@@ -290,6 +290,7 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“
#include
#include
+
using std::cout;
using boost::format;
@@ -332,7 +333,7 @@ fmt::print("Hello, {name}! The answer is {number}. Goodbye, {name}.",
Home:[http://www.pcre.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions 英文]
+Links:[https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions Wikipedia]
这是一个很老牌的正则表达式的库,诞生于1997年。很多知名的开源项目(Apache、PHP、KDE)用到了它。
@@ -347,6 +348,7 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“
代码示例——基于正则式进行匹配和替换
#include
+
using std::string;
using namespace boost;
@@ -384,6 +386,7 @@ Home:[https://github.com/google/re2]
代码示例——基于正则式进行匹配
#include
+
int i;
string s;
assert(RE2::FullMatch("test:1234", "(\\w+):(\\d+)", &s, &i));
@@ -395,7 +398,7 @@ assert(i == 1234);
Home:[http://www.geocities.jp/kosako3/oniguruma/]
-Wikipedia:[https://en.wikipedia.org/wiki/Oniguruma 英文]
+Links:[https://en.wikipedia.org/wiki/Oniguruma Wikipedia]
来自日本的正则式库,基于 C 语言。据说性能很高。
@@ -719,11 +722,13 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,用来辅助
#include
#include
-boost::function f = std::atoi;
-std::cout << f("42") << '\n';
+using namespace std;
+
+boost::function f = atoi;
+cout << f("42") << '\n';
-f = std::strlen;
-std::cout << f("42") << '\n';
+f = strlen;
+cout << f("42") << '\n';
Boost.Lambda
@@ -741,10 +746,40 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“
#include
#include
-std::vector v;
+using namespace std;
+
+vector v;
// 此处填充 v
-std::for_each(v.begin(), v.end(),
- std::cout << boost::lambda::_1 << "\n");
+for_each(v.begin(), v.end(), cout << boost::lambda::_1 << "\n");
+
+
+simple_match
+
+Home:[https://github.com/jbandela/simple_match]
+
+这个库是为了提供类似 Rust 语言中的 match 语法。
+
+(不懂 Rust 的同学,可以把 match 语法视作增强版的 switch/case)
+
+代码示例
+
+#include
+#include
+using namespace simple_match;
+using namespace simple_match::placeholders;
+
+int x = 0;
+while (true)
+{
+ std::cin >> x;
+ match(x,
+ 1, []() { std::cout << "one\n"; },
+ 2, []() { std::cout << "two\n"; },
+ _x < 10, [](auto&& n) { std::cout << n << " is less than 10\n"; },
+ 10 < _x < 20, [](auto&& n) { std::cout << n << " is between 10 and 20 exclusive\n"; },
+ _, []() { std::cout << "NOT match\n"; }
+ );
+}
== 3.4 元编程(Metaprogramming) ==
@@ -839,7 +874,7 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了与
Home:[https://github.com/google/googletest]
-Wikipedia:[https://en.wikipedia.org/wiki/Google_Test 英文]
+Links:[https://en.wikipedia.org/wiki/Google_Test Wikipedia]
这是 Google 提供的单元测试框架。从 Google Code 迁移到 GitHub 之后,又整合了 GoogleMock 项目。
@@ -849,7 +884,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Google_Test 英文]
Home:[http://freedesktop.org/wiki/Software/cppunit/]
-Wikipedia:[https://en.wikipedia.org/wiki/CppUnit 英文]
+Links:[https://en.wikipedia.org/wiki/CppUnit Wikipedia]
如其名,这是一个 C++ 的单元测试框架。该项目起先是作为 JUnit 的 C++ 移植而创建的。
@@ -857,7 +892,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/CppUnit 英文]
Home:[http://check.sourceforge.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/Check_%28unit_testing_framework%29 英文]
+Links:[https://en.wikipedia.org/wiki/Check_%28unit_testing_framework%29 Wikipedia]
这是针对 C 的单元测试框架。
@@ -1159,7 +1194,7 @@ int main(int argc, char* argv[])
Home:[http://www.gtk.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/GTK%2B 英文]、[https://zh.wikipedia.org/wiki/GTK%2B 中文]
+Links:[https://en.wikipedia.org/wiki/GTK%2B Wikipedia] [https://zh.wikipedia.org/wiki/GTK%2B 维基百科]
老牌的 GUI 框架,诞生于1998年。原先叫做“GIMP Toolkit”,是基于 C 开发的跨平台界面组件库。
@@ -1196,7 +1231,7 @@ int main(int argc, char* argv[])
Home:[http://www.fltk.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/FLTK 英文]、[https://zh.wikipedia.org/wiki/FLTK 中文]
+Links:[https://en.wikipedia.org/wiki/FLTK Wikipedia] [https://zh.wikipedia.org/wiki/FLTK 维基百科]
它的全称是“Fast, Light Toolkit”。如其名,它非常轻量级。用它写一个“Hello World 应用”,静态链接后大约才 100KB
@@ -1227,7 +1262,7 @@ int main(int argc, char **argv)
Home:[http://sourceforge.net/projects/wtl/]
-Wikipedia:[https://en.wikipedia.org/wiki/Windows_Template_Library 英文]、[https://zh.wikipedia.org/wiki/Windows_Template_Library 中文]
+Links:[https://en.wikipedia.org/wiki/Windows_Template_Library Wikipedia] [https://zh.wikipedia.org/wiki/Windows_Template_Library 维基百科]
这是微软雇员 Nenad Stefanovic 开发的开源 GUI 框架。开发 WTL 是为了提供一个轻量级的 MFC 替代品。
@@ -1295,6 +1330,18 @@ Home:[http://wxmathplot.sourceforge.net/]
看名称就知道它是跟 wxWidgets 搭配的。效果图参见“[http://wxmathplot.sourceforge.net/screenshot.shtml 这里]”
+== 6.3 文本编辑 ==
+
+Scintilla
+
+Home:[https://scintilla.org/]
+
+Links:[https://en.wikipedia.org/wiki/Scintilla_(software) Wikipedia]
+
+功能【超强】的文本编辑组件,支持:词法高亮、代码折叠、自动补全、动态提示......(基本上你能想到的,它都已经有了)
+
+不光功能齐全,还支持各种主流的操作系统平台。很多编辑器/IDE 用到它。
+
----
= 7 文本用户界面(TUI) =
@@ -1305,7 +1352,7 @@ Home:[http://wxmathplot.sourceforge.net/]
Home:[https://www.gnu.org/software/libc/manual/html_node/Getopt.html]
-Wikipedia:[https://en.wikipedia.org/wiki/Getopt 英文]
+Links:[https://en.wikipedia.org/wiki/Getopt Wikipedia]
这是标准C用来处理命令行参数的老牌函数,诞生于上世纪80年代初期。
@@ -1316,7 +1363,8 @@ Wikipedia:[https://en.wikipedia.org/wiki/Getopt 英文]
#include /* for printf */
#include /* for exit */
#include /* for getopt */
-int main(int argc, char** argv)
+
+int main(int argc, char* argv[])
{
int digit_optind = 0;
int aopt = 0, bopt = 0;
@@ -1381,13 +1429,64 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“
它的功能很丰富,但是比较重型。
+docopt
+
+Home:[https://github.com/docopt/docopt.cpp]
+
+这是一个很有创意的库,提供了一种【全新】的方式来处理命令行参数。
+
+你只需定义好命令行的帮助文本(usage),该库会根据 usage 文本自动分析出命令行参数的定义。
+
+也就是说:用了这个库,就无需再写一大堆 parse 命令行参数的代码 :)
+
+代码示例
+
+#include
+#include
+
+static const char USAGE[] =
+R"(Naval Fate.
+
+ Usage:
+ naval_fate ship new ...
+ naval_fate ship move [--speed=]
+ naval_fate ship shoot
+ naval_fate mine (set|remove) [--moored | --drifting]
+ naval_fate (-h | --help)
+ naval_fate --version
+
+ Options:
+ -h --help Show this screen.
+ --version Show version.
+ --speed= Speed in knots [default: 10].
+ --moored Moored (anchored) mine.
+ --drifting Drifting mine.
+)";
+
+int main(int argc, const char* argv[])
+{
+ std::map args
+ = docopt::docopt(USAGE,
+ { argv + 1, argv + argc },
+ true, // 是否显示帮助
+ "Naval Fate 2.0"); // 版本号
+
+ for(auto const& arg : args)
+ {
+ std::cout << arg.first << arg.second << std::endl;
+ }
+
+return 0;
+}
+
+
== 7.2 文本终端 ==
ncurses
Home:[https://www.gnu.org/software/ncurses/]
-Wikipedia:[https://en.wikipedia.org/wiki/Ncurses 英文]、[https://zh.wikipedia.org/wiki/Ncurses 中文]
+Links:[https://en.wikipedia.org/wiki/Ncurses Wikipedia] [https://zh.wikipedia.org/wiki/Ncurses 维基百科]
ncurses 是“new curses”的缩略词,它是 [https://en.wikipedia.org/wiki/Curses_(programming_library) curses] 库的自由软件克隆,诞生于1993年。
@@ -1401,7 +1500,7 @@ ncurses 是“new curses”的缩略词,它是 [https://en.wikipedia.org/wiki/
Home:[http://www.tcpdump.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Pcap 英文]
+Links:[https://en.wikipedia.org/wiki/Pcap Wikipedia]
很著名的 Sniffer 抓包库,基于 C 语言开发。
@@ -1410,7 +1509,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Pcap 英文]
#include
#include
-int main(int argc, char* argv[])
+int main()
{
pcap_t* handle; /* Session handle */
char* dev; /* The device to sniff on */
@@ -1466,7 +1565,7 @@ int main(int argc, char* argv[])
Home:[http://www.winpcap.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Pcap 英文]
+Links:[https://en.wikipedia.org/wiki/Pcap Wikipedia]
它是 libpcap 在 Windows 系统下的移植。
@@ -1504,7 +1603,7 @@ POCO 前面已经介绍过。它提供了针对 TCP 服务端的封装类。
Home:[http://curl.haxx.se/libcurl/]
-Wikipedia:[https://en.wikipedia.org/wiki/CURL 英文]、[https://zh.wikipedia.org/wiki/CURL 中文]
+Links:[https://en.wikipedia.org/wiki/CURL Wikipedia] [https://zh.wikipedia.org/wiki/CURL 维基百科]
cURL 是一个功能很强的网络库/网络工具,支持 N 多应用层协议。下面是支持协议的列表(从它官网抄袭的)
@@ -1599,7 +1698,7 @@ Home:[https://github.com/qxmpp-project/qxmpp]
Home:[https://developers.google.com/protocol-buffers/]
-Wikipedia:[https://en.wikipedia.org/wiki/Protocol_Buffers 英文]
+Links:[https://en.wikipedia.org/wiki/Protocol_Buffers Wikipedia]
它是 Google 开发的一个跨语言的库,用于传输业务数据时的“编码/解码”。其优点是:跨多种语言、高性能、向前兼容、向后兼容。
@@ -1611,7 +1710,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Protocol_Buffers 英文]
Home:[https://thrift.apache.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Apache_Thrift 英文]
+Links:[https://en.wikipedia.org/wiki/Apache_Thrift Wikipedia]
来自于 Apache 社区,提供了一种跨语言的通讯机制。
@@ -1668,7 +1767,7 @@ ACE 前面已经介绍过。它提供了很多种用于网络通讯的设计模
Home:[http://www.zeromq.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/ZeroMQ 英文]、[https://zh.wikipedia.org/wiki/%C3%98MQ 中文]
+Links:[https://en.wikipedia.org/wiki/ZeroMQ Wikipedia] [https://zh.wikipedia.org/wiki/%C3%98MQ 维基百科]
ZeroMQ 是一个轻量级、跨平台的开源库,提供了高性能、异步的消息队列。采用 C++ 开发,提供了多种语言的绑定。
@@ -1680,7 +1779,7 @@ ZeroMQ 是一个轻量级、跨平台的开源库,提供了高性能、异步
#include
-int main(int argc, char* argv[])
+int main()
{
zmq::context_t context(1);
@@ -1750,7 +1849,7 @@ int request(const char* url, const char* msg)
Home:[https://zeroc.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/Internet_Communications_Engine 英文]、[https://zh.wikipedia.org/wiki/ICE_(%E4%B8%AD%E9%97%B4%E4%BB%B6) 中文]
+Links:[https://en.wikipedia.org/wiki/Internet_Communications_Engine Wikipedia] [https://zh.wikipedia.org/wiki/ICE_(%E4%B8%AD%E9%97%B4%E4%BB%B6) 维基百科]
这是一个面向对象的通讯中间件,诞生于2002年。支持不同编程语言的通讯。
@@ -1760,7 +1859,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Internet_Communications_Engine 英文
Home:[http://libevent.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Libevent 英文]、[https://zh.wikipedia.org/wiki/Libevent 中文]
+Links:[https://en.wikipedia.org/wiki/Libevent Wikipedia] [https://zh.wikipedia.org/wiki/Libevent 维基百科]
它提供了异步事件处理机制。在网络开发中,可以用它替代传统的“event loop”,有助于简化代码。
@@ -1772,7 +1871,6 @@ Wikipedia:[https://en.wikipedia.org/wiki/Libevent 英文]、[https://zh.wikipe
#include
#include
#include
-
#include
#include
@@ -1785,7 +1883,7 @@ void generic_request_handler(struct evhttp_request* req, void* arg)
evbuffer_free(return_buffer);
}
-int main(int argc, char** argv)
+int main()
{
short http_port = 8080;
char* http_addr = "127.0.0.1";
@@ -1858,7 +1956,7 @@ Home:[http://libev.schmorp.de/]
Home:[https://github.com/libuv/libuv]
-Wikipedia:[https://en.wikipedia.org/wiki/Libuv 英文]
+Links:[https://en.wikipedia.org/wiki/Libuv Wikipedia]
它提供了跨平台的异步 I/O 机制。主要是为了提供给 [https://en.wikipedia.org/wiki/Node.js Node.js] 使用。
@@ -1880,7 +1978,7 @@ Dlib 前面已经介绍过。它针对网络通讯,提供了比较高的抽象
Home:[https://www.mysql.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/MySQL 英文]、[https://zh.wikipedia.org/wiki/MySQL 中文]
+Links:[https://en.wikipedia.org/wiki/MySQL Wikipedia] [https://zh.wikipedia.org/wiki/MySQL 维基百科]
名气最大的开源数据库,诞生于1995年,采用 C 和 C++ 语言开发。如今隶属于 Oracle 公司。
@@ -1888,7 +1986,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/MySQL 英文]、[https://zh.wikipedia
Home:[http://postgresql.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/PostgreSQL 英文]、[https://zh.wikipedia.org/wiki/PostgreSQL 中文]
+Links:[https://en.wikipedia.org/wiki/PostgreSQL Wikipedia] [https://zh.wikipedia.org/wiki/PostgreSQL 维基百科]
名气仅次于 MySQL 的开源数据库,诞生于1996年。采用 C 语言开发。
@@ -1896,7 +1994,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/PostgreSQL 英文]、[https://zh.wiki
Home:[http://sqlite.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SQLite 英文]、[https://zh.wikipedia.org/wiki/SQLite 中文]
+Links:[https://en.wikipedia.org/wiki/SQLite Wikipedia] [https://zh.wikipedia.org/wiki/SQLite 维基百科]
它是一个很优秀的嵌入式(进程内)数据库,非常轻量级,支持各种作系统平台。采用 C 语言开发。
@@ -1906,7 +2004,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/SQLite 英文]、[https://zh.wikipedi
Home:[https://www.mongodb.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/MongoDB 英文]
+Links:[https://en.wikipedia.org/wiki/MongoDB Wikipedia]
这是近几年兴起的 NoSQL 数据库的一员。它本身是基于 C++ 和 C 开发的。
@@ -1914,7 +2012,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/MongoDB 英文]
Home:[http://redis.io/]
-Wikipedia:[https://zh.wikipedia.org/wiki/Redis 中文]、[https://en.wikipedia.org/wiki/Redis 英文]
+Links:[https://zh.wikipedia.org/wiki/Redis 维基百科] [https://en.wikipedia.org/wiki/Redis Wikipedia]
诞生于2009年,是目前(2014~2015)最流行的键值存储数据库,基于 C 语言开发。
@@ -1924,7 +2022,7 @@ Wikipedia:[https://zh.wikipedia.org/wiki/Redis 中文]、[https://en.wikipedia
Home:[http://www.oracle.com/us/products/database/berkeley-db/]
-Wikipedia:[https://en.wikipedia.org/wiki/Berkeley_DB 英文]、[https://zh.wikipedia.org/wiki/Berkeley_DB 中文]
+Links:[https://en.wikipedia.org/wiki/Berkeley_DB Wikipedia] [https://zh.wikipedia.org/wiki/Berkeley_DB 维基百科]
诞生于1994年,是一个很老牌的嵌入式(进程内)数据库,提供“键值存储”的功能,基于 C 语言开发。
@@ -1936,7 +2034,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Berkeley_DB 英文]、[https://zh.wik
Home:[https://github.com/google/leveldb]
-Wikipedia:[https://en.wikipedia.org/wiki/LevelDB 英文]、[https://zh.wikipedia.org/wiki/LevelDB 中文]
+Links:[https://en.wikipedia.org/wiki/LevelDB Wikipedia] [https://zh.wikipedia.org/wiki/LevelDB 维基百科]
它是 Google 基于 C++ 开发的 NoSQL 数据库,提供“键值存储”的功能。
@@ -1948,7 +2046,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/LevelDB 英文]、[https://zh.wikiped
Home:[http://www.firebirdsql.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Firebird_%28database_server%29 英文]、[https://zh.wikipedia.org/wiki/Firebird_(%E6%95%B0%E6%8D%AE%E5%BA%93) 中文]
+Links:[https://en.wikipedia.org/wiki/Firebird_%28database_server%29 Wikipedia] [https://zh.wikipedia.org/wiki/Firebird_(%E6%95%B0%E6%8D%AE%E5%BA%93) 维基百科]
它是2000年的时候,从 [https://en.wikipedia.org/wiki/Borland Borland] 公司的 InterBase 数据库派生出来的。
@@ -1972,7 +2070,7 @@ Home:[http://www.scylladb.com/]
Home:[http://otl.sourceforge.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/Oracle_Template_Library 英文]
+Links:[https://en.wikipedia.org/wiki/Oracle_Template_Library Wikipedia]
原生支持的数据库:Oracle、SQL Server、DB2、Informix、TimesTen, MAX/DB;另支持 ODBC。
@@ -2319,7 +2417,7 @@ MongoDB 前面已经介绍过。这是其官方提供的 API。
#include
#include
-int main(int argc, char* argv[])
+int main()
{
mongoc_init();
@@ -2359,7 +2457,7 @@ POCO 前面已经介绍过。它提供了 MongoDB 的封装类
Home:[http://www.unixodbc.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/UnixODBC 英文]
+Links:[https://en.wikipedia.org/wiki/UnixODBC Wikipedia]
诞生于1999年,实现了全套的 ODBC 架构,包括:驱动管理器、相关的 GUI 界面和命令行界面。支持多种操作系统。
@@ -2381,7 +2479,7 @@ POCO 前面已经介绍过。它提供了操作 ODBC 的封装类。
Home:[http://www.codesynthesis.com/products/odb]
-Wikipedia:[https://en.wikipedia.org/wiki/ODB_%28C%2B%2B%29 英文]
+Links:[https://en.wikipedia.org/wiki/ODB_%28C%2B%2B%29 Wikipedia]
它的特色是:可以根据 C++ 类定义自动生成数据库的表结构。
@@ -2444,7 +2542,7 @@ Home:[https://github.com/paulftw/hiberlite]
Home:[https://httpd.apache.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Apache_HTTP_Server 英文]、[https://zh.wikipedia.org/wiki/Apache_HTTP_Server 中文]
+Links:[https://en.wikipedia.org/wiki/Apache_HTTP_Server Wikipedia] [https://zh.wikipedia.org/wiki/Apache_HTTP_Server 维基百科]
大名鼎鼎的 Apache,诞生于1995年,采用 C 和 C++ 开发。长期作为 Web Server 市场份额的老大。
@@ -2452,7 +2550,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Apache_HTTP_Server 英文]、[https:/
Home:[http://nginx.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Nginx 英文]、[https://zh.wikipedia.org/wiki/Nginx 中文]
+Links:[https://en.wikipedia.org/wiki/Nginx Wikipedia] [https://zh.wikipedia.org/wiki/Nginx 维基百科]
Web Server 的后起之秀,诞生于2002年,采用 C 语言开发。其市场份额如今排名第二。
@@ -2511,13 +2609,35 @@ Docs:[http://pocoproject.org/docs/package-Net.HTTPClient.html]
POCO 前面已经介绍过。它提供了 HTTP Client 的封装类。
+cpr
+
+Home:[https://github.com/whoshuu/cpr]
+
+类似 Python 的 [http://docs.python-requests.org/ Requests 库],以【优雅的语法】实现 HTTP 请求。
+
+代码示例——HTTP GET
+
+#include
+
+int main()
+{
+ auto r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"},
+ cpr::Authentication{"user", "pass"},
+ cpr::Parameters{{"anon", "true"}, {"key", "value"}});
+ r.status_code; // 200
+ r.header["content-type"]; // application/json; charset=utf-8
+ r.text; // JSON text string
+ return 0;
+}
+
+
== 10.3 浏览器引擎 ==
WebKit
Home:[https://www.webkit.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/WebKit 英文]、[https://zh.wikipedia.org/wiki/WebKit 中文]
+Links:[https://en.wikipedia.org/wiki/WebKit Wikipedia] [https://zh.wikipedia.org/wiki/WebKit 维基百科]
它是很多浏览器使用的渲染引擎,基于 C++ 开发。
@@ -2525,7 +2645,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/WebKit 英文]、[https://zh.wikipedi
Home:[https://developer.mozilla.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Gecko_(software) 英文]、[https://zh.wikipedia.org/wiki/Gecko 中文]
+Links:[https://en.wikipedia.org/wiki/Gecko_(software) Wikipedia] [https://zh.wikipedia.org/wiki/Gecko 维基百科]
它是 Firefox 的渲染引擎,基于 C++ 开发,由 Mozilla 社区维护。
@@ -2535,7 +2655,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Gecko_(software) 英文]、[https://z
Home:[https://bitbucket.org/chromiumembedded/cef]
-Wikipedia:[https://en.wikipedia.org/wiki/Chromium_Embedded_Framework 英文]
+Links:[https://en.wikipedia.org/wiki/Chromium_Embedded_Framework Wikipedia]
如其名,它提供了嵌入 Chrome 浏览器的框架。采用 C++ 开发。好几个商业公司(Google、Adobe、Facebook、Evernote...)的产品用到它。
@@ -2559,7 +2679,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Chromium_Embedded_Framework 英文]
Home:[http://phantomjs.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/PhantomJS 英文]
+Links:[https://en.wikipedia.org/wiki/PhantomJS Wikipedia]
2011年才诞生的。基于 C++ 开发,整合了 WebKit。
@@ -2603,7 +2723,7 @@ SHA256().CalculateDigest(abDigest, pbData, nDataLen);
Home:[https://www.openssl.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/OpenSSL 英文]、[https://zh.wikipedia.org/wiki/OpenSSL 中文]
+Links:[https://en.wikipedia.org/wiki/OpenSSL Wikipedia] [https://zh.wikipedia.org/wiki/OpenSSL 维基百科]
OpenSSL 基于 C 语言开发,在加密领域那可是大名鼎鼎。大部分常用的加密算法(对称、非对称)和散列算法,它都支持。
@@ -2613,7 +2733,7 @@ OpenSSL 基于 C 语言开发,在加密领域那可是大名鼎鼎。大部分
Home:[http://www.libressl.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/LibreSSL 英文]、[https://zh.wikipedia.org/wiki/LibreSSL 中文]
+Links:[https://en.wikipedia.org/wiki/LibreSSL Wikipedia] [https://zh.wikipedia.org/wiki/LibreSSL 维基百科]
OpenSSL 爆出“心脏滴血漏洞”之后,OpenBSD 社区的程序员复制了 OpenSSL 版本 1.0.1g 的代码,然后另起炉灶。
@@ -2623,7 +2743,7 @@ LibreSSL 的主要目标是“安全性”,其维护人员删除了原 OpenSSL
Home:[http://gnutls.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/GnuTLS 英文]
+Links:[https://en.wikipedia.org/wiki/GnuTLS Wikipedia]
采用 C 语言开发,名气也挺大。如其名,主要提供 TLS/SSL 的相关功能。
@@ -2631,7 +2751,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/GnuTLS 英文]
Home:[http://nacl.cr.yp.to/]
-Wikipedia:[https://en.wikipedia.org/wiki/NaCl_%28software%29 英文]
+Links:[https://en.wikipedia.org/wiki/NaCl_%28software%29 Wikipedia]
这个名称是“Networking and Cryptography library”的缩写。
@@ -2805,7 +2925,7 @@ Home:[http://www.7-zip.org/sdk.html]
Home:[http://icculus.org/physfs/]
-Wikipedia:[https://en.wikipedia.org/wiki/PhysicsFS 英文]
+Links:[https://en.wikipedia.org/wiki/PhysicsFS Wikipedia]
针对不同的压缩/归档格式,提供了类似 VFS 的抽象封装层。主要用于游戏开发中。
@@ -2827,7 +2947,7 @@ Home:[https://github.com/google/zopfli]
Home:[http://www.nih.at/libzip/]
-Wikipedia:[https://en.wikipedia.org/wiki/Libzip 英文]
+Links:[https://en.wikipedia.org/wiki/Libzip Wikipedia]
用 C 语言开发的库,基于 zlib 库。
@@ -2853,7 +2973,7 @@ Home:[http://bzip.org/]
Home:[http://zlib.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/Zlib 英文]、[https://zh.wikipedia.org/wiki/Zlib 中文]
+Links:[https://en.wikipedia.org/wiki/Zlib Wikipedia] [https://zh.wikipedia.org/wiki/Zlib 维基百科]
C 语言实现,诞生于1995年,被大量的开源项目使用(OpenSSL、OpenSSH、Apache、PostgreSQL、Git、libpng......)。
@@ -2891,12 +3011,24 @@ Home:[https://google.github.io/snappy/]
Home:[https://github.com/google/brotli]
-Wikipedia:[https://en.wikipedia.org/wiki/Brotli 英文]
+Links:[https://en.wikipedia.org/wiki/Brotli Wikipedia]
由 Google 开发的压缩格式,压缩率很高(据说高于 LZMA 和 bz2)。
该算法很新,是2015年9月才发布的。
+=== 12.2.9 LZFSE ===
+
+LZFSE
+
+Home:[https://github.com/lzfse/lzfse]
+
+Links:[https://zh.wikipedia.org/wiki/LZFSE 维基百科]
+
+由苹果开发的压缩格式。苹果称它的压缩率与“ZLib level 5”相似,但速度快2至3倍。
+
+该算法是前不久(2016年7月)才开源出来的。
+
== 12.3 标记语言 ==
=== 12.3.1 XML ===
@@ -2905,7 +3037,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Brotli 英文]
Home:[http://www.libexpat.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Expat_(library) 英文]
+Links:[https://en.wikipedia.org/wiki/Expat_(library) Wikipedia]
基于 C 语言实现,诞生于1998年。很多知名的开源项目(Apache Server、Firefox、Python、PHP、Perl)用到它。
@@ -2913,7 +3045,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Expat_(library) 英文]
Home:[http://xmlsoft.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Libxml2 英文]
+Links:[https://en.wikipedia.org/wiki/Libxml2 Wikipedia]
基于 C 语言实现,诞生于1999年。提供了多种语言(C++、Python、Ruby、Common Lisp、PHP、Perl)的 API 绑定。
@@ -2953,11 +3085,23 @@ Home:[http://podofo.sourceforge.net/]
它既支持 PDF 文件的生成,也支持 PDF 内容的提取。它同时还提供[http://podofo.sourceforge.net/tools.html 一堆命令行的小工具],用来操作 PDF 文件。
+Poppler
+
+Home:[https://poppler.freedesktop.org/]
+
+Links:[https://en.wikipedia.org/wiki/Poppler_%28software%29 Wikipedia]
+
+派生自 Xpdf 3.0 的开源库,用于渲染 PDF 的内容。很多开源的 PDF 阅读软件用到它。
+
+在开源界,它第一个【完整】实现了 ISO 32000-1(PDF 的 ISO 标准)。
+
+它内置了若干命令行工具(poppler-utils),可以用来进行 PDF 的内容提取和格式转换。
+
LibHaru
Home:[http://libharu.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/LibHaru 英文]
+Links:[https://en.wikipedia.org/wiki/LibHaru Wikipedia]
它是基于 C 语言开发的跨平台库,可以用来生成 PDF 文件格式。
@@ -3034,7 +3178,7 @@ Home:[http://www.mare.ee/indrek/libchmxx/]
Home:[http://imagemagick.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/ImageMagick 英文]、[https://zh.wikipedia.org/wiki/ImageMagick 中文]
+Links:[https://en.wikipedia.org/wiki/ImageMagick Wikipedia] [https://zh.wikipedia.org/wiki/ImageMagick 维基百科]
ImageMagick 可说是最强大的开源图片处理工具集,采用 C 语言编写。诞生于1990年,其开发至今依然非常活跃。支持非常多的操作系统平台。
@@ -3085,7 +3229,7 @@ ImageMagick 前面已经介绍过。它支持非常多的图片格式([http://
Home:[http://cairographics.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Cairo_%28graphics%29 英文]、[https://zh.wikipedia.org/wiki/Cairo_(%E7%B9%AA%E5%9C%96) 中文]
+Links:[https://en.wikipedia.org/wiki/Cairo_%28graphics%29 Wikipedia] [https://zh.wikipedia.org/wiki/Cairo_(%E7%B9%AA%E5%9C%96) 维基百科]
它提供了矢量图像的渲染功能。支持多种后端输出(Win32 GDI、OpenGL、Xlib、XCB、PDF、PNG、SVG ......)。
@@ -3101,7 +3245,7 @@ Home:[http://cairographics.org/cairomm/]
Home:[https://github.com/google/skia]
-Wikipedia:[https://en.wikipedia.org/wiki/Skia_Graphics_Engine 英文]、[https://zh.wikipedia.org/wiki/Skia_Graphics_Library 中文]
+Links:[https://en.wikipedia.org/wiki/Skia_Graphics_Engine Wikipedia] [https://zh.wikipedia.org/wiki/Skia_Graphics_Library 维基百科]
它是 Google 基于 C++ 开发的图像渲染库。支持多种后端输出(rasterization、OpenGL、PDF、SVG、SWF ......)。
@@ -3119,7 +3263,7 @@ Home:[http://pbrt.org/]
Home:[http://opencv.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/OpenCV 英文]、[https://zh.wikipedia.org/wiki/OpenCV 中文]
+Links:[https://en.wikipedia.org/wiki/OpenCV Wikipedia] [https://zh.wikipedia.org/wiki/OpenCV 维基百科]
它是一个跨平台的计算机视觉库,由 Intel 发起并参与开发。开发语言是 C 和 C++。
@@ -3135,7 +3279,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/OpenCV 英文]、[https://zh.wikipedi
Home:[http://ffmpeg.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/FFmpeg 英文]、[https://zh.wikipedia.org/wiki/FFmpeg 中文]
+Links:[https://en.wikipedia.org/wiki/FFmpeg Wikipedia] [https://zh.wikipedia.org/wiki/FFmpeg 维基百科]
名气非常大的开源多媒体框架,基于 C 和汇编开发,支持多种操作系统。
@@ -3155,7 +3299,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/FFmpeg 英文]、[https://zh.wikipedi
Home:[http://libav.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Libav 英文]
+Links:[https://en.wikipedia.org/wiki/Libav Wikipedia]
它是2011年从 FFmpeg 派生出来的。基于 C 语言开发,支持多种操作系统。
@@ -3175,7 +3319,7 @@ Home:[http://ffmpeg.org/]
Home:[http://www.portaudio.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/PortAudio 英文]
+Links:[https://en.wikipedia.org/wiki/PortAudio Wikipedia]
PortAudio 是 PortMedia 的组成部分,提供了音频的播放和录制功能。支持多种底层 API(ALSA、DirectSound、WASAPI、ASIO...)
@@ -3183,7 +3327,7 @@ PortAudio 是 PortMedia 的组成部分,提供了音频的播放和录制功
Home:[http://www.openal.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/OpenAL 英文]、[https://zh.wikipedia.org/wiki/OpenAL 中文]
+Links:[https://en.wikipedia.org/wiki/OpenAL Wikipedia] [https://zh.wikipedia.org/wiki/OpenAL 维基百科]
C 语言开发的 3D 音效库,跨平台。最初由 Loki Software 开发。Loki 倒闭以后,这个项目由开源社区继续维护。
@@ -3195,7 +3339,7 @@ C 语言开发的 3D 音效库,跨平台。最初由 Loki Software 开发。Lo
id Tech 系列
-Wikipedia:[https://en.wikipedia.org/wiki/Id_Tech 英文]
+Links:[https://en.wikipedia.org/wiki/Id_Tech Wikipedia]
这个系列来自于大名鼎鼎的 [https://en.wikipedia.org/wiki/Id_Software id Software 公司],由同样大名鼎鼎约翰·卡马克打造。
@@ -3217,7 +3361,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Id_Tech 英文]
Home:[http://www.crystalspace3d.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Crystal_Space 英文]
+Links:[https://en.wikipedia.org/wiki/Crystal_Space Wikipedia]
以 C++ 编写,功能包括:2D 和 3D 渲染、音效、AI... 它的物理引擎基于 ODE 和 Bullet
@@ -3225,7 +3369,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Crystal_Space 英文]
Home:[http://www.blender.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Game_Blender 英文]、[https://zh.wikipedia.org/wiki/Game_Blender 中文]
+Links:[https://en.wikipedia.org/wiki/Game_Blender Wikipedia] [https://zh.wikipedia.org/wiki/Game_Blender 维基百科]
它是 [https://en.wikipedia.org/wiki/Blender_%28software%29 Blender] 的组成部分,以 C++ 编写,使用 Python 脚本扩展。功能包括:3D 渲染、碰撞检测、角色编辑器、音效、网络通讯、AI、...
@@ -3233,7 +3377,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Game_Blender 英文]、[https://zh.wi
Home:[http://www.panda3d.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Panda3D 英文]
+Links:[https://en.wikipedia.org/wiki/Panda3D Wikipedia]
以 C++ 编写,用 Python 脚本扩展。虽然它的名字有“3D”,但它不仅仅是 3D 引擎,还包括了其它功能(碰撞检测、音效、关卡编辑器...)。
@@ -3243,7 +3387,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Panda3D 英文]
Home:[http://www.ogre3d.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/OGRE 英文]、[https://zh.wikipedia.org/wiki/OGRE 中文]
+Links:[https://en.wikipedia.org/wiki/OGRE Wikipedia] [https://zh.wikipedia.org/wiki/OGRE 维基百科]
著名的 3D 渲染引擎,C++ 开发,诞生于2005年。支持很多操作系统(包括两大手机操作系统)。很多商业游戏用到它。
@@ -3253,7 +3397,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/OGRE 英文]、[https://zh.wikipedia.
Home:[http://mesa3d.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Mesa_%28computer_graphics%29 英文]、[https://zh.wikipedia.org/wiki/Mesa_3D 中文]
+Links:[https://en.wikipedia.org/wiki/Mesa_%28computer_graphics%29 Wikipedia] [https://zh.wikipedia.org/wiki/Mesa_3D 维基百科]
使用 C 语言开发,它是针对 OpenGL 规范的【纯软件】实现(大部分 OpenGL 的实现都用到了显卡硬件)。
@@ -3263,7 +3407,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Mesa_%28computer_graphics%29 英文]
Home:[http://www.bulletphysics.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Bullet_%28software%29 英文]、[https://zh.wikipedia.org/wiki/Bullet 中文]
+Links:[https://en.wikipedia.org/wiki/Bullet_%28software%29 Wikipedia] [https://zh.wikipedia.org/wiki/Bullet 维基百科]
采用 C 和 C++ 开发。电影《2012》用到它,游戏“侠盗猎车手”、“荒野大镖客”用到它。
@@ -3271,7 +3415,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Bullet_%28software%29 英文]、[http
Home:[http://www.box2d.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Box2D 英文]、[https://zh.wikipedia.org/wiki/Box2D 中文]
+Links:[https://en.wikipedia.org/wiki/Box2D Wikipedia] [https://zh.wikipedia.org/wiki/Box2D 维基百科]
基于 C++ 开发的2维物理引擎。“愤怒的小鸟”用到它。
@@ -3279,7 +3423,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Box2D 英文]、[https://zh.wikipedia
Home:[http://www.ode.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Open_Dynamics_Engine 英文]、[https://zh.wikipedia.org/wiki/Open_Dynamics_Engine 中文]
+Links:[https://en.wikipedia.org/wiki/Open_Dynamics_Engine Wikipedia] [https://zh.wikipedia.org/wiki/Open_Dynamics_Engine 维基百科]
诞生于2001年,采用 C 和 C++ 开发。
@@ -3287,7 +3431,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Open_Dynamics_Engine 英文]、[https
Home:[http://www.newtondynamics.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/Newton_Game_Dynamics 英文]
+Links:[https://en.wikipedia.org/wiki/Newton_Game_Dynamics Wikipedia]
基于 C++ 开发。
@@ -3301,7 +3445,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Newton_Game_Dynamics 英文]
Home:[https://www.gnu.org/software/gsl/]
-Wikipedia:[https://en.wikipedia.org/wiki/GNU_Scientific_Library 英文]
+Links:[https://en.wikipedia.org/wiki/GNU_Scientific_Library Wikipedia]
由 GNU 官方提供,包括:复数、多项式、矩阵、线性代数、特征向量、快速傅里叶变换、统计、模拟退火......
@@ -3329,7 +3473,7 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“
Home:[https://gmplib.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library 英文]、[https://zh.wikipedia.org/wiki/GNU%E5%A4%9A%E9%87%8D%E7%B2%BE%E5%BA%A6%E8%BF%90%E7%AE%97%E5%BA%93 中文]
+Links:[https://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library Wikipedia] [https://zh.wikipedia.org/wiki/GNU%E5%A4%9A%E9%87%8D%E7%B2%BE%E5%BA%A6%E8%BF%90%E7%AE%97%E5%BA%93 维基百科]
基于 C 语言的高精度数值运算库,诞生于1991年,非常老牌。
@@ -3403,7 +3547,9 @@ Boost 前面已经介绍过。这是 Boost 的其中一个子库,实现了 BLA
#include
#include
+using namespace std;
using namespace boost::numeric::ublas;
+
vector v(2);
v(0) = 1; v(1) = 2;
@@ -3412,14 +3558,14 @@ m(0,0) = 0; m(0,1) = 1;
m(1,0) = 2; m(1,1) = 3;
vector v2 = prod(m, v);
-std::cout << v2 << std::endl;
+cout << v2 << endl;
Blitz++
Home:[http://blitz.sourceforge.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/Blitz%2B%2B 英文]
+Links:[https://en.wikipedia.org/wiki/Blitz%2B%2B Wikipedia]
它是基于 C++ 实现的。其特色是:采用“模板元编程”的技术进行编译时计算,从而优化了性能。
@@ -3427,7 +3573,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Blitz%2B%2B 英文]
Home:[http://arma.sourceforge.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/Armadillo_%28C%2B%2B_library%29 英文]
+Links:[https://en.wikipedia.org/wiki/Armadillo_%28C%2B%2B_library%29 Wikipedia]
类似 Blitz++,Armadillo 也用了“模板元编程”的技术。
@@ -3467,7 +3613,7 @@ Dlib 前面已经介绍过。它提供了线性代数相关的封装类。
Home:[http://swig.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SWIG 英文]
+Links:[https://en.wikipedia.org/wiki/SWIG Wikipedia]
这是一个很老牌的、有名气的工具,它可以把多种语言(Java、Python、C#、Ruby、PHP、Perl、Lua、Go ......)整合到 C/C++ 中。
@@ -3504,6 +3650,133 @@ BOOST_PYTHON_MODULE(hello_ext)
// print(hello_ext.greet())
+
Cython
+
+Home:[http://cython.org/]
+
+Links:[https://en.wikipedia.org/wiki/Cython Wikipedia]
+
+Cython 提供了一种机制(编译器)编译 Python 代码为【原生代码】。编译后的原生代码是个 Python 的 module(扩展名是 pyd 或 so),可以在常规的 Python 环境中用 import 语句加载。如此一来,既得到了类似 C/C++ 的高性能,又保留了 Python 语法的简介性。
+
+另外,它也提供了把 C/C++ 代码编译为 Python 模块的机制。
+
+=== 17.2.2 整合 JavaScript 语言 ===
+
+V8
+
+Home:[https://github.com/v8/v8]
+
+Links:[https://en.wikipedia.org/wiki/Chrome_V8 Wikipedia]
+
+这就是大名鼎鼎的 V8 引擎,Google 公司开发,C++ 编写,被用于 Chrome 浏览器。
+
+既然用于 Chrome 浏览器,显然【完整地】支持了 JS 语言的规范(ECMA-262)。
+
+它既可以独立运行,也可以嵌入到 C++ 程序中。
+
+代码示例——Hello world
+
+#include
+#include
+#include
+#include
+#include
+
+int main(int argc, char* argv[])
+{
+ // Initialize V8.
+ v8::V8::InitializeICUDefaultLocation(argv[0]);
+ v8::V8::InitializeExternalStartupData(argv[0]);
+ std::unique_ptr platform = v8::platform::NewDefaultPlatform();
+ v8::V8::InitializePlatform(platform.get());
+ v8::V8::Initialize();
+
+ // Create a new Isolate and make it the current one.
+ v8::Isolate::CreateParams create_params;
+ create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
+ v8::Isolate* isolate = v8::Isolate::New(create_params);
+
+ {
+ v8::Isolate::Scope isolate_scope(isolate);
+ // Create a stack-allocated handle scope.
+ v8::HandleScope handle_scope(isolate);
+ // Create a new context.
+ v8::Local context = v8::Context::New(isolate);
+ // Enter the context for compiling and running the hello world script.
+ v8::Context::Scope context_scope(context);
+ // Create a string containing the JavaScript source code.
+ v8::Local source =
+ v8::String::NewFromUtf8(isolate, "'Hello World!'",
+ v8::NewStringType::kNormal).ToLocalChecked();
+ // Compile the source code.
+ v8::Local script = v8::Script::Compile(context, source).ToLocalChecked();
+ // Run the script to get the result.
+ v8::Local result = script->Run(context).ToLocalChecked();
+ // Convert the result to an UTF8 string and print it.
+ v8::String::Utf8Value utf8(isolate, result);
+ printf("%s\n", *utf8);
+ }
+
+ // Dispose the isolate and tear down V8.
+ isolate->Dispose();
+ v8::V8::Dispose();
+ v8::V8::ShutdownPlatform();
+ delete create_params.array_buffer_allocator;
+ return 0;
+}
+
+
+nbind
+
+Home:[https://github.com/charto/nbind]
+
+把 C++ 代码编译为 JS 的 package。编译方式支持“原生二进制”或“asm.js”。
+
+编译需要依赖 Node.js,运行环境支持 Node.js 或浏览器。
+
+代码示例——C++ 代码
+
+#include
+#include
+
+struct Greeter
+{
+ static void sayHello(std::string name)
+ {
+ std::cout << "Hello, " << name << "\n";
+ }
+};
+
+// 建立绑定
+#include
+
+NBIND_CLASS(Greeter)
+{
+ method(sayHello);
+}
+
+
+代码示例——node.js 环境调用代码
+
+var nbind = require("nbind");
+var lib = nbind.init().lib;
+lib.Greeter.sayHello("you");
+
+
+代码示例——浏览器环境调用代码
+
+
+
+
+
----
= 18 (其它) =
diff --git a/libs/python.wiki b/libs/python.wiki
index 27ea139..5dd27e0 100644
--- a/libs/python.wiki
+++ b/libs/python.wiki
@@ -161,7 +161,7 @@ MessageBox(text="Hello, world", flags=2)
Home:[http://swig.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SWIG 英文]
+Links:[https://en.wikipedia.org/wiki/SWIG Wikipedia]
这是一个很老牌的、有名气的工具,它可以把多种语言(Java、Python、C#、Ruby、PHP、Perl、Lua、Go ...)整合到 C/C++ 中。
@@ -179,7 +179,7 @@ Home:[http://cython.org/]
Home:[http://www.jython.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Jython 英文]、[https://zh.wikipedia.org/wiki/Jython 中文]
+Links:[https://en.wikipedia.org/wiki/Jython Wikipedia] [https://zh.wikipedia.org/wiki/Jython 维基百科]
通过 Jython 可以让 Python 代码运行在 JVM 上,并且可以调用其它的 JVM 语言的代码(比如 Java、Scala)
@@ -189,11 +189,21 @@ Wikipedia:[https://en.wikipedia.org/wiki/Jython 英文]、[https://zh.wikipedi
Home:[http://ironpython.net/]
-Wikipedia:[https://en.wikipedia.org/wiki/IronPython 英文]、[https://zh.wikipedia.org/wiki/IronPython 中文]
+Links:[https://en.wikipedia.org/wiki/IronPython Wikipedia] [https://zh.wikipedia.org/wiki/IronPython 维基百科]
通过 IronPython 可以让 Python 代码运行在 dotNET 平台上,并且可以调用其它的 dotNET 语言的代码(C#、F#、VB.Net ...)
-== 2.4 整合 Objective-C 语言 ==
+== 2.4 整合 Go ==
+
+gopy
+
+Home:[https://github.com/go-python/gopy]
+
+gopy 可以把 Go 源代码编译为 Python 的一个 module。
+
+它提供了两种方式(命令行、Python 库)来实现:Go 源码编译为 Python 模块。
+
+== 2.5 整合 Objective-C ==
PyObjC
@@ -312,8 +322,8 @@ if __name__ == "__main__" :
代码示例——启动命令行进程,并获取该进程的标准输出
import subprocess
-output = subprocess.check_output(["dir"]) # 获取当前目录的内容
-output = subprocess.check_output(["netstat", "-an"]) # 获取当前网络链接
+output = subprocess.check_output(["dir"]) # 获取当前目录的内容
+output = subprocess.check_output(["netstat", "-an"]) # 获取当前网络链接
multiprocessing
@@ -339,6 +349,35 @@ if __name__ == "__main__" :
Process(target=f, args=(lock, num)).start()
+sh
+
+Home:[https://github.com/amoffat/sh]
+
+这个项目可以用来取代标准库中的 subprocess;同时兼容 Python2 和 Python3。
+
+使用它可以写出比 subprocess 更简洁、更优雅的代码。
+
+代码示例——获取命令输出
+
+from sh import ifconfig
+print(ifconfig("wlan0"))
+
+
+代码示例——命令行参数
+
+from sh import curl
+# 传统风格
+curl("https://program-think.blogspot.com/", "-o", "test.html", "--silent")
+# 命名参数风格
+curl("https://program-think.blogspot.com/", o="test.html", silent=True)
+
+
+代码示例——管道
+
+from sh import ls, wc
+print(wc(ls("/etc", "-1"), "-l"))
+
+
== 3.4 本地进程间通信(IPC) ==
mmap
@@ -356,7 +395,7 @@ map = mmap.mmap(-1, 13)
map.write("Hello, world")
pid = os.fork()
-if pid == 0 : # 子进程
+if pid == 0 : # 子进程
map.seek(0)
print(map.readline())
map.close()
@@ -368,7 +407,95 @@ if pid == 0 : # 子进程
用于进程信号处理的标准库(主要用于 Linux & UNIX 系统)。
-== 3.5 Linux & Unix 系统相关 ==
+== 3.5 操作硬件 ==
+
+keyboard
+
+Home:[https://github.com/boppreh/keyboard]
+
+顾名思义,这个库让你可以进行各种键盘相关的操作,包括:模拟按键、键盘钩子(hook),按键记录及重放。
+
+支持复杂的组合键。纯 python 代码代码,同时支持 Windows 和 Linux。
+
+代码示例
+
+import keyboard
+
+# 模拟按键。
+keyboard.press_and_release("shift+s, space")
+
+# 模拟按键,并执行相应代码。
+keyboard.add_hotkey("page up, page down", lambda: keyboard.write("xxxx"))
+
+# 等待特定按键,然后继续执行。
+keyboard.wait("esc")
+
+# 记录按键,直到用户按了 ESC;然后以3倍速重放刚才记录的按键。
+recorded = keyboard.record(until="esc")
+keyboard.play(recorded, speed_factor=3)
+
+
+== 3.6 获取系统信息 ==
+
+sys
+
+【标准库】
+
+这个模块可供访问由解释器使用或维护的变量和与解释器进行交互的函数。
+
+代码示例
+
+sys.argv # 命令行参数 List,第一个元素是程序本身路径
+sys.exit(0) # 退出程序,正常退出时用 0 表示退出码
+sys.version # 获取 Python 解释程序的版本信息
+
+
+platform
+
+【标准库】
+
+这个模块提供了很多用于获取操作系统的信息的功能。
+
+代码示例
+
+import platform
+
+platform.platform() # 获取操作系统名称及版本号,例如:"Windows-7-6.1.7601-SP1"
+platform.version() # 获取操作系统版本号,例如:"6.1.7601"
+platform.architecture() # 获取操作系统的架构,例如:("32bit", "WindowsPE")
+
+
+psutil
+
+Home:[https://github.com/giampaolo/psutil]
+
+psutil(Python system and process utilities)是一个跨平台的进程管理和系统工具库,可以处理”CPU、内存、磁盘、网络、用户“等信息。
+
+主要用于系统资源的监控,分析,以及对进程进行一定的管理。
+
+代码示例
+
+import psutil
+
+psutil.cpu_count() # 获取 CPU 数量
+psutil.cpu_freq() # 获取 CPU 频率
+
+psutil.virtual_memory() # 获取内存信息
+psutil.swap_memory() # 获取交换分区(换页文件)信息
+
+psutil.disk_partitions() # 获取分区信息
+psutil.disk_usage('/') # 获取某分区的使用情况
+
+psutil.users() # 获取用户信息
+
+p = psutil.Process(pid) # 根据给定的 pid 获得进程对象
+p.name() # 进程名
+p.exe() # 可执行程序的全路径
+p.cwd() # 进程的当前目录
+p.cmdline() # 启动进程的命令行参数
+
+
+== 3.7 Linux & Unix 系统相关 ==
syslog
@@ -376,7 +503,7 @@ if pid == 0 : # 子进程
通过它可以很方便地跟 POSIX 的 syslog 服务进行交互。
-== 3.6 Windows 系统相关 ==
+== 3.8 Windows 系统相关 ==
PyWin32
@@ -384,7 +511,7 @@ Home:[http://python.net/crew/mhammond/win32/]
这个第三方库封装了 Windows API 及 COM API。通过它可以方便地用 Python 进行 Windows 编程(调用 COM 组件、编写 Windows 服务、等)。
-== 3.7 程序打包 ==
+== 3.9 程序打包 ==
PyInstaller
@@ -398,7 +525,7 @@ PyInstaller 可以把你的 Python 代码制作成独立运行的程序(不依
Home:[http://www.py2exe.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Py2exe 英文]
+Links:[https://en.wikipedia.org/wiki/Py2exe Wikipedia]
py2exe 的功能类似 PyInstaller,但只支持 Windows 平台。
@@ -486,7 +613,7 @@ httpd.serve_forever()
Home:[https://www.djangoproject.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/Django_(web_framework) 英文]、[https://zh.wikipedia.org/wiki/Django 中文]
+Links:[https://en.wikipedia.org/wiki/Django_(web_framework) Wikipedia] [https://zh.wikipedia.org/wiki/Django 维基百科]
在 Python 社区,Django 是目前最有影响力的 Web 开发框架。该框架很重型,内置了 Web 服务端开发常用的组件(比如:ORM、用户管理)。
@@ -498,7 +625,7 @@ Django 应用范围很广,比如 Google 的 Web 开发平台 GAE 就支持它
Home:[http://www.turbogears.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/TurboGears 英文]、[https://zh.wikipedia.org/wiki/TurboGears 中文]
+Links:[https://en.wikipedia.org/wiki/TurboGears Wikipedia] [https://zh.wikipedia.org/wiki/TurboGears 维基百科]
又一个重型的 Web 开发框架,名气仅次于 Django。
@@ -508,7 +635,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/TurboGears 英文]、[https://zh.wiki
Home:[http://www.cherrypy.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/CherryPy 英文]
+Links:[https://en.wikipedia.org/wiki/CherryPy Wikipedia]
轻量级的 Web 框架。某些 Web 框架(比如前面提到的 TurboGears)使用它作为底层。
@@ -516,8 +643,8 @@ Wikipedia:[https://en.wikipedia.org/wiki/CherryPy 英文]
import cherrypy
-class HelloWorld(object):
- def index(self):
+class HelloWorld(object) :
+ def index(self) :
return "Hello World!"
index.exposed = True
@@ -542,8 +669,8 @@ urls = (
"/", "index"
)
-class index:
- def GET(self):
+class index :
+ def GET(self) :
return "Hello, world!"
if __name__ == "__main__" :
@@ -551,6 +678,35 @@ if __name__ == "__main__" :
app.run()
+Flask
+
+Home:[http://flask.pocoo.org/]
+
+Links:[https://zh.wikipedia.org/wiki/Flask 维基百科]
+
+轻量级 Web 应用框架。基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。
+
+代码示例——Hello world
+
+from flask import Flask
+app = Flask(__name__)
+
+app.route("/")
+def hello_world() :
+ return “Hello World!"
+
+if __name__ == "__main__" :
+ app.run()
+
+
+Tornado
+
+Home:[http://www.tornadoweb.org/]
+
+Links:[https://zh.wikipedia.org/wiki/Tornado 维基百科]
+
+同样也是轻量级的 Web 框架,类似 Web.py。提供异步非阻塞 IO 的处理方式使其拥有较为出色的抗负载能力。
+
== 4.4 Web前端 & JS整合 ==
Pyjamas & pyjs
@@ -593,15 +749,15 @@ import PyV8
ctxt1 = PyV8.JSContext()
ctxt1.enter()
-ctxt1.eval("1+2") # 对 JS 表达式求值
+ctxt1.eval("1+2") # 对 JS 表达式求值
-class Global(PyV8.JSClass) : # 定义一个兼容 JS 的类
+class Global(PyV8.JSClass) : # 定义一个兼容 JS 的类
def hello(self) :
print("Hello, world")
-ctxt2 = PyV8.JSContext(Global()) # 创建一个 JS 上下文,传入 Global 类的对象
+ctxt2 = PyV8.JSContext(Global()) # 创建一个 JS 上下文,传入 Global 类的对象
ctxt2.enter()
-ctxt2.eval("hello()") # 调用 hello() 函数
+ctxt2.eval("hello()") # 调用 hello() 函数
PyWebKitGtk
@@ -612,16 +768,88 @@ Home:[https://github.com/jmalonzo/pywebkitgtk]
PyWebKitGtk 则提供了对 WebKitGtk 的 Python 封装。
-== 4.6 (其它) ==
+== 4.6 WebSocket ==
+(关于 WebSocket 的介绍,可以参见维基百科的“[https://zh.wikipedia.org/wiki/WebSocket 这个链接]”)
pywebsocket
Home:[https://github.com/google/pywebsocket]
-这是 Google 提供的 [https://zh.wikipedia.org/wiki/WebSocket WebSocket] 服务端。
+这是 Google 提供的 WebSocket【服务端】。
该项目包含一个可独立运行的 server 以及一个 Apache 扩展模块(mod_pywebsocket)。
+AutobahnPython
+
+Home:[https://github.com/crossbario/autobahn-python]
+
+这是 [http://crossbar.io/autobahn Autobahn] 项目的子项目,同时提供了 WebSocket 的“服务端 & 客户端”。
+
+它兼容 Python2 和 Python3,另外还兼容 PyPy 和 Jython。
+
+网络方面,它可以跟“asyncio 标准库”以及“[https://en.wikipedia.org/wiki/Twisted_%28software%29 Twisted]”整合。
+
+除了实现 WebSocket 协议,它还完整实现了 WAMP(Web Application Messaging Protocol)。
+
+代码示例——Echo Server
+
+from autobahn.twisted.websocket import WebSocketServerProtocol
+
+class MyServerProtocol(WebSocketServerProtocol) :
+ def onConnect(self, request) :
+ print("Client connecting: {}".format(request.peer))
+
+ def onOpen(self) :
+ print("WebSocket connection open.")
+
+ def onMessage(self, payload, isBinary) :
+ if isBinary :
+ print("Binary message received: {} bytes".format(len(payload)))
+ else:
+ print("Text message received: {}".format(payload.decode("utf8")))
+ self.sendMessage(payload, isBinary)
+
+ def onClose(self, wasClean, code, reason) :
+ print("WebSocket connection closed: {}".format(reason))
+
+
+ws4py
+
+Home:[https://github.com/Lawouach/WebSocket-for-Python]
+
+此项目同时提供了 WebSocket 的“服务端 & 客户端”;并同时兼容 Python2 和 Python3。
+
+其【服务端】可以跟“CherryPy、gevent、wsgiref、asyncio”整合;其【客户端】可以跟“Tornado、gevent”整合。
+
+== 4.7 (其它) ==
+
+selenium
+
+Home:[http://www.seleniumhq.org/]
+
+selenium 是一个非常优秀的框架,用于爬虫和 Web 自动化测试。
+
+代码示例——模拟登录
+
+from selenium import webdriver
+
+driver = webdriver.Chrome()
+driver.get("http://192.168.1.1")
+driver.find_element_by_xpath('//*[@id="lgPwd"]').send_keys("123456")
+driver.find_element_by_xpath('//*[@id="loginSub"]').click()
+driver.quit()
+
+
+scrapy
+
+Home:[https://scrapy.org/]
+
+Links:[https://en.wikipedia.org/wiki/Scrapy Wikipedia]
+
+Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。
+
+可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
+
----
= 5 网络 =
@@ -632,7 +860,7 @@ Home:[https://github.com/google/pywebsocket]
Home:[http://www.secdev.org/projects/scapy/]
-Wikipedia:[https://en.wikipedia.org/wiki/Scapy 英文]
+Links:[https://en.wikipedia.org/wiki/Scapy Wikipedia]
这是一个底层的网络库,可以在不同协议层次构造网络数据包(包括链路层、网络层、传输层),还支持 Sniffer 抓包。
@@ -640,7 +868,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Scapy 英文]
代码示例
-# 传统的 ping 扫描(网络层)
+# 传统的 ping 扫描(网络层)
ans,unans = sr(IP(dst="192.168.1.1-254")/ICMP())
# 局域网内的 ARP 扫描(链路层)
@@ -708,10 +936,10 @@ body = buffer.getvalue()
from ftplib import FTP
-ftp = FTP("ftp.debian.org") # 连接服务器(如果不指定端口号,则用默认端口号 21)
-ftp.login() # 登录(如果不指定用户名和密码,则用匿名登录)
-ftp.cwd("debian") # 切换到 "debian" 目录
-ftp.retrlines("LIST") # 列出当前目录的内容
+ftp = FTP("ftp.debian.org") # 连接服务器(如果不指定端口号,则用默认端口号 21)
+ftp.login() # 登录(如果不指定用户名和密码,则用匿名登录)
+ftp.cwd("debian") # 切换到 "debian" 目录
+ftp.retrlines("LIST") # 列出当前目录的内容
ftp.quit()
@@ -726,9 +954,9 @@ Home:[https://bitbucket.org/dundeemt/pysftp]
import pysftp
with pysftp.Connection("hostxxx", username="userxxx", password="xxxxxx") as sftp :
- with sftp.cd("public") # 服务端当前目录切换到 public
- sftp.put("/my/local/filename") # 上传某个本地文件到服务端的 public 目录
- sftp.get_r("myfiles", "/local") # 递归复制某个服务端的目录到本地
+ with sftp.cd("public") # 服务端当前目录切换到 public
+ sftp.put("/my/local/filename") # 上传某个本地文件到服务端的 public 目录
+ sftp.get_r("myfiles", "/local") # 递归复制某个服务端的目录到本地
=== 5.3.4 电子邮件 ===
@@ -751,6 +979,22 @@ with pysftp.Connection("hostxxx", username="userxxx", password="xxxxxx") as sftp
封装 POP3(Post Office Protocol v3)协议
+yagmail
+
+Home:[https://github.com/kootenpv/yagmail]
+
+一个非常简单易用的用来发送邮件的第三方库。
+
+代码示例
+
+import yagmail
+
+yag = yagmail.SMTP("my_gmail_username", "my_gmail_password")
+contents = ["This is the body, and here is just text http://somedomain/image.png",
+ "You can find an audio file attached.', '/local/path/song.mp3"]
+yag.send("to@someone.com", "subject", contents)
+
+
=== 5.3.5 即时通讯 ===
jabber.py
@@ -765,6 +1009,18 @@ Home:[https://bitbucket.org/jaraco/irc]
IRC 是 Internet Relay Chat 的缩写。这是用 Python 封装的第三方库。
+pyTelegramBotAPI
+
+Home:[https://github.com/eternnoir/pyTelegramBotAPI]
+
+一个简单、易用的 [https://core.telegram.org/bots TelegramBot] 封装。
+
+Telethon
+
+Home:[https://github.com/LonamiWebs/Telethon]
+
+纯 Python3 的 [https://telegram.org/ Telegram] 客户端封装。
+
=== 5.3.6 远程控制 ===
telnetlib
@@ -803,6 +1059,23 @@ Home:[https://github.com/citronneur/rdpy]
纯 Python 实现的 RDP([https://en.wikipedia.org/wiki/Remote_Desktop_Protocol 微软远程桌面协议])和 VNC([https://en.wikipedia.org/wiki/Virtual_Network_Computing Virtual Network Computing])客户端,依赖于 Twisted 库
+paramiko
+
+Home:[http://www.paramiko.org/]
+
+paramiko 是用 python 语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
+
+除了 SSH 协议之外,paramiko 还支持SFTP。
+
+代码示例
+
+import paramiko
+
+ssh = paramiko.SSHClient()
+ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ssh.connect("IP", port, "username", "password")
+
+
=== 5.3.7 (其它) ===
urlparse
@@ -817,7 +1090,7 @@ Home:[https://github.com/citronneur/rdpy]
Home:[https://developers.google.com/protocol-buffers/]
-Wikipedia:[https://en.wikipedia.org/wiki/Protocol_Buffers 英文]
+Links:[https://en.wikipedia.org/wiki/Protocol_Buffers Wikipedia]
这是 Google 开发的一个跨语言的库,用于网络传输业务数据时的“编码/解码”。
@@ -829,7 +1102,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Protocol_Buffers 英文]
Home:[https://thrift.apache.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Apache_Thrift 英文]
+Links:[https://en.wikipedia.org/wiki/Apache_Thrift Wikipedia]
来自于 Apache 社区,提供了一种跨语言的通讯机制。
@@ -843,7 +1116,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/Apache_Thrift 英文]
Home:[http://twistedmatrix.com/]
-Wikipedia:[https://en.wikipedia.org/wiki/Twisted_%28software%29 英文]
+Links:[https://en.wikipedia.org/wiki/Twisted_%28software%29 Wikipedia]
这是一个基于 Python 网络通讯开发框架,诞生于2002年,名气很大。
@@ -913,6 +1186,29 @@ s1.close()
s2.close()
+== 5.6 云计算 ==
+
+Apache Libcloud
+
+Home:[https://libcloud.apache.org/]
+
+如今云提供商越来越多。这个库提供了统一的 API 让你访问各大知名云提供商提供的各种服务。
+
+代码示例——创建 DNS 记录
+
+from libcloud.dns.types import Provider, RecordType
+from libcloud.dns.providers import get_driver
+
+cls = get_driver(Provider.ZERIGO)
+driver = cls("email", "api key")
+
+zones = driver.list_zones()
+zone = [zone for zone in zones if zone.domain == "mydomain.com"][0]
+
+record = zone.create_record(name="www", type=RecordType.A, data="127.0.0.1")
+print(record)
+
+
----
= 6 数据库 =
@@ -1050,7 +1346,7 @@ sqlite3 从 Python 2.5 版本开始加入到标准库中。通过它,你可以
代码示例——创建一个内存数据库,建表并插入记录
import sqlite3
-conn = sqlite3.connect(":memory:") # ":memory:" 表示这是一个内存数据库
+conn = sqlite3.connect(":memory:") # ":memory:" 表示这是一个内存数据库
cursor = conn.cursor()
cursor.execute("CREATE TABLE person (name text, age int)")
cursor.execute("INSERT INTO stocks VALUES ('TOM',20)")
@@ -1058,7 +1354,33 @@ conn.commit()
conn.close()
-=== 6.2.7 Redis ===
+=== 6.2.7 MongoDB ===
+
+PyMongo
+
+Docs:[https://docs.mongodb.com/ecosystem/drivers/python/]
+
+这是 MongoDB 官方提供的 Python 驱动。
+
+=== 6.2.8 Apache HBase ===
+
+HappyBase
+
+Home:[https://github.com/wbolster/happybase]
+
+操作 HBase 的 Python 库,基于 [https://en.wikipedia.org/wiki/Apache_Thrift Thrift] 连接到 HBase。
+
+代码示例——简单的存取操作
+
+import happybase
+connection = happybase.Connection("hostname")
+table = connection.table("table-name")
+table.put(b"row-key", {b"test1": b"data1", b"test2": b"data2"})
+row = table.row(b"row-key")
+print(row[b"test1"])
+
+
+=== 6.2.9 Redis ===
redis-py
@@ -1066,7 +1388,7 @@ Home:[https://github.com/andymccurdy/redis-py]
操作 Redis 的第三方 Python 客户端。
-代码示例——简单的 set/get
+代码示例——简单的存取操作
import redis
r = redis.StrictRedis(host="localhost", port=6379, db=0)
@@ -1074,7 +1396,24 @@ r.set("foo", "bar")
print(r.get("foo"))
-=== 6.2.8 Berkeley DB ===
+=== 6.2.10 LevelDB ===
+
+Plyvel
+
+Home:[https://github.com/wbolster/plyvel]
+
+操作 LevelDB 的 Python 库,速度快,同时兼容 Python2 和 Python3。
+
+代码示例——简单的存取操作
+
+import plyvel
+db = plyvel.DB("/tmp/testdb/", create_if_missing=True)
+db.put(b"key", b"value")
+print(db.get(b"key"))
+db.close()
+
+
+=== 6.2.11 Berkeley DB ===
PyBSDDB
@@ -1088,7 +1427,7 @@ Home:[http://www.jcea.es/programacion/pybsddb.htm]
Home:[http://www.sqlalchemy.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SQLAlchemy 英文]、[https://zh.wikipedia.org/wiki/SQLAlchemy 中文]
+Links:[https://en.wikipedia.org/wiki/SQLAlchemy Wikipedia] [https://zh.wikipedia.org/wiki/SQLAlchemy 维基百科]
SQLAlchemy 支持的数据库有:MySQL、PostgreSQL、Sqlite、Oracle、MS SQL Server、Firebird、Sybase SQL Server、Informix、等。
@@ -1135,7 +1474,7 @@ Base.metadata.create_all(create_engine("dbms://user:pwd@host/dbname"))
Home:[http://sqlobject.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SQLObject 英文]
+Links:[https://en.wikipedia.org/wiki/SQLObject Wikipedia]
SQLObject 支持的数据库有:MySQL、PostgreSQL、Sqlite、MS SQL Server、Firebird、Sybase SQL Server、SAP DB、等。
@@ -1151,6 +1490,38 @@ class Person(SQLObject) :
Person.createTable()
+Peewee
+
+Home:[http://www.peewee-orm.com/]
+
+一个轻量级的 ORM,支持 SQLite、MySQL 和 PostgreSQL,通过插件机制支持更多数据库。
+
+同时支持 Python2 和 Python3。
+
+代码示例——通过对象的方式创建表
+
+from peewee import *
+
+db = SqliteDatabase("test.db")
+
+class Person(Model) :
+ name = CharField()
+ birthday = DateField()
+ is_relative = BooleanField()
+ class Meta :
+ database = db # This model uses the "test.db".
+
+class Pet(Model) :
+ owner = ForeignKeyField(Person, related_name="pets")
+ name = CharField()
+ animal_type = CharField()
+ class Meta :
+ database = db # This model uses the "test.db".
+
+db.connect()
+db.create_tables([Person, Pet])
+
+
----
= 7 GUI =
@@ -1187,7 +1558,7 @@ if __name__ == "__main__" :
Home:[http://www.wxpython.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/WxPython 英文]、[https://zh.wikipedia.org/wiki/WxPython 中文]
+Links:[https://en.wikipedia.org/wiki/WxPython Wikipedia] [https://zh.wikipedia.org/wiki/WxPython 维基百科]
在所有的 wxWidgets 的 Python 封装库中,这个是名气最大的。
@@ -1225,7 +1596,7 @@ Home:[http://pythoncard.sourceforge.net/]
Home:[http://www.pygtk.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/PyGTK 英文]
+Links:[https://en.wikipedia.org/wiki/PyGTK Wikipedia]
它是 Python 对 GTK+2 的封装。
@@ -1303,7 +1674,7 @@ Gtk.main()
Home:[http://www.riverbankcomputing.com/software/pyqt/]
-Wikipedia:[https://en.wikipedia.org/wiki/PyQt 英文]、[https://zh.wikipedia.org/wiki/PyQt 中文]
+Links:[https://en.wikipedia.org/wiki/PyQt Wikipedia] [https://zh.wikipedia.org/wiki/PyQt 维基百科]
这是 Python 对 Qt 的封装。
@@ -1387,7 +1758,7 @@ Home:[http://ocemp.sourceforge.net/gui.html]
Home:[http://matplotlib.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Matplotlib 英文]
+Links:[https://en.wikipedia.org/wiki/Matplotlib Wikipedia]
这是一个有名的图形库,主要用来绘制数学相关的图形。
@@ -1417,6 +1788,14 @@ Home:[http://code.enthought.com/chaco/]
这是一个商业公司维护的库,主要提供2维图表。效果图在“[http://docs.enthought.com/chaco/user_manual/annotated_examples.html 这里]”。
+Plotly
+
+Home:[https://plot.ly/]
+
+plotly 是现代平台的敏捷商业智能和数据科学库。
+
+它作为一款开源的绘图库,可以应用于 Python、R、MATLAB、Excel、JavaScript、jupyter 等多种语言。
+
----
= 8 信息安全 =
@@ -1459,6 +1838,29 @@ Home:[https://github.com/google/keyczar]
它提供了比较高层的 API, 使用者无需关心太多的细节。
+passlib
+
+Home:[https://bitbucket.org/ecollins/passlib/]
+
+passlib 是一个久经考验的非常成熟的跨平台的散列函数库,它所提供的功能包括随机盐密码的生成与验证,两步验证等。
+
+代码示例——验证随机盐密码
+
+>>> # import the hash algorithm
+>>> from passlib.hash import pbkdf2_sha256
+
+>>> # generate new salt, and hash a password
+>>> hash = pbkdf2_sha256.hash("toomanysecrets")
+>>> hash
+'$pbkdf2-sha256$29000$N2YMIWQsBWBMae09x1jrPQ$1t8iyB2A.WF/Z5JZv.lfCIhXXN33N23OSgQYThBYRfk'
+
+>>> # verifying the password
+>>> pbkdf2_sha256.verify("toomanysecrets", hash)
+True
+>>> pbkdf2_sha256.verify("joshua", hash)
+False
+
+
== 8.2 访问控制 ==
oauth2client
@@ -1611,6 +2013,16 @@ Home:[http://lxml.de/]
以回调方式解析 HTML/XHTML 文件内容。
+beautifulsoup
+
+Home:[https://www.crummy.com/software/BeautifulSoup/]
+
+Links:[https://zh.wikipedia.org/zh-cn/Beautiful_Soup 维基百科]
+
+Beautiful Soup 可以从 HTML 或 XML 文件中提取数据。
+
+它是写”爬虫“的利器,通常与 requests 或 selenium 配合。
+
== 9.4 PDF ==
pyfpdf
@@ -1663,9 +2075,19 @@ Home:[http://www.unixuser.org/~euske/python/pdfminer/]
=== 9.5.1 Word(doc、docx) ===
+python-docx
+
+Home:[https://github.com/python-openxml/python-docx]
+
+纯 python 实现的 docx 操作库,能够处理 docx 中的“文本、图片、样式”。
+
+同时支持 Python2 和 Python3。
+
PyWin32
-PyWin32 前面已经介绍过。它可以基于 [https://en.wikipedia.org/wiki/Component_Object_Model COM] 操作 Office 文档,包括 Word(本地需要安装 Office)。
+PyWin32 前面已经介绍过。它可以基于 [https://en.wikipedia.org/wiki/Component_Object_Model COM] 操作 Office 文档,包括 Word。
+
+(本地需要安装 Office)
=== 9.5.2 Excel(xls、xlsx) ===
@@ -1677,7 +2099,9 @@ Home:[http://sourceforge.net/projects/pyexcelerator/]
PyWin32
-PyWin32 前面已经介绍过。它可以基于 [https://en.wikipedia.org/wiki/Component_Object_Model COM] 操作 Office 文档,包括 Excel(本地需要安装 Office)。
+PyWin32 前面已经介绍过。它可以基于 [https://en.wikipedia.org/wiki/Component_Object_Model COM] 操作 Office 文档,包括 Excel。
+
+(本地需要安装 Office)
=== 9.5.3 Power Point(ppt、pptx) ===
@@ -1689,7 +2113,9 @@ Home:[https://github.com/scanny/python-pptx]
PyWin32
-PyWin32 前面已经介绍过。它可以基于 [https://en.wikipedia.org/wiki/Component_Object_Model COM] 操作 Office 文档,包括 Excel(本地需要安装 Office)。
+PyWin32 前面已经介绍过。它可以基于 [https://en.wikipedia.org/wiki/Component_Object_Model COM] 操作 Office 文档,包括 Power Point。
+
+(本地需要安装 Office)
== 9.6 RTF ==
@@ -1717,7 +2143,7 @@ Home:[http://gnochm.sourceforge.net/pychm.html]
Home:[http://www.pythonware.com/products/pil/]
-Wikipedia:[https://en.wikipedia.org/wiki/Python_Imaging_Library 英文]
+Links:[https://en.wikipedia.org/wiki/Python_Imaging_Library Wikipedia]
这是一个很有名气的 Python 图像处理库,支持常见图像文件格式(BMP、JPG、GIF、PNG ...)。
@@ -1766,6 +2192,14 @@ with Image(filename="mona-lisa.png") as img :
display(new_img)
+Pillow
+
+Home:[http://python-pillow.org/]
+
+你可以把它视作“轻量级的 PIL”。
+
+它的目标是比 PIL 更容易使用,并尽可能与 PIL 的 API 兼容。
+
PyGraphviz
Home:[https://github.com/pygraphviz/pygraphviz]
@@ -1824,7 +2258,7 @@ Pycairo 是 Cairo 官方提供 Python 封装。
Home:[http://www.pygame.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Pygame 英文]、[https://zh.wikipedia.org/wiki/Pygame 中文]
+Links:[https://en.wikipedia.org/wiki/Pygame Wikipedia] [https://zh.wikipedia.org/wiki/Pygame 维基百科]
这是名气很大的跨平台游戏引擎,构建于 [https://zh.wikipedia.org/wiki/SDL SDL](Simple DirectMedia Layer)之上。
@@ -1844,7 +2278,7 @@ Home:[http://cocos2d.org/]
Home:[http://www.blender.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/Game_Blender 英文]、[https://zh.wikipedia.org/wiki/Game_Blender 中文]
+Links:[https://en.wikipedia.org/wiki/Game_Blender Wikipedia] [https://zh.wikipedia.org/wiki/Game_Blender 维基百科]
它是 [https://en.wikipedia.org/wiki/Blender_%28software%29 Blender] 的组成部分,虽然是以 C++ 编写,但内置了 Python 脚本的扩展。
@@ -1872,13 +2306,13 @@ Home:[http://www.python-ogre.org/]
Home:[http://www.numpy.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/NumPy 英文]、[https://zh.wikipedia.org/wiki/NumPy 中文]
+Links:[https://en.wikipedia.org/wiki/NumPy Wikipedia] [https://zh.wikipedia.org/wiki/NumPy 维基百科]
它提供了功能强大、性能很高的数值数组,可以用来进行各种数值计算(包括矩阵运算)。
代码示例
-# 以下是传统 Python 写法,冗长且速度较慢
+# 以下是传统 Python 写法,冗长且速度较慢
a = range(10000000)
b = range(10000000)
c = []
@@ -1896,7 +2330,7 @@ c = a + b
Home:[http://www.scipy.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SciPy 英文]、[https://zh.wikipedia.org/wiki/SciPy 中文]
+Links:[https://en.wikipedia.org/wiki/SciPy Wikipedia] [https://zh.wikipedia.org/wiki/SciPy 维基百科]
它依赖 NumPy 提供的多维数组。相比 NumPy,它提供了更高层的数学运算模块(统计、线性代数、积分、常微分方程求解、傅立叶变换、信号处理 ...)。
@@ -1906,7 +2340,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/SciPy 英文]、[https://zh.wikipedia
Home:[http://sympy.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/SymPy 英文]、[https://zh.wikipedia.org/wiki/SymPy 中文]
+Links:[https://en.wikipedia.org/wiki/SymPy Wikipedia] [https://zh.wikipedia.org/wiki/SymPy 维基百科]
它是用来做符号计算的,其目标是成为一个全功能的“计算机代数系统”。
@@ -1922,7 +2356,7 @@ Wikipedia:[https://en.wikipedia.org/wiki/SymPy 英文]、[https://zh.wikipedia
Home:[http://www.pypy.org/]
-Wikipedia:[https://en.wikipedia.org/wiki/PyPy 英文]、[https://zh.wikipedia.org/wiki/PyPy 中文]
+Links:[https://en.wikipedia.org/wiki/PyPy Wikipedia] [https://zh.wikipedia.org/wiki/PyPy 维基百科]
它是一个用 Python 写的 Python 解释器(有点绕口令)。