Χαρτοφυλάκιο

English

Θοδωρής Δημακόπουλος

Φοιτητής πληροφορικής, έχω κλίση στα Linux και προτιμώ την άμεση επικοινωνία.

Για πτυχίο θα χρειαστώ πρακτική άσκηση, κατά προτίμηση μερικής απασχόλησης έξι μηνών ή στην ανάγκη ολικής απασχόλησης τριών μηνών.

Πρόσωπο άντρα, πράσινα μάτια, μακρύ μαλλί

Γενικά

Web development

Έκανα τρίμηνη πρακτική πλήρους απασχόλησης στη Helvia, τον Ιούλιο του 2024. Τον πρώτο μήνα μάθαινα DevOps/operations και τους δύο επόμενους εξοικειώθηκα με τα εργαλεία NextJS, MongoDB και FastAPI της Python φτιάχνοντας την εφαρμογή Key Mouth. Το Key Mouth είναι εφαρμογή ανταλλαγής μηνυμάτων που δείνχνει τα πλήκτρα που πατάει ο άλλος χρήστης σε πραγματικό χρόνο. Το δύσκολο ήταν ότι δεν υπήρχε σημείο αναφοράς.

Πριν την πρακτική στη Helvia, σε μαθήματα που αφορούσαν web development στη σχολή, δοκίμασα PostGres SQL, MySQL και MongoDB, είδα κώδικα άλλων σε VueJS και Jango της Python και προσπάθησα να μάθω Spring σε Java και Kotlin πάνω από μία φορά. Επίσης πειραματίστηκα στον ελεύθερό μου χρόνο με μερικά Docker containers από περιέργεια και δοκίμασα λίγο Jest και Typescript.

Linux

Θυμάμαι το 2020 να δοκίμασα WSL πρώτη φορά, έπειτα χρησιμοποίησα Linux Mint και έπειτα, επειδή δυσκολευόμουν να ρυθμίσω κάποια εργαλεία, εγκατέστησα Arch Linux με το χειροκίνητο τρόπο. Με ενέπνευσε πολύ το κανάλι DistroTube στο YouTube αν και το κανάλι έχει ένα τρόπο σκέψης που πλέον δεν ακολουθώ.

Χρησιμοποιούσα πολύ το shell και έμαθα αρκετά το υποσύνολο POSIX, και για scripts και για γραμμή εντολών. Κάποια στιγμή νοίκιασα έναν Alpine Linux server για backups και για να σερβίρω αυτό τον ιστοχώρο με NginX και certbot. Σε γενικές γραμμές πάει καλά, αν και δε θα έλεγα ότι ξέρω servers. Άλλοτε πέφτει το σάιτ, άλλοτε υπάρχει θέμα με τα πιστοποιητικά, αλλά υπάρχει πρόοδος.

Κοινωνικές εμπειρίες

Μέχρι το 2021 περίπου ήμουν στερεοτυπικός προγραμματιστής, σήμερα έχω κάποιους φίλους.

Σε ομαδικά πρότζεκτ στη σχολή έδωσα έμφαση στα UX user test, έδειξα σε συνεργάτες πώς γίνονται τα αυτόματα τεστ και σε δύο εργασίες χρησιμοποίησα πρωτότυπα για ιδέες. Βέβαια, δεν πήγαν καλά αυτά. Η αγαπημένη μου ομαδική εργασία ήταν μια σχετικά απλή έρευνα γύρω από τη γλώσσα Rust και το μεταγλωττιστή της, ήμασταν 4 φίλοι και συνεργαζόμασταν από κοντά για δύο μήνες, 4 ώρες τη μέρα τουλάχιστον 4 μέρες την εβδομάδα.

CV σε PDF

Το CV δίνει πιο πολλή έμφαση σε μετρήσιμες έννοιες.

Πρότζεκτ με μεγαλύτερη επηροή

Το πρότζεκτ που με επηρέασε περισσότερο με διαφορά είναι η εφαρμογή Key Mouth. δε θα αναφέρω όμως περισσότερα επειδή έχω αναφέρει όλες τις λεπτομέρειες στο GitHub. Κατά τα άλλα, ό,τι έμαθα το έμαθα κυρίως από κώδικα που γράφτηκε δεύτερη φορά ή που απλά πετάχτηκε, οπότε σε αυτά θα ήθελα να δώσω έμφαση εδώ.

Οι 3 εκδόσεις αυτού του ιστοχώρου

Υπήρχε ένα μενού στην κορυφή όπως σε άλλα σάιτ.

Συναρμολογούμενες συναρτήσεις

PHP συναρτήσεις που επιστρέφουν strings HTML κώδικα.Το σερβίρω ακόμα και υπάρχει και στο GitHub.

