~huyngo/huyngo.srht.site

981e41a9473654c4ee754f86a78d54c8c5cad9b2 — Ngô Ngọc Đức Huy 5 months ago d02a380 restructure
Switch to Hugo, restructure the page
46 files changed, 510 insertions(+), 630 deletions(-)

D .github/workflows/jekyll.yml
A .gitmodules
D 404.html
D Gemfile
D Gemfile.lock
D _config.yml
D _drafts/menglish.md
D _includes/custom-head.html
D _includes/custom-webring.html
D _includes/footer.html
D _layouts/post.html
A archetypes/default.md
A config.toml
D conlang.md
D contact.md
R about.md => content/about.md
A content/homepage/about.md
A content/homepage/index.md
A content/homepage/work.md
A content/posts/2021-01-02-wordpress.fr.md
R _posts/2021-01-02-giving-up-on-wordpress.markdown => content/posts/2021-01-02-wordpress.md
R _posts/2021-01-09-moving-away-from-big-brothers.markdown => content/posts/2021-01-09-big-tech.md
A content/posts/2021-01-11-openring.fr.md
R _posts/2021-01-11-using-openring-to-add-blogs-you-follow.md => content/posts/2021-01-11-openring.md
R _posts/2021-02-08-enough-for-first-name-last-name-bs.md => content/posts/2021-02-08-naming.md
R social.md => content/social.md
R work.md => content/works.md
M create-webring.sh
D glossary.md
D index.markdown
A layouts/_default/single.html
A layouts/partials/footer-extra.html
A layouts/partials/head-extra.html
A layouts/partials/languageSelect.html
D newpost.sh
A static/css/custom.css
A static/favicon.ico
A static/images/android-chrome-192x192.png
A static/images/android-chrome-512x512.png
A static/images/apple-touch-icon.png
A static/images/favicon-16x16.png
A static/images/favicon-32x32.png
A static/images/favicon.ico
A static/images/site.webmanifest
A themes/anubis
M webring.template
D .github/workflows/jekyll.yml => .github/workflows/jekyll.yml +0 -20
@@ 1,20 0,0 @@
name: Jekyll site CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Build the site in the jekyll/builder container
      run: |
        docker run \
        -v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/_site:/srv/jekyll/_site \
        jekyll/builder:latest /bin/bash -c "chmod 777 /srv/jekyll && jekyll build --future"

A .gitmodules => .gitmodules +3 -0
@@ 0,0 1,3 @@
[submodule "themes/anubis"]
	path = themes/anubis
	url = https://github.com/mitrichius/hugo-theme-anubis.git

D 404.html => 404.html +0 -25
@@ 1,25 0,0 @@
---
permalink: /404.html
layout: default
---

<style type="text/css" media="screen">
  .container {
    margin: 10px auto;
    max-width: 600px;
    text-align: center;
  }
  h1 {
    margin: 30px 0;
    font-size: 4em;
    line-height: 1;
    letter-spacing: -1px;
  }
</style>

<div class="container">
  <h1>404</h1>

  <p><strong>Page not found :(</strong></p>
  <p>The requested page could not be found.</p>
</div>

D Gemfile => Gemfile +0 -30
@@ 1,30 0,0 @@
source "https://rubygems.org"
# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
#     bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "jekyll", "~> 4.2.0"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima", git: "https://github.com/jekyll/minima"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins
# If you have any plugins, put them here!
group :jekyll_plugins do
  gem "jekyll-feed", "~> 0.12"
end

# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
platforms :mingw, :x64_mingw, :mswin, :jruby do
  gem "tzinfo", "~> 1.2"
  gem "tzinfo-data"
end

# Performance-booster for watching directories on Windows
gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]


D Gemfile.lock => Gemfile.lock +0 -85
@@ 1,85 0,0 @@
GIT
  remote: https://github.com/jekyll/minima
  revision: 3cdd14dff1216f561c68329e0b7420c2dc9b796a
  specs:
    minima (2.5.1)
      jekyll (>= 3.5, < 5.0)
      jekyll-feed (~> 0.9)
      jekyll-seo-tag (~> 2.1)

