生命游戏
有一句话叫做:”大道至简”.意味真正的道理用很简单的方式就能表达。越是复杂的理论其核心就越简单,这样的说法在算法当中尤其如此,因为很多人评价计算机就是0与1的变化,也只有加法,其余所有东西都是通过组合变化出来的。而生命游戏亦是如此! 诞生生命游戏(Game of Life)是由英国数学家约翰·康威于1970年发明的一种细胞自动机。康威在1968年开始研究细胞自动机,他的目标是设计一个简单的模型来模拟生命的演化。 康威最初并没有打算将这个模型命名为”生命游戏”,他只是希望通过这个模型来研究生物学中的一些基本概念,比如细胞的繁殖和死亡。 生命游戏的诞生可以追溯到康威在1969年参加了一个关于细胞自动机的会议。会议上,康威向与会者展示了他设计的这个模型,并用一个计算机程序演示了它的运行过程。会议上的人们对这个模型非常感兴趣,纷纷提出了各种问题和建议。 在接下来的几年里,康威不断改进和完善这个模型,引入了更多的规则和变化。最终,他将这个模型命名为”生命游戏”,并于1970年在科学杂志《科学美国人》(Scientific...
python当中的range_map
在python当中的字典能让使用者快速找到对应的数据值,但是如果想要实现这样的一个字典: 1234_dict = { [1,5):"a", [5,10):"b"} 能让操作者在仅知道一个数值就可以索引到范围对应的那个value,如_dict[3]输出"a"该怎么做呢? 解决办法可以借助python库bisect对字典进行重写解决该问题,bisect相关信息就不过多阐述了,简单来说就是通过排序算法,定位指定值在范围内的位置,再通过索引找到位置。代码如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354from bisect import bisect_left, bisect_rightfrom collections.abc import MutableMappingclass...
文件md5校验
从网络上下载大文件时,官网一般都会提供一个MD5、SHA1或SHA256值,这是用来校验文件完整性的。因为从网络上下载大文件具有不确定性,可能会受很多因素影响,比如网络抖动导致文件下载不完成,文件被恶意篡改等,这些问题都会导致最终下载的文件无法正常使用。 针对小文件(<500MB)直接以二进读模式(rb)加载进来,然后计算。 123456789101112import hashlibdef encrypt(fpath: str, algorithm: str) -> str: with open(fpath, 'rb') as f: return hashlib.new(algorithm, f.read()).hexdigest()if __name__ == '__main__': for algorithm in ('md5', 'sha1', 'sha256'): hexdigest =...
获取exe文件图标
lnk文件图标需要找到对应的exe文件所在真实路径才能获取图标,不能够直接获取。dll与没有指定图标的exe文件获取图标会报错。 1234567891011121314151617181920212223242526272829303132333435363738import win32guiimport win32uifrom PIL import Imageimport win32com.clientdef pra_lnk(file_path:str): """解析lnk文件""" shell = win32com.client.Dispatch("WScript.Shell") shortcut = shell.CreateShortCut(file_path) return shortcut.Targetpathdef get_ico_from_exe(file_path:str): ...
docker更换国内源
由于Docker的官方默认源在海外,导致了国内服务器使用Docker默认源拉取镜像速度不理想,甚至直接失败等问题,造成了不小的困扰。 解决方式很简单,可以使用国内提供的docker镜像源加速: 123456789# 网易163https://hub-mirror.c.163.com# 中国科学技术大学https://docker.mirrors.ustc.edu.cn# 阿里云https://<你的ID>.mirror.aliyuncs.com# 腾讯云内网https://mirror.ccs.tencentyun.com 下面以网易163源为实例 一、适用于基于 Ubuntu 操作系统的实例:1、执行以下命令,打开 /etc/default/docker 配置文件 1vim /etc/default/docker 2、按 i 切换至编辑模式,添加以下内容,并保存 1DOCKER_OPTS="--registry-mirror=https://hub-mirror.c.163.com" 3、执行以下命令,重启 Docker...
python代码加密
之前工作中需要使用到对python代码进行加密,因为许多核心代码设计到重要信息,不能暴露给客户。但是python作为一种脚本语言,既要保证运行部署方便又要考虑到代码破译的安全性问题。 编译加密编译加密就是常见的将python代码编译成为以后缀.pyc的文件,虽然不影响使用与部署,但是可以被反编译,直接使用uncompyle库进行反编译即可得到结果 代码混淆代码混淆在我之前的记录当中提起过,网站 优点: 简单 不可逆 不影响逻辑 缺点: 对于项目来说不友好 混淆不可控 逻辑依然可读 打包成exe文件python可以使用pyinstaller将文件打包成exe文件,但是对于项目部署来说几乎全是缺点: 内部路径找不到 资源文件不好打包 部署使用麻烦 难以控制 生成使用 Cython它的原理:将 .py/.pyx 编译为 .c文件,再将 .c文件编译为 .so(Unix) 或 .pyd(Windows) 1pip install...
Too many open files 解决办法
近期使用Linux操作系统的时候用到了多进程,导致同一时间内文件打开数量超过限制,从而导致进程卡死问题,在网上找到了以下解决方法 单个进程打开文件句柄数过多ulimit中的nofile表示单进程可以打开的最大文件句柄数,可以通过ulimit -a查看,子进程默认继承父进程的限制(注意,是继承,不是共享,子进程和父进程打开的文件句柄数是单独算的)。网上还有一种解读是nofile表示单用户可以打开的文件句柄数,因为他们在limit.conf中看到类似于openstack soft nofile 65536,便认为是openstack用户最多可以打开的文件句柄数。该解读是错误的,openstack soft nofile 65536表示的含义是当你执行su - openstack切换到openstack用户后,你创建的所有进程最大可以打开的文件句柄数是65536。要查看一个进程可以打开的文件句柄数,可以通过cat...
git提交规范问题
一直以来个人提交git都是做了啥直接写啥,虽然尽可能的写得很详细但是时间一久难免忘记当时到底是做什么功能。受到同事的提醒,他将他使用的git提交规范推荐给了我,使用了一段时间后感觉确实工作内容看起来更加清晰了,虽然只是几个简单规范,但是受益匪浅。 git 提交规范为什么要制定提交规范? 便于程序员对提交历史进行追溯,了解发生了什么情况。 一旦约束了 Commit Message ,意味着我们将慎重的进行每一次提交,不能再一股脑的把各种各样的改动都放在一个git commit里面,这样一来整个代码改动的历史也将更加清晰。 格式化的 Commit Message 才可以用于自动化输出 Change log 。 业界通用的Git提交规范: 1<type>(<scope>):<subject> type: 用于说明 Git Commit 的类别,只允许使用下面的标识。 scope: scope用于说明 Commit 影响的范围,比如数据层、控制层、视图层等,视项目不同而不同。 subject: subject是 Commit...
验证码滑块识别
...













