自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

职场亮哥

我不是咸鱼,我有梦想

  • 博客(90)
  • 资源 (1)
  • 收藏
  • 关注

原创 趣谈HmacSHA1和原生SHA1的区别

首先来看一段HmacSHA1加密和SHA1加密的代码#!/usr/bin/env python# -*- coding: utf-8 -*-"""Created on 1/31/18 10:03 AM@author: Chen Liang@function: HmacSHA1 vs SHA1"""import sysreload(sys)sys.setdefaultencoding('utf-8')imp

2020-12-21 09:42:11 105

原创 基于消息传递的并发模型:Actor和CSP的区别

An object oriented language is a language with good support for objects.A concurrency oriented language has good support for concurrency.--Joe Armstrong两类通用并发模型:参考七周七并发模型共享内存型Shared Memory线程Threads锁Locks互斥l量Mutexes消息传送型(CSP和Actor模型)进程Processes

2020-12-18 11:41:44 34

原创 使用ab和wrk对腾讯CLS进行benchmark测试

使用ab和wrk对腾讯云日志服务CLS进行压力测试,以此为例对ab和wrk进行说明abab,全称是apache benchmark,是apache官方推出的工具。该工具是用来测试Apache服务器的性能的。查看安装的apache的服务器能提供的服务能力,每秒可以处理多少次请求。ab 执行时常用的选项如下表:选项作用-c并发数, 一次发送的总请求数,默认是一次发一个请求。-k打开keep-alive,在一个HTTP Session中请求多次。默认是关闭的。-n请求数,

2020-12-16 11:49:29 19

原创 详解Python Google Protocol Buffer

本篇主要介绍如何在Python语言中使用Google Protocol Buffer(后续都简写为PB), 包括以下几个部分:为什么要使用PB?安装Google PB自定义.proto 文件编译.proto文件解析目标py文件序列化和反序列化更复杂的Message动态编译为什么要使用PB?PB(Protocol Buffer)是 Google 开发的用于结构化数据交换格式,作为腾讯云日志服务标准写入格式。因此用于写入日志数据前,需要将日志原始数据序列化为 PB 数据流后通过 API

2020-12-15 15:59:57 21

原创 坚持住啊,还在代码屎山中爬行的同事们

"There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton在计算机领域只有两件艰难的事情:缓存失效和对象命名。这还真不是一个笑话。写代码是比较容易的事情,但是阅读别人的代码,那就因人而异了。好的工程师写出来的代码可读性很高,比如我上家公司的同事旭总。一般的工程师写出来的代码就像是一坨屎,比如之前某某几位同事。所以我会经常.

2020-12-15 08:40:17 106 1

原创 unix domain socket 浅析

unix domain socketunix domain socket 是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC: Inter-Process Communication),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失

2020-12-14 20:41:03 40

原创 Python单元测试的Mock是怎么回事

单元测试什么是单元测试, 维基百科上是这么定义的: unit testing is a method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures, are tested to determine if they ar

2020-12-14 10:59:27 24

原创 三招搞定你的ubuntu安全问题

本篇主要介绍以下三个部分:反病毒引擎clamav的安装和使用ubuntu ufw限制访问地址ubuntu用户连接失败锁定指定时间反病毒引擎clamav的安装和使用简介 ClamAV是一款开源的反病毒引擎,用于检测病毒,特洛伊木马,恶意软件和其他威胁。 它支持多种文件格式(文档,可执行文件或存档),利用多线程扫描器功能,并且每天至少3-4次接收其签名数据库的更新。Linux发行版并没有太多的病毒,因此大多数使用这种系统的人甚至都懒得使用防病毒软件。 如果确实需要,可以使用ClamAV。

2020-12-11 10:49:34 48

原创 思考一次整体调整Python项目规范性的过程

本篇文章主要是记录整体调整Python数据统计分析项目规范性的过程,以及自己的一些思考。为什么要调整?主要是为了解决数据类程序不容易测试发现错误的现状。调整公共模块出错时抛出错误到业务层,便于报警模块上传错误信息到kafka,最后能主动发出报警邮件。以及方便加入报警之外的其他程序埋点。调整所有Python数据统计分析程序满足pep8规范和Google Python风格规范,减少IDE提示。完善代码注释和文档便于后续维护(之前的开发人员是Erlang风格,主张不写或者少写注释)。认清程序当前

