From b39758cf6c6d4b1b8de99e51cbff8120cff63a78 Mon Sep 17 00:00:00 2001 From: Radiohotline Date: Tue, 26 May 2026 12:30:17 +0000 Subject: css --- _werc/pub/VGAMedium.ttf | Bin 0 -> 273612 bytes _werc/pub/style.css | 47 +++++++++++++++ _werc/pub/style/style.css | 12 ---- _werc/pub/test.css | 12 ++++ blog/huion.md | 123 +++++++++++++++++++++++---------------- blog/index.md | 2 +- hardware/e-reader.md | 3 + hardware/index.md | 2 + index.md | 2 + sitemap.gz | Bin 0 -> 261 bytes sitemap.txt | 12 ++++ software/_header.md | 2 +- software/binary-choice-ranker.md | 5 ++ software/coreutils.md | 16 +++-- software/troysort.md | 2 +- 15 files changed, 171 insertions(+), 69 deletions(-) create mode 100644 _werc/pub/VGAMedium.ttf create mode 100644 _werc/pub/style.css delete mode 100644 _werc/pub/style/style.css create mode 100644 _werc/pub/test.css create mode 100644 hardware/e-reader.md create mode 100644 sitemap.gz create mode 100644 sitemap.txt create mode 100644 software/binary-choice-ranker.md diff --git a/_werc/pub/VGAMedium.ttf b/_werc/pub/VGAMedium.ttf new file mode 100644 index 0000000..20ef825 Binary files /dev/null and b/_werc/pub/VGAMedium.ttf differ diff --git a/_werc/pub/style.css b/_werc/pub/style.css new file mode 100644 index 0000000..99ac649 --- /dev/null +++ b/_werc/pub/style.css @@ -0,0 +1,47 @@ +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; } + +/* cut here to leave vanity behind */ + +body { margin:0; padding: 0; font-family: Helvetica, Verdana, Arial, 'Liberation Sans', FreeSans, sans-serif; background-color: #ffffea; } +a { text-decoration: none; color: } +a:hover { text-decoration: underline; } +.thisPage { color: black; } + +/* header and top bar */ +header nav { background-color: #888844; color: black; padding: 0.3em; border-bottom: 2px solid black; font-size: 91%; } +header h1 { background-color: #cccc88; color: black; margin: 0; border-bottom: 2px solid black; font-weight: normal; padding: 0.25ex; font-size: 233%; } +header a:hover { text-decoration: none; } + +/* sidebar */ +body > nav { padding: 0; } +body > nav > div a { display: block; text-transform: capitalize; font-weight: bold; padding: 0.25em 1ex 0.25em 2mm; font-size: 110%} +body > nav > div a:hover { color: white; background-color: #448888; border-left: black solid 0.2em; text-decoration: none; } +body > nav > div p { font-weight: bold; margin: 0 0 0.5em 2mm; padding: 1em 0 0 0; } + +/* main copy */ +article { padding: 0 0 5vh 1vw; } +article h1, article h2 { font-weight: bold; margin: 2em 0 0 0; border-bottom: 2px solid black; } +article h3, article h4, article h5 { font-weight: bold; margin: 2em 0 0 0; } +article h6, article h7, article h8 { font-weight: bold; margin: 2em 0 0 0; } +article a { color: black; } +article a:hover { color: #448888; } +article pre { font-size: 1.2em; } + +/* footer */ +footer a { color: inherit; } +footer div { padding: 1em; } + +/* tables */ +table { border: 1px solid rgba(128,128,128,0.5); padding: 0; } +th { color: white; background-color: rgb(100,135,220); } +tr:nth-child(odd) { background-color: rgba(128,128,128,0.1) } diff --git a/_werc/pub/style/style.css b/_werc/pub/style/style.css deleted file mode 100644 index 252cb2a..0000000 --- a/_werc/pub/style/style.css +++ /dev/null @@ -1,12 +0,0 @@ -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/_werc/pub/test.css b/_werc/pub/test.css new file mode 100644 index 0000000..07278b3 --- /dev/null +++ b/_werc/pub/test.css @@ -0,0 +1,12 @@ +@font-face { font-family: 'vga'; src: url('/_werc/pub/VGAMedium.ttf') format('truetype'); font-display: swap; } +body { display: flex; flex-wrap: wrap; font-family: sans-serif; background-color: #ffffea; } +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; } diff --git a/blog/huion.md b/blog/huion.md index b5198c2..69acda6 100644 --- a/blog/huion.md +++ b/blog/huion.md @@ -3,11 +3,15 @@ First published: 2026/03/13 ## Prerequisites: -**Tablet:** Huion Kamvas 13 2.5k QHD -**Laptop:** Dell Inspiron 15-3567 -**OS:** Artix Linux running i3 (Xorg) + +__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. @@ -198,20 +202,30 @@ For example, if I press and release the topmost button, I get: 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 + +> 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. + +> 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 + +> 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. @@ -225,65 +239,74 @@ To set the last button (button 11) to Ctrl+Z, run: 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) + +> 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: +> Button 1: Eraser (E) - #!/bin/sh +> Button 2: Eyedropper (hold) (Ctrl) - # Detect device IDs +And the final config script: + #!/bin/sh + + # Detect device IDs + for i in $(seq 10); do - list=$(xsetwacom list devices) + list=$(xsetwacom list devices) - if echo "$list" | grep -q Huion; then - break - fi + 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 + exit 0 fi - + if [ -z "${stylus}" ]; then - exit 0 + 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" @@ -291,9 +314,9 @@ And the final config script: 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" @@ -310,19 +333,19 @@ Unplugging the tablet will not automatically restore display settings, so add an 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 diff --git a/blog/index.md b/blog/index.md index f28feba..2dddec3 100644 --- a/blog/index.md +++ b/blog/index.md @@ -2,4 +2,4 @@ ## Changelog: -2026/03/13 - [Setting up my Huion Kamvas 13 on Arch Linux](/blog/huion/) +2026/03/13 - [Setting up my Huion Kamvas 13 on Arch Linux](/blog/huion) diff --git a/hardware/e-reader.md b/hardware/e-reader.md new file mode 100644 index 0000000..6a6734f --- /dev/null +++ b/hardware/e-reader.md @@ -0,0 +1,3 @@ +# E-Reader + +An ESP32-S3-based e-book reader. Currently in the design stage. Some preliminary firmware worked on when I can. diff --git a/hardware/index.md b/hardware/index.md index 0617fc8..700b0ba 100644 --- a/hardware/index.md +++ b/hardware/index.md @@ -1,3 +1,5 @@ # Hardware There are currently no hardware project logs here. + +But there are many ideas and designs. diff --git a/index.md b/index.md index c460331..d42d457 100644 --- a/index.md +++ b/index.md @@ -6,6 +6,8 @@ This site is subdivided into a few hubs for my various projects. 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. +I am a former CS and CE student. I did not continue my studies, but the love that brought me to those departments remains, and I value lifelong learning, even if it is self-taught. + ## 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. diff --git a/sitemap.gz b/sitemap.gz new file mode 100644 index 0000000..8e5f140 Binary files /dev/null and b/sitemap.gz differ diff --git a/sitemap.txt b/sitemap.txt new file mode 100644 index 0000000..db9e112 --- /dev/null +++ b/sitemap.txt @@ -0,0 +1,12 @@ +http://tech.softmachine.dev:443/blog/ +http://tech.softmachine.dev:443/blog/huion +http://tech.softmachine.dev:443/games/ +http://tech.softmachine.dev:443/games/pico8/ +http://tech.softmachine.dev:443/games/pico8/alice +http://tech.softmachine.dev:443/hardware/ +http://tech.softmachine.dev:443/software/ +http://tech.softmachine.dev:443/software/conway +http://tech.softmachine.dev:443/software/coreutils +http://tech.softmachine.dev:443/software/kilo +http://tech.softmachine.dev:443/software/loveletter +http://tech.softmachine.dev:443/software/troysort diff --git a/software/_header.md b/software/_header.md index 8d3f802..1f6bd66 100644 --- a/software/_header.md +++ b/software/_header.md @@ -1 +1 @@ -Found here are my poor attempts at manipulating the metallic flesh of the machine. Unfortunately hosted on [GitHub](https://github.com/radiohotline/). +Found here are my poor attempts at manipulating the metallic flesh of the machine. Unfortunately hosted on [GitHub](https://github.com/radiohotline/). A self-hosted version control system will be set up. diff --git a/software/binary-choice-ranker.md b/software/binary-choice-ranker.md new file mode 100644 index 0000000..e1c8629 --- /dev/null +++ b/software/binary-choice-ranker.md @@ -0,0 +1,5 @@ +# Binary choice ranker + +I needed a ranker that accepts a plaintext list instead of individually entered items, so I made one. + +It can be found at [https://softmachine.dev/sort](https://softmachine.dev/sort). diff --git a/software/coreutils.md b/software/coreutils.md index 4c3c88c..fcce125 100644 --- a/software/coreutils.md +++ b/software/coreutils.md @@ -3,13 +3,21 @@ 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 + +- [x] echo + - [x] cat -- [x] tac -- [x] head -- [x] tail + +- [x] tac + +- [x] head + +- [x] tail + - [x] touch + - [x] cp + - [ ] dd - [ ] df - [ ] dir diff --git a/software/troysort.md b/software/troysort.md index 03516dc..4792fd9 100644 --- a/software/troysort.md +++ b/software/troysort.md @@ -1,3 +1,3 @@ # Troysort -Until I fix my laptop, this is lost. Essentially, it was a "sorting algorithm" that did not sort your list. +Essentially, it was a "sorting" "algorithm" that did not sort your list. -- cgit v1.3