Portfolio

Greek

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.

face of man, green eyes, long hair

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