From e7e358c99a516e13a01dd64b29e6af5a51026259 Mon Sep 17 00:00:00 2001 From: Radiohotline Date: Sat, 14 Mar 2026 09:58:15 +0000 Subject: first commit --- _werc/config | 11 ++ _werc/lib/footer.inc | 5 + _werc/lib/top_bar.inc | 9 ++ _werc/pub/style/style.css | 12 ++ blog/_werc/config | 2 + blog/huion.md | 339 ++++++++++++++++++++++++++++++++++++++++++++++ blog/index.md | 5 + games/_werc/config | 2 + games/pico8/alice.md | 3 + hardware/_werc/config | 2 + hardware/index.md | 3 + index.md | 21 +++ software/_header.md | 1 + software/_werc/config | 2 + software/coreutils.md | 39 ++++++ software/kilo.md | 3 + software/loveletter.md | 14 ++ software/troysort.md | 3 + 18 files changed, 476 insertions(+) create mode 100644 _werc/config create mode 100644 _werc/lib/footer.inc create mode 100644 _werc/lib/top_bar.inc create mode 100644 _werc/pub/style/style.css create mode 100644 blog/_werc/config create mode 100644 blog/huion.md create mode 100644 blog/index.md create mode 100644 games/_werc/config create mode 100644 games/pico8/alice.md create mode 100644 hardware/_werc/config create mode 100644 hardware/index.md create mode 100644 index.md create mode 100644 software/_header.md create mode 100644 software/_werc/config create mode 100644 software/coreutils.md create mode 100644 software/kilo.md create mode 100644 software/loveletter.md create mode 100644 software/troysort.md diff --git a/_werc/config b/_werc/config new file mode 100644 index 0000000..39db279 --- /dev/null +++ b/_werc/config @@ -0,0 +1,11 @@ +#masterSite=default.cat-v.org +siteTitle='Soft Machine' +siteSubTitle='Your computer is alive' + +meta_description='Home of programming and electronics projects and a FOSS blog' +meta_keywords='FOSS, computers, programming, C, electronics, synthesizer, Unix, Plan 9' + +#conf_enable_comments +#conf_enable_wiki + +#ll_add handlers_body_head echo '
' diff --git a/_werc/lib/footer.inc b/_werc/lib/footer.inc new file mode 100644 index 0000000..01f022e --- /dev/null +++ b/_werc/lib/footer.inc @@ -0,0 +1,5 @@ +
+ +
Powered by werc
+ +
diff --git a/_werc/lib/top_bar.inc b/_werc/lib/top_bar.inc new file mode 100644 index 0000000..c2c4d52 --- /dev/null +++ b/_werc/lib/top_bar.inc @@ -0,0 +1,9 @@ +
+ softmachine | + art | + music | + tech | + creatures | + brain | + moloch +
diff --git a/_werc/pub/style/style.css b/_werc/pub/style/style.css new file mode 100644 index 0000000..252cb2a --- /dev/null +++ b/_werc/pub/style/style.css @@ -0,0 +1,12 @@ +body { display: flex; flex-wrap: wrap; font-family: sans; } +header { flex-basis: 100%; flex-shrink: 0; } +article { flex-basis: 60%; padding-left: 1em; } +footer { flex-basis: 100%; flex-shrink: 0; } +header nav { display: flex; justify-content: space-between; } +nav a, header a { text-decoration: none ; color: inherit; } +header h1 span { margin-left: 1em; font-size: 50%; font-style: italic; } +body > nav { flex-basis: content; padding-right: 1vw; min-width: 16em; } +nav ul { display: flex; flex-direction: column; list-style-type: none; list-style-position: outside; padding-left: 0; } +nav li ul { padding-left: 0.6em } +footer { display: flex; justify-content: space-between; } +* { cursor: url(http://softmachine.dev/img/cursor.png), auto; } diff --git a/blog/_werc/config b/blog/_werc/config new file mode 100644 index 0000000..313087d --- /dev/null +++ b/blog/_werc/config @@ -0,0 +1,2 @@ +siteTitle='Soft Machine' +siteSubTitle='Is this thing on?' diff --git a/blog/huion.md b/blog/huion.md new file mode 100644 index 0000000..91469ee --- /dev/null +++ b/blog/huion.md @@ -0,0 +1,339 @@ +# Setting up my Huion Kamvas 13 on Arch Linux + +First published: 2026/03/13 + +## Prerequisites: +**Tablet:** Huion Kamvas 13 2.5k QHD +**Laptop:** Dell Inspiron 15-3567 +**OS:** Artix Linux running i3 (Xorg) + +## The Problem: +Xorg's wacom drivers (`xf86-input-wacom`) don't work out of the box. + +I will detail here the methods I tried to get my tablet up and running. While I highly suggest consulting the [Arch Linux Wiki](https://wiki.archlinux.org/title/Graphics_tablet), the information here may be useful to those troubleshooting the Kamvas 13 if the docs don't help. + +## General steps to set up common graphics tablets on Linux (Xorg) + +### Wacom + +You're in luck, because `xf86-input-wacom` should work out of the box. However, you may need to set and edit buttons using the `xsetwacom` utility or via KDE's GUI program `wacomtablet`, which is part of the Plasma suite. Tablet configuration will be discussed below. +Alternatively, there is an XLibre fork of the drivers, which is named `xlibre-input-wacom` in the Arch repository. + +### XP-Pen + +Official Linux drivers exist for various distros, including Debian and derivatives, Fedora, Arch and derivatives, etc. In addition to .deb and .rpm packages, binaries are distributed, meaning they'd only work on a system with glibc. + +### Huion + +If you're using a Huion tablet, your first bet is on the official drivers. The official Huion tablet drivers are currently packaged for Debian-based distros, and I assume it should provide an identical interface to the Windows drivers. However, many of us don't use Debian-based distros. For Arch, there exists an AUR package of the drivers, but it is outdated at the time of writing. However, several alternatives exist, as outlined next. + +### Open-source driver alternatives + +Two notable open-source alternative driver projects that support several manufacturers are [OpenTabletDriver](https://opentabletdriver.net/) and [DIGImend](https://digimend.github.io/). I suggest you read their documentation for specific configurations. +OpenTabletDriver should be more straightforward to set up than the Xorg drivers, but I won't cover it in this article, as my tablet isn't supported by it. +DIGImend offers modules to be used in conjunction with the Xorg drivers, and working modules are pushed upstream to the Xorg Wacom drivers, meaning that these driver modules will only be necessary if your tablet is not supported by the Xorg modules yet. + +Note that any driver you install will override the Xorg one and any settings set by `xsetwacom`. + +### What about Wayland? + +I will not cover Wayland here, but information can be found on the Arch wiki [here](https://wiki.archlinux.org/title/Graphics_tablet#Wayland_and_libinput). + +## My attempt + +I am using the version of the tablet cable that comes with a separate input and power cable (plus HDMI), because my laptop does not have a USB-C port. I plug everything into the laptop. + +If your tablet is a USB device, it should appear in the output of `lsusb` (from `usbutils`), as mine does: + +``` +... +Bus 001 Device 049: ID 256c:006d Huion Tablet_GT1302 +... +``` + +At this stage, I had installed `xf86-input-wacom`. The tablet seems to wake up, but shuts off immediately, and that repeats endlessly. I had ruled out the issue being with the tablet, because it worked on other laptops running Windows. + +A quick `sudo dmesg | grep -i usb` shows that the connection is stable and not disconnecting over and over. + +``` +[14449.733946] usb 1-1: new full-speed USB device number 33 using xhci_hcd +[14449.921838] usb 1-1: New USB device found, idVendor=256c, idProduct=006d, bcdDevice= 1.02 +[14449.921902] usb 1-1: New USB device strings: Mfr=5, Product=6, SerialNumber=0 +[14449.921941] usb 1-1: Product: Huion Tablet_GT1302 +[14449.969508] input: Huion Tablet_GT1302 Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:256C:006D.0040/input/input185 +[14450.025359] input: Huion Tablet_GT1302 Pad as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:256C:006D.0040/input/input186 +[14450.026896] input: Huion Tablet_GT1302 Touch Strip as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:256C:006D.0040/input/input187 +[14450.028279] input: Huion Tablet_GT1302 Dial as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:256C:006D.0040/input/input188 +[14450.031833] input: Huion Tablet_GT1302 Group Buttons as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:256C:006D.0040/input/input189 +[14450.033394] uclogic 0003:256C:006D.0040: input,hidraw4: +USB HID v1.11 Keypad [Huion Tablet_GT1302] on usb-0000:00:14.0-1/input0 +[14450.053384] input: Huion Tablet_GT1302 as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:256C:006D.0041/input/input191 +[14450.055795] uclogic 0003:256C:006D.0041: input,hidraw5: USB HID v1.11 Device [Huion Tablet_GT1302] on usb-0000:00:14.0-1/input1 +[14450.080329] input: Huion Tablet_GT1302 Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:256C:006D.0042/input/input192 +[14450.132366] input: Huion Tablet_GT1302 Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:256C:006D.0042/input/input193 +[14450.138729] input: Huion Tablet_GT1302 System Control as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:256C:006D.0042/input/input194 +[14450.143990] uclogic 0003:256C:006D.0042: input,hidraw6: USB HID v1.0b Keyboard [Huion Tablet_GT1302] on usb-0000:00:14.0-1/input2 +``` + +Now this was an error on my end. My laptop cannot supply enough power, unlike my other one, so the solution was to connect the red cable (power cable) to a mobile charger adaptor. + +Even with the now-stable connection, I do not see the expected behaviour, which is the tablet display mirroring my laptop screen. This behaviour was seen on my other laptop, even when running Arch with KDE. The solution to this was to manually set the display using `xrandr`. + +### The display + +Check the output of `xrandr --listmonitors`: + + Monitors: 2 + 0: +*eDP1 1366/340x768/190+0+0 eDP1 + 1: +HDMI1 2560/677x1600/423+0+0 HDMI1 + +Here, eDP1 is my internal laptop screen, and HDMI1 is my tablet. If HDMI1 does not show up, make sure the HDMI cable is secure. If the cable is loose or the port is damaged, it may not show up immediately. + +Next, we'll enable the display. If you prefer working with a GUI, you can use `ARandR`. In there, right click and select HDMI1 and click "Active," then arrange the displays as you like, setting your preferred resolution in the process. Note that not all resolutions work with the Kamvas 13. + +Sometimes it suffices to use `xrandr --auto` or `xrandr --output HDMI1 --auto`. + +If you place the displays next to each other, or some other configuration, the stylus range will be too large. This will be addressed in the input section below, and is fixed by mapping the stylus to your desired output (see #The stylus). + +To mirror the laptop screen in the tablet display, run `xrandr --output HDMI1 --same-as eDP1 --auto`. This should be seamless if the displays have the same resolution. However, my screen is 1366x768 in size, so it shows up pretty tiny on the tablet. We'll have to use a scaling command. + +If your laptop screen has a standard resolution like 1920x1080, you may use `xrandr --output HDMI1 --mode 1920x1080 --same-as eDP1 --auto`, but my screen needed the following to be mirrored well: + +`xrandr --output eDP1 --mode 1366x768 --scale 1.874x2.083 --output HDMI1 --mode 2560x1600 --same-as eDP1` + +...where the tablet's resolution is divided by the laptop's resolution. Very ugly solution, but the stylus maps perfectly. + +To undo the scaling, use `xrandr --output eDP1 --scale 1x1`. + +However, if you're like me, you may want to disable the laptop display as I do. In `ARandR`, just deactivate eDP1 by right-clicking and deselecting "Active." Via `xrandr`, try `xrandr --output eDP1 --off`. You can re-enable it swiftly with `xrandr --auto` or `xrandr --output eDP1 --auto --primary`. I recommend re-enabling it before you unplug the tablet, unless you have set up a working USB detection trigger with `udev`. + +### The stylus + +You must add a configuration file for Xorg to load the tablet driver modules. The DIGImend project has some sample configs. I referred to their [Huion sample config](https://github.com/DIGImend/digimend-kernel-drivers/blob/master/xorg.conf). + +Create the file `/etc/X11/xorg.conf.d/10-tablet.conf` and add the following, where the value of `MatchUSBID` should be the ID you get from `lsusb`: + + Section "InputClass" + Identifier "Tablet" + Driver "wacom" + MatchDevicePath "/dev/input/event*" + MatchIsKeyboard "false" + MatchUSBID "256c:006d" + EndSection + +Then restart X and check that the tablet is identified by `xsetwacom`. In my case, the output of `xsetwacom list devices` is the following: + + Huion Tablet_GT1302 Pen stylus id: 18 type: STYLUS + Huion Tablet_GT1302 Touch Strip pad id: 19 type: PAD + Huion Tablet_GT1302 Pad pad id: 20 type: PAD + Huion Tablet_GT1302 Group Buttons pad id: 25 type: PAD + Huion Tablet_GT1302 Dial pad id: 26 type: PAD + +Even with the display off, tapping and dragging with the pen should work, and it does. If it doesn't, check that the input is detected with `xinput list`: + + ⎡ Virtual core pointer id=2 [master pointer (3)] + ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] + ⎜ ↳ Huion Tablet_GT1302 Group Buttons pad id=25 [slave pointer (2)] + ⎜ ↳ Huion Tablet_GT1302 Dial pad id=26 [slave pointer (2)] + ⎜ ↳ Huion Tablet_GT1302 Pad pad id=20 [slave pointer (2)] + ⎜ ↳ Huion Tablet_GT1302 Pen stylus id=18 [slave pointer (2)] + ⎜ ↳ Huion Tablet_GT1302 Touch Strip pad id=19 [slave pointer (2)] + ⎜ ↳ Huion Tablet_GT1302 Consumer Control id=21 [slave pointer (2)] + ⎜ ↳ Synaptics TM3096-006 id=13 [slave pointer (2)] + ⎣ Virtual core keyboard id=3 [master keyboard (2)] + ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] + ↳ Video Bus id=7 [slave keyboard (3)] + ↳ Power Button id=8 [slave keyboard (3)] + ↳ Power Button id=6 [slave keyboard (3)] + ↳ Sleep Button id=9 [slave keyboard (3)] + ↳ Huion Tablet_GT1302 System Control id=24 [slave keyboard (3)] + ↳ Huion Tablet_GT1302 Consumer Control id=22 [slave keyboard (3)] + ↳ Huion Tablet_GT1302 Keyboard id=23 [slave keyboard (3)] + ↳ Intel HID events id=14 [slave keyboard (3)] + ↳ Dell WMI hotkeys id=15 [slave keyboard (3)] + ↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)] + +If your tablet is detected, but it doesn't work, first test the stylus using `xinput test 18`, where `18` should be the ID you see for the Pen Stylus. If you move the pen around over the tablet, you'll see a lot of motion logging. Test the stylus buttons too. + +Then, if the stylus works, but its input is not behaving as expected (for example, using the wrong display), map it with: + +`xinput map-to-output [inputid] [display]` + +or + +`xsetwacom set [inputid] MapToOutput [display]` + +where [inputid] is the stylus ID or name as found in `xsetwacom list devices` or `xinput list` and [display] is the desired display ID. If you use the name of the stylus (e.g. "Huion Tablet_GT1302 Pen stylus"), don't forget to wrap it in quotations marks. + +**But wait! None of this works!** + +If nothing worked so far, try the DIGImend drivers. They're available in the AUR as `digimend-kernel-drivers-dkms`. After building them, run the following to unload the old tablet drivers used by Huion: + +``` +sudo modprobe -r hid-kye hid-uclogic hid-polostar hid-viewsonic +``` + +Reconnect the tablet, and the pen should work now. Repeat the above tests. + +If the tablet isn't detected by your system, the issue might be with the USB port you used. Try other ones or wait for a bit, as there could be a delay. However, it is also possible that USB inputs are sleeping because of power-saving settings. If you're using `powertop`, that would be the reason. In `powertop`, head to `tunables` and set your tablet to `bad` to inhibit sleep. + +#### Pen pressure + +Pressure worked without further setup for me, but if you want to adjust pen pressure, check the Arch wiki. + +### Button Configuration + +Since this is a non-Wacom tablet, the GUI provided by KDE won't be useful. We'll have to use the CLI tool, `xsetwacom`. The process can be made reproducible by placing our commands in a script and (if you want) running the script on startup. I will attach my personal configuration after the explanation. + +If your tablet is supported by OpenTabletDriver, it would be much easier to just use that, because it comes with a GUI. + +Let's set up buttons with `xsetwacom` neatly. + +A sample command from the DIGImend README shows this: +`xsetwacom set "HID 256c:006e Pad pad" button 9 key Ctrl Z` + +In order to use it, we should know our button IDs. Run `xinput test "HUION Pen Tablet Pad pad"` or `xinput test 20`. The ID/name varies depending on your tablet's input method. You may have to use trial and error, but "Pad pad" should work for Kamvas 13. Press each button on your tablet, taking note of the output. + +For example, if I press and release the topmost button, I get: + + button press 1 a[3]=0 a[4]=0 a[5]=0 a[6]=0 + motion a[3]=0 a[4]=0 a[5]=0 a[6]=0 + button release 1 a[3]=0 a[4]=0 a[5]=0 a[6]=0 + motion a[3]=0 a[4]=0 a[5]=0 a[6]=0 + +and I note this down as "Button 1: 1", in the format of "Button [physical location]: [xinput output]" (you note the number following "press" or "release" as the ID). + +My tests culminated into the following (buttons are counted from top to bottom): +>Button 1: 1 +>Button 2: 2 +>Button 3: 3 +>Button 4: 8 +>Button 5: 9 +>Button 6: 10 +>Button 7: 11 + +This is the expected output. The skipped numbers are reserved, as mentioned by the DIGImend README: +>Note that buttons are numbered 1, 2, 3, 8, 9, 10, and so on, i.e. buttons 4, 5, 6, and 7 are not used. They're reserved for vertical and horizontal scrolling events by the X server. + +Additionally, I tested the stylus buttons again via `xinput test 18` and got the following in the mess of motion detection. I pressed each button multiple times to ensure I can catch it easily after ending the test process: +>Top button: 1 +>Bottom button: 3 + +Now, this overlap in numbers may seem problematic, but it is handled well in `xsetwacom`, as we can map them to different input keys. + +At this stage, I start Krita in order to test the button shortcuts on the fly. You may use any program that has tablet support, or you may settle for good ol' `showkey -a` to quickly dump the key combinations you press. Since your tablet is identified as a keyboard of sorts, the output should appear here. Use your preferred method. To demonstrate output better, I will use `showkeys` here. + +In ASCII, m is represented as `m`, Ctrl+M as `^M`, Alt+M as `^[m`, Shift+M as `M`, Ctrl+Shift+M as `^M`, and Ctrl+Alt+M as `^[M`. With this in mind, let us (finally) set some shortcuts. + +To set the last button (button 11) to Ctrl+Z, run: +`xsetwacom set 20 button 11 key Ctrl Z` + +A quick test in Krita works. `showkeys -a` output is `^Z 26 0032 0x1a`. Repeat the process for every button on your tablet. To see all supported key modifiers, run `xsetwacom list modifiers`. + +My configuration, which is intended for Krita, is laid out as such: +>Button 1: Save (Ctrl+S) +>Button 2: Mirror canvas (M) +>Button 3: Zoom in (Ctrl+=) +>Button 4: Pan (Space) +>Button 5: Zoom out (Ctrl+-) +>Button 6: Resize brush (by dragging) (Shift) +>Button 7: Undo (Ctrl+Z) + +My stylus buttons: +>Button 1: Eraser (E) +>Button 2: Eyedropper (hold) (Ctrl) + +And the final config script: + + #!/bin/sh + + # Detect device IDs + + for i in $(seq 10); do + list=$(xsetwacom list devices) + + if echo "$list" | grep -q Huion; then + break + fi + + sleep 1 # waiting through startup time + done + + list=$(xsetwacom list devices) + pad=$(echo "${list}" | awk '/Pad pad/{print $6; exit}') + stylus=$(echo "${list}" | awk '/Pen stylus/{print $6; exit}') + + if [ -z "${pad}" ]; then + exit 0 + fi + + if [ -z "${stylus}" ]; then + exit 0 + fi + + # Tablet display + stylus + + #xrandr | grep -q "HDMI1 connected" || exit 0 # this is commented out because it's handled in the final i3 script + + xrandr --output eDP1 --mode 1366x768 --scale 1.874x2.083 --output HDMI1 --mode 2560x1600 --same-as eDP1 + + xrandr --output eDP1 --off + + sleep 1 + + xsetwacom set "$stylus" MapToOutput HDMI1 + + # Functions + + setpad() { xsetwacom set "$pad" button "$1" "$2"; } + setstylus() { xsetwacom set "$stylus" button "$1" "$2"; } + + # Tablet buttons + + setpad 1 "key +ctrl s -ctrl" + setpad 2 "key m" + setpad 3 "key +ctrl = -ctrl" + setpad 8 "key +space" + setpad 9 "key +ctrl - -ctrl" + setpad 10 "key +shift" + setpad 11 "key +ctrl z -ctrl" + + # Stylus buttons + + setstylus 2 "key e" + setstylus 3 "key +ctrl" + +Since input device IDs often change across sessions, the script fetches the ID and uses them as variables. For that, I used the method from Arch Wiki and tweaked it as necessary. + +## Automating the process + +There are several ways to run custom processes at startup. The Arch Wiki article linked at the beginning details an approach for running the script when the tablet is connected. I use Artix with Runit, so I have to use a different `udev` that runs the script directly. This udev method didn't work for me. I'm not sure why, but I'm documenting it here anyway. +Unplugging the tablet will not automatically restore display settings, so add an event for device removal too: + +``` +ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="256c", RUN+="/usr/local/bin/wacom-config.sh" +ACTION=="remove", SUBSYSTEM=="usb", ATTRS{idVendor}=="256c", RUN+="/usr/local/bin/reset-display.sh" +``` + +The display script: + + #!/bin/sh + + export DISPLAY=:0 + export XAUTHORIY=/home/troy/.Xauthority + + xrandr --output HDMI1 --off --output eDP1 --auto --scale 1x1 --primary + +In the end, I made the script run with i3, such that I can refresh my i3 session when I plug in the tablet: + + #!/bin/sh + + export DISPLAY=:0 + export XAUTHORITY=/home/troy/.Xauthority + + if xrandr | grep -q "HDMI1 connected"; then + /home/troy/wacom-config.sh + else + xrandr --output HDMI1 --off + xrandr --output eDP1 --auto --scale 1x1 --primary + fi diff --git a/blog/index.md b/blog/index.md new file mode 100644 index 0000000..f28feba --- /dev/null +++ b/blog/index.md @@ -0,0 +1,5 @@ +# / blog + +## Changelog: + +2026/03/13 - [Setting up my Huion Kamvas 13 on Arch Linux](/blog/huion/) diff --git a/games/_werc/config b/games/_werc/config new file mode 100644 index 0000000..d58a0e8 --- /dev/null +++ b/games/_werc/config @@ -0,0 +1,2 @@ +siteTitle='Soft Machine' +siteSubTitle='Allegedly playable' diff --git a/games/pico8/alice.md b/games/pico8/alice.md new file mode 100644 index 0000000..e9431d2 --- /dev/null +++ b/games/pico8/alice.md @@ -0,0 +1,3 @@ +# Alice in Wonderland + +During my winter vacation, I picked up PICO-8. It was very fun to play with and surprisingly intuitive, thanks to its use of Lua. I began making a simple adaptation of Alice in Wonderland, but I did not finish it yet. I will document my progress here. diff --git a/hardware/_werc/config b/hardware/_werc/config new file mode 100644 index 0000000..6d5272d --- /dev/null +++ b/hardware/_werc/config @@ -0,0 +1,2 @@ +siteTitle='Soft Machine' +siteSubTitle='Gently prod her guts' diff --git a/hardware/index.md b/hardware/index.md new file mode 100644 index 0000000..0617fc8 --- /dev/null +++ b/hardware/index.md @@ -0,0 +1,3 @@ +# Hardware + +There are currently no hardware project logs here. diff --git a/index.md b/index.md new file mode 100644 index 0000000..c460331 --- /dev/null +++ b/index.md @@ -0,0 +1,21 @@ +# Technology + +This site is subdivided into a few hubs for my various projects. + +## Soft Machine is run by an amateur + +Amateur comes from Latin *amātor* (lover) -- computers have been a life-long passion of mine, though they did not return the love very often. Over the years, I realized that it was hardware, and not programming, that appealed to me most. Regardless, I strive to become a better programmer, and I will share here microprograms that are born out of my successful attempts. + +## Human-machine interfacing + +I am passionate about open-source hardware and software. Technology should not hide its workings from you and should serve as a helpful extension. While unmanned automation can be very useful, the user should still be able to control, study, repair, and modify various parts of the system, whether its a program or a microwave. + +I am particularly interested in highly interactive technology, things whose flow of instruction can be manipulated in real-time by the user. While this can be said about utilities like graphical servers and windowing managers, I count hardware as well. Most such hardware is analog, it seems. Analog will always have a special place in my heart over digital because it has soul. + +## Philosophy + +I believe that software and hardware should do just about what they're intended to do and that's it. Programming as a practice and an art was engendered by our need to automate and speed up processes. (Of course, programs are ulimately limited by hardware limitations, as are our minds limited by our bodily needs, but hardware capabilities in the modern age are more than enough.) Software should, broadly speaking, efficiently do what it is written to do in the simplest (safe) way there is, minimizing not only lines of code but instruction cycles. Overall, proprietary software is not friendly to the user in the sense that it works with you. + +While hardware nowadays is powerful enough that programs need not be optimized down to the nanosecond, I find value in minimizing how much of my resources a program uses, allowing more room for complex and heavy operations. This was driven by me having to spend time with a slow computer that often froze when its RAM reached 50% of use. I found myself minimizing RAM to the extreme, forgoing GUI most of the time and using the lightest programs I could find. Even though I did this out of necessity, the habit stuck, and I found in simplicity a great beauty. Utilities should be purely functional, without unnecessary fluff. Unless, well, you want it and can afford to use it. + +Technological advancement is too rapid for my liking, too. Upon the inception of the Industrial Revolution, technology became our bane and curse, as much as it is our saviour in many fields. The heavy commercialization of practically everything in the world has led to many practices in production and design that I find unsavory and even harmful if you consider the environment. For computers in particular, I see a trend in advancement that grows at an unreasonably fast pace, and software tends to catch up and bloat. This is evident if you consider the minimum required RAM for the average computer user over the years, especially when many basic open source system software projects have not changed as much in their requirements over the course of decades. diff --git a/software/_header.md b/software/_header.md new file mode 100644 index 0000000..8d3f802 --- /dev/null +++ b/software/_header.md @@ -0,0 +1 @@ +Found here are my poor attempts at manipulating the metallic flesh of the machine. Unfortunately hosted on [GitHub](https://github.com/radiohotline/). diff --git a/software/_werc/config b/software/_werc/config new file mode 100644 index 0000000..21a10c9 --- /dev/null +++ b/software/_werc/config @@ -0,0 +1,2 @@ +siteTitle='Soft Machine' +siteSubTitle='All software sucks' diff --git a/software/coreutils.md b/software/coreutils.md new file mode 100644 index 0000000..d16f188 --- /dev/null +++ b/software/coreutils.md @@ -0,0 +1,39 @@ +# Coreutils Clone + +Minimalist coreutils implementation in C. It contains only the functions that I actually use in each program, for better or for worse. In a way, it is inspired by Plan 9's implementations, which are much simpler than Gnu's. + +To-Do: +- [x] echo +- [ ] cat (marked undone because of SERIOUS FATAL FLAW that I need to fix) +- [x] tac +- [x] head +- [x] tail +- [x] touch +- [ ] cp +- [ ] dd +- [ ] df +- [ ] dir +- [ ] ln +- [ ] ls +- [ ] mkdir +- [ ] mv +- [ ] rm +- [ ] rmdir +- [ ] base32 +- [ ] base64 +- [ ] wc +- [ ] arch +- [ ] basename +- [ ] date +- [ ] du +- [ ] false +- [ ] pwd +- [ ] true +- [ ] whoami +- [ ] yes +- [ ] less +- [ ] more +- [ ] ascii +- [ ] awk +- [ ] grep +- [ ] cd diff --git a/software/kilo.md b/software/kilo.md new file mode 100644 index 0000000..076f756 --- /dev/null +++ b/software/kilo.md @@ -0,0 +1,3 @@ +# kilo + +This is being made following this [tutorial](https://viewsourcecode.org/snaptoken/kilo/). This is intended to be a fork. diff --git a/software/loveletter.md b/software/loveletter.md new file mode 100644 index 0000000..ed1d3f7 --- /dev/null +++ b/software/loveletter.md @@ -0,0 +1,14 @@ +# Strachey's Love Letter Algorithm + +[GitHub](https://github.com/radiohotline/loveletter) + +I made this a few years ago. Most of my experience with C++ was restricted to university classes, and I wanted to do something fun. It's a very basic project, and I probably implemented it inefficiently. + +Sample output: +> DARLING FANCY, +> +> MY ENAMORED DAISY ENTICINGLY CLINGS TO YOUR CORDIAL DREAM. MY DEVOTED TRUELOVE AVIDLY SEEKS YOUR KIND FELICITY. MY AVID DEVOTION CURIOUSLY TREASURES YOUR PRECIOUS WONDER. MY ADORING DREAM KEENLY ADORES YOUR ENCHANTING RAPTURE. YOU ARE MY KIND PARAMOUR. +> +>YOURS EAGERLY, +>TROY. + diff --git a/software/troysort.md b/software/troysort.md new file mode 100644 index 0000000..03516dc --- /dev/null +++ b/software/troysort.md @@ -0,0 +1,3 @@ +# Troysort + +Until I fix my laptop, this is lost. Essentially, it was a "sorting algorithm" that did not sort your list. -- cgit v1.3