Αυτός ο ιστοχώρος

Pre-rendered ιστοχώρος. Η πρώτη κύρια έκδοση είχε αφαιρετικό κώδικα, ενώ η δεύτερη συντόμευε μεγάλα κομμάτια κώδικα σαν συντομογραφίες.

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

Μπορείτε να βρείτε και την πρώτη και τη δεύτερη έκδοση στο GitHub.

<?php
/* License at the bottom */

include_once("common/wraps/typical-layouts.php");
include_once("common/wraps/external-links.php");
include_once("common/wraps/xml.php");

[...]

function get_biography_html(string $language) {

  return get_typical_layout(
    $language,
V1
<?php
    function biography_array_to_en_gr($array) {
        global $EN, $GR; $EN($array->en); $GR($array->gr);
    }
    $b = "biography_array_to_en_gr";
?>
[...]
<?php $h = simplexml_load_file("bio-high-school.xml") ?>
<h2><?php $b($h->title) ?></h2>
<p>
    <?php $b($h->graduated) ?>
    <a href="http://2lyk-amaliad.ilei.sch.gr/wordpress17/"
    ><?php $b($h->high_school) ?></a>
V2

Η πρώτη φάση του ιστοχώρου βασιζόταν σε επίπεδα αφαίρεσης όπου τα στοιχεία που εμφανίζονται επιλέγουν τις ιδιότητές τους μέσα από ένα μπουφέ επιλογών. Η επόμενη φάση ήταν να σερβίρονται οι ιστοσελίδες ως έχουν, χρησιμοποιώντας έναν αυτοσχέδιο μηχανισμό macros, έπειτα χρησιμοποιήθηκε progressive enhancement για να στηρίζεται ο περιηγητής του Emacs, έπειτα αντικαταστάθηκαν τα μενού στην κορυφή από απλό κείμενο. Απλοποιήθηκε δηλαδή ο σχεδιασμός του ιστοχώρου σταδιακά, διατηρώντας όσο το δυνατόν περισσότερα θετικά. Στην τελική του μορφή, απλοποιούνται σημαντικά κάποια ζητήματα όπως η εμφάνιση σε μικρές οθώνες, η υποστήριξη παλιών περιηγητών ή σύγχρωνων απλών περιηγητών, η προσβασιμότητα από άτομα με ειδικές ανάγκες, η εναλλαγή μεταξύ Ελληνικής και Αγγλικής γλώσσας, η εναλλαγή μεταξύ ανοιχτού και σκούρου θέματος και η πλοήγηση μεταξύ των σελίδων. Ενδιαφέρον είναι ότι η εμφάνιση άλλαξε έντονα αλλά ούτε βελτιώθηκε ούτε χειροτέρευσε. Δεν είναι εντυπωσιακή από πρώτη όψη, αλλά δίνει την αίσθηση ότι είναι προβλέψιμη και δε θα δημιουργήσει προβλήματα.

Συνδυασμοί πλήκτρων του ΛΣ

Σύστημα που απεικονίζει επόμενους επιτρεπτούς συνδυασμούς πλήκτρων και πεδία συμπλήρωης για ορισμένους συνδυασμούς, χτισμένο πάνω από το sxhkd, με 4 κύριες εκδόσεις:

Έκδοση 1: alchain

3 προγράμματα, alchain, alpopup και hk-tui.bash, που συνεργάζονται ώστε πατώντας το πλήκτρο Windows εμφανίζεται ένα τερματικό που καταλαμβάνει το κατώτερο τρίτο της οθόνης, προβάλλει επιτρεπτά πλήκτρα και αναμένει είσοδο. Αφότου πατηθεί το Windows και εμφανιστεί το τερματικό, και μέσα στο τερματικό πατηθεί ακόμη ένα πλήκτρο όπως για παράδειγμα W, σε πολλές περιπτώσεις δε συνέβαινε τίποτα και το τερματικό πρόβαλλε τα επιτρεπτά πλήκτρα που ακολουθούν μετά από το πρώτο.

read -n 1 -s -r
next=$( awk "/^$REPLY/ { print \$2 }" hk-states/$state )

if [ -z $next ]
then
    next=ROOT
    bspc node last --focus
fi
απόσπασμα του hk-tui.bash (Πηγαίος κώδηκας)

Το πρόβλημα ήταν ότι τα παράθυρα δε σχεδιάστηκαν για τέτοια χρήση. Δεν υπήρχαν μόνο προβλήματα που θα αποκαλούσε κανείς bugs, αποδείχτηκε ότι τα παράθυρα είναι πιο διακοσμητικά απ' ότι υπέθεσα. Ο περισσότερος απ' τον κώδικα του συστήματος έχει χαθεί σήμερα.

Έκδοση 2: alk

Shell scripts που τα ορίσματα που δέχονται αντικατοπτρίζουν συνδυασμούς πλήκτρων. Το εκτελέσιμο al προβάλλει τα stdout και stderr σε ένα τερματικό. Αυτό όμως δεν είναι απαραίτητο, εξαρτάται από τη INTERACTIVE μεταβλητή περιβάλλοντος. Οι ορισμοί των shell functions alk-* είναι ειδικά γραμμένοι ώστε να παράγεται το εγχειρίδιο χρήσης με βάση αυτούς, και το εγχειρίδιο λειτουργεί και ως λίστα συνδυασμού πλήκτρων. Αν και ο κώδικας είναι παράξενος, είναι πού πιο κοντά σε χαρακτήρα στον σημερινό μου κώδικα shell scripts. Παρατηρήστε ότι είναι POSIX compliant αντί για Bash.

if [ "$INTERACTIVE" = '' ]
then set_interactive
fi

execute_al() {
    alk-router "$@"
}
execute_al_interactive() {
    execute_al "$@"
}
απόσπασμα του al

Σε σχέση με την πρώτη έκδοση, αυτή απαιτεί πολύ μεγαλύτερα αρχεία ρυθμίσεων. Επίσης δε χρησιμοποιήθηκε σχεδόν ποτέ εντός τερματικού.

Έκδοση 3: alsnip

Σύστημα παραγωγής φράσεων κώδικα, το οποίο μπορεί να δεχτεί είσοδο από το χρήστη για τη συμπλήρωση μιας φράσης, και στο μεταξύ προβάλλει προτάσεις σχετικά με την είσοδο. Οι φράσεις μπορούσαν να είναι shell scripts που θα εκτελούνταν, και η συμπλήρωση μπορούσε να ξεκινήσει με συνδυασμό πλήκτρων. Τα αρχεία ρυθμίσεων ξεκαθάριζαν ποιες φράσεις είναι shell scripts (προς εκτέλεση), και μεταξύ αυτών, ποιες αντιστοιχούνταν σε συνδυασμούς πλήκτρων, και ποιες απαιτούσαν την παρουσία τερματικού για παράδειγμα για εισαγωγή κωδικών. Ήταν έτοιμο για έκδοση, αλλά είχε πολλές εξαρτήσεις από το σύστημά μου, και επίσης το παράτησα πριν αποφασίσω να το εκδόσω.

fn=powff+key+is-e-q+key-term:"$fn"
fn_powff() {
  case "$act" in
    script) printf 'sudo shutdown %s\n' "$1" ;;
    descr) cat <<EOM
systemd command,  poweroff  is an alias to  shutdown now
EOM
    ;;
    arg1) printf "recommend\nnow\n+1\n+5\n+30\n23:59\n02:00\n" ;;
  esac
}
απόσπασμα του example-config/reset.sh

Ποτέ μου δεν είχα χρησιμοποιήσει έτοιμες φράσεις κώδικα, και ούτε κινητοποιήθηκα χάρη σε αυτό το σύστημα να τις χρησιμοποιήσω. Οπότε το σύστημα ανέλαβε μόνο το ρόλο του συνδυασμού πλήκτρων. Επίσης η κατάχρηση της έμπνευσης από τον κύριο Robert C. Martin έκανε το σύστημα περίπλοκο σε κάθε κλίμακα για τον έως τότε κώδικά μου. Φτιάχνοντας αυτό τον ιστοχώρο, το δημοσίευσα στο GitHub.

Έκδοση 4: scmd

Ένα αρχείο.

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)"; }

wallpaper_set_scale() { bspc_float; feh --bg-scale "$(find ~/l/gwp/ -type f -print0 | xargs -0 sxiv -ot)"; }
wallpaper_set_fill()  { bspc_float; feh --bg-fill  "$(find ~/l/gwp/ -type f -print0 | xargs -0 sxiv -ot)"; }

Οι γραμμές κώδικα γίνονται επιλογές λίστας και μπορεί να διαβάσει τον εαυτό του και να παράξει τις ρυθμίσεις των συνδυασμών πλήκτρων του συστήματος με βάση τα σχόλια στο τέλος των γραμμών κώδικα. Κάθε γραμμή είναι είτε κενή, είναι σχόλιο, είτε ορισμός συνάρτησης shell.

scmd_run() { c="$(dmenu < "$(this_file)" | cut -d'(' -f1)"; test "$c" && scmd_with_bar_status "$c"; } #x
  [...]
this_file() { echo ~/.config/scmd.sh; }

Αυτό είναι η καλύτερή μου κατασκευή, επειδή δεν υποδουλώνει τον υπολογιστή να υπακούσει σε απαιτήσεις αλλά ρωτάει τον υπολογιστή τι μπορεί να κάνει καλά. Η διαδικασία ήταν σαν ένας μακρύς διάλογος που δένει δύο άτομα και τα βοηθάει να καταλάβουν το ένα το άλλο.

scmd_ls_keys() { sed -n 's/^\([a-z0-9_]\+\)(.*#\([^}]*\)$/\2 \1/p' "$(this_file)"; }
scmd_sxhkdrc_vim() { in_vim scmd_sxhkdrc; }
scmd_sxhkdrc() { scmd_ls_keys | awk "{ $(scmd_awk1) $(scmd_awk2) }"; }
scmd_awk1() { printf %s 's = $1; gsub(/./, "; super + &", s); sub("; ", "", s); '; }
scmd_awk2() { printf %s 'print(s); printf("\t. %s && scmd_with_bar_status %s\n\n", "'"$(this_file)"'", $2);'; }
scmd.sh.