编程
文章平均质量分 81
orientlu
学习与创造,提升进步,探索求知
展开
-
python 模块与包
@(python)模块封包组织代码如下一个包的层级组成:├── module_a.py├── package_bc│ ├── __init__.py│ ├── module_b.py│ ├── module_c.py│ └── package_sub│ ├── __init__.py│ └── module_s.py├── package_de原创 2017-08-26 12:13:19 · 550 阅读 · 0 评论 -
python 数据图表呈现
@(python)平时压力测试,生成一些数据后分析,直接看 log 不是很直观,前段时间看到公司同事分享了一个绘制图表python 模块 : plotly, 觉得很实用,利用周末时间熟悉下。plotly 主页 : https://plot.ly/python/安装在 ubuntu 环境下,安装 plotly 很简单 python 版本2.7+$ sudo pip install plotly绘图原创 2017-07-29 12:52:24 · 5667 阅读 · 0 评论 -
python 单元测试 -- unittest
python 单元测试 – unittest@(python)python 单元测试 unittest编写测试用例 test case测试初始化和清理test fixture测试套件 test suit多个测试套件运行使用 mock参考单元测试是对程序中的单个子程序、函数、过程进行的测试,面向白盒测试。 单元测试测试覆盖常用子程序的输入组合,边界条件和异常处理,尽可能保证单元测试代码原创 2017-08-05 12:36:39 · 967 阅读 · 0 评论 -
crontab 定式调度
@(Linux 命令脚本)今天在写脚本在几十个机器上部署,需要通过脚本在 crontab 中新加定时任务 查了下,不同用户的 crontab 在目录 /var/spool/cron/crontabs/ 或者 /var/spool/cron/ 以对应用户名保存。 所以一开始想着简单粗暴来个 echo xxxxxxxxxxx >> /var/spool/cron/crontabs/lcd 就可以原创 2017-07-27 22:37:01 · 592 阅读 · 0 评论 -
shell 当前工作目录的绝对路径
@(Linux 命令脚本)编写脚本中,需要获取执行脚本的绝对路径,今天写脚本的时候不小心踩了个坑,记录下。那个坑的脚本大概是这样的:#!/bin/bashwork_path=$(dirname $0)cd ~/${work_path}## blblblcd /home/lcd/cp ./something ${work_path}问题就出在最后那句,本意我是希望把/home/lcd/some原创 2017-08-03 00:18:33 · 53650 阅读 · 5 评论 -
初试 Protocol Buffer
@(c++)前言如下, 一般情况下,进行消息发送的时候,对于 c/c++, 双方统一使用相同的结构体,发送时直接按内存块丢出去,接收后内存块直接赋值给结构体即可。但是这种对于其他语言,诸如 python,java 就没那么方便了。struct Message { int id; char msg[256];};// 发送端Message client_message = {原创 2017-07-10 22:21:32 · 344 阅读 · 0 评论 -
python super()和classmethod
@(python)super(type, obj)子类中定义了同父类同名的函数后,需要显示调用父类函数时,可以通过 super,也可以直接通过父类名,建议使用 super,比如在初始化函数中调用父类初始化方法,尤其在多重继承的情况下 看看例子:#!/usr/bin/env python# coding=utf-8class A: def __init__(self): p原创 2017-06-16 00:07:15 · 1116 阅读 · 0 评论 -
UNIX IPC
@(linux 编程)一、 消息传递pipe管道一般为有亲缘关系进程提供单路数据流, 通过pipe(int fd[2])创建, 返回两个文件描述符, fd[0] 用于读,fd[1]用于写。 通过 read 和 write 函数进行 操作。父进程创建管道后 fork 子进程, 父子共享该管道的描述符(使用同一个管道)之后双方各关闭一个描述符,实现单向通信,但需要实现双向时,可通过两个通道实现。如下实现原创 2017-03-14 16:57:21 · 621 阅读 · 0 评论 -
linux 链接器 库打桩
@(linux 编程)编译时打桩链接时打桩运行时打桩参考翻看 CSAPP 看到库函数打桩,记录下。linux 链接器支持库打桩(library interpositioning), 允许我们截获共享库的调用,执行自己的代码,通过这个机制,可以给程序调试带来很多便利。库打桩实现有三种: - 编译时打桩 - 链接时打桩 - 运行时打桩以下,参照书中例子,以 malloc 和 free 两原创 2017-09-17 15:04:00 · 1993 阅读 · 0 评论 -
python 配置文件读写
@(python)前言configParserpython2 - ConfigParser基本读写参数替换使用默认参数使用默认配置文件python3 - configparser基本读写默认返回参数替换pyYAMLjason参考前言将代码中的配置项抽取到配置文件中,修改配置时不需要涉及到代码修改,避免面对一堆令人抓狂的 magic ...原创 2018-05-08 21:45:47 · 1146 阅读 · 0 评论 -
Prometheus + Grafana 接入实践
文章目录Prometheus 系统监控数据模型jobs安装Grafana 可视化应用监控接入exporter 接入应用中集成 prometheus client告警 Alertmanager参考Prometheus 系统监控Prometheus 是一套开源的系统监控告警框架,作为 CNCF 中重要的一员,活跃度仅次于 kubernetes,广泛用于 kubernetes 集群的监控系统中。p...原创 2019-09-04 15:40:27 · 3246 阅读 · 0 评论 -
基于opentracing + jaeger 实现全链路追踪
文章目录链路追踪OpenTracingTrace 和 sapn**Inject** 和 **Extract** 操作**Sampling**,采样[OpenTracing 多语言支持](链路追踪当代互联网服务,通常都是用复杂,大规模分布式集群来实现,微服务化,这些软件模块分布在不同的机器,不同的数据中心,由不同团队,语言开发而成。因此,需要工具帮助理解,分析这些系统、定位问题,做到追踪每一个请求...原创 2019-06-10 14:25:03 · 12801 阅读 · 2 评论 -
lua 和 cpp 互调
@(c++)本文编译 lua 版本为 5.3完整测试例子文章目录编译 lua5.3cpp 调用lualua 调用cpplua 主体,require cpp 库cpp 主体,加载 lua,在 lua 中调用 cpp 注册的函数参考编译 lua5.3例子中涉及为 lua 编写 so,(lua require 加载)需要修改 lua/src 下的makefilecppflag 加 -FPI...原创 2018-12-23 14:08:36 · 1379 阅读 · 0 评论 -
Google 单元测试框架
编译 lib手动编译cmake 编译gtest 测试程序断言和 caseFixture使用 gmock编译gmock 测试程序参考Gtest Github 使用 gtest(gmock) 方便我们编写组织 c++ 单元测试。 编译 lib到 github 拉取代码或者下载某个版本的 zip 包到本地目录,参考 gtest 中的 READM...原创 2018-09-04 17:05:06 · 543 阅读 · 0 评论 -
2018 更新下vim 插件
@(linux 编程)[工具使用]周末网上晃荡看到一些关于 vim8 异步和插件的文章,觉得有些新功能挺实用的,所以花了点时间升级下自己的 vim 配置。 本文介绍一些使用到的实用插件以及参考配置。on ubuntu 18插件管理vim-plug之前使用的插件管理工具是 vundle, 没感觉啥问题,但是当看到 vim-plug 以下特点: * 安装方便,直接把 v...原创 2018-08-22 15:00:19 · 6440 阅读 · 1 评论 -
std::sort coredump 说起
@(c++)core 的原因c++ 标准库 sort() 默认采用 < 这个 operator 来排序的, 另个一个重载函数增加第三个参数,指定一个比较的函数,函数接受两个参数。 对于基础类型(int,float..),直接调用 sort(start,end) 即可,对于非基础类型的结构体,可以通过重载对象的 < 运算符或者提供一个比较函数。 详见本文从一个 cor...原创 2018-08-26 11:54:02 · 725 阅读 · 0 评论 -
开源性能压测工具 locust
本文主要针对服务端,web系统的性能测试。性能测试根据不同的测试目的,性能测试具体细分为多种类型 * 基准测试 : 模拟单个用户访问系统的场景,考察系统性能指标,关注系统功能是否正常,为其他压测提供基准参考。 * 负载测试: 模拟系统在正常压力下(预期压力或者系统达到临界)的负载能力,判断是否满足业务需求。 * 压力测试 : 不断提升系统负载知道达到性能拐点,寻找系统最大负...原创 2018-08-07 18:28:08 · 932 阅读 · 0 评论 -
python ssh 库 - paramiko and fabric
标题提到两个第三方库,都是可以实现在 python 中执行 ssh 命令。fabric 是在 paramiko 的基础上封装开发的。所以一般场景下 fabric 会更加容易使用。paramikoparamiko 最直接的是提供 SSHClient,呈现同服务器的一个会话,基本满足我们执行远程命令,文件上下传的操作。client 连接远端服务可以通过提供 key 或者秘钥的方式,如果 使用 ...原创 2018-06-23 22:35:39 · 2021 阅读 · 0 评论 -
C 实现 哈夫曼编码
哈夫曼编码是一种用于数据压缩的无损熵编码,根据压缩数据符号出现频率大小进行编码, 出现频率越高,编码后占bit 越少的变长编码。(其他详细介绍见参考)刚好这两天看到,大学时信息论学完后基本忘记,顺便复习以下,并尝试C代码实现。如何编码假设, 准备压缩的数据源, 评估得到各个符号出现的频率如下, 则其编码过程如下图详细参考 huffman编码 程序流程编码 :遍历准备压缩的输入内容,累计各个符号出现原创 2017-02-08 15:11:14 · 697 阅读 · 0 评论 -
C 链表 - linux 如何实现
链表是基本数据结构, 一开始学习数据结构时, 我一般这么定义, 对应实现从头或尾插入的处理函数,struct int_node_old { int val; struct int_node_old *next;};void old_list_insert(struct int_node_old *head, struct int_node_old *new){ new->原创 2017-02-07 15:56:12 · 374 阅读 · 0 评论 -
Linux 开发 | 学习 Makefile
Linux 开发 | 学习 Makefile@(linux 编程)[开发技能, 工具使用]What is GNU MakeMake 是控制工程中通过源码生成可执行文件和其他相关文件的工具。Make 通过 Makefile 获取如何编译、链接和安装清理工程的信息。本文记录如何为自己的工程编写一个Makefile,主要参考 GNU Make Manual。获取详细信息请直接阅读手册。Linux 开发原创 2016-09-17 21:56:10 · 376 阅读 · 0 评论 -
叙述 C语言编译
@(C语言)[code] 用一段简单的代码,探讨下从C代码到最终可执行文件的编译过程,追根究底。 偶尔了解下底层,也就没那么多莫名其妙了。原创 2016-08-13 14:36:56 · 468 阅读 · 0 评论 -
MQTT - 开始使用
@(嵌入式)个人开发环境 : ubuntu 14.04简介MQTT (MessageQueueing Telemetry Transport Protocol) 全称 消息队列遥感传输协议,是IBM开发的一个即时通讯协议。 MQTT是面向M2M和物联网的连接协议,运行在TCP协议栈之上,采用轻量级发布和订阅消息传输机制。 【MQTT协议角色】— 在MQTT协议中包括发布者,代理器(服务器)和订阅者原创 2016-09-13 22:48:36 · 1441 阅读 · 3 评论 -
python | exit
exit@(python)[语法]exit() and sys.exit()exit is a helper for the interactive shell - sys.exit is intended for use in programs. 交互下用 exit(), 程序中用 sys.exit() The site module (which is imported automati原创 2016-09-13 22:46:33 · 1391 阅读 · 0 评论 -
AnsyncTask异步任务
@(java&android)[android]说明AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。 AsyncTask是个抽象类,使用时需要继承这个类,然后调用 execute() 方法。注意继承时需要设定三个泛型Params,Progress和Result的类型,如AsyncTask例子进度条 继承 AsyncTask ScanProgressBar.原创 2016-09-13 22:43:17 · 535 阅读 · 0 评论 -
数组和指针并不相同
1、文件1: 定义: int mango[100]; 文件2: 引用: extern int *mango; 以上的做法是错误的,第一次定义的是数组,在2 却定义为 指针,就好像: 文件1: 定义: int mango; 文件2: 引用: extern float mango; 回顾:定义原创 2016-09-13 22:39:09 · 503 阅读 · 0 评论 -
Git 使用记录 - 基础
大四开始使用git协同开发,到现在工作一年,从一开始使用模模糊糊,每次遇到冲突都胆战心惊,到如今慢慢感受到这个分布式控制工具给开发带来的便利。越发觉得,掌握工具、使用工具提高效率的重要性!个人开发环境 ubuntu 14.04说明:$ 表示终端执行命令# 命令注释[] 表示可选Git 是一个分布式版本控制工具基本上,使用git工作的流程如下:修改文件,在工作目录中修改文件。暂存文件,将原创 2016-08-08 22:53:31 · 570 阅读 · 0 评论 -
Linux 端蓝牙调试
Linux 端蓝牙调试@(嵌入式)[BLE, ble]毕业大半年一直从事Ble外设开发,发现linux上可以使用bluez进行蓝牙开发,更加便捷的是,有一个python模块对bluez接口进行封装,叫bluepy,给开发测试带来更多便捷。获取 & 安装开发平台 ubunt 14.04$ sudo apt-get install git build-essential libglib2.0-dev$原创 2016-07-21 23:54:26 · 6311 阅读 · 0 评论 -
BLE 广播格式定义
@(嵌入式)[蓝牙]低功耗蓝牙两类报文 : 广播报文 和 数据报文。 本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等蓝牙设备通过广播表明自己的存在, 就好象一个人站在接口大喊“我要脱单,我要脱单,快来牵手…”。 BLE 考虑功耗, 使用了3个广播信道,两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。 从机广播中原创 2016-09-05 16:30:15 · 2343 阅读 · 0 评论 -
FreeRTOS 任务调度 任务创建
@(嵌入式)简述任务状态使用示例数据结构TCB链表任务创建静态创建任务动态创建任务初始化任务控制块栈初始化举例插入就绪链表参考 FreeRtos 简述FreeRTOS 的任务调度在 Source/include/task.c 中实现,包含了任务的创建、切换、挂起、延时和删除等所有功能。涉及到的链表组织见文章 任务状态系统运行过程,任务可能处于以下各种状态,各个状态之间切换原创 2016-10-13 00:30:16 · 5112 阅读 · 0 评论 -
FreeRTOS 软定时器实现
@(嵌入式)简述使用定时器配置定时器服务任务创建 启动 停止定时器修改定时器获取定时器状态定时器实现数据结构定时器控制块定时器管理链表命令队列定时器服务任务回调定时器处理节拍计数器溢出命令处理参考 FreeRtos 简述考虑平台硬件定时器个数限制的, FreeRTOS 通过一个 Daemon 任务(启动调度器时自动创建)管理软定时器, 满足用户定时需求. Daemo原创 2016-10-20 16:29:39 · 31749 阅读 · 3 评论 -
FreeRTOS 任务通知
@(嵌入式)简述通知 API数据结构轻量级二进制信号量获取信号量释放信号量轻量级计数信号量轻量级事件标记组轻量级消息邮箱参考 FreeRtos 简述FreeRTOS 从版本 V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照 FreeRTOS 官方的说法,使用消息通知相比二进制型号量方式解除阻塞任务快 45%, 并且更加省内存(无需创建队列)。Fre原创 2016-10-30 01:32:28 · 3580 阅读 · 0 评论 -
FreeRTOS 信号量
@(嵌入式)简述二进制信号量二进制信号量使用二进制信号量实现创建信号量获取信号量释放信号量中断中释放任务中释放计数信号量互斥锁创建互斥信号量拿锁放锁递归互斥锁获取递归信号量释放递归信号量参考 FreeRtos 简述FreeRTOS 信号量和互斥锁是基于队列实现的, 队列介绍见 << FreeRTOS 消息队列 >>。 使用信号量需要在源文件中包含头文件 s原创 2016-10-27 17:17:09 · 8488 阅读 · 1 评论 -
FreeRTOS 任务调度 系统节拍
@(嵌入式)简述xTaskIncrementTick节拍计数器溢出唤醒超时任务任务时间片轮循完整函数系统延时函数普通延时函数 vTaskDelay循环延时函数 vTaskDelayUntil FreeRtos 简述文章 < FreeRTOS 任务调度 任务切换 > 记录了 FreeRTOS 中任务切换的过程, 提到触发任务切换的两种情况 : 高优先级任务就绪抢占和同优先级任原创 2016-10-18 20:31:22 · 5226 阅读 · 1 评论 -
FreeRTOS 任务调度 List 组织
@(嵌入式) FreeRtos 简述前面了解了 FreeRTOS 的内存管理,接下来看看任务调度,这也是一个操作系统中最重要的一部分,而其任务调度大量使用了链表(list.c 实现),调度器使用链表跟踪不同状态下的任务(就绪、挂起、延时的任务,都会被挂接到各自的链表中),所以这里用一定篇幅介绍下主要供调度使用的链表文件是如何组织的。我目前使用的源码版本是 v9.0.0数据结构FreeRTOS 链表原创 2016-10-03 14:01:53 · 3439 阅读 · 0 评论 -
FreeRTOS 消息队列
@(嵌入式)简述Queue 使用创建一个消息队列发送消息 接受消息Queue 实现数据结构队列创建发送消息任务中调用发送函数中断中调用发送函数接收消息参考 FreeRtos 简述FreeRTOS 任务间通信方式有 * 消息通知 Notifications(V8.20版本开始支持) * 消息队列 Queues * 二进制信号量 Binary Semaphores *原创 2016-10-26 20:08:58 · 20944 阅读 · 0 评论 -
FreeRTOS 内存 Heap 管理
@(嵌入式) FreeRtos FreeRtos 提供的几种 heap 管理在源码目录 Source/Portable/MemMang 下,选择哪种类型管理直接在编译时把原文件加入(比如在 makefile SRC中加入)即可, 堆大小是 FreeRTOSConfig.h 中的常量 configTOTAL_HEAP_SIZE,默认是17*1024,即17KB。FreeRtos 内存管理提供的主要接原创 2016-09-30 23:59:43 · 9562 阅读 · 0 评论 -
FreeRTOS 任务调度 任务切换
@(嵌入式)简述启动调度器移植层调度器启动第一个任务任务切换参考 FreeRtos 简述前面文章 < FreeRTOS 任务调度 任务创建 > 介绍了 FreeRTOS 中如何创建任务以及其具体实现。 一般来说, 我们会在程序开始先创建若干个任务, 而此时任务调度器还没又开始运行,因此每一次任务创建后都会依据其优先级插入到就绪链表,同时保证全局变量 pxCurrentTCB 指向当原创 2016-10-15 17:07:34 · 21429 阅读 · 2 评论 -
读 《C Traps and Pitfalls》Record
读 《C Traps and Pitfalls》Record@(C 语言)[基础, 编程] 薄薄一本书, 却记录了c 编程经常犯下的错误,再读,记录下。词法词法分析 : 大嘴法 编译器分解符号的方法是从左到右读入, 判断可能组成的最大的一个符号a---b // (a--) - b别复杂化, 使用括号,清晰直观字符和字符串char* pStr = "YES" // 'Y', 'E',原创 2016-07-21 23:10:03 · 422 阅读 · 0 评论