Coding的痕迹

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

0%

最近在用 Diesel 查询符合条件的行数时遇到了个问题。按照官方例子

1
2
let count = users.count().get_result(&connection);
assert_eq!(Ok(2), count);

get_result 返回一个 Result,在例子中是 Ok(2)。于是我写了这样一段代码:

1
2
3
4
5
6
7
8
let connection = establish_connection();
let uid_bindings_count = verifications.filter(uid.eq(self.uid))
.count()
.get_result(&connection)?;

if uid_bindings_count < 2 {
return Err(OpError(NoMoreVerification));
}
阅读全文 »

本来标题是“惨痛的经历”,想想去掉了。 ——题记

  在项目中打算使用 PostgresSQL 做主力数据库,发现 Rust 下有个叫 postgres 的库,正好直接拿来用。 Rust 版本为 1.41,postgres 库版本 0.17。库官方给了 example,照着改了下,写了一小段业务代码做测试,然后一晚上就没了

阅读全文 »

  近段时间趁着寒假的功夫,打开了尘封了一段时间的《计算机网络:自顶向下方法(原书第七版)》( Computer Networking: A Top-Down Approach (Seventh Edition ))。在学习的时候,深感计算机网络相关的内容繁多而有趣。于是打算归纳整理书中所学相关知识,结合曾经的开发经验,写一系列计算机网络相关的文章,为日后考研复习使用,也与网上诸位分享,共同探讨这里面的问题。

阅读全文 »

   树的遍历有一个应用,便是目录的枚举。本程序实现了一个类似 tree 命令的功能,便于日后编程时参考。

阅读全文 »

   TCP全名传输控制协议(Transmission Control Protocol),被称为是面向连接的(connection-oriented)。与UDP不同的是,它为程序编写者提供了一个逻辑上的连接。就像一根结实的管道,一般不出错,可以调整大小。它为开发者实现了重传、拥塞控制等特性,并在设计和实现的时候已经尽可能照顾到传输的性能,相当于提供了一套可靠的、高级的传输数据的功能的接口。现在看来,计算机系统就是这样一层一层地向上垒起——一边扩展功能,一边保证可靠性。底层协议和模块服务于上层协议、模块和应用程序,才有了今天软件的百花齐放。

   本文上接 计算机网络(二) 运输层和UDP协议,它定义在 RFC 793(传输控制协议)RFC 1122(Requirements)RFC 1323(高性能拓展)RFC 2018(选择性确认选项) 以及 RFC 2581(拥塞控制) 中。文章内容在避免内容混乱的前提下尽可能做了解释,然而依旧需要一些基础知识去理解。

阅读全文 »

运输层概述

   运输层位于应用层之下,它为应用程序的编写者提供了一套逻辑上“连接”的服务。对于开发者来说,他们只需要知晓一点点网络知识,(一般地)处理完程序逻辑之后便可将数据发送出去,然后等待对方的响应。运输层协议会自动处理连接中遇到的问题,并把无法处理的错误上报给调用者知晓。

网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供了逻辑通信。

   我个人觉得运输层协议的内容比往下的几层更复杂,这一层通常在操作系统内核中实现(书中用了端系统一词)。常见的运输层协议有TCPTransmission Control Protocol)和UDPUser Datagram Protocol)。

  我们先谈谈IP和端口,然后讲讲UDP,最后再说TCP吧。

阅读全文 »

    不知道标题描述得是否准确。社团里布置好了两个海康威视的监控摄像头,但是没有录像相关的设备,想到了之前二百元在闲鱼上淘到的小主机,于是申请买了一块500G的硬盘。

    这个闲鱼上买的小主机,买来的时候是打算做软路由的。性能较差,买来的时候预装的是 Windows XP,我用了不到十分钟,就点了关机,换成了 Debian。原先想用海康威视的 SDK 来写这个工具,毕竟能锻炼下自己C++能力,考虑到录像这玩意催的比较紧,就改用Python写了。

阅读全文 »

导语

    因为 Ankiweb 的服务器实在太慢,另外有网友指出,Anki 可能是一个个人项目,指不定哪天就不见了。稳妥起见,打算趁着寒假的空闲自建一个 Anki 服务器(这样就能好好背单词了)。然而事实证明建这个 Server 的时间能做不少东西……在此记录遇到的坑,想到的一些解决方案,作为纪念,也供将来折腾的人参考。

   由于网上自建服务器的教程很多,重复之处不再赘述。我的目的是补充现有教程很多过时(out of date)的地方。考虑到一部分自建 Anki 的同学在技术操作上存在困难,先说结论:

阅读全文 »

    这真是一次让我觉得着了魔的经历。
    为了得到安全教育考试的题库,事先爬取了几十次模拟考试的网页源代码存着。耽搁了几天,才翻出来打算整理一下。整理的代码中有这么一段:

1
2
3
4
5
# extract_questions.py
for html_file in glob.glob('*.html'):
fp = open(html_file, encoding = 'UTF-8')
page = BeautifulSoup(fp.read(), 'html5lib')
fp.close()

    由于程序正常执行时后续解析的代码有些错误,便在开头的for循环处下断点调试。发现每次在 BeautifulSoup 那一行时会抛出 ExitException 异常。在“表达式”窗口查看 fp.read() 返回了正常的网页内容。但是再向下执行一行时 fp.read() 的值为 ‘’。
后来在Python交互式解释器中进行验证,没有出现这样的问题。
(调试一度陷入僵局)

    后来才注意到,Visual Code 中,在初次“表达式”窗口查看 fp.read() 返回了正常的网页内容。但是再向下执行一行时 fp.read() 的值为 ''。查看 fp.read() 的值会使文件指针指向文件尾…调试工具真的执行了一次 read()
    em…