- 博客(95)
- 资源 (1)
- 收藏
- 关注
原创 “有用之用”还是“无用之用” -#4
这是 Suncle Lab 第 4 期,我会在这里更新区块链、技术、金融、旅行和个人成长相关的内容。每期都会同步发布在我博客,欢迎你邮箱订阅,这样就可以第一时间收到更新推送。读书时代,我们经常会听到老师和家长告诫我们,学习一定要能学以致用,不能产生价值的不要浪费时间。比如在高中,老师会说,一切对高考没有用处的杂事,都应该舍弃,不要看没办法直接增加分数的杂志,甚至《读者》、《意林》、《青年文摘》这类杂志都不建议看。但是庄子在《人间世》中又这样说道:讲人话就是:树木、油脂、桂树皮、树漆这些具有使用价值的物品,都
2022-07-11 00:15:06
2361
1
原创 Python常用模块集锦
Python常用模块集锦常用模块主要分为以下几类(缺失的后续再补充):时间转换时间计算序列化和反序列化:json,pickle编解码:unicode,base64加解密:md5,sha1,hmac_sha1,aes常见装饰器:计算执行时间装饰器缓存装饰器错误重试装饰器延迟装饰器尾递归优化装饰器ini配置文件读取代码整合如下:#!/usr/bin/env python# -*- coding: utf-8 -*-"""Create
2021-03-15 11:03:17
148
原创 排查rtmp协议推流时握手bug
转推流程序的过程:从一个观看地址拉流,然后推流到另一个推流地址。主要用于cdn之间转推,目前市面上大多数cdn厂商都愿意不支持动态转推,因此只能通过转推流程序进行转推。bug现象:使用obs studio推流到微赞可以成功,但是使用Erlang版本的转推流程序推流到微赞却失败。日志如下:14:12:35.926 [debug] payload [{amf,["onBWDone",0,null]}], msgtype[command_msg_4_amf0] 14:12:35.949
2021-03-12 16:36:25
530
原创 趣谈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
3449
原创 基于消息传递的并发模型: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
561
原创 使用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
335
原创 详解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
744
原创 坚持住啊,还在代码屎山中爬行的同事们
"There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton在计算机领域只有两件艰难的事情:缓存失效和对象命名。这还真不是一个笑话。写代码是比较容易的事情,但是阅读别人的代码,那就因人而异了。好的工程师写出来的代码可读性很高,比如我上家公司的同事旭总。一般的工程师写出来的代码就像是一坨屎,比如之前某某几位同事。所以我会经常.
2020-12-15 08:40:17
520
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
2456
原创 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
153
原创 三招搞定你的ubuntu安全问题
本篇主要介绍以下三个部分:反病毒引擎clamav的安装和使用ubuntu ufw限制访问地址ubuntu用户连接失败锁定指定时间反病毒引擎clamav的安装和使用简介 ClamAV是一款开源的反病毒引擎,用于检测病毒,特洛伊木马,恶意软件和其他威胁。 它支持多种文件格式(文档,可执行文件或存档),利用多线程扫描器功能,并且每天至少3-4次接收其签名数据库的更新。Linux发行版并没有太多的病毒,因此大多数使用这种系统的人甚至都懒得使用防病毒软件。 如果确实需要,可以使用ClamAV。
2020-12-11 10:49:34
758
原创 思考一次整体调整Python项目规范性的过程
本篇文章主要是记录整体调整Python数据统计分析项目规范性的过程,以及自己的一些思考。为什么要调整?主要是为了解决数据类程序不容易测试发现错误的现状。调整公共模块出错时抛出错误到业务层,便于报警模块上传错误信息到kafka,最后能主动发出报警邮件。以及方便加入报警之外的其他程序埋点。调整所有Python数据统计分析程序满足pep8规范和Google Python风格规范,减少IDE提示。完善代码注释和文档便于后续维护(之前的开发人员是Erlang风格,主张不写或者少写注释)。认清程序当前
2020-12-11 10:19:57
193
原创 不可缺少的程序埋点
埋点目的对于本次修改的数据统计分析程序的埋点,只是为了统计数据中出现的一些不易发现的错误,全部让程序主动跑出来。但是只要是主动抛出统计数据,都属于埋点。数据埋点是数据分析的准备工作,只有埋点了才可以获得数据进行分析。在做足数据埋点之后,才能拿到想要的目标数据:行为数据:时间、地点、人物、交互、交互的内容;质量数据:浏览器加载情况、错误异常等;环境数据:浏览器相关的元数据以及地理、运营商等;运营数据:PV、UV、转化率、留存率(很直观的数据)整体调整Python项目规范性之后加入错误数据埋点
2020-12-10 15:56:13
165
原创 神兵利器推荐——你一定不能错过的mac alfred工作流
上一篇介绍了我日常高频使用的chrome插件,那就顺便介绍一下mac上最最最能提升效率的Alfred工作流吧。以下是我常用的 Alfred workflow 列表:(几乎每天都会用到)不同的插件,可能有不同作者开发的版本,下面会给出我一直在用的版本,但是你完全可以去选择更适合自己的版本。比如像有道翻译,可以找到很多版本,选择自己喜欢的即可。下面按照顺序一款一款的介绍下。CodeVar生成变量名,支持大小驼峰、常量、下划线,开发者必备的工作流下载地址:https://github.com.
2020-12-10 10:58:40
1415
原创 重新认识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
354
原创 神兵利器推荐——你一定不能错过的chrome插件
最近有朋友问我,有没有什么可以提升效率的chrome插件推荐一下。我看了一下我的插件库,好用的还真不少。既然要推荐给一个人,还不如整理出来,分享给所有需要的人。毕竟,极致利他才能最终利己嘛。话不多说,下面一个一个的推荐,并且附上效果截图。(注意,一定要看完,图中隐藏着很多人梦寐以求的大杀器!!!)技术文章一键分发:openWrite助手安全认证简书、博客园、知乎、开源中国、掘金、SegmentFault等平台,一键群发文章。免费版只有有限的分发次数,但是为了效率,这点费用还是很值得的。公众号排版
2020-12-09 11:20:24
499
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
251
原创 一文搞懂supervisor进程管理
supervisor使用Python编写的进程管理程序supervisor来管理Python程序那是最合适不过了,supervisor基于CS架构,主要有以下两个组成部分:supervisord:supervisord是supervisor的服务端程序。负责启动子程序,应答客户端命令,子程序日志记录,对进程变化发送事件通知等supervisorctl: 客户端命令行工具,可以连接服务器端,进行进程的启动、关闭、重启、状态查看等。重要的一点是,supervisorctl不仅可以连接到本机上的super
2020-12-07 12:19:05
633
原创 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
137
原创 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
173
原创 最简洁的Erlang基础
0x00 说在前面Erlang读音/ˈɜːrlæŋ/。第一次见到的时候总感觉怎么读都读不对,后来在维基上看到Erlang标注了音标,才能准确的读出来,而且也没那么怪异。因为工作才有机会接触这门语言,也因此只有三天的时间可以看《Erlang程序设计》这本书。学习这门语言的时候带着一个工作目标:把一个Erlang日志收集分析统计的代码转换成Python的。而Erlang的风格是尽量不写注释,尽量在写函数名和变量名的时候表达清楚代码的含义。这样一来学习Erlang就成了必要的,很庆幸,领导给了三天时间学习,三天
2020-11-18 12:32:41
3056
1
原创 设计一个基于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
346
原创 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
353
原创 元旦去峨眉山吧,人间值得
每年到了10月底11月初的时候,就会开始计划一年一度的大学室友聚会。前几年关于目的地是没什么争议的,因为其中一个舍友,人称装逼王的旭云在成都电子科技大学读研究生,所以每年都是在成都以及周边聚聚,比如重庆,都江堰之类的。今年比较特殊,装逼王要毕业了,时间很充裕,去哪儿都行。四人小团队第一次遇到在哪个城市聚会的问题。可能很多小伙伴元旦也开始计划元旦出行,但是又不知道去哪儿。那可以看下我们的决策方法,应该有一些借鉴意义。定决策方案既然不知道干什么那就roll一下定聚会目的一年没见了,检查下大家伙有没
2020-10-27 11:00:39
206248
原创 常用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
267
原创 结合公司现状浅谈CMDB
本篇文章结合参考资料中的几篇CMDB的文章再加上目前公司的现状谈一谈CMDB。CMDB概述CMDB:configuration management database,配置管理数据库。CMDB本质上是一个数据库,提供数据的存储、查询、校验等操作,是一个集中式的数据托管中心,托管的内容包含所有的软硬件资产(configuration items)。各个部门各个团队各个系统下属的各种重要的软硬件资产都属于CMDB统一管理的内容。公司运维现状资产现状全国各地区内网不互通。这个就是现状了,因为公司产品是为
2020-10-13 09:41:16
526
原创 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
100
原创 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
3765
原创 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
124
原创 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
373
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
790
原创 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
326
原创 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
128
原创 Python多线程
多线程基础概念并行与并发并行:同时处理多个任务,必须在多核环境下一段时间内同时处理多个任务,单核也可以并发并发手段线程:内核空间的调度进程:内核空间的调度协程:用户空间的调度线程可以允许程序在同一进程空间中并发运行多个操作。本次主要介绍Python标准库中的多线程模块threading。threading模块线程初始化使用threading模块的Thread类初始化对象然后调用start方法启动线程。import threadingimport timedef wo
2020-10-06 13:55:42
407
原创 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
364
原创 Python面向对象的魔术方法
魔术方法查看类的魔术方法class A: passdir(A) # 可以得到类所有公有成员输出结果如下['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__'
2020-10-04 20:36:53
200
原创 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
151
原创 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
899
图像拼接代码
2014-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人