2020-12-11 10:19:57 14

原创 不可缺少的程序埋点

埋点目的对于本次修改的数据统计分析程序的埋点,只是为了统计数据中出现的一些不易发现的错误,全部让程序主动跑出来。但是只要是主动抛出统计数据,都属于埋点。数据埋点是数据分析的准备工作,只有埋点了才可以获得数据进行分析。在做足数据埋点之后,才能拿到想要的目标数据:行为数据:时间、地点、人物、交互、交互的内容;质量数据:浏览器加载情况、错误异常等;环境数据:浏览器相关的元数据以及地理、运营商等;运营数据:PV、UV、转化率、留存率(很直观的数据)整体调整Python项目规范性之后加入错误数据埋点

2020-12-10 15:56:13 7

原创 神兵利器推荐——你一定不能错过的mac alfred工作流

上一篇介绍了我日常高频使用的chrome插件,那就顺便介绍一下mac上最最最能提升效率的Alfred工作流吧。以下是我常用的 Alfred workflow 列表:(几乎每天都会用到)不同的插件,可能有不同作者开发的版本,下面会给出我一直在用的版本,但是你完全可以去选择更适合自己的版本。比如像有道翻译,可以找到很多版本,选择自己喜欢的即可。下面按照顺序一款一款的介绍下。CodeVar生成变量名,支持大小驼峰、常量、下划线,开发者必备的工作流下载地址:https://github.com.

2020-12-10 10:58:40 43

原创 重新认识HTTP3xx重定向机制

问题引入前段时间做数据收集时需要下载网宿cdn的日志进行分析。而网宿对日志下载的接口搞得很复杂,又没有提供相应的sdk,只是提供了一个shell脚本,虽然在ubuntu上使用很方便,但是脚本里面的各种重定向分析非常复杂。故此想对重定向在深入了解一点。查询网宿日志列表的脚本#!/bin/shTMP_FILE="/tmp/wslog_query_client.log"#UsageUsage() { echo "wslog_query_client.sh [qu

2020-12-09 13:10:56 20

原创 神兵利器推荐——你一定不能错过的chrome插件

最近有朋友问我,有没有什么可以提升效率的chrome插件推荐一下。我看了一下我的插件库,好用的还真不少。既然要推荐给一个人,还不如整理出来,分享给所有需要的人。毕竟,极致利他才能最终利己嘛。话不多说,下面一个一个的推荐,并且附上效果截图。(注意,一定要看完,图中隐藏着很多人梦寐以求的大杀器!!!)技术文章一键分发:openWrite助手安全认证简书、博客园、知乎、开源中国、掘金、SegmentFault等平台,一键群发文章。免费版只有有限的分发次数,但是为了效率,这点费用还是很值得的。公众号排版

2020-12-09 11:20:24 60 1

原创 丰富你的日志信息:从Python调用堆栈获取行号等信息

程序中的日志打印,或者消息上传,比如kafka消息等等。经常上传的消息中需要上传堆栈信息中的文件名、行号、上层调用者等具体用于定位的消息。Python提供了以下两种方法:sys._getframe, 基础方法inspect.currentframe, 推荐方法,提供除了sys._getframe方法之外更多的frame相关的方法具体使用如下使用sys._getframe私有方法具体使用方法如下:import osimport sysdef get_cur_info():

2020-12-08 11:33:37 19

原创 一文搞懂supervisor进程管理

supervisor使用Python编写的进程管理程序supervisor来管理Python程序那是最合适不过了,supervisor基于CS架构,主要有以下两个组成部分:supervisord:supervisord是supervisor的服务端程序。负责启动子程序,应答客户端命令,子程序日志记录,对进程变化发送事件通知等supervisorctl: 客户端命令行工具,可以连接服务器端,进行进程的启动、关闭、重启、状态查看等。重要的一点是,supervisorctl不仅可以连接到本机上的super