GEM
  remote: https://rubygems.org/
  specs:
    addressable (2.7.0)
      public_suffix (>= 2.0.2, < 5.0)
    colorator (1.1.0)
    concurrent-ruby (1.1.7)
    em-websocket (0.5.2)
      eventmachine (>= 0.12.9)
      http_parser.rb (~> 0.6.0)
    eventmachine (1.2.7)
    ffi (1.14.2)
    forwardable-extended (2.6.0)
    http_parser.rb (0.6.0)
    i18n (1.8.7)
      concurrent-ruby (~> 1.0)
    jekyll (4.2.0)
      addressable (~> 2.4)
      colorator (~> 1.0)
      em-websocket (~> 0.5)
      i18n (~> 1.0)
      jekyll-sass-converter (~> 2.0)
      jekyll-watch (~> 2.0)
      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 (~> 2.0)
    jekyll-feed (0.15.1)
      jekyll (>= 3.7, < 5.0)
    jekyll-sass-converter (2.1.0)
      sassc (> 2.0.1, < 3.0)
    jekyll-seo-tag (2.7.1)
      jekyll (>= 3.8, < 5.0)
    jekyll-watch (2.2.1)
      listen (~> 3.0)
    kramdown (2.3.0)
      rexml
    kramdown-parser-gfm (1.1.0)
      kramdown (~> 2.0)
    liquid (4.0.3)
    listen (3.4.0)
      rb-fsevent (~> 0.10, >= 0.10.3)
      rb-inotify (~> 0.9, >= 0.9.10)
    mercenary (0.4.0)
    pathutil (0.16.2)
      forwardable-extended (~> 2.6)
    public_suffix (4.0.6)
    rb-fsevent (0.10.4)
    rb-inotify (0.10.1)
      ffi (~> 1.0)
    rexml (3.2.4)
    rouge (3.26.0)
    safe_yaml (1.0.5)
    sassc (2.4.0)
      ffi (~> 1.9)
    terminal-table (2.0.0)
      unicode-display_width (~> 1.1, >= 1.1.1)
    unicode-display_width (1.7.0)

PLATFORMS
  x86_64-linux

DEPENDENCIES
  jekyll (~> 4.2.0)
  jekyll-feed (~> 0.12)
  minima!
  tzinfo (~> 1.2)
  tzinfo-data
  wdm (~> 0.1.1)

BUNDLED WITH
   2.2.4

D _config.yml => _config.yml +0 -116
@@ 1,116 0,0 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
#
# If you need help with YAML syntax, here are some quick references for you: 
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.

title: Huy Ngo's blog
author: Ngô Ngọc Đức Huy
email: huyngo@disroot.org
description: >- # this means to ignore newlines until "baseurl:"
  This is Huy's blog, built with Jekyll. Its source code is released under MIT License.
  Its content is released under CC-BY-SA-4.0.
baseurl: "" # the subpath of your site, e.g. /blog
url: "" # the base hostname & protocol for your site, e.g. http://example.com

timezone: Asia/Ho_Chi_Minh

# Build settings
theme: minima
kramdown:
  toc_levels: 1..1
minima:
  skin: dark
  date_format: "%Y-%m-%d"
  social_links:
    mastodon:
      - username: huy_ngo
        instance: fosstodon.org
    github:  Huy-Ngo
    twitter: false
plugins:
  - jekyll-feed

# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
exclude:
  - .sass-cache/
  - .jekyll-cache/
  - gemfiles/
  - Gemfile
  - Gemfile.lock
  - node_modules/
  - vendor/bundle/
  - vendor/cache/
  - vendor/gems/
  - vendor/ruby/
  - _drafts/
  - README.md
  - .gitignore
  - .git/
  - LICENSE
  - newpost.sh
  - webring.template
  - create-webring.sh

defaults:
    -
     scope:
         path: ""
     values:
         lang: en
         link-str: Read this post in English
         correct: >
           If you find a mistake in my post,
           please send me an email about that.
         base-url: "/"
    -
     scope:
         path: fr
     values:
         lang: fr
         link-str: Lire ce post en français
         correct: >
           Si vous trouvez un erreur dans mon post,
           envoyez-moi un email pour le corriger, s'il vous plait.
         base-url: "/fr/"
    -
     scope:
         path: de
     values:
         lang: de
         link-str: Diesen Beitrag auf Deutsch lesen
         correct: >
           Wenn Sie finden eine Fehlung in meinem Beitrag,
           schicken Sie mir darüber ein Email, bitte.
         base-url: "/de/"
    -
     scope:
         path: vi
     values:
         lang: vi
         link-str: Đọc bài viết này bằng tiếng Việt
         correct: >
           Nếu bạn thấy có sai sót gì trong bài viết,
           hãy nói với tôi qua email.
         base-url: "/vi/"

D _drafts/menglish.md => _drafts/menglish.md +0 -26
@@ 1,26 0,0 @@
---
layout: page
title: mEnglish
permalink: /menglish/
---
You may notice I sometimes use some weird or archaic English grammar or vocabulary.
This is intentional. I treat language like I treat software: If I don't like it, I modify
it, or I make a new one. Of course, the latter requires considerable effort, so while
I may enjoy the process, it may be not practical. Moreover, not many people would learn
my conlang if I made one.

I call this modification "mEnglish"; "m" stands for "me", "my", or "modified".

# Pronoun

## Thou

Originally, 

## Ze

# Syntax
# Vocabulary

whence
: from where

D _includes/custom-head.html => _includes/custom-head.html +0 -5
@@ 1,5 0,0 @@
<link rel="stylesheet" href="/assets/css/custom.css">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/images/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/images/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/images/favicon-16x16.png">
<link rel="manifest" href="/assets/images/site.webmanifest">

