diff options
Diffstat (limited to 'content')
-rw-r--r-- | content/about.md | 74 | ||||
-rw-r--r-- | content/homepage/about.md | 7 | ||||
-rw-r--r-- | content/homepage/index.md | 3 | ||||
-rw-r--r-- | content/homepage/work.md | 7 | ||||
-rw-r--r-- | content/posts/2021-01-02-wordpress.fr.md | 114 | ||||
-rw-r--r-- | content/posts/2021-01-02-wordpress.md | 73 | ||||
-rw-r--r-- | content/posts/2021-01-09-big-tech.md | 92 | ||||
-rw-r--r-- | content/posts/2021-01-11-openring.fr.md | 113 | ||||
-rw-r--r-- | content/posts/2021-01-11-openring.md | 106 | ||||
-rw-r--r-- | content/posts/2021-02-08-naming.md | 47 | ||||
-rw-r--r-- | content/social.md | 30 | ||||
-rw-r--r-- | content/works.md | 90 |
12 files changed, 756 insertions, 0 deletions
diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..c1c3d0e --- /dev/null +++ b/content/about.md @@ -0,0 +1,74 @@ +--- +title: About +language: en +ref: 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 +Vietnam and besides Vietnamese and English; I also speak some French and +German. I write mainly in English, since that's the one I'm most comfortable +with, but I will translate some of my posts to other languages for practice. + +I write about: + +- Programming +- Learning languages +- Conlanging +- Digital freedom +- Books or fiction in general + +But it's primarily about technology in general. + +# Correct mistakes + +Any correction is appreciated, whether I state a wrong fact or make a grammar mistake. + +# Copying + +<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 /> +All content in this blog is licensed under a +<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"> +Creative Commons Attribution-ShareAlike 4.0 International License</a>, +unless stated otherwise. + +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. + +# Donate + +I receive donate on [liberapay/huy.ngo][liberapay] and [patreon/\_\_huy_ngo\_\_][patreon]. + +# Source + +The source code for generating this website can be found on [source hut][srht-blog]. + +[cv]: https://raw.githubusercontent.com/Huy-Ngo/my-cv/master/huy-cv.pdf +[jekyll]: https://github.com/jekyll/jekyll +[minima]: https://github.com/jekyll/minima +[openring]: https://git.sr.ht/~sircmpwn/openring +[srht-blog]: https://git.sr.ht/~huyngo/blog +[liberapay]: https://liberapay.com/huy.ngo/ +[patreon]: https://www.patreon.com/__huy_ngo__ diff --git a/content/homepage/about.md b/content/homepage/about.md new file mode 100644 index 0000000..7b4bc91 --- /dev/null +++ b/content/homepage/about.md @@ -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, diff --git a/content/homepage/index.md b/content/homepage/index.md new file mode 100644 index 0000000..ca03031 --- /dev/null +++ b/content/homepage/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- diff --git a/content/homepage/work.md b/content/homepage/work.md new file mode 100644 index 0000000..28c7b89 --- /dev/null +++ b/content/homepage/work.md @@ -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. diff --git a/content/posts/2021-01-02-wordpress.fr.md b/content/posts/2021-01-02-wordpress.fr.md new file mode 100644 index 0000000..d0a54e7 --- /dev/null +++ b/content/posts/2021-01-02-wordpress.fr.md @@ -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 diff --git a/content/posts/2021-01-02-wordpress.md b/content/posts/2021-01-02-wordpress.md new file mode 100644 index 0000000..8bd82a0 --- /dev/null +++ b/content/posts/2021-01-02-wordpress.md @@ -0,0 +1,73 @@ +--- +category: blog +date: 2021-01-02 14:44:00 +0700 +lang: en +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--> + +## Why I want to start a blog + +Writing is a way of polishing my writing skills. For so long, all what I write has been only code. Now that I'm close to my graduation, writing long text suddenly becomes important to me - I need to write reports and after that my thesis. + +It is also a way of expressing myself. Social media is a shorter version for this, and they may attract more interactions from people you know, but blog on the other hand helps you express your idea and opinion publicly. They're also much more organized in the sense that my list of posts does not contain shares from other users, or that I can use hashtags to categorize my posts. + +## Choosing WordPress + +At first I was thinking of using wordpress.com, since it's already hosted, but then I realized they can put ads on my blogs without my consent (well, technically, they would have my consent if I used their service). On top of that, I always prefer self-hosting whenever possible: I have all control (doubt) over what is running and what not. I would not what a third party to track my readers or showing them ads on my blog. + +The server was running on Ubuntu 16.04. That is a rather old one, so it doesn't support latest packages, including Apache, PHP, and WordPress (they do have WordPress in the Ubuntu repo), and I dare not upgrade it. + +On the other hand, I already hosted some other services with Nginx there, so I'd prefer to use Nginx instead of Apache. They do have [that option](https://wordpress.org/support/article/nginx/), but alas, those configs file seem long and I was not sure if I would break something while editing the nginx.conf file. + +I did try to use Nginx as a reverse proxy to my Apache server, though. It did work, but there is another problem, which I will talk about in a next section + +## Using Docker + +I also tried another option - docker. I wondered why I didn't think of it earlier. + +I have recently been using docker quite regularly, e.g. for CouchDB and RethinkDB which aren't packaged for my distro, or SQLServer and MongoDB, which were required for my database course. Docker is a way to easily run some program in a contained environment with simple configuration that can be input from command line or docker-compose file. Most importantly, they're confirmed to work. + +And nice, it did run. + +Now I need to set up a domain name for the blog. + +## Port forwarding + +For personal reason, I'd rather not reveal my domain name here, so I'd use `example.com` in its place. + +I signed up a domain name at freenom, and it only took me one day until the domain name is fully available. + +The only problem is that `example.com` always show me a bad gateway response. I made sure my Nginx configuration were right, but somehow it weren't listening on port 80 - the default port for HTTP. I had to go to `example.com:12345` (the port I ran my docker on), and for normal users that doesn't look intuitive at all. + +It turned out, I didn't link my configuration correctly, so there are broken symlinks in `/etc/nginx/sites-enabled/` and the configuration was never included. + +After I fixed that, it worked nicely. + +## Different name == broken website + +WordPress uses absolute path (`example.com/blog/something`) rather than relative path (`/blog/something`). This leads to a problem: if I want to migrate to another domain name (guaranteed to happen, since I use a free domain name that will expire eventually). I discovered this when I moved from a port to different port, and from host IP to domain name. It frustrates me, but it isn't a big problem for now. + +## Disappointing experience + +I did successfully hosted my own WP instance, but it didn't feel right for me. + +WordPress is so bloated. They target non-programmer, and they have a lot of drag-and-drop editing. It is hard for me to select the right block and edit it. They have a lot of features for images and widgets that I won't use. Of course I can remove those features, but they would take time and not is worth it. + +As a result, I'm refrained from posting there. + +## Write.as + +Then I was recommended this page on [Mastodon](https://joinmastodon.org/). It feels so right to me: as a programmer I love writing with Markdown - the markup language is so easy to write, and it allows me to write quickly. I can also write it in a preferred text editor such as vim and paste the text here. + +I did try to host my own [WriteFreely](https://writefreely.org/) instance (the technology behind write.as), but since I invested too much energy for WordPress I don't feel like it now, even though it seems simple according to the [installation instruction](https://writefreely.org/start). The [docker image](https://hub.docker.com/r/writeas/writefreely) is also not at all documented. + +Fortunately, write.as already feels right to me - no ads, and tracking is easily opted out. The only problem here is that my domain name is wasted there. + +## Update + +Well, I just installed (it was actually easy!), and now I've moved to divers.ml + +New update: I just tried jekyll, and it's awesome. Now my blog is hosted on [GitHub](https://huy-ngo.github.io). I guess I will leave the domain unused. diff --git a/content/posts/2021-01-09-big-tech.md b/content/posts/2021-01-09-big-tech.md new file mode 100644 index 0000000..a948d08 --- /dev/null +++ b/content/posts/2021-01-09-big-tech.md @@ -0,0 +1,92 @@ +--- +category: blog +date: 2021-01-09 14:44:00 +0700 +lang: en +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. +This is just the first step of moving away from Big Brother's surveillance. <!--more--> + +## My personal story + +Though I have never used WhatsApp, I myself have been using Facebook +for quite a long time (about 8 years or so) and so do people around me. +It is worrying that Facebook (along with Zalo, a popular messaging service in Vietnam) +has become a de facto main communication channel +between schools and students/parents and among family members. + +It is hard to switch 100% to another service: +people are too familiar with it, and are already connected to their "friends"[^2]. +They are reluctant to switch to something new, +which includes choosing an unknown service and probably a client, +creating a new account[^3], and adding people there. +And if no one is moving, you can't really move either. + +I haven't used Facebook or Instagram for about two weeks, +and I'm certainly happier - I don't have to deal with the negativity from Facebook +drama or typical Facebook user hostile behaviors (my fault for joining so many groups). +I still have to use Messenger, though, since my friends refuse to use matrix. +I will delete that soon enough, along with my Facebook account. + +## Things to do + +Deleting Facebook account probably does not keep you entirely from Facebook's greed, +but it sure is a great first step: you thereby declare your privacy +and that you do not allow them to collect your data. + +Facebook can probably track you via other means, such as ads, +or embedded comments on other websites. +To avoid this, block trackers with some extension such as [Ghostery][ghost] +or [Privacy Badger][badger]. +It also blocks tracking ads from Google. + +I also recommend [LibreJS][librejs], a browser extension by GNU that blocks nonfree +JavaScript. These scripts can unknowingly send data to the server as well. +However, since not everyone is aware of GNU's guidelines for licensing JavaScript, +it may blocks some free JavaScript as well (example being that of [Element][element] +and [Hydrogen][H] being blocked). + +Facebook is not the only Big Brother that keeps surveilling you: +on top of my head, there are Microsoft, Google, and Apple. +Unfortunately, they stand behind ones of the most popular operating systems +for a lot of devices, namely Windows, MacOS, Android[^4], and iOS. +This gives them a lot of power over a majority of users - +they can easily listen to every process you run, every file you download or upload. +Computer users should switch to a GNU/Linux distros of their choice for their own good. +For mobile phone, you can try installing Replicant (Android replacement) +or buy a GNU/Linux mobile phone (e.g. PinePhone or Librem), +though I cannot confirm their ease of use, for I haven't tried. + +It doesn't stop there: they also own many services that may pose privacy concerns +or censorship whose replacements can be found below: + +- YouTube: PeerTube is an alternative, though it can be slow if there is no peer near you. Invidious and NewPipe are free clients that let you watch YouTube videos without ads (i.e. Google's trackers). Don't mind about "supporting them" with ads - it's not worth it - you can support them by donating them some money instead. +- Google search: I'm not aware of a decent free search engine, but DuckDuckGo and Ecosia claim they respect user's data and do not store nor sell them +- Google translate: if you're a language learner like me, I strongly suggest looking up in dictionary instead. +- Google Map: I'm not aware of a good alternative, please suggest some +- GMail: tons of mail providers are out there, it's not hard to find one. The only problem is that so many services allow you to sign in with GMail that you probably are dependent on it by now. +- GitHub: git hosting is very common. I use [disroot] and [source hut], but there are others such as [gogs] or [GitLab]. Even though I'm not aware of tracking via GitHub, there has recently been an incident proving its untrustworthiness. +- LinkedIn: again, I'm not aware of free alternative for the same purpose, though I didn't find LinkedIn useful myself. + + +## Footnotes + +[^1]: Telegram's client is [open source](https://github.com/tdlib); its server and protocol are probably not. +[^2]: For many people, this is acquaintance plus or minus family. +[^3]: Creating a new account should be a simple process, but for many people, especially the elderly, find this troublesome and have to rely on their children for it. +[^4]: Even though Android itself is free, it contains many nonfree parts, and mobile phones running on Android are often shipped with Google Play Service (and/or sometimes the surveillance system of the manufacturer) + +[whatsapp]: https://www.osnews.com/story/132828/whatsapp-gives-users-an-ultimatum-share-data-with-facebook-or-stop-using-the-app/ +[rms]: https://stallman.org/facebook.html +[ghost]: https://github.com/ghostery/ghostery-extension +[librejs]: https://savannah.gnu.org/projects/librejs/ +[element]: https://app.element.io +[H]: https://hydrogen.element.io +[disroot]: https://git.disroot.org +[source hut]: https://sr.ht +[gogs]: https://gogs.io/ +[GitLab]: https://gitlab.com/gitlab-org/gitlab-foss +[badger]: https://privacybadger.org/ diff --git a/content/posts/2021-01-11-openring.fr.md b/content/posts/2021-01-11-openring.fr.md new file mode 100644 index 0000000..353361f --- /dev/null +++ b/content/posts/2021-01-11-openring.fr.md @@ -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/ diff --git a/content/posts/2021-01-11-openring.md b/content/posts/2021-01-11-openring.md new file mode 100644 index 0000000..79aa5cc --- /dev/null +++ b/content/posts/2021-01-11-openring.md @@ -0,0 +1,106 @@ +--- +category: blog +date: 2021-01-11 15:51:31 +0700 +lang: en +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 +from blogs I follow. This is generated by [openring], +a tool that read a list of RSS feeds and generate these. + +I found out about this when reading [Drew DeVault's blog][ddvault] +(who created openring). I think it is a nice way +to endorse authors we want to support and share cool things we read to our audience. + +In this blog, I will write a tutorial to use this with jekyll. + +# Install openring + +I am not aware of any prebuilt packages for openring, so let's build it from source. + +## Install dependencies + +Openring depends on golang. This works on go1.14, the latest version on Tumbleweed +repository, but I recommend installing the latest version from [golang]. + +You can refer to [golang]'s installation instruction for details. + +## Build from source + +Firstly, clone the repository: + +```bash +git clone https://git.sr.ht/~sircmpwn/openring +``` + +Next, simply build the packages and link it to `/usr/local/bin` so that it can be run: + +```bash +go build -o openring +sudo cp openring /usr/local/bin/ +``` + +# Customize looks + +From openring's README: + +> 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 +> ``` + +The `in.html` is a template [whence] openring generate the HTML for the feed. + +I copied the template from [DeVault's blog][ring-tmpl] (don't worry, it's MIT-licensed), +with a little modification: + +- I wrap it in a `div.wrapper`. The `wrapper` class is a class in minima theme that limit the max width for readability and auto-collapse on smaller devices. +- I use `footer-col` for each class. Since this is also styled by minima, I don't have to worry about it. +- I added a thin border around each article with the following sass (also modified from DeVault's blog) + +```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; + } + } +} +``` + +# Future works? + +Currently, I generate the feed manually when I update my blog. +This probably is not good enough if I want the webring to be updated +even when I'm not active? +A cronjob could solve this problem, +but I'll left it as an exercise to the reader ;). + +[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/ diff --git a/content/posts/2021-02-08-naming.md b/content/posts/2021-02-08-naming.md new file mode 100644 index 0000000..da48a91 --- /dev/null +++ b/content/posts/2021-02-08-naming.md @@ -0,0 +1,47 @@ +--- +category: blog +date: 2021-02-08 17:14:08 +0700 +lang: en +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". +What's the point? Isn't the user's full name just enough, if it's even needed? + +# Why you should avoid that + +It's blatantly ignorant! + +It assumes one must have a first name and last name to begin with. +It is not the case for some country, such as Indonesia, where one can have +just one name (also known as "mononym"). How are they supposed to fill your form? + +Those who do this often assume that given name (i.e. "first name") always comes first, +and family name (i.e. "last name") comes last and display as such without asking. +In many Asian countries, like China, Vietnam, or Korea, +given name comes after family name. They also do this in Hungary. +When they allow changing name order, they add a comma in between, also without asking. + +It is also not universally agreed upon where the middle names should go to. +This is not a problem when the full name is not required (e.g. Facebook or Google account) +but when full name is required (e.g. my school G-Suite account or for IELTS registration), +it is problematic how they represent my name. A few lecturers whom I'm not close with +keep referring to me by my middle name due to how Google displays my name. + +# Who do this? + +- Many web services, e.g. Facebook, Google, LinkedIn +- Language certification tests: IELTS, TCF, DELF/DALF, ... + +# Proposed alternative + +- Just ask for full name. Governments do that and they're fine. +- Ask how users want to be referred as, don't assume. + I never want to be referred by my family name. +- Maybe avoid asking for real name at the first place + if you're just some online service. [Real name policy][real-name-bad] harms social network users. + Even Google dropped that BS. + +[real-name-bad]: https://stallman.org/facebook.html#realname diff --git a/content/social.md b/content/social.md new file mode 100644 index 0000000..73adffa --- /dev/null +++ b/content/social.md @@ -0,0 +1,30 @@ +--- +title: Social Media +language: en +ref: 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: + +- Mastodon: For short text post, but it's longer than Twitter +- Pixelfed: Federated Instagram, where I post memes +- Matrix.org: Instant messaging, with E2EE for private messages + +You can find my Mastodon account at the footer and in my CV. Ask me further on +Mastodon or email if you really want to know other two. diff --git a/content/works.md b/content/works.md new file mode 100644 index 0000000..3b975c8 --- /dev/null +++ b/content/works.md @@ -0,0 +1,90 @@ +--- +title: Work +language: en +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 +well. You can look at my project on: + +- [GitHub](https://github.com/Huy-Ngo/) +- [Disroot Git](https://git.disroot.org/huyngo) +- [source hut](sr.ht/~huyngo/) + +See my CV in PDF format [here][cv]. + +# Education + +- Bachelor: University of Science and Technology of Hanoi, 2018-2021 + +# Work Experience + +## Internship + +So far I have only worked as intern in VC Corp. During my internship there, I +created a disposable mail system as a proof of concept. Afterwards, I have been +working with their mail system for a short while. + +# Projects + +## School projects + +### Acanban + +[Acanban][acanban] is an in-development academic-oriented project management +system. + +So far, we have implemented only basic project collaboration features. There is +much work to be done in the future. + +### Palace + +[Palace][palace] is a 3D audio library in Python. It is a wrapper around +OpenAL for Python, expecting to provide developers with modern and intuitive +utilities for audio processing. + +## Personal projects + +- [discord-meme-bot], a meme bot for discord +- [wikt-cli], a CLI tool to search Wiktionary using its API +- [cov-news][cov], a crawler for COVID-19 related news +- [GenWord][genword] a word generator on Android, alternative to [its JS equivalent][gen] + +## Miscellaneous + +- [YAltaCV], a Python script that generate AltaCV-themed CV from YAML. +- [Round Robin][rr-sched], a web-based personal time scheduler inspired by + process scheduler algorithm of the same name. + +# Languages + +I'm most comfortable with Vietnamese for casual conversation and English for +working (such as for documentation and commit message). I also can speak some +French and German with low fluency and read/write them with the help of a +dictionary. + +[cv]: https://raw.githubusercontent.com/Huy-Ngo/my-cv/master/huy-cv.pdf +[palace]: https://git.sr.ht/~cnx/palace +[acanban]: https://github.com/Huy-Ngo/acanban +[YAltaCV]: https://github.com/Huy-Ngo/YAltaCV +[discord-meme-bot]: https://github.com/Huy-Ngo/discord-meme-bot +[wikt-cli]: https://git.sr.ht/~huyngo/wikt-cli +[genword]: https://git.sr.ht/~huyngo/GenWord +[cov]: https://github.com/Huy-Ngo/cov-news +[gen]: www.zompist.com/gen.html |