M Gemfile.lock => Gemfile.lock +40 -42
@@ 1,15 1,15 @@
GEM
remote: http://rubygems.org/
specs:
- activesupport (6.0.3.4)
+ activesupport (6.1.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
- i18n (>= 0.7, < 2)
- minitest (~> 5.1)
- tzinfo (~> 1.1)
- zeitwerk (~> 2.2, >= 2.2.2)
- addressable (2.7.0)
+ i18n (>= 1.6, < 2)
+ minitest (>= 5.1)
+ tzinfo (~> 2.0)
+ zeitwerk (~> 2.3)
+ addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
- asciidoctor (2.0.10)
+ asciidoctor (2.0.17)
asciidoctor-bibliography (0.10.3)
asciidoctor (>= 1.5.6)
bibtex-ruby (~> 4.4.4)
@@ 23,42 23,43 @@ GEM
latex-decode (~> 0.0)
citeproc (1.0.10)
namae (~> 1.0)
- citeproc-ruby (1.1.12)
+ citeproc-ruby (1.1.14)
citeproc (~> 1.0, >= 1.0.9)
- csl (~> 1.5)
+ csl (~> 1.6)
colorator (1.1.0)
- concurrent-ruby (1.1.7)
- csl (1.5.1)
+ concurrent-ruby (1.1.10)
+ csl (1.6.0)
namae (~> 1.0)
- csl-styles (1.0.1.10)
+ rexml
+ csl-styles (1.0.1.11)
csl (~> 1.0)
- em-websocket (0.5.2)
+ em-websocket (0.5.3)
eventmachine (>= 0.12.9)
- http_parser.rb (~> 0.6.0)
+ http_parser.rb (~> 0)
eventmachine (1.2.7)
- ffi (1.13.1)
+ ffi (1.15.5)
forwardable-extended (2.6.0)
- html-pipeline (2.14.0)
+ html-pipeline (2.14.2)
activesupport (>= 2)
nokogiri (>= 1.4)
- http_parser.rb (0.6.0)
- i18n (1.8.5)
+ http_parser.rb (0.8.0)
+ i18n (1.12.0)
concurrent-ruby (~> 1.0)
- jekyll (4.1.1)
+ jekyll (4.2.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (~> 2.0)
jekyll-watch (~> 2.0)
- kramdown (~> 2.1)
+ kramdown (~> 2.3)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.4.0)
pathutil (~> 0.9)
rouge (~> 3.0)
safe_yaml (~> 1.0)
- terminal-table (~> 1.8)
+ terminal-table (~> 2.0)
jekyll-asciidoc (3.0.0)
asciidoctor (>= 1.5.0)
jekyll (>= 3.0.0)
@@ 71,53 72,50 @@ GEM
jekyll-paginate (1.1.0)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
- jekyll-sass-converter (2.1.0)
+ jekyll-sass-converter (2.2.0)
sassc (> 2.0.1, < 3.0)
- jekyll-seo-tag (2.6.1)
- jekyll (>= 3.3, < 5.0)
+ jekyll-seo-tag (2.8.0)
+ jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
- kramdown (2.3.0)
+ kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
latex-decode (0.2.2)
unicode (~> 0.4)
liquid (4.0.3)
- listen (3.2.1)
+ listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
mini_portile2 (2.3.0)
- minitest (5.14.2)
- multi_json (1.15.0)
- namae (1.0.1)
+ minitest (5.16.2)
+ namae (1.1.1)
nokogiri (1.8.5)
mini_portile2 (~> 2.3.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
posix-spawn (0.3.15)
- public_suffix (4.0.6)
- pygments.rb (1.2.1)
- multi_json (>= 1.0.0)
- rb-fsevent (0.10.4)
+ public_suffix (4.0.7)
+ pygments.rb (2.3.0)
+ rb-fsevent (0.11.1)
rb-inotify (0.10.1)
ffi (~> 1.0)
- rexml (3.2.4)
- rouge (3.23.0)
+ rexml (3.2.5)
+ rouge (3.29.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
- terminal-table (1.8.0)
+ terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
- thread_safe (0.3.6)
- tzinfo (1.2.7)
- thread_safe (~> 0.1)
+ tzinfo (2.0.5)
+ concurrent-ruby (~> 1.0)
unicode (0.4.4.4)
- unicode-display_width (1.7.0)
- zeitwerk (2.4.0)
+ unicode-display_width (1.8.0)
+ zeitwerk (2.6.0)
PLATFORMS
ruby
@@ 136,4 134,4 @@ DEPENDENCIES
pygments.rb
BUNDLED WITH
- 2.1.4
+ 2.3.15
M _config.yml => _config.yml +1 -5
@@ 9,7 9,6 @@ paginate: 5
exclude: ["vendor"]
baseurl: ""
domain_name: 'http://ane.iki.fi'
-highlighter: rouge
# Details for the RSS feed generator
url: 'http://ane.iki.fi'
@@ 26,10 25,7 @@ plugins:
- jekyll-last-modified-at
-collections:
- micro:
- output: true
- permalink: /:collection/:year:month:day:hour:minute
+collections: []
twitter:
username: anewtf
M => +18 -23
@@ 1,26 1,21 @@
<h1>
Antoine Kalmbach
</h1>
<nav class="navbar">
<ul>
<li class="nav-item {% if page.title == 'Home' %} active {% endif %}">
<a class="nav-link" href="/" itemprop="url"><span itemprop="name">Home</span></a>
</li>
<li class="nav-item {% if page.title == 'Archive' or page.layout == 'post' %} active{% endif %}">
<a class="nav-link" href="/archive.html" itemprop="url"><span itemprop="name">Blog</span></a>
</li>
<li class="nav-item {% if page.title == 'About' %}active{% endif %}">
<a class="nav-link" href="/about/" itemprop="url"><span itemprop="name">About</span></a>
</li>
<li class="nav-item {% if page.title == 'Index' %}active{% endif %}">
<a class="nav-link" href="{% link tags.html %}" itemprop="url"><span itemprop="name">Index</span></a>
</li>
<li class="nav-item mr-n2">
<a class="nav-link" href="/feed.xml"><i class="fa fa-rss" aria-hidden="true"></i> RSS</a>
</li>
</ul>
</nav>
<header class="main">
<h1>
Antoine Kalmbach's blog
</h1>
<nav>
<ul>
<li class="nav-item {% if page.title == 'Home' or page.layout == 'post' %} active{% endif %}">
<a class="nav-link" href="/" itemprop="url"><span itemprop="name">Blog</span></a>
</li>
<li class="nav-item {% if page.title == 'About' %}active{% endif %}">
<a class="nav-link" href="/about/" itemprop="url"><span itemprop="name">About</span></a>
</li>
<li class="nav-item mr-n2">
<a class="nav-link" href="/feed.xml"><i class="fa fa-rss" aria-hidden="true"></i> RSS</a>
</li>
</ul>
</nav>
</div>
<div class="h-card d-none" style="display: none">
<img class="u-photo" src="/images/me.png" />
M _layouts/default.html => _layouts/default.html +1 -1
@@ 46,7 46,7 @@
<footer>
<hr>
<address>
- {% assign changelog = site.pages | where: 'name', 'index.md' | first %}
+ {% assign changelog = site.pages | where: 'name', 'index.html' | first %}
{% if changelog %}
{% assign changed_date = changelog.last_modified_at | date: '%B %d, %Y' %}
{% endif %}
M _layouts/post.html => _layouts/post.html +9 -0
@@ 4,14 4,23 @@ archive: false
post_class: post-template
---
+
<article class="h-entry">
<header>
{% include post-title.html post=page bip=page.title %}
<link itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/BlogPosting" href="{{ post.url }}" />
</header>
+
+ {% if post.collection != "posts" %}
+ {% assign coll = site.collections | where: "label", post.collection | first %}
+ <em>This post is part of a series called {{ coll.title }}. {% if page.previous %} The previous entry in this series is <a href="{{ page.previous.url }}">{{ page.previous.title }}</a>. {% endif %} {% if page.next %} The next entry in this series is <a href="{{ page.next.url }}">{{ page.next.title }}</a>. {% endif %}</em>
+ {% endif %}
+
+
<div class="e-content">
{{content}}
</div>
+
<small style="display: flex; justify-content: space-between;">
{% if page.previous %}
<em>
D _micro/01.md => _micro/01.md +0 -9
@@ 1,9 0,0 @@
----
-layout: micro
-date: 2020-06-13T00:00:00
-title: ""
-category: micro
----
-
-Let's see if this thing can actually sync the post contents
-to [micro.blog](http://micro.blog). Interesting.
D _micro/02.md => _micro/02.md +0 -7
@@ 1,7 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-06-14T06:00:00
----
-
-Well, here goes another. Let's see how this thing goes!
D _micro/03.md => _micro/03.md +0 -7
@@ 1,7 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-06-14T08:00:00
----
-
-Ok, think I should be able to get multiple posts on the same day.
D _micro/04.md => _micro/04.md +0 -8
@@ 1,8 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-06-15T13:00:00Z
----
-
-Cool. Now the microblogging feature is ready. Cross-posting should work
-and the individual µblog entry should work here as well!
D _micro/05.md => _micro/05.md +0 -11
@@ 1,11 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-06-16T10:23:33+03:00
----
-
-Getting PCB designs ready for a prototype project done in KiCad.
-Works now on a breadboard, soldered stripboard is next. What is it?
-A white noise generator to help a baby fall asleep. It's digital,
-I could've built an analog version but a µc solution costs less
-and takes up less space.
D _micro/06.md => _micro/06.md +0 -12
@@ 1,12 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-06-30T12:50:54+03:00
----
-
-Built the white noise generator. Turns out the baby doesn't need white noise to
-fall asleep anymore. Next: UV index detector. I'll use a regular [405 nm ultraviolet
-LED](https://www.mouser.fi/ProductDetail/593-VAOL5EUV0T4) as a *sensor*!
-LEDs [can act as light
-detectors](http://www.thebox.myzen.co.uk/Workshop/LED_Sensing.html), they won't
-be as precise as real photodiodes, but it'll be close enough.
D _micro/07.md => _micro/07.md +0 -11
@@ 1,11 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-07-22T09:43:12+03:00
----
-
-Having fun with analog electronics. Turns out it's much more fun (and
-challenging) to eschew microcontrollers. Lots of things can be done with
-op-amps, comparators, 555 timers and some of the intermediate-complex stuff
-can be done using CMOS4000 series digital ICs. All of this is dirt cheap! Even
-those 4000 series ICs cost a third of the cheapest 8-bit AVR micros.
D _micro/08.md => _micro/08.md +0 -10
@@ 1,10 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-07-22T11:08:33+03:00
----
-
-Testing Twitter cross-posting with [IFTT](https://ifttt.com/)! Found the method
-in [this
-article](https://ictsolved.github.io/auto-post-articles-from-jekyll-blog-to-social-sites/),
-if it doesn't work I'll probably pay for micro.blog to do this for me.
D _micro/09.md => _micro/09.md +0 -11
@@ 1,11 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-07-22T11:38:11+03:00
----
-
-Nice, [IFTTT cross-posting to Twitter](http://ane.github.io/micro/202007220808)
-works. It'll sync stuff on my own site to Twitter, but replies won't be
-visible, doesn't matter. I was after [POSSE](https://indieweb.org/POSSE) anyway.
-Webmention replies *should* work but Twitter doesn't support that - I won't see
-Twitter replies.
D _micro/10.md => _micro/10.md +0 -9
@@ 1,9 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-09-02T12:48:20+03:00
----
-
-Did some style changes on the site. Narrowed down the body width and changed
-fonts to serif. I'll probably change it again in a year, but that's the fun
-part. It's never finished!
D _micro/11.md => _micro/11.md +0 -9
@@ 1,9 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-09-04T15:42:24+03:00
----
-
-Configured Emacs and [mu4e](https://www.djcbsoftware.nl/code/mu/mu4e.html) for
-reading mail, [offlineimap](http://www.offlineimap.org/) for retrieval and
-[msmtp](https://marlam.de/msmtp/) for sending it. That was surprisingly easy.
D _micro/12.md => _micro/12.md +0 -9
@@ 1,9 0,0 @@
----
-layout: micro
-title: ""
-date: 2020-09-24T12:25:25+03:00
----
-
-Some frontpage updates. Created a single stream of updates, probably easier to
-follow the order of things. Also disabled IFTTT for now. I don’t really care
-who reads what I do on Twitter!
M _posts/2016-01-01-before-we-begin.md => _posts/2016-01-01-before-we-begin.md +1 -0
@@ 4,6 4,7 @@ date: 2016-01-01
tags: meta
layout: post
disqus: true
+summary: Taking a step back by going two steps forward
---
Now that the design of the site is finished, I can finally focus on the essentials.
M _posts/2016-01-08-the-expression-problem-as-a-litmus-test.md => _posts/2016-01-08-the-expression-problem-as-a-litmus-test.md +1 -0
@@ 6,6 6,7 @@ tags:
- programming
- ocaml
title: The expression problem as a litmus test
+summary: Measuring programming language power of expression
---
The [expression problem](https://en.wikipedia.org/wiki/Expression_problem) is a famous problem in
M _posts/2016-01-26-are-my-services-talking-to-each-other.md => _posts/2016-01-26-are-my-services-talking-to-each-other.md +1 -0
@@ 6,6 6,7 @@ date: 2016-01-26
tags:
- architecture
- distributed
+summary: Can you be sure of the obvious?
---
I am faced with an interesting thought experiment, which asks:
M _posts/2016-03-17-imprecision-and-abstraction.md => _posts/2016-03-17-imprecision-and-abstraction.md +1 -0
@@ 6,6 6,7 @@ date: 2016-03-17
tags:
- programming
- math
+summary: Generalization always loses information
---
What is the point of abstractions?
M _posts/2016-03-25-focus.md => _posts/2016-03-25-focus.md +1 -0
@@ 8,6 8,7 @@ tags:
- scala
- haskell
- clojure
+summary: Programming languages should have a mission and a vision
---
Focus is a design element in programming languages that I think deserves more attention than it
M _posts/2016-10-26-web-development-has-become-weird.md => _posts/2016-10-26-web-development-has-become-weird.md +1 -0
@@ 4,6 4,7 @@ date: 2016-10-25
layout: post
tags:
- web
+summary: Single-page applications will kill the web
---
Call me old-fashioned, call me a curmudgeon, but I think web development has become stupid and
M _posts/2016-11-02-half-stack-web-frameworks.md => _posts/2016-11-02-half-stack-web-frameworks.md +1 -0
@@ 8,6 8,7 @@ tags:
- ruby
- react
- javascript
+summary: A modern alternative to single-page apps
---
In my previous post, I discussed [how web development had become weird]({% post_url
M _posts/2017-03-08-camel-abstractions.md => _posts/2017-03-08-camel-abstractions.md +1 -0
@@ 7,6 7,7 @@ tags:
- java
- clojure
- camel
+summary: In the world of complex systems, nothing is free
---
[Apache Camel](http://camel.apache.org/) is a routing and mediation engine. If that doesn't say
M _posts/2017-03-15-implicit-power.md => _posts/2017-03-15-implicit-power.md +1 -0
@@ 4,6 4,7 @@ title: Implicit power
date: 2017-03-15T00:00:00
tags:
- scala
+summary: The many faces of Scala implicits
---
Scala gets lots of flak for implicits. Some of the feedback is justified: implicits in Scala can be
M _posts/2017-03-23-useless-interfaces.md => _posts/2017-03-23-useless-interfaces.md +1 -0
@@ 6,6 6,7 @@ disqus: true
tags:
- programming
- scala
+summary: Sometimes abstractions add just noise
---
A feature that often frustrates me in object-oriented code is the prevalence of useless
M _posts/2018-02-10-envisioning-a-new-tracing-system.adoc => _posts/2018-02-10-envisioning-a-new-tracing-system.adoc +1 -0
@@ 3,6 3,7 @@
:page-liquid:
:page-tags: [distributed, tracing]
:page-description: We can tell where we are by knowing the time and looking at stars. Can we do the same with distributed software systems?
+:page-summary: Can you do magic without instrumentation?
I've begun designing a new kind of tracing system for distributed
systems. With tracing system I mean something like Zipkin or Prometheus:
M _posts/2018-03-22-the-joy-of-asciidoc.adoc => _posts/2018-03-22-the-joy-of-asciidoc.adoc +1 -0
@@ 3,6 3,7 @@
:page-liquid:
:page-tags: [meta]
:page-description: Markdown has many limitations, AsciiDoc has few. Converting this site to AsciiDoc was not as easy as I thought, as I had to ditch the standard Github Jekyll integration, and build my own.
+:page-summary: When plain Markdown isn't enough
I have always used https://jekyllrb.com/[Jekyll] on
https://pages.github.com/[Github Pages] to host this site. It's always been very
M _posts/2018-04-26-software-customization.asciidoc => _posts/2018-04-26-software-customization.asciidoc +1 -0
@@ 3,6 3,7 @@
:xrefstyle: short
:sectanchors:
:page-description: I have been thinking long and hard about how to do software customization properly at a software architecture level. I don't want to claim that I have figured things out, but I offer what I think is a reasonably abstract solution, if that makes sense.
+:page-summary: You can't please everyone, but you may try
[[two-versions]]
[role="float-sm-right half ml-sm-3"]
M _posts/2018-09-16-the-runtime-configuration-problem.adoc => _posts/2018-09-16-the-runtime-configuration-problem.adoc +1 -0
@@ 4,6 4,7 @@
:page-tag: architecture
:page-description: Configuring continuously running applications is a tricky problem. Effecting a new configuration alters application behavior, but this doesn't always happen instantly. I explore various ways for ensuring these transitions happen smoothly.
:xrefstyle: short
+:page-summary: Tweaking the brain of a live system
Here's an interesting problem: suppose you have an event-driven system that
needs to respond to events in while the system is running, as they happen, and
M _posts/2019-03-09-configuration.adoc => _posts/2019-03-09-configuration.adoc +1 -0
@@ 4,6 4,7 @@
:page-liquid:
:page-description: Customizing software products can be done by creating derivate products by altering what is known as the baseline product. This results in effectively new products, and managing them involves complicated logistics. What if we brought all the custom features _inside_ the baseline, and used configuration to choose from the baseline what goes into the custom versions?
:figure-caption!:
+:page-summary: Configuring complicated software is complicated
This post is a part of series on link:{% post_url
2018-04-26-software-customization %}[software product customization]. Here, I
M _posts/2019-11-20-embedded-rust-wifi.md => _posts/2019-11-20-embedded-rust-wifi.md +1 -0
@@ 2,6 2,7 @@
layout: post
title: Embedded Rust and WiFi
date: 2019-11-20T00:00:00
+summary: Exploration of various WiFi chips with Rust support
---
Earlier this year, in May or so, I started having fun with hobby electronics,
M _posts/2020-03-07-winding-down.md => _posts/2020-03-07-winding-down.md +1 -0
@@ 2,6 2,7 @@
title: Winding down
layout: post
date: 2020-03-07T00:00:00
+summary: Typing code for fun and profit is both fun and profitable?
---
I find it curious I can get paid for programming and still practise programming
M _posts/2020-09-02-inside-the-machine.md => _posts/2020-09-02-inside-the-machine.md +1 -0
@@ 2,6 2,7 @@
title: Inside the machine
layout: post
date: 2020-09-03T09:34:03+03:00
+summary: Why live introspection of programs is awesome
---
One of the most interesting aspects of programming is the ability to inspect *and
M _posts/2020-09-09-rmail.md => _posts/2020-09-09-rmail.md +7 -4
@@ 4,12 4,15 @@ title: Back to Rmail
date: 2020-09-09T13:55:56+03:00
tags:
- emacs
+summary: Switching back to Rmail, the standard Emacs email reader
---
-While I initially [wrote about switching to mu4e]({% link _micro/11.md %}), I was initially
-pleased by it, but then I found out about [Rmail](https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html#Rmail). <!--break-->Rmail is
-kind of like the standard Emacs email reader. [Gnus](https://www.gnu.org/software/emacs/manual/html_node/gnus/index.html#Top) is pretty
-comprehensive in terms of features but I was kind of put off by its
+While I initially began using mu4e, I was initially pleased by it, but then I
+found out about
+[Rmail](https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html#Rmail). <!--break-->Rmail
+is kind of like the standard Emacs email
+reader. [Gnus](https://www.gnu.org/software/emacs/manual/html_node/gnus/index.html#Top)
+is pretty comprehensive in terms of features but I was kind of put off by its
complexity.
So, eventually, my setup became the following:
M _posts/2020-10-01-between-two-lisps.md => _posts/2020-10-01-between-two-lisps.md +1 -0
@@ 2,6 2,7 @@
layout: post
title: Between two Lisps
date: 2020-10-05T17:03:41+03:00
+summary: My experiences of Guile and Common Lisp
---
Out of all Lisps the ones I’ve come to appreciate the most are [Scheme](https://en.wikipedia.org/wiki/Scheme_(programming_language)) and [Common
M _posts/2020-10-06-no-more-microblog.md => _posts/2020-10-06-no-more-microblog.md +8 -10
@@ 2,21 2,19 @@
layout: post
title: No more microblog
date: 2020-10-06T16:56:28+03:00
+summary: It was fun while it lasted
---
-The [microblog]({% link micro.md %}) is no more. I got this idea due to a sudden
-realization: there is no minimum length to a blog post. Any microblog post was
-just a short blog post. Perhaps the idea with it was to participate in the
+The microblog is no more. I got this idea due to a sudden realization: there is
+no minimum length to a blog post. Any microblog post was just a short blog
+post. Perhaps the idea with it was to participate in the
[IndieWeb](https://indieweb.org/) zeitgeist, but in the end I realized I’m not
interested in posting that much short-form content. Twitter is just noise, why
would any federated version of it be less noise?
-So, the microblog is gone. I’ll keep the [page]({% link micro.md %}) around but
-this page will be the only place linking to it.
-
-Perhaps this will affect my blogging frequency, perhaps not. One thing that will
-be different is the blog will focus on informal writings, perhaps even to just
-say *I ate a nice pizza today*, and I’ll start working on having a content
-vs. journal style separation between the blog.
+So, the microblog is gone. Perhaps this will affect my blogging frequency,
+perhaps not. One thing that will be different is the blog will focus on informal
+writings, perhaps even to just say *I ate a nice pizza today*, and I’ll start
+working on having a content vs. journal style separation between the blog.
Maybe.
M _posts/2020-10-10-this-site.md => _posts/2020-10-10-this-site.md +7 -5
@@ 2,6 2,7 @@
layout: post
date: 2020-10-03
title: How I built this website
+summary: Documenting the origin of this website
---
Sometimes people ask me (well, one person did) how I actually author content on
@@ 39,10 40,11 @@ often it needs to be an informal journal, otherwise I will set the posting
standard too high and not post.
Fast forward to 2020 I ended up revitalizing my interest on this site, and this
-happened almost by accident. I created a [created a microblog]({% link _micro/01.md %}) and then [ended it]({% post_url 2020-10-06-no-more-microblog %}),
-because I realized it made no sense to have a blog with an arbitrary minimum
-post length. Then I realized I need to actually have more than just blog posts,
-many of the blog posts I have are actually quite [gargantuan in size]({% post_url 2018-04-26-software-customization %}).
+happened almost by accident. I created a microblog and then [ended it]({%
+post_url 2020-10-06-no-more-microblog %}), because I realized it made no sense
+to have a blog with an arbitrary minimum post length. Then I realized I need to
+actually have more than just blog posts, many of the blog posts I have are
+actually quite [gargantuan in size]({% post_url 2018-04-26-software-customization %}).
So I started to transition the site towards the blog being, well, just an online
journal of sorts. More structured content is grouped and assembled into the
@@ 55,7 57,7 @@ readers.
### Infrastructure ###
This site is a fairly standard [Jekyll](http://jekyllrb.com) static website. The site is divided into
-two principal sections: content and [blog]({% link archive.html %}). Posts are written primarily in
+two principal sections: content and [blog]({% link index.html %}). Posts are written primarily in
Markdown. The site is versioned using Git and hosted at
[sourcehut](https://git.sr.ht/~ane/web), a [builds.sr.ht job](https://git.sr.ht/~ane/web/tree/master/item/.build.yml)
builds the site after every commit and then pushes the contents to [pages.sr.ht](srht.site).
M _posts/2020-10-11-divergence.md => _posts/2020-10-11-divergence.md +2 -0
@@ 3,6 3,8 @@ layout: post
title: |-
Divergence: A website is born
date: 2020-10-11T13:32:21+03:00
+summary: |-
+ The blog becomes its own section on this site (update: this is no longer true)
---
Some readers might have noticed a new section appearing on the [front page]({{ site.url }}). It's
M _posts/2020-10-19-patches.md => _posts/2020-10-19-patches.md +1 -0
@@ 9,6 9,7 @@ tags:
- emacs
- git
- lisp
+summary: How to send Git patches from Emacs
---
Git was initially designed around emails. Modern [Git forges](https://en.wikipedia.org/wiki/Forge_(software)) have co-opted the
M _posts/2020-10-30-guile-test-driver.md => _posts/2020-10-30-guile-test-driver.md +1 -0
@@ 11,6 11,7 @@ tags:
- guile
- meson
- autoconf
+summary: A [Meson](http://mesonbuild.com) compatible test runner for [GNU Guile](http://www.gnu.org/software/guile)
---
The other day I was playing around with the [Meson](https://mesonbuild.com/)
M _posts/2020-12-06-goops-virtual-slots-and-ffi.md => _posts/2020-12-06-goops-virtual-slots-and-ffi.md +1 -0
@@ 11,6 11,7 @@ tags:
- scheme
- guile
- recutils
+summary: "Interfacing with C code using object-oriented programming in Scheme"
---
For the past month or so I've been contributing to [GNU Recutils](https://www.gnu.org/software/recutils/), a set of tools
M _posts/2020-12-08-five-years-of-blogging.md => _posts/2020-12-08-five-years-of-blogging.md +1 -0
@@ 3,6 3,7 @@ date: 2020-12-08T15:36:12+02:00
title: Guile fun times, and blog update
tags: [guile, meta]
layout: post
+summary: Celebrating five years of blogging
---
Holy crap, [it's been five years]({% post_url 2015-12-07-start-once-software %})! Time passes so quickly. What can happen in five
M _posts/2021-07-28-this-website-is-now-on-sourcehut.md => _posts/2021-07-28-this-website-is-now-on-sourcehut.md +1 -0
@@ 3,6 3,7 @@ date: 2021-07-28T14:17:14+03:00
title: This website is now hosted on sourcehut
tags: [meta, sourcehut]
layout: post
+summary: I'm moving away from Github Pages
---
I've been meaning to move away from [Github Pages](https://pages.github.com/) to
M _posts/2022-06-20-beenthere-donethat.md => _posts/2022-06-20-beenthere-donethat.md +1 -0
@@ 3,6 3,7 @@ layout: post
title: Been there, done that
date: 2022-06-21T00:00:00Z
tags: [bash]
+summary: "Bookmarks for your shell history"
---
Shell history and browser history, I could do without one but not the other! I
M about.md => about.md +1 -1
@@ 6,7 6,7 @@ permalink: /about/
## About me
-<img title="I, in picture form" class="me-pic" src="/images/me.png" width="125" />
+<img title="I, in picture form" class="me-pic" src="/images/me.png" width="150" />
I work as a software architect at [Qvantel](http://www.qvantel.com), where I
build software for the telecom industry. I live in Jyväskylä, Finland with my
M assets/override.scss => assets/override.scss +66 -0
@@ 33,6 33,71 @@ a {
}
}
+ul.posts {
+ padding-left: 0;
+
+ .grey {
+ color: #888;
+ }
+
+ li.unstyled {
+ list-style-type: none;
+ margin-bottom: 1rem;
+
+ p {
+ margin-top: 0;
+ }
+ }
+}
+
+aside.intro {
+ @media screen and (max-width: 1024px) {
+ display: none;
+ }
+ @media screen and (min-width: 1024px) {
+ float: right;
+ width: 175px;
+ }
+}
+
+header.main {
+ @media screen and (min-width: 1024px) {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+ }
+
+ border-bottom: 1px solid #333;
+ margin-bottom: 2rem;
+
+ h1 {
+ margin-bottom: 0;
+ @media screen and (max-width: 1024px) {
+ font-size: 150%;
+ }
+ }
+
+ nav {
+ ul {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style-type: none;
+ display: flex;
+ flex-direction: row;
+ li {
+ padding-left: 1em;
+ &:first-child {
+ padding-left: 0;
+ }
+ &.active {
+ font-weight: bold;
+ }
+ }
+ }
+ }
+}
+
+
ul {
li a.active {
font-weight: bold;
@@ 88,6 153,7 @@ pre.highlight {
padding: 0.5rem 1rem;
border-radius: 4px;
color: #303030;
+ background-color: #f8f8f8;
font-size: 85%;
}
M assets/pygments.css => assets/pygments.css +54 -64
@@ 1,69 1,59 @@
.highlight .hll { background-color: #ffffcc }
-.highlight { background: #f8f8f8; }
-.highlight .c { color: #408080; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #FF0000 } /* Error */
-.highlight .k { color: #008000; font-weight: bold } /* Keyword */
-.highlight .o { color: #666666 } /* Operator */
-.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
-.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #FF0000 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #0044DD } /* Generic.Traceback */
-.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #008000 } /* Keyword.Pseudo */
-.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #B00040 } /* Keyword.Type */
-.highlight .m { color: #666666 } /* Literal.Number */
-.highlight .s { color: #BA2121 } /* Literal.String */
-.highlight .na { color: #7D9029 } /* Name.Attribute */
-.highlight .nb { color: #008000 } /* Name.Builtin */
-.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
-.highlight .no { color: #880000 } /* Name.Constant */
-.highlight .nd { color: #AA22FF } /* Name.Decorator */
-.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #0000FF } /* Name.Function */
-.highlight .nl { color: #A0A000 } /* Name.Label */
-.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #19177C } /* Name.Variable */
-.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #bb8844 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #999999 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mb { color: #666666 } /* Literal.Number.Bin */
-.highlight .mf { color: #666666 } /* Literal.Number.Float */
-.highlight .mh { color: #666666 } /* Literal.Number.Hex */
-.highlight .mi { color: #666666 } /* Literal.Number.Integer */
-.highlight .mo { color: #666666 } /* Literal.Number.Oct */
-.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
-.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
-.highlight .sc { color: #BA2121 } /* Literal.String.Char */
-.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
-.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
-.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
-.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
-.highlight .sx { color: #008000 } /* Literal.String.Other */
-.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
-.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
-.highlight .ss { color: #19177C } /* Literal.String.Symbol */
-.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #0000FF } /* Name.Function.Magic */
-.highlight .vc { color: #19177C } /* Name.Variable.Class */
-.highlight .vg { color: #19177C } /* Name.Variable.Global */
-.highlight .vi { color: #19177C } /* Name.Variable.Instance */
-.highlight .vm { color: #19177C } /* Name.Variable.Magic */
-.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #bb8844 } /* Literal.String.Backtick */
+.highlight .sc { color: #bb8844 } /* Literal.String.Char */
+.highlight .sd { color: #bb8844 } /* Literal.String.Doc */
+.highlight .s2 { color: #bb8844 } /* Literal.String.Double */
+.highlight .se { color: #bb8844 } /* Literal.String.Escape */
+.highlight .sh { color: #bb8844 } /* Literal.String.Heredoc */
+.highlight .si { color: #bb8844 } /* Literal.String.Interpol */
+.highlight .sx { color: #bb8844 } /* Literal.String.Other */
+.highlight .sr { color: #808000 } /* Literal.String.Regex */
+.highlight .s1 { color: #bb8844 } /* Literal.String.Single */
+.highlight .ss { color: #bb8844 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
A index.html => index.html +48 -0
@@ 0,0 1,48 @@
+---
+layout: default
+title: Home
+cover: false
+about: 'about.html'
+---
+
+<aside class="intro">
+ <img title="I, in picture form" class="me-pic" src="/images/me.png" width="175" />
+
+ <p>
+ <b>Hello! I'm Antoine.</b>
+ </p>
+ <p>
+ Welcome to my website. I am computer programmer from Finland, working at <a href="http://www.qvantel.com">Qvantel</a>,
+ building software for the telecom sector.
+ </p>
+
+ <p>
+ Send any comments or suggestions to my <a href="https://lists.sr.ht/~ane/public-inbox">public inbox</a>
+ or my <a href="mailto:ane@iki.fi">personal mail address</a>.
+ </p>
+
+ <p>
+ Find me on <a href="http://sr.ht/~ane">SourceHut</a> and <a href="http://github.com/ane">GitHub</a>.
+</aside>
+
+<ul class="posts">
+ {% assign all = site.documents | sort: "date" | reverse %}
+ {% for p in all %}
+ <li class="unstyled">
+
+ <div>
+ <a href="{{ p.url }}">{{ p.title }}</a>
+ {% if p.collection and p.collection != "posts" %}
+ {% assign coll = site.collections | where: "label", p.collection | first %}
+ {% assign page = site.pages | where: "title", coll.title | first %}
+
+ ({% if page %}<a href="{{ page.url }}">{{ coll.title }}</a>{% else %}{{ coll.title }}{% endif %}, Part {{ p.order }})
+ {% endif %}
+ <time class="post-meta">{{ p.date | date: '%B %d, %Y' }}</time>
+ </div>
+ {% if p.summary %}
+ <div>{{ p.summary | markdownify }}</div>
+ {% endif %}
+ </li>
+ {% endfor %}
+</ul>
D index.md => index.md +0 -41
@@ 1,41 0,0 @@
----
-layout: default
-title: Home
-cover: false
-about: 'about.html'
----
-
-{: .me-pic width="150px"}
-
-**Hello! I'm Antoine**. Welcome to my website. I am computer programmer and
-electronics enthusiast from Finland. I work at [Qvantel](http://www.qvantel.com)
-a software architect for the telecom sector. Before that, I used to work in
-logistics optimization, before that I did research at a university, and way
-before that I got my start in web design.
-
-On this site you can find various content related to computers, electronics and
-all sorts of fun nonsense. There’s a [blog](/archive.html), in which I post
-rather infrequently.
-
-If you have any comments or suggestions you can send them to my [public
-inbox](https://lists.sr.ht/~ane/public-inbox) which is a mailing list serving
-as a discussion forum for my projects, including this website. Preferably, use
-the mailing list unless your message for one reason or the other is private, in
-which case you can use my [personal mail address](mailto:ane@iki.fi).
-
-### Latest blog posts
-
-<ul>
- {% assign all = site.posts | sort: "date" | reverse %}
- {% for p in all limit:10 %}
- <li>
- <div style="float: right; margin-left: 1rem;">
- <em>{{ p.date | date: '%B %d, %Y' }}</em>
- </div>
-
- <a href="{{ p.url }}">{{ p.title }}</a>
- </li>
- {% endfor %}
-</ul>
-
-For more, have a look at the <a href="/archive.html">blog archive</a>.
D micro.md => micro.md +0 -25
@@ 1,25 0,0 @@
----
-layout: page
-permalink: /micro
-title: Microblog
----
-
-{:.text-muted}
-This is my microblog. This is cross posted to
-[micro.blog/ane](http://micro.blog/ane). There is a [RSS feed](/feed-micro.xml) available.
-
-{% assign micro = site.micro | sort: 'date' | reverse %}
-
-{% for post in micro %}
-<div class="micro micro-lg" id="{{ post.date | date: "%Y%m%d%H%M" }}">
- <h6 class="text-uppercase">
- <a style="color: #bbb;" href="{{ site.url }}{{ post.url }}">{{ post.date | date: "%A, %B %d, %Y at %H:%M" }}</a>
- </h6>
-
- {{ post.content }}
-
- {% unless forloop.last %}
- <hr class="my-4"/>
- {% endunless %}
-</div>
-{% endfor %}