Proxy server in Rust (part 1)
What this is all about
Motivation
I’m constantly distracting myself. Very often I visit sites like Hacker News or lobste.rs even though I don’t have time to read the articles. As one can imagine, it doesn’t help very much with being productive. I don’t really have this problem when I’m busy and focused, but when I have 2-3 minutes to spare (because the project is building, my map-reduce is running or I’m waiting for a reply), my habit is to skim through every website that I find at least mildly interesting.
I’ve tried different Chrome extensions, changes in /etc/hosts
or blocking some
domains on my home router, but none of these were flexible enough for me so I
ended up working around them. This is where the idea of writing my own proxy
server came from. The list of features should include:
- redirecting,
- time based blocking,
- delaying (if a site loads slowly, I tend to realize that I shouldn’t be doing this),
- etc.
Why Rust?
The language I used the most was always C++. At work I’m using mostly Go now. Although, the idea of having a strong compiler definitely speaks to me. That’s why I wanted to learn Rust. Also, a proxy server seems to be a project easy enough that it won’t distract me too much from learning the language itself, but hard enough to see whether I like Rust or not.
What can you expect?
This is going to be a journal of my adventure with Rust. I have never ever used this language, so it’s not going to be a tutorial of how to write good Rust, but I’m definitely going to try my best to learn as much as possible and share the knowledge. I have an idea what the borrow checking is about and I have some experience with rich type systems (Hindley-Milner from OCaml), so I hope I won’t be lost completely. :)
Preparations
Compiler
Instalation is very simple: rustup.rs. Some of the Linux distros are going to have Rust in their repositories already.
For convenience, most of the operations (creating projects, building, running)
are done by using a tool called cargo
’. Please, do not forget to install it if
you’re not using rustup.rs.
Documentation and other learning resources
There are lots of good materials for learning Rust. The primary official document of the language and the standard library documentation can be both found at rust-lang.org.
My programming environment
VIM + Racer + vim-racer. Racer is an auto-completion tool for Rust.
Creating a new project
cargo new --bin project
This command creates a template of an executable (--bin
) named project
.
What’s interestinghere is that the project is going to be created under Git
versioning control system by default (nice gesture ;)).
cargo build
builds the project. The default template is the well known Hello
World.
The end of the first post
It’s all for today. In the next post there will be some code, I promise! :)