D _includes/custom-webring.html => _includes/custom-webring.html +0 -51
@@ 1,51 0,0 @@
<section class="webring">
  <h2>
    Articles from blogs I read
    <small class="attribution">
      Generated by
      <a href="https://git.sr.ht/~sircmpwn/openring">openring</a>
    </small>
  </h2>
  <section class="footer-col-wrapper">
    
    <div class="footer-col article">
      <h4 class="title">
        <a href="https://stallman.org/archives/2021-jan-apr.html#13_March_2021_%28Yemeni_journalist_jailed%29" target="_blank" rel="noopener">Yemeni journalist jailed</a>
      </h4>
      <p class="summary">

Proxies of the UAE have jailed Yemeni journalist Adel al-Hasani,
who reported on ties between UAE and al-Qa&#39;ida.


</p>
      <small class="source">
        via <a href="https://stallman.org/archives/polnotes.html">Richard Stallman&#39;s Political Notes</a>
      </small>
      <small class="date">March 13, 2021</small>
    </div>
    
    <div class="footer-col article">
      <h4 class="title">
        <a href="https://www.eff.org/deeplinks/2021/03/seattle-and-portland-say-no-public-private-surveillance-networks" target="_blank" rel="noopener">Seattle and Portland: Say No to Public-Private Surveillance Networks</a>
      </h4>
      <p class="summary">An organization calling itself Safe Cities Northwest is aiming to create public-private surveillance networks in Portland, Oregon and Seattle, Washington. The organization claims that it is building off of a “successful model for public safety” that it bu…</p>
      <small class="source">
        via <a href="https://www.eff.org/rss/updates.xml">Deeplinks</a>
      </small>
      <small class="date">March 12, 2021</small>
    </div>
    
    <div class="footer-col article">
      <h4 class="title">
        <a href="https://news.opensuse.org/2021/03/11/opensuse-project-selected-for-gsoc-mentoring/" target="_blank" rel="noopener">openSUSE Project Selected for Google Summer of Code Mentoring</a>
      </h4>
      <p class="summary">Let’s gehts los! The openSUSE Project is one of about 200 mentoring organizations selected for this year’s Google Summer of Code. The openSUSE Project has participated in several GSoC events since 2006 and the project’s mentors have helped more than 60 st…</p>
      <small class="source">
        via <a href="https://news.opensuse.org">openSUSE News</a>
      </small>
      <small class="date">March 11, 2021</small>
    </div>
    
  </section>
</section>

D _includes/footer.html => _includes/footer.html +0 -38
@@ 1,38 0,0 @@
{%- include custom-webring.html -%}
<footer class="site-footer h-card">
  <data class="u-url" href="{{ "/" | relative_url }}"></data>

  <div class="wrapper">

    <div class="footer-col-wrapper">
      <div class="footer-col">
        <p class="feed-subscribe">
          <a href="{{ 'feed.xml' | relative_url }}">
            <svg class="svg-icon orange">
              <use xlink:href="{{ 'assets/minima-social-icons.svg#rss' | relative_url }}"></use>
            </svg><span>Subscribe</span>
          </a>
        </p>
      {%- if site.author %}
        <ul class="contact-list">
          {% if site.author.name -%}
            <li class="p-name">{{ site.author.name | escape }}</li>
          {% endif -%}
          {% if site.author.email -%}
            <li><a class="u-email" href="mailto:{{ site.author.email }}">{{ site.author.email }}</a></li>
          {%- endif %}
        </ul>
      {%- endif %}
      </div>
      <div class="footer-col">
        <p>{{ site.description | escape }}</p>
      </div>
    </div>

    <div class="social-links">
      {%- include social.html -%}
    </div>

  </div>

</footer>

D _layouts/post.html => _layouts/post.html +0 -65
@@ 1,65 0,0 @@
---
layout: default
---

{% assign postsTrans=site.posts | where:"ref", page.ref | sort: 'lang' %}

{% if postsTrans.size == 0 %}
  {% assign postsTrans=site.pages | where:"ref", page.ref | sort: 'lang' %}
{% endif %}

