0%

0X00 前言

2020年要来了,听起来这是个多科幻的年号啊。《银翼杀手》里说2019年底人类就有强人工智能了,可以穿梭宇宙了,甚至可以星际殖民了。然而现在就是2019年最后一天了,我的小爱同学还是像智障一样经常听不懂我说话。

换个角度想一想,90后是不是会觉得60后已经算是老年人了;那么相同时间差算下来20后也会觉得我们90后是老人,然而第一个20后还有一个多小时就出生了呢。

0X01 2019年度分析

2019年是我第一次做整年的规划,大概进度是这样的。正所谓“取法其上,仅得其中;取法其中,仅得其下”,所以给自己的目标定高一些甚至超出自己的能力也没什么不好的,这样可以让自己完成目标的动力最大化的嘛(其实也算是给自己没完成目标找一个借口,哈哈哈)。

1
2
3
4
5
6
阅读20本书【完成】
专业进阶(学习了解新技术)【5/7】
了解五个新领域【4/5】
撰写30篇博客(包含20篇技术类)【27/30】
观看50部电影(包含25部豆瓣top250)【47/50】
减重至75KG(共减10KG)【5/10】

因为我是一个比较喜欢对自己生活做计划的人,之前我没有计划的时候就自己趴在床上玩手机甚至都能玩一下午。所以今年年初的时候就给自己定了一系列的目标,试着打卡式过这个2019,结果发现效果还是挺好的。

其中30篇博客我觉得是可以推荐给同样写博客的同学的,其实一年下来写30篇博客而且又不都是技术类的并没有很难。这样的话不仅可以让自己的博客更饱满还更可以逼迫自己学习,大家一定都会有过那种自己觉得看了几篇博客文档又写了几行代码验证就觉得自己回了的时候吧。其实这种时候如果计划把这部分整理成博客的话,就可以大幅度提升自己的学习效果,毕竟自己也不可能乱写一通就发表了。想必也都知道那句“教别人的同时也非常能提升自己”,其实这里的道理是一样的。我每次写博客都是想尽可能把事情说清楚说明白,如果过程中发现自己说不明白那就只有继续研究这个东西,直到能解释给别人为止。所以说程序员自己写博客传授自己的知识和经验几乎就是百利而无一害的。

观看25部豆瓣top250的电影也非常棒的,再结合前面20本书里包含的那本《认识电影》ISBN: 9787506287081书,感觉近一年来对电影越来越了解了,更多的会去看电影里导演想要表达的东西而不是简简单单的故事了。这本书也非常推荐给喜欢看电影的同学,里面从多个角度介绍了电影的基础知识,对理解电影有非常棒的帮助。

了解新领域就更有意思了。现在网络这么发达(听起来好象是2005年的台词啊),几乎是想要了解的任何一个领域都会有对应领域的大佬做科普,甚至还会有国际一流院校推出的MOOC可以学。想要了解一个新领域的成本越来越低了,没有什么是搜索引擎解决不了的(什么 你说百度?打扰了),尤其是对我这种好奇宝宝(宝宝?)来说简直太棒了。

0X02 2019值得纪念

今年有什么特殊的事情发生吗?让我仔细想想……好多都比较私人,说几个不那么私人的吧。

  1. 年初的时候考了红十字会的急救员证书,真希望永远也用不到这个东西;
  2. 换了一台4核8线程32G内存的电脑(这也算很值得纪念了哈哈哈哈);
  3. 跟去年比起来,今年真正属于自己的时间多了不少,也就做了不少饭,厨艺精进哈哈;
  4. 我成UP主了,当时买电脑发现网上Thinkpad T480的评测很少,获取不到重要信息,就自己录了一个,现在使用体验和拆机视频一共播放量都有六万了;
  5. 因为《脱口秀大会》的缘故,去看了本地的一场线下脱口秀,虽然当时没抱太大期望但是结果却意外的好,大家有兴趣的可以试试线下脱口秀;
  6. 卖掉PS4换了一台Switch(不是PS4不好,是最近想玩的PS4游戏都玩过了,正好玩Switch等明年的PS5)

