I'm Theodore D.
Undergraduate programmer with a focus on Linux and face to face interactions.
I'm looking for a 6 month part time internship, or maybe a 3 month full time one, so I can get my degree.
About me
Web development
In July 2024 I interned full time at Helvia, one month on DevOps/operations and for two months I learned NextJS, MongoDB and Python's FastAPI by making Key Mouth. It's a chat app that shows each key instead of messages. It was hard mainly because there's no point of reference to hold onto.
Before joining Helvia, we had cources related to web development and I tried PostGres SQL, MySQL and MongoDB, I read some code in VueJS and Python's Jango and I tried learning Spring in Java and Kotlin a few times. I entered a few Docker containers in my free time to look around and I played around with Jest and Typescript.
Linux
I tried WSL in 2020, I believe, then I went to Linux Mint and then, because I couldn't figure out how to use minimal tools on Mint, I installed Arch Linux with the manual installation. I was motivated mostly by the DistroTube channel on YouTube although I've changed my mindset since then.
I used the shell a lot and eventually I got good at the POSIX subset, both for scripts and on the command line interactively. One day I rented an Alpine Linux server for backups and to use it to serve this site with NginX and certbot. It's alright, though I wouldn't say I'm good at serving sites. There's downtime sometimes and the certificates are a little off, but there's been progress.
Social experiences
I was a stereotypical programmer up to about 2021, today I do have a few friends.
In University projects I gave emphasis on UX user tests, I showed some teammates how we could do automated tests and in two projects I demonstrated some draft prototypes. None of this went well though and that's a topic that I can talk about all day. My favorite project was a simple research on the Rust compiler with 3 firends where we were face to face 2 months, 4 hours a day, 4 days a week at least.
CV as PDF
The CV complements this site. It emphasizes the parts that are more measurable.
Most educational projects
The project that taught me the most, by far, is the Key Mouth web app. I won't go into details here though because there are details on the GitHub page. The most valuable lessons for me were rewritten projects and ideas that I had to throw away, so that's what I'd like to focus on.
The 2 rewrites of this site
The site used to have a typical menu at the top.
Identity buffee
Abstract PHP functions that compose HTML code. It's still served and it's on GitHub.
include_once("common/wraps/typical-layouts.php");
[...]
function get_biography_html(string $language) {
return get_typical_layout(
$language,
Fewest layers possible
Abstractions got replaced with abbreviations. I serve an older and a newer version and it's on GitHub.
<?php $STR_XML = simplexml_load_file("biography/bio-high-school.xml") ?>
<h2><?php $b("title") ?></h2>
<p>
<?php $b("graduated") ?>
<a href="http://2lyk-amaliad.ilei.sch.gr/wordpress17/"
><?php $b("high_school") ?></a>
Least text possible
Kevin Powell's site inspired me to reduce the text, to the point that I could serve hand written HTML.
<h4 class="fs3 fwn">Fewest layers possible</h4>
<p>
Abstractions got replaced with abbreviations.
I serve an
<a href="old-versions/20-hamburger-menu/en/index.html"
>older</a> and a
Conclusion
At first it looks like I lowered the requirements to get away with draft code but I'd say the requirements overall went up. It was a requirement to be laconic, one could say there was a requirement to make the browser tools reflect the source code better, and it's fun to hand write HTML with no indentation.
The 3 rewrites of my hotkey system
I use an odd operating system which relies on key combinations
becuase there's no taskbar or bars on windows.
I had one real option, to use
sxhkd
,
but I wanted a pop-up guide too like
which-key
and I couldn't have one.
Prompt for next key
3 bash scripts and the language shown below. A terminal appeared to list keys and take input.
s *screenshot sel=$(slop -f "-i %i -g %g"); shotgun $sel /tmp/screenshot.png
S *scrsh-fulls sleep 0; shotgun /tmp/screenshot.png
The terminal messed with the notion of previous window and the hotkeys for switching windows had bugs.
Hotkey shell commands
A new demand was that
Win + e, Win + Alt + r
should also be possible from the terminal as
al e +r
.
Another new demand is that Win + m, Win + v
is bound to pacmd set-sink-volume 0 ...
and I'll be prompted to fill in the gap.
It's uploaded on
GitHub after the fact.
video | V) mpv_shut_up $(find ~/img/go -name '*.mp4' | shuf) ;;
screenshot | s) sxiv /tmp/screenshot.png ;;
The configuration code was verbose and the commands couldn't be listed reliably. It wasn't actually used it in the terminal either.
Code snippet composer
The demands went up but they weren't based on real needs. It's on GitHub.
There had to be a list of text snippets, some of which are operating system commands, some of which are bound to hotkeys. Some can prompt for completion. The completion gives hints, a bar shows the final command that ran, and each text snippet has an easily accessible description. Other purposes for the text snippets were shell aliases, copying ASCII art and completing parts of a C for loop and copying it. Below is part of the list that appeared on the screen.
vol1 .m1 /auto | pacmd set-sink-volume 0 6000
vol0 .m0 /auto | pacmd set-sink-volume 0 0
wm_t7 .!7 /auto | bspc node --to-desktop temporary --follow
wm_b7 .^7 /auto | bspc node @temporary:/ --to-desktop focused
The configuration was shell scripts that printed shell scripts. It became so slow that I considered caching.
Self-installing shell script
about_logging() { tail /tmp/scmd.sh; echo "Should have lines that look like: func() { echo hi; } #>>hi"; }
about_why() { echo "For the syntax highlighting and to reduce bugs. I've made many abstract hotkey systems."; }
[...]
volume_set_8() { pacmd set-sink-volume 0 48000; } #m8
volume_set_9() { pacmd set-sink-volume 0 54000; } #m9
volume_set_custom() { pacmd set-sink-volume 0 "$(:|dmenu)"; }
[...]
scmd_run() { c="$(dmenu < "$(this_file)" | cut -d'(' -f1)"; test "$c" && scmd_with_bar_status "$c"; } #x
[...]
this_file() { echo ~/.config/scmd.sh; }
I got syntax highlighting in my configuration file, I got a listing, a superset of the hotkey commands, a bar saying what ran, I could run the same actions from the terminal and for the first time I could easily log the commands and their output.
It's on GitHub among my dotfiles.
Conclusion
This project made me think of code as a person going through phases. It started relatable, then it became fancy and then almost grumpy. Just like the website, I ended up with one file with flat hierarchies. Maybe at scale a project can't go through phases in the same way but I find this phenomenon to be fascinating.
Other experiments at home
Some other stories are
the directory structure of my laptop
which was restructured 4 times alongside its remote backup,
the image tagging facilities which used python GUIs at first,
I was trying to decorate my operating system for some time,
I tried to "clean-up" the
dmenu
project but I had to accept I made it worse and I re-wrote a
clock pop-up
from Python to C and it ended up uglier.
Thanks for reading
Have a nice day, don't hesitate to hit me up!
Gmail: dimakopt732@gmail.com