From 35e9f6324dba0757e7c967fab6d000e44b4d5074 Mon Sep 17 00:00:00 2001 From: Ngô Ngọc Đức Huy Date: Sat, 2 Sep 2023 10:01:52 +0700 Subject: Update theme --- .gitmodules | 3 + assets/css/custom.css | 14 ++ config.yaml | 119 ++------------- content/about.md | 53 ------- content/about/_index.md | 22 +++ content/about/contact.md | 42 ++++++ content/about/rss.md | 48 ++++++ content/about/uses.md | 110 ++++++++++++++ content/about/works.md | 172 ++++++++++++++++++++++ content/book-reviews/_index.fr.md | 2 +- content/book-reviews/_index.md | 2 +- content/book-reviews/relevant-search.md | 2 +- content/comics/1.md | 40 ----- content/comics/2.md | 17 --- content/comics/3.md | 21 --- content/comics/4.md | 23 --- content/comics/_index.md | 11 -- content/doodles/1.md | 40 +++++ content/doodles/2.md | 17 +++ content/doodles/3.md | 21 +++ content/doodles/4.md | 23 +++ content/doodles/_index.md | 11 ++ content/misc.md | 99 ------------- content/misc/_index.md | 101 +++++++++++++ content/posts/2023-09-02-setup-external-backup.md | 120 +++++++++++++++ content/posts/_index.md | 9 +- content/rss.md | 48 ------ content/til/_index.fr.md | 2 +- content/til/_index.md | 3 +- content/til/vim-jp.fr.md | 2 +- content/til/vim-jp.md | 2 +- content/uses.md | 107 -------------- content/works.md | 157 -------------------- create-webring.sh | 2 +- fead.patch | 54 +++++++ layouts/_default/books.html | 2 +- layouts/_default/list.html | 20 --- layouts/_default/list.old.html | 20 +++ layouts/index.html | 19 --- layouts/index.old.html | 19 +++ layouts/partials/custom-webring.html | 4 +- themes/victor | 1 + webring.template | 2 +- 43 files changed, 864 insertions(+), 742 deletions(-) create mode 100644 assets/css/custom.css delete mode 100644 content/about.md create mode 100644 content/about/_index.md create mode 100644 content/about/contact.md create mode 100644 content/about/rss.md create mode 100644 content/about/uses.md create mode 100644 content/about/works.md delete mode 100644 content/comics/1.md delete mode 100644 content/comics/2.md delete mode 100644 content/comics/3.md delete mode 100644 content/comics/4.md delete mode 100644 content/comics/_index.md create mode 100644 content/doodles/1.md create mode 100644 content/doodles/2.md create mode 100644 content/doodles/3.md create mode 100644 content/doodles/4.md create mode 100644 content/doodles/_index.md delete mode 100644 content/misc.md create mode 100644 content/misc/_index.md create mode 100644 content/posts/2023-09-02-setup-external-backup.md delete mode 100644 content/rss.md delete mode 100644 content/uses.md delete mode 100644 content/works.md create mode 100644 fead.patch delete mode 100644 layouts/_default/list.html create mode 100644 layouts/_default/list.old.html delete mode 100644 layouts/index.html create mode 100644 layouts/index.old.html create mode 160000 themes/victor diff --git a/.gitmodules b/.gitmodules index bc5d8ab..1398aa9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,6 @@ path = themes/anibus url = https://git.sr.ht/~huyngo/hugo-anubis-fork branch = custom +[submodule "themes/victor"] + path = themes/victor + url = https://git.sr.ht/~huyngo/victor diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..e5656aa --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,14 @@ +.no-prefix::before { + content: ""; +} + +.webring article { + border: 1px solid var(--color); + margin: 0.5rem 0; + padding: 0.5rem; +} + +.webring article h3 { + margin-top: 0; + padding-top: 0; +} diff --git a/config.yaml b/config.yaml index b796274..a3aebf4 100644 --- a/config.yaml +++ b/config.yaml @@ -1,135 +1,36 @@ -AvailableText: 'This post is available in:' -baseURL: https://huyngo.envs.net/ +baseURL: https://xrvs.net/ copyright: CC-BY-SA 4.0 defaultContentLanguage: en +defaultContentLanguageInSubdir: true +sectionPagesMenu: main languageCode: en-us languages: de: - about: Info languageName: Deutsch - menu: - main: - - identifier: home - name: Startseite - url: / - weight: 1 - - identifier: about - name: Info - url: /about/ - weight: 2 - - identifier: works - name: Arbeite - url: /works/ - weight: 5 - - identifier: rss - name: RSS - url: /rss/ - weight: 11 en: - about: About languageName: English fr: - about: À propos languageName: Français - menu: - main: - - identifier: home - name: Accueil - url: / - weight: 1 - - identifier: about - name: À propos - url: /about/ - weight: 2 - - identifier: works - name: Travail - url: /works/ - weight: 5 - - identifier: rss - name: RSS - url: /rss/ - weight: 11 vi: - about: Thông tin languageName: Tiếng Việt - menu: - main: - - identifier: home - name: Trang chủ - url: / - weight: 1 - - identifier: about - name: Thông tin - url: /about/ - weight: 2 - - identifier: works - name: Công việc - url: /works/ - weight: 5 - - identifier: rss - name: RSS - url: /rss/ - weight: 11 markup: goldmark: renderer: unsafe: true highlight: noclasses: false -menu: - main: - - identifier: home - name: Home - url: / - weight: 1 - - identifier: about - name: About - url: /about/ - weight: 2 - - identifier: misc - name: Miscellanea - url: /misc/ - weight: 10 - - identifier: rss - name: RSS - url: /rss/ - weight: 11 params: author: Ngô Ngọc Đức Huy disableSummary: true email: huyngo@disroot.org + relMe: + - https://outerheaven.club/xarvos + - https://social.treehouse.systems/@xarvos + - https://fedi.criminallycute.fi/xarvos + - https://nixnet.social/xarvos + - https://git.sr.ht/~huyngo/ mainSections: - posts - social: - - id: email - label: Work - name: huyngo@disroot.org - - id: email - label: Friends - name: xarvos@loang.net - - id: pleroma - name: xarvos - instance: outerheaven.club - label: Pleroma - url: https://outerheaven.club/%s - - id: mastodon - name: xarvos - instance: treehouse.systems - label: Masto - url: https://social.treehouse.systems/@%s - - id: sourcehut - label: Code - name: ~huyngo - alt: sr.ht - - id: matrix - label: Chat - name: huyngo - instance: envs.net - url: matrix:u/%s:envs.net - - id: liberapay - label: Donate - name: huy.ngo - style: auto-without-switcher summaryLength: 0 -theme: anibus +theme: victor title: xarvos diff --git a/content/about.md b/content/about.md deleted file mode 100644 index 74dcf78..0000000 --- a/content/about.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: About -language: en -ref: about -disable_feed: true ---- - -## Me - -![I literally used this duck image for debugging](rubber-duck.png) - -Hi, this is xarvos, also known in meatspace as Huy. I write -about all kinds of stuff; expect tech discussion, shitposts, language stuff, -fictions, blah blah. - -- languages: Vietnamese, English, French, German, with proficiency and - fluency decrementally sorted -- Contacts: See [footer](#footer) - - If you're a friend/want a friendly discussion, contact me at loang.net - - If you're a company/want a professional discussion, contact me at - disroot.org - - etiquette: - - use [plain text for email][plain] - - [no Word document][no-word] or other proprietary format like RAR. - - Avoid any unnecessary attachments, if possible. - - If the platform support it, media description (e.g. [alt text][alt]) is much appreciated - -[alt]: https://www.w3.org/WAI/PF/HTML/wiki/Media_Alt_Technologies - -### Works - -I write [free software][free-sw], but unfortunately not as a professional job. - -If you're an employer, you can find my [CV](/cv/) in web format, printable as -PDF, browse some miscellaenous [work](/works/). - -I accept payment and donation on [liberapay][liberapay]. -You can also send me money on [patreon][patreon] ~~and -[PayPal](https://paypal.me/huynnd)~~. My PayPal account is currently locked. -If you want to pay in another way, such as bank transfer or cash, please -contact me via Matrix or email. - -[free-sw]: https://www.gnu.org/philosophy/free-sw.html - - -[cv]: https://raw.githubusercontent.com/Huy-Ngo/my-cv/master/huy-cv.pdf -[liberapay]: https://liberapay.com/huy.ngo/ -[patreon]: https://www.patreon.com/__huy_ngo__ - - - -[plain]: https://useplaintext.email -[no-word]: https://www.gnu.org/philosophy/no-word-attachments.html diff --git a/content/about/_index.md b/content/about/_index.md new file mode 100644 index 0000000..a880e48 --- /dev/null +++ b/content/about/_index.md @@ -0,0 +1,22 @@ +--- +title: About +language: en +ref: about +disable_feed: true +--- + +## Me + +![I literally used this duck image for debugging](rubber-duck.png) + +Hi, this is xarvos, also known in meatspace as Huy. +I write about all kinds of stuff; expect tech discussion, shitposts, language +stuff, fictions, blah blah. I [work][work] as a software developer, and that +means I [hate software][relevant-xkcd] more than others. + +I speak Vietnamese, English, French, German, with proficiency and fluency +decrementally sorted. Please [contact][contact] if you want language exchange. + +[contact]: /en/about/contact/ +[work]: /en/about/works/ +[relevant-xkcd]: https://xkcd.com/2030/ diff --git a/content/about/contact.md b/content/about/contact.md new file mode 100644 index 0000000..fe990a9 --- /dev/null +++ b/content/about/contact.md @@ -0,0 +1,42 @@ +--- +title: Contact +language: en +ref: contact +disable_feed: true +--- + +## Email + +I have two emails. If you want to contact about work, even if it's volunteer +work, contact my [professional email][work-mail]. If you are or want to be a +friend, contact my [personal email][perso-mail]. If in doubt, use the first +one. + +[work-mail]: huyngo@disroot.org +[perso-mail]: xarvos@loang.net + +Etiquette: + +- use [plain text for email][plain] +- [no Word document][no-word] or other proprietary format like RAR. + +## Fediverse + +I have multiple matrix accounts. My main one is +[@xarvos@outerheaven.club][fedi] + +[fedi]: https://outerheaven.club/users/xarvos + +## Matrix + +Send private messages to me at [@huyngo:envs.net][matrix] + +[matrix]: matrix:u/huyngo:envs.net + +[alt]: https://www.w3.org/WAI/PF/HTML/wiki/Media_Alt_Technologies + + + +[plain]: https://useplaintext.email +[no-word]: https://www.gnu.org/philosophy/no-word-attachments.html + diff --git a/content/about/rss.md b/content/about/rss.md new file mode 100644 index 0000000..6ab1d13 --- /dev/null +++ b/content/about/rss.md @@ -0,0 +1,48 @@ +--- +title: RSS Feed +language: en +translationKey: rss +disable_feed: true +--- + +If your RSS Feed Reader cannot get the feed from the link, you can find the +feeds here: + +## The entire page + +- [English](/index.xml) +- [French](/fr/index.xml) +- [German](/de/index.xml) +- [Vietnamese](/vi/index.xml) + +## Posts + +- [English](/posts/index.xml) +- [French](/fr/posts/index.xml) +- [German](/de/posts/index.xml) +- [Vietnamese](/vi/posts/index.xml) + +## TIL (Today I learned) + +- [English](/til/index.xml) +- [French](/fr/til/index.xml) +- [German](/de/til/index.xml) +- [Vietnamese](/vi/til/index.xml) + +## Book reviews + +- [English](/book-reviews/index.xml) +- [French](/fr/book-reviews/index.xml) +- [German](/de/book-reviews/index.xml) +- [Vietnamese](/vi/book-reviews/index.xml) + +## Suspicious permission + +- [English](/sus-perm/index.xml) +- [French](/fr/sus-perm/index.xml) +- [German](/de/sus-perm/index.xml) +- [Vietnamese](/vi/sus-perm/index.xml) + +## Comics + +- [English](/comics/index.xml) diff --git a/content/about/uses.md b/content/about/uses.md new file mode 100644 index 0000000..e32b69d --- /dev/null +++ b/content/about/uses.md @@ -0,0 +1,110 @@ +--- +title: Uses +language: en +translationKey: uses +disable_feed: true +--- + +## Software + +### Operating systems + +I have tried (or tried to try) various GNU- and GNU-less Linux distros as well +as non-Linux OS (OpenBSD). Here are those that I have successfully +daily-driven with quite pleasant experience: + +- openSUSE Tumbleweed +- NixOS +- Void Linux +- Debian GNU/Linux +- Alpine Linux +- OpenBSD + +### Graphical stack + +#### X + +Here is my setup for an X11 graphical environment + +
+
WM
bspwm
+
bar
polybar
+
terminal emulator
+
alacritty
+
urxvt
+
xterm
+
+ +#### Wayland + +
+
WM
sway
+
bar
waybar
+
terminal emulator
+
foot
+
+ +### Social and communication + +I mostly left mainstream social networks, but still have to maintain my GMail +account as it's tied to several other accounts and I am not willing to update +them all. Another issue is that some organisations seem to block lesser email +providers. I also need a trash email address to give off to the government and +dubious organisations who might sell off my data. + +- Social networks: I use Mastodon and Pleroma (actually, Akkoma, a fork), both + of which are part of the ActivityPub-fediverse, with mainly their official + web client. I also use Tusky and Husky on Android to browse them, which + are much more lightweight on phone. +- Email: I use aerc and neomutt as terminal clients and FairEmail on my phone. +- Chat: I use nheko on desktop and Element on phone. I used FluffyChat, but it + is very slow, crashed once and can't start up since. + +### Editing + +I use vim and neovim, mostly. The reason is: + +- quick start up +- responsive +- nice key binding + +Emacs would probably be the same, but I'm not as used to its keybinding. +"Vim mode", or the bastardisation of vim keybinding in other editors, never +appeals me. Besides these two, I'm OK with any graphical editors, though big, +bloated IDEs, +especially proprietary ones, are quite repulsive to me. + +## Hardware + +### Laptop + +I use a *Dell Inspiron 5570* as my laptop. Except for its hard drive, which +was corrupted in a water accident, everything has been kept as is since five +years ago. It runs surprisingly well with any Linux distros I've put thereon. +Currently, it is running NixOS 22.05. + +### Desktop + +This is my first custom built machine, and to be honest, I am not quite +happy with it. I have flashed multiple different distros/OS thereon and most +of them don't work in one way or another. Some don't have working graphics or +audio, some can't boot, and some can't even boot into the installation media. +Anyways, here is the setup: + +
+
Motherboard
ASUS RoG Strix B560-G Gaming Wifi
+
CPU
Intel Core i5 11400
+
Memory
PNY XLR8 Silver 8GB RGB
+
Cooler
Cooler Master 212 ARGB
+
PSU
SilverStone 500W ST50F-ES230 80 Plus
+
Case
XIGMATEK XA-20 (ATX)
+
Storage
+
PNY SSD CS1031 M.2 2280 NVMe 256GB
+
HDD Seagate Barracuda 1TB
+
Keyboard
Akko 3108SP Black Blue Switch v2
+
Mouse
Logitech G102 LightSync Gaming Mouse
+
+ +On a related note, I fail to understand why most custom-built PC are marketed +only towards gamers who like shiny flashy RGB LEDs? I don't appreciate that +aesthestics. diff --git a/content/about/works.md b/content/about/works.md new file mode 100644 index 0000000..4df9409 --- /dev/null +++ b/content/about/works.md @@ -0,0 +1,172 @@ +--- +title: Works +language: en +translationKey: works +disable_feed: true +--- + +Consider this my informal portfolio. My projects can be found on +[GitHub](https://github.com/Huy-Ngo/) and [sourcehut](https://sr.ht/~huyngo/). + +For a more formal one, see my [CV in web format][cv] (printable as PDF). + +## Expectations + +Unless you're able to provide me a full-time employment with required benefits, +any contractual works must be [free software][free-sw]. + +I accept payment and donation on [liberapay][liberapay]. +You can also send me money on [patreon][patreon] ~~and +[PayPal](https://paypal.me/huynnd)~~. My PayPal account is currently locked. +If you want to pay in another way, such as bank transfer or cash, please +contact me via Matrix or email. + +[free-sw]: https://www.gnu.org/philosophy/free-sw.html + + +[liberapay]: https://liberapay.com/huy.ngo/ +[patreon]: https://www.patreon.com/__huy_ngo__ + +[cv]: /cv/ + +### Things I can offer + +- I mostly work with Python, though I have dabbled with various others. +- I can write, with decreasing level of confidence: + - web services or full web apps + - libraries + - other kinds of user-space software +- I get familiar relatively quick with new technology, enough to get small patch + done in one or two weeks. +- I can get quickly familiar with the business logic and can have suggestions + on the software usability + +### Things I would like to see + +I would expect a contract granting me healthcare and labour protections and no +overtime. Other than that, these are nice things to have: + +- well-documented codebase and installation instruction +- company hardware +- fully [remote work][remote] with occasional hanging out onsite +- letting me work for slightly less than full-time (e.g. 4 days per week) + +[remote]: /en/posts/2022-10-15-remote-work/ + +### Things I'm not interested in + +I would likely refuse the offer if it's about: + +- tracking people for analytics, whether online or offline +- cryptocurrencies, NFTs, blockchains... +- "serverless", "cloud-native" software (an actually serverless program where + alternatives are traditionally server-based, such as SQLite, might interest me) + +I also find the following repulsive: + +- regular hour-long meetings +- contacting me outside working hours +- JavaScript-heavy, inaccessible front-end +- network blocking as measures of "security" +- work that are based on oppression of others +- work that are based on deception +- intentionally volatile software + +## Skills + +My strongest suit is **web development** on backend side. I have the most +experience in **Python**, though I have written web servers in **Node.js** and +**Go** as well. While preferring backend development, I am certain of my basic +knowledge in semantic HTML, as well as basic +styling. + +In web development with Python, I am most familiar with **Flask** and +**Django** as framework. I have also tried **Quart** (Flask's async cousin) +and **FastAPI** for a short while. While being no master, I have written +**systemd** services for some of my software. + +While I mostly work in web for its ease of deployment and availability across +platforms, I have also experimented in other areas, such as working on a [3D +sound processing library][palace]. + +I dare not say I know git, but it's my primary version control system. I have +also experimented with mercurial and subversion for a short time, but I never +managed to work with throwing a tarball around---maybe with an one-time +exception when I hacked[^0] a browser extension with my friends in an afternoon. + +I can work in Vietnamese and English. + +## Education + +- Bachelor: University of Science and Technology of Hanoi, 2018-2021 + +## Works + +### Free software + +I support free software by writing it and contribute to some projects within my +ability. + +I write code: + +- [Acanban][acanban], a project management system +- [Wikt CLI][wikt-cli] is a CLI Wiktionary client using its API. +- [Discord meme bot][meme-bot], a meme bot for Discord +- [Palace][palace], a 3D audio library +- [ex.tra][extra], a DICT server + +[palace]: https://sr.ht/~cnx/palace/ +[acanban]: https://github.com/Huy-Ngo/acanban +[wikt-cli]: https://git.sr.ht/~huyngo/wikt-cli +[meme-bot]: https://github.com/dinhanhx/discord-meme-bot +[extra]: https://git.sr.ht/~huyngo/ex.tra + +I package stuff: + +- I co-maintained [IPWHL (floating cheeses)][ipwhl], a singly-versioned Python + binary distributions +- I added a community package [badwolf][badwolf] on openSUSE +- I packaged [honk][honk] on NixOS + +[ipwhl]: https://sr.ht/~cnx/ipwhl +[badwolf]: https://software.opensuse.org/package/badwolf +[honk]: https://humungus.tedunangst.com/r/honk + +I help with localization: + +- Vietnamese translation for [badwolf][badwolf] +- Vietnamese translation for [Loop Habit Tracker][loop] +- Vietnamese translation for [Binary Eye][bin-eye] + +[loop]: https://github.com/iSoron/uhabits +[bin-eye]: https://github.com/markusfisch/BinaryEye + +I contribute code/fix bugs: + +- Scribe redirect for [libredirect][libredirect] +- Fix some bugs for [Akkoma FE][akko-fe] + +[libredirect]: https://github.com/libredirect/browser_extension +[akko-fe]: https://akkoma.dev/AkkomaGang/akkoma-fe + +### Employment + +I have worked on webmail during my internship at [BizflyCloud][bizfly]. During +the job, I have shown my skills with **Flask** and learned about ElasticSearch. + +Since 2021, I have been employed by [CMC Global][cmc], an outsource company. +During my time here, I have been working with **Django** and +AWS. While having no prior experience +with these technology, I had quickly familiarize myself with them and became a +key member in my team. + +[bizfly]: https://bizflycloud.vn/ +[cmc]: https://cmcglobal.com.vn/ + +[^0]: [jargon][hack-jargon]: [very common] + 1. n. Originally, a quick job that + produces what is needed, but not well. + 2. n. An incredibly good, and perhaps + very time-consuming, piece of work that produces exactly what is needed. + +[hack-jargon]: http://catb.org/jargon/html/H/hack.html diff --git a/content/book-reviews/_index.fr.md b/content/book-reviews/_index.fr.md index 9610cd9..a83c7c0 100644 --- a/content/book-reviews/_index.fr.md +++ b/content/book-reviews/_index.fr.md @@ -1,6 +1,6 @@ --- categories: ["book review"] -title: book-reviews +title: Commentaires des livres --- Ce sont des livres que j'ai lu et mes pensées d'eux. diff --git a/content/book-reviews/_index.md b/content/book-reviews/_index.md index c463b64..3ebe3bd 100644 --- a/content/book-reviews/_index.md +++ b/content/book-reviews/_index.md @@ -1,6 +1,6 @@ --- categories: ["book review"] -title: book-reviews +title: Book Reviews --- I review books as I read. Each review will contain: diff --git a/content/book-reviews/relevant-search.md b/content/book-reviews/relevant-search.md index 801efec..c91b9f6 100644 --- a/content/book-reviews/relevant-search.md +++ b/content/book-reviews/relevant-search.md @@ -1,6 +1,6 @@ --- categories: ["book review"] -title: "[Book review] Relevant Search" +title: "Relevant Search: With applications for Solr and Elasticsearch" date: 2021-05-06 tags: [book, review, search, programming, algorithm] book: "Relevant Search: With applications for Solr and Elasticsearch" diff --git a/content/comics/1.md b/content/comics/1.md deleted file mode 100644 index eea799c..0000000 --- a/content/comics/1.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "1: Bridge" -date: 2021-09-02 -layout: comic -titleText: | - "I mean his leg looks a bit squiggly." - "Well your arms were literally cropped off." -comicId: 1 -comicTitle: bridge -categories: [ comics ] ---- - -

Panel 1

- -Black: Hi I'm new here -Blue: Welcome - -

Panel 2 & 3

- -*green has changed their display name to Green* -*Green exits the room* - -

Panel 4

- -Black: What? -Blue: Huh? - -

Panel 5

- -*green has changed their display name to Green* -*Green exits the room* - -

Panel 6

- -Black: What's the matter with that guy? -Blue: He uses XMPP over a bridge - ---- - -See also: [XMPP Bridge](https://github.com/matrix-org/matrix-bifrost/issues/63) diff --git a/content/comics/2.md b/content/comics/2.md deleted file mode 100644 index 5aa3c42..0000000 --- a/content/comics/2.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "2: Learning curve" -date: 2021-09-20 -layout: comic -titleText: v = dt/dx -comicId: 2 -comicTitle: curve -categories: [ comics ] ---- - -A line graph with "time" on vertical axis and "proficiency" on horizontal axis - -Text: What people mean when they say "steep learning curve" - ---- - -See also: [SMBC Comics - Pedant](https://www.smbc-comics.com/comic/pedant) diff --git a/content/comics/3.md b/content/comics/3.md deleted file mode 100644 index 8900e1e..0000000 --- a/content/comics/3.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "3: Change the world" -date: 2021-10-11 -layout: comic -titleText: "Things I can't draw: stickpersons, windows, beds" -comicId: 3 -comicTitle: change-the-world -categories: [ comics ] ---- - -

Panel 1

- -Person saying "I will change the world!" - -

Panel 2

- -Person looking at the windows and seeing that it is raining - -

Panel 3

- -Person lying in bed looking at the mobile phone diff --git a/content/comics/4.md b/content/comics/4.md deleted file mode 100644 index dacbf91..0000000 --- a/content/comics/4.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "4: Call home" -date: 2021-11-23 -layout: comic -titleText: "They have a family too!" -comicId: 4 -comicTitle: call-home -categories: [ comics ] ---- - -

Panel 1

- -Person looking at the computer, saying "Hmm this app calls home. Gotta firejail -it." - -

Panel 2

- -An anthromorphic app is in a literal jail of fire. - -

Panel 3

- -Two other apps, seemingly its family, crying "I'm worried, he hasn't called for -months." diff --git a/content/comics/_index.md b/content/comics/_index.md deleted file mode 100644 index 42c3408..0000000 --- a/content/comics/_index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: comics -lang: en -translationKey: comics ---- - -Here are some attempts of mine to draw webcomics, or I should say random -scribbles :) - -Transcript of each comic can be found by appending 'transcript.txt' to the -comic URL. diff --git a/content/doodles/1.md b/content/doodles/1.md new file mode 100644 index 0000000..eea799c --- /dev/null +++ b/content/doodles/1.md @@ -0,0 +1,40 @@ +--- +title: "1: Bridge" +date: 2021-09-02 +layout: comic +titleText: | + "I mean his leg looks a bit squiggly." + "Well your arms were literally cropped off." +comicId: 1 +comicTitle: bridge +categories: [ comics ] +--- + +