0X03 2019看到的好电影

这里给大家推荐一些今年看过的电影,都是我觉得非常棒的,豆瓣top250里的就不算了哈。

《利刃出鞘》:这是一部悬疑电影,虽然号称007大战美国队长,但实际上并没有动作戏。我觉得悬疑篇最重要的两点:一个是主角和观众的信息对等,不要出现主角知道的一些事情没有告诉观众的情况,比如我们还在想这个杀人凶手是怎么逃离人群的时候,结果其实人家会隐身??第二个是让观众一直循环在”我是个天才-我是个智障-我是个天才-我是个智障“之间。

《双子杀手》:这个电影说实话剧情上不算多好,不过由于是李安指导的120fps电影,机会可是不多啊。就赶紧买了杜比影院的票去体验2K 120FPS的杜比影院技术了。真的太棒太棒了,120FPS使得动作极为流畅,维尔史密斯的每个动作都清晰且流畅;杜比影院的超高对比度使得一场暗处动作戏相当好看。一场电影看下来真的是意犹未尽的感觉,甚至有着不输给复仇者联盟的视觉震撼。

《流浪地球》:这个电影其实是没什么问题的,非常棒。虽然不是顶级制作但是也没有一些人嘴里的那么不堪。电影总体来说即使去掉所谓情怀和国产的tag也是一部非常不错的电影呢。

《复仇者联盟4》:这个电影基本就是一个字“爽”。就像大佬说的这叫 movie 而不是 cinema,不过这也不是什么贬义啦。这也是我为数不多二刷的电影,确实很好看。

《徒手攀岩》:这部电影出乎意外的好看。我以为会很无聊,结果全程双手握紧直出冷汗。喜欢看纪录片的同学强烈推荐这部记录片。

《中国机长》:跟上面的徒手攀岩一样,我以为会很无聊,结果全镇双手紧握直出冷汗。(还真就一样,完全一样哈哈哈哈哈)都说看了这部电影就不敢坐飞机了,我反而觉得有这样的机长坐镇我更敢坐飞机了呢。

0X04 2019玩到的好游戏

要说今年玩到过的好玩的游戏,如果直让我选一个,那就是《战神》。虽然这个游戏是去年出的,但是也太棒了吧!!!

故事非常棒,整个算下来大概就是小战神和奎爷打算把小战神母亲的骨灰扬了。(???哈哈哈)

认真认真,这里说一个我最喜欢的点。游戏的越肩视角一镜到底是真的厉害,完全不会打断游戏流程。假设玩家永远不挂的话,那就可以保持整个镜头从头到尾不动的。为了满足这个点就设计出了我在游戏里最喜欢最喜欢的一个小细节:传送。一般游戏传送就两种,选择目的地后切换界面读条,再切换载入;要么就是上车上马然后一路自动跑过去要等很久;但是战神里的处理简直太棒了!游戏里有固定的传送点,是一堆散落在地上的石头,奎爷靠近的时候石头就自己围起来变成门,中间是白色的像是传送门一样;然后奎爷就进入到白色的空间里,里面是一个类似迷宫的小地图,在里面跑哇跑哇跑哇,突然前面又刷新出了一个白色的门,出去就到了目的地。其实类似迷宫的那个小地图八成是一直在内存里的(或者奎爷离传送门近的时候开始加载的),所以我们进入小地图的过程是无缝的;从小地图里跑来跑去自己以为是跑向传送门,其实是游戏正在加载目的地的资源,等加载好了就在你面前放一个传送门,直接出去无缝衔接。这个设计真的是让我惊叹不已。

0X05 总结

