Coding 的痕迹

一位互联网奔跑者的网上日记

0%

背景

被封在寝室,一直以来使用 easyconnect-docker 连接校园网(参考好友 @zhangzqs 的文章 # Linux下优雅地通过docker-easyconnect实现内网访问。然而最近总是出现连不上的情况:

1
2
3
4
5
6
$ sudo ./easyconnect.sh
WARNING: logging deactivated (can't log to stdout when daemonized)
auto login is disabled
auth failed, please check if the vpn address is valid and reachable!
login failed!
svpn stop!

由于对 WireGuard 感兴趣,考虑到现有条件:

  • 宿舍有一条中国电信商业宽带,带公网 IPv4 地址,已配置好 DDNS

  • 校园网内有稳定开着的 Linux 服务器

  • 阿里云公网上用 frp 转发流量,在传文件的场景下很贵

便打算使用 WireGuard 从校园网向宿舍建立一条虚拟链路,临时代替学校的 VPN 服务。

阅读全文 »

近几个月一直在使用 Manjaro Linux + KDE 桌面环境作为自己工作使用的系统和环境。

最近一段时间经常出现打不开应用程序的情况,每次需要重启解决,十分苦恼。系统也没有给出任何错误提示,今天决定好好研究一番。先找到了一篇 《ARCHLINUX KDE常常无法启动程序》,作者认为是 hostname 的问题,心里感觉不是很像,因为我的主机名曾经配置过,hosts 文件也没有什么问题。

对了,为什么不看看系统的报错信息?!在 Dolphin 中,Show Panels - Terminal 打开终端,然后执行一个 X 窗口程序,比如 xclockkate,提示(大意):

1
Maximum number of clients reached
阅读全文 »

权威服务器

权威服务器是保存 DNS 名称记录(包括 A、AAAA 和 CNAME)的服务器,简单地说,DNS 记录归它管。非权威服务器根据以前的域名查询来构建缓存文件。它不存放原始名称记录。我们平时使用的如腾讯 DNS (119.29.29.29)、114 DNS (114.114.114.114)均是非权威服务器,负责转发查询与缓存 DNS 记录。

在上一篇《网站安全的一点思考》探究的过程中,我们通过 Wireshark 抓包了解了 DNS 递归查询过程,概述如下:

  1. 查询时会携带期望得到的记录,如正常查询时会请求对应域名的 A 记录。

  2. 客户端会首先查询根域名服务器列表,并从中选择一个;此后,它向所有遇到的服务器查询 sunnysab.cn 所对应的 A 记录。根域名服务器自然不知道,于是返回了 cn 对应的名称服务器(NS 记录)a.dns.cnb.dns.cn 等等;紧接着,它向 a.dns.cn 查询 sunnysab.cn 所对应 A 的记录,以此类推。

  3. 接第二条,如果我查询一个三级域名,如 a.b.example.com,就要看哪一级别的名称服务器存储了对应的记录。

看上去,权威服务器一般为该层级的 NS 记录,并被上一层域名所知。如,cn. 这一层级知晓 sunnysab.cn. 的 NS 记录并能向查询者返回它。其实,这是由域名注册商(domain name registrar)向域名注册管理局(也称注册局,domain name registry)登记的,且一般 TTL 较长。

那么,怎样自己搭建域名解析服务呢?

阅读全文 »

最近看到清华大学树洞项目的 搭建指南,里面特别强调了主机安全:

【warning必须采取的安全措施】:请务必确保时刻没有子域名DNS解析到服务器真实IP,并且服务器真实IP必须始终保密!

服务器的 IP 如果泄露, DDoS 等情况就有可能发生,同时还会极大地增加攻击面。因此,服务器的HTTP流量必须始终通过 CDN(比如Cloudflare CDN)。在 https://securitytrails.com/dns-trails 网站上,一个域名的全部子域名和 DNS 历史记录都可以轻松查到,因此不能有任何时刻让服务器真实 IP 暴露在外。

于是在 SecurityTrails 上检查了自己的域名 sunnysab.cn,发现有些仅自己使用、或给同学使用的,未公开的域名也赫然在列,令人不解。

阅读全文 »

3月23日,团队收到指导老师的微信消息,学校希望在封校期间通过提前预约的方式开放图书馆,老师要求团队在“小风筝”小程序或 App 中添加图书馆预约功能。具体要求是:图书馆仅开放2层共274个座位,除周一、周二闭馆外,每天有两个时段(后改为上午、下午、晚上三个时段)开放。

老师向团队提出需求的聊天记录

经过沟通团队了解到,2层所有座位将会被编号,四人桌只允许坐一人,六人桌只允许坐两人,入口处由志愿者负责入场检查,图书馆内部由志愿者巡查。

有部分同学提出了方案:

  1. 图书馆多开放一些座位,例如同时开放三楼、四楼,还是很容易做到不拥挤的。但可能由于人手有限,图书馆老师并不同意。

  2. 安排同学将每张桌子所配多余的椅子撤走。但是没有得到采纳。

  3. 直接使用图书馆闸机系统控制进馆人数,每桌座位限制可以通过安排工作人员巡视的方式进行。但此方法由于门禁系统过旧,不大可行。

  4. “第二课堂” 刷卡机可以记录入馆人员信息,但是不方便记录人数。出入时可能存在多次刷卡。

  5. 微信公众号的抢票平台。该方法需要每天发布,较麻烦。

但这些方案并未得到采纳,因而接下来要通过技术方法解决问题。

阅读全文 »

原文自 ZIM file format - openZIM


从2021年起,我们改变了ZIM文件格式中命名空间的处理方式。
这是我们对 libzim 和相关语义中处理条目的方式的重大改变,但这不是二进制 zim 格式的一个 break change。旧的库和阅读器仍然兼容新的 zim 文件。

这个页面仅描述了新的文件格式。旧的文档参见 ZIM file format old namespace - openZIM.

Beginning 2021, we change the way we handle namespaces in ZIM file format. This is major change in the way we handle entries in libzim and the semantics around but it is not a break in the binary zim format. Old library/readers are compatible with new zim files. This page describes the new format. The old format can be found here : ZIM file format old namespace.

Schema File Format.png

阅读全文 »

帮同学写一个邻接表转邻接矩阵的程序,程序读入一个邻接表,节点编号从 1 至 1673,要求转成 1673 * 1673 的邻接表。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 邻接矩阵
# 索引范围 0 - 1672
matrix = [[0] * 1673] * 1673

# 读邻接表
with open('data.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
# 输入数据中下标从 1 开始,1 - 1673,要减 1 处理
t = line.split()
start = int(t[0]) - 1
end = int(t[1]) - 1
matrix[start][end] = 1

# 打开输出文件
out_file = open('output2.csv', 'w+', encoding='utf-8')

# 写邻接矩阵
for line in matrix:
columns = [str(num) for num in line]
line_to_write = ','.join(columns) + '\n'

out_file.write(line_to_write)

运行后,程序所输出的邻接矩阵元素全为 1,不解。

阅读全文 »

Sonic 是一个基于 rust 的语言的轻量极全文检索系统,类似项目还有 tantivyMelliSearch 。因为学习需要,读了项目作者 Valerian Saliou (法)发布 Sonic 时的文章《Announcing Sonic: A Super-Light Alternative to Elasticsearch》,其中提到了这套系统实现的若干技术,于是结合自己看《信息检索导论》所学知识,在此记录一下。

什么是 Sonic?

用作者的话来说就是:

Sonic 是一个快速、轻量和无模式的搜索后端。它摄取搜索文本和标识符元组,然后可以针对微秒时间查询。

Sonic 可以用作重量级和全功能搜索后端的简单替代方案,如在某些用途中替代 Elasticsearch。

Sonic 使用标识符索引而不是文档索引。当需要查询时,它返回外部数据库中的、用于指向匹配的文档的 ID (而非文档本身)。

Sonic 使用 rust 语言编写,以确保性能和稳定性。您可以在您的服务器上托管它,并通过特定的协议 Sonic Channel 将应用程序通过网络相连。然后,您将能够发出搜索查询并用您的应用添加新的索引数据 - 无论您使用哪种编程语言。

Sonic 设计用于快速轻便地使用资源,期待它在没有毛刺的情况下在非常低的资源上运行。在 Crisp 项目中,我们将 Sonic 部署在每月 5 美元的 DigitalOcean SSD VPS 上,仅 300MB 内存和 15GB 磁盘空间就索引了五千万个对象。

sonic-demo

阅读全文 »

从去年底开始,使用 SSH 协议连接校外的云服务器就出现了卡死的现象,同时使用 SSH 从 Github 上同步代码也受到影响,而一旦切换到移动数据网络一切又变得正常。今天想解决一下这个问题。

阅读全文 »

12月底时,易班工作站计划推出一个新春集五福活动。类似于“支付宝”的“扫福字、集福卡”,我们要完成一个“扫校徽、集福卡”程序的设计和实现。这篇文章不是一份严谨的技术文档,而是对整个项目分析和实施过程的记录。

该项目当前发布在 Github. 前端: kite-fu,后端: kite-badgekite-server

截图

阅读全文 »