0X00 前言 2020年要来了,听起来这是个多科幻的年号啊。《银翼杀手》里说2019年底人类就有强人工智能了,可以穿梭宇宙了,甚至可以星际殖民了。然而现在就是2019年最后一天了,我的小爱同学还是像智障一样经常听不懂我说话。 换个角度想一想,90后是不是会觉得60后已经算是老年人了;那么相同时间差算下来20后也会觉得我们90后是老人,然而第一个20后还有一个多小时就出生了呢。 0X01 2019年度分析 2019年是我第一次做整年的规划,大概进度是这样的。正所谓“取法其上,仅得其中;取法其中,仅得其下”,所以给自己的目标定高一些甚至超出自己的能力也没什么不好的,这样可以让自己完成目标的动力最大化的嘛(其实也算是给自己没完成目标找一个借口,哈哈哈)。 阅读20本书【完成】 专业进阶(学习了解新技术)【5/7】 了解五个新领域【4/5】 撰写30篇博客(包含20篇技术类)【27/30】 观看50部电影(包含25部豆瓣top250)【47/50】 减重至75KG(共减10KG)【5/10】…
0X00 使用docker部署RabbitMQ 自从用起docker之后,每次在自己本地开发环境部署新服务就首选用docker了。虽然理论上docker跟裸机部署比起来多多少少有一些缺点,但是跟3分钟部署几乎一些开发环境服务的优势比起来简直都是毛毛雨了。 首先要拉个镜像下来,通常拉镜像都是选择最新的或者特定某个版本,但是RabbitMQ有一点比较奇怪,如果逆向拉带有web管理页面的就不能用latest,而应该选择management。然后确定好镜像之后再了解一下端口情况,RabbitMQ带有web管理页面的话会用到两个端口:提供MQ服务的5672和提供web服务的15672。 下面是我的配置文件,把内容保存为docker-compose.yml然后docker-compose up -d就好了(如果不在yml文件所在目录下执行或者文件名不叫docker-compose.yml的话要用docker-compose -f xxx/xxx/xxx/xxx.yml指定配置文件的位置。…
0X00 url的源头 使用django-admin startproject test_project创建一个新的Django项目之后在settings.py中可以找到一个配置项ROOT_URLCONF,默认情况下值为项目目录下的urls,也就是test_project.urls。 默认情况下这个urls.py的内容大致是这样的 这里就是根目录了,新项目使用python manage.py runserver启动之后访问http://127.0.0.1:8000/就是访问到这个url的根路由了,默认情况下有一个admin/可选,也就是Django自己的后台管理页面。Django所有的url都是从这个文件发散出去的 ,urlpatterns里除了将url路由至view就是其他的子url配置。换句话说,通常情况下Django中所有url最终都应该被路由到View上才对。 0X01 路由到子url和view…
0X00 Python3的super Python中对象的概念都快被大家淡忘了,因为一切都是对象(话虽然这么说,但是怎么可能淡忘对象呢)。看下面一段Python2的代码,Python2中麻烦的就是这个super()的用法。 在初学Python的时候,如果是Python2很大可能会在super(Student, self).__init__()这段迷惑好一阵子,不过好在Python2马上就要凉透了,在Python3中可以将代码改写成如下方式 其中super的用法由super(Student, self).__init__()改成了super().__init__(),看起来清晰多了,在使用Python3后不建议以任何理由使用老式Python中的super调用。 0X01 str 写一个自己的类通常都需要实现一个__str__方法,这个方法用于粗略的展示对象,可以看下面这个例子。 可以尝试先把__str__的定义注释掉执行一下,看到的输出应该是类似这样的: 如果再取消__str__的注释,看到的输出就是这样的了: 可以看到输出变成肉眼可识别的了。 通过 str(object)…
0X00 使用docker部署的优势 在使用docker部署之前,一般都是直接将MySQL和Redis这类服务直接安装在机器上的。以至于好多新手才开始安装使用的时候经常会出问题,出了问题解决不了就重装系统然后再重装软件,而且如果想同时用MySQL5和MySQL8就非常麻烦了。话说回来,在生产环境服务器上其实还是很多直装的服务的,不过其实使用docker部署一套相同的环境是非常有利于自己本地开发的。 我个人看来使用docker部署的优势有这几点比较明显的: 1. 很容易做到开发环境、测试环境和生产环境的“环境与版本”大统一; 2. 很容易在开发环境本地同时部署多套不同版本的同一服务;(比如你负责8个项目,这8个项目要用8个不同版本的MySQL) 3. 能很快部署一套开发环境;(事实证明在一台网络环境好的机器上,能在5分钟内部署一套数据库) 4. 整理好配置文件后可以很容易备份整套配置; 5. 安全问题,在物理机上直接装了MySQL,如果部署不够仔细的话有数据库被攻破后危及服务器的风险,而Docker部署的由于容器所在就不会有这种问题; 0X01 使用docker部署MySQL…
0X00 线程池和进程池 多线程和多进程在平时编程中是挺常见的操作,不过控制进程和线程的数量是一件比较麻烦的事情。尤其是线程,之前在搜索到的关于线程池的内容多数都是“造轮子”,实际上Python已经给我们造好了这个轮子。文档在这里,甚至还是中文的<https://docs.python.org/zh-cn/3.7/library/concurrent.futures.html#module-concurrent.futures> 我这里简单的整理了一下,做个小样例展示出来方便查阅。这里就假装大家对Python有一定的了解,而且也对操作系统中的线程和进程有一些了解了。(哦对了,还需要了解一下GIL才行) 0X01 使用线程池 这段代码执行下来耗时3s大概,因为有两个线程在执行,所以第一次执行了两个任务,第二次两个,第三次一个。可以通过调整range()数量和max_workers来观察输出结果。 0X02 使用进程池 可以看到跟上面线程池的方案比起来就只是把ThreadPoolExecutor换成了ProcessPoolExecutor而已。 0X03 通用的部分…
0X00 前言 实话讲,Django的信号(signal)机制其实用到的时候并不多,但是某些特定场景下一个信号能解决非常大的问题,所以信号这个东西还是值得了解一下的。那么为什么这里只说一些初级内容呢,主要是因为通过调查发现信号的高级知识用(我)的(也)很(不)少(会)。 目前我工作中用到的信号机制也比较少,所以可能有些事情说不到点上还请见谅。那我们开始吧~ 0X01 什么是信号 “信号机制”光从名字上来就大概能懂了。应该就是:某人发出某信号,某人接受到之后做一些事情。所以看起来非常类似我们熟悉的“订阅-发布”模式,实际上也也确实很类似。整个信号机制分成这么几个部分:发布者、信号、接收者和一个函数。 我们传统战场上的一个行为来类比会比较好解释 1. 发送者:类似于战场上打信号弹的人 2. 信号:信号弹(信号弹会分成几种比如红色、蓝色、绿色的) 3. 接受者:各个不同阵地都有人观察着战场的信号弹 4. 一个函数:接受者看到信号弹后会对应作出战术动作…
0X00 IO总是比运算慢 众所周知计算机的IO都要比计算慢很多很多,即时是目前民用的高级SSD:三星970PRO,它的读写速度都要比内存慢上几个数量级,更不要说CPU了。所以软件的IO通常都是瓶颈,很多时候都是CPU等内存,内存等磁盘,磁盘等网络。 那么如何才能提升自己web服务的响应速度呢?通常来说简单的操作有如下两种:换硬盘或者改SQL。 0X01 换硬盘 “这难道不是废话吗?”对呀,这就是废话。当瓶颈出现在数据库的查询上了,那么把正在用的机械硬盘换成固态硬盘当然会提升效率,稍微想想就呢能明白的事情。事实上也是这样的,之前我把同样量级的数据从我们的测试环境搞到我本地,测试环境是企业级HDD,而我本地是三星970EVOPlus的SSD,会发现查询同一个内容就快了好多好多。 那其实这个换硬盘并不是好办法,毕竟不能指望全都用上SSD。而且即使用上SSD了,在查询更复杂或者数据量更多的情况下还是会出现瓶颈。那首先想到的方式就是优化SQL了。 0X02 慢查询…
0X00 前言 这篇博客的目标读者:正在使用Linux桌面,打算长期继续使用下去的同学(这也就意味着熟悉Linux下的基础操作,理解Linux下的常见概念)。 这里有一个我之前写的“在Linux桌面下存活”可以参考一下。 0X01 颜值就是战斗力 Linux也不都是黑色背景白色字的命令行。 首先要换的就是一套主题和图标,不论是KDE、Gnome还是Xfce都可以在对应的网站找到大量的主题,简单换过图标和主题之后再配合一张好看的壁纸,整个观感立马就好了不少。 KDE: <https://store.kde.org/> Gnome: <https://www.gnome-look.org/> Xfce: <https://www.xfce-look.org/> 然后要换的就是字体了,等宽字体我推荐这几个Hack、Source Code Pro、Cascadia Code都很好看,适合在终端、IDE和编辑器里使用。 最后就是zsh主题,如果使用的是zsh的话推荐使用powerlevel10k这个主题,是由powerlevel9k发展而来的,但是速度比powerlevel9k快好多。…
0X00 前言 这篇博客的目标读者:有Linux使用基础,打算使用Linux作为桌面系统的人(这也就意味着熟悉Linux下的基础操作,理解Linux下的常见概念)。 注:这篇博客不讨论不对比Linux/Windows/MacOS等不同的操作系统。 0X01 首先选择一个发行版本 众所周知Linux是一个内核,在这个内核基础上有很多发行版本例如:Archlinux、Manjaro、Ubuntu、Deepin、Debian、openSUSE、Fedora等等。那我们首先要选择一个来安装到自己电脑上。 基于我自己的使用体验比较推荐使用的是:Manjaro、Ubuntu、Deepin这三个,他们共同的优点是:适合初次使用Linux桌面的人。 Manjaro 基于Archlinux,滚动更新。该发行版本最大的特点是软件版本紧跟最新,而且由于是滚动更新所以不用像多数系统一样隔一段时间来一次大版本更新。只要按照系统提示进行常规系统升级就可以将整个系统一直保持在最新的状态。…