Panel 1

+ +Black: Hi I'm new here +Blue: Welcome + +

Panel 2 & 3

+ +*green has changed their display name to Green* +*Green exits the room* + +

Panel 4

+ +Black: What? +Blue: Huh? + +

Panel 5

+ +*green has changed their display name to Green* +*Green exits the room* + +

Panel 6

+ +Black: What's the matter with that guy? +Blue: He uses XMPP over a bridge + +--- + +See also: [XMPP Bridge](https://github.com/matrix-org/matrix-bifrost/issues/63) diff --git a/content/doodles/2.md b/content/doodles/2.md new file mode 100644 index 0000000..5aa3c42 --- /dev/null +++ b/content/doodles/2.md @@ -0,0 +1,17 @@ +--- +title: "2: Learning curve" +date: 2021-09-20 +layout: comic +titleText: v = dt/dx +comicId: 2 +comicTitle: curve +categories: [ comics ] +--- + +A line graph with "time" on vertical axis and "proficiency" on horizontal axis + +Text: What people mean when they say "steep learning curve" + +--- + +See also: [SMBC Comics - Pedant](https://www.smbc-comics.com/comic/pedant) diff --git a/content/doodles/3.md b/content/doodles/3.md new file mode 100644 index 0000000..8900e1e --- /dev/null +++ b/content/doodles/3.md @@ -0,0 +1,21 @@ +--- +title: "3: Change the world" +date: 2021-10-11 +layout: comic +titleText: "Things I can't draw: stickpersons, windows, beds" +comicId: 3 +comicTitle: change-the-world +categories: [ comics ] +--- + +