include_once("common/wraps/typical-layouts.php");
[...]
function get_biography_html(string $language) {
  return get_typical_layout(
    $language,

Λιγότερα επίπεδα αφαίρεσης

Ο κώδικας μοιάζει σα συντομεύσεις που παραπέμπουν σε περισσότερο κώδικα. Σερβίρω μια παλιότερη και μια επόμενη έκδοση και υπάρχει ο κώδικας στο 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>

Λιγότερο κείμενο

Το σάιτ του Kevin Powell μου έδωσε την ιδέα να γράψω όσο λιγότερο κείμενο γίνεται ώστε να μπορώ να γράψω την 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

Τελικά

Μοιάζει σα να μειώθηκαν οι απαιτήσεις και να έγινε πιο πρόχειρος ο κώδικας. Από μια άποψη όμως οι απαιτήσεις ανέβηκαν. Πλέον πρέπει η σελίδα να είναι λακωνική, πλέον αναμένεται ο browser να μπορεί να αναφέρει τον πηγαίο κώδικα και αν δοκιμάσεις να γράψεις HTML χωρίς indentation δε ξεκολλάς.

Οι τέσσερις εκδόσεις συνδυασμών πλήκτρων

Το λειτουργικό μου σύστημα είναι λίγο στρυφνό και βασίζεται σε συνδυασμούς πλήκτρων γιατί δεν έχει πολλά μενού και μπάρες. Προφανώς θα χρησιμοποιούσα το πρόγραμμα sxhkd, αλλά ήθελα και ένα αναδυόμενο παράθυρο με συμβουλές σαν το which-key που δε γίνεται.

Εισαγωγή γράμματος

3 bash script και η παρακάτω γλώσσα. Εμφανίζεται ένα τερματικό, δείχνει μια λίστα από πλήκτρα και περιμένει για είσοδο.

s *screenshot   sel=$(slop -f "-i %i -g %g"); shotgun $sel /tmp/screenshot.png
S *scrsh-fulls  sleep 0; shotgun /tmp/screenshot.png

Το τερματικό ανακατευόταν με τα υπόλοιπα παράθυρα και οι συνδυασμοί πλήκτρων για να αλλάξεις παράθυρο χάλαγαν.

Ένα προς ένα εντολές Linux

Μία νέα απαίτηση ήταν ότι το Win + e, Win + Alt + r πρέπει να μπορεί να γίνει και από τη γραμμή εντολών πατώντας al e +r.

Επίσης, το Win + m, Win + v τρέχει την εντολή pacmd set-sink-volume 0 ... αφού ρωτήσει το χρήστη πώς να συμπληρώσει το κενό. Πλέον το ανέβασα και στο GitHub.

video | V) mpv_shut_up $(find ~/img/go -name '*.mp4' | shuf) ;;
screenshot | s) sxiv /tmp/screenshot.png ;;

Ρυθμίζεται λίγο δύσκολα και δεν υπήρχε καλός τρόπος να πάρεις μια λίστα από πλήκτρα. Φυσικά δεν το χρησιμοποιούσα από τη γραμμή εντολών σχεδόν ποτέ.

Πρόγραμμα συνδυασμού κομματιών κώδικα

Ανέβηκαν οι απαιτήσεις αλλά χωρίς λόγο. Είναι στο GitHub.

Δίνεται μια λίστα από κομμάτια κειμένου ή κώδικα, κάποια εκ των οποίων είναι εντολές Linux, κάποιες εκ των οποίων έχουν συνδυασμούς πλήκτρων. Κάποιες ζητούν και συμπλήρωση. Κατά τη συμπλήρωση το πρόγραμμα δίνει προτάσεις και στο τέλος μια μπάρα γράφει ποια εντολή εκτελέστηκε. Κάθε κομμάτι κειμένου έχει περιγραφή. Τα κομμάτια εκτός από εντολές μπορεί να είναι shell aliases, ASCII art για αντιγραφή στο πρόχειρο, ένα C for loop που κάποια κομμάτια του λείπουν και θέλουν συμπλήρωση κλπ. Στην οθόνη εμφανιζόταν μία λίστα που έμοιαζε κάπως έτσι:

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

Ρυθμιζόταν με shell scripts που παράγουν άλλα shell scripts. Άρχισε να χρειάζεται 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; }

Αυτό το αρχείο χρωματίζεται από τον editor, λειτουργεί σα λίστα, έχει ένα υπερσύνολο των εντολών που αντιστοιχούν σε πλήκτρα, μια μπάρα αναφέρει τι εκτελέστηκε, χρησιμοποιείται και από τη γραμμή εντολών και για πρώτη φορά ήταν πρακτικό να φτιαχτεί logger.

Είναι στο GitHub ανάμεσα στα αρχεία ρυθμίσεών μου.

Συμπέρασμα

Αυτοί οι πειραματισμοί έκαναν τον κώδικα να μοιάζει με φάσεις ζωής. Στην αρχή ήταν συμπαθητικός και οικείος, έπειτα έγινε λίγο υπερβολικός και στο τέλος έγινε βαρετός και περίεργος, σχεδόν κυνικός. Μοιάζει λίγο με την ιστοσελίδα που έγινε ένα αρχείο με απλή δομή. Ίσως σε μεγάλη κλίμακα να μη μπορεί ένα πρότζεκτ να περάσει από τέτοιες φάσεις αλλά έχει ενδιαφέρον αυτό το φαινόμενο.

Άλλοι πειραματισμοί

Είχε αλλάξει πολλές φορές επίσης η δομή των φακέλων στο λάπτοπ μου και έπρεπε να αλλάζω αντίστοιχα το backup στον server, προσπαθούσα για ένα μεγάλο διάστημα να ομαδοποιήσω κάποιες εικόνες και χρησιμοποίησα αυτοσχέδια Python GUIs μεταξύ άλλων, προσπαθούσα για ένα διάστημα να διακοσμίσω το λειτουργικό μου σύστημα, προσπάθησα να κάνω "πιο καθαρό" τον κώδικα του dmenu και χρειάστηκε να αποδεχτώ ότι απλά τον έκανα χειρότερο και, τέλος, ξανάγραψα ένα αναδυόμενο ρολόι από Python σε C και έχασε σε εμφάνιση.

Καλή συνέχεια!

Μη διστάσετε να μου γράψετε για ο,τιδήποτε.

Gmail: dimakopt732@gmail.com