Coding的痕迹

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

0%

和使用 http 类似,测试代码可以这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
use actix_web::client::Client;

#[actix_rt::main]
async fn main() {
let mut client = Client::default();

// Create request builder and send request
let response = client.get("https://sunnysab.cn")
.send().await.unwrap();

println!("{:?}", response);

}
阅读全文 »

借一个 Actix-web::Client 官方的例子,可以这样发送一个 HTTP 请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
use actix_web::client::Client;

#[actix_rt::main]
async fn main() {
let mut client = Client::default();

// Create request builder and send request
let response = client.get("http://sunnysab.cn")
.send().await.unwrap();

println!("{:?}", response);

}
阅读全文 »

最近在用 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));
}
阅读全文 »

在被 rust-postgresql 折磨之后,选择了 diesel 库,这才了解到对象关系映射(Object Relational Mapping, ORM) ,可以像使用本地变量和函数一样操作关系型数据库。这有点像非关系型数据库(如MongoDB)操作方式的意味,不过不知道孰先孰后。

初步认识

diesel 提供了一个叫 diesel_cli 的工具,用来将 MySQL、PostgreSQL 或 Sqlite 上的数据表结构转换成代码,类似于 (schema.rs),或代为执行一些 SQL 语句:

1
2
3
4
5
6
7
8
9
10
// A simple schema.rs
table! {
verifications (id) {
id -> Int4,
uid -> Int4,
login_type -> Int4,
account -> Varchar,
credential -> Nullable<Varchar>,
}
}
阅读全文 »

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

(2021.2.16 更新:建议使用 sqlx 库,而不要直接使用 tokio-postgrespostgres

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

阅读全文 »

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

阅读全文 »

运输层概述

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

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

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

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

阅读全文 »

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

阅读全文 »

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

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

阅读全文 »

导语

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

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

阅读全文 »