Panel 1

+ +Person saying "I will change the world!" + +

Panel 2

+ +Person looking at the windows and seeing that it is raining + +

Panel 3

+ +Person lying in bed looking at the mobile phone diff --git a/content/doodles/4.md b/content/doodles/4.md new file mode 100644 index 0000000..dacbf91 --- /dev/null +++ b/content/doodles/4.md @@ -0,0 +1,23 @@ +--- +title: "4: Call home" +date: 2021-11-23 +layout: comic +titleText: "They have a family too!" +comicId: 4 +comicTitle: call-home +categories: [ comics ] +--- + +

Panel 1

+ +Person looking at the computer, saying "Hmm this app calls home. Gotta firejail +it." + +

Panel 2

+ +An anthromorphic app is in a literal jail of fire. + +

Panel 3

+ +Two other apps, seemingly its family, crying "I'm worried, he hasn't called for +months." diff --git a/content/doodles/_index.md b/content/doodles/_index.md new file mode 100644 index 0000000..794fa1a --- /dev/null +++ b/content/doodles/_index.md @@ -0,0 +1,11 @@ +--- +title: Doodles +lang: en +translationKey: doodles +--- + +Here are some attempts of mine to draw webcomics, or I should say random +scribbles :) + +Transcript of each comic can be found by appending 'transcript.txt' to the +comic URL. diff --git a/content/misc.md b/content/misc.md deleted file mode 100644 index 7aeba6c..0000000 --- a/content/misc.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Miscellanea -language: en -ref: misc -translationKey: misc -disable_feed: true ---- - -Here are some miscellanous things I do. - -## Conlangs - -Conlang stands for *constructed language*. Many people created -conlangs for hobby or as linguistic experiments. - -I was inspired by the conlangs in Inheritance Cycle and The Lord of -the Rings, as well as others like Esperanto, Dothraki, Toki Pona, et al and -conlang from time to time as a hobby. None of my conlangs reached its -maturity, though, mainly due to loss of copies and lack of time. - -Some of my conlangs: - -- [Hàäsdáïga](/haasdaiga/) -- [Ravna](/ravna/) -- [Isanercent](/isanercent/) -- [Djanzi](/djanzi/) - -## Books - -I'm not the bookworm I used to be, reading mostly mainstream books. Some books -I read and liked: - -- Dế Mèn phiêu lưu kí, a famous children book in Vietnamese about an - arrogant cricket who learned humility and altruism during his journey. -- The adventures of Valya and Karik, a Russian children book (my copy - was a Vietnamese translation) about the adventures of shrunken children in - which they learn about small animals around them. -- Sans famille, a story about a child who had to leave his family for - poverty, though now that I think about it, it sounds like children - trafficking and child labor. -- Nineteen Eighty-Four, a dystopian tragedy that is often mistaken as - criticism of socialism, while the actual object is authoritanism and mass - surveillance. -- The Hobbit and The Lord of the Rings, the well-known fantasy - franchise -- Inheritance Cycle, often labeled as rip-off Star Wars by haters -- Gulliver's Travels, a book that's supposed to be satire but I didn't - know enough to understand these deep meanings. -- Le petit prince, a novella with a childish theme but discuss many - aspects of life in a lighthearted way. -- [Ellana][ellana] (Le Pacte des MarchOmbres series) (French) - -Books I'm reading: - -- [Ellana: L'envol][ellana-2] (Le Pacte des MarchOmbres series) (French) -- [Tous les hommes sont mortels][hommes-mortels] (French) -- The Necromancer (The Secrets of the Immortal Nicholas Flamel - series) - -Dropped: - -- [XKCD what if](what-if) -- A Storm of Swords(A Song of Ice and Fire series) - -[what-if]: https://store.xkcd.com/pages/if-you-re-looking-for-the-what-if-book -[ellana]: https://openlibrary.org/works/OL24210815W/Le_Pacte_des_MarchOmbres_-_Ellana -[ellana-2]: https://openlibrary.org/works/OL24339191W/Ellana_l%27envol -[hommes-mortels]: https://openlibrary.org/works/OL13053706W/Tous_les_hommes_sont_mortels - -## Project ideas - -Here are some project ideas that I have in mind, yet don't have the time to -implement any of them. You'll probably find some drafts, but practically no -work is done: - -- a small shop management app -- a modern text browser with vim keybinding -- several non-standard libs: - - a rewrite for `time` module in Go - - internalisation modules -- universal internalisation package, which contains common phrases like - "Settings", "Log in", "Account" pre-translated -- redesign this blog -- smaller and more maintainable, more packageable Anki clone - -## Comics - -Reading comics is my pastime. I follow several webcomics, some of which you -may have heard of: - -- [Pepper & Carrot](https://www.peppercarrot.com/) -- [xkcd](https://xkcd.com): nerd stuff -- [SMBC](https://smbc-comics.com): more nerd stuff, and usually less concise -- [Oglaf](https://www.oglaf.com/): silly and occasionally NSFW comics -- [Dinosaur comics](https://qwantz.com/): a 5-panel comics with only dialogues changing - -I also enjoy drawing every now and then, not that I want to be an artist or I -draw well. I just find scribbling something fun. I recently decided to post -[my scribbles](/comics/) on this website. diff --git a/content/misc/_index.md b/content/misc/_index.md new file mode 100644 index 0000000..940b1d3 --- /dev/null +++ b/content/misc/_index.md @@ -0,0 +1,101 @@ +--- +title: Misc +language: en +ref: misc +translationKey: misc +disable_feed: true +--- + +# Miscellanea + +Here are some miscellanous things I do. + +## Conlangs + +Conlang stands for *constructed language*. Many people created +conlangs for hobby or as linguistic experiments. + +I was inspired by the conlangs in Inheritance Cycle and The Lord of +the Rings, as well as others like Esperanto, Dothraki, Toki Pona, et al and +conlang from time to time as a hobby. None of my conlangs reached its +maturity, though, mainly due to loss of copies and lack of time. + +Some of my conlangs: + +- [Hàäsdáïga](/haasdaiga/) +- [Ravna](/ravna/) +- [Isanercent](/isanercent/) +- [Djanzi](/djanzi/) + +## Books + +I'm not the bookworm I used to be, reading mostly mainstream books. Some books +I read and liked: + +- Dế Mèn phiêu lưu kí, a famous children book in Vietnamese about an + arrogant cricket who learned humility and altruism during his journey. +- The adventures of Valya and Karik, a Russian children book (my copy + was a Vietnamese translation) about the adventures of shrunken children in + which they learn about small animals around them. +- Sans famille, a story about a child who had to leave his family for + poverty, though now that I think about it, it sounds like children + trafficking and child labor. +- Nineteen Eighty-Four, a dystopian tragedy that is often mistaken as + criticism of socialism, while the actual object is authoritanism and mass + surveillance. +- The Hobbit and The Lord of the Rings, the well-known fantasy + franchise +- Inheritance Cycle, often labeled as rip-off Star Wars by haters +- Gulliver's Travels, a book that's supposed to be satire but I didn't + know enough to understand these deep meanings. +- Le petit prince, a novella with a childish theme but discuss many + aspects of life in a lighthearted way. +- [Ellana][ellana] (Le Pacte des MarchOmbres series) (French) + +Books I'm reading: + +- [Ellana: L'envol][ellana-2] (Le Pacte des MarchOmbres series) (French) +- [Tous les hommes sont mortels][hommes-mortels] (French) +- The Necromancer (The Secrets of the Immortal Nicholas Flamel + series) + +Dropped: + +- [XKCD what if](what-if) +- A Storm of Swords(A Song of Ice and Fire series) + +[what-if]: https://store.xkcd.com/pages/if-you-re-looking-for-the-what-if-book +[ellana]: https://openlibrary.org/works/OL24210815W/Le_Pacte_des_MarchOmbres_-_Ellana +[ellana-2]: https://openlibrary.org/works/OL24339191W/Ellana_l%27envol +[hommes-mortels]: https://openlibrary.org/works/OL13053706W/Tous_les_hommes_sont_mortels + +## Project ideas + +Here are some project ideas that I have in mind, yet don't have the time to +implement any of them. You'll probably find some drafts, but practically no +work is done: + +- a small shop management app +- a modern text browser with vim keybinding +- several non-standard libs: + - a rewrite for `time` module in Go + - internalisation modules +- universal internalisation package, which contains common phrases like + "Settings", "Log in", "Account" pre-translated +- redesign this blog +- smaller and more maintainable, more packageable Anki clone + +## Comics + +Reading comics is my pastime. I follow several webcomics, some of which you +may have heard of: + +- [Pepper & Carrot](https://www.peppercarrot.com/) +- [xkcd](https://xkcd.com): nerd stuff +- [SMBC](https://smbc-comics.com): more nerd stuff, and usually less concise +- [Oglaf](https://www.oglaf.com/): silly and occasionally NSFW comics +- [Dinosaur comics](https://qwantz.com/): a 5-panel comics with only dialogues changing + +I also enjoy drawing every now and then, not that I want to be an artist or I +draw well. I just find scribbling something fun. I recently decided to post +[my doodles](/en/doodles/) on this website. diff --git a/content/posts/2023-09-02-setup-external-backup.md b/content/posts/2023-09-02-setup-external-backup.md new file mode 100644 index 0000000..6a94158 --- /dev/null +++ b/content/posts/2023-09-02-setup-external-backup.md @@ -0,0 +1,120 @@ +--- +title: "Setup backup on external disk" +date: 2023-09-02 +draft: true +lang: en +categories: [ blog ] +tags: [] +translationKey: "2023-09-02-setup-external-backup" +--- + +## Backstory + +A few weeks ago (not today), I fucked up: +During irregular disk cleanup, I accidentally removed the config folder! + +Fortunately, I "backed up" the config with git, didn't I? 😌 + +Well yes, but actually no! 🥲 I did commit, but I didn't push. +The latest pushed config had been 9 months before this incident. + +On top of that, many programs generate unreadable configs, which I prefer not +to put into version control, or put sensitive information or large data into +`.config`, which shouldn't be pushed into a remote repository on a server I +don't own. For example, nheko puts authentication info there, and after this +incident I lost the session with several messages---well, matrix's irregularly +regular decryption failure could be expanded into a post on its own, so let's +not digress. + +And then there are more things to back up than just configs, say, my photos and +music. I mirror them between my devices with [syncthing], providing +redundancy, but [syncthing is not backup][syncthing-failure], +and neither is [RAID][raid-not-backup] + +[syncthing]: https://syncthing.net/ +[syncthing-failure]: https://forum.syncthing.net/t/syncthing-deleted-all-files-on-every-device/20518 +[raid-not-backup]: https://www.raidisnotabackup.com/ + +I should back them up, or I might one day be doomed to repeat the mistake. + +## Preparation + +Despite the bitterness from the partial data loss, I kinda didn't have the +spoon to do what I must, so I've been delaying it hitherto. + +### Hardware + +One of the reason I was cleaning up the disk in the first place was that it's +start to be filled up, so I bought a large hard drive to store more data and +backup. Doesn't seem too safe, I know: if the hard drive gets lost or broken, +I'll lose both the main data and the backup, but with a limited budget and +space, that's good enough for now. + +I got a Seagate One Touch 2 TB[^0] HDD. It seems to come with builtin backup +software, which doesn't support Linux of course, and I likely wouldn't use it +even if it did. A USB hub is also needed, as my laptop has a limited number of +USB ports. + +### Formatting + +Coming with the hard drive are several files, such as an `.exe` program to +initialize the backup, I suppose. I don't need these, and the disk can be +formatted ~~right away~~ after I do full-disk encryption on that. + +No partitioning is needed: while I do seek [vegan alternative][margarine], I +intended to use [btrfs][btrfs-kernel] as the file system, which can create +subvolumes, which can act as separate mounted partitions. I will just reformat +the existing partition to btrfs. + +```sh +mkfs.btrfs -L margarine /dev/sdb1 +``` + +[margarine]: https://outerheaven.club/notice/AZ8wYpKOyp2p329V5M +[btrfs-kernel]: https://www.kernel.org/doc/html/latest/filesystems/btrfs.html + +I intend to have three subvolumes, one for big data (not Big Data™) such as +movies or music, one for more personal data and another for backup: + +```sh +mount /dev/sdb1 /mnt +btrfs subvolume /mnt/data/hoard +btrfs subvolume /mnt/data/perso +btrfs subvolume /mnt/backup +``` + +Finally, I need to declare those in the nix hardware configuration file. + + +```nix +{ + (...) + fileSystems = { + "/" = { + (...) + }; + "/data/hoard" = { + device = "/dev/disk/by-uuid/[subvolume uuid]"; + fsType = "btrfs"; + options = [ "subvol=data/hoard" "compress-force=zstd" "noatime" ]; + }; + "/data/perso" = { + device = "/dev/disk/by-uuid/[subvolume uuid]"; + fsType = "btrfs"; + options = [ "subvol=data/perso" "compress-force=zstd" "noatime" ]; + }; + "/backup" = { + device = "/dev/disk/by-uuid/[subvolume uuid]"; + fsType = "btrfs"; + options = [ "subvol=backup" "compress-force=zstd" ]; + }; + }; + (...) +} +``` + +## Setting up + +[^0]: That means 1.81 [TiB] and I feel cheated sometimes. + +[TiB]: https://en.wikipedia.org/wiki/Byte#Multiple-byte_units. diff --git a/content/posts/_index.md b/content/posts/_index.md index 54dd49c..7a11ae0 100644 --- a/content/posts/_index.md +++ b/content/posts/_index.md @@ -1,11 +1,8 @@ --- -title: Posts +title: Blog lang: en translationKey: posts +categories: [blog] --- -Here are some attempts of mine to draw webcomics, or I should say random -scribbles :) - -Transcript of each comic can be found by appending 'transcript.txt' to the -comic URL. +Here are my blog posts! diff --git a/content/rss.md b/content/rss.md deleted file mode 100644 index 6ab1d13..0000000 --- a/content/rss.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: RSS Feed -language: en -translationKey: rss -disable_feed: true ---- - -If your RSS Feed Reader cannot get the feed from the link, you can find the -feeds here: - -## The entire page - -- [English](/index.xml) -- [French](/fr/index.xml) -- [German](/de/index.xml) -- [Vietnamese](/vi/index.xml) - -## Posts - -- [English](/posts/index.xml) -- [French](/fr/posts/index.xml) -- [German](/de/posts/index.xml) -- [Vietnamese](/vi/posts/index.xml) - -## TIL (Today I learned) - -- [English](/til/index.xml) -- [French](/fr/til/index.xml) -- [German](/de/til/index.xml) -- [Vietnamese](/vi/til/index.xml) - -## Book reviews - -- [English](/book-reviews/index.xml) -- [French](/fr/book-reviews/index.xml) -- [German](/de/book-reviews/index.xml) -- [Vietnamese](/vi/book-reviews/index.xml) - -## Suspicious permission - -- [English](/sus-perm/index.xml) -- [French](/fr/sus-perm/index.xml) -- [German](/de/sus-perm/index.xml) -- [Vietnamese](/vi/sus-perm/index.xml) - -## Comics - -- [English](/comics/index.xml) diff --git a/content/til/_index.fr.md b/content/til/_index.fr.md index 52ef329..c331bf2 100644 --- a/content/til/_index.fr.md +++ b/content/til/_index.fr.md @@ -1,5 +1,5 @@ --- -title: til +title: AJA translationKey: til --- diff --git a/content/til/_index.md b/content/til/_index.md index 09c6754..f4b57b0 100644 --- a/content/til/_index.md +++ b/content/til/_index.md @@ -1,7 +1,8 @@ --- -title: til +title: TIL lang: en translationKey: til +categories: [blog] --- These are lists of small tricks or fun trivia I learned. diff --git a/content/til/vim-jp.fr.md b/content/til/vim-jp.fr.md index ecbadec..ed86d0f 100644 --- a/content/til/vim-jp.fr.md +++ b/content/til/vim-jp.fr.md @@ -1,7 +1,7 @@ --- title: "AJA que on peut écrire le japonais avec vim" date: 2021-04-19T17:58:51+07:00 -translationKey: json-output-format +translationKey: vim-jp tags: [vim, japanese, useless, hiragana, katakana] --- diff --git a/content/til/vim-jp.md b/content/til/vim-jp.md index 033611c..5592824 100644 --- a/content/til/vim-jp.md +++ b/content/til/vim-jp.md @@ -1,7 +1,7 @@ --- title: "TIL: You can type Hiragana and Katakana on vim" date: 2021-04-19T17:58:51+07:00 -translationKey: json-output-format +translationKey: vim-jp tags: [vim, japanese, useless, hiragana, katakana] --- diff --git a/content/uses.md b/content/uses.md deleted file mode 100644 index 25e810f..0000000 --- a/content/uses.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Uses -language: en -translationKey: uses -disable_feed: true ---- - -## Software - -### Operating systems - -I have tried (or tried to try) various GNU- and GNU-less Linux distros as well -as non-Linux OS (OpenBSD). Here are those that I have successfully -daily-driven with quite pleasant experience: - -- openSUSE Tumbleweed -- NixOS -- Void Linux -- Debian GNU/Linux -- Alpine Linux -- OpenBSD - -### Graphical stack - -#### X - -Here is my setup for an X11 graphical environment - -
-
WM
bspwm
-
bar
polybar
-
terminal emulator
-
alacritty
-
urxvt
-
xterm
-
- -#### Wayland - -
-
WM
sway
-
bar
waybar
-
terminal emulator
-
foot
-
- -### Social and communication - -I mostly left mainstream social networks, but still have to maintain my GMail -account as it's tied to several other accounts and I am not willing to update -them all. Another issue is that some organisations seem to block lesser email -providers. I also need a trash email address to give off to the government and -dubious organisations who might sell off my data. - -- Social networks: I use Mastodon and Pleroma (actually, Akkoma, a fork), both - of which are part of the ActivityPub-fediverse, with mainly their official - web client. I also use Tusky and Husky on Android to browse them, which - are much more lightweight on phone. -- Email: I use aerc and neomutt as terminal clients and FairEmail on my phone. -- Chat: I use nheko on desktop and Element on phone. I used FluffyChat, but it - is very slow, crashed once and can't start up since. - -### Editing - -I use vim and neovim, mostly. The reason is: - -- quick start up -- responsive -- nice key binding - -Emacs would probably be the same, but I'm not as used to its keybinding. -"Vim mode", or the bastardisation of vim keybinding in other editors, never -appeals me. Besides these two, I'm OK with any graphical editors, it is - -## Hardware - -### Laptop - -I use a *Dell Inspiron 5570* as my laptop. Except for its hard drive, which -was corrupted in a water accident, everything has been kept as is since five -years ago. It runs surprisingly well with any Linux distros I've put thereon. -Currently, it is running NixOS 22.05. - -### Desktop - -This is my first custom built machine, and to be honest, I am not quite -happy with it. I have flashed multiple different distros/OS thereon and most -of them don't work in one way or another. Some don't have working graphics or -audio, some can't boot, and some can't even boot into the installation media. -Anyways, here is the setup: - -
-
Motherboard
ASUS RoG Strix B560-G Gaming Wifi
-
CPU
Intel Core i5 11400
-
Memory
PNY XLR8 Silver 8GB RGB
-
Cooler
Cooler Master 212 ARGB
-
PSU
SilverStone 500W ST50F-ES230 80 Plus
-
Case
XIGMATEK XA-20 (ATX)
-
Storage
-
PNY SSD CS1031 M.2 2280 NVMe 256GB
-
HDD Seagate Barracuda 1TB
-
Keyboard
Akko 3108SP Black Blue Switch v2
-
Mouse
Logitech G102 LightSync Gaming Mouse
-
- -I fail to understand why most custom-built PC are marketed only towards gamers -who like shiny flashy RGB LEDs? I don't appreciate that aesthestics. diff --git a/content/works.md b/content/works.md deleted file mode 100644 index a0b21f1..0000000 --- a/content/works.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Works -language: en -translationKey: works -disable_feed: true ---- - -Consider this my informal portfolio. My projects can be found on -[GitHub](https://github.com/Huy-Ngo/) and [sourcehut](https://sr.ht/~huyngo/). - -For a more formal one, see my [CV in web format][cv] (printable as PDF). - -[cv]: /cv/ - -## Expectation - -### Things I can offer - -- I mostly work with Python, though I have dabbled with various others. -- I can write, with decreasing level of confidence: - - web services or full web apps - - libraries - - other kinds of user-space software -- I get familiar relatively quick with new technology, enough to get small patch - done in one or two weeks. -- I can get quickly familiar with the business logic and can have suggestions - on the software usability - -### Things I would like to see - -I would expect a contract granting me healthcare and labour protections and no -overtime. Other than that, these are nice things to have: - -- well-documented codebase and installation instruction -- company hardware -- fully [remote work][remote] with occasional hanging out onsite -- letting me work for slightly less than full-time (e.g. 4 days per week) - -[remote]: /posts/2022-10-15-remote-work/ - -### Things I'm not interested in - -I would likely refuse the offer if it's about: - -- tracking people for analytics, whether online or offline -- cryptocurrencies, NFTs, blockchains... -- "serverless", "cloud-native" software (an actually serverless program where - alternatives are traditionally server-based, such as SQLite, might interest me) - -I also find the following repulsive: - -- regular hour-long meetings -- contacting me outside working hours -- JavaScript-heavy, inaccessible front-end -- network blocking as measures of "security" -- work that are based on oppression of others -- work that are based on deception -- intentionally volatile software - -## Skills - -My strongest suit is **web development** on backend side. I have the most -experience in **Python**, though I have written web servers in **Node.js** and -**Go** as well. While preferring backend development, I am certain of my basic -knowledge in semantic HTML, as well as basic -styling. - -In web development with Python, I am most familiar with **Flask** and -**Django** as framework. I have also tried **Quart** (Flask's async cousin) -and **FastAPI** for a short while. While being no master, I have written -**systemd** services for some of my software. - -While I mostly work in web for its ease of deployment and availability across -platforms, I have also experimented in other areas, such as working on a [3D -sound processing library][palace]. - -I dare not say I know git, but it's my primary version control system. I have -also experimented with mercurial and subversion for a short time, but I never -managed to work with throwing a tarball around---maybe with an one-time -exception when I hacked[^0] a browser extension with my friends in an afternoon. - -I can work in Vietnamese and English. - -## Education - -- Bachelor: University of Science and Technology of Hanoi, 2018-2021 - -## Works - -### Free software - -I support free software by writing it and contribute to some projects within my -ability. - -I write code: - -- [Acanban][acanban], a project management system -- [Wikt CLI][wikt-cli] is a CLI Wiktionary client using its API. -- [Discord meme bot][meme-bot], a meme bot for Discord -- [Palace][palace], a 3D audio library -- [ex.tra][extra], a DICT server - -[palace]: https://sr.ht/~cnx/palace/ -[acanban]: https://github.com/Huy-Ngo/acanban -[wikt-cli]: https://git.sr.ht/~huyngo/wikt-cli -[meme-bot]: https://github.com/dinhanhx/discord-meme-bot -[extra]: https://git.sr.ht/~huyngo/ex.tra - -I package stuff: - -- I co-maintained [IPWHL (floating cheeses)][ipwhl], a singly-versioned Python - binary distributions -- I added a community package [badwolf][badwolf] on openSUSE -- I packaged [honk][honk] on NixOS - -[ipwhl]: https://sr.ht/~cnx/ipwhl -[badwolf]: https://software.opensuse.org/package/badwolf -[honk]: https://humungus.tedunangst.com/r/honk - -I help with localization: - -- Vietnamese translation for [badwolf][badwolf] -- Vietnamese translation for [Loop Habit Tracker][loop] -- Vietnamese translation for [Binary Eye][bin-eye] - -[loop]: https://github.com/iSoron/uhabits -[bin-eye]: https://github.com/markusfisch/BinaryEye - -I contribute code/fix bugs: - -- Scribe redirect for [libredirect][libredirect] -- Fix some bugs for [Akkoma FE][akko-fe] - -[libredirect]: https://github.com/libredirect/browser_extension -[akko-fe]: https://akkoma.dev/AkkomaGang/akkoma-fe - -### Employment - -I have worked on webmail during my internship at [BizflyCloud][bizfly]. During -the job, I have shown my skills with **Flask** and learned about ElasticSearch. - -Since 2021, I have been employed by [CMC Global][cmc], an outsource company. -During my time here, I have been working with **Django** and -AWS. While having no prior experience -with these technology, I had quickly familiarize myself with them and became a -key member in my team. - -[bizfly]: https://bizflycloud.vn/ -[cmc]: https://cmcglobal.com.vn/ - -[^0]: [jargon][hack-jargon]: [very common] - 1. n. Originally, a quick job that - produces what is needed, but not well. - 2. n. An incredibly good, and perhaps - very time-consuming, piece of work that produces exactly what is needed. - -[hack-jargon]: http://catb.org/jargon/html/H/hack.html diff --git a/create-webring.sh b/create-webring.sh index 5d19c8c..090f9e1 100755 --- a/create-webring.sh +++ b/create-webring.sh @@ -1,2 +1,2 @@ # Create webring -python3 ../fead/src/fead.py -l 100 -F feeds -t webring.template -o layouts/partials/webring-articles.html +python3 ../fead/src/fead.py -l 100 -F feeds -t webring.template -o layouts/partials/webring-articles.html --skip-error diff --git a/fead.patch b/fead.patch new file mode 100644 index 0000000..0915336 --- /dev/null +++ b/fead.patch @@ -0,0 +1,54 @@ +commit 277deed03833377bae0ae68cf7db3f0d3d578ccd +Author: Ngô Ngọc Đức Huy +Date: 2023-08-30 11:01:00 +0700 + + Add option to skip errors + +diff --git a/src/fead.py b/src/fead.py +index 370b623..0b35119 100755 +--- a/src/fead.py ++++ b/src/fead.py +@@ -185,11 +185,23 @@ async def fetch(raw_url): + response.getheaders(), response) + + +-async def fetch_all(urls): ++async def fetch_skip_error(url): ++ try: ++ return await fetch(url) ++ except Exception as e: ++ warn(f'fail to fetch {url}: {e}', ++ type('FailureWarning', (Warning,), {})) ++ return None ++ ++ ++async def fetch_all(urls, skip_error): + """Fetch all given URLs asynchronously and return them parsed.""" +- tasks = gather(*map(fetch, urls)) ++ if skip_error: ++ tasks = gather(*map(fetch_skip_error, urls)) ++ else: ++ tasks = gather(*map(fetch, urls)) + try: +- return await tasks ++ return filter(lambda t: t is not None, await tasks) + except: + tasks.cancel() # structured concurrency + raise +@@ -234,11 +246,15 @@ def main(): + parser.add_argument('-o', '--output', metavar='PATH', + type=FileType('w'), default=stdout, + help='output file (default to stdout)') ++ parser.add_argument('-s', '--skip-error', action='store_true', ++ default=False, ++ help="errors not causing failure but logged") + args = parser.parse_args() + + template = args.template.read() + args.template.close() +- for ad in select(args.count, (ad for feed in run(fetch_all(args.feeds)) ++ for ad in select(args.count, (ad for feed in run(fetch_all(args.feeds, ++ args.skip_error)) + for ad in select(args.per_feed, feed))): + args.output.write(template.format(**truncate(ad, args.len)._asdict())) + args.output.close() diff --git a/layouts/_default/books.html b/layouts/_default/books.html index d3044c9..c0a74d0 100644 --- a/layouts/_default/books.html +++ b/layouts/_default/books.html @@ -12,7 +12,7 @@

