今天早上七点过,突然接到家里来的电话,每次在这种时间段接到家里的电话都十分紧张。因为他们知道我起得晚,下班后也只想休息,不会无缘无故来打扰我,所以,这种时候的电话肯定是家里出了点事情。果不其然,如下图,据说一个新手司机踩错刹车,径直撞到我家柱子上面了,还伤了一个路人,公路离我家有十几米远,不知道他怎么做到的。庆幸的是,家里人并没有受伤,只是非常后怕。
1024,再次启航
距离上一次发文已经快半年了,趁这个特殊的日子,我想记录一下这几个月的流水帐,算是我恢复更新的一个开始。感谢对我不离不弃的各位。
这个夏天主要做的事情就是去区县买了一套小两室,作为老婆明年开始在老家县城工作的新家。大家都知道,区县的房子是最没有投资的,并且今年重庆的房价横盘已久,那我们为什么要在这个时间点买呢,还要买最贵的楼盘之一。老婆买房子有自己的原因,而我不阻止她买是考虑到她未来几年都得在这里工作,并且这期间大概率会经历怀孕生娃的过程,如果没有一个便利的购物条件,没有一个良好的小区环境,没有一个稳定温馨的住所,没有一个好闺蜜在同一小区,我是不忍心她一个人在那边的。看房和交易的过程可以说是相当艰辛的,连续两三个月基本上都是每一两周都得回老家一趟,花费了大量的时间,还好,最后在我们领证前几天,收到了放款通知。所以,截止到目前,我们俩的贷款本息已经超过一百万了。
未命名
读《球状闪电》
这是我读的刘慈欣的第三部作品,但是是她早期的作品了,所以感觉有些表达功底没有《三体》的深厚。可以把它当作看作《三体》的前传来看,里面有一些重复的人物,但是真实年代和身份可能又有一些没有重复。
我认为这部作品可以作为一个量子物理科普入门的作品,特别适合对物理或者科幻感兴趣的初学者。这部作品中讲述的大量物理知识其实是有理有据的,甚至用科幻的方式解释了很多我们人类目前还没能解释的事情。看完可能给人一种恐怖的气氛,特别是最后照片里面的人,但我特别喜欢那量子玫瑰。
另外,这部作品是我第一次在微信读书上听完的一部作品,不过各个听书应用目前除了专人录入的作品外,其他的作品的朗读都是机器翻译,体验还是有待加强。
- 美妙人生的关键在于你能迷上什么东西。
- 夜晚的灯塔一直都在,只是灯亮的时候,你才看见它。
- 有时候,人最不能容忍在别人身上看到自己的影子。
- 我发现,当你渴望某样东西时,道德的约束是多么无力。
Python OpenCv使用手册
图片属性获取
获取图片大小
1 | img.shape # 返回一个元组(height, width, pixels) |
图片常用操作
显示图片
1 | # 如果不加后面那两行,可能显示的图片是纯黑色的,无法正常显示 |
伸缩/压缩图片
1 | img = cv2.imrerad('input.png') |
裁剪图片
1 | img2 = img[0:128, 0:512] # 四个点都必须为整数 |
图片匹配/查找子图片出现位置
1 | # 以下代码来自https://stackoverflow.com/questions/50579050/template-matching-with-multiple-objects-in-opencv-python/58514954#58514954 |
视频常用操作
获取视频帧率帧数
1 | movie = cv2.VideoCapture('test.mp4') |
逐帧遍历
1 | while True: |
跳转到指定帧
1 | movie.set(cv2.CAP_PROP_POS_FRAMES, 233) |
使用Redis锁处理并发问题
上周“被”上线了一个紧急项目,周五下班接到需求,周一开始思考解决方案,周三开发完成,周四走流程上线,也算是面向领导编程了。之前的项目里面由于是自运维,然后大多数又都赶时间,所以在处理定时任务上面基本都是自己在服务器上添加crontab
,而不是让多个实例自己去处理定时任务的并发锁,之后Laravel 5.5
开始自带并发锁,我们也打算尽快升级。但是这次项目是Python
项目,无奈只能自己实现一下,以下这个方案实现起来非常简单且易于理解。这篇文章要解决的主要问题是:使用Redis锁处理并发问题,保证多进程仅有一个实例在运行,当运行中的实例down了后其它实例中的一个能顶上来,保证有且仅有一个实例在运行
1 | import redis |
我们来看看这段程序都解决了并发锁中的哪些问题
- 高并发下,多个进程无法同时获取到锁。这里使用的是
redis.setnx
,如果锁已经存在,其他进程是无法重置锁并获取到锁的。另外当多个进程同时发现有锁已经没有心跳了,使用的是redis.getset
将心跳重置为1,都能set
成功,但是get
出来的值多个进程是不一样的,只有真正获取到锁的进程返回的是之前进程的心跳,而其他进程获取到的都是1。 - 有锁进程正常退出,可以使用
atexit
注册进程退出函数删除锁,这里也可以不要,不过下次启动得等新的进程等待几次心跳 - 有锁进程意外退出,退出后心跳不再增加,超过
free_lock_try
次数后,其他进程会重新设置并获取锁 - 所有进程全都意外退出,这个问题不是锁来关心的,可以使用
supervisor
进行守护进程。
scala 开发手册
Django Admin 后台管理系统
Django自带了强大的名为admin
的后台管理功能,app名称为django.contrib.admin
,它同时依赖了django.contrib.auth
认证系统和django.contrib.sessions
系统,当然,即使不用admin,后面两者都建议加上,不用重复造轮子。
为了使用它,我们需要先使用
migrate
功能去创建相应的数据库表,直接执行python manage.py makemigrations && python manage.py migrate
即可。运行程序后,直接访问http://127.0.0.1:8000/admin/
就能访问admin了(一般admin的路由都是定义好了的,在urls.py
中有url(r'^admin/', admin.site.urls),
)我们需要先创建一个超级管理员
python manage.py createsuperuser
,按照提示输入用户名密码即可用来登录了如果要让字段非必填,需要在定义model字段的时候就加上
blank=True
参数修改超级管理员密码可以这样做:
1
2
3
4
5# python manage.py shell
from django.contrib.auth.models import User
user =User.objects.get(username='admin')
user.set_password('new_password')
user.save()
PHP 使用Carbon扩展进行时间处理
PHP上最好的时间处理工具。
1 | # 以下都是获得一个时间对象 |
Troubleshooting
- The timezone could not be found in the database: 通常是createFromFormat第一个参数格式没有设置
Django使用七牛云作为自定义的存储系统
Django提供了非常方便的方法以供你自定义存储系统,只需要在项目的任意地方新建一个继承自django.core.files.sotrage.Storage
的类即可。如果是使用七牛云,可以直接使用以下代码,当然首先要安装七牛的sdk: pip install qiniu
: