1
Fork 0

Compare commits

...

8 commits

71 changed files with 258 additions and 248 deletions

View file

@ -2,6 +2,7 @@
permalink: "/{{ year }}/{{ month }}/{{ day }}/blog-static" permalink: "/{{ year }}/{{ month }}/{{ day }}/blog-static"
title: "blog? static!" title: "blog? static!"
published_date: "2011-01-15 15:54:00 +0100" published_date: "2011-01-15 15:54:00 +0100"
layout: post.liquid
data: data:
route: blog route: blog
--- ---

View file

@ -22,13 +22,14 @@ You can find the script here: [watch.js](http://tmp.fnordig.de/watch.js). It's m
The small app.js is just this: The small app.js is just this:
socket = new io.Socket('localhost'); ```javascript
socket.connect(); socket = new io.Socket('localhost');
socket.on('message', function(data){ socket.connect();
data = JSON.parse(data); socket.on('message', function(data){
if(data.reload) data = JSON.parse(data);
window.location.reload(); if(data.reload)
}); window.location.reload();
{:lang="javascript"} });
```
So next thing: individual pages for posts, maybe templates. So next thing: individual pages for posts, maybe templates.

View file

@ -19,21 +19,23 @@ As I really like [node.js](http://nodejs.org/) I wanted to know how it handles v
It's as easy as this: It's as easy as this:
var http = require('http'); ```javascript
var server = http.createServer(function (request, response) { var http = require('http');
response.writeHead(200, {"Content-Type":"text/plain"}); var server = http.createServer(function (request, response) {
response.end ("Hello World!\n"); response.writeHead(200, {"Content-Type":"text/plain"});
console.log("Got a connection"); response.end ("Hello World!\n");
}); console.log("Got a connection");
server.listen(80, "2a01:xxxx:xxxx:xxxx::2"); });
console.log("Server running on localhost at port 80"); server.listen(80, "2a01:xxxx:xxxx:xxxx::2");
{:lang="javascript"} console.log("Server running on localhost at port 80");
```
Just pass the IPv6 address as the host parameter to `server.listen`. Just pass the IPv6 address as the host parameter to `server.listen`.
This listens on just one IP; it's possible to listen on all, similar to the `0.0.0.0` for IPv4: This listens on just one IP; it's possible to listen on all, similar to the `0.0.0.0` for IPv4:
server.listen(80, "::0"); ```javascript
{:lang="javascript"} server.listen(80, "::0");
```
Other things worth to mention: Other things worth to mention:

View file

@ -34,7 +34,6 @@ Adding syntax-highlighted code in your post now works like this:
even multi-line even multi-line
and define language after code block and define language after code block
{:lang="ruby"} {:lang="ruby"}
{:lang="text"}
And now some real highlighting to show it in action: And now some real highlighting to show it in action:

View file

@ -15,10 +15,11 @@ My SSL certificate is signed by [cacert][] (they approved me at last year's FrOS
If you're using nginx, all you need to do is adding the following lines to your config: If you're using nginx, all you need to do is adding the following lines to your config:
listen 443 ssl; ```
ssl_certificate /path/to/your/cert.pem; listen 443 ssl;
ssl_certificate_key /path/to/your/key.pem; ssl_certificate /path/to/your/cert.pem;
{:lang="text"} ssl_certificate_key /path/to/your/key.pem;
```
If you followed some of the latest news around the scene, you probably heard of the [diginotar debacle][diginotar]. This should make clear how broken the system is and how unsecure these SSL certificates can be with all those CAs around. If you followed some of the latest news around the scene, you probably heard of the [diginotar debacle][diginotar]. This should make clear how broken the system is and how unsecure these SSL certificates can be with all those CAs around.

View file

@ -33,34 +33,36 @@ etherpad runs as an own user named `etherpad` and is monitored by monit.
The monitoring is as simple as that, `/etc/monit/apps/etherpad.monit`: The monitoring is as simple as that, `/etc/monit/apps/etherpad.monit`:
check process etherpad ```
with pidfile /var/run/etherpad-lite.pid check process etherpad
start program = "/home/etherpad/etherpad-lite/daemon.sh start" with pidfile /var/run/etherpad-lite.pid
stop program = "/home/etherpad/etherpad-lite/daemon.sh stop" start program = "/home/etherpad/etherpad-lite/daemon.sh start"
if totalmem is greater than 300 MB for 10 cycles then restart # eating up memory? stop program = "/home/etherpad/etherpad-lite/daemon.sh stop"
{:lang="text"} if totalmem is greater than 300 MB for 10 cycles then restart # eating up memory?
```
And the nginx is nothing fancy at all, `/usr/local/nginx/conf/vhosts/pad.fnordig.de.conf`: And the nginx is nothing fancy at all, `/usr/local/nginx/conf/vhosts/pad.fnordig.de.conf`:
server { ```
listen 80; server {
listen [::]:80; listen 80;
listen 443 ssl; listen [::]:80;
ssl_certificate /var/certs/star_fnordig_signed.pem; listen 443 ssl;
ssl_certificate_key /var/certs/star_fnordig_signed.pem; ssl_certificate /var/certs/star_fnordig_signed.pem;
ssl_certificate_key /var/certs/star_fnordig_signed.pem;
server_name pad.fnordig.de; server_name pad.fnordig.de;
access_log /home/etherpad/etherpad-lite-log/eplite.access.log; access_log /home/etherpad/etherpad-lite-log/eplite.access.log;
error_log /home/etherpad/etherpad-lite-log/eplite.error.log; error_log /home/etherpad/etherpad-lite-log/eplite.error.log;
location / { location / {
proxy_pass http://localhost:9001/; proxy_pass http://localhost:9001/;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_buffering off; proxy_buffering off;
}
} }
{:lang="text"} }
```
My etherpad is currently running for about 22 days without any problems. I don't really use it myself and have no current statistics on outside usage of [pad.fnordig.de](https://pad.fnordig.de/). My etherpad is currently running for about 22 days without any problems. I don't really use it myself and have no current statistics on outside usage of [pad.fnordig.de](https://pad.fnordig.de/).

View file

@ -37,46 +37,51 @@ end
and start it with and start it with
proxymachine -h 0.0.0.0 -p 1234 -c your_socks_config.rb ```
{:lang="text"} proxymachine -h 0.0.0.0 -p 1234 -c your_socks_config.rb
```
Tada! You got your own [SOCKS4](http://en.wikipedia.org/wiki/SOCKS#SOCKS4) Proxy up and running. Tada! You got your own [SOCKS4](http://en.wikipedia.org/wiki/SOCKS#SOCKS4) Proxy up and running.
[@nerdsein](https://twitter.com/#!/nerdsein/status/120258441041297409) got another solution: [Mocks](http://sourceforge.net/projects/mocks/), "**M**y **O**wn so**CK**s **S**erver." [@nerdsein](https://twitter.com/#!/nerdsein/status/120258441041297409) got another solution: [Mocks](http://sourceforge.net/projects/mocks/), "**M**y **O**wn so**CK**s **S**erver."
Download it over at Sourceforge, unpack it and compile the code with: Download it over at Sourceforge, unpack it and compile the code with:
gcc -lnsl -o mocks child.c error.c misc.c socksd.c up_proxy.c ```
{:lang="text"} gcc -lnsl -o mocks child.c error.c misc.c socksd.c up_proxy.c
```
You can configure a little bit more than with proxymachine, but you can stick with the default config for now: You can configure a little bit more than with proxymachine, but you can stick with the default config for now:
```
PORT = 10080
MOCKS_ADDR = 0.0.0.0
LOG_FILE = mocks.log
PID_FILE = mocks.pid
BUFFER_SIZE = 65536
BACKLOG = 5
NEGOTIATION_TIMEOUT = 5
CONNECTION_IDLE_TIMEOUT = 300
BIND_TIMEOUT = 30
SHUTDOWN_TIMEOUT = 3
MAX_CONNECTIONS = 50
PORT = 10080 FILTER_POLICY = ALLOW
MOCKS_ADDR = 0.0.0.0 ```
LOG_FILE = mocks.log
PID_FILE = mocks.pid
BUFFER_SIZE = 65536
BACKLOG = 5
NEGOTIATION_TIMEOUT = 5
CONNECTION_IDLE_TIMEOUT = 300
BIND_TIMEOUT = 30
SHUTDOWN_TIMEOUT = 3
MAX_CONNECTIONS = 50
FILTER_POLICY = ALLOW
{:lang="text"}
See the README and the config file in the archive for comments on it. Then start it with: See the README and the config file in the archive for comments on it. Then start it with:
src/mocks -c mocks.config start ```
{:lang="text"} src/mocks -c mocks.config start
```
and kill it with: and kill it with:
src/mocks -c mocks.config shutdown ```
{:lang="text"} src/mocks -c mocks.config shutdown
```
Oh, and in case you have the possibility to just ssh to the server, you can start up a SOCKS proxy on this connection, too: Oh, and in case you have the possibility to just ssh to the server, you can start up a SOCKS proxy on this connection, too:
ssh -D1234 example.com ```
{:lang="text"} ssh -D1234 example.com
```

View file

@ -16,8 +16,9 @@ Complete taking down the machine and reinstalling everything was not an option,
By default the jabber server listens on all IPv6 addresses of the host machine, so all I needed to do here was enabling ssl-serving over IPv6 for it: By default the jabber server listens on all IPv6 addresses of the host machine, so all I needed to do here was enabling ssl-serving over IPv6 for it:
<tls port="5223">2001:0db8:85a3:08d3:1319:8a2e:0370:7344</tls> ```
{:lang="text"} <tls port="5223">2001:0db8:85a3:08d3:1319:8a2e:0370:7344</tls>
```
(this is a completeley random ipv6 addresses ;) (this is a completeley random ipv6 addresses ;)
Now to the "hard" part: the bitlbee thing. Now to the "hard" part: the bitlbee thing.
@ -28,24 +29,28 @@ But, as I told before, the server is a rather old installation and uses `netkit-
So I had to replace this one: So I had to replace this one:
apt-get install netbsd-inetd ```
{:lang="text"} apt-get install netbsd-inetd
```
One line in `/etc/inetd.conf` reads as the following: One line in `/etc/inetd.conf` reads as the following:
9999 stream tcp nowait bitlbee /usr/bin/stunnel stunnel -v 0 -l /usr/sbin/bitlbee ```
{:lang="text"} 9999 stream tcp nowait bitlbee /usr/bin/stunnel stunnel -v 0 -l /usr/sbin/bitlbee
```
This needs to be duplicated and changed to listen on v6, too. This needs to be duplicated and changed to listen on v6, too.
9999 stream tcp6 nowait bitlbee /usr/bin/stunnel stunnel -v 0 -l /usr/sbin/bitlbee ```
{:lang="text"} 9999 stream tcp6 nowait bitlbee /usr/bin/stunnel stunnel -v 0 -l /usr/sbin/bitlbee
```
And that's it. And that's it.
```
/etc/init.d/netbsd-inetd start /etc/init.d/netbsd-inetd start
/etc/init.d/jabberd14 restart /etc/init.d/jabberd14 restart
{:lang="text"} ```
and you should be ready to go. and you should be ready to go.

View file

@ -14,35 +14,37 @@ But is just to much overhead if I just need one command. So I took half an hour
Or read here: Or read here:
# original: http://tridex.net/2011-06-19/linux-netzwerke-ohne-ifconfig/ ```
# text version by @badboy_ (fnordig.de) # original: http://tridex.net/2011-06-19/linux-netzwerke-ohne-ifconfig/
# text version by @badboy_ (fnordig.de)
| Alte Syntax | Neue Syntax | Erklärung | | Alte Syntax | Neue Syntax | Erklärung |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| ifconfig eth0 up | ip link set eth0 up | Aktivieren der Netzwerkschnittstelle eth0 | | ifconfig eth0 up | ip link set eth0 up | Aktivieren der Netzwerkschnittstelle eth0 |
| ifconfig eth0 down | ip link set eth0 down | Deaktivieren der Netzwerkschnittstelle eth0 | | ifconfig eth0 down | ip link set eth0 down | Deaktivieren der Netzwerkschnittstelle eth0 |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| ifconfig eth0 | ip addr show eth0 | Zeigen der IP-Adresse von eth0 | | ifconfig eth0 | ip addr show eth0 | Zeigen der IP-Adresse von eth0 |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| ifconfig -a | ip link | Zeigen aller Netzerkschnittstellen | | ifconfig -a | ip link | Zeigen aller Netzerkschnittstellen |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| ifconfig eth0 promisc | ip link set eth0 promisc on | Einschalten des Promisc-Modus | | ifconfig eth0 promisc | ip link set eth0 promisc on | Einschalten des Promisc-Modus |
| ifconfig eth0 -promisc | ip link set eth0 promisc off | Ausschalten des Promisc-Modus | | ifconfig eth0 -promisc | ip link set eth0 promisc off | Ausschalten des Promisc-Modus |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| ifconfig eth0 192.168.1.1 | ip addr add 192.168.1.1/24 | IP-Adresse zuweisen | | ifconfig eth0 192.168.1.1 | ip addr add 192.168.1.1/24 | IP-Adresse zuweisen |
| netmask 255.255.255.0 | dev eth0 | | | netmask 255.255.255.0 | dev eth0 | |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| route | ip route show | Routen anzeigen | | route | ip route show | Routen anzeigen |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| route add default gw | ip route add default | Default-Route hinzufügen | | route add default gw | ip route add default | Default-Route hinzufügen |
| 192.168.1.10 | via 192.168.1.10 | | | 192.168.1.10 | via 192.168.1.10 | |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| route del default | ip route del default | Default-Route löschen | | route del default | ip route del default | Default-Route löschen |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| route add -net 192.168.2.0 | ip route add 192.168.2.0/24 | Netzwerk-Route anlegen | | route add -net 192.168.2.0 | ip route add 192.168.2.0/24 | Netzwerk-Route anlegen |
| netmask 255.255.255.0 | via 192.168.1.100 dev eth0 | | | netmask 255.255.255.0 | via 192.168.1.100 dev eth0 | |
| gw 192.168.1.100 dev eth0 | | | | gw 192.168.1.100 dev eth0 | | |
+-----------------------------+------------------------------+---------------------------------------------+ +-----------------------------+------------------------------+---------------------------------------------+
| route del -net 192.168.2.0 | ip route del 192.168.2.0/24 | Netzwerk-Route löschen | | route del -net 192.168.2.0 | ip route del 192.168.2.0/24 | Netzwerk-Route löschen |
| netmask 255.255.255.0 | via 192.168.1.100 dev eth0 | | | netmask 255.255.255.0 | via 192.168.1.100 dev eth0 | |
| gw 192.168.1.100 dev eth0 | | | | gw 192.168.1.100 dev eth0 | | |
```

View file

@ -5,8 +5,8 @@ published_date: "2014-08-12 13:25:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
------ ------

View file

@ -5,8 +5,8 @@ published_date: "2014-10-15 11:10:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
In the last four months I did not produce much open-source code. I was busy writing my Bachelor Thesis. In the last four months I did not produce much open-source code. I was busy writing my Bachelor Thesis.
But I was active in the community, I attended several conferences, I read a lot of stuff and I wrote down a lot more things to do. But I was active in the community, I attended several conferences, I read a lot of stuff and I wrote down a lot more things to do.

View file

@ -5,8 +5,8 @@ published_date: "2014-12-03 20:03:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
------ ------

View file

@ -5,8 +5,8 @@ published_date: "2015-01-15 23:50:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
Ever since I started looking into [Rust][] I knew I needed a bigger project for which I could use it. Ever since I started looking into [Rust][] I knew I needed a bigger project for which I could use it.
I released a [few][lzf] [small][crc] [libraries][redlock], all based on Redis code/tools, so I figured: I released a [few][lzf] [small][crc] [libraries][redlock], all based on Redis code/tools, so I figured:

View file

@ -5,8 +5,8 @@ published_date: "2015-03-05 14:41:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
So yesterday I gave a Rust introduction talk at the local hackerspace, [CCCAC](http://ccc.ac). So yesterday I gave a Rust introduction talk at the local hackerspace, [CCCAC](http://ccc.ac).
The slides are already [online](https://fnordig.de/talks/2015/cccac/rust-intro/). The slides are already [online](https://fnordig.de/talks/2015/cccac/rust-intro/).

View file

@ -5,8 +5,8 @@ published_date: "2015-07-16 11:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
**Update 2018-07-01:** This article was updated in 2018 and is [now available as documentation in the iso8601 repository](https://github.com/badboy/iso8601/blob/338b3d1a9ca220372292f631a3bc2e5176cca331/docs/parsing-iso8601-dates-using-nom.md). **Update 2018-07-01:** This article was updated in 2018 and is [now available as documentation in the iso8601 repository](https://github.com/badboy/iso8601/blob/338b3d1a9ca220372292f631a3bc2e5176cca331/docs/parsing-iso8601-dates-using-nom.md).

View file

@ -5,8 +5,8 @@ published_date: "2016-02-23 20:32:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
For one of my projects I need to access the GitHub API to create releases. For one of my projects I need to access the GitHub API to create releases.
Luckily, through reading [This Week in Rust #119][twir], I discovered [Hubcaps][], a library for interfacing with GitHub. Luckily, through reading [This Week in Rust #119][twir], I discovered [Hubcaps][], a library for interfacing with GitHub.

View file

@ -5,8 +5,8 @@ published_date: "2016-03-04 12:30:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
It became quite popular to store certain configuration variables in your environment, to be later loaded by your aplication. It became quite popular to store certain configuration variables in your environment, to be later loaded by your aplication.
This way of [having all configuration][config] available is part of the [twelve-factor app definition][12factor]. This way of [having all configuration][config] available is part of the [twelve-factor app definition][12factor].

View file

@ -4,8 +4,8 @@ title: "Releasing Rust projects, the automatic way"
published_date: "2016-03-29 20:47:00 +0200" published_date: "2016-03-29 20:47:00 +0200"
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
One of the strength of the Rust ecosystem is its package manager [Cargo][] and the package system [crates.io][]. One of the strength of the Rust ecosystem is its package manager [Cargo][] and the package system [crates.io][].
Pulling in some dependencies is as easy as adding it to your projects' `Cargo.toml` and running `cargo build`. Pulling in some dependencies is as easy as adding it to your projects' `Cargo.toml` and running `cargo build`.

View file

@ -5,8 +5,8 @@ published_date: "2016-05-12 23:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
… because mine didn't. At least not correctly in all cases. … because mine didn't. At least not correctly in all cases.
I'm talking about my Rust library [lzf-rs](https://crates.io/crates/lzf), I'm talking about my Rust library [lzf-rs](https://crates.io/crates/lzf),

View file

@ -5,8 +5,8 @@ published_date: "2016-08-31 16:30:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
<center> <center>

View file

@ -5,8 +5,8 @@ published_date: "2016-09-28 13:16:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
From time to time I try to write a piece of code or port some existing library or application just for fun. From time to time I try to write a piece of code or port some existing library or application just for fun.
So a while back in June I had some free time again and I came across [signify][]. So a while back in June I had some free time again and I came across [signify][].

View file

@ -5,8 +5,8 @@ published_date: "2016-11-29 11:55:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
*This post is a tiny bit late, but better late than never.* *This post is a tiny bit late, but better late than never.*

View file

@ -21,10 +21,7 @@ Except I would just repeat what I have said back then for my Bachelor Thesis.
So instead let me collect some statistics. So instead let me collect some statistics.
<center>
![Contributions to master](https://tmp.fnordig.de/ma/commits.png) ![Contributions to master](https://tmp.fnordig.de/ma/commits.png)
Contributions to master
</center>
I created the repository for all thesis work just 2 days after my birthday in 2016. I created the repository for all thesis work just 2 days after my birthday in 2016.
Back then it should have been a completely different thesis topic, but due to some unexpected difficulties I had to drop the first topic before even beginning and went on to search for another. Back then it should have been a completely different thesis topic, but due to some unexpected difficulties I had to drop the first topic before even beginning and went on to search for another.
@ -34,10 +31,7 @@ None of that code ended up in the final application of course.
My commit frequency was quite different from back in my Bachelor thesis days. My commit frequency was quite different from back in my Bachelor thesis days.
A lot less night shifts, but still nothing early in the morning. A lot less night shifts, but still nothing early in the morning.
<center>
![Frequency of commits by time of day](https://tmp.fnordig.de/ma/punchcard.png) ![Frequency of commits by time of day](https://tmp.fnordig.de/ma/punchcard.png)
Frequency of commits by time of day
</center>
My application ended with about 4000 lines of C code, plus another 2000 lines of code in examples, tests and experiments. My application ended with about 4000 lines of C code, plus another 2000 lines of code in examples, tests and experiments.
I also wrote some small helper tools in Rust, e.g. [ebpf-disasm](https://github.com/badboy/ebpf-disasm/) and a library and another tool, which I will make public in the next days. I also wrote some small helper tools in Rust, e.g. [ebpf-disasm](https://github.com/badboy/ebpf-disasm/) and a library and another tool, which I will make public in the next days.

View file

@ -12,8 +12,6 @@ A couple of weeks ago I received my final grade and thus reached the academic de
This also means I can now make the thesis public: This also means I can now make the thesis public:
<center>
[Network Function Offloading in Virtualized Environments](https://tmp.fnordig.de/uni/master-thesis/nf-offloading-in-virtualized-environments_jan-erik_rediger.pdf) (PDF) [Network Function Offloading in Virtualized Environments](https://tmp.fnordig.de/uni/master-thesis/nf-offloading-in-virtualized-environments_jan-erik_rediger.pdf) (PDF)
</center>
If you have questions regarding anything in that thesis, contact me [on Twitter](https://twitter.com/badboy_) or [via email](mailto:janerik\ at\ fnordig\ dot\ de). If you have questions regarding anything in that thesis, contact me [on Twitter](https://twitter.com/badboy_) or [via email](mailto:janerik@fnordig.de).

View file

@ -5,8 +5,8 @@ published_date: "2017-11-18 16:26:57 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
[hellorust.com](https://www.hellorust.com/) is live! [hellorust.com](https://www.hellorust.com/) is live!

View file

@ -5,8 +5,8 @@ published_date: "2018-01-10 12:25:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
Last monday, 8th of January, we had the first [Rust Cologne](http://rust.cologne) meetup this year. Last monday, 8th of January, we had the first [Rust Cologne](http://rust.cologne) meetup this year.

View file

@ -5,8 +5,8 @@ published_date: "2018-02-07 09:05:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
Last weekend I met [Daniel Stenberg][bagder], author of curl, at FOSDEM and we talked a bit about curl, Firefox and also Rust. Last weekend I met [Daniel Stenberg][bagder], author of curl, at FOSDEM and we talked a bit about curl, Firefox and also Rust.
@ -20,12 +20,12 @@ Given how simple that sounds, I decided to implement a minimal DOH client in Rus
I present to you: I present to you:
<center> <center>
### [dnsoverhttps][] <h3><a href="https://github.com/badboy/dnsoverhttps">dnsoverhttps</a></h3>
</center> </center>
It exports one function to resolve a hostname to its IPv6 and IPv4 addresses: It exports one function to resolve a hostname to its IPv6 and IPv4 addresses:
``` ```rust
extern crate dnsoverhttps; extern crate dnsoverhttps;
fn main() { fn main() {

View file

@ -5,8 +5,8 @@ published_date: "2018-02-09 14:52:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
Two days ago [I wrote about a new small utility crate](/2018/02/07/d-oh-dns-over-https-in-rust/) for doing DNS over HTTPS. Two days ago [I wrote about a new small utility crate](/2018/02/07/d-oh-dns-over-https-in-rust/) for doing DNS over HTTPS.

View file

@ -5,8 +5,8 @@ published_date: "2018-02-18 16:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
In September 2012 I was hired by [rrbone](https://www.rrbone.net/) to work as a software developer alongside my studies. In September 2012 I was hired by [rrbone](https://www.rrbone.net/) to work as a software developer alongside my studies.

View file

@ -5,8 +5,8 @@ published_date: "2018-08-08 12:45:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
Not every meetup follows the same structure. Not every meetup needs to have 75+ attendees. Not every meetup follows the same structure. Not every meetup needs to have 75+ attendees.

View file

@ -5,9 +5,9 @@ published_date: "2018-09-30 23:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
Last night I had an idea, which made me stay up two hours longer than I wanted. Last night I had an idea, which made me stay up two hours longer than I wanted.

View file

@ -5,8 +5,8 @@ published_date: "2018-11-07 14:34:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
It was the first time for me to attend MozFest, after I heard only good things about it from last year. It was the first time for me to attend MozFest, after I heard only good things about it from last year.

View file

@ -5,9 +5,9 @@ published_date: "2018-11-28 20:09:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
A while ago (sometime in August) I built a small service called [What Rust is it?](http://www.whatrustisit.com/). A while ago (sometime in August) I built a small service called [What Rust is it?](http://www.whatrustisit.com/).

View file

@ -5,8 +5,8 @@ published_date: "2019-01-22 10:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
Last year I implemented a new feature for Firefox Telemetry that changes how we can collect and analyze data with different requirements in regard to user privacy & frequency. Last year I implemented a new feature for Firefox Telemetry that changes how we can collect and analyze data with different requirements in regard to user privacy & frequency.

View file

@ -5,8 +5,8 @@ published_date: "2019-03-01 12:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
At this day last year I walked into the [Mozilla Berlin](https://blog.mozilla.org/berlin/) office to start my first day of work. At this day last year I walked into the [Mozilla Berlin](https://blog.mozilla.org/berlin/) office to start my first day of work.

View file

@ -5,8 +5,8 @@ published_date: "2019-05-15 14:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
Exactly 4 years ago, on May 15th 2015, the Rust Core Team [announced the first stable version, Version 1.0](https://blog.rust-lang.org/2015/05/15/Rust-1.0.html), of the Rust Programming language. Exactly 4 years ago, on May 15th 2015, the Rust Core Team [announced the first stable version, Version 1.0](https://blog.rust-lang.org/2015/05/15/Rust-1.0.html), of the Rust Programming language.

View file

@ -35,7 +35,7 @@ This makes for a very pleasant development experience.
Add the dependency to your `Cargo.toml`: Add the dependency to your `Cargo.toml`:
```ini ```toml
[dependencies] [dependencies]
redis = "0.11.0" redis = "0.11.0"
``` ```

View file

@ -5,9 +5,9 @@ published_date: "2019-10-24 17:30:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,8 +5,8 @@ published_date: "2019-11-29 11:37:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean. You can find an [index of all TWiG posts online](https://mozilla.github.io/glean/book/appendix/twig.html).) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean. You can find an [index of all TWiG posts online](https://mozilla.github.io/glean/book/appendix/twig.html).)

View file

@ -5,9 +5,9 @@ published_date: "2020-02-03 15:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean. You can find an [index of all TWiG posts online](https://mozilla.github.io/glean/book/appendix/twig.html).) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean. You can find an [index of all TWiG posts online](https://mozilla.github.io/glean/book/appendix/twig.html).)

View file

@ -5,9 +5,9 @@ published_date: "2020-02-06 16:38:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
At work I help with maintaining two large documentation books: At work I help with maintaining two large documentation books:

View file

@ -5,8 +5,8 @@ published_date: "2020-03-02 15:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
Woops, looks like I missed my Two Year Moziversary! Woops, looks like I missed my Two Year Moziversary!

View file

@ -5,8 +5,8 @@ published_date: "2020-03-18 12:30:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
Last week I read [Feedback Ladders: How We Encode Code Reviews at Netlify](https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/) and also shared that with my team at Mozilla. Last week I read [Feedback Ladders: How We Encode Code Reviews at Netlify](https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/) and also shared that with my team at Mozilla.

View file

@ -5,8 +5,8 @@ published_date: "2020-05-02 14:43:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
So I [tweeted](https://twitter.com/badboy_/status/1255802731241050112): So I [tweeted](https://twitter.com/badboy_/status/1255802731241050112):

View file

@ -5,9 +5,9 @@ published_date: "2020-05-04 15:30:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,8 +5,8 @@ published_date: "2020-06-19 13:46:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
--- ---
What if you could build a Rust project without Cargo? What if you could build a Rust project without Cargo?

View file

@ -5,9 +5,9 @@ published_date: "2020-09-01 15:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,9 +5,9 @@ published_date: "2020-10-06 16:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,9 +5,9 @@ published_date: "2020-12-18 15:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,8 +5,8 @@ published_date: "2021-02-24 15:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,8 +5,8 @@ published_date: "2021-03-01 11:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
--- ---
Has it really been 3 years? Has it really been 3 years?

View file

@ -5,9 +5,9 @@ published_date: "2021-04-16 15:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,9 +5,9 @@ published_date: "2021-07-26 12:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
--- ---
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) (“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.)

View file

@ -5,9 +5,9 @@ published_date: "2021-09-17 13:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
excerpt: | excerpt: |
It took us several more weeks to put everything into place, It took us several more weeks to put everything into place,
but we're finally shipping the Rust parts of the Glean Android SDK with GeckoView but we're finally shipping the Rust parts of the Glean Android SDK with GeckoView

View file

@ -5,8 +5,8 @@ published_date: "2021-10-14 17:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
excerpt: | excerpt: |
The Firefox for Android (Fenix) project runs extensive tests on every pull request The Firefox for Android (Fenix) project runs extensive tests on every pull request
and when merging code back into the `main` branch. and when merging code back into the `main` branch.

View file

@ -5,9 +5,9 @@ published_date: "2021-11-01 15:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
excerpt: | excerpt: |
Shortly after we shipped Glean through GeckoView in a Fenix Nightly release Shortly after we shipped Glean through GeckoView in a Fenix Nightly release
we received a crash report pointing to code that we haven't touched in a long time. we received a crash report pointing to code that we haven't touched in a long time.

View file

@ -5,8 +5,8 @@ published_date: "2021-12-17 14:00:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
excerpt: | excerpt: |
A year ago I posted Glean in 2021 as a way to look into the future A year ago I posted Glean in 2021 as a way to look into the future
and set out a vision and plan for the project. and set out a vision and plan for the project.

View file

@ -5,9 +5,9 @@ published_date: "2022-01-31 12:40:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
- rust - rust
excerpt: | excerpt: |
We ship the Glean SDK for multiple platforms, one of them being iOS applications. We ship the Glean SDK for multiple platforms, one of them being iOS applications.
Previously I talked about how we got it to build on the Apple ARM machines. Previously I talked about how we got it to build on the Apple ARM machines.

View file

@ -5,8 +5,8 @@ published_date: "2022-02-25 15:00:00 +0100"
layout: post-yt.liquid layout: post-yt.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
excerpt: | excerpt: |
On February 11th, 2022 I gave a lightning talk titled On February 11th, 2022 I gave a lightning talk titled
"Your personal Glean data pipeline", presenting a little side project for "Your personal Glean data pipeline", presenting a little side project for

View file

@ -5,8 +5,8 @@ published_date: "2022-03-04 15:20:00 +0100"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
excerpt: | excerpt: |
Celebrating four years in my job as a Telemetry Engineer at Mozilla. Celebrating four years in my job as a Telemetry Engineer at Mozilla.
--- ---

View file

@ -27,7 +27,7 @@ Let's deploy it on [fly.io].
We start by creating a new Fly app. We start by creating a new Fly app.
We stick to a generated name and put it into Frankfurt. We stick to a generated name and put it into Frankfurt.
```bash ```shell
$ mkdir -p Documents/gotosocial-fly $ mkdir -p Documents/gotosocial-fly
$ cd Documents/gotosocial-fly $ cd Documents/gotosocial-fly
$ fly launch $ fly launch

View file

@ -5,8 +5,8 @@ published_date: "2023-03-01 08:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- mozilla - mozilla
excerpt: | excerpt: |
Celebrating five years in my job as a Telemetry Engineer at Mozilla. Celebrating five years in my job as a Telemetry Engineer at Mozilla.
--- ---

View file

@ -5,8 +5,8 @@ published_date: "2023-07-24 14:40:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- nix - nix
--- ---
The other day I had to deploy an old Ruby 2.7 application. The other day I had to deploy an old Ruby 2.7 application.
@ -81,7 +81,7 @@ I trimmed that down just slightly and swapped in Ruby 2.7 (here's the [list of a
The important line is this: The important line is this:
``` ```nix
ruby = pkgs."ruby-2.7.8"; ruby = pkgs."ruby-2.7.8";
``` ```
@ -89,7 +89,7 @@ ruby = pkgs."ruby-2.7.8";
Now on to installing it into a shell: Now on to installing it into a shell:
``` ```bash
nix develop nix develop
``` ```

View file

@ -5,8 +5,8 @@ published_date: "2024-01-02 13:00:00 +0200"
layout: post.liquid layout: post.liquid
data: data:
route: blog route: blog
tags: tags:
- rust - rust
excerpt: | excerpt: |
sqlelf lets you explore ELF objects through the power of SQL. sqlelf lets you explore ELF objects through the power of SQL.
It turns any executable into a queryable database. It turns any executable into a queryable database.

View file

@ -19,8 +19,8 @@ data:
{% assign phrase = " minute read" | prepend: reading_time %} {% assign phrase = " minute read" | prepend: reading_time %}
<time pubdate="pubdate">{{ post.published_date | date: "%b %d, %Y" }} · {{ phrase }}</time> <time pubdate="pubdate">{{ post.published_date | date: "%b %d, %Y" }} · {{ phrase }}</time>
{% if post.data and post.data.tags -%} {% if post.data and post.tags -%}
{%- for tag in post.data.tags %} {%- for tag in post.tags %}
· <a href="/tagged/{{ tag }}.html">{{ tag }}</a> · <a href="/tagged/{{ tag }}.html">{{ tag }}</a>
{%- endfor %} {%- endfor %}
{%- endif -%} {%- endif -%}

View file

@ -11,7 +11,7 @@ data:
<table> <table>
{%- for post in collections.posts.pages %} {%- for post in collections.posts.pages %}
{%- assign postyear = post.published_date | date: "%Y" %} {%- assign postyear = post.published_date | date: "%Y" %}
{%- if post.data.tags and post.data.tags contains "mozilla" -%} {%- if post.tags and post.tags contains "mozilla" -%}
<tr> <tr>
<td>{{ post.published_date | date: "%d. %b %Y"}}</td> <td>{{ post.published_date | date: "%d. %b %Y"}}</td>
<td><a href="/{{post.permalink }}">{{post.title}}</a></td> <td><a href="/{{post.permalink }}">{{post.title}}</a></td>

View file

@ -8,7 +8,7 @@ permalink: /tagged/mozilla.xml
<link>https://fnordig.de</link> <link>https://fnordig.de</link>
<description>fnordig - posts tagged with 'mozilla'</description> <description>fnordig - posts tagged with 'mozilla'</description>
{% for post in collections.posts.pages %} {% for post in collections.posts.pages %}
{%- if post.data.tags and post.data.tags contains "mozilla" -%} {%- if post.tags and post.tags contains "mozilla" -%}
<item> <item>
<title>{{ post.title | escape }}</title> <title>{{ post.title | escape }}</title>
<link>https://fnordig.de/{{ post.permalink }}</link> <link>https://fnordig.de/{{ post.permalink }}</link>

View file

@ -11,7 +11,7 @@ data:
<table> <table>
{%- for post in collections.posts.pages %} {%- for post in collections.posts.pages %}
{%- assign postyear = post.published_date | date: "%Y" %} {%- assign postyear = post.published_date | date: "%Y" %}
{%- if post.data.tags and post.data.tags contains "nix" -%} {%- if post.tags and post.tags contains "nix" -%}
<tr> <tr>
<td>{{ post.published_date | date: "%d. %b %Y"}}</td> <td>{{ post.published_date | date: "%d. %b %Y"}}</td>
<td><a href="/{{post.permalink }}">{{post.title}}</a></td> <td><a href="/{{post.permalink }}">{{post.title}}</a></td>

View file

@ -8,7 +8,7 @@ permalink: /tagged/nix.xml
<link>https://fnordig.de</link> <link>https://fnordig.de</link>
<description>fnordig - post tagged with 'nix'</description> <description>fnordig - post tagged with 'nix'</description>
{% for post in collections.posts.pages %} {% for post in collections.posts.pages %}
{%- if post.data.tags and post.data.tags contains "nix" -%} {%- if post.tags and post.tags contains "nix" -%}
<item> <item>
<title>{{ post.title | escape }}</title> <title>{{ post.title | escape }}</title>
<link>https://fnordig.de/{{ post.permalink }}</link> <link>https://fnordig.de/{{ post.permalink }}</link>

View file

@ -11,7 +11,7 @@ data:
<table> <table>
{%- for post in collections.posts.pages %} {%- for post in collections.posts.pages %}
{%- assign postyear = post.published_date | date: "%Y" %} {%- assign postyear = post.published_date | date: "%Y" %}
{%- if post.data.tags and post.data.tags contains "rust" -%} {%- if post.tags and post.tags contains "rust" -%}
<tr> <tr>
<td>{{ post.published_date | date: "%d. %b %Y"}}</td> <td>{{ post.published_date | date: "%d. %b %Y"}}</td>
<td><a href="/{{post.permalink }}">{{post.title}}</a></td> <td><a href="/{{post.permalink }}">{{post.title}}</a></td>

View file

@ -8,7 +8,7 @@ permalink: /tagged/rust.xml
<link>https://fnordig.de</link> <link>https://fnordig.de</link>
<description>fnordig - post tagged with 'rust'</description> <description>fnordig - post tagged with 'rust'</description>
{% for post in collections.posts.pages %} {% for post in collections.posts.pages %}
{%- if post.data.tags and post.data.tags contains "rust" -%} {%- if post.tags and post.tags contains "rust" -%}
<item> <item>
<title>{{ post.title | escape }}</title> <title>{{ post.title | escape }}</title>
<link>https://fnordig.de/{{ post.permalink }}</link> <link>https://fnordig.de/{{ post.permalink }}</link>