<article class="post h-entry" itemscope itemtype="http://schema.org/BlogPosting">

  <header class="post-header">
    <h1 class="post-title p-name" itemprop="name headline">{{ page.title | escape }}</h1>
    <p class="post-meta">
      {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
      <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
        {{ page.date | date: date_format }}
      </time>
      {%- if page.modified_date -%}
        ~
        {%- assign mdate = page.modified_date | date_to_xmlschema -%}
        <time class="dt-modified" datetime="{{ mdate }}" itemprop="dateModified">
          {{ mdate | date: date_format }}
        </time>
      {%- endif -%}
      {%- if page.author -%}
        • {% for author in page.author %}
          <span itemprop="author" itemscope itemtype="http://schema.org/Person">
            <span class="p-author h-card" itemprop="name">{{ author }}</span></span>
            {%- if forloop.last == false %}, {% endif -%}
        {% endfor %}
      {%- endif -%}</p>
  </header>

  {% if postsTrans.size != 1 %}
  <div class="lang">
    <ul>
      {% for post in postsTrans %}
      {% if post.lang != page.lang %}
      <li>
        <a class="{{ post.lang }}" href="{{ site.base-url }}{{ post.url }}">
          {{ post.link-str }}
        </a>
      </li>
      {% endif %}
      {% endfor %}
    </ul>
    {{ page.correct }}
  </div>

  <hr>

  {% endif %}

  <div class="post-content e-content" itemprop="articleBody">
    {{ content }}
  </div>

  {%- if site.disqus.shortname -%}
    {%- include disqus_comments.html -%}
  {%- endif -%}

  <a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
</article>

A archetypes/default.md => archetypes/default.md +6 -0
@@ 0,0 1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---


A config.toml => config.toml +65 -0
@@ 0,0 1,65 @@
baseURL = "http://example.org/"
copyright = "CC-BY-SA 4.0"
defaultContentLanguage = "en"
languageCode = "en-us"
summaryLength = 0
title = "Huy's site"
theme = "anubis"
AvailableText = "This post is available in:"

[languages]

[languages.en]
about = "About"
languageName = "English"

[languages.fr]
about = "À propos"
languageName = "Français"

[[languages.fr.menu.main]]
identifier = "about"
name = "À propos"
url = "/about/"
weight = 1

[[languages.fr.menu.main]]
identifier = "tags"
name = "Étiquettes"
url = "/tags/"
weight = 2

[[languages.fr.menu.main]]
identifier = "archive"
name = "Archive"
url = "/posts/"
weight = 3

[menu]
[[menu.main]]
identifier = "about"
name = "About"
url = "/about/"
weight = 1

[[menu.main]]
identifier = "tags"
name = "Tags"
url = "/tags/"
weight = 2

[[menu.main]]
name = "Archive"
identifier = "archive"
url = "/posts/"
weight = 3

[params]
author = "Ngô Ngọc Đức Huy"
email = "huyngo@disroot.org"
style = "auto"
custom_css = ["css/custom.css"]


[markup.goldmark.renderer]
unsafe = true

D conlang.md => conlang.md +0 -30
@@ 1,30 0,0 @@
---
layout: page
title: Conlang
language: en
ref: conlang
---

# Conlang

You can find my posts about conlanging here:

<ul>
  {% for post in site.categories.conlang %}
    {% if post.url %}
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
  {% endfor %}
</ul>

# Hàësdáaga

You can find my posts about my conlang Hàësdáaga here:

<ul>
  {% for post in site.categories.haesdaaga %}
    {% if post.url %}
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
  {% endfor %}
</ul>

D contact.md => contact.md +0 -48
@@ 1,48 0,0 @@
---
layout: page
title: Contact
language: en
ref: contact
permalink: /about/contact
---

If you don't know me, it's probably best to contact me via [email][email].

# Language

- I prefer English as my working language, but feel free to use any other if it's relevant.
- Call me Huy, not Ngo. Vietnamese people don't refer to each other by family name.
- No need for Mr., just the name is fine.

# Attachment

- [Don't send Word documents][no-word], and don't tell me to use it.
- Similarly, don't send RAR archive. Maybe avoid sending archive in general.
- Avoid sending videos (send a PeerTube link instead for example),
  executables (send link to source code instead with instruction to build).

# Send in plain text

I probably would not read HTML emails, which is problematic.
Read [this page][useplaintext] to see how to write mail in plain text file.

## What if I want to include an image?

Attach it as a file and refer to that. Maybe avoid images as a whole

## Links are usually long and I'm afraid it can be disruptive

You can use reference, like this:

	Please read the post [1] for more information.
	...

	[1]: https://example.org/this-link-is-long-and-disruptive

[disroot]: mailto:huyngo@disroot.org
[email]: mailto:huyngo@disroot.org
[fosstodon]: https://fosstodon.org/@huy_ngo
[gmail]: mailto:duchuy29092000@gmail.com
[matrix]: https://matrix.to/#/@xarvos:matrix.org
[no-word]: https://www.gnu.org/philosophy/no-word-attachments.html
[useplaintext]: https://useplaintext.email

R about.md => content/about.md +18 -6
@@ 1,9 1,25 @@
---
layout: page
title: About
language: en
ref: about
permalink: /about/
menu:
  about:
    identifier: about
    name: About
    url: /about/
    weight: 1
  social:
    identifier: social
    parent: about
    name: Social media
    url: /about/social/
    weight: 2
  works:
    identifier: works
    parent: about
    name: Works
    url: /about/works/
    weight: 3
---

I am Huy. Use the pronoun "he" to refer to me in third person.  I'm from


@@ 41,10 57,6 @@ This means you are free to share the posts and modify them, provided that you
attribute properly, link to the original content, and state your changes.
Additionally, you have to share those changes under the same license.

# Acknowledgement

This blog is built with [jekyll] and its [minima] theme. I used [openring] to generate others' blog posts from RSS feed.

# Donate

I receive donate on [liberapay/huy.ngo][liberapay] and [patreon/\_\_huy_ngo\_\_][patreon].

A content/homepage/about.md => content/homepage/about.md +7 -0
@@ 0,0 1,7 @@
---
title: 'Our Difference'
button: 'About us'
weight: 2
---

Lorem ipsum dolor sit amet, et essent mediocritatem quo, choro volumus oporteat an mei. ipsum dolor sit amet, et essent mediocritatem quo,

A content/homepage/index.md => content/homepage/index.md +3 -0
@@ 0,0 1,3 @@
---
headless: true
---

A content/homepage/work.md => content/homepage/work.md +7 -0
@@ 0,0 1,7 @@
---
title: 'We Help Business Grow'
button: 'Our Work'
weight: 1
---

Lorem ipsum dolor sit amet, et essent mediocritatem quo, choro volumus oporteat an mei. Numquam dolores mel eu, mea docendi omittantur et, mea ea duis erat. Elit melius cu ius. Per ex novum tantas putant, ei his nullam aliquam apeirian. Aeterno quaestio constituto sea an, no eum intellegat assueverit. 

A content/posts/2021-01-02-wordpress.fr.md => content/posts/2021-01-02-wordpress.fr.md +114 -0
@@ 0,0 1,114 @@
---
category: blog
date:   2021-01-02 14:44:00 +0700
lang: fr
tags: [blog, wordpress, writing, selfhost]
title:  "Je quitte WordPress"
translationKey: "give-up-wp"
---

Pendant la semaine dernière, j'installe à peine ma propre instance de WordPress,
parce que j'ai accès à un serveur et je peux utiliser un nom de domaine gratuit.
Mais c'était quel horreur. <!--more-->

# Pourquoir écrire un blog

J'écris pour le faire mieux (et pour me défier de écrire des articles en langues
à part anglais). Il y avait longtemps que je n'ai rien écrit que le code.
Mais écrire des essais c'est important pour moi : pour ma graduation, il faut écrire
des rapports et un thèse.

Mais ce n'est pas la seule raison. C'est aussi un moyen de m'exprimer. Le média sociel
peut m'aider à le faire, mais je quitte Facebook à cause du manque de confidentialité
premièrement et de la haine partout où je cherche le divertissement, et Mastodon a une
limitation de caractères pour une publication. Les catégories et les tags sont aussi
des aides pour mettre des publications en ordre.

# Choisir WordPress

WordPress c'est une plate-forme populaire pour blogger. Au debut je pensais de choisir
wordpress.com, car il est déjà hébergé. Mais j'ai découvert qu'il mettrais des ads
sur mes blogs sans mon approbation. De plus, si je héberge moi-même, j'ai du contrôle.
Je ne veux pas que mes lecteurs doivent voir les ads qui sont mis par un tier.

Le serveur fonctionne sous Ubuntu 16.04, qui est très vieux. Ainsi, il n'a pas les plus
récents paquets, y compris Apache, PHP, et WordPress, et je n'ose pas le mettre à niveau.

J'y avait déjà des autres services avec nginx, alors je préfère utiliser nginx comme
serveur web. Il y a [un guide][wp-nginx] pour exactement ça, mais malheureusement,
ces fichiers de la configuration sont longs et j'ai peur de mettre quelque chose en panne
cependant (et de plus, je suis paresseux ;) ).