2020-12-07 12:19:05 65

原创 Python时间模块常用操作总结

时间模块常用操作总结为下列各个函数:#!/usr/bin/env python# -*- coding: utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')import timeimport datetimeimport calendardef second_to_datetime_string(seconds): """ 将从公元0年开始的秒数转换为

2020-12-01 11:04:19 13

原创 ubuntu16.04配置samba解决linux的svn使用舒适问题

个人感觉,svn的命令行使用起来没有git那么舒适,但是windows上的svn GUI客户端TortoiseSVN 使用非常方便。因此对于经常在虚拟机中做服务程序开发但是又不得不用svn的同学来说,结合linux开发环境和TortoiseSVN 来管理代码版本就显得尤其有用。安装配置sambaubuntu上使用apt-get安装apt-get install samba samba-common关闭防火墙systemctl stop ufw使用vim /etc/samba/smb.conf

2020-11-19 10:05:01 14

原创 最简洁的Erlang基础

0x00 说在前面Erlang读音/ˈɜːrlæŋ/。第一次见到的时候总感觉怎么读都读不对,后来在维基上看到Erlang标注了音标,才能准确的读出来,而且也没那么怪异。因为工作才有机会接触这门语言,也因此只有三天的时间可以看《Erlang程序设计》这本书。学习这门语言的时候带着一个工作目标:把一个Erlang日志收集分析统计的代码转换成Python的。而Erlang的风格是尽量不写注释,尽量在写函数名和变量名的时候表达清楚代码的含义。这样一来学习Erlang就成了必要的,很庆幸,领导给了三天时间学习,三天

2020-11-18 12:32:41 46

原创 设计一个基于flask的高并发高可用的查询ip的http服务

结构设计基础架构为flask+gunicorn+负载均衡,负载均衡分为阿里云硬件负载均衡服务和软负载nginx。gunicorn使用supervisor进行管理。使用nginx软件负载结构图使用阿里云硬件负载均衡服务结构图因为flask app需要在内存中保存ip树以及国家、省份、城市相关的字典,因此占用内存较高。gunicorn的1个worker需要占用300M内存,nginx的4个worker内存占用较小(不到100M),因此占用1.3G的内存(即需要一个2G内存的服务器)。当gunicor

2020-11-11 10:48:34 39

原创 CentOS7-Nginx配置Let‘s-Encrypt-SSL证书

Let's-Encrypt为http站点添加https支持,需要从证书发行机构获取SSL/TLS 证书。常见的免费证书有两种:Let's-Encrypt,本文即将介绍,Let's-Encrypt大法好。caddy,原生支持 HTTP/2,自动创建 Let’s Encrypt 证书,非常简单易用。安装yum install epel-release -yyum install certbot -y配置certbot certonly --webroot -w /ww

2020-11-09 11:06:02 26

原创 元旦去峨眉山吧,人间值得

每年到了10月底11月初的时候,就会开始计划一年一度的大学室友聚会。前几年关于目的地是没什么争议的,因为其中一个舍友,人称装逼王的旭云在成都电子科技大学读研究生,所以每年都是在成都以及周边聚聚,比如重庆,都江堰之类的。今年比较特殊,装逼王要毕业了,时间很充裕,去哪儿都行。四人小团队第一次遇到在哪个城市聚会的问题。可能很多小伙伴元旦也开始计划元旦出行,但是又不知道去哪儿。那可以看下我们的决策方法,应该有一些借鉴意义。定决策方案既然不知道干什么那就roll一下定聚会目的一年没见了,检查下大家伙有没

2020-10-27 11:00:39 2292

原创 常用Oracle SQL集锦

常用dml和query开并行--开并行ALTER SESSION FORCE PARALLEL DML PARALLEL 16;ALTER SESSION FORCE PARALLEL QUERY PARALLEL 16;--关并行ALTER SESSION DISABLE PARALLEL DML ;ALTER SESSION DISABLE PARALLEL QUERY;索引开并行drop index IDX_SB_SBZT_LRRQ;create index IDX_SB_SBZT_

