Shawn's Blog

读书笔记?

0X00 为什么要记读书笔记 本来我也是一个从来不记读书笔记的人,总觉得张无忌师傅的那个"都忘了吗?忘了就去吧"的神奇教诲很有道理,我也是一直都是看书看多少算多少,记住的就记住了,忘了也就忘了。即使这次开始记笔记也不是因为我要把看过的内容都记住,这完全不可能。 那到底是什么原因让我开始记读书笔记了呢?"走神"。没错,就是走神。我看书的时候,尤其是自己没有那么大兴趣的书,我经常机械的读着书然后思路就飞到不知道哪里去了,可能是其他相关的知识、可能是海拉鲁大陆、可能是九界湖、也可能幻想着自己去悬崖边上的麦田里抓那些快要掉到悬崖下的小孩儿了。 所以为了让自己不再继续走神下去,我决定做点什么。最开始的时候是尝试把自己看到的一切内容都真正的"读"出来,读出声来,但是后来发现这种方式不太适合我,每次一本正经得把书里的内容一个字一个字念出来都觉得很奇怪,像是小学生在上语文课一样。放弃读出声来的操作之后就想到了记笔记,目前看起来这种方案还是不错的。 0X01 我平时怎么记…

Linux中诡异的权限(奇怪的权限增加了)

0X00 前言 Linux诡异的权限是怎么回事呢?Linux相信大家都很熟悉, 但是诡异的权限是怎么回事呢?下面就让小编带大家一起了解吧。 Linux诡异的权限,其实就是诡异的权限了。那么Linux为什么会诡异的权限,相信大家都很好奇是怎么回事。大家可能会感到很惊讶,Linux怎么会诡异的权限呢?但事实就是这样,小编也感到非常惊讶。 那么这就是关于Linux诡异的权限的事情了,大家有没有觉得很神奇呢? 看了今天的内容,大家有什么想法呢?欢迎在评论区告诉小编一起讨论哦。 说正事说正事儿。说起Linux权限大家肯定:"这我知道啊,不就是rwx吗,r是读、w是写、x是执行。就这?"当然不只是这个,不过我们还是要从最基础的开始说起来。 0X01 基础权限部分 首先最基础的权限就是 rwx 这种,三组权限针对:所 属用户、所属用户的组、其他用户,每组3位(对应 二进制位)。正因为对应二进制位所以rwx就是三个 二进制位均为1的7;r-x就是对应的101也就是5;r- 就是100也就是4 最基础的rwx权限就不多说了,说一个不是所有人都 知道的,看下面这张截图:这个叫做linux.pdf的文…

2019 年度总结

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】…

在 Django 中使用 RabbitMQ

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指定配置文件的位置。…

Django 中的 url

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…

Python之面向对象 2

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)…

使用 Docker 部署 MySQL 和 Redis

0X00 使用docker部署的优势 在使用docker部署之前,一般都是直接将MySQL和Redis这类服务直接安装在机器上的。以至于好多新手才开始安装使用的时候经常会出问题,出了问题解决不了就重装系统然后再重装软件,而且如果想同时用MySQL5和MySQL8就非常麻烦了。话说回来,在生产环境服务器上其实还是很多直装的服务的,不过其实使用docker部署一套相同的环境是非常有利于自己本地开发的。 我个人看来使用docker部署的优势有这几点比较明显的: 1. 很容易做到开发环境、测试环境和生产环境的“环境与版本”大统一; 2. 很容易在开发环境本地同时部署多套不同版本的同一服务;(比如你负责8个项目,这8个项目要用8个不同版本的MySQL) 3. 能很快部署一套开发环境;(事实证明在一台网络环境好的机器上,能在5分钟内部署一套数据库) 4. 整理好配置文件后可以很容易备份整套配置; 5. 安全问题,在物理机上直接装了MySQL,如果部署不够仔细的话有数据库被攻破后危及服务器的风险,而Docker部署的由于容器所在就不会有这种问题; 0X01 使用docker部署MySQL…

Python中的线程、进程池

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 通用的部分…

Django信号初级

0X00 前言 实话讲,Django的信号(signal)机制其实用到的时候并不多,但是某些特定场景下一个信号能解决非常大的问题,所以信号这个东西还是值得了解一下的。那么为什么这里只说一些初级内容呢,主要是因为通过调查发现信号的高级知识用(我)的(也)很(不)少(会)。 目前我工作中用到的信号机制也比较少,所以可能有些事情说不到点上还请见谅。那我们开始吧~ 0X01 什么是信号 “信号机制”光从名字上来就大概能懂了。应该就是:某人发出某信号,某人接受到之后做一些事情。所以看起来非常类似我们熟悉的“订阅-发布”模式,实际上也也确实很类似。整个信号机制分成这么几个部分:发布者、信号、接收者和一个函数。 我们传统战场上的一个行为来类比会比较好解释 1. 发送者:类似于战场上打信号弹的人 2. 信号:信号弹(信号弹会分成几种比如红色、蓝色、绿色的) 3. 接受者:各个不同阵地都有人观察着战场的信号弹 4. 一个函数:接受者看到信号弹后会对应作出战术动作…