1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
# Free Software Works
@def maxtoclevel = 2
\toc
## Packaging
### Floating Cheeses
The interplanetary wheels (or [floating cheeses][ipwhl]) are platform-unique,
single-versioned Python binary distributions backed by [IPFS]
for security and reproducibility. I no longer work on this.
### Nix Packages
I occationally contribute to [nixpkgs], a collection of software packages
that can be installed with the Nix package manager.
## Applications
### threa
[threa] is a X11 clipboard manager written in [Raku]. It synchronizes
clipboard and primary selection and stores the history as separate files
to facilitate manipulation by third-party tools.
### formbox
[formbox] formats an mbox as HTML or XML. It is intended
for rendering email [replies] on websites and their RSS feed.
### fead
[fead] is a tool for advertising other blogs you like on your own
by embedding the summary of their latest post(s) extracted from their web feed.
It is a rewrite of [openring] with concurrency support in Python
without any third-party library.
### rsskey
[rsskey] is a simple script for mirroring [RSS] or [Atom] feeds
on [Misskey]. It is known for replicating Richard Stallman's
political notes to [rms@birb.space].
### mepo
[Mepo] is a fast, simple and hackable [OpenStreetMap] viewer for X11 and Wayland
on desktop and mobile devices. I occasionally contribute to the project.
### comp
[Curses Omni Media Player][comp] is a [mpv] front-end using curses.
![comp screenshot](/assets/comp.png)
It has basic media player functions and can to extract playlists
from multiple sources such as media sites supported by [youtube-dl],
local and direct URL to video/audio and its own JSON playlist format.
### pip
[pip] is a package installer for Python. [Summer 2020](/blog/2020/gsoc),
I worked on improving its new resolver's networking performance.
The final result was not quite satisfying, but I got to meet
some really nice and talented people (-;
## Libraries
### Loca
[Loca] is a collection of local locations implementation
in multiple programming languages.
### Palace
[Pythonic Audio Library and Codecs Environment][palace] provides
common higher-level API for audio rendering using OpenAL:
* 3D positional rendering, with [HRTF] support for stereo systems
* Environmental effects: reverb, atmospheric air absorption,
sound occlusion and obstruction
* Out-of-the-box codec support: FLAC, MP3, Ogg Vorbis, Opus, WAV, AIFF, etc.
Palace wraps around the C++ interface [alure] using [Cython] for a safe and
convenient interface with type hinting, data descriptors and context managers,
following {{pep 8 naming-conventions}} (`PascalCase.snake_case`).
### Tzigame
[Tzigame] is a collection of libraries for video game development in [Zig].
## Video Games
### Brutal Maze
[Brutal Maze] is a thrilling shoot ‘em up game with minimalist art style.
[![Brutal Maze screenshot](/assets/brutalmaze.png)][brutalmaze-recplayer]
The game features a trigon trapped in an infinite maze. As our hero tries
to escape, the maze's border turns into aggressive squares trying to stop per.
Your job is to help the trigon fight against those evil squares and find
a way out (if there is any). Be aware that the more get killed,
the more will show up and our hero will get weaker when wounded.
### Black Shades
I am maintaining [Black Shades], a psychic bodyguard FPS written by
David Rosen. In Black Shades you control a psychic bodyguard, and try to
protect the VIP from a horde of zombies, snipers and other assorted
would-be assassins.
### Axuy
[Axuy] is a minimalist peer-to-peer first-person shooter.
![Axuy screenshot](/assets/axuy.png)
It is a WIP game for me to experiment with various concepts
in P2P networking as well as 3D game development.
### Slacker
[Slacker] is a clone/parody of the popular arcade game [Stacker].
## Plugins
### Vicious
[Vicious] is a modular widget library for window managers, but mostly catering
to users of the [awesome window manager]. It was derived from the old
*wicked* widget library, and has some of the old *wicked* widget types,
a few of them rewritten, and a good number of new ones.
Vicious widget types are a framework for creating your own widgets.
Vicious contains modules that gather data about your system,
and a few *awesome* helper functions that make it easier to register timers,
suspend widgets and so on. Vicious doesn't depend on any third party [Lua]
library, but may depend on additional system utilities.
### Alful
[Alful] is a six-line extension making Firefox Quantum open all windows
in fullscreen to hide the toolbars in windowed mode
(`full-screen-api.ignore-widgets = true`). All credits go to tazeat,
who wrote the original version and suggested the change
[to achieve the current behavior][alful patch].
### vim-octave
I am maintaining [Octave syntax and indentation support for Vim][vim-octave].
## Localizations
### Simplified Vietnamese Keymaps
I am the author of the [simplified Telex and VNI keymaps][tevnex]
for [Vim][vim-tevnex] and [ibus-table].
### Vietnamese Translation of Flare
I have translated the [Free/Libre Action Roleplaying Engine][flare] \(yep,
just the engine) to Vietnamese. The translation of the [Empyrean Campaign]
is work in progress---admittedly it does not get enough priority lately.
## Themes
### Add-Waiter
Add-Waiter is a [GTK+ 2][add-waiter-gtk2] and [xfwm4][add-waiter-xfwm4] clone
of the dark variant of the default GTK+ 3 theme [Adwaita]. It was created
using screenshots of the original theme on GTK+ 3.16.
![Add-Waiter screenshot](/assets/add-waiter.png)
The theme was released under GPLv2+, although after the redesign
of openDesktop.org, such information is no longer available on the website.
### MathieWD
[MathieWD] is a flat and clean xfwm4 theme that uses colors from
the active GTK+ theme. It is inspired by elementary mathematical symbols.
![MathieWD screenshot](/assets/mathiewd.png)
The theme was released under GPLv2+, although after the redesign of
openDesktop.org, such information is no longer available on the website.
### Miscellaneous
Other themes and configurations are cooperated into my personal [dotfiles].
## Services
### SourceHut
[SourceHut] is a fast and lightweight software development platform.
It is entirely powered by free software, self-hostable and federated via email.
I send trivial patches for random issues I run into every now and then.
### Loang
[Loang] is a collection of services, including a [Matrix] homeserver,
a web server, a [Gemini] server, an authoritative name server,
an [UnifiedPush] server, an IRC bouncer and shell access.
### Phylactery
[Phylactery] is a web server rendering comic books directly from ZIP archives.
### Acanban
[Acanban] is a work-in-progress collaboration platform for students
and supervisors during group projects and internships. It is built
on the [ASGI] framework [Quart] and uses [Trio] for concurrency
when interacting with persistency layers [RethinkDB] and [IPFS].
### ComLake
I worked as an intern at [USTH] [ICTLab] on a data lake's
[core API and workers]. It also uses [IPFS] but [PostgreSQL]
was picked for database.
[ipwhl]: https://man.sr.ht/~cnx/ipwhl
[IPFS]: https://ipfs.io
[nixpkgs]: https://github.com/NixOS/nixpkgs
[threa]: https://sr.ht/~cnx/threa
[Raku]: https://raku.org
[formbox]: https://sr.ht/~cnx/formbox
[replies]: /blog/reply
[fead]: https://trong.loang.net/~cnx/fead
[openring]: https://sr.ht/~sircmpwn/openring
[rsskey]: https://sr.ht/~cnx/rsskey
[RSS]: https://www.rssboard.org/rss-specification
[Atom]: https://tools.ietf.org/html/rfc5023
[Misskey]: https://join.misskey.page
[rms@birb.space]: https://birb.space/@rms
[Mepo]: https://sr.ht/~mil/mepo
[OpenStreetMap]: https://www.openstreetmap.org
[comp]: https://pypi.org/project/comp
[mpv]: https://mpv.io
[youtube-dl]: https://youtube-dl.org
[pip]: https://pip.pypa.io
[Loca]: https://sr.ht/~cnx/loca
[palace]: https://mcsinyx.gitlab.io/palace
[HRTF]: https://en.wikipedia.org/wiki/Head-related_transfer_function
[alure]: https://github.com/kcat/alure
[Cython]: https://cython.org
[Tzigame]: https://sr.ht/~cnx/tzigame
[Zig]: https://ziglang.org
[Brutal Maze]: https://brutalmaze.rtfd.io
[brutalmaze-recplayer]: https://brutalmaze.rtfd.io/recplayer.html
[Black Shades]: https://sr.ht/~cnx/blackshades
[Axuy]: https://sr.ht/~cnx/axuy
[Slacker]: https://pypi.org/project/slacker-game
[Stacker]: https://en.wikipedia.org/wiki/Stacker_(arcade_game)
[Vicious]: https://vicious.rtfd.io
[awesome window manager]: https://awesomewm.org
[Lua]: https://www.lua.org
[Alful]: https://addons.mozilla.org/en-US/firefox/addon/alful
[alful patch]: https://github.com/tazeat/AutoFullscreen/issues/4#issuecomment-509723353
[vim-octave]: https://github.com/McSinyx/vim-octave
[tevnex]: https://github.com/McSinyx/ibus-table-vietnamese#phương-thức-gõ
[vim-tevnex]: https://github.com/vim/vim/commit/a02a551
[ibus-table]: https://github.com/moebiuscurve/ibus-table-others/commit/b6fafd0
[flare]: https://flarerpg.org
[Empyrean Campaign]: https://flarerpg.org/index.php/mods/flare-empyrean
[add-waiter-gtk2]: https://www.opendesktop.org/p/1078597
[add-waiter-xfwm4]: https://www.opendesktop.org/p/1016170
[Adwaita]: https://blogs.gnome.org/mclasen/2014/06/13/a-new-default-theme-for-gtk
[MathieWD]: https://www.opendesktop.org/p/1016294
[dotfiles]: https://trong.loang.net/~cnx/dotfiles
[Loang]: https://loang.net
[Matrix]: https://matrix.org
[Gemini]: https://gemini.circumlunar.space
[UnifiedPush]: https://unifiedpush.org
[Phylactery]: https://trong.loang.net/phylactery
[SourceHut]: https://sourcehut.org
[Acanban]: https://pypi.org/project/acanban
[ASGI]: https://asgi.readthedocs.io
[Quart]: https://pgjones.gitlab.io/quart
[Trio]: https://trio.readthedocs.io
[RethinkDB]: https://rethinkdb.com
[USTH]: https://usth.edu.vn
[ICTLab]: https://ictlab.usth.edu.vn
[core API and workers]: https://comlake.github.io/comlake.core
[PostgreSQL]: https://www.postgresql.org
|