技术相关|Linux 虚拟机的安全加固
近期正在部署一个服务,刚刚准备开放公网端口,在开放之前先简单做一下安全加固,以我使用的
Ubuntu 22.04.1 LTS 系统为例。
ssh 加固
更换登录端口
默认的 ssh 端口为 22,为了防止端口扫描&暴力破解,我将 ssh
端口修改为 27001(以此为例)。首先编辑
/etc/ssh/sshd_config:
12# Port 22Port 27001
保存后用 service sshd restart 重启 sshd
服务,即可重置 ssh 端口。
禁用 root 登陆
随后需要禁止 root
账户登陆,首先创建普通用户:useradd -d /home/littlenyima -m littlenyima,然后使用
passwd littlenyima 为新用户创建一个密码。把用户添加到 sudo
用户组:visudo /etc/sudoers
12root ALL=(ALL:ALL) ALLlittlenyima ALL=(ALL:ALL) ALL
然后编辑 /etc/ssh/sshd_config,禁用 root
账户登陆,保存后重启 sshd 服务:
...
技术相关|对 Python built-in pprint 进行拓展
把上一个阶段的工作收尾之后,终于有时间实现一些平时想实现但比较麻烦就一直懒得弄的功能。事情的起因是这样的:刚刚我正在研究
Human3.6M
数据集的标注,这个数据集的标注是一个类似 JSON 的格式。并且除了一般的
JSON 文件结构外,其中还有一些字段的值是高维 numpy
数组。我试着将其中的两项打印出来,命令行瞬间被一大堆各种各样的数值填满了。尽管
IPython Terminal
的输出有自带的格式化功能,但整个输出的格式还是被巨大的数组打乱了。
实际上我平时经常行地遇到这种问题,一般的解决方法是仿照
mmcv.parallel.collate
中的形式写一个递归打印函数,然后把诸如
np.ndarray、torch.Tensor 以及
mmcv.DataContainer 这种高维数据的 __repr__
函数映射为一个形式类似 lambda x: f"{x.shape}, {x.dtype}"
的函数。
这种方式虽然能在一定程度上解决高维数据打印的问题,但是由于函数逻辑未经仔细考虑,打印的效果依然不是非常好,甚至在一些
corner ...
杂谈|还能不能完整听首歌了
本文转载自微信公众号「鸦栖」还能不能完整听首歌了。
前段时间和同学一起去天津转了转,路上聊起已经解散的哪吒乐队和当下搞乐队面临的困境,进而提到了他的一个大学同学。这位同学坚持着在抖音平台上发一些自己弹唱的视频,并且口音有趣会聊天,直播效果不错。后来她差不多算是成为了一个小网红,目前有一百多万粉丝。
在同学的手机上我听了两段她的作品,加起来一共十几秒。听完我陷入了沉思,想当场锐评一下,但想了想感觉说出来就好像是我酸了之后开始冷嘲热讽一样,于是欲言又止。不得不承认,我确实羡慕得不行。这个人唱得怎么样呢?唱得挺好的,音准不错共鸣到位又是网红声线,作为普通人我觉得蛮不错的。有没有缺点呢?也有并且挺明显,气息不太稳(应该是腹部没怎么用力,有的地方声音发颤)并且感觉只是在复刻旋律,没什么个人特点。
当然,仅靠这十几秒很难听出来一个人真正的水平如何,直接评价某某优点某某不足未免过于武断且主观。但我能够确定的是,这不是我想象中百万粉丝的歌手唱出的歌,因此也可以说我就是酸了,怎么唱成这样就能有一百多万粉丝呢??我平时基本不用抖音,所以不是很清楚抖音平台创作者的粉丝体量。不过对比
bilibili 我 ...
杂谈|《波西米亚狂想曲》与流浪者
本文转载自微信公众号「鸦栖」《波西米亚狂想曲》与流浪者。
在开始写正文之前先碎碎念几句,我的公众号又双叒重启了。前两个公众号要么半路弃坑,要么因为想重新规划而注销了,最近又开始想写一些东西,希望这个号可以存活得久一点(x)
这个公众号的名字「鸦栖」来自我在几个月之前做的一个梦:在深蓝色的天空下是铁红色的土地,三个戴着乌鸦面具、身穿皮制长袍的人围着篝火起舞。木柴猛烈燃烧噼啪作响,冒出的火星随着热空气升腾起来。(虽然乌鸦面具是欧洲某个时代的医生的装束,但这个场景更像是某种古老的神秘宗教仪式)
醒来后我便想到了一个与渡鸦有关的名字,但一搜发现已经被注册成商标了,于是我在那个名字的基础上稍作调整变成了现在这个样子。
昨天在学院的晚会上唱了《波西米亚狂想曲》,这首歌有一点难,对于我来说也是一个比较大的挑战。虽然作为乐手上台我已经习以为常,但作为歌手上台演出这还是第一次。一直以来我对歌手的印象都是:只要上台别把词忘了就是成功,但当我自己面对一个舞台的时候,我发现歌手需要考虑的事情也非常多。
不同于在 KTV
想到哪唱到哪,歌手在舞台上不仅需要考虑自己的唱法、真假音切换等一系列技术性问题,还要 ...
技术相关|在内网搭建开发环境
最近依然是在绝赞跑代码做实验,然而因为学长需要在我用的服务器上
debug,所以我换到了组里的另一台机器上。但是这台机器有一个非常坑爹的地方,就是它没法连接外网。我用
ssh 连了一下发现并不能连通,ping
也全是超时,最后先 ssh
到了组里的另一台服务器上,又从这台服务器在内网连,才成功登录。
登录上去后测试了一下网络环境,发现果然只能连接内网,不能连外网。试图定位了一下原因但是无果(感觉很有可能是硬件问题,比如网卡坏了或者机房网线掉了),于是我最后决定通过搭建一系列代理来实现内外网相互连通。下面来记录一下配置的过程,出于安全相关的考虑,以下使用的
ip 地址均为编造的示例地址。
配置正向代理
在内网上,我已经有了一台可以连接外网的机器 A(ip 地址为
192.168.10.1),以及一台无法连接外网,但可以通过内网进行访问的机器
B(ip 地址为 192.168.10.2)。
为了使机器 B 能够访问外网,一个比较直接的方法是以机器 A
作为代理,将流量包在外网和机器 B 之间进行转发。我使用的是轻量级
HTTP/HTTPS 代理 tinyproxy。
首先安装 tinypr ...
技术相关 | 编译 Pytorch 扩展时替换 nvcc 版本
2023-3-28 更新:这一文章中修改 pytorch 源代码的解决方式在 pytorch
最新的发行版(预计为 2.1.0 版本)中将过时。大约一周之前 pytorch
的主分支合并了 一个 pull
request,其对通过修改环境变量来指定 nvcc 提供了支持,现在只需将 nvcc
路径赋值给 $PYTORCH_NVCC 即可。
今天解决了一个有点复杂的环境问题,记录一下解决的过程。
在复现 ReferFormer
时,需要编译一个 Deformable Attention
算子。在编译的过程中,nvcc 使用了一个叫做
--generate-dependencies-with-compile 的
flag。非常不幸的是,我现有开发环境中的 nvcc 并不支持这一个
flag,导致我无法编译这个算子。为了解决这个问题,我首先确定了现有的
nvcc 版本:
1234nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2019 NVIDIA CorporationBuilt on Fri_Feb__8_19:08:1 ...
杂谈 | 我为什么要写作
我发布本文时使用的公众号已注销,欲浏览后续文章,欢迎关注新公众号「鸦栖」。
本文转载自微信公众号「長門有希观察」杂谈 |
我为什么要写作。
我的新公众号成立了,公众号名称「長門有希观察」取自《涼宮ハルヒシリーズ》中的登场人物长门有希。该角色的设定与本公众号的定位有比较高的相似性,因此我借来她的名字,命名了这个公众号。
实际上,这并不是我第一次创立公众号。在三年前的一个冬天傍晚,我窝在床上回想一年以来的种种经历,将万千思绪记录了下来,作为年终总结。苦于没有找到适合将其发表的平台,我创立了一个公众号。那个公众号取《Hearthstone》中的酒馆的意象,意为希望能有一个地方,让大家可以围着火炉喝着酒,听我讲一些自己的故事。正如古诗中所描述的一样——「绿蚁新醅酒,红泥小火炉。晚来天欲雪,能饮一杯无?」
可惜当时好景不长,在这一文章发表后的不久,我们便迎来了长达半年的居家时期。在这段时间里,我的生活单调意志消沉,自然也没有心情再去写些什么东西。这样的状态一直持续了半年,直到我返校之后搭建了个人网站,才又开始进行一些写作——不过这一次是以技术性博客为主,而不再用长篇的文字去记录生活。我的个 ...
笔记 | 一些乐理笔记汇总:基本概念
前段时间被叫去聊天,聊到了汪峰早年的一些作品。其间有人提到,《花火》这首歌创造出了生命短暂却像花火一般爆裂炽热的意境,并且主歌只用了两个九和弦。听完之后我深以为然,然后我转念一想,九和弦的音程是什么样来着?早就不记得了。
由此我进而想到,我的乐理知识过于碎片化,且掌握得也很三脚猫。因此,我在这里开一个帖子,汇总一些乐理的笔记,常来看看也好加深印象。这个帖子应该会偶尔更新,当我看到一些新的知识的时候就整理到这里。
音符的记法:音名、简谱、唱名
音名与钢琴键是相对应的,在钢琴上,每一组包括 7 个白键和 5 个黑键。用
CDEFGAB 七个字母表示的音名即对应于同一组中的 7
个白键。黑键的音是由相邻白键升降半音得到的,由于每个黑键都与两个白键相邻,所以每个黑键都有两个音名。例如,C
和 D 之间的黑键既可以是 C# 也可以是 Db。
虽然 C# 与 Db
对应于同一个音,但是两者不可以混淆使用。因为当音符带有还原符号时,C#
会被还原到 C、Db会被还原到 D,从而产生不同的效果。对于 EF、BC
两组中间没有黑键的音,其也有升降,例如 E# 与 F
为同一个音,这种情况被称为等音。
对 ...
技术相关 | Python 动画引擎 manim 浅度体验与思考
前段时间在写 Wordle
Solver,查阅资料的时候发现了 3Blue1Brown 的 Youtube
频道,在看视频的时候发现频道中的视频基本上都是用一个叫做 manim
的动画引擎做的。我感觉蛮有意思,就安装下来简单体验了一下。
manim
最初是由一位个人开发者开发的,由于其不承诺长期提供支持,后来又出现了
3b1b 维护的 manimgl 版和 manimCE
社区版。这三种的特性与具体用法都存在一定的差异,考虑到 manimgl
版本可以使用 OpenGL
进行渲染,并且已经出现了一些基于它制作的比较高质量的成品视频,我在体验时选择了
manimgl 版。
2023-12-30 更新:近期,一位国内的开发者发布了 manim 的另一种实现 manim3,great
work!
manim 浅度体验
manimgl 使用 pip 即可安装:
12pip install manimglpip install pyopengl
除安装上述包外,还需要安装 ffmpeg 用于视频编解码,以及 LaTeX
以支持公式渲染(推荐使用 Tex Live
发行版,功能相对强大一点)。 ...
教程 | 利用 Github Actions 实现代码推送后自动部署
博客自从搭建以来已经搁置一段时间了,最近想在友链里多加上几个好友的链接,但在我将最新的页面代码推送到远程仓库后,Github
Pages 的部署流程并没有被成功触发。因此,我决定研究一下 Github Actions
的用法,并在此记录一下。
GitHub Actions
可以自动化地实现一些工作流,例如在代码推送或 pull request
发起时,进行一系列测试、打包、部署等操作。当工作流启动时,它会创建一个容器,并安装软件、配置环境,在流程结束后还会将生成的数据推送到指定的位置。
我的博客使用 hexo
框架进行搭建,版本控制采取“开发-部署”的双分支模型。因此,在我需要更新我的博客时,首先我需要在博客的源代码中进行编辑,然后依次运行
hexo clean、hexo server、hexo deploy
进行预览和部署,然后将源代码 commit
并推送到远程,进行版本控制。这一流程可以使用 Github 的 Actions
功能进行简化。利用 Github Action,在代码推送后,Github
服务器可以自动启动编译与部署的流程。
仓库读写权限配置
为了使用 Github ...