2020-10-16 10:04:41 15

原创 结合公司现状浅谈CMDB

本篇文章结合参考资料中的几篇CMDB的文章再加上目前公司的现状谈一谈CMDB。CMDB概述CMDB:configuration management database,配置管理数据库。CMDB本质上是一个数据库,提供数据的存储、查询、校验等操作,是一个集中式的数据托管中心,托管的内容包含所有的软硬件资产(configuration items)。各个部门各个团队各个系统下属的各种重要的软硬件资产都属于CMDB统一管理的内容。公司运维现状资产现状全国各地区内网不互通。这个就是现状了,因为公司产品是为

2020-10-13 09:41:16 169

原创 CentOS7-Nginx编译安装

安装编译环境需先安装好编译环境make,gcc和g++ 开发库yum -y install gcc automake autoconf libtool makeyum install gcc gcc-c++安装pcrepcre(Perl Compatible Regular Expressions): perl 兼容的正则表达式库。以下各编译安装的源码包均放在/usr/local/src下,Nginx依赖pcre是为了重写rewrite。从ftp://ftp.csx.cam.ac.uk/pub

2020-10-12 12:36:10 11

原创 Linux配置C++11编译环境

配置yum源此处我们使用163的yum源,配置如下首先备份/etc/yum.repos.d/CentOS-Base.repomv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份),以下为下载链接https://mirrors.163.com/.help/CentOS6-Base-163.repo运行以下命令生

2020-10-10 09:34:43 171

原创 Python实现通用web框架

概述Python WSGI规定了Web服务器和Python Web应用程序或Web框架之间的标准接口,主要是为了促进Web应用程序在各种Web服务器上的可移植性。在WSGI的规范下,各种各样的Web服务器和Web框架都可以很好的交互。由于WSGI的存在,用Python写一个简单的Web框架也变得容易了。Web框架的核心部分是路由系统,客户端的请求Request发到wsgi服务器之后Web框架根据请求中的method和path进行多级路由后找到对应的handle方法,在调用方法处理Request得到Res

2020-10-09 09:41:32 26

原创 SQLAlchemy使用

简介SQLAlchemy是Python语言的一款流行的ORM(Object Relational Mapper)框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,即将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。安装SQLAlchemy也很简单,直接使用pip安装即可。pip install sqlalchemy下面重点介绍SQLAlchemy的使用。版本检查import sqlalchemysqlalchemy.__version__ # 1.1.9

2020-10-08 23:41:05 32 2

原创 Python pymysql

安装安装mysql数据库的难度和oracle数据库简直没得比,安装步骤如下:安装MariaDByum install mariadb mariadb-server # 安装,centos7默认的mysql就是mariadbsystemctl start mariadb # 启动mariadbsystemctl enable mariadb # 开机自启动mysql_secure_installation # 设置root密码mysql -uroot -p # 登录安装pymysql

2020-10-07 22:08:18 36

原创 Python-WSGI接口

Python WSGI规定了Web服务器和Python Web应用程序或Web框架之间的标准接口,主要是为了促进Web应用程序在各种Web服务器上的可移植性。上述这句话翻译自Python官方的PEP333标准:PEP 333 -- Python Web Server Gateway Interface v1.0WSGI接口概述WSGI的含义:Web Server Gateway Interface(Web服务器网管接口)。WSGI接口包含两方面:server/gateway端 及 applicati

2020-10-07 12:13:37 23

原创 Python网络编程

Python 提供了两个级别访问的网络服务。:低级别的网络服务支持基本的 socket,,可以访问底层操作系统Socket接口的方法。高级别的网络服务模块 socketserver, 可以简化网络服务器的开发。socket查看socket类的帮助如下import socket # 导入socket模块>>> help(socket.socket)重点关注初始化函数:__init__(self, family=<AddressFamily.AF_INET: 2&g

2020-10-06 15:56:12 23

原创 Python多线程