总的来说2019年过得还是挺好的,希望2020年过得更好吧~~~ 大家新年快乐!!!

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

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
rabbitmq:
# image: rabbitmq:latest # 如果要用不带web界面的可以选这个
image: rabbitmq:management # 带有web界面的镜像
container_name: rabbitmq # 取一个容器名
ports: # 开放两个端口,当然没有web界面的话就不用开放15672了
- "5672:5672"
- "15672:15672"
environment: # 这里设置登录名和密码
RABBITMQ_DEFAULT_USER: shawn
RABBITMQ_DEFAULT_PASS: **************** # 高科技加密(骗你的,我自己打的星号

这样以来服务就启动起来了,可以访问http://127.0.0.1:15672看到RabbitMQ的web登录页面了。

docker-compose并不是docker的一部分,而是一个用Python编写的docker编排工具。如果电脑上的话可以使用pip install docker-compose来安装它

阅读全文 »

0X00 url的源头

使用django-admin startproject test_project创建一个新的Django项目之后在settings.py中可以找到一个配置项ROOT_URLCONF,默认情况下值为项目目录下的urls,也就是test_project.urls

默认情况下这个urls.py的内容大致是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"""learn_django URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path


urlpatterns = [
path('admin/', admin.site.urls),
]

这里就是根目录了,新项目使用python manage.py runserver启动之后访问http://127.0.0.1:8000/就是访问到这个url的根路由了,默认情况下有一个admin/可选,也就是Django自己的后台管理页面。Django所有的url都是从这个文件发散出去的urlpatterns里除了将url路由至view就是其他的子url配置。换句话说,通常情况下DJango中所有url最终都应该被路由到View上才对。

阅读全文 »

0X00 Python3的super

Python中对象的概念都快被大家淡忘了,因为一切都是对象(话虽然这么说,但是怎么可能淡忘对象呢)。看下面一段Python2的代码,Python2中麻烦的就是这个super()的用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Human:
def __init__(self):
self.name = 'human'
print 'hello, i im', self.name


class Student(Human):
def __init__(self):
super(Student, self).__init__()
self.name = 'student'
print 'hello, i im', self.name


a = Student()

在初学Python的时候,如果是Python2很大可能会在super(Student, self).__init__()这段迷惑好一阵子,不过好在Python2马上就要凉透了,在Python3中可以将代码改写成如下方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Human:    # 不用强行继承自object了
def __init__(self):
self.name = 'human'
print('hello, i im', self.name)


class Student(Human):
def __init__(self):
super().__init__() # super的用法也更明了
self.name = 'student'
print('hello, i im', self.name)


a = Student()

其中super的用法由super(Student, self).__init__()改成了super().__init__(),看起来清晰多了,在使用Python3后不建议以任何理由使用老式Python中的super调用。

阅读全文 »

0X00 使用docker部署的优势

在使用docker部署之前,一般都是直接将MySQL和Redis这类服务直接安装在机器上的。以至于好多新手才开始安装使用的时候经常会出问题,出了问题解决不了就重装系统然后再重装软件,而且如果想同时用MySQL5和MySQL8就非常麻烦了。话说回来,在生产环境服务器上其实还是很多直装的服务的,不过其实使用docker部署一套相同的环境是非常有利于自己本地开发的。

我个人看来使用docker部署的优势有这几点比较明显的:

  1. 很容易做到开发环境、测试环境和生产环境的“环境与版本”大统一;
  2. 很容易在开发环境本地同时部署多套不同版本的同一服务;(比如你负责8个项目,这8个项目要用8个不同版本的MySQL)
  3. 能很快部署一套开发环境;(事实证明在一台网络环境好的机器上,能在5分钟内部署一套数据库)
  4. 整理好配置文件后可以很容易备份整套配置;
  5. 安全问题,在物理机上直接装了MySQL,如果部署不够仔细的话有数据库被攻破后危及服务器的风险,而Docker部署的由于容器所在就不会有这种问题;
阅读全文 »