https://cdn.programmer.work/icon/avatar.jpg

Shawn's blog

分享我的知识、经验、生活与感悟

文章内容可能过时、有瑕疵、有误、甚至和主流价值观相违背

记一次惨痛的数据恢复经验

0X00 背景

前两段属于并不那么重要的“故事”部分,如果切实需要一些数据恢复的经验和方法的话可以直接跳到0X02部分,给个一键三连就好(哦不对这不是B站视频,那你白嫖好了)。

Linux 中不那么基础的权限

0X00 前言

首先声明这篇博客针对的是中级 Linux 用户,如果你还不清楚 Linux 中的基本权限机制 user/group/otherrwx 的话需要先去了解一下对应的基础内容才行。既然标题上写了是“不那么基础的权限”,也就能看出来虽然内容不是很基础,但是也不会很高深。

Python 中函数的特性

0X00 前言

在正式开始之前我们先要搞明白一个事情,那就是「函数」和「方法」到底有什么区别。首先来看一下在 Python官方文档里的定义。

函数:可以接受零个或几个参数并向调用者返回一些值的一系列语句。

我的家用 NAS 方案

2024 年更新了 NAS 方案

2024 年更新了 NAS 方案

2024 年更新了 NAS 方案

0X00 背景

本来家里有一台群晖的 DS118 单盘位机器装了一块 4TB 红盘,用了三年后存储空间已经告急了。再加上买了相机,有很多照片需要存储;还有两台 MacBook 的 Time Machine 需要备份,而且还有不少下载的电影时不时想要回顾一下,空间就非常紧张了。虽然这台群晖的体验确实是挺好的,不过因为我这款性能太弱了,每次上传照片的时候创建索引都会卡死很久,期间几乎所有操作都是无效的,而且因为是单盘位既没有数据冗余也不能扩展空间,就想着是时候给家里的 NAS 升个级了。毕竟再过不了多久这块磁盘也就被塞满了,到时候再研究迁移就会导致中间断层一段时间,还是不太好。

地址解析协议 ARP

0X00 什么是 ARP

首先纠正一种说法,ARP就是“地址解析协议”,所以严格来说不应该说“ARP 协议”,因为ARP Address Resolution Protocol就已经包含了Procotol了,说“ARP 协议”就相当于是“地址解析协议协议”,很鬼畜。

在 Linux 中使用网桥 bridge

0X00 什么是网桥

普通的桥就是连接本来不通的路的基础设施,网桥就是用来本来不通的网的设备。但是这里介绍的不是真正意义上的物理设备,而是在 Linux 上创建的虚拟设备。Linux 上不仅可以创建虚拟网卡,也可以创建虚拟网桥,所以说我们在 Linux 环境下学习网络知识确实是一个不错的选择(除非你有钱买一堆物理设备🤣)。

2020 年终总结

0X00 前言

一年前的这个时候还在想,2020 年这个年号听起来很科幻,然而 “科幻” 这个词还是还是太瞧不起 2020 了,这一年简直是“魔幻”。

最近这几年来,过得最不舒服的应该要数今年的前两个月了,疫情刚刚爆发,武汉封城,人也不出门,就在家里当咸鱼。本来就焦虑的人们每天看到的新闻也只能让大家更加焦虑,每天看到的都是 “口罩、防护服没有了”,“武汉封城”,“急寻密切接触者”….

防范 CSRF

0X00 前言

https://blog-1251664340.cos.ap-chengdu.myqcloud.com/csrf.png

假设有这么一个银行(肯定要假设,如果真有这么蠢的话这银行也早就倒闭了)的网上银行站点,他提供了一套的 API,通过GET https://api.xxbank.com/transfer?amount=3000&to=shawn可以向 shawn 转账 3000 块。虽然用 GET 来修改数据是挺蠢的但是好像也没什么大问题是吧。

MySQL 查询执行内幕-基础篇

0X00 前言

这篇博文概述了一次查询从一条 SQL 到拿到数据的过程,是掌握了基础的 CRUD 后想要进阶 MySQL 的一条必经路(当然我是说这个只知识是必经路,并不是我这篇文章)。如果有兴趣的话就继续看下去吧~

使用 ab 和 http_load 进行简单的性能测试

0X00 概述

我们经常想要简单测试一下某个页面的性能,或者 REST API 的性能,用 postman 这种程序虽然可以很快的模拟请求出来但是并不方便发送大量请求;自己写脚本虽然自定义程度很高,但是写起来总归还是有点麻烦,而且并不能很方便得输出我们需要的一些常用数据。那这种时候一般就需要找些专业的工具来做这种专业的事情了。下面两个就是平时比较常用的性能测试工具,可以针对某个/某些 url 做性能测试,并且输出相对完整的报告。

SSO 和 LDAP

0X00 前言

上周在新公司接到的一个任务"给 XXX 系统集成 LDAP 登录"。我以前是没有了解过 LDAP 的,一听是集成登录功能,脑子里第一时间想到的就是之前做过的 SSO,但是经过一番搜索发现 LDAP 和 SSO 完全是两回事,而且发现还是不少人不了解其中的一项或两项技术,正好在这儿整理一下顺便分享给大家~