多线程基础概念并行与并发并行:同时处理多个任务,必须在多核环境下一段时间内同时处理多个任务,单核也可以并发并发手段线程:内核空间的调度进程:内核空间的调度协程:用户空间的调度线程可以允许程序在同一进程空间中并发运行多个操作。本次主要介绍Python标准库中的多线程模块threading。threading模块线程初始化使用threading模块的Thread类初始化对象然后调用start方法启动线程。import threadingimport timedef wo

2020-10-06 13:55:42 43

原创 Python描述器

引入描述器以stackoverflow上关于描述器(descriptor )的疑问开篇。class Celsius: def __get__(self, instance, owner): return 5 * (instance.fahrenheit - 32) / 9 def __set__(self, instance, value): instance.fahrenheit = 32 + 9 * value / 5class Temper

2020-10-05 20:44:22 54

原创 Python面向对象的魔术方法

魔术方法查看类的魔术方法class A: passdir(A) # 可以得到类所有公有成员输出结果如下['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__'

2020-10-04 20:36:53 27

原创 Python面向对象基础

类的定义类的定义的语法class ClassName: <statement-1> . . . <statement-N>示例代码class Door: def __init__(self, number, status): self.number = number self.status = status类的实例化class Door: def __init__(self, nu

2020-10-02 17:42:57 34

原创 Python异常处理

区分Exception和Syntax Error在写Python程序的时候经常会报错,报错通常有以下两种情况:语法错误(Syntax Error): 部分语法错误属于异常异常(Exception)语法错误语法错误也称为解析错误,是最常遇到的一种错误In [1]: while True print('Hello!') File "<ipython-input-1-5c66e4fd0ae9>", line 1 while True pr

2020-10-01 15:39:06 76

原创 Python装饰器实现函数动态类型检查

函数动态类型检查的装饰器代码import inspectimport functoolsdef typeHints(fn): @functools.wraps(fn) def wrap(*args, **kwargs): sig = inspect.signature(fn) params = sig.parameters # 处理kwargs:字典 for k, v in kwargs: par

2020-10-01 12:03:02 51

原创 Python装饰器

引入装饰器如果想在一个函数执行前后执行一些别的代码,比如打印一点日志用来输出这个函数的调用情况那应该怎么做呢?#!/usr/bin/env python# coding=utf-8def logger(fn): # 函数作为参数即fn可以为任何参数 def wrap(*args, **kwargs): # 可变参数args和kwargs print('call

2020-09-30 19:27:50 22

原创 Python IO

文件打开和关闭文件打开和关闭就是两个函数,一个open函数一个close函数open函数的原型open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)前面说open函数返回的是一个file-like对象,但是这个file-like对象并不是固定的,这个对象的类型会随着打开mode的变化而变化。以文本模式打开文件('w&#39

2020-09-30 10:38:15 35

原创 Python拉链法和开地址法实现字典

Python字典(dictionary)是除列表之外python中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。在列表中使用下标索引可以快速的得到对应的值,那么我们需要做的有两件事情:怎样把键计算出一个唯一值怎样把这个唯一值均匀并且唯一的分布在长度固定的列表中怎样把键计算出一个唯一值 因为字典的键是不可变的,可hash的,因此我们可以用hash函数计算key对应的唯一hash值。怎样把这个唯一

2020-09-29 15:09:19 50

原创 Python解析式

在python中经常能够看到形如ret = [x ** 2 for x in lst]这样的赋值语句,对于从C++转到python的人不太容易理解这种for循环的使用,这就是python为了简洁而发明的新语法。python解析式有以下优点:代码简洁,可读性强效率比普通迭代稍高python的解析式具体分为以下四种:列表解析式生成器解析式集合解析式字典解析式下面分别介绍这四种解析式的使用。列表解析式列表解析式的形式[expr for e in iterator]In [1

2020-09-29 09:45:19 32

图像拼接代码

配置环境:VS2010+OpenCV2.4.9 实现了基本的图像拼接,使用的是OpenCV里面的Stitcher类的各个成员函数,分析了Stitcher类,同时给出了拼接技术的流水线。为要用OpenCV做图像拼接技术的人员提供了一个入门教程。

2014-12-13

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除