Jupyter notebooks单元测试
在 Jupyter notebooks 中进行单元测试我们都知道开发过程中应该编写单元测试,实际上我们中的许多人都这样做。对于生产代码,库代码,或者归因于测试驱动的开发过程,这一点尤其正确。 通常,Jupyter notebooks用于数据探究,因此用户可能不选择(或不需要)为其代码编写单元测试,因为当他们在Jupyter中运行时,通常会查看每个单元格的结果,然后得出结论,之后继续。但是,以我的经验来看,Jupyter通常会发生的情况是,Jupyter中的代码很快就超出了数据探究的范围,对于进一步的工作很有用。或者,Jupyter本身可能会产生有用的结果,需要定期运行。也许需要维护代码并将其与外部数据源集成。然后,确保可以测试和验证notebook中的代码就变得很重要。 在这种情况下,我们有哪些选择对Jupyter代码来进行单元测试?在本文中,我将介绍在Jupyter notebooks中对Python代码进行单元测试的几个选项。 也许只是不做? Jupyter notebook 单元测试的第一个选择是根本不做。这样,我并不是说不要对代码进行单元测试,而是将其从notebook ...
Python中的star总结
1. Python中的“*”总结对于一般的Python使用者来说,清楚Python中的“*”号是作为乘法运算符就足够了,但是如果你想要更进一步,想要在Python领域中更进一步的话,就需要了解Python中“星号”的五个强大的用途。 1.1. 1.作为乘法或者是乘幂运算符 作为基础的Python应用,乘法运算和乘幂运算是大家最容易想到的星号作用。上述程序中,单个星号运算符起到了乘法运算的目的,而连续的两个乘号起到了乘幂运算的目的。从结果可以看出,3*3的结果是9,而3的3次方是27。 1.2. 2.接收多个参数当我们在编写函数时,有时候函数的参数数量太多,所以我们想尽量的缩短程序,让程序看起来简介,除此之外,我们可能不知道函数有多少个具体的参数,这个时候,就可以用星号来发挥作用。 上述程序中,单个星号起到的作用是帮助我们捕获多个位置参数,然后将其放入到字典中,需要注意的是,在传入参数时,它的顺序位置需要明确,以方便在函数调用中使用。 而对于双星号的参数,可以帮助我们捕获多个带关键字名字的参数,并放入到字典中去,这样的话,我们在程序内使用的时候,可以根据关键字名字来调用,而...
automake基础
automake基础作为 Linux 下的程序开发人员,大家一定都遇到过 Makefile。用 make 命令来编译程序确实很方便。一般情况下,手工写一个简单 Makefile 并不难;但如果要写出一个符合自由软件惯例、可移植、可维护的 Makefile,就没那么容易了。 本文介绍如何使用 autoconf 和 automake 自动生成规范的构建文件。最终效果是像常见 GNU 程序一样,通过: ./configure make make install 完成构建与安装。 1. Makefile 介绍Makefile 用于自动化编译和链接。一个工程通常包含多个源文件,不是每次都需要全量重编译。Makefile 通过“依赖关系”判断哪些目标需要重新构建,从而节省时间。 手写 Makefile 的常见问题: 规则容易和本机环境绑定。 路径或变量变化后需要手工调整。 跨平台和多人协作维护成本高。 automake/autoconf 的价值在于: 你只需写少量声明式模板(configure.ac、Makefile.am)。 工具自动生成 configure 和 Makefil...
configure.ac介绍
configure.ac 介绍configure.ac 是 Autotools 的配置入口文件。它的作用是:在不同机器上探测编译环境,并生成可用的 configure 脚本与 Makefile。 可以把它理解成“构建前的环境协商脚本”。 参考: https://www.gnu.org/software/autoconf/manual/autoconf.html https://www.gnu.org/software/automake/manual/html_node/index.html 1. configure.ac 到底负责什么核心职责有 4 个: 定义项目元信息(名字、版本、最低工具版本)。 检测工具链、头文件、库、函数是否可用。 定义条件编译和可替换变量。 生成目标文件(config.h、各目录 Makefile、其他 .in 模板)。 2. 常见宏分组(按用途记忆)2.1. 项目初始化1234AC_PREREQ([2.69])AC_INIT([myapp], [1.0.0], [you@example.com])AC_CONFIG_SRCDIR([src...
Helm Introduction
Helm IntroductionHelm 是 Kubernetes 的包管理工具,可以把一组相关的 Kubernetes 资源打包成一个 Chart,并通过统一命令完成安装、升级、回滚与卸载。 1. Chart 基础1.1. 什么是 ChartChart 是一组描述 Kubernetes 资源的文件集合。你可以把它理解为“应用部署模板包”:既包含资源模板,也包含默认参数和值文件。 1.2. Chart 目录结构(Helm 3)12345678mychart/ Chart.yaml # Chart 元数据(必须) values.yaml # 默认配置(必须) charts/ # 依赖 chart 包(可选) templates/ # Kubernetes 模板文件目录(必须) templates/NOTES.txt # 安装后提示信息(可选) .helmignore # 打包时忽略规则(可选) Chart.lock # 依赖锁文件(可选) 2. C...
Jenkinsfile introduce
Jenkinsfile 是 CI/CD 流水线的“代码化配置文件”。 把构建、测试、发布流程写进仓库后,流水线就可以版本化、可复用、可审计。 1. Jenkinsfile 基本语法1.1. Pipeline 的定义方式Pipeline 通常有 3 种维护方式: 在 Blue Ocean 中可视化创建。 在 Jenkins 经典 UI 中直接配置脚本。 在代码仓库中维护 Jenkinsfile(推荐)。 最常见的是第 3 种:和代码一起评审、一起发布。 1.2. 一个最小可运行的声明式 Pipeline1234567891011121314151617181920212223242526272829pipeline { agent any environment { APP_NAME = "demo-app" } parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '部署环境') booleanParam(name: 'RUN_TEST', ...
世上最好的共享内存
1. 宋宝华:世上最好的共享内存共享单车、共享充电宝、共享雨伞,世间的共享有千万种,而我独爱共享内存。 早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进程访问到这片内存。 现阶段广泛应用于多媒体、Graphics领域的共享内存方式,某种意义上不再强调映射到进程虚拟地址空间的概念(那无非是为了让CPU访问),而更强调以某种“句柄”的形式,让大家知道某一片视频、图形图像数据的存在并可以借助此“句柄”来跨进程引用这片内存,让视频encoder、decoder、GPU等可以跨进程访问内存。所以不同进程用的加速硬件其实是不同的,他们更在乎的是可以通过一个handle拿到这片内存,而不再特别在乎CPU访问它的虚拟地址(当然仍然可以映射到进程的虚拟地址空间供CPU访问)。 只要内存的拷贝(memcpy)仍然是一个占据内存带宽、CPU利用率的消耗大户存在,共享内存作为Linux进程间通信、计算机系统里各个不同硬件组件通信的最高效方法,都将持续繁荣。关于内存拷贝会大多程度地占据CPU利用率,这个可以最简单地尝试拷...
Linux中的pushd和popd
通过使用pushd和popd可以极大地提高效率。 1. 使用cd -进行目录切换一般,Shell中都可以通过cd -命令回到之前的目录,下面是一个例子: 123456$ pwd/home/lfqy$ cd /$ cd -/home/lfqy$ 实际上,cd -中,-就相当于变量$OLDPWD。cd -就相当于cd $OLDPWD。下面是一个例子: 123456789$ pwd/home/lfqy$ cd /$ echo $OLDPWD/home/lfqy$ cd $OLDPWD$ pwd/home/lfqy$ 2. pushd、popd和dirspushd和popd是对一个目录栈进行操作,而dirs是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录(这里点从下面可以进一步看到)。 2.1. dirsdirs常用的有两个参数: 选项 含义 -p 每行显示一条记录 -v 每行显示一条记录,同时展示该记录在栈中的index -c 清空目录栈 下面没有显示地对目录栈进行任何操作,我们来看下当前目录栈的内容是什...
论一切都是文件之匿名inode
1. 宋宝华:论一切都是文件之匿名inode01 唯有文件得人心 当一个女生让你替她抓100只萤火虫,她一定不是为了折磨你,而是因为她爱上了你。当你们之间经历了无数的恩恩怨怨和彼此伤害,她再次让你替她抓100只萤火虫,那一定是因为她还爱着你。 为什么?因为这就是套路,是在下偶尔瞟一眼古装肥皂剧总结出来的套路。 Linux里面最大的套路,就是“一切都是文件”。爱一个人,就为她捉萤火虫;做一件事,就让它成为一个“文件”。 为什么自古深情留不住,唯有“文件”得人心呢?因为文件在用户态最直观的形式是随着一次open,获得一个fd,有了这个fd,长城内外,你基本可以为所欲为: 在本进程内,fd的最直观操作是open、close、mmap、ioctl、poll这些。 m map 让你具备把fd透射到内存的能力,所以你可以通过指针访问文件的内容。再者,这个mmap,如果底层透射的是framebuffer、V4L2、DRM等,则让我们具备了从用户态操作底层显存、多媒体数据等的能力;比如,无论是V4L2还是DRM,都支持把底层的dma_buf导出为fd。poll则提供给用户阻塞等待某事件...
《精力管理》读书笔记
介绍精力管理