{{ trim .Title " " }}

-

Book info

+

Book info

Book
{{ .Params.book }}
diff --git a/layouts/_default/list.html b/layouts/_default/list.html deleted file mode 100644 index 33bd8b5..0000000 --- a/layouts/_default/list.html +++ /dev/null @@ -1,20 +0,0 @@ -{{ define "main" }} -
- {{ .Content }} -
- -
-

{{ i18n .Title }}

- {{ if not .Params.no_feed }} - {{ range .Page.CurrentSection.Pages }} -
-
-

{{ trim .Title " " }}

-
- {{ partial "post-info.html" . }} -
- {{ end }} - {{ end}} -
- -{{ end }} diff --git a/layouts/_default/list.old.html b/layouts/_default/list.old.html new file mode 100644 index 0000000..33bd8b5 --- /dev/null +++ b/layouts/_default/list.old.html @@ -0,0 +1,20 @@ +{{ define "main" }} +
+ {{ .Content }} +
+ +
+

{{ i18n .Title }}

+ {{ if not .Params.no_feed }} + {{ range .Page.CurrentSection.Pages }} +
+
+

{{ trim .Title " " }}

+
+ {{ partial "post-info.html" . }} +
+ {{ end }} + {{ end}} +
+ +{{ end }} diff --git a/layouts/index.html b/layouts/index.html deleted file mode 100644 index 8367de4..0000000 --- a/layouts/index.html +++ /dev/null @@ -1,19 +0,0 @@ -{{ define "main" }} -
- {{ .Content }} - -
- -
- {{ $pages := where site.RegularPages "Type" "in" site.Params.mainSections }} - {{ range (.Paginate $pages).Pages }} - {{ partial "post-summary.html" . }} - {{ end }} - {{ partial "pagination.html" . }} -
- -{{ end }} diff --git a/layouts/index.old.html b/layouts/index.old.html new file mode 100644 index 0000000..8367de4 --- /dev/null +++ b/layouts/index.old.html @@ -0,0 +1,19 @@ +{{ define "main" }} +
+ {{ .Content }} + +
+ +
+ {{ $pages := where site.RegularPages "Type" "in" site.Params.mainSections }} + {{ range (.Paginate $pages).Pages }} + {{ partial "post-summary.html" . }} + {{ end }} + {{ partial "pagination.html" . }} +
+ +{{ end }} diff --git a/layouts/partials/custom-webring.html b/layouts/partials/custom-webring.html index d568b81..604afc4 100644 --- a/layouts/partials/custom-webring.html +++ b/layouts/partials/custom-webring.html @@ -1,12 +1,12 @@
-

Fediring

+

Fediring

Look at my fedi fellows' sites:
  1. Previous site
  2. What is Fediring?
  3. Next site
-

Articles from blogs I read

+

Articles from blogs I read

{{ partial "webring-articles.html" }}
diff --git a/themes/victor b/themes/victor new file mode 160000 index 0000000..5228eac --- /dev/null +++ b/themes/victor @@ -0,0 +1 @@ +Subproject commit 5228eacde06900f669ebf57354bd17187804713a diff --git a/webring.template b/webring.template index 14ed9f7..ef4dc19 100644 --- a/webring.template +++ b/webring.template @@ -1,5 +1,5 @@