BLCL的博客小馆

归档 · 全部

首页

关于

归档

Python上古代码漫游记

长见识,让大家看看什么是垃圾代码

在以前的文章中,在微信群中,我多次强调,写函数的时候,不要把所有参数放到一个大字典里面作为参数到处传,否则时间久了以后,根本不知道字典里面有哪些数据:1234def parse(data): name = data['name'] age = data['age'] xxx = data['xx']上面这样写,对原作者来说确实简单,但是如果代码还有别人来维护,他就根本不知道这个字典里面有哪些数据。必须要一层一层查找调用链,费时费力。但我是真的万万没想到,还有比上面这种写法更傻X的代码。真的可以称得上是垃圾中的垃圾。我们来看看下面这段代码。现在有一个类A,里面有两千多行代码。还有一个类B,里面有三千多行代码。这两个类里面有一些实例方法,有700多行代码。这些我都忍了。更要命的是,初始化类B..

更多
loading..
Python

一日一技:用一个奇技淫巧把字符串转成特定类型

我们有时候可能会需要把一个字符串转换成对应的类型。例如,把'123'转换为int类型的123;或者把'3.14'转成浮点数3.14。前提条件是不能使用eval或者exec。这是一个非常简单的功能,常规做法直接使用if判断就可以了:123456def convert(data, target_type): if target_type == 'int': return int(data) elif target_type == 'float': return float(data) ...有些同学觉得写if判断麻烦,也可能会用字典来处理:1234567def convert(data, target_type): type_map = { '..

更多
loading..
Python单元测试

一日一技:如何正确为历史遗留代码补充单元测试?

我们知道,在软件工程中,单元测试是保证软件质量的重要手段之一。一个优秀的代码,单元测试的代码量,经常会超过被测试的代码本身。一个理想化的开发团队,可能有三分之二的时间是在写测试,剩下的三分之一时间才是写业务代码。如果你的项目是从一开始就写单元测试,那么你写起来应该轻松又愉快,因为单元测试会促使你的代码自身变成可测试的代码。但如果你接手了一个大项目,里面已经有几十万行代码了,那么给这些代码补单元测试会让你知道什么叫做痛不欲生。你会发现有一些函数,它让你不知道怎么写测试代码。我们来看一个例子:我想测试的是business_code里面,check_data_dup分别返回True或者False的时候,下面代码的逻辑。也就是说,我只关心第18-27行的逻辑。这个时候不关心MySQL和Redis。但是每次测试都要..

更多
loading..
Python

一日一技:Python如何动态替换对象的方法?

今天有同学在公众号粉丝群问了这样一个问题:他的问题,简单来说,就是想动态替换一个对象的实例方法,简化代码如下:123456789101112class Test: def __init__(self, name): self.name = name def work(self, job): print(f'{self.name}正在{job}')def work(self, job1, job2): print(f'{self.name}正在同时做两个工作,分别是{job1}和{job2}')t = Test('kingname')t.work = work当我们在替换之前,直接运行t.work('job'),效果如下:这个同学期望在替换以后,运行t.work..

更多
loading..
networkdatacomospf

HCIE Datacom-01.2 IGP高级特性-OSPF-路由控制

简介OSPF的路由控制包括:调整OSPF的接口开销设置等价路由引入外部路由路由聚合缺省路由通告Filter-Policy对发送的LSA进行过滤对ABR Type3 LSA进行过滤设置LSDB中External LSA的最大数量案例本文章参考华为认证系列PPT等价路由当路由表中存在到达同一目的地址,且同一路由协议发现的多条路由时,若这几条路由的开销值(Cost)也相同,那么这些路由就是等价路由,可以实现负载分担。(OSPF选路基本靠Cost值)设备将按照负载分担的方式从多条等价路由发送报文到同一目的地址。 设置进行负载分担的等价路由的最大数量:12[Huawei-ospf-1] maximum load-balancing numberPS:默认为1,不进行等价路由。命令说明:[Huawei-ospf-..

更多
tgproxy

Telegarf 通过代理访问 TG API 的几种方式

主要分为客户端代理和服务端代理, 一般情况下只需一个就可以了客户端代理clash 增强模式 / clash tun 模式这种情况下 clash 已经接管了所有流量, 直接启动就可以了, 不需要额外设置http agent需要有一个可以访问的 http 代理, 比如 clash 默认启动的本地 http 代理如果是手动写的 v2 配置文件, 可以参考 在 v2ray 中同时开启 socks 和 http 代理 来手动开启 http 代理服务 12345678const Telegraf = require('telegraf')const HttpsProxyAgent = require('https-proxy-agent')const bot = new Telegraf('bot_token', ..

更多
nginxtgproxy

反代Telegram Bot API

必备条件一台能正常访问 TG API 的机器NGINXhttps因为请求 TG API 走的是 HTTPS, 所以这里必须要 HTTPS 反代 核心配置可以自由的把这段 location 添加到已有的 nginx ssl 配置中, 用于实现反代不熟悉的 NGINX 的, 加错了自己修 配置检查, 重载: nginx -t && nginx -s reload1234567891011location ~* ^/bot { ## dns必须写,不然会报502错误 resolver 8.8.8.8; proxy_buffering off; proxy_pass https://api.telegram.org$request_uri; proxy..

更多
loading..
networknetbiosmdns

Ubuntu 局域网广播主机名

背景比如下面的样子, 只显示匿名主机, 不像 windows 一样显示主机名修复步骤因为 smaba 使用的是 netbios 进行发现, 所以就往这方向弄了 修改 hostname 为 .local, 比如 dev.local. hostnamectl set-hostname dev.local修改需广播的主机 hosts 文件, 添加: 127.0.0.1 dev.local 之类的映射安装 netbios 软件: apt install nbtscan扫描内网: nbtscan 192.168.0.1/16路由器更新这个列表可能比较慢, 可以过段时间再回来检查扫描的时候可能会造成网络波动, 需注意… 看到其他的也有说用 mdns 的方式, 安装 avahi 进行多播, 未验证, 详见 Ref..

更多
loading..
linuxstorage

红帽的重复数据删除VDO

简介Virtual Data Optimizer(VDO)以重复数据删除(deduplication)、压缩和精简置备的形式为 Linux 提供内联数据降低。当您设置 VDO 卷时,您可以指定一个块设备来构建 VDO 卷以及您要存在的逻辑存储量。当托管活动的虚拟机或容器时,红帽建议按 10:1 的逻辑与物理比例配置存储:也就是说,如果您使用 1TB 的物理存储,则将其显示为 10TB 的逻辑存储。对于对象存储,如 Ceph 提供的类型,红帽建议使用 3:1 的逻辑与物理比例:1TB 的物理存储将显示为 3TB 的逻辑存储。在这两种情况下,您只需将文件系统放在 VDO 提供的逻辑设备之上,然后直接使用它,或将其作为分布式云存储架构的一部分。由于 VDO 是迅速置备的,所以文件系统和应用程序只会看到使用中的逻..

更多
loading..
networkdatacomospf

HCIE Datacom-01.1 IGP高级特性-OSPF-快速收敛

介绍OSPF和IS-IS都是基于链路状态的内部网关路由协议,运行这两种协议的路由器通过同步LSDB,采用SPF算法计算最优路由。当网络拓扑发生变化时,OSPF和IS-IS支持多种快速收敛和保护机制,能够降低网络故障导致的流量丢失。为了实现对路由表规模的控制,OSPF和IS-IS支持路由选路及路由信息的控制,能够减少特定路由器路由表的大小。本系列文章将介绍OSPF和IS-IS的高级特性,包括:快速收敛机制、路由控制、其他特性等。此文章参考于华为认证系列PPT。OSPF快速收敛概述OSPF快速收敛是为了提高路由的收敛速度而做的扩展特性,包括:PRC(Partial Route Calculation,部分路由计算)和智能定时器。同时,OSPF支持故障恢复快速收敛,例如通过OSPF IP FRR(Fast Re..

更多
1383940414277