Alors, c'est ça, j'utilise Apache, ce n'est pas une mauvaise chose, et j'utilise nginx
comme proxy inverse. Ça a marché.

# Utiliser Docker

J'ai aussi essaié docker. Je me demandais pourquoi je n'avais pas penser à
cette solution plus tôt.
J'ai récemment utilisé docker très fréquemment, e.g. pour CouchDB et RethinkDB, qui
ne sont pas paqueté pour Tumbleweed, our SQLServer et MongoDB, qui étaient nécessaire
pour mon cours de base de données.

Docker exécute des programmes dans un container ( « conteneur » ) que 
l'on peut facilement configurer avec docker-compose ou par ligne de commande.
Surtout, on peut être sûr que ça marche.

Et ça marche merveilleusement.

# Redirection de port

Ce n'était pas un problème que WordPress a créé, c'était ma faute, mais comme la faute
est aussi une leçon, je la raconte quand même.

Pour ne pas faire la même faute à l'avenir: il faut lier les fichiers configs dans
`/etc/nginx/sites-available/` à `/etc/nginx/sites-enabled/` avec des paths absolus,
sinon le lien serait cassé et ne marcherait pas.

# Changer le nom casse les liens

WordPress utilise apparamment des liens absolus (`example.com/blog/quelque-chose`)
au lieu des liens relatifs (`/blog/quelque-chose`).
C'est pas un bon pratique : si je change le hébergeur ou le nom de domain
(qui arrivera sûrement, car les noms de domaine gratuits expiront tôt ou tard).
Je l'ai découvert quand je changeais de IP du hébergeur au nom de domaine.

# Des expériences déçues

WordPress n'est pas la chose pour moi. Il contient trop de drag-and-drop pour écrire
un post que je trouve difficile à utiliser. Il contient aussi beaucoup de widgets que
je ne jamais utiliser et qui prend trop de temps à charger.

Étant résultat, je n'ai pas envie d'y écrire.

# Write.as