我的第一次跳槽之路

0X00 前言

都说“生活需要仪式感“,那对我来说的第一次跳槽还是值得记录的,用处肯定是没什么,但是总归是给自己一点点生活上的仪式感吧。而且脑子记住的东西可能过几年就忘记了,真正记录成文字的东西存活时间就会长久很多。(记录在网络上就算我自己把博客删了,都还会有垃圾站原封不动的抄走,简直不可能丢🤣)

MySQL 中的四种隔离等级

0X00 What’s this

我们知道 MySQL 中存在“事务”这么个事物(我是故意拗口的,哈哈哈哈哈哈哈);我们也知道事务“一荣俱荣,一损俱损”(要么事物内所有查询均生效,要么均不生效)。那么现在问题来了,银行数据库中有两个事务在同时进行,我们来看一下这两个事务

Python 上下文管理器

0X00 使用 with as 语法

我们写程序经常会操作文件,我们都知道写文件要 open/write/close ,尤其是 close ,没有的话文件就会出问题(有些内容在缓存里,没写入磁盘)。不过我们现在写文件应该没什么人这样写了,都是用with open('filename', 'w') as f的方式来操作文件了。如果说这样做的好处,那多数人都会说“不用手动关闭文件了”,错肯定没错的。

Django 中的 objects

0X00 objects 是个啥

想必所有用过 Django 的人都会用到 Django 自带的 ORM 进行数据库查询。那既然用过 Django 的 ORM 就来看一下这段代码好了, models.Stuent.objects.filter(name='Shawn') 这段代码是什么意思呢?很简单,就是查询到名字为"Shawn"的学生信息。具体来说, models 应该是一个放了多个 model 的文件,Student 是一个具体的模型,filter 是筛选,name='Shawn' 则是筛选条件。那么问题来了,中间那个 objects 是个啥呢?(你知道?知道还在这儿看啥,有这空看看其他文章,打打游戏看看电影不好吗🤣)

记一次 Django save 导致的数据异常

0X00 按惯例得有一个标题

众所周知save是 Django 中最常用的保存数据的方法。但是一般来说大家经常会把“常用“理解成“万能“,然后能用的时候就全用这一种方式。不过编程 中是没有所谓的“一招鲜吃遍天“的,Django 之所以提供了那么多中保存数据的方法也侧面证实了这一点。

如何在 Django 与 DRF 中优雅地校验权限

0X00 Django 中的权限结构、定义

我们知道在创建了一个 Django 项目之后,默认就有两个公开可用的 model:User 和 Group,这两个 model 的一项功能就是用来做权限管理的。系统中会有很多项权限,单个 user 可以配置拥有哪些权限,也可以将权限配置给 group。然后校验单个权限的时候其实就是将 user 本身的权限,和 user 所在的所有组的权限做一个并集,看本次操作的权限是否在这个并集里。在,那就校验通过;不在,那就只有 HTTP 403 了。

SSO 与 CAS

0X00 网站怎么登陆

回忆一下你用过的网站们,一般都是怎么登陆的? “就输入用户名密码登陆呗,要么就扫码登录,要么手机验证码登录,还能有啥”。确实没啥,咱们平时用到的登录方式也就都是这样的,而且这些其实从原理上来说都是 证明你是你 的手段,用户名密码是通过“密码只有你自己知道”为前提的,扫码和验证码是以“手机一定在你自己手上,并且只有你自己能解锁”为前提的。所以其实用户名密码并不是登录的唯一方法,理论上能证明你是你的一切方法都可以用来做授权认证,所以我们可以看到除了密码,出现了扫码、短信邮箱验证码、指纹、人脸、声纹、虹膜巴拉巴拉的。

为什么 Django 需要uWSGI

0X00 运行一个 Django 程序

运行一个 Django 程序可太简单了,从创建项目到运行起来总共也不超过 5 行代码。项目运行起来了就可以打开我们的 vim 或者 IDE 之类的一顿 coding 了。作为最最最开始写 Django 的同学来说到这里也就了解的差不多了,因为大家都是自己写好代码本地测试一下就提 Pul Request 到上游仓库了,然后什么单元测试、数据库迁移、测试环境版本发布甚至可能包含 docker 镜像更新就全都交给 CI 来做了。自己就这么开开心心的写了一段时间的代码,一切都在朝着好的方向发展。突然有一天部门主管或者老大告诉你有一个新项目要你来开个头,先搭好脚手架然后发布上去,后面再来人一起做功能迭代。

Django 相对优雅地导出 CSV

0X00 前言

一见程序员,立刻想到 web 开发,立刻想到后台管理系统,立刻想到数据展示,立刻想到数据筛选筛选,立刻想到数据统计,立刻想到导出 Excel 表格。产品经理的想象惟在这一层能够如此跃进。 –鲁迅:我不是,我没有,别瞎说