0X00 换个方式定义函数 本篇内容不严格区分 function 与 method 🥹 我们都知道在 Python 中如何定义一个函数,只需要 def foo(arg_1, arg_2, args, *kwargs) 就足够了。知道的稍微多一些呢可能知道「Python 中万物皆对象,所以函数的调用也只是调用了函数对象中的 __call__ 方法」,所以我们可以尝试用这种方式调用一个函数 既然可以这样调用了,我们也就可以用类似的方法来定义一个假的 function,可以发现我们自定义了随便一个类,但是只要它实现了 __call__ 方法就可以被当做函数一样调用 0X01 callable 根据上面的方法可知我们可以用 hasattr(obj, '__call__') 来判断某个对象是不是函数,事实上我也确实在同事的代码里看到过这样用的。其实 Python 内置了一个名为 callable 的函数可以用,不过跟 hasattr(obj, '__call__') 并不完全一致 测试代码的第一行 Foo 类因为没有实现 __call__ 方法所以 hasattr 返回的是…
0X00 可以被强制转换的自定义类 但凡写过 Python 的人应该都用过int()这个函数了,而且也都知道这个是将其他类型转换成int类型的内置方法,稍微用的多一点的还会知道这个方法如果传入不能被强制转换的数据时会抛出TypeError的异常。那你知道如何让自己定义的类可以被强制转换吗? 而且按照官方文档来说的话,如果你的class定义了__int__()方法,则int(your_obj)则会返回__int__()的值,如果定义了__index__()则会返回__index__(),如果定义了__trunc__()也会返回__trunc__()。当然是有优先级的,优先级`int index > trunc`,可以使用如下代码分别注释这些方法测试一下 0X01 int 的第二个参数 那你知道它其实还能接收第二个参数吗?其实 int() 方法可以接受第二个参数的,也就是用于进制转换的参数。换言说就是可以用内置的int()方法将其他进制的字符串数据转换成10进制 0X02 hex、 bin 等其他转换方法…
0X00 最常见的持久化方式:挂载出来 相信各位学习使用 Docker 的时候都会出现过好不容易用 Docker 启动了个数据库容器,然后发现只要容器消失之后数据也就一起消失了的情况。然后通常来说会使用这么一个方法来解决问题:将宿主机的某个目录挂载到容器里,这样一来那个数据库容器就可以将数据内容和配置持久化地存储下来了。一般会使用这么一个方法将某个目录挂载到容器内部 docker run -dit --name new_container --mount type=bind,source=/Users/shawn/Downloads/test/test_dir,target=/test_dir alpine 。 下面图中首先创建了一个名为 this_container 的容器,并将其 /test_dir 目录和宿主机的 /Users/shawn/Downloads/test/test_dir 目录绑定到一起了。然后在容器里向 /test_dir…
0X00 前言 & 简介 说起来但凡各位用过 Linux 就应该用过 ssh 了吧,所以怎么使用 ssh 去连接一台服务器、怎么去配置 key 登陆而非密码、怎么允许/禁止 root 用户使用这种问题就不再过多讨论了,这篇文章来介绍一下 ssh隧道 这个东西。 说起来各位在生活工作中肯定遇到过这么一个情况,如图所示:我(A)自己想要访问一台机器(C)但是A和C是不通的,这时候有一台中间的机器(B),A可以访问到B且B和C也是通的(比如说梯子的应用场景)。r当然了你在中间的B机器上开一个 OpenVPN 肯定是可行的,但是一旦你的A连上了 VPN 之后所有流量也就都从B上走了,绝大多数情况下我们其实并不是很需要一个 VPN 而是需要一个轻量化的解决方案。这时候 ssh 隧道就是我们的一个很好的比较轻量化的解决方案,首先它不需要你在客户端和服务器上安装额外的软件(如果你连 ssh 都没装那就不说了);其次它不需要配置文件,为数不多的配置直接写在命令行里;最后它不需要额外的守护进程,你不用了就直接 Ctrl + C 干掉当前进程就行了。 ssh…
0X00 先胡说两句 兄弟们我的年更文章它又来了~如果你看到这篇文章的时候发现发布时间是 2021-12-31 23:59:59 但你的手机电脑告诉你还没到这个时间,不要慌,一定是你穿越了。 我也不知道为啥莫名其妙就开始写年终总结了,而且今年已经是第三年了。人确实是一种很奇怪的物种,领导老师父母让你总结一年的时候暴躁不堪,根本不想写;但是自己突然来了这个念头之后就非常认真的写了一大堆,告诉我不是我一个人有这种“病”🙄 这次的总结打算换一种方法来写,大概分成了这么几个部分:去年的年度计划情况、年内做得不错的事、没做好的事、可以分享给各位的东西。 0X01 翻车的年度计划 2019 年度总结中我说“取法其上,仅得其中;取法其中,仅得其下”,但是今年就不一样了,今年的年度计划基本可以用四个字来形容:我是废物 😢(其实没这么离谱,听我慢慢道来) 今年就不给大家详细一个个的看我的年度计划了,简单说一下吧: 1. 阅读两个有兴趣的开源项目源码【完全没看】 2. 动手写两个自己练手新技能/知识的小项目【几乎没写】 3. 了解 5 个专业技能【就学到了俩】 4. 养成 4…
0X00 前言 如果秉承着「能用就行」的原则,那么这篇文章提到的东西基本都没什么卵用;如果秉承着「写更好的代码」的原则,那么这里提到的东西也许对你有所帮助。 内容主要取材自 _Effective Python_ ,主要是作为自己学习后的一个输出而总结的这篇博客 0X01 使用 % 的 C 风格格式化 首先是沿用自 C 风格的使用 % 进行的字符串格式化方法: 这种写法在写惯了 C 的人身上比较常见,比较熟悉而且也比较简单。不过这种写法有几个问题,首先就是当百分号右侧的变量数量发生变化或者类型发生变化的时候,程序很有可能因为类型转化出现不兼容的情况 (当然了,本来是 %s %4d 对应字符串和数字,现在两个都是字符串了当然就出错了)。如果要解决这种问题的话,必须每次修改都要检查百分号左右的占位符和具体数值是否能对应的伤,而且一旦占位符多了之后还很容易看花眼。 还有一个问题就是填充数值的时候通常需要对具体的值进行一些处理,比如保留某几位长度之类的,这样一来表达式可能会很长,从而显得很混乱 。 我们来看 for…
0X00 背景 前两段属于并不那么重要的“故事”部分,如果切实需要一些数据恢复的经验和方法的话可以直接跳到0X02部分,给个一键三连就好(哦不对这不是B站视频,那你白嫖好了)。 故事大概是这样的,之前我有一台 Synology 的成品 NAS 用来存储我自己的照片、视频、音乐、电脑数据备份和喜欢的电影,不过因为它是单盘位的用了大概三年之后它就几乎满了,我也就开始准备升级 NAS。后来经过一番调研发现自己的需求其实不太适合用 Synology 的成品,因为它性价比低的同时附带的很多软件功能我都不需要,相比于自建 NAS 所需要的计算机知识我也正好具备,就选择自己搭建一台 TrueNAS 出来。准备的配置是CPU Intel G6400 + RAM 8G X 2 + SSD 120G + SSD 240G + HDD 8T X 3 + HDD 4T,其中双核四线程的 CPU 给这台 NAS 用已经是完全没有问题了,同时因为使用 ZFS 也就配备了 16G 的内存,8T X 3 作为主要数据存储并且搭配了 240G 的缓存盘;另外那块 4T…
0X00 前言 首先声明这篇博客针对的是中级 Linux 用户,如果你还不清楚 Linux 中的基本权限机制 user/group/other 和 rwx 的话需要先去了解一下对应的基础内容才行。既然标题上写了是“不那么基础的权限”,也就能看出来虽然内容不是很基础,但是也不会很高深。 另外,这篇博客里提到的好多内容都是并不复杂的东西,但是非常零碎,也许你用了十年 Linux 还是不知道其中的一些小知识点,不过也没什么,毕竟这些知识点的使用率真的很低。 如果你看完了这篇博客有那么一点点收获,那我也算是完成目标了;如果你看完后发现所有的内容都是你以前就知道的,那我只能说你对 Linux 权限这部分的掌握超过了大多数人。因为我确实给周围好多人分享过这些内容,从刚实习的朋友到比我工作经历多很多综合实力也强很多的人,几乎没有谁是完全了解这些内容的。(所以说虽然这篇博客并不难,并不是什么高深的知识,但是我比较有信息让你从中获得那么一点点的收获) 本博客不涉及某个命令的具体用法,只起到一个让你“知道自己哪里不知道”的作用。如果想要仔细了解某个命令或者某个机制,可以自行搜索相关资料。 0X01…
0X00 前言 在正式开始之前我们先要搞明白一个事情,那就是「函数」和「方法」到底有什么区别。首先来看一下在 Python官方文档里的定义。 函数:可以接受零个或几个参数并向调用者返回一些值的一系列语句。 function : A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body. 方法:在类里定义的函数。 method : A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).…
2024 年更新了 NAS 方案 2024 年更新了 NAS 方案 2024 年更新了 NAS 方案 0X00 背景 本来家里有一台群晖的 DS118 单盘位机器装了一块 4TB 红盘,用了三年后存储空间已经告急了。再加上买了相机,有很多照片需要存储;还有两台 MacBook 的 Time Machine 需要备份,而且还有不少下载的电影时不时想要回顾一下,空间就非常紧张了。虽然这台群晖的体验确实是挺好的,不过因为我这款性能太弱了,每次上传照片的时候创建索引都会卡死很久,期间几乎所有操作都是无效的,而且因为是单盘位既没有数据冗余也不能扩展空间,就想着是时候给家里的 NAS 升个级了。毕竟再过不了多久这块磁盘也就被塞满了,到时候再研究迁移就会导致中间断层一段时间,还是不太好。 一般来说自己家里的 NAS 有几种方案,这些方案各有其优劣,都有适合和不适合的群体,可以根据自己的实际情况进行选择。 上下文提到的 FreeNAS 同时表示 FreeNAS 和 TrueNAS 1. 群晖:简单易用、几乎不需要任何计算机专业知识、体积小功耗还低、软件套件强大、软套件强大、软件套件强大…