Et puis quelqu'un sur Mastodon m'a fait savoir de write.as.
Cette service utilise Markdown pour rendre les posts, et comme Markdown est si facile
à écrire, je l'aimais immédiatement.

[WriteFreely][writefreely] est le logiciel grâce auquel write.as fonctionne. J'ai
hébergé une instance moi-même, et il marchait exactement comme j'en ai attendu.

# Mise à jour

J'ai essayé [jekyll][jekyll], et c'est merveilleux.

Maintenant mon blog est sur [GitHub](https://huy-ngo.github.io)
et [huyngo.cf](http://huyngo.cf). GitHub ne supporte pas des thèmes que j'utilise, alors
là le blog ne apparaît correctement.

Jekyll est meilleur que WriteFreely pour moi, parce que les posts sont stockés simplement
comme texte plain, par contre WriteFreely les stocke dans SQL, ce que je considère
un overhead. Le seul désavantage c'est que je n'ai jamais appris Ruby avant.

J'ai envie d'essayer [Hugo][hugo], qui est programmé dans Go, une langue que je connais
mieux que Ruby. En outre, Hugo supporte rendre des pages pour gemini, que je veux aussi
essayer.
Mais ça va attendre, je ne devrais pas dépenser trop de temps pour
la choice de techonologie.

[wp-nginx]: https://wordpress.org/support/article/nginx/
[writefreely]: https://github.com/writeas/writefreely
[jekyll]: https://jekyllrb.com/
[hugo]: https://gohugo.io

R _posts/2021-01-02-giving-up-on-wordpress.markdown => content/posts/2021-01-02-wordpress.md +4 -5
@@ 1,11 1,10 @@
---
layout: post
title:  "Giving up on WordPress!"
category: blog
date:   2021-01-02 14:44:00 +0700
tags: blog wordpress writing selfhost
lang: en
ref: give-up-wp
categories: blog
translationKey: "give-up-wp"
tags: [blog, wordpress, writing, selfhost]
title:  "Giving up on WordPress!"
---
For the last week, I was trying to setting up my own WordPress instance, since I have access to a server and use a free domain name. It was such a hassle. <!--more-->


R _posts/2021-01-09-moving-away-from-big-brothers.markdown => content/posts/2021-01-09-big-tech.md +4 -5
@@ 1,11 1,10 @@
---
layout: post
title:  "Moving away from Big Brother(s)"
category: blog
date:   2021-01-09 14:44:00 +0700
tags: software freedom surveillance communication privacy
lang: en
ref: big-bros
categories: freedom privacy
translationKey: "big-bros"
tags: [software, freedom, surveillance, communication, privacy]
title:  "Moving away from Big Brother(s)"
---

Due to a [recent event][whatsapp], people have been actively moving away from it to Telegram[^1] or Signal.

A content/posts/2021-01-11-openring.fr.md => content/posts/2021-01-11-openring.fr.md +113 -0
@@ 0,0 1,113 @@
---
category: blog
date:   2021-01-11 15:51:31 +0700
lang: fr
tags: [rss, blog, openring, tutorial]
title:  "Ajouter des blogs qu'on suit avec openring"
translationKey: "openring-tutor"
---

J'ai ajouté une section près du bas de page : une liste d'articles de blogs auxquels
je m'abonne. Elle est générée par [openring], un outil qui réçoit le flux de RSS et
génère un webring.

Je l'ai découvert pendant lire [le blog de Drew DeVault][ddvault] (qui l'a créé).
Comme je pense qu'il est un moyen de soutenir les auteurs qu'on aime
et cependant partager des articles géniaux aux lecteurs, alors, je l'ai ajouté dans mon
blog.

Ce post va vous apprendre comment l'ajouter à votre blog.

# Installer openring

Je ne suis pas sûr qu'il y ait un paquet precompilé pour openring,
donc on va l'installer de la source.

## Installer des dépendances

Openring dépends de golang.  Quand ça marche avec go1.14, la version la plus récente
sur la dépôt de mon distro Tumbleweed, mais je recommande installer la plus récente
sur [golang].

Vous pouvez lire l'instruction de [golang].

## Compiler openring de la source

D'abord, clonez le dépôt:

```bash
git clone https://git.sr.ht/~sircmpwn/openring
```

Après, compilez le paquet et copiez-le à `/usr/local/bin` pour l'exécuter:

```bash
go build -o openring
sudo cp openring /usr/local/bin/
```

# Customiser l'apparence

Selon le README de openring:

> This is a tool for generating a webring from RSS feeds, so you can link to other blogs you like on your own blog. It's designed to be fairly simple and integrate with any static site generator. The basic usage is:
> 
> ```bash
> openring \
>   -s https://drewdevault.com/feed.xml \
>   -s https://emersion.fr/blog/rss.xml \
>   -s https://danluu.com/atom.xml \
>   < in.html \
>   > out.html
> ```

Le fichier `in.html` est un modèle duquel openring génère le HTML pour le flux.

Je l'ai copié de [le blog de DeVault][ring-tmpl] (ne vous inquiétez pas, c'est partagé
avec un license MIT),
avec des modifications:

- J'ai mis le webring dans un `div.wrapper`.
	La class `wrapper` est une class dans le thème minima
	qui limite le largeur maximum, ce qui aide lisibilité
- J'ai ajouté  `footer-col` pour chaque article. Cette classe rendre les articles
	en colonne grâce à minima.
- J'ai ajouté une bordure pour les article avec sass
	(le code est aussi basé sur celui de DeVault)

```scss
---
---

.webring {
  margin-bottom: 1rem;
  .attribution {
    float: right;
    font-size: .8rem;
    line-height: 3;
  }

  .footer-col.article {
    padding: 0.5rem;

    margin: 0 0.5rem;
    border: 0.01rem solid #333;
    @media(max-width: 640px) {
      margin: 0.5rem 0;
    }   
  }
}
```

# Chose à faire?

Je génère le flux manuellement quand je mis mon blog à jour en ce moment.
C'est probablement pas une bonne chose si je veux que le webring soit à jour
même quand je ne suis pas actif.
Un cronjob peut résoudre ce problème, mais je le laisse comme exercice pour les lecteurs.

[openring]: https://git.sr.ht/~sircmpwn/openring
[ddvault]: https://drewdevault.com/
[golang]: https://golang.org/doc/install
[ring-tmpl]: https://git.sr.ht/~sircmpwn/drewdevault.com/tree/master/item/webring-in.template
[whence]: /menglish/

R _posts/2021-01-11-using-openring-to-add-blogs-you-follow.md => content/posts/2021-01-11-openring.md +4 -5
@@ 1,11 1,10 @@
---
layout: post
title:  "Using openring to add blogs you follow"
category: blog
date:   2021-01-11 15:51:31 +0700
tags:   rss blog openring tutorial
lang: en
ref: openring-tutor
categories: tech tutorial
translationKey: "openring-tutor"
tags: [rss, blog, openring, tutorial]
title:  "Using openring to add blogs you follow"
---

You may notice that now my blog now has a new section near the footer: a list of articles

R _posts/2021-02-08-enough-for-first-name-last-name-bs.md => content/posts/2021-02-08-naming.md +4 -4
@@ 1,10 1,10 @@
---
layout: post
title:  "Enough for first name/last name BS"
category: blog
date:   2021-02-08 17:14:08 +0700
tags:   name culture inclusion awareness
lang: en
ref: first-name-last-name
translationKey: "first-name-last-name"
tags: [name, culture, inclusion, awareness]
title:  "Enough for first name/last name BS"
---

I keep seeing registration where I have to input my "First name" and my "Last name".

R social.md => content/social.md +16 -2
@@ 1,9 1,23 @@
---
layout: page
title: Social Media
language: en
ref: social
permalink: /about/social
slug: /about/social/
menu:
  about:
    name: About
    url: /about/
    weight: 1
  social:
    parent: about
    name: Social media
    url: /about/social/
    weight: 2
  works:
    parent: about
    name: Works
    url: /about/works/
    weight: 3
---

I practically left Facebook et al. Currently I am federated social networks, namely:

R work.md => content/works.md +17 -3
@@ 1,9 1,23 @@
---
layout: page
title: Work
language: en
ref: work
permalink: /about/work
ref: works
slug: /about/works/
menu:
  about:
    name: About
    url: /about/
    weight: 1
  social:
    parent: about
    name: Social media
    url: /about/social/
    weight: 2
  works:
    parent: about
    name: Works
    url: /about/works/
    weight: 3
---

I am a web backend developer, though I'm open to experiment in other fields as

M create-webring.sh => create-webring.sh +1 -1
@@ 6,4 6,4 @@ openring \
  -s https://stallman.org/rss/rss.xml \
  -s https://www.eff.org/rss/updates.xml \
  < webring.template \
  > _includes/custom-webring.html
  > layouts/partials/custom-webring.html

D glossary.md => glossary.md +0 -32
@@ 1,32 0,0 @@
---
layout: page
title: Glossary
language: en
ref: gloss
---

This list contains some words I use even though it is not 
considered as standard English, or rarely used in English.

whence
: from where

thou
: singular second-person pronoun

ze

: singular gender-neutral third-person pronoun

  pronunciation /ziː/, similar to German *sie*\
  objective **zem**, possessive **zer**, reflexive **zemself**

  I derived it from English determiner *this*, since modern pronouns
  also come from Old English words for *this*. Logically, it would more likely
  becomes *de* or *fe*. *Fe* seems out of place for me, and *de* may make me
  look like appropriating AAVE.

  *They* as a singular pronoun kinda works, but it causes confusion.
  I prefer clarity, which is also the reason why I use the archaic *thou*
  when the situation allows. Of course, I respect everyone's pronoun preference
  so this is only used when I don't know it.

D index.markdown => index.markdown +0 -6
@@ 1,6 0,0 @@
---
# Feel free to add content and custom Front Matter to this file.
# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults

layout: home
---

