- 博客(100)
- 资源 (47)
- 收藏
- 关注
原创 supervisorctl报错"error: <class 'socket.gaierror'>, [Errno -2] Name or service not known"的解决方法
如果用Python写过线上的后端服务,相信对Supervisor不会陌生,它包含两个主要工具: 1)supervisord: 用来实现进程守护 2)supervisorctl: 用来实现supervisord对其守护进程的控制,如reload配置文件、启/停其守护的子进程,等等在使用supervisorctl执行如下命令时,## 其中sup.xxx.conf是supervisord的配置文件$
2016-01-04 22:53:44
11341
原创 如何用Fabric实现无密码输入提示的远程自动部署
上篇笔记介绍了Fabric的概念、支持的元操作及task的定义方法,本篇笔记旨在说明如何在多台目标机器上正确地执行tasks以实现远程自动部署或运维。特别地,文中会说明如何配置fabric task以便远程执行命令时不会弹出密码输入提示。1. Fabric的任务运行规则根据Fabric Execution model的说明,fabric默认以串行方式运行tasks,具体而言: 1)在fabfile
2015-12-27 23:18:39
7837
原创 自动化部署工具Fabric简介
在持续集成/灰度发布越来越流行的今天,模块在预览或生产环境的部署流程自动化显得越来越重要。本文要介绍的Fabric就是一个帮助我们在上线时减少重复/繁琐操作的自动化部署利器,对于缺乏成熟运维平台的众多小公司的运维或开发人员来说,掌握这个工具是有必要的。1. Fabric是什么Fabric官方文档的描述如下: Fabric is a Python (2.5-2.7) library and comm
2015-12-27 19:00:15
5861
原创 【Python笔记】Python多线程进程如何正确响应Ctrl-C以实现优雅退出
相信用C/C++写过服务的同学对通过响应Ctrl-C(信号量SIG_TERM)实现多线程C进程的优雅退出都不会陌生,典型的实现伪码如下:#include <signal.h>int main(int argc, char * argv[]) { // 1. do some init work ... init() ... // 2. install signal handl
2015-12-26 21:53:24
10286
原创 NOSQL数据库简介
近年来,相信IT从业者对NOSQL这个名词不会陌生,根据WikiPedia的定义,NOSQL是”non SQL”或”Not Only SQL”的简称。其实早在1960年前后,计算机领域就出现过类似的系统,但NOSQL系统真正的爆发点是在WEB2.0出现以后,特别是随着大数据概念的兴起而大放异彩。其被广泛使用的原因与数据特点有着紧密关系。本文是NOSQL数据库综述方面的学习笔记,参考资料主要来自”Gr
2015-12-08 01:25:48
4431
原创 Nginx rewrite配置规则
作为一个被广泛用于反向代理的高性能WEB服务器,Nginx通常处于承接网站流量的最前端。在实际项目中,经常会用Nginx对特定的客户端请求做改写(即rewrite)后返回或将改写后的request_url传给后端real server做业务逻辑的处理。本文是对nginx rewrite规则的学习笔记,参考资料主要来自官方文档。1. Nginx rewrite配置语法说明Syntax: rewrit
2015-12-05 17:44:35
1413
原创 【Git笔记】如何在同主机同账户下实现多个gitlab帐号管理各自的remote repo
我们可能会遇到下面的场景: 1)多人共用同一台Linux开发机,该开发机只有一个共用的work帐号,很多人都用这个帐号登录主机进行日常开发; 2)该work帐号下统一安装了git客户端供多人使用; 3)项目采用gitlab进行云端代码托管; 4)每个开发人员均使用自己的gitlab帐号进行版本管理。在上面的场景下,需要解决一个问题: 在同主机且共用工作帐号的情况下,如何使用各自的gitla
2015-08-22 22:05:08
3831
原创 如何使用SQLAlchemy库写出防SQL注入的Raw SQL
Python阵营有很多操作数据库的开源库(安装pip后,可以借助”pip search mysql”查看可用的库列表),其中被使用最多的无疑是MySQLdb,这个库简单易上手。其偏底层的特性为开发者提供灵活性的同时,也对不少新手写出的DB操作代码提出了考验,因为它只支持raw sql,容易导致sql注入攻击。鉴于此,很多库提供了ORM接口能力,借助OO思想,数据库中的表被映射为Python的类,类的
2015-08-03 17:46:27
10269
原创 Python Web框架Tornado的异步处理代码示例
1. What is TornadoTornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但可以提供基本的web server功能,故它是轻量级的;它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库
2015-07-30 15:14:44
7197
原创 如何用supervisor守护php-fpm主进程以实现php-fpm的自动重启
最近有同事有个针对php-fpm进程的监护需求,也即:如果php-fpm的master进程意外退出(可能是crash,也可能是被误kill),那么希望master进程能被自动拉起,以免中断服务。我们知道,supervisor是一个非常强大的进程监控(monitor & control)工具,它理论上可以实现php-fpm master进程的守护需求。因此,我帮同事试验了如何用supervisor完成
2015-07-18 22:17:25
11752
原创 【网络编程笔记】Linux系统常见的网络编程I/O模型简述
1. 典型的I/O模型根据”Unix Network Programming Volume 1”一书第6.2节的说明,Linux系统支持的典型I/O模型包含下面5种:阻塞I/O(blocking I/O)非阻塞I/O(nonblocking I/O)I/O多路复用(I/O multiplexing, e.g. select and poll)信号驱动型I/O(signal driven I
2015-06-29 19:15:17
1619
原创 Spark调研笔记第7篇 - 应用实战: 如何利用Spark集群计算物品相似度
本文是Spark调研笔记的最后一篇,以代码实例说明如何借助Spark平台高效地实现推荐系统CF算法中的物品相似度计算。在推荐系统中,最经典的推荐算法无疑是协同过滤(Collaborative Filtering, CF),而item-cf又是CF算法中一个实现简单且效果不错的算法。在item-cf算法中,最关键的步骤是计算物品之间的相似度。本文以代码实例来说明如何利用Spark平台快速计算
2015-06-10 15:01:35
4522
原创 Spark调研笔记第6篇 - Spark编程实战FAQ
本文主要记录我使用Spark以来遇到的一些典型问题及其解决办法,希望对遇到同样问题的同学们有所帮助。1. Spark环境或配置相关Q: Spark客户端配置文件spark-defaults.conf中,spark.executor.memory和spark.cores.max应该如何合理配置?A: 配置前,需要对spark集群中每个节点机器的core和memory的配置有基本了解。比如
2015-06-10 11:16:33
2145
原创 Spark调研笔记第5篇 - Spark API简介
由于Spark是用Scala实现的,所以Spark天生支持Scala API,此外,还支持Java和Python API。以Spark 1.3版本的Python API为例,其模块层级关系如下图所示:从上图可知,pyspark是Python API的顶层package,它包含了几个重要的subpackages,其中:1) pyspark.SparkContext它抽象了指向sp
2015-06-09 10:50:57
1765
原创 Spark调研笔记第4篇 - PySpark Internals
其实,有两个名为PySpark的概念,一个是指Spark客户端内置的pyspark脚本,而另一个是指Spark Python API中的名为pyspark的package。本文只对第1个pyspark概念做介绍。1. Spark客户端内置的pyspark"命令"Spark客户端支持交互模式以方便应用调试,通过调用pyspark可以进入交互环境:cd /path/to/spark
2015-06-08 19:10:23
2874
原创 Spark调研笔记第3篇 - Spark集群对应用的调度策略简介
Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明。1. 应用间调度1) 调度策略1: 资源静态分区资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分配时的最小粒度是一个静态的partition。根据应用对资源的申请需求为其分配静态的partition(s)是Spark支持的最简单的调度策略。我们已经知道,不同的应用有各自的Spark C
2015-06-08 13:40:19
1344
原创 Spark调研笔记第2篇 - 如何通过Spark客户端向Spark提交任务
在上篇笔记的基础上,本文介绍Spark客户端的基本配置及Spark任务提交方式。1. Spark客户端及基本配置从Spark官网下载的pre-built包中集成了Spark客户端,如与hadoop ver1.x兼容的Spark客户端位于spark-1.3.1-bin-hadoop1/bin目录下。Spark客户端通常部署在要提交计算任务的机器上,用来向集群提交应用。特别地,客户端自带的
2015-06-05 18:02:43
3677
原创 Spark调研笔记第1篇 - Spark简介
在公司线上项目中引入Spark已经将近1年时间了,从效果来看,Spark确实是能提高生产力的优秀分布式计算平台。从本篇笔记开始,会把之前调研Spark时的调研报告分享出来(限于篇幅,会分成几篇文章),以便帮助刚接触Spark的朋友们尽快入门。下面开始正文。1. 项目背景Spark项目于2009年诞生于UC Berkeley AMP Lab并于2010年正式提交Apache Soft
2015-06-05 17:09:13
1518
原创 基于Java的开源日志库log4j调研笔记
由于Hadoop生态链基本都是java开发的,所以在很多有关大数据处理的开源项目中,经常会看到log4j这个jar包。本文旨在对它的用法做基本说明。1. log4j是什么从log4j的命名(log for java)不难看出,它是为java提供的日志库。具体而言,它是Apache基金会下的开源项目,它可在不修改应用程序代码的前提下,在程序运行时提供灵活的日志打印功能(当然,应用程序还是
2015-04-30 17:51:05
1418
1
原创 日志收集系统Flume调研笔记第2篇 - Flume配置及使用实例
上篇笔记对Flume的使用场景和系统架构做了介绍,本篇笔记以实例说明Flume的配置方法。下面开始正文。1. Flume使用实例1.1 配置Flume agent的3个组件及其拓扑关系是在配置文件中指定的,总的原则是必须列出source/channel/sink的name/type等重要的配置项,并通过channel将source(s)和sink(s)连接起来,此外,1个source可
2015-04-29 19:13:09
2357
原创 日志收集系统Flume调研笔记第1篇 - Flume简介
用户行为数据的收集无疑是构建推荐系统的先决条件,而Apache基金会下的Flume项目正是为分布式的日志收集量身打造的,本文是flume基本用法的调研笔记。本文所用的Flume版本为目前最新版的ver1.5.2,它属于Flume-NG,在系统架构上与Flume-OG有所区别,二者的不同可以参考FlumeWiki文档的说明。1. Flume是什么Flume是Apache基金会下的一个开源
2015-04-29 18:52:07
3254
原创 【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)
上篇笔记介绍了语法分析相关的一些基础概念,本篇笔记根据龙书第2.5节的内容实现一个针对简单表达式的后缀式语法翻译器Demo。备注:原书中的demo是java实例,我给出的将是逻辑一致的Python版本的实现。在简单后缀翻译器代码实现之前,还需要介绍几个基本概念。1. 自顶向下分析法(top-down parsing)顾名思义,top-down分析法的思路是推导产生式时,以产生式开始
2015-04-06 12:59:19
3436
原创 【龙书笔记】语法分析涉及的基础概念简介
本篇笔记是我对龙书第2.3-2.5节内容的理解,主要介绍编译器前端关于语法分析的众多基础概念。下篇笔记将根据本篇笔记的主要内容,实现一个针对简单表达式的后缀式语法翻译器Demo(原书中是java实例,我给出的将是逻辑一致的Python版本的实现)。1. 语法分析(Syntax Analysis)简单来说,语法分析的任务是分析输入的符号字符串(string of symbols, 通常是词法
2015-04-06 09:59:47
3679
原创 【Python笔记】如何源码编译依赖LAPACK和ATLAS库的NumPy包
上篇笔记介绍了不依赖lapack和atlas库的NumPy包源码编译/安装方法,但“纯净版”的NumPy会损失性能,故本篇笔记说明如何源码编译安装依赖lapack和atlas库的NumPy包。1. GCC版本要求 使用较新版本的GCC工具集(尽量不低于v4.7)且继承有gfortran编译器。备注1:这里大写的"GCC"是指GNU Compiler Collection,它除包含C语言
2015-04-03 12:15:39
4233
原创 【Python笔记】如何编译不依赖lapack和atlas库的NumPy包
NumPy是科学计算方面的一个Python库,在数据挖掘或机器学习或科学统计等领域经常被用到,官网在这里。在实际业务中,为发挥NumPy的高性能,在编译NumPy时会依赖一些经过特别优化的第三方科学计算库。对于初次接触NumPy的新手来说,从源码编译安装依赖外部库的NumPy通常不是一个简单的任务。事实上,NumPy这个Python包本身不需依赖任何第三方库就能完成编译和安装使用,只不过其
2015-04-02 15:57:17
3292
原创 【GoLang笔记】遍历map时的key随机化问题及解决方法
之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的。由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的。熟悉hashmap的同学对这个情况应该非常清楚。所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明。1. 通过
2015-03-31 14:40:53
27458
原创 【Python笔记】从一个“古怪”的case探究CPython对Int对象的实现细节
1. Python的对象模型我们知道,在Python的世界里,万物皆对象(Object)。根据Python官方文档对Data Model的说明,每个Python对象均拥有3个特性:身份、类型和值。官方文档关于对象模型的这段概括说明对于我们理解Python对象是如此重要,所以本文将其摘录如下(为了使得结构更清晰,这里把原文档做了分段处理):1) Every object has an i
2015-03-28 19:30:07
1530
原创 【Python笔记】剖析Python的切片(slicing)语法
相信即使是Python新手也很容易理解下面的切片行为:>>> s = 'this_is_a_test'>>> s[1 : 5]'his_'进一步,下面的语法及输出也很不难理解:>>> s = 'this_is_a_test'>>> s[ : : 2]'ti_sats'那么,下面的呢?>>> s = 'this_is_a_test'>>> s[ : : -1]'tset_a_
2015-03-28 17:38:10
16844
原创 【龙书笔记】编译器前端之语法分析涉及的基本概念
前一篇龙书笔记主要介绍了编译器内部实现的几个主要步骤,本篇笔记主要说明编译器前端涉及到的重要基础概念。编译器前端主要包括词法分析、语法分析、语义分析及中间码生成4个阶段,一个典型的编译器前端处理模型如下图所示:下面出现的术语或基础概念均是语法分析阶段会涉及到的。1. syntax & semantics我们会在很多地方听到到“语法”和“语义”这两个概念,那么,从编译器角度来看,
2015-03-22 21:40:31
1767
原创 【龙书笔记】编译器内部实现流程初探
上篇龙书笔记对编译器在程序构建中的作用做了整体的黑盒介绍,本篇笔记的目的是拆开这个盒子,对编译器内部实现流程做说明。1. Phases of a compiler从整体来看,编译器内部流程可以分为2大类:分析(analysis)和综合(synthesis)。在analysis阶段,编译器将源码分解为一系列片段并为它们构建语法结构(grammatical structure),然后利
2015-03-22 14:04:30
1816
原创 【GoLang笔记】浅析Go语言Interface类型的语法行为及用法
Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。那么,Go的Interface类型到底是什么呢?怎么使用呢?这正是本篇笔记试图说明的问题。1. Metho
2015-03-20 15:28:13
10046
原创 【GoLang笔记】实例分析GoLang built-in数据结构map的赋值引用行为
备注1:本文旨在介绍Go语言中map这个内置数据结构的引用行为,并用实例来说明如何避免这种引用行为带来的“副作用”。备注2:文末列出的参考资料均来自GoLang.org官方文档,需翻墙访问。1. map internalsmap是go中内置的数据结构,关于其语法规则,可以查看language specification中这里的说明,或者查看Effective Go中关于Maps的说
2015-03-17 13:46:06
5436
原创 【龙书笔记】编译器简介及程序构建过程综述
备注:本文是近期重新阅读编译器经典教材一书(又称DragonBook,龙书)的其中一篇读书笔记。1. 什么是编译器从本质来看,平时提到的“编程语言”其实都是一些助记符,用于向其他人或机器描述我们想要完成的逻辑运算。这些易于人类理解的语言想要被计算机理解并正确执行,就必须被转换成机器码,而完成这一转换过程的软件系统就是编译器。简言之,编译器其实也是一个计算机程序,它可以读取用一种编程
2015-03-15 19:31:55
1776
原创 【Linux笔记】如何利用logrotate工具自动切分滚动中的日志文件
在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或date切割)的日志库,则日志文件会很快增长到G级别。单机操作大文件对后续跟进日志来说非常不方便。本文介绍如何利用logrotate这个工具来在应用程序外部切分日志。1. logrotate是什么logrotate是大多数linux系统自带的日志切割工具,在shell终端输入"man lo
2015-03-11 16:40:09
4625
原创 【MySQL笔记】SQL优化利器 - explain命令的输出格式详解
有MySQL使用经验的同学在实际项目中可能会遇到SQL慢查询的场景,有些场景很容易定位问题所在(如单表操作有慢查询SQL时,仔细check SQL语句通常很容易定位索引问题),而有些复杂业务场景(如多表联合查询几十个字段并做group或sort等操作)下,人工check SQL语句通常很难发现SQL瓶颈所在。这个时候,MySQL提供的explain命令就派上用场了。本笔记主要对explain的
2015-02-14 22:12:49
2488
原创 【GoLang笔记】A Tour of Go - Exercise: Web Crawler
本文是GoLang学习教程中的一道习题,具体题目要求及代码实现如下。备注:由于天朝GFW屏蔽了GAE,所以GoLang官网及学习教程需要翻墙才能访问。In this exercise you'll use Go's concurrency features to parallelize a web crawler.Modify the Crawl function to fetch U
2015-02-01 16:29:45
2585
原创 【GoLang笔记】A Tour of Go - Exercise: Images
本笔记是GoLang学习教程的一道习题,题目要求及一种参考实现如下所示。备注:由于天朝GFW屏蔽了GAE,所以GoLang官网及学习教程需要翻墙才能访问。Exercise: ImagesRemember the picture generator you wrote earlier? Let's write another one, but this time it will retu
2015-01-31 01:00:58
1719
原创 【GoLang笔记】A Tour of Go - Exercise: Equivalent Binary Trees
本文是GoLang学习教程中的一道习题,具体题目要求及代码实现如下。Exercise: Equivalent Binary Trees1. Implement the Walk function.2. Test the Walk function.The function tree.New(k) constructs a randomly-structured binary t
2015-01-31 00:34:42
1922
原创 【Python笔记】从一段Bug代码来理解Python的Naming Rule
从Python文档关于Naming and binding的说明可知,变量名是绑定到具体对象的,从这点来看,可以把它理解为C++中的引用。考虑下面两行语句:a = 'test'a = 'test_ext'第1行执行后,Python解释器会在内存中创建string类型的对象'test',这个对象一旦创建就不能再修改其值。赋值符号只是将变量名a绑定到这个对象上而已。第2行执行后,同理,值为'
2015-01-30 13:55:46
1528
原创 【Python笔记】装饰器语法糖(@staticmethod/@classmethod/@property)原理剖析及使用场景说明
在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classmethod或@property的语法糖。本质上,它们都是函数装饰器,只不过通常被用来修饰类成员函数而已。本笔记旨在说明这些语法糖的用途,关于普通函数装饰器语法的解释,可以参考这篇笔记。在解释这些装饰器函数前,先来分析下普通成员函数。1. 类的普通成员函数对于P
2015-01-07 19:31:14
7218
1
VC单文档多视图切换程序
2010-07-21
C++必知必会(PDF,清晰)
2010-04-09
visual c++网络高级编程(pdf)
2010-03-16
C++ Builder6编程实例精讲(pdf)
2010-01-05
PDA开发中GPRS建立连接的代码(VS 2005,MFC)
2010-01-05
C++ STL程序员开发指南
2010-01-05
Proteus入门教程(高清pdf)
2010-01-02
80C51单片机速成与实战(pdf 周立功经典教程)
2010-01-02
嵌入式Linux开发详解(高清PDF)
2009-12-18
Core Python Applications Programming - 3rd Edition
2015-03-27
SNMP独立安装包[无系统盘时使用]
2011-10-19
常用算法程序集+源代码(C语言描述)
2011-03-17
vc控制打印机双面打印word
2011-02-20
filetool.dll
2010-12-28
VC++数据库编程(pdf)
2010-11-29
VC tooltip 源代码
2010-11-09
vc操作Word2003例程
2010-10-30
Writing Clean Code ( Microsoft 编写优质无错C程序秘诀) pdf
2010-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人