<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://romain.delama.re/">
	<title>Romain Delamare&#39;s Blog</title>
	<link href="https://romain.delama.re/feed.xml" rel="self"/>
	<updated>2023-09-12T00:00:00Z</updated>
	<id>https://romain.delama.re/</id>
	<author>
		<name>Romain Delamare</name>
		<email>romain@delama.re</email>
	</author>
		<entry>
			<title>Writing Good Code Comments</title>
			<link href="https://romain.delama.re/writes/about-good-code-comments/"/>
			<updated>2023-09-12T00:00:00Z</updated>
			<id>https://romain.delama.re/writes/about-good-code-comments/</id>
			<content xml:lang="en" type="html">&lt;p&gt;During my career I have received conflicting advices about code comments. I recall a tech lead telling me I should comment everything and another telling me I should never comment because that is a &lt;em&gt;code smell&lt;/em&gt;. Of course both were wrong, and since I’m right, I will now explain how to properly comment your code.&lt;/p&gt;
&lt;h2&gt;Documentation comments and code comments&lt;/h2&gt;
&lt;p&gt;I make a distinction between &lt;em&gt;documentation comments&lt;/em&gt;, written for an external tool (such as &lt;em&gt;Javadoc&lt;/em&gt; or &lt;em&gt;rustdoc&lt;/em&gt;), and &lt;em&gt;code comments&lt;/em&gt;, written for developers reading the code.&lt;/p&gt;
&lt;p&gt;Documentation comments target users of the code and describe how to use it. They are great. You should write them whenever they are desirable (such as when writing a library). This article will not cover this type of comments. They are highly dependent on the language, and most tools have great recommendations on how to write documentation. You should follow these guidelines.&lt;/p&gt;
&lt;p&gt;Code comments serve another purpose: they target developers to help them understand the code. Making the code understandable by humans is one of the most important goals of a software engineer, and code comments is one way to achieve it. Let’s see why, when, and how to write them.&lt;/p&gt;
&lt;h2&gt;When should you write code comments?&lt;/h2&gt;
&lt;p&gt;Depending on who you ask, the answer is “&lt;em&gt;always&lt;/em&gt;” or “&lt;em&gt;never&lt;/em&gt;”. Since you ask me, I think you should write code comments whenever the code is not self-explanatory and &lt;strong&gt;you have no other means of improving it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The debate about code comments and code smell comes from a confusion on cause and correlation. There is a correlation between complex code and comments, because complex code requires more explanations. Since simplicity is a desirable trait, that makes code comments undesirable. This is a fallacy because you could have a complex code without comments, which is probably the worst situation.&lt;/p&gt;
&lt;p&gt;More importantly, some complexity is unavoidable: sometimes you must optimize the code, sometimes there is a bug you cannot fix (e.g., a bug in a dependency), sometimes you must ship and cannot write a time-consuming refactoring. All these reasons, whatever their merit, could prevent you from writing simple and self-documenting code.&lt;/p&gt;
&lt;p&gt;You should try to find other ways to convey meaning and remove complexity, but if that is not achievable, do write code comments.&lt;/p&gt;
&lt;p&gt;Why not use comments more liberally? Because comments make maintenance harder. When the code is updated, it is very easy to forget updating the corresponding comments. A code with a lot of comments will become more difficult to maintain, and when too many comments are obsolete the code will be &lt;em&gt;more&lt;/em&gt; difficult to understand&lt;/p&gt;
&lt;h3&gt;Adding meaning with good names&lt;/h3&gt;
&lt;p&gt;A good way to avoid using comments is to properly name functions and variables. No need to be creative, do not try to be funny. Write boring names. Be explicit. Write very long names if required.&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;Do not write&lt;/figcaption&gt;
				&lt;pre class=&quot;warning&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;// computes the horizontal offset
fn hoff(x: i32) -&amp;gt; i32 {
    // add header column width
    x + 32
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;
			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;Do write&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;const HEADER_COLUMN_WIDTH: i32 = 32;

fn compute_horizontal_offset(x: i32) -&amp;gt; i32 {
    x + HEADER_COLUMN_WIDTH
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;h3&gt;Adding meaning by extracting functions&lt;/h3&gt;
&lt;p&gt;A function is not only useful to reuse a piece of code, but also for naming what it does. Function names are usually better maintained than code comments.&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;Do not write&lt;/figcaption&gt;
				&lt;pre class=&quot;warning&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;fn rename_user(id: Uuid, new_name: String) {
    // load user
    …

    user.name = new_name;

    // save user
    …
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;
			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;Do write&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;fn rename_user(id: Uuid, new_name: String) {
    let user = load_user(id);
    user.name = new_name;
    save_user(user)
}

fn load_user(id: Uuid) -&amp;gt; User { … }
fn save_user(user: User) { … }
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;h2&gt;Dos and don’ts&lt;/h2&gt;
&lt;p&gt;Here are some guidelines for writing good code comments.&lt;/p&gt;
&lt;h3&gt;Dos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;mark&gt;Do keep it short and simple&lt;/mark&gt;. Just like your code, good comments are easy to read and understand.&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;Do add context&lt;/mark&gt;. If there is a non-obvious reason the commented piece of code needs clarification, you should explain it. The goal here is to prevent someone who does not see the whole picture from trying to “simplify” the code and accidentally add a regression.&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;Do give improvement guidelines&lt;/mark&gt;. If you know a way to improve the code but did not have the time to do it, or if an improvement relies on future work (e.g., a bug fix or a refactoring), explain it. This way, someone reading the comment in the future will know if they can rewrite the code and remove the comment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Don’ts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;mark&gt;Don’t describe trivial instructions&lt;/mark&gt;. Comments in production code should not try to teach people how a language or framework works. If you need to teach junior developers, find a more appropriate way to do it. Code comments need too much maintenance.&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;Don’t write joke comments&lt;/mark&gt;. We’ve all read &lt;a href=&quot;https://stackoverflow.com/a/482129&quot;&gt;them&lt;/a&gt;, but I think they’re bad and you are not helping anyone by trying to look clever or funny.&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;Don’t shame other developers&lt;/mark&gt;. Comments are not a proper way to vent your frustration, and it’s never appropriate to be mean to someone for the code they wrote. You do not always know the constraints and difficulty they faced.&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;Avoid referencing other sources&lt;/mark&gt;. It’s fine to add a link to a Wikipedia page, but avoid bug numbers or link to a bug tracking tool. The code will probably outlive any external tool or personal blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;I used to avoid comments at all cost. Now I write more comments, but still feel like I should first try to make comments unnecessary.&lt;/p&gt;
</content>
		</entry>
		<entry>
			<title>Fast Acceptance Tests with Rust and PostgreSQL</title>
			<link href="https://romain.delama.re/writes/fast-acceptance-tests-with-rust-and-postgresql/"/>
			<updated>2023-01-18T00:00:00Z</updated>
			<id>https://romain.delama.re/writes/fast-acceptance-tests-with-rust-and-postgresql/</id>
			<content xml:lang="en" type="html">&lt;p&gt;I have recently started writing a lot of acceptance tests. As I work using a test-driven design approach, they specify behavior while unit tests specify specific implementations. Another advantage of acceptance tests is that their description can be written and read by domain experts without requiring technical skills.&lt;/p&gt;
&lt;p&gt;An acceptance test describes a scenario that describes the initial state, what happens, and what is the expected behavior. This scenario is executed from an entry point of your application. So in a hexagonal architecture, an acceptance test exercises the adapters, for instance a &lt;em&gt;command line&lt;/em&gt; or &lt;em&gt;http&lt;/em&gt; adapter.&lt;/p&gt;
&lt;h2&gt;Structuring your tests&lt;/h2&gt;
&lt;p&gt;The rust documentation uses the term &lt;em&gt;integration test&lt;/em&gt; for any test that can only access the public interface of your library or application. This definition of integration tests encompasses acceptance tests and might not be what you are used to, but I will stick to it to keep it simple.&lt;/p&gt;
&lt;p&gt;The recommended &lt;a href=&quot;https://doc.rust-lang.org/book/ch11-03-test-organization.html&quot; title=&quot;Rust recommended test organization&quot;&gt;test organization&lt;/a&gt; is to have unit tests residing with the code of your application (in submodules with the &lt;code&gt;#[cfg(test)]&lt;/code&gt; attribute) and integration tests in the &lt;code&gt;tests&lt;/code&gt; directory. For instance if you have a TODO list application, you project structure could look like this:&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;Project file structure&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;📁 todo
├─ 📁 src
│  ├─ 📄 main.rs
│  ├─ 📄 persistence.rs
│  └─ …
├─ 📁 tests
│  ├─ 📄 delete_todo.rs
│  └─ …
├─ 📄 Cargo.lock
└─ 📄 Cargo.toml
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;p&gt;The &lt;code&gt;src&lt;/code&gt; directory contains the application code along with unit tests. The &lt;code&gt;tests&lt;/code&gt; directory contains the integration tests, with each file being a different compilation target. If you need multiple files for a test, you can create a module directory with a &lt;code&gt;main.rs&lt;/code&gt; file and the other files.&lt;/p&gt;
&lt;p&gt;You can also create integration tests in other directories by adding new integration test build targets in the Cargo configuration:&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;Cargo.toml&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;[[test]]
name = &amp;quot;acceptance-tests&amp;quot;
path = &amp;quot;acceptance-tests/acceptance_tests.rs&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;p&gt;This will create a new test target, that can have its own submodules. There are &lt;a href=&quot;https://doc.rust-lang.org/cargo/reference/cargo-targets.html#configuring-a-target&quot; title=&quot;Cargo reference about target options&quot;&gt;other options&lt;/a&gt;, and you can even disable the default test harness, but that out of scope for this article.&lt;/p&gt;
&lt;p&gt;The integration tests depend on all the crates defined in &lt;code&gt;dependencies&lt;/code&gt; and &lt;code&gt;dev-dependencies&lt;/code&gt; in the &lt;code&gt;Cargo.toml&lt;/code&gt; file, as well as the code of your application or library (you can import it by using its name, e.g., &lt;code&gt;use todo::persistence::*&lt;/code&gt;). If you are testing an application, you cannot import code from &lt;code&gt;src/main.rs&lt;/code&gt;, but you can move this code to a &lt;code&gt;src/lib.rs&lt;/code&gt; file and import it both from the main file of your application and from the integration tests.&lt;/p&gt;
&lt;h2&gt;Writing acceptance tests&lt;/h2&gt;
&lt;p&gt;An acceptance test executes a scenario, typically described with a sentence like “&lt;em&gt;given ‹initial state›, when ‹event›, then ‹expected result›&lt;/em&gt;”. The scenarios can be written by or in collaboration with domain experts, so that actual and expected features are tested.&lt;/p&gt;
&lt;p&gt;To set up the initial state of a scenario, you will need to design your application with dependency injection, for instance to allow setting the current time for the test. If “dependency injection” gives you a bad “&lt;em&gt;object-oriented bloated magical framework&lt;/em&gt;” taste in your mouth, do not worry, it can be a parameter. For instance, you can add a function that gives the current time as a parameter for your application initialization:&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;src/lib.rs&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;impl TodoApplication {
	fn new(get_time: Box&amp;lt;dyn Fn() -&amp;gt; OffsetDateTime&amp;gt;) -&amp;gt; Self {
		Self { … }
	}
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;p&gt;For your application you can just use the system current time:&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;src/app.rs&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
	let app = TodoApplication::new(Box::new(OffsetDateTime::now_utc));
	…
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;p&gt;In an acceptance test you can define a function that will give a fixed time:&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;tests/acceptance_test.rs&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;#[test]
fn test_creation() {
	// Given an empty application at 1PM on January 9, 2023
	let now = datetime!(2023-01-09 13:00 UTC);
	let app = TodoApplication::new(Box::new(move || now));
	…
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;h2&gt;Dealing with persistence&lt;/h2&gt;
&lt;p&gt;If your application persists data in a database (or some other way), you have two choices for your acceptance tests: mock your persistence interface or use an actual database. While the former may seem easier and leads to faster tests, I tend to prefer the latter to test my actual persistence layer. You could write the acceptance tests with mocks and test your persistence layer with dedicated integration tests, but in my experience this is more tedious as you are going to write some test cases multiple times.&lt;/p&gt;
&lt;p&gt;Using an actual database for your acceptance tests can lead to performance issues. If you create a new database from scratch for each test, the execution time per test will be very long. If you re-use the same database for each test you cannot have concurrent executions and you need to be very careful to properly reset the database between each test.&lt;/p&gt;
&lt;p&gt;After several iterations, I have come up with a solution that allows for fast concurrent acceptance test with an actual PostgreSQL database. First you need to create a test database with the common initial state for all your tests, then for each test:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a copy of the test database with a random name&lt;/li&gt;
&lt;li&gt;execute the test with that copy of the test database&lt;/li&gt;
&lt;li&gt;delete the database copy&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The default Rust test harness does not provide common test utility functions, such as &lt;code&gt;before_each&lt;/code&gt; or &lt;code&gt;after_each&lt;/code&gt;. To remedy that I create an &lt;code&gt;AcceptanceTest&lt;/code&gt; structure. The &lt;code&gt;AcceptanceTest::new&lt;/code&gt; function will create the database for the test, then instantiate the applications and anything that is required to execute the test. The &lt;code&gt;AcceptanceTest&lt;/code&gt; implements the &lt;code&gt;Drop&lt;/code&gt; trait to execute the test cleanup methods at the end of the test.&lt;/p&gt;
&lt;p&gt;For instance, for the TODO list application, the structure could look like this:&lt;/p&gt;

			&lt;figure class=&quot;code-block&quot;&gt;
				&lt;figcaption&gt;tests/acceptance_test.rs&lt;/figcaption&gt;
				&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;struct AcceptanceTest {
	app: TodoApplication,
	db_name: String,
}

impl AcceptanceTest {
	fn new(get_time: Box&amp;lt;dyn Fn() -&amp;gt; OffsetDateTime) -&amp;gt; Self {
		let db_name = generate_random_name();
		// copy database
		…
		Self {
			app: TodoApplication::new(get_time),
			db_name,
		}
	}
}

impl Drop for AcceptanceTest {
	fn drop(&amp;amp;mut self) {
		// drop database
		…
	}
}
&lt;/code&gt;&lt;/pre&gt;
			&lt;/figure&gt;&lt;p&gt;The &lt;code&gt;AcceptanceTest::drop&lt;/code&gt; method will be called at the end of your test, even if it panics. You can also add helper methods on &lt;code&gt;AcceptanceTest&lt;/code&gt; to simplify your tests.&lt;/p&gt;
&lt;h2&gt;Copying the test database&lt;/h2&gt;
&lt;p&gt;In PostgreSQL, you can copy a database by creating a new database with the test database as template:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;create database new_db with template test_db;
&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;
&lt;p&gt;With this strategy, I have decreased the execution time of my acceptance test to an average of &lt;em&gt;100ms&lt;/em&gt;, down from around &lt;em&gt;1s&lt;/em&gt; initially (on a laptop with an AMD Ryzen 7 4750U CPU and 32GB of RAM). This allows me to use a test-driven approach with acceptance tests, and to run all my tests frequently to avoid regressions.&lt;/p&gt;
</content>
		</entry>
		<entry>
			<title>2022: what I played and what I listened to</title>
			<link href="https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/"/>
			<updated>2023-01-01T00:00:00Z</updated>
			<id>https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/</id>
			<content xml:lang="en" type="html">&lt;p&gt;So long 2022! That was a strange year from me, my first as a freelance. I managed OK, with a contract that lasted half the year and let me work on a personal project… that did not progress as fast as I would like.&lt;/p&gt;
&lt;p&gt;But enough of talking about the boring stuff, let’s talk about what I enjoyed in 2022: music and games.&lt;/p&gt;
&lt;h2&gt;Best albums of 2022&lt;/h2&gt;
&lt;p&gt;In 2022, I listened to a lot of new stuff, I even managed to do &lt;a href=&quot;https://holygrena.de/@alightgoesout/109437832978372416&quot; title=&quot;Mastodon thread where I posted an album a day in December 2022&quot;&gt;a musical advent calendar&lt;/a&gt; composed only of albums released in 2022.&lt;/p&gt;
&lt;p&gt;So here are my top three albums of 2022:&lt;/p&gt;
&lt;h3&gt;3. &lt;em&gt;Take all you can&lt;/em&gt; by Freedom Hawk, stoner metal&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/22-Freedom_Hawk-Take_All_You_Can-1200.jpeg&quot; title=&quot;Cover of Take all you can by Freedom Hawk&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/22-Freedom_Hawk-Take_All_You_Can-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/22-Freedom_Hawk-Take_All_You_Can-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/22-Freedom_Hawk-Take_All_You_Can-784.jpeg&quot; alt=&quot;Cover of Take all you can by Freedom Hawk&quot; title=&quot;Cover of Take all you can by Freedom Hawk&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This album is a huge love letter to 1970’s metal and I have listened to it on repeat for a whole week after stumbling upon it. I did not know Freedom Hawk, so the good news is there are five more albums for me to catch on.&lt;/p&gt;
&lt;h3&gt;2. &lt;em&gt;Folium Limina&lt;/em&gt; by The Otholith, doom metal&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/23-The_Otolith-Folium_Limina-1200.jpeg&quot; title=&quot;Cover of Folium Limina by The Otholith&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/23-The_Otolith-Folium_Limina-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/23-The_Otolith-Folium_Limina-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/23-The_Otolith-Folium_Limina-784.jpeg&quot; alt=&quot;Cover of Folium Limina by The Otholith&quot; title=&quot;Cover of Folium Limina by The Otholith&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This album has all you expect from doom metal and more: low tempo, heavy basses, and violin. Beautiful from start to end.&lt;/p&gt;
&lt;h3&gt;1. &lt;em&gt;Unison Life&lt;/em&gt; by Brutus, post-hardcore&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/24-Brutus-Unison_Life-1200.jpeg&quot; title=&quot;Cover of Unison Life by Brutus&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/24-Brutus-Unison_Life-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/24-Brutus-Unison_Life-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/24-Brutus-Unison_Life-784.jpeg&quot; alt=&quot;Cover of Unison Life by Brutus&quot; title=&quot;Cover of Unison Life by Brutus&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Brutus is a Belgian post-hardcore trio that has been one of my favorite band since I have discovered them a couple of years ago. Their third album, &lt;em&gt;Unison Life&lt;/em&gt;, feels like a perfect mix between the rawness of their first album and the refinement of the second.&lt;/p&gt;
&lt;h3&gt;Honorable mentions&lt;/h3&gt;
&lt;p&gt;These are 2022 albums that I loved, in no particular order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Here’s What You Could Have Won&lt;/em&gt; by Kid Kapichi, punk rock&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Myriad&lt;/em&gt; by Gaupa. Psychedelic Doom/Stoner metal&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Grey Everlasting&lt;/em&gt; by Deathwhite. Doom/Heavy metal&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Innate Passage&lt;/em&gt; by Elder. Prog/Psychedelic rock&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Close&lt;/em&gt; by Messa. Doom/stoner metal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Best video games of 2022&lt;/h2&gt;
&lt;p&gt;Like every year I played a lot of games in 2022, but unlike other years, I played a lot of games in the year of their release. Here is my top three for video games released in 2022.&lt;/p&gt;
&lt;h3&gt;3. Expeditions: Rome&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/expeditions-rome-1674.jpeg&quot; title=&quot;Expeditions: Rome&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/expeditions-rome-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/expeditions-rome-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/expeditions-rome-784.jpeg&quot; alt=&quot;Title screen of Expeditions: Rome&quot; title=&quot;Expeditions: Rome&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I had never played any game of the series before, and this one took me by surprise. The tactical fights are really clever and like in X-Com you can customize your mercenaries to match your playstyle, but I did not expect the roleplaying aspect to be so good. I chose to play as a woman, and the writers went out of their way to acknowledge it and most characters react to it realistically, it’s not a cosmetic choice. The game has some defaults (technically aged, a bit long) but overall a huge recommendation from me.&lt;/p&gt;
&lt;h3&gt;2. Citizen Sleeper&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/citizen-sleeper-920.jpeg&quot; title=&quot;Citizen Sleeper&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/citizen-sleeper-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/citizen-sleeper-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/citizen-sleeper-784.jpeg&quot; alt=&quot;Title screen of Citizen Sleeper&quot; title=&quot;Citizen Sleeper&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Citizen Sleeper is a roleplaying game that presents itself as a boardgame. You throw dice that you then use to perform actions that will allow you to survive on a space station that is (at first) very hostile to you. The survival aspect gradually leaves more room to a lovely story, where your choices seem significant.&lt;/p&gt;
&lt;h3&gt;1. Elden Ring&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/elden-ring-1284.jpeg&quot; title=&quot;Elden Ring&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/elden-ring-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/elden-ring-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-what-i-played-and-what-i-listened-to/elden-ring-784.jpeg&quot; alt=&quot;Title screen of Elden Ring&quot; title=&quot;Elden Ring&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Not an original choice, but an obvious one. As a huge fan of Dark Souls and Bloodborne I had a lot of hope for Elden Ring, and From Software did not disappoint. It’s not just “Dark Souls with an open world”, clearly more than the sum of its parts. I know I will play this game for years.&lt;/p&gt;
&lt;h3&gt;Honorable mentions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Immortality: Sam Barlow does it again&lt;/li&gt;
&lt;li&gt;Powerwash Simulator: best podcast game of 2022&lt;/li&gt;
&lt;li&gt;Last Call BBS: sad that Zachtronics closes, but it’s a beautiful &lt;em&gt;adieu&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Deathloop: yes it’s a 2021 game, but I played it on Xbox where it was released in 2022&lt;/li&gt;
&lt;li&gt;Vampire Survivors: after more than 80 hours I am not bored and I still got the DLC to play&lt;/li&gt;
&lt;li&gt;Dome Keeper: a mining game with the cutest pixels&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Best boardgames of 2022&lt;/h2&gt;
&lt;p&gt;Okay, I must admit I have no idea, because I almost did not play any new release this year. I have just received “Gloomhaven: Jaws of the Lion”, but I have yet to play it.&lt;/p&gt;
&lt;p&gt;I did however play a lot of “Heat: Pedal to the Metal”, and I love it. The simulation is lighter than in Formula D, but the race is as intense and the risk management is at least as good. Also, there is a clever and simple way to include more cars that race automatically, which makes it possible to play with few players (or even solo) and still have a full grid.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;That’s it for 2022, let’s hope 2023 will be better for you or me.&lt;/p&gt;
</content>
		</entry>
		<entry>
			<title>2022 Music Advent Calendar</title>
			<link href="https://romain.delama.re/writes/2022-music-advent-calendar/"/>
			<updated>2022-12-01T00:00:00Z</updated>
			<id>https://romain.delama.re/writes/2022-music-advent-calendar/</id>
			<content xml:lang="en" type="html">&lt;p&gt;Last year I did a music advent calendar for friends, and I’m doing it again this year. The rule is simple: each day a
new album. This year I chose to only do albums released in 2022.&lt;/p&gt;
&lt;h2&gt;1. &lt;em&gt;As Above, So Below&lt;/em&gt; by Dead Sun Rising&lt;/h2&gt;
&lt;p&gt;Doom/post-metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/01-Dead_Sun_Rising-As_Above_So_Below-1200.jpeg&quot; title=&quot;Cover of As Above, So Below by Dead Sun Rising&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/01-Dead_Sun_Rising-As_Above_So_Below-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/01-Dead_Sun_Rising-As_Above_So_Below-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/01-Dead_Sun_Rising-As_Above_So_Below-784.jpeg&quot; alt=&quot;Cover of As Above, So Below by Dead Sun Rising&quot; title=&quot;Cover of As Above, So Below by Dead Sun Rising&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;2. &lt;em&gt;Once Twice Melody&lt;/em&gt; by Beach House&lt;/h2&gt;
&lt;p&gt;Dream pop&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/02-Beach_House-Once_Twice_melody-900.jpeg&quot; title=&quot;Cover of Once Twice Melody by Beach House&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/02-Beach_House-Once_Twice_melody-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/02-Beach_House-Once_Twice_melody-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/02-Beach_House-Once_Twice_melody-784.jpeg&quot; alt=&quot;Cover of Once Twice Melody by Beach House&quot; title=&quot;Cover of Once Twice Melody by Beach House&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;3. &lt;em&gt;Close&lt;/em&gt; by Messa&lt;/h2&gt;
&lt;p&gt;Doom/stoner metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/03-Messa-Close-1200.jpeg&quot; title=&quot;Cover of Close by Messa&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/03-Messa-Close-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/03-Messa-Close-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/03-Messa-Close-784.jpeg&quot; alt=&quot;Cover of Close by Messa&quot; title=&quot;Cover of Close by Messa&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;4. &lt;em&gt;Lucifer on the Sofa&lt;/em&gt; by Spoon&lt;/h2&gt;
&lt;p&gt;Indie/blues rock&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/04-Spoon-Lucifer_on_the_Sofa-800.jpeg&quot; title=&quot;Cover of Lucifer on the Sofa by Spoon&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/04-Spoon-Lucifer_on_the_Sofa-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/04-Spoon-Lucifer_on_the_Sofa-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/04-Spoon-Lucifer_on_the_Sofa-784.jpeg&quot; alt=&quot;Cover of Lucifer on the Sofa by Spoon&quot; title=&quot;Cover of Lucifer on the Sofa by Spoon&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;5. &lt;em&gt;Innate Passage&lt;/em&gt; by Elder&lt;/h2&gt;
&lt;p&gt;Prog/psychedelic rock&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/05-Elder-Innate_Passage-1200.jpeg&quot; title=&quot;Cover of Innate Passage by Elder&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/05-Elder-Innate_Passage-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/05-Elder-Innate_Passage-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/05-Elder-Innate_Passage-784.jpeg&quot; alt=&quot;Cover of Innate Passage by Elder&quot; title=&quot;Cover of Innate Passage by Elder&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;6. &lt;em&gt;Grey Everlasting&lt;/em&gt; by Deathwhite&lt;/h2&gt;
&lt;p&gt;Doom/heavy metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/06-Deathwhite-Grey_Everlasting-1200.jpeg&quot; title=&quot;Cover of Grey Everlasting by Deathwhite&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/06-Deathwhite-Grey_Everlasting-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/06-Deathwhite-Grey_Everlasting-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/06-Deathwhite-Grey_Everlasting-784.jpeg&quot; alt=&quot;Cover of Grey Everlasting by Deathwhite&quot; title=&quot;Cover of Grey Everlasting by Deathwhite&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;7. &lt;em&gt;Only the Strong Survive&lt;/em&gt; by Bruce Springsteen&lt;/h2&gt;
&lt;p&gt;Soul/R&amp;amp;B&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/07-Bruce_Springsteen-Only_the_Strong_Survive-500.jpeg&quot; title=&quot;Cover of Only the Strong Survive by Bruce Springsteen&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/07-Bruce_Springsteen-Only_the_Strong_Survive-500.avif 500w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/07-Bruce_Springsteen-Only_the_Strong_Survive-500.jpeg 500w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/07-Bruce_Springsteen-Only_the_Strong_Survive-500.jpeg&quot; alt=&quot;Cover of Only the Strong Survive by Bruce Springsteen&quot; title=&quot;Cover of Only the Strong Survive by Bruce Springsteen&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;8. &lt;em&gt;Myriad&lt;/em&gt; by Gaupa&lt;/h2&gt;
&lt;p&gt;Doom/stoner metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/08-Gaupa-Myriad-1200.jpeg&quot; title=&quot;Cover of Myriad by Gaupa&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/08-Gaupa-Myriad-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/08-Gaupa-Myriad-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/08-Gaupa-Myriad-784.jpeg&quot; alt=&quot;Cover of Myriad by Gaupa&quot; title=&quot;Cover of Myriad by Gaupa&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;9. &lt;em&gt;Once Bit Never Bored&lt;/em&gt; by Taipei Houston&lt;/h2&gt;
&lt;p&gt;Garage rock&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/09-Taipei_Houston-Once_Bit_Never_Bored-640.jpeg&quot; title=&quot;Cover of Once Bit Never Bored by Taipei Houston&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/09-Taipei_Houston-Once_Bit_Never_Bored-640.avif 640w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/09-Taipei_Houston-Once_Bit_Never_Bored-640.jpeg 640w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/09-Taipei_Houston-Once_Bit_Never_Bored-640.jpeg&quot; alt=&quot;Cover of Once Bit Never Bored by Taipei Houston&quot; title=&quot;Cover of Once Bit Never Bored by Taipei Houston&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;10. &lt;em&gt;Over Opiated in a Forest of Whispering Speakers&lt;/em&gt; by Seven Nines and Tens&lt;/h2&gt;
&lt;p&gt;Progressive metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/10-Seven_Nines_and_Tens-Over_Opiated_in_a_Forest_of_Whispering_Speakers-1200.jpeg&quot; title=&quot;Cover of Over Opiated in a Forest of Whispering Speakers by Seven Nines and Tens&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/10-Seven_Nines_and_Tens-Over_Opiated_in_a_Forest_of_Whispering_Speakers-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/10-Seven_Nines_and_Tens-Over_Opiated_in_a_Forest_of_Whispering_Speakers-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/10-Seven_Nines_and_Tens-Over_Opiated_in_a_Forest_of_Whispering_Speakers-784.jpeg&quot; alt=&quot;Cover of Over Opiated in a Forest of Whispering Speakers by Seven Nines and Tens&quot; title=&quot;Cover of Over Opiated in a Forest of Whispering Speakers by Seven Nines and Tens&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;11. &lt;em&gt;A Bit of Previous&lt;/em&gt; by Belle and Sebastian&lt;/h2&gt;
&lt;p&gt;Indie pop&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/11-Belle_and_Sebastian-A_Bit_of_Previous-1200.jpeg&quot; title=&quot;Cover of A Bit of Previous by Belle and Sebastian&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/11-Belle_and_Sebastian-A_Bit_of_Previous-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/11-Belle_and_Sebastian-A_Bit_of_Previous-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/11-Belle_and_Sebastian-A_Bit_of_Previous-784.jpeg&quot; alt=&quot;Cover of A Bit of Previous by Belle and Sebastian&quot; title=&quot;Cover of A Bit of Previous by Belle and Sebastian&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;12. &lt;em&gt;Those Who Hunt at Night&lt;/em&gt; by Save Masters&lt;/h2&gt;
&lt;p&gt;Heavy metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/12-Savage_Masters-Those_Who_Hunt_at_Night-2048.jpeg&quot; title=&quot;Cover of Those Who Hunt at Night by Save Masters&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/12-Savage_Masters-Those_Who_Hunt_at_Night-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/12-Savage_Masters-Those_Who_Hunt_at_Night-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/12-Savage_Masters-Those_Who_Hunt_at_Night-784.jpeg&quot; alt=&quot;Cover of Those Who Hunt at Night by Save Masters&quot; title=&quot;Cover of Those Who Hunt at Night by Save Masters&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;13. &lt;em&gt;Here’s What You Could Have Won&lt;/em&gt; by Kid Kapichi&lt;/h2&gt;
&lt;p&gt;Punk rock&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/13-Kid_Kapichi-Heres_What_You_Could_Have_Won-640.jpeg&quot; title=&quot;Cover of Here&quot; s=&quot;&quot; What=&quot;&quot; You=&quot;&quot; Could=&quot;&quot; Have=&quot;&quot; Won=&quot;&quot; by=&quot;&quot; Kid=&quot;&quot; Kapichi&#39;=&quot;&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/13-Kid_Kapichi-Heres_What_You_Could_Have_Won-640.avif 640w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/13-Kid_Kapichi-Heres_What_You_Could_Have_Won-640.jpeg 640w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/13-Kid_Kapichi-Heres_What_You_Could_Have_Won-640.jpeg&quot; alt=&quot;Cover of Here&quot; s=&quot;&quot; What=&quot;&quot; You=&quot;&quot; Could=&quot;&quot; Have=&quot;&quot; Won=&quot;&quot; by=&quot;&quot; Kid=&quot;&quot; Kapichi&#39;=&quot;&quot; title=&quot;Cover of Here&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;14. &lt;em&gt;Gnosis&lt;/em&gt; by Russian Circles&lt;/h2&gt;
&lt;p&gt;Post-metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/14-Russian_Circles-Gnosis-1200.jpeg&quot; title=&quot;Cover of Gnosis by Russian Circles&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/14-Russian_Circles-Gnosis-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/14-Russian_Circles-Gnosis-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/14-Russian_Circles-Gnosis-784.jpeg&quot; alt=&quot;Cover of Gnosis by Russian Circles&quot; title=&quot;Cover of Gnosis by Russian Circles&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;15. &lt;em&gt;New Low&lt;/em&gt; by Greet Death&lt;/h2&gt;
&lt;p&gt;Shoegaze&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/15-Greet_Death-New_Low-1200.jpeg&quot; title=&quot;Cover of New Low by Greet Death&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/15-Greet_Death-New_Low-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/15-Greet_Death-New_Low-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/15-Greet_Death-New_Low-784.jpeg&quot; alt=&quot;Cover of New Low by Greet Death&quot; title=&quot;Cover of New Low by Greet Death&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;16. &lt;em&gt;Leather Terror&lt;/em&gt; by Carpenter Brut&lt;/h2&gt;
&lt;p&gt;Synthwave/darksynth&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/16-Carpenter_Brut-Leather_Terror-1200.jpeg&quot; title=&quot;Cover of Leather Terror by Carpenter Brut&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/16-Carpenter_Brut-Leather_Terror-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/16-Carpenter_Brut-Leather_Terror-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/16-Carpenter_Brut-Leather_Terror-784.jpeg&quot; alt=&quot;Cover of Leather Terror by Carpenter Brut&quot; title=&quot;Cover of Leather Terror by Carpenter Brut&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;17. &lt;em&gt;The Car&lt;/em&gt; by Arctic Monkeys&lt;/h2&gt;
&lt;p&gt;Indie  rock&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/17-Arctic_Monkeys-The_Car-3000.jpeg&quot; title=&quot;Cover of The Car by Arctic Monkeys&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/17-Arctic_Monkeys-The_Car-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/17-Arctic_Monkeys-The_Car-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/17-Arctic_Monkeys-The_Car-784.jpeg&quot; alt=&quot;Cover of The Car by Arctic Monkeys&quot; title=&quot;Cover of The Car by Arctic Monkeys&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;18. &lt;em&gt;Our Side of Their Story&lt;/em&gt; by Federale&lt;/h2&gt;
&lt;p&gt;Ennio Morricone core&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/18-Federale-Our_Side_of_Their_Story-1200.jpeg&quot; title=&quot;Cover of Our Side of Their Story by Federale&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/18-Federale-Our_Side_of_Their_Story-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/18-Federale-Our_Side_of_Their_Story-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/18-Federale-Our_Side_of_Their_Story-784.jpeg&quot; alt=&quot;Cover of Our Side of Their Story by Federale&quot; title=&quot;Cover of Our Side of Their Story by Federale&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;19. &lt;em&gt;DISCO4 :: PART II&lt;/em&gt; by HEALTH&lt;/h2&gt;
&lt;p&gt;Noise rock&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/19-Health-DISCO4_PART_II-1200.jpeg&quot; title=&quot;Cover of DISCO4 :: PART II by HEALTH&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/19-Health-DISCO4_PART_II-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/19-Health-DISCO4_PART_II-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/19-Health-DISCO4_PART_II-784.jpeg&quot; alt=&quot;Cover of DISCO4 :: PART II by HEALTH&quot; title=&quot;Cover of DISCO4 :: PART II by HEALTH&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;20. &lt;em&gt;Dreamkiller&lt;/em&gt; by Sumerlands&lt;/h2&gt;
&lt;p&gt;Heavy/power metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/20-Sumerlands-Dreamkiller-1200.jpeg&quot; title=&quot;Cover of Dreamkiller by Sumerlands&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/20-Sumerlands-Dreamkiller-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/20-Sumerlands-Dreamkiller-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/20-Sumerlands-Dreamkiller-784.jpeg&quot; alt=&quot;Cover of Dreamkiller by Sumerlands&quot; title=&quot;Cover of Dreamkiller by Sumerlands&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;21. &lt;em&gt;Two Ribbons&lt;/em&gt; by Let’s Eat Grandma&lt;/h2&gt;
&lt;p&gt;Synth pop&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/21-Lets_Eat_Grandma-Two_Ribbons-640.jpeg&quot; title=&quot;Cover of Two Ribbons by Let&quot; s=&quot;&quot; Eat=&quot;&quot; Grandma&#39;=&quot;&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/21-Lets_Eat_Grandma-Two_Ribbons-640.avif 640w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/21-Lets_Eat_Grandma-Two_Ribbons-640.jpeg 640w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/21-Lets_Eat_Grandma-Two_Ribbons-640.jpeg&quot; alt=&quot;Cover of Two Ribbons by Let&quot; s=&quot;&quot; Eat=&quot;&quot; Grandma&#39;=&quot;&quot; title=&quot;Cover of Two Ribbons by Let&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;22. &lt;em&gt;Take All You Can&lt;/em&gt; by Freedom Hawk&lt;/h2&gt;
&lt;p&gt;Stoner metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/22-Freedom_Hawk-Take_All_You_Can-1200.jpeg&quot; title=&quot;Cover of Take All You Can by Freedom Hawk&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/22-Freedom_Hawk-Take_All_You_Can-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/22-Freedom_Hawk-Take_All_You_Can-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/22-Freedom_Hawk-Take_All_You_Can-784.jpeg&quot; alt=&quot;Cover of Take All You Can by Freedom Hawk&quot; title=&quot;Cover of Take All You Can by Freedom Hawk&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;23. &lt;em&gt;Folium Limina&lt;/em&gt; by The Otolith&lt;/h2&gt;
&lt;p&gt;Doom metal&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/23-The_Otolith-Folium_Limina-1200.jpeg&quot; title=&quot;Cover of Folium Limina by The Otolith&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/23-The_Otolith-Folium_Limina-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/23-The_Otolith-Folium_Limina-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/23-The_Otolith-Folium_Limina-784.jpeg&quot; alt=&quot;Cover of Folium Limina by The Otolith&quot; title=&quot;Cover of Folium Limina by The Otolith&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;24. &lt;em&gt;Unison Life&lt;/em&gt; by Brutus&lt;/h2&gt;
&lt;p&gt;Post-hardcore&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/24-Brutus-Unison_Life-1200.jpeg&quot; title=&quot;Cover of Unison Life by Brutus&quot;&gt;
	&lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/24-Brutus-Unison_Life-784.avif 784w&quot; sizes=&quot;100%&quot; /&gt;
&lt;source type=&quot;image/jpeg&quot; srcset=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/24-Brutus-Unison_Life-784.jpeg 784w&quot; sizes=&quot;100%&quot; /&gt;
        &lt;img src=&quot;https://romain.delama.re/writes/2022-music-advent-calendar/24-Brutus-Unison_Life-784.jpeg&quot; alt=&quot;Cover of Unison Life by Brutus&quot; title=&quot;Cover of Unison Life by Brutus&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
    &lt;/picture&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Fin&lt;/h2&gt;
&lt;p&gt;That’s all folks, I wish you all happy holidays!&lt;/p&gt;
</content>
		</entry>
</feed>