A layouts/_default/single.html => layouts/_default/single.html +26 -0
@@ 0,0 1,26 @@
{{ define "main" }}
{{ if .Menus }}
<nav class="post-navigation">
	{{ range .Menus }}
	<a href="{{ .URL | absLangURL }}" title="{{ .Title }}">{{ .Name }}</a>
	{{ end }}
</nav>
{{ end }}

<article class="post h-entry">
	<header class="post-header">
		<h1 class="p-name post-title{{ if .Params.favorite }} favorite{{end}}{{ if .Params.draft }} draft{{end}}">{{ trim .Title  " " }}</h1>
	</header>
	<div class="content e-content">
		{{ .Content }}
	</div>
	{{ partial "postInfo.html" . }}
</article>

{{ if and (.Site.Params.paginationSinglePost) (ne .Type "page") }}
{{ partial "paginationPost.html" . }}
{{ end }}

{{ partial "custom-webring.html" }}

{{ end }}

A layouts/partials/footer-extra.html => layouts/partials/footer-extra.html +12 -0
@@ 0,0 1,12 @@
<footer>
	<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">
		<img alt="Creative Commons License" style="border-width:0"
				      src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" />
	</a>
	<br>
	The content for this site is
	<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>.
	<br>
	The <a href="https://git.sr.ht/~sircmpwn/drewdevault.com">code for this site</a>
	is <a href="https://opensource.org/licenses/MIT">MIT</a>.
</footer>

A layouts/partials/head-extra.html => layouts/partials/head-extra.html +5 -0
@@ 0,0 1,5 @@
<link rel="stylesheet" href="/css/custom.css">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
<link rel="manifest" href="/images/site.webmanifest">

A layouts/partials/languageSelect.html => layouts/partials/languageSelect.html +10 -0
@@ 0,0 1,10 @@
{{ if .IsTranslated }}
<h4>{{ i18n "translations" }}</h4>
<ul>
  {{ range .Translations }}
  <li>
    <a href="{{ .Permalink }}">{{ .Language.LanguageName }}: {{ .Title }}{{ if .IsPage }} ({{ i18n "wordCount" . }}){{ end }}</a>
  </li>
  {{ end }}
</ul>
{{ end }}

D newpost.sh => newpost.sh +0 -21
@@ 1,21 0,0 @@
printf "Blog title: "
read title
printf "Tags: "
read tags
printf "Categories: "
read categories
printf "Ref: "
read ref
name="_posts/$(date -I)-${ref}.md"
_date=$(date "+%Y-%m-%d %T %z")
echo $name
echo "---" > "$name"
echo "layout: post" >> "$name"
echo "title:  \"$title\"" >> "$name"
echo "date:   $_date" >> "$name"
echo "tags:   $tags" >> "$name"
echo "categories: $categories" >>"$name"
echo "lang: en" >>"$name"
echo "ref:    $ref" >>"$name"
echo "---" >> "$name"
vim $name

A static/css/custom.css => static/css/custom.css +68 -0
@@ 0,0 1,68 @@
---
---

body {
  font-family: serif;
}

.webring {
  margin-top: 2rem;
}

.webring h2 {
  font-size: 1.2rem;
}

.webring .articles {
  width: 100%;
  display: flex;
}

.webring .title {
  margin: 0;
}

.webring .article {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  padding: 0.5rem;
  border: 1px solid #333;
  margin: 0 0.5rem;
}

@media(max-width: 640px) {
  .webring .articles {
    flex-direction: column;
  } 
  .webring .article {
    margin: 0.5rem 0;
  }
}

.webring .article:first-child {
  margin-left: 0;
}

.webring .article:last-child {
  margin-right: 0;
}

.webring .summary {
  font-size: 0.8rem;
  flex: 1 1 0;
}

.webring .attribution {
  float: right;
  font-size: 0.8rem;
  color: #555;
  line-height: 3;
}

dl dt {
  font-weight: bold;
}
dl dd {
  text-indent: 1em;
}

A static/favicon.ico => static/favicon.ico +0 -0
A static/images/android-chrome-192x192.png => static/images/android-chrome-192x192.png +0 -0
A static/images/android-chrome-512x512.png => static/images/android-chrome-512x512.png +0 -0
A static/images/apple-touch-icon.png => static/images/apple-touch-icon.png +0 -0
A static/images/favicon-16x16.png => static/images/favicon-16x16.png +0 -0
A static/images/favicon-32x32.png => static/images/favicon-32x32.png +0 -0
A static/images/favicon.ico => static/images/favicon.ico +0 -0
A static/images/site.webmanifest => static/images/site.webmanifest +1 -0
@@ 0,0 1,1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file

A themes/anubis => themes/anubis +1 -0
@@ 0,0 1,1 @@
Subproject commit 1ddecf607dc7f59db7cc64e17f75d67d2a3b08aa

M webring.template => webring.template +1 -1
@@ 6,7 6,7 @@
      <a href="https://git.sr.ht/~sircmpwn/openring">openring</a>
    </small>
  </h2>
  <section class="footer-col-wrapper">
  <section class="articles">
    {{range .Articles}}
    <div class="footer-col article">
      <h4 class="title">