<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ἀθανάσιος Α.</title>
    <link>https://thanosapollo.org/el/</link>
    <description>Recent content on Ἀθανάσιος Α.</description>
    <generator>Hugo</generator>
    <language>el</language>
    <lastBuildDate>Sun, 26 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://thanosapollo.org/el/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Διαγράφω τὸ Codeberg</title>
      <link>https://thanosapollo.org/el/posts/deleting-codeberg/</link>
      <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/deleting-codeberg/</guid>
      <description>&lt;p&gt;Διαγράφω τὴν παρουσία μου στὸ Codeberg: λογαριασμούς, mirrors, τὰ
πάντα.  Ὁ κώδικάς μου ζεῖ ἤδη στὸν δικό μου server, ἄρα δὲν πρόκειται
γιὰ αὐτοφιλοξενία.  Πρόκειται γιὰ τὴν κουλτούρα.  Ἕνα θορυβῶδες
κομμάτι τοῦ FOSS ἔχει γίνει ἀστυνόμευση καθαρότητας, πανικὸς copyright
καὶ παρενόχληση σὲ ὅποιον ἀφήνει πράκτορες νὰ γράφουν τὸν κώδικά του.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Διαγράφω τὴν παρουσία μου στὸ Codeberg: λογαριασμούς, mirrors, τὰ
πάντα.  Ὁ κώδικάς μου ζεῖ ἤδη στὸν δικό μου server, ἄρα δὲν πρόκειται
γιὰ αὐτοφιλοξενία.  Πρόκειται γιὰ τὴν κουλτούρα.  Ἕνα θορυβῶδες
κομμάτι τοῦ FOSS ἔχει γίνει ἀστυνόμευση καθαρότητας, πανικὸς copyright
καὶ παρενόχληση σὲ ὅποιον ἀφήνει πράκτορες νὰ γράφουν τὸν κώδικά του.</p>
<p>Εἶμαι φοιτητὴς ἰατρικῆς ποὺ ἀκόμα βγάζει ἐλεύθερο λογισμικό, καὶ οἱ
ὧρες μου εἶναι πεπερασμένες.  Δὲν θὰ τὶς ξοδέψω ἀπαντώντας σὲ
ἀνθρώπους ποὺ θεωροῦν ἠθικὸ ἔγκλημα τὸ λογισμικὸ ποὺ φτιάχνουν
πράκτορες καὶ ὕστερα ζητοῦν καὶ τὴν προσοχή μου ἀπὸ πάνω.</p>
<h2 id="τὸ-forge-δὲν-ἦταν-ποτὲ-οὐδέτερο">Τὸ forge δὲν ἦταν ποτὲ οὐδέτερο</h2>
<p>Τὸ Codeberg δὲν εἶναι μοναδικὰ καταραμένο.  Ὁ κόσμος πῆγε ἐκεῖ γιὰ
λογικοὺς λόγους.  Ἁπλῶς ἐκεῖ μαζεύεται πολὺ αὐτὸ τὸ πλῆθος, καὶ ἕνας
δημόσιος issue tracker εἶναι πολὺ βολικὸ κανάλι παρενόχλησης.</p>
<p>Ἂν ἡ πολιτική σου γιὰ τὸ λογισμικὸ σημαίνει ὅτι οἱ ἄλλοι σοῦ χρωστοῦν
δωρεὰν ἐργασία μὲ τοὺς ὅρους σου, αὐτὸ δὲν εἶναι ἐλευθερία.  Εἶναι
μικρὴ τυραννία μὲ αὐτοκόλλητο FOSS.  Οἱ συντηρητὲς ἀντιμετωπίζονται σὰν
ἀπλήρωτα χέρια, τὸ «ὄχι» βαφτίζεται ἀνήθικο καὶ τὸ μαστίγιο βαφτίζεται
ἀρχή.</p>
<p>Ὁ κώδικάς μου εἶναι ἤδη στὸ <a href="https://git.thanosapollo.org/">git.thanosapollo.org</a>.  Τὰ mirrors
ὑπῆρχαν μόνο γιὰ εὐκολία.  Τελείωσα καὶ μὲ τὴ συντήρηση τοῦ
<a href="https://git.thanosapollo.org/emacs-forgejo/">emacs-forgejo</a>.  Δικό μου forge, δικός μου tracker.</p>
<h2 id="οἱ-πειρατὲς-ἔγιναν-οἱ-μπάτσοι-τοῦ-copyright">Οἱ πειρατὲς ἔγιναν οἱ μπάτσοι τοῦ copyright</h2>
<p>Εἶμαι κατὰ τοῦ copyright.  Θαυμάζω τὸν Aaron Swartz.  Ἡ παλιὰ γραμμὴ
τῶν hackers ἦταν ἁπλή: ἡ πληροφορία θέλει νὰ εἶναι ἐλεύθερη.  Αὐτὸ
σήμαινε πρόσβαση γιὰ ὅλους, ὄχι ἐλευθερία μόνο ὅταν κολακεύει τὴν
ταυτότητά σου ὡς τεχνίτη.</p>
<p>Ποιὸς σπάει στ’ ἀλήθεια τὰ paywalls καὶ τὸν κλειδωμένο κώδικα αὐτὴ τὴ
στιγμή;  Κυρίως οἱ ἑταιρεῖες ποὺ ὅλοι λατρεύουν νὰ μισοῦν.  Τὰ μοντέλα
διαβάζουν τὰ πάντα καὶ τὰ κάνουν ἀναζητήσιμα.  Περίπου τὸ ὄνειρο τοῦ
Swartz, παραδομένο γιὰ κέρδος.</p>
<p>Καὶ πῶς ἀπάντησε μεγάλο κομμάτι τοῦ FOSS;  Μὲ κλάματα γιὰ κλοπή.  Οἱ
ἴδιοι ἄνθρωποι ποὺ σωστὰ μίσησαν τὸ SOPA τώρα ἱκετεύουν τὸν νόμο περὶ
copyright νὰ τοὺς σώσει ἀπὸ ἕνα μοντέλο ποὺ διάβασε τὸ README τους.</p>
<p>Οἱ πειρατὲς ἔγιναν οἱ μπάτσοι τοῦ copyright καὶ οἱ ἑταιρεῖες ἔγιναν
τυχαῖοι ἀπελευθερωτές.  Δὲν γλείφω τὴν OpenAI, τὸ κέρδος δὲν εἶναι
ἀρετή.  Τὸ πλῆθος τῆς καθαρότητας ὅμως γύρισε τὴν ἴδια στιγμὴ ποὺ ἡ
πληροφορία ποὺ ἐλευθερωνόταν ἦταν <em>δική τους</em>.  Αὐτὸ εἶναι προστασία
συντεχνίας.  Πὲς το ἐλεύθερο λογισμικὸ ἂν θέλεις.  Ἐγὼ ὄχι.</p>
<h2 id="τὸ-ἀντιανθρώπινο-εἶναι-ἱστορικὸς-ἀναλφαβητισμός">Τὸ «ἀντιανθρώπινο» εἶναι ἱστορικὸς ἀναλφαβητισμός</h2>
<p>Πὲς ὅτι οἱ ἄνθρωποι δὲν πρέπει πιὰ νὰ γράφουν κώδικα μὲ τὸ χέρι, καὶ
ἕνας ὁρισμένος τύπος ἐμφανίζεται στὴν ὥρα του: τεμπέλης, ψεύτικος,
προδότης τῆς τέχνης, ἀντιανθρώπινος.</p>
<p>Οἱ ἄνθρωποι ἐφευρίσκουν μοχλούς: φωτιά, γραφή, compilers, package
managers.  Τὸ νὰ πιάσεις ἕναν ἰσχυρότερο εἶναι τὸ πιὸ ἀνθρώπινο πράγμα
ποὺ ὑπάρχει.  Γράψε τὰ πάντα μόνος σου ὡς χόμπι ἂν σοῦ ἀρέσει, ὅπως
κάποιοι ζυμώνουν τὸ δικό τους ψωμί.  Μόνο μὴ μοῦ πουλᾶς τὴν πιὸ ἀργὴ
δουλειὰ γιὰ ἠθική.</p>
<p>Κάθε πρόγραμμα GPL τὸ λέει ἤδη: <em>ABSOLUTELY NO WARRANTY</em>.  Ἡ ἄδεια δὲν
ὑποσχέθηκε ποτὲ κώδικα πληκτρολογημένο ἀπὸ ἁγίους.  Ὑπόσχεται χρήσιμο
λογισμικό, as-is, μὲ δικό σου ρίσκο.  Νὰ λὲς ἀντιανθρώπινο τὸ ἐλεύθερο
λογισμικὸ ποὺ ἔφτιαξαν πράκτορες κάτω ἀπὸ αὐτὴ τὴν ἄδεια εἶναι μόδα,
ὄχι μηχανική.</p>
<h2 id="ἐνημέρωση-ζωῆς">Ἐνημέρωση ζωῆς</h2>
<p>Ξαναβάζω τὰ γάντια τῆς πυγμαχίας καὶ προπονοῦμαι πάλι.  Οἱ ἐξετάσεις
πᾶνε ἀρκετὰ καλὰ ὥστε νὰ μὴ ζῶ ὁλόκληρος μέσα στὴν ἑπόμενη προθεσμία,
καὶ αὐτὸ μετράει γιὰ μένα περισσότερο ἀπὸ ἄλλη μία εἰδοποίηση forge.</p>
<p>Ἀκόμα νοιάζομαι γιὰ τὸ ἐλεύθερο λογισμικό.  Νοιάζομαι περισσότερο γιὰ
λογισμικὸ ποὺ μοῦ λογοδοτεῖ.  Οἱ ἐλεύθερες ἄδειες μένουν, μένει καὶ ἡ
αὐτοφιλοξενία.  Αὐτὸ ποὺ φεύγει εἶναι ἡ ἀπαίτηση νὰ ζητῶ συγγνώμη ποὺ
χρησιμοποιῶ μοχλούς.</p>
<p>Τὸ περισσότερο λογισμικό μου βγαίνει πλέον ἀπὸ τὸ <a href="/el/posts/ai-and-foss/">ἐνυδρεῖο λογισμικοῦ</a>
μου: πράκτορες ποὺ γράφουν, ἐλέγχουν καὶ συντηροῦν κώδικα μὲ τοὺς
δικούς μου κανόνες ὅσο ἐγὼ διαβάζω.  Αὐτὸν τὸν καιρὸ ἡ γυάλα δουλεύει
τὸ <a href="https://git.thanosapollo.org/gnosis/">gnosis</a>, ποὺ προχωρᾶ πρὸς ἕνα <code>gnosis-core</code> μὲ FSRS καὶ πελάτες
Ἤμαξ καὶ web, τὸ <a href="https://git.thanosapollo.org/emacs-jabber/">emacs-jabber</a>, πύλες XMPP, τὶς μηχανές μου Nix,
τοπικοὺς trackers καὶ front-end Ἤμαξ γιὰ τοὺς ἴδιους τοὺς πράκτορες.</p>
<p>Ἕνα ἔργο μπορεῖ νὰ πάρει τὴν προσοχή μου ἂν μὲ μαθαίνει κάτι,
βελτιώνει ἐργαλεῖο ποὺ τρέχω, ἢ μὲ βάζει δίπλα σὲ ἀνθρώπους ποὺ
ἐμπιστεύομαι τὴν κρίση τους.  Ἡ παρενόχληση ντυμένη μὲ FOSS ὄχι.</p>
<p>Θέλεις τὸν κώδικα;  Πᾶρε τον ἀπὸ τὸν git server.  Θέλεις καβγὰ γιὰ τὸ
ἂν καὶ οἱ compilers ἦταν κι αὐτοὶ κλέψιμο;  Κράτα τον.  Ἔχω ἀσθενεῖς
νὰ διαβάσω, γύρους νὰ ρίξω καὶ ἕνα homelab νὰ συντηρήσω.</p>]]></content:encoded>
    </item>
    <item>
      <title>Φτηνὸς κώδικας, ἀκριβὴ προσοχή</title>
      <link>https://thanosapollo.org/el/posts/ai-and-foss/</link>
      <pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/ai-and-foss/</guid>
      <description>&lt;h2 id=&#34;ἀξίζει-ἡ-συμβολὴ-στὸ-foss&#34;&gt;Ἀξίζει ἡ συμβολὴ στὸ FOSS;&lt;/h2&gt;</description>
      <content:encoded><![CDATA[<h2 id="ἀξίζει-ἡ-συμβολὴ-στὸ-foss">Ἀξίζει ἡ συμβολὴ στὸ FOSS;</h2>
<p>Συμμετεῖχα σὲ ἀρκετὰ ἔργα FOSS.  Τελευταία ἔχω παρατήσει τὰ
περισσότερα.  Ὁ κώδικας φτήνυνε, οἱ ἄνθρωποι γύρω του ὄχι.</p>
<p>Πάρε γιὰ παράδειγμα τὸ GNU Guix, ὅπου ἔκανα γιὰ λίγο δουλειὰ
συσκευασίας.  <a href="https://codeberg.org/guix/guix/pulls/7636">Αὐτὸ τὸ PR</a> ἐνημέρωσε ἕνα πακέτο ποὺ συντηρῶ, τὸ
<code>emacs-jabber</code>.  Ἡ συνταγὴ χρειάστηκε περίπου πέντε λεπτά.  Μετὰ ἀπὸ
μιὰ ἀρχικὴ θετικὴ κριτική, τὸ νῆμα φούσκωσε σὲ μακριὰ συζήτηση γιὰ
χειρισμὸ ἐξαρτήσεων, ἀναδρομικὲς λήψεις καὶ ἐνσωματωμένο
κρυπτογραφικὸ κώδικα τρίτων.  Κανεὶς δὲν εἶχε τὴν εὐθύνη τῆς κριτικῆς
καὶ πουθενὰ δὲν φαινόταν σημεῖο ὅπου θὰ τελείωνε.  Πέντε λεπτὰ
διόρθωση, πολλαπλάσια ὥρα νῆμα.</p>
<p>Τὸ Guix εἶναι ἁπλῶς τὸ παράδειγμά μου.  Πολλὰ ἔργα κάνουν κριτικὴ
ἔτσι.</p>
<p>Κανεὶς δὲν γίνεται καλύτερος Schemer γράφοντας ἄλλη μία συνταγὴ
πακέτου καὶ διαβάζοντας ἀρχεῖα καταγραφῆς μεταγλώττισης.  Αὐτὸς ὁ
βρόχος ἀνήκει στοὺς πράκτορες.  Ἕνας πράκτορας θὰ μποροῦσε νὰ γράψει
τὴ συνταγή, νὰ τρέξει τὴ μεταγλώττιση, νὰ ἀπαντήσει στὰ σχόλια τῆς
κριτικῆς καὶ νὰ γυρίσει μὲ διορθωμένο patch ὅσο ἐγὼ διάβαζα.  Τὸ μόνο
ποὺ χρειαζόταν ἐκεῖνο τὸ νῆμα ἀπὸ ἄνθρωπο ἦταν κάποιον μὲ ἐξουσία νὰ
πεῖ «merge» ἢ «ὄχι», καὶ αὐτὸ ἀκριβῶς ἔλειπε.</p>
<p>Ἔτσι δὲν ρωτῶ πιὰ <em>«μπορῶ νὰ τὸ κάνω;»</em>  Ρωτῶ ἂν πρέπει νὰ τὸ κάνει
ἄνθρωπος.  Συνήθως ἡ ἀπάντηση εἶναι ὄχι.</p>
<p>Ἕνα ἔργο παίρνει ἀκόμα τὴν προσοχή μου ὅταν μὲ μαθαίνει κάτι,
βελτιώνει ἕνα ἐργαλεῖο ποὺ ὄντως χρησιμοποιῶ, ἢ μὲ φέρνει κοντὰ σὲ
ἀνθρώπους ποὺ ἐκτιμῶ τὴν κρίση τους.  Τὸ νὰ πληκτρολογῶ κώδικα μὲ τὸ
χέρι δὲν κάνει τίποτα ἀπὸ αὐτά.</p>
<blockquote>
<p>Ἂν ἕνα μοντέλο μπορεῖ νὰ κάνει τὴ δουλειὰ γιὰ ψίχουλα καὶ ὁ
συντονισμὸς γύρω της κοστίζει ἀκόμα ὧρες ἀνθρώπινης προσοχῆς, τὸ
σφάλμα εἶναι ὁ συντονισμός.</p>
</blockquote>
<h2 id="ὁ-κώδικας-ἔχει-φτηνύνει">Ὁ κώδικας ἔχει φτηνύνει</h2>
<p>Ὁ ESR ἔγραψε πρόσφατα ὅτι <a href="https://xcancel.com/esrtweet/status/2054288478750597593#m">ἡ ἐποχὴ τοῦ χειρόγραφου κώδικα ἔχει στὸ
μεγαλύτερο μέρος τελειώσει</a>.  Ἐγὼ θὰ ἔβγαζα τὸ «στὸ μεγαλύτερο
μέρος».  Οἱ ἄνθρωποι δὲν πρέπει πιὰ νὰ γράφουν κώδικα.</p>
<p>Στὴ θέση του ἐγὼ κρατῶ ἕνα ἐνυδρεῖο λογισμικοῦ.  Εἶναι μιὰ γυάλα μὲ
πράκτορες ποὺ γράφουν, δοκιμάζουν, ἐλέγχουν καὶ συντηροῦν τὸ λογισμικό
μου.  Ἐγὼ δὲν κολυμπῶ μέσα.  Ρυθμίζω τὸ νερό: πῶς θέλω νὰ γράφεται ἡ
Elisp, ποιὰ τεχνολογικὴ στοίβα νὰ χρησιμοποιεῖ ἕνα ἐργαλεῖο, τί πρέπει
νὰ ἐλέγξει μιὰ κριτικὴ πρὶν μπεῖ ὁτιδήποτε.  Αὐτὲς οἱ ἀπόψεις ζοῦν σὲ
skills καὶ στὴ μνήμη, ὁπότε κάθε πράκτορας ξεκινᾶ μιὰ δουλειὰ ξέροντας
ἤδη πῶς τὴ θέλω.  Ὅταν κάτι βγεῖ στραβό, διορθώνω τὸ νερό, ὄχι τὰ
ψάρια.</p>
<p>Ὅταν θέλω ἕνα ἐργαλεῖο, δὲν ψάχνω γιὰ ὑπάρχον ἔργο, δὲν μελετῶ τὶς
ἀφαιρέσεις του, δὲν λυγίζω τὴ ροὴ ἐργασίας μου γιὰ νὰ χωρέσει σὲ αὐτὸ
καὶ δὲν κληρονομῶ τὸ βάρος συντήρησής του.  Λέω τί θέλω καὶ τὸ
ἐνυδρεῖο τὸ χτίζει.</p>
<p>Αὐτὸ ἀλλάζει τὸ ἀπὸ ποιὸν ἐξαρτῶμαι.  Ἀντὶ γιὰ τρίτους
προγραμματιστὲς ποὺ δὲν γνωρίζω, τῶν ὁποίων οἱ προτεραιότητες καὶ ἡ
μακροπρόθεσμη δέσμευση εἶναι πάντα στοίχημα, τὸ λογισμικό μου βγαίνει
ἀπὸ τὴ δική μου γυάλα, πλασμένο ἀπὸ τὶς δικές μου ἀπόψεις.  Γιὰ
προσωπικὴ χρήση εἶναι συνήθως καὶ καλύτερο λογισμικό, ἀφοῦ κάνει μόνο
ὅ,τι ζήτησα καὶ δὲν κουβαλᾶ καμία ὑπόθεση κάποιου ἄλλου.</p>
<p>Ὁ φτηνὸς κώδικας σημαίνει ὅτι δὲν χρειάζεται πιὰ νὰ ἀναθέτω μικρὰ
ἀλλὰ σημαντικὰ κομμάτια τοῦ ὑπολογιστικοῦ μου περιβάλλοντος σὲ ξένους.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ἡ πιὸ ἠμαξικὴ σάγκα τοῦ Bzr</title>
      <link>https://thanosapollo.org/el/posts/bzr-saga/</link>
      <pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/bzr-saga/</guid>
      <description>&lt;style&gt;
.post-content blockquote {
    font-family: &#39;Iosevka&#39;, monospace;
    font-style: normal;
    font-size: 1.05em;
}
&lt;/style&gt;
&lt;p&gt;Ἀφοῦ δὲν εἶχα σήμερα ἐνδιαφέροντα βιβλία νὰ διαβάσω, οὔτε ἐνδιαφέρουσες
ταινίες νὰ δῶ, ἀποφάσισα νὰ ψάξω τὸ πιὸ συναρπαστικὸ περιεχόμενο ποὺ
μπορεῖ κανεὶς νὰ βρεῖ στὸ διαδίκτυο.  Κατέληξα νὰ διαβάζω τὶς λίστες ἀλληλογραφίας
τοῦ πυρήνα Linux, ἀλλὰ ἐκεῖνες οἱ συζητήσεις φαίνονταν 18+, ὁπότε
καταστάλαξα στὴν συγκριτικὰ κόσμια emacs-devel.&lt;/p&gt;
&lt;p&gt;Γιὰ ὅσους δὲν γνωρίζουν, ἡ emacs-devel εἶναι ἡ κύρια λίστα συζήτησης
ἀνάπτυξης γιὰ τὸν GNU Ἤμαξ — ὅπου λαμβάνονται ἀποφάσεις σχεδίασης,
ἐξετάζονται διορθώσεις, καὶ περιστασιακὰ ὅπου ἄνθρωποι ξοδεύουν 200 μηνύματα
ἐπιχειρηματολογώντας γιὰ λογισμικὸ ἐλέγχου ἐκδόσεων.  Αὐτὴ εἶναι ἡ ἱστορία
αὐτοῦ τοῦ τελευταίου.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<style>
.post-content blockquote {
    font-family: 'Iosevka', monospace;
    font-style: normal;
    font-size: 1.05em;
}
</style>
<p>Ἀφοῦ δὲν εἶχα σήμερα ἐνδιαφέροντα βιβλία νὰ διαβάσω, οὔτε ἐνδιαφέρουσες
ταινίες νὰ δῶ, ἀποφάσισα νὰ ψάξω τὸ πιὸ συναρπαστικὸ περιεχόμενο ποὺ
μπορεῖ κανεὶς νὰ βρεῖ στὸ διαδίκτυο.  Κατέληξα νὰ διαβάζω τὶς λίστες ἀλληλογραφίας
τοῦ πυρήνα Linux, ἀλλὰ ἐκεῖνες οἱ συζητήσεις φαίνονταν 18+, ὁπότε
καταστάλαξα στὴν συγκριτικὰ κόσμια emacs-devel.</p>
<p>Γιὰ ὅσους δὲν γνωρίζουν, ἡ emacs-devel εἶναι ἡ κύρια λίστα συζήτησης
ἀνάπτυξης γιὰ τὸν GNU Ἤμαξ — ὅπου λαμβάνονται ἀποφάσεις σχεδίασης,
ἐξετάζονται διορθώσεις, καὶ περιστασιακὰ ὅπου ἄνθρωποι ξοδεύουν 200 μηνύματα
ἐπιχειρηματολογώντας γιὰ λογισμικὸ ἐλέγχου ἐκδόσεων.  Αὐτὴ εἶναι ἡ ἱστορία
αὐτοῦ τοῦ τελευταίου.</p>
<h2 id="2008-αὐτὴ-ἡ-ἐρώτηση-ἔχει-τελειώσει-καὶ-ἀποφασιστεῖ">2008: «Αὐτὴ ἡ ἐρώτηση ἔχει τελειώσει καὶ ἀποφασιστεῖ»</h2>
<p>Τὸν Μάρτιο τοῦ 2008, ὁ Ἤμαξ μετέβαινε ἀπὸ CVS (ναί, CVS) σὲ κάτι πιὸ
«μοντέρνο».  Οἱ δύο διεκδικητὲς ἦταν τὸ Git καὶ τὸ Bazaar.</p>
<ul>
<li>Git, δημιουργημένο ἀπὸ τὸν Linus Torvalds γιὰ τὸν πυρήνα Linux.</li>
<li>Τὸ Bazaar ἦταν ἔργο GNU, <em>συντηρούμενο ἀπὸ τὴν Canonical</em></li>
</ul>
<p>Ξέσπασε νῆμα 236 μηνυμάτων στὴν emacs-devel.  Ὁ κόσμος ἔκανε μετρήσεις ἐπιδόσεων
καὶ στὰ δύο ἐργαλεῖα.  Τὰ ἀποτελέσματα ἦταν κραυγαλέα.  Ὁ <a href="https://yhetil.org/emacs-devel/jeprtyalxt.fsf@sykes.suse.de/">Andreas Schwab</a>,
ἕνας ἀπὸ τοὺς βασικοὺς προγραμματιστές, ἀνέφερε τὴν πρώτη του ἐντύπωση:</p>
<blockquote>
<p>My first impression is that bzr is slow, so slow that it is completely
unusable.  How can it come that a simple bzr log takes more than a
minute to even start?  Even cvs log is instantaneous in comparison,
although it has to request the log from the server.</p>
</blockquote>
<p>Ὁ David Kastrup τὸ βρῆκε ἐξίσου αἰνιγματικό:</p>
<blockquote>
<p>I find this surprising: &ldquo;git log&rdquo; is pretty much instantaneous, and
git recalculates a code piece&rsquo;s history in the process.  In contrast,
one has to tell Bazaar when one copies or moves or renames files, so
it should have the information available right away.</p>
</blockquote>
<p>Οἱ πραγματικοὶ ἀριθμοί:</p>
<ul>
<li><code>git log | head -1</code> 0.012 δευτερόλεπτα.  Ἡ ἴδια ἐντολὴ μὲ Bazaar πῆρε 21.5 δευτερόλεπτα.</li>
<li>Καταχώριση ἀλλαγῆς ἑνὸς ἀρχείου: 0.08 δευτερόλεπτα μὲ Git, 17 δευτερόλεπτα μὲ Bazaar.</li>
</ul>
<p>Οἱ μετρήσεις ἐπιδόσεων συνέχιζαν νὰ ἔρχονται.  Ὁ <a href="https://yhetil.org/emacs-devel/jwvod9cq7av.fsf-monnier&#43;emacs@gnu.org/">Stefan Monnier</a>, ὁ κύριος
συντηρητής, ἔβαλε χαμηλὰ τὸν πῆχυ:</p>
<blockquote>
<p>I don&rsquo;t care if Bzr is slower or faster than Git, but in
order to switch to Bzr, we need it to be &lsquo;fast enough&rsquo;.  Currently it
is not.  At the very least the &lsquo;bzr diff&rsquo; should not take more than a
couple seconds.</p>
</blockquote>
<p>Ἐν τῷ μεταξύ, ὁ <a href="https://yhetil.org/emacs-devel/d06a5cd30803122130h4dedcfbdx2cf5dda7ebd507ee@mail.gmail.com/">Jonathan Lange</a>, πραγματικὸς προγραμματιστὴς Bazaar ἀπὸ τὴν
Canonical, ἦταν στὸ νῆμα κάνοντας τεχνικὴ ὑποστήριξη.</p>
<p>Ἡ προτεινόμενη ροὴ ἐργασίας του γιὰ τὴν ἀρχικὴ λήψη τοῦ ἀντιγράφου ἐργασίας:</p>
<blockquote>
<p>An even better way to do the initial download is this:</p>
<p>$ wget <a href="http://bzr.notengoamigos.org/emacs.tar.gz">http://bzr.notengoamigos.org/emacs.tar.gz</a></p>
<p>$ tar xzf emacs.tar.gz</p>
<p>$ bzr init-repo emacs-bzr</p>
<p>$ cd emacs-bzr</p>
<p>$ bzr branch ../emacs trunk</p>
<p>$ cd trunk</p>
<p>$ bzr pull &ndash;remember <a href="http://bzr.notengoamigos.org/emacs/trunk/">http://bzr.notengoamigos.org/emacs/trunk/</a></p>
</blockquote>
<p>Σύγκρινέ το μὲ <code>git clone</code>!</p>
<p>Κάποιος στὸ νῆμα τελικὰ ρώτησε τὸ προφανές:</p>
<blockquote>
<p>To the emacs maintainers and decision makers: What more information is
required to convince bzr is not the right tool at the present moment?</p>
</blockquote>
<p>Ἡ ἀπάντηση τοῦ Richard Stallman:</p>
<blockquote>
<p>This decision is not a decision for the present moment.  It is a long
term decision.  So it would be better to wait a few months while Bzr
developers improve it, than to make some other &ldquo;temporary&rdquo; decision
that would probably be hard to reverse.</p>
</blockquote>
<p>Καὶ σὲ περίπτωση ποὺ κάποιος ἔχασε τὸ νόημα, σὲ <a href="https://yhetil.org/emacs-devel/E1JbhT2-0003HR-PP@fencepost.gnu.org/">ξεχωριστὸ μήνυμα</a>:</p>
<blockquote>
<p>This question is over and decided.
We will use GNU Bzr, because it is a GNU package.</p>
</blockquote>
<p>Ὅταν κάποιος ἐπεσήμανε ὅτι αὐτὴ ἡ πολιτικὴ ἀπόφαση «σάρωνε ὅλα τὰ
τεχνικὰ ἐπιχειρήματα», ὁ RMS <a href="https://yhetil.org/emacs-devel/E1JfqPy-00030x-I0@fencepost.gnu.org/">ἀπάντησε</a>:</p>
<blockquote>
<p>The rule that GNU packages should support each other helps make the
GNU system as a whole work better.</p>
</blockquote>
<p>Κάποιος ρώτησε τὴν προφανῆ συνέχεια: «Γιατί ἁπλῶς δὲν κάνουμε τὸ Git μέρος
τοῦ συστήματος GNU;»</p>
<p>RMS:</p>
<blockquote>
<p>We could include it in the GNU system, but
its developers are not likely to want to make it a GNU package.</p>
</blockquote>
<p>236 μηνύματα, μετρήσεις καὶ ἕνας προγραμματιστὴς τῆς Canonical νὰ κάνει
τεχνικὴ ὑποστήριξη δὲν ἄλλαξαν τίποτα.  Ἡ ἀπόφαση ἦταν πολιτικὴ καὶ
εἶχε ἤδη παρθεῖ.</p>
<h2 id="2008-2012-τὰ-μακροχρόνια-ἐπακόλουθα">2008-2012: Τὰ μακροχρόνια ἐπακόλουθα</h2>
<p>Ὁ ὑπόλοιπος κόσμος πέρασε στὸ Git.  Τὸ GitHub ξεκίνησε τὸ 2008 καὶ
ἐγνώρισε ἐκρηκτικὴ ἀνάπτυξη.  Οἱ συνεισφέροντες τοῦ Ἤμαξ, ἐν τῷ μεταξύ, ἔπρεπε νὰ μάθουν
Bazaar, ἕνα ἐργαλεῖο ποὺ δὲν χρησιμοποιοῦσαν πουθενὰ ἀλλοῦ, ἁπλῶς γιὰ νὰ
ὑποβάλουν διορθώσεις.</p>
<p>Νήματα ὅπως «Help me unstick my bzr, please» καὶ «Can NOT bzr the
emacs repos (may be bzr has a memory leak)» ἔγιναν τακτικὰ
φαινόμενα.</p>
<p><strong>Ἔπειτα τὸ 2012, ἡ Canonical ἀπέλυσε τὴν ὁμάδα ἀνάπτυξης τοῦ Bazaar.</strong></p>
<h2 id="2013">2013</h2>
<p>Τὸν Μάρτιο τοῦ 2013, ἕναν χρόνο μετὰ τὴ διακοπὴ ἀνάπτυξης τοῦ Bazaar, ὁ
<a href="https://yhetil.org/emacs-devel/m2620euf2l.fsf@newartisans.com/T/#u">John Wiegley
δημοσίευσε</a> αὐτὸ ποὺ ὅλοι ἤθελαν νὰ ποῦν:</p>
<blockquote>
<p>We have often debated the merits of Git vs. Bazaar, and which one the
GNU project should use for Emacs development.  I think now is an
appropriate time to revisit this decision.</p>
<p>My main reason for bringing this up again is that Bazaar development
has effectively stalled.  There are major bugs which have been in their
bug-tracker for years now &ndash; bugs affecting Emacs development, such as
the ELPA repository &ndash; which have been ignored all this time.</p>
<p>So, to Richard as the undisputed Czar of all things Emacs: can we now,
pretty please, switch to Git?</p>
</blockquote>
<p>Ἀκολούθησαν 200 μηνύματα.</p>
<p>Ἡ πρώτη ἀπάντηση τοῦ RMS:</p>
<blockquote>
<p>The maintainer says he is fixing some bugs, and
I asked him just yesterday to fix the ELPA branch bug. I&rsquo;d like to
give him a reasonable time to do this.</p>
</blockquote>
<p>Τὸ σφάλμα ἦταν 1.5 ἐτῶν.  Ὁ <a href="https://yhetil.org/emacs-devel/87hajxqlly.fsf@yandex.ru/">Dmitry Gutov τὸ ἐπεσήμανε</a>:</p>
<blockquote>
<p>Isn&rsquo;t this a bit late? The bug is 1.5 years old.  Was he not aware of it before?</p>
</blockquote>
<p>Ἔπειτα ὁ RMS <a href="https://yhetil.org/emacs-devel/E1UKtwC-0006bM-Dd@fencepost.gnu.org/">ἔδειξε τὰ χαρτιά του</a>:</p>
<blockquote>
<p>I am trying to determine whether Bzr is effectively maintained or
not.  I&rsquo;d rather get a Yes answer than a No answer.</p>
</blockquote>
<p>Τουλάχιστον εἰλικρινής.</p>
<p>Ὁ <a href="https://yhetil.org/emacs-devel/m3txnwj6zm.fsf@chopper.vpn.verona.se/">Joakim Verona</a>, μακροχρόνιος χρήστης Bazaar καὶ συνεισφέρων Ἤμαξ, περιέγραψε
τὴν πραγματικὴ κατάσταση:</p>
<blockquote>
<p>I have done my best to be a constructive user of the tool, and I have
had many technical difficulties.  When I try to find solutions to the
issues I notice the following:</p>
<ul>
<li>The bzr community is very helpful. This is good.</li>
<li>There are many well known bugs. There are also many well known
patches for these, some of them provided by Emacs developers. They
never enter upstream. By &ldquo;never&rdquo; I mean years. This is bad.</li>
</ul>
</blockquote>
<p>Ὁ <a href="https://yhetil.org/emacs-devel/E1UL4KW-0002zx-Jj@fencepost.gnu.org/">RMS ἀπάντησε</a>:</p>
<blockquote>
<p>I don&rsquo;t have time to read the Bzr mailing list. Or any development
mailing list.  The only such list I am on is this one.  You might as
well tell me to fly to the moon as tell me to read something on the
Bzr list.</p>
</blockquote>
<p>Καὶ ὅταν ρωτήθηκε ἂν οἱ χρήστες τοῦ Bazaar θὰ ἔπρεπε νὰ ἔχουν λόγο στὸ
ἂν τὸ Bazaar συντηρεῖται ἐπαρκῶς:</p>
<blockquote>
<p>When I have to decide whether a maintainer is doing an adequate job or
needs to be replaced, I pay attention to whatever relevant information
I get.  However, to give users &ldquo;a say&rdquo; in the decision seems improper,
so I don&rsquo;t do that.</p>
</blockquote>
<p>Ὁ Karl Fogel, βετεράνος προγραμματιστὴς ἀνοιχτοῦ κώδικα (συγγραφέας τοῦ
<a href="https://producingoss.com/">Producing Open
Source Software</a> καὶ ἕνας ἀπὸ τοὺς ἀρχικοὺς προγραμματιστὲς τοῦ Subversion),
ἔδωσε τὴν ὀξύτερη κριτικὴ στὸ νῆμα:</p>
<blockquote>
<p>Well, really, you don&rsquo;t have time to pay close enough attention to Bzr
development to competently decide whether it&rsquo;s still a good choice for
Emacs.  That&rsquo;s fine &ndash; no one has time to do every important thing,
and you do many other important things.</p>
<p>But then why do you think you still have the time &amp; mental bandwidth
to make this decision well?  Why not delegate it to the Emacs
maintainers on the grounds that you no longer have time to do a good
job of this evaluation?</p>
</blockquote>
<p>Ἐπεσήμανε ὅτι τὸ νὰ ρωτᾶς ἕναν ἄνθρωπο γιὰ ἕνα σφάλμα δὲν ἀποτελεῖ ἀξιόπιστο δείκτη
τῆς ὑγείας ἑνὸς ἔργου, καὶ ὅτι ἄλλοι στὸ νῆμα εἶχαν ἤδη κάνει πιὸ
διεξοδικὴ ἔρευνα ἀπὸ ὅση μποροῦσε ὁ RMS, δεδομένων τῶν χρονικῶν του
περιορισμῶν.</p>
<p>Ἡ ἀπάντηση τοῦ RMS:</p>
<blockquote>
<p>Because more than Emacs is at stake here.</p>
</blockquote>
<p>Ὁ Karl πίεσε ἄλλη μία φορά:</p>
<blockquote>
<p>You should either devote enough time to evaluating Bzr&rsquo;s maintenance
state to get a reliable answer, or delegate to someone who can do
so.  Instead, you&rsquo;re asking the maintainers to rely on your
investigation&hellip; yet you clearly don&rsquo;t have time to do a good
job.  This is a poor use of everyone&rsquo;s time.</p>
</blockquote>
<p>RMS:</p>
<blockquote>
<p>I already have a plan for how to proceed on this, and I am doing it.</p>
</blockquote>
<p>Χωρὶς λεπτομέρειες, χωρὶς χρονοδιάγραμμα.  Ἐμπιστευτεῖτε με.</p>
<p>Ἐν τῷ μεταξύ, ὁ Stefan Monnier δημοσίευσε ἀκριβῶς ἕνα οὐσιῶδες μήνυμα σὲ
ὅλο τὸ νῆμα τῶν 200 μηνυμάτων:</p>
<blockquote>
<p>Just like I didn&rsquo;t fight Richard&rsquo;s choice of Bazaar, I don&rsquo;t care very
much whether we keep using Bazaar or we change to Git, Monotone,
Darcs, Mercurial, OpenCM, Fossil, younameit.</p>
<p>The only thing I care for now is to move away from Bazaar for the
&rsquo;elpa&rsquo; branch because Bazaar can&rsquo;t handle it properly.</p>
</blockquote>
<p>Ὁ Leo Liu συνόψισε αὐτὸ ποὺ σκέφτονταν ὅλοι:</p>
<blockquote>
<p>Most GNU projects aren&rsquo;t using BZR as you might be aware.</p>
<p>While helping BZR fixing bugs might be a gain for BZR, it is a loss as
a whole for GNU.  Volunteers spend their spare time on GNU projects
and if 20% of that time is taken up by wrestling with BZR, it becomes
costly to the point discouraging people from joining.</p>
<p>For the greater good of GNU, move off BZR seems like the only sound
choice.</p>
</blockquote>
<p>Τὸ νῆμα τελείωσε χωρὶς ἀπόφαση.  Ὁ RMS εἶχε σχέδιο καὶ δούλευε πάνω
του.</p>
<h2 id="2013-ὁ-κλάδος-elpa-παύει-νὰ-λειτουργεῖ">2013: Ὁ κλάδος ELPA παύει νὰ λειτουργεῖ</h2>
<p>Ἀργότερα ἐκείνη τὴ χρονιά, ὁ Stefan ἔκανε τὴν πρακτικὴ κίνηση ποὺ ἔθεσε
τὸ σκηνικὸ γιὰ ὅλα ὅσα ἀκολούθησαν.  Ὁ κλάδος ELPA δὲν λειτουργοῦσε στὸ
Bazaar, ἐξαιτίας σφάλματος ποὺ προκαλοῦσε κατάρρευση κατὰ τὴ λήψη τοῦ ἀντιγράφου ἐργασίας, χωρὶς νὰ ἔχει μείνει κανείς νὰ τὸ
διορθώσει.  Ὁ Stefan τὸ μετακίνησε στὸ Git:</p>
<blockquote>
<p>I&rsquo;m not terribly happy about this change, since it means we&rsquo;ll be
using two different tools (Git for &rsquo;elpa&rsquo; and Bzr for &rsquo;trunk&rsquo;), but I
really see no other way out.</p>
<p>I don&rsquo;t want this to be a discussion about the merits/pitfalls of Git
vs Bzr, and this is not an occasion to discuss the use of Git for the
&rsquo;trunk&rsquo; either.</p>
</blockquote>
<p>Ὅλοι σκέφτονταν «ἂν τὸ Git εἶναι ἀρκετὰ καλὸ γιὰ ELPA, γιατί ὄχι γιὰ
trunk;», κι ἐκεῖνος τὸ ἔκοψε πρὶν κἂν ἀρχίσει.</p>
<h2 id="2014-ὁ-esr-πατάει-τὸ-κουμπί">2014: Ὁ ESR πατάει τὸ κουμπί</h2>
<p>Μέχρι τὸν Αὔγουστο τοῦ 2014, ὁ Eric S. Raymond εἶχε ἕτοιμα τὰ σενάρια
μετατροπῆς.</p>
<p>Εἶχε <a href="https://yhetil.org/emacs-devel/20140810205631.GA17907@thyrsus.com/">δουλέψει ἥσυχα</a>:</p>
<blockquote>
<p>You haven&rsquo;t heard much about it because the hard work is all done. I
have the scripts ready to go and need only about eight hours&rsquo; notice
before pushing the button.</p>
</blockquote>
<p>Ἡ πραγματικὴ μετάβαση ἔγινε τὸν Νοέμβριο τοῦ 2014. Στὶς 13 Νοεμβρίου, ὁ ESR
δημοσίευσε ἕνα <a href="https://yhetil.org/emacs-devel/20141113031255.GA21938@thyrsus.com/">μήνυμα ἕξι λέξεων</a>:</p>
<blockquote>
<p>Commits are open.  Have at it.</p>
</blockquote>
<p>Τὸ ὁποῖο κάποιοι μάλιστα χαρακτήρισαν <a href="https://yhetil.org/emacs-devel/8761ej6ql7.fsf@ktab.red-bean.com/">ἡρωικό</a>.</p>
<p>Ἕξι χρόνια καβγά, καὶ τελείωσε μὲ ἕξι λέξεις.</p>
<h2 id="τὰ-ἐπακόλουθα">Τὰ ἐπακόλουθα</h2>
<p>Οἱ μέρες μετὰ τὴ μετάβαση ἦταν ἐκπαιδευτικές.  Οἱ μισοὶ ἀπὸ τοὺς βασικοὺς
συνεισφέροντες δὲν εἶχαν ποτὲ χρησιμοποιήσει Git:</p>
<ul>
<li>«<a href="https://yhetil.org/emacs-devel/m3sihnf5jy.fsf@stories.gnus.org/">This Is The Git Help Mailing List</a>»</li>
<li>«git pull fails with merge conflicts.  How can this possibly happen?»</li>
<li>«A simple git workflow for the rest of us»</li>
<li>«need help adjusting workflow to git»</li>
<li>«Good book on Git»</li>
<li>«Obscure error/warning/information message from git pull» (124 μηνύματα)</li>
</ul>
<p>Βασικοὶ προγραμματιστὲς τοῦ Ἤμαξ νὰ κάνουν βασικὲς ἐρωτήσεις γιὰ τὸ
Git, ἐπειδὴ εἶχαν περάσει ἕξι χρόνια στὸ Bazaar ἐνῶ ὅλοι οἱ ἄλλοι
προχωροῦσαν.</p>
<p>Τί bzr σάγκα!  Ὁπωσδήποτε καλύτερη ἀπὸ ὁποιαδήποτε ταινία θὰ μποροῦσα νὰ
εἶχα δεῖ ἀπόψε.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Gnosis 0.10: Εἰσαγωγὴ Anki, συγχώνευση τῶν πάντων σὲ ἕνα</title>
      <link>https://thanosapollo.org/el/posts/gnosis-8-to-10/</link>
      <pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-8-to-10/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Μπορεῖς πλέον νὰ εἰσάγεις decks Anki στὸ gnosis.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ὁλόκληρο τὸ οἰκοσύστημα Anki, χιλιάδες decks συντηρούμενα ἀπὸ τὴν
κοινότητα σὲ κάθε ἀντικείμενο, εἶναι προσβάσιμο ἀπὸ τὸν Ἤμαξ.  Μπορῶ
ἐπιτέλους νὰ παρακολουθῶ τὶς ἀλλαγὲς τοῦ deck &lt;a href=&#34;https://www.ankihub.net/step-deck&#34;&gt;AnKing&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ἂν δὲν μπορεῖς νὰ τοὺς νικήσεις, εἰσάγε τους.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <content:encoded><![CDATA[<p><strong>Μπορεῖς πλέον νὰ εἰσάγεις decks Anki στὸ gnosis.</strong></p>
<p>Ὁλόκληρο τὸ οἰκοσύστημα Anki, χιλιάδες decks συντηρούμενα ἀπὸ τὴν
κοινότητα σὲ κάθε ἀντικείμενο, εἶναι προσβάσιμο ἀπὸ τὸν Ἤμαξ.  Μπορῶ
ἐπιτέλους νὰ παρακολουθῶ τὶς ἀλλαγὲς τοῦ deck <a href="https://www.ankihub.net/step-deck">AnKing</a>.</p>
<blockquote>
<p><em>Ἂν δὲν μπορεῖς νὰ τοὺς νικήσεις, εἰσάγε τους.</em></p>
</blockquote>
<h2 id="εἰσαγωγὴ-anki">Εἰσαγωγὴ Anki</h2>
<p>Τὸ <code>gnosis-anki-import</code> διαβάζει ἀρχεῖα <code>.apkg</code> καὶ τὰ μετατρέπει σὲ
themata gnosis.  Ἐπιλύει τὰ πρότυπα τύπων σημειώσεων Anki γιὰ νὰ
ἐξαγάγει ζεύγη ἐρώτησης/ἀπάντησης, κανονικοποιεῖ ἐτικέτες καὶ
ἀφαιρεῖ ἐτικέτες συστήματος Anki ὅπως <code>marked</code> καὶ <code>leech</code>.</p>
<p>Ἡ ἐπανεισαγωγὴ τοῦ ἴδιου deck εἶναι ἀσφαλής.  Κάθε εἰσαγόμενη
σημείωση κρατᾶ τὸ Anki GUID της, ὥστε τὸ gnosis νὰ ἀνιχνεύει
διπλότυπα καὶ νὰ τὰ παραλείπει.  Ὅταν τὸ AnKing δημοσιεύει ἐνημέρωση,
ἁπλῶς ξαναεισάγω καὶ μπαίνουν μόνο οἱ νέες σημειώσεις.</p>
<blockquote>
<p><em>Δεκάδες χιλιάδες σημειώσεις &amp; themata, διαχειριζόμενα ἀπὸ κειμενοεπεξεργαστή.</em>
<em>Ὅπως πρέπει.</em></p>
</blockquote>
<h2 id="ἕνα-πακέτο-μία-βάση-δεδομένων">Ἕνα πακέτο, μία βάση δεδομένων</h2>
<p>Τὸ <code>org-gnosis</code> συγχωνεύτηκε στὸ gnosis.  Ἡ συντήρηση δύο πακέτων μὲ
δύο βάσεις γιὰ ὅ,τι οὐσιαστικὰ εἶναι ἕνα σύστημα ἦταν, ἐκ τῶν
ὑστέρων, πρᾶξη γραφειοκρατικῆς αὐτοτιμωρίας.  Κόμβοι, ἡμερολόγιο καὶ
themata μοιράζονται πλέον ἕνα μόνο <code>gnosis.db</code>.  Ἡ μεταφορὰ δεδομένων
εἰσάγει αὐτόματα τὰ ὑπάρχοντα δεδομένα org-gnosis.</p>
<h2 id="ἐξαγωγὴ-καὶ-εἰσαγωγή">Ἐξαγωγὴ καὶ εἰσαγωγή</h2>
<p>Ἡ παλιὰ μορφὴ ἐξαγωγῆς ἀρχείων org ἔφυγε.  Οἱ ἐξαγωγὲς εἶναι πλέον
βάσεις SQLite <code>.gnosis</code>.  Ἡ εἰσαγωγὴ δείχνει buffer διαφορῶν μὲ ἐγγραφὲς
NEW καὶ CHANGED πρὶν τὴν ἐφαρμογή, ὥστε νὰ βλέπεις ἀκριβῶς τί θὰ
ἀλλάξει πρὶν τὴν ὁριστικὴ ἐφαρμογή.</p>
<p>Συνδυασμένο μὲ παρακολούθηση GUID, αὐτὸ κάνει τὶς συλλογὲς gnosis
συντηρήσιμες στὸν χρόνο ἀντὶ γιὰ εἰσαγωγὲς μίας φοράς.  Μοιράσου ἕνα
deck μὲ φίλο, τὸ τροποποιεῖ, τὸ ξαναεισάγεις.  Χωρὶς ἀπώλεια
δεδομένων, χωρὶς διπλότυπα.</p>
<h2 id="ἄλλα">Ἄλλα</h2>
<ul>
<li>Τὰ decks ἀφαιρέθηκαν.  Ἦταν περιορισμός, ὄχι δυνατότητα.  Τὰ
ὑπάρχοντα ὀνόματα decks μετατράπηκαν σὲ ἐτικέτες.</li>
<li>Ἀπαλείφθηκαν N+1 ἐρωτήματα σὲ ὅλο τὸν κώδικα.</li>
<li>Ἡ ἀπόδοση τοῦ πίνακα ἐλέγχου εἶναι 3-4× ταχύτερη μέσω προσαρμοσμένης
μονάδας <code>gnosis-tl</code>.</li>
<li>Οἱ ἡμερομηνίες ἐπανάληψης ἀποθηκεύονται ὡς ἀκέραιοι· τὰ ἐρωτήματα γιὰ σημειώσεις πρὸς ἐπανάληψη/ἐκπρόθεσμες
σημειώσεις τρέχουν σὲ SQL.</li>
<li>Οἱ πράξεις Git εἶναι πλήρως ἀσύγχρονες.</li>
<li>Ἡ ἀποθήκευση ἀρχείων <code>.org.gpg</code> δὲν πυροδοτεῖ πλέον περιττὴ
ἀποκρυπτογράφηση.</li>
<li>Τὸ διάστημα μετὰ ἀπὸ ἀποτυχία περιορίζεται στὶς 7 ἡμέρες.</li>
<li>Ἡ τυχαία διακύμανση διαστήματος ἀποτρέπει συστάδες ἐπαναλήψεων.</li>
<li>Μαζικὲς πράξεις ἐτικετῶν: μετονομασία, μετονομασία μὲ κανονικὲς ἐκφράσεις,
συγχώνευση διπλοτύπων πεζῶν/κεφαλαίων.</li>
<li>Ἀφαιρέθηκε τὸ emacsql ὑπὲρ τοῦ ἐνσωματωμένου sqlite.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Ἐπαναφέροντας τὸ jabber.el ἀπὸ τοὺς νεκρούς</title>
      <link>https://thanosapollo.org/el/posts/emacs-jabber-revival/</link>
      <pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/emacs-jabber-revival/</guid>
      <description>&lt;p&gt;Τὸ &lt;a href=&#34;https://xmpp.org/software/jabber-el/&#34;&gt;jabber.el&lt;/a&gt; εἶναι πελάτης XMPP γιὰ Ἤμαξ, γραμμένος ἀρχικὰ τὸ 2003.
Ἡ ἀνάπτυξη ἐπιβραδύνθηκε μὲ τὰ χρόνια, ἂν καὶ συνεισφέροντες κρατοῦσαν
τὸ πακέτο σὲ λειτουργία σὲ διαδοχικὲς ἐκδόσεις Ἤμαξ.&lt;/p&gt;
&lt;p&gt;Ἀνέλαβα ὡς συντηρητὴς μὲ στόχο τὸν ἐκσυγχρονισμὸ τῆς ὑποστήριξης
πρωτοκόλλου.&lt;/p&gt;
&lt;p&gt;Τώρα, τὸ jabber.el εἶναι &lt;strong&gt;ὁ πιὸ XEP-πλήρης κειμενικὸς πελάτης&lt;/strong&gt; ποὺ
ὑπάρχει.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Τὸ <a href="https://xmpp.org/software/jabber-el/">jabber.el</a> εἶναι πελάτης XMPP γιὰ Ἤμαξ, γραμμένος ἀρχικὰ τὸ 2003.
Ἡ ἀνάπτυξη ἐπιβραδύνθηκε μὲ τὰ χρόνια, ἂν καὶ συνεισφέροντες κρατοῦσαν
τὸ πακέτο σὲ λειτουργία σὲ διαδοχικὲς ἐκδόσεις Ἤμαξ.</p>
<p>Ἀνέλαβα ὡς συντηρητὴς μὲ στόχο τὸν ἐκσυγχρονισμὸ τῆς ὑποστήριξης
πρωτοκόλλου.</p>
<p>Τώρα, τὸ jabber.el εἶναι <strong>ὁ πιὸ XEP-πλήρης κειμενικὸς πελάτης</strong> ποὺ
ὑπάρχει.</p>
<h2 id="τί-ἄλλαξε">Τί ἄλλαξε</h2>
<p>Γιὰ ἐκείνους, ὅπως ἐγώ, ποὺ μετρᾶνε XEP σὰν Pokémon:</p>
<blockquote>
<ul>
<li><strong>Κρυπτογράφηση OMEMO</strong> (XEP-0384) μέσω δυναμικῆς μονάδας C ποὺ
παρέχει διεπαφὴ πρὸς τὸ <a href="https://codeberg.org/picomemo/picomemo">picomemo</a></li>
<li><strong>Κοινὴ χρήση πολυμέσων OMEMO</strong> (XEP-0454)</li>
<li><strong>OpenPGP γιὰ XMPP</strong> (XEP-0373) μὲ τὸ ἐνσωματωμένο EPG τοῦ Ἤμαξ</li>
<li><strong>Stream Management</strong> (XEP-0198) μὲ συνέχιση συνεδρίας</li>
<li><strong>Message Archive Management</strong> (XEP-0313)</li>
<li><strong>Message Carbons</strong> (XEP-0280)</li>
<li><strong>Delivery Receipts</strong> (XEP-0184) καὶ <strong>Chat Markers</strong> (XEP-0333)</li>
<li><strong>Message Correction</strong> (XEP-0308), <strong>Replies</strong> (XEP-0461), <strong>Moderation</strong> (XEP-0424/0425)</li>
<li><strong>Chat State Notifications</strong> (XEP-0085)</li>
<li><strong>Client State Indication</strong> (XEP-0352)</li>
<li><strong>Blocking Command</strong> (XEP-0191)</li>
<li><strong>HTTP File Upload</strong> (XEP-0363)</li>
<li><strong>Direct TLS</strong> (XEP-0368) μὲ διπλὴ ἀναζήτηση SRV</li>
<li><strong>Real Time Text</strong> (XEP-0301)</li>
<li><strong>PubSub</strong> (XEP-0060)</li>
<li><strong>Bookmarks</strong> (XEP-0402 μὲ ἐφεδρικὸ XEP-0048)</li>
<li><strong>Ἀποθήκευση μηνυμάτων SQLite</strong> ἀντὶ ἱστορικοῦ σὲ ἀρχεῖα</li>
<li><strong>MUC Self-Ping</strong> (XEP-0410)</li>
</ul>
</blockquote>
<p><em>Σχεδὸν τὰ πιάσαμε ὅλα</em></p>
<p>Κανένας ἄλλος κειμενικὸς πελάτης XMPP δὲν ἔχει αὐτὸ τὸ ἐπίπεδο κάλυψης
πρωτοκόλλου.  Τὸ jabber.el τώρα συναγωνίζεται τὰ Dino καὶ Gajim, τοὺς
κύριους γραφικοὺς πελάτες.</p>
<h2 id="omemo">OMEMO</h2>
<p>Τὸ OMEMO ἀπαιτεῖ ὑλοποίηση Signal Protocol.  Αὐτὸ σημαίνει C.</p>
<p>Τὸ <code>jabber-omemo-core.c</code> εἶναι 763 γραμμὲς ποὺ διασυνδέουν τὸ
<a href="https://github.com/mierenhoop/picomemo">picomemo</a> μὲ τὸ API δυναμικῶν
μονάδων τοῦ Ἤμαξ.  Τὸ στρῶμα Elisp χειρίζεται τὴν ἐνσωμάτωση XMPP:
δημοσίευση bundle PubSub, κρυπτογράφηση stanza, διατήρηση συνεδρίας σὲ
SQLite, καὶ διαχείριση ἐμπιστοσύνης.</p>
<p>Παρέχει ἐπίσης AES-256-GCM γιὰ κοινὴ χρήση πολυμέσων OMEMO
(<a href="https://xmpp.org/extensions/xep-0454.html">XEP-0454</a>).</p>
<h2 id="γιατί-ἤμαξ">Γιατί Ἤμαξ</h2>
<p>Ὁ Ἤμαξ δὲν εἶναι ἁπλῶς ὁ ἐπεξεργαστὴς κειμένου στὸν ὁποῖο γράφω τὸ jabber.el.
Εἶναι τὸ περιβάλλον ἐκτέλεσης, τὸ πλαίσιο δοκιμῶν, καὶ ἡ ἐφαρμογή.</p>
<p>Ἀναπτύσσω στὸ ἴδιο περιβάλλον ὅπου συνομιλῶ.  Διορθώνω σφάλματα, ἐκτελῶ
τὶς ἀλλαγές, καὶ ἡ διόρθωση ἐφαρμόζεται ἀμέσως στὴν τρέχουσα συνεδρία μου.
Δευτερόλεπτα, ὄχι λεπτά.</p>
<p>Ὁ Ἤμαξ παρέχει τὰ περισσότερα ἀπὸ ὅσα χρειάζεται ἕνας πελάτης συνομιλίας
ἐξ ἀρχῆς: SQLite γιὰ ἀποθήκευση, GnuTLS γιὰ κρυπτογράφηση, EPG
γιὰ OpenPGP, EWOC γιὰ ἐμφάνιση λιστῶν, Transient γιὰ μενού.</p>
<p>Ἡ διανομὴ γίνεται μέσω <a href="https://elpa.nongnu.org/nongnu/jabber.html">NonGNU ELPA</a>, ποὺ χειρίζεται τὰ πάντα.</p>
<p>Τὸ <code>jabber.el</code> ἐγκαθίσταται ἁπλῶς μὲ <code>M-x package-install RET jabber RET</code>.</p>
<h2 id="γιατί-xmpp">Γιατί XMPP</h2>
<p>Τὸ XMPP εἶναι τὸ μόνο ὁμοσπονδιακό, ἀνοιχτὸ πρότυπο πρωτόκολλο μηνυμάτων
ποὺ λειτουργεῖ <strong>στὴν πράξη</strong>.  Τὸ χρησιμοποιῶ γιὰ ὅλη τὴν καθημερινή μου
ἐπικοινωνία.  Οἱ φίλοι μου εἶναι σὲ WhatsApp, Discord καὶ IRC — πύλες
(gateways) γεφυρώνουν αὐτὰ τὰ δίκτυα διαφανῶς.</p>
<p><strong>Ἕνας πελάτης, μία διεπαφή, κάθε δίκτυο συνομιλίας ποὺ χρειάζομαι.</strong></p>
<blockquote>
<p>Περισσότερα γιὰ τὴ διάταξη πυλῶν ποὺ χρησιμοποιῶ σὲ μελλοντικὸ ἄρθρο.</p>
</blockquote>
<h2 id="τί-ἀκολουθεῖ">Τί ἀκολουθεῖ</h2>
<ul>
<li><strong>XEP-0444 Message Reactions</strong></li>
<li><strong>OMEMO 0.8+</strong> (τὸ picomemo ὑποστηρίζει καὶ τὰ δύο· τὸ στρῶμα C εἶναι ἕτοιμο)</li>
<li><strong>Ἀναδιάρθρωση roster</strong> — ἐπίπεδη, βασισμένη σὲ ἐρωτήματα λίστα ἐπαφῶν ταξινομημένη
κατὰ δραστηριότητα</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Γνῶσις: λάθη σχεδίασης</title>
      <link>https://thanosapollo.org/el/posts/gnosis-packages-merge/</link>
      <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-packages-merge/</guid>
      <description>&lt;p&gt;Ὅσο περισσότερο χρησιμοποιῶ τὴ gnosis, τόσο περισσότερο παρατηρῶ σφάλματα
σχεδίασης ποὺ κληρονομήθηκαν ἀπὸ τὸ λογισμικὸ ποὺ χρησιμοποιοῦσα προηγουμένως.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ὅσο περισσότερο χρησιμοποιῶ τὴ gnosis, τόσο περισσότερο παρατηρῶ σφάλματα
σχεδίασης ποὺ κληρονομήθηκαν ἀπὸ τὸ λογισμικὸ ποὺ χρησιμοποιοῦσα προηγουμένως.</p>
<h2 id="χρήση-decks-γιὰ-themata--κάρτες-ἐρωτήσεις">Χρήση decks γιὰ themata (κάρτες/ἐρωτήσεις)</h2>
<blockquote>
<p>Τὰ decks θὰ ἀφαιρεθοῦν.</p>
</blockquote>
<p>Παρόμοια μὲ τὸ Anki, τὰ decks παρείχαν περιορισμὸ, ὄχι χαρακτηριστικό.  Ἕνα
thema μπορεῖ νὰ ἀνήκει μόνο σὲ ἕνα deck, <em>πολλὰ-πρὸς-ἕνα</em>, ἐνῶ οἱ ἐτικέτες
εἶναι <em>πολλὰ-πρὸς-πολλά</em>.</p>
<p>Τὰ themata στὴ gnosis ὀργανώνονται ἤδη βάσει <code>tags</code> καὶ μπορεῖς νὰ
προσαρμόσεις τὸν ἀλγόριθμο ἐπανάληψης ἀνὰ ἐτικέτα μὲ τὸ
<code>gnosis-algorithm-custom-values</code>.</p>
<p>Οἱ ἐξαγωγὲς γιὰ «συλλογές» θὰ βασίζονται πλέον σὲ ἐτικέτες.  Σχεδιάζω νὰ
προσθέσω φίλτρα ἐτικετῶν γιὰ ἐξαγωγές, π.χ. <code>+anatomy -clinical</code> γιὰ ἐξαγωγὴ
ὅλων τῶν themata μὲ ἐτικέτα anatomy, ἀποκλείοντας clinical.</p>
<h2 id="διαχωρισμὸς-gnosis-ἀπὸ-org-gnosis-καὶ-org-gnosis-ui">Διαχωρισμὸς gnosis ἀπὸ org-gnosis καὶ org-gnosis-ui</h2>
<blockquote>
<p>Τὸ <code>org-gnosis</code> θὰ συγχωνευθεῖ στὸ <code>gnosis</code>, μὲ μία ἑνιαία
βάση δεδομένων.</p>
</blockquote>
<p>Ἡ ἰδέα ἦταν νὰ ὑπάρχει ἕνα ἐλάχιστο σύστημα σημειώσεων μὲ ξεχωριστὸ
πακέτο UI ποὺ χρησιμοποιεῖ τὸν περιηγητή, ἀναδημιουργώντας τὴ ροὴ ἐργασίας
ποὺ εἶχα μὲ org-roam ἀλλὰ μὲ ὑποστήριξη σύνδεσης themata σὲ κόμβους γιὰ
ἐπαναλήψεις εἰδικὰ ἀνὰ θέμα.</p>
<p>Ἐκ τῶν ὑστέρων, αὐτὸς ὁ διαχωρισμὸς ἦταν λάθος σχεδίασης:</p>
<ul>
<li>Ἡ χρήση <code>org-gnosis</code> χωρὶς <code>gnosis</code> δὲν ἔχει πραγματικὰ ὀφέλη.</li>
<li>Ἕνα ξεχωριστὸ <code>org-gnosis-ui</code> ποὺ ἀναδημιουργεῖ γράφημα στὺλ obsidian
στὸν περιηγητὴ δὲν προσφέρει πραγματικὸ ὄφελος πέρα ἀπὸ τὴν «ὀπτικοποίηση»
τῆς συλλογῆς.
<ul>
<li>Ἡ χρήση <code>tabulated-list</code> στὸν Ἤμαξ γιὰ ἐμφάνιση κόμβων, τῶν
ἀντίστροφων συνδέσμων/συνδέσμων τους καὶ τῶν συνδεδεμένων themata παρέχει πραγματικὴ
χρήση στὴ ροὴ ἐργασίας.  Μπορεῖς νὰ ξεκινήσεις ἐπαναλήψεις γιὰ συγκεκριμένους
κόμβους ἀπὸ τὸν πίνακα ἐλέγχου, νὰ φιλτράρεις περιεχόμενα καὶ νὰ δεῖς σχέσεις,
ὅλα μέσα στὸν Ἤμαξ.</li>
</ul>
</li>
<li>Συντήρηση δύο ξεχωριστῶν βάσεων δεδομένων χωρὶς πραγματικὴ ἀξία.</li>
</ul>
<h2 id="ἀλγόριθμος-ἐπανάληψης-ἀνὰ-θέμα">Ἀλγόριθμος ἐπανάληψης ἀνὰ θέμα</h2>
<p>Ἡ Gnosis ὑποστηρίζει ἐπανάληψη ὅλων τῶν themata ποὺ συνδέονται μὲ συγκεκριμένο
κόμβο, ποὺ σημαίνει ὅτι τὰ themata συχνὰ ἐπαναλαμβάνονται πρὶν ἔρθει ἡ προγραμματισμένη ὥρα ἐπαναλήψεώς τους.
Ὁ ὑπολογισμὸς διαστήματος χρησιμοποιεῖ πλέον τὸν παρελθόντα χρόνο ὡς βάση,
ἀλλὰ σὲ ἐπιτυχία κρατάει τὴν ἀργότερη ἀπὸ τὴν ὑπολογισμένη/ὑπάρχουσα
προγραμματισμένη ἡμερομηνία.  Ἡ βαθμολογία τοῦ thema καὶ ἡ σειρὰ ἐπανάληψης
ἐξακολουθοῦν νὰ ἐνημερώνονται, ὥστε οἱ πρόωρες ἐπαναλήψεις νὰ συμβάλλουν στὴν
πρόοδο χωρὶς νὰ παραμορφώνουν τὸ πρόγραμμα.</p>
<p>Αὐτὸ ἐξασφαλίζει ὅτι οἱ πρόωρες ἐπιτυχεῖς ἐπαναλήψεις δὲν μποροῦν οὔτε νὰ αὐξήσουν
<em>οὔτε</em> νὰ μειώσουν τὰ διαστήματα.  Σὲ ἀποτυχία χρησιμοποιεῖται ἀπευθείας τὸ
ὑπολογισμένο διάστημα, ἀφοῦ ἡ πρόωρη ἀποτυχία παρέχει πράγματι χρήσιμες πληροφορίες.</p>
<h2 id="νέο-χαρακτηριστικὸ-ἐξαγωγὴ-themata-μὲ-τοὺς-συνδεδεμένους-κόμβους-τους">[Νέο χαρακτηριστικὸ] Ἐξαγωγὴ themata μὲ τοὺς συνδεδεμένους κόμβους τους</h2>
<p>Οἱ ἐξαγωγὲς Gnosis θὰ περιλαμβάνουν προαιρετικὰ ὅλους τοὺς συνδεδεμένους
κόμβους γιὰ τὰ ἐξαγόμενα themata.  Αὐτὸ σημαίνει ὅτι τρέχουσες συλλογές,
ὅπως τὸ <a href="https://codeberg.org/thanosapollo/gnosis-unking">Unking</a>, θὰ παρέχουν ἕτοιμες πρὸς χρήση συλλογὲς ὅπου οἱ χρήστες
μποροῦν τόσο νὰ ἐπαναλαμβάνουν themata ὅσο καὶ νὰ περιηγοῦνται στὸ σχετικὸ
ὑλικό.</p>]]></content:encoded>
    </item>
    <item>
      <title>Σημειώσεις ἔκδοσης Gnosis 0.8.0</title>
      <link>https://thanosapollo.org/el/posts/gnosis-version-0-8-0/</link>
      <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-version-0-8-0/</guid>
      <description>Ἐπισκόπηση ἔκδοσης Gnosis 0.8.0</description>
      <content:encoded><![CDATA[<p>Χαίρομαι νὰ ἀνακοινώσω τὴν ἔκδοση 0.8.0 γιὰ τὸ
<a href="/el/projects/gnosis/">gnosis</a>.</p>
<p>Ἐπιτέλους αὐτὸ τὸ ἔργο ἐξελίσσεται στὸ <em>«ὅλα σὲ ἕνα»</em> σύστημα γνώσης
ποὺ εἶχα φανταστεῖ.  Αὐτὴ ἡ ἔκδοση ἐπιτρέπει προβολὴ συνδεδεμένων
κόμβων τοῦ <code>org-gnosis</code> καὶ τῶν συνδεδεμένων themata τους σὲ
tabulated-list μέσω τοῦ <code>gnosis-dashboard</code> μὲ ἐξαιρετικὴ ἐπίδοση.</p>
<p>Δὲν χρειάζονται πιὰ ἐξωτερικοὶ περιηγητὲς γιὰ νὰ βλέπω τὴ συλλογή μου.
Αὐτὸ σημαίνει ὅτι τὸ ἔργο <code>org-gnosis-ui</code> θὰ πρέπει νὰ θεωρεῖται
παρωχημένο.  Ὅλες οἱ λειτουργίες μποροῦν τώρα νὰ γίνουν ἐντὸς Ἤμαξ.</p>
<p>Ἐπιπλέον, ἔχω δημοσιεύσει ἕνα <code>gnosis-deck</code> εἰδικὰ σχεδιασμένο γιὰ
συναδέλφους φοιτητὲς ἰατρικῆς, ὀνομαζόμενο
<a href="https://codeberg.org/thanosapollo/gnosis-unking">Unking</a>, βασισμένο
στὴν <strong>τελευταία δωρεὰν ἔκδοση</strong> τοῦ
<a href="https://www.ankihub.net/step-deck">Anking deck</a>, Anking V11.  Αὐτὸ τὸ
deck εἶναι ἀρκετὰ περιεκτικό, μὲ πάνω ἀπὸ 40.000 themata.</p>
<p>Καθὼς τὸ Gnosis ἤδη ἐκπληρώνει τὶς ἀρχικές μου προθέσεις καὶ πέρα, ἡ
περαιτέρω ἀνάπτυξη θὰ ἐστιαστεῖ κυρίως σὲ διορθώσεις σφαλμάτων καὶ γενικὴ
συντήρηση παρὰ σὲ νέα μεγάλα χαρακτηριστικά.  Ἡ προτεραιότητά μου τώρα
θὰ μετατοπιστεῖ πρὸς τὴ χρήση τοῦ συστήματος γιὰ τὶς ἐξετάσεις μου
παρὰ πρὸς τὴ συνέχιση ἐνεργῆς ἀνάπτυξης.</p>
<p>Ὑπῆρξε πραγματικὰ εὐχάριστο καὶ ἀνταποδοτικὸ νὰ δουλεύω σὲ αὐτὸ τὸ
ἔργο.  Ὁ στόχος μου γιὰ νὰ μάθω προγραμματισμὸ ἦταν νὰ φτιάξω ἕνα
σύστημα γνώσης καὶ νὰ μὴν βασίζομαι σὲ τρίτους γιὰ τὴ μελέτη μου.</p>
<p>Τὸ ὁποῖο ἐπιτέλους πέτυχα:) Αὐτὸ δὲν θὰ ἦταν δυνατὸ χωρὶς ὅλη τὴ δουλειὰ
ποὺ πολλοὶ ἀπὸ ἐσᾶς ἔχετε βάλει στὸ οἰκοσύστημα Ἤμαξ, ὁπότε ἁπλῶς
θέλω νὰ ἐκφράσω τὴν εἰλικρινῆ μου εὐγνωμοσύνη σὲ ὅλους σας, εὐχαριστῶ!</p>
<h2 id="νέα-χαρακτηριστικὰ">Νέα χαρακτηριστικὰ</h2>
<ul>
<li>Αὐτόματη ἀνίχνευση μεθόδου εἰσαγωγῆς: τὸ gnosis ἀνιχνεύει τὴ γραφὴ τῆς
ἀναμενόμενης ἀπάντησης (ἑλληνικά, κυριλλικά, κ.λπ.) καὶ ἐνεργοποιεῖ
τὴν κατάλληλη μέθοδο εἰσαγωγῆς κατὰ τὴν ἐπανάληψη.
Ρυθμίζεται μέσω <code>gnosis-script-input-method-alist</code>.</li>
<li>Ἀλλαγὴ τύπου thema καὶ deck μέσω <code>gnosis-update-thema</code>.</li>
<li>Ἐνέργεια μαζικῆς σύνδεσης τοῦ πίνακα γιὰ τὰ τρέχοντα ἐμφανιζόμενα themata.</li>
<li>Γραμμὴ κεφαλίδας πίνακα μὲ ἀριθμὸ καταχωρίσεων καὶ πλαίσιο.</li>
<li>Ἀσύγχρονη εἰσαγωγὴ deck μὲ <code>gnosis-import-deck-async</code>.</li>
<li>Δεῖγμα deck συμπεριλαμβάνεται στὸ <code>decks/demo.org</code>.</li>
</ul>
<h2 id="ἐπίδοση">Ἐπίδοση</h2>
<ul>
<li>Νέα μονάδα <code>gnosis-tl</code> ἀντικαθιστᾶ τὸ <code>tabulated-list-print</code> γιὰ
ἀπόδοση πίνακα (3-4x ταχύτερη).</li>
<li>Προοδευτικὴ ἀσύγχρονη ἀπόδοση γιὰ μεγάλους πίνακες.</li>
<li>Μαζικὴ ἀνάκτηση δεδομένων ἐπανάληψης ἀντὶ ἐρωτημάτων ἀνὰ thema.</li>
</ul>
<h2 id="διορθώσεις-σφαλμάτων">Διορθώσεις σφαλμάτων</h2>
<ul>
<li>Διόρθωση ὑπολογισμοῦ γεγονότος anagnosis στὸν ἀλγόριθμο.</li>
<li>Διόρθωση ἀφαίρεσης ἐτικέτας cloze γιὰ ἀκραῖες περιπτώσεις καὶ τύπο
mc-cloze.</li>
<li>Διόρθωση <code>vc-pull</code> νὰ τρέχει μεταπτώσεις βάσης δεδομένων μετὰ τὴ λήψη.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Patrologia Graeca: 1500&#43; Ἑλληνικὰ Πατερικὰ κείμενα, Ἐλεύθερα καὶ Ἀνοιχτά.</title>
      <link>https://thanosapollo.org/el/posts/patrologia-graeca-bebliotheca/</link>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/patrologia-graeca-bebliotheca/</guid>
      <description>&lt;p&gt;Ἔψαχνα γιὰ πατερικὸ περιεχόμενο γιὰ τὸ ἔργο μου &lt;a href=&#34;https://bebliotheca.thanosapollo.org&#34;&gt;Bebliotheca&lt;/a&gt;, μιὰ
ψηφιακὴ ἀναδημιουργία τῆς βιβλιοθήκης τῆς Κωνσταντινούπολης.  Ἡ καλύτερή
μου ἐπιλογὴ ἦταν νὰ βρῶ τὸ ἔργο τῆς &lt;a href=&#34;https://en.wikipedia.org/wiki/Patrologia_Graeca&#34;&gt;Patrologia Graeca τοῦ Migne&lt;/a&gt;, ἀλλὰ
σχεδὸν καμία &lt;em&gt;ἐλεύθερη&lt;/em&gt; πηγὴ δὲν ἔχει τὸ πρωτότυπο ἑλληνικὸ κείμενο σὲ
κατάλληλη κατάσταση.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ἔψαχνα γιὰ πατερικὸ περιεχόμενο γιὰ τὸ ἔργο μου <a href="https://bebliotheca.thanosapollo.org">Bebliotheca</a>, μιὰ
ψηφιακὴ ἀναδημιουργία τῆς βιβλιοθήκης τῆς Κωνσταντινούπολης.  Ἡ καλύτερή
μου ἐπιλογὴ ἦταν νὰ βρῶ τὸ ἔργο τῆς <a href="https://en.wikipedia.org/wiki/Patrologia_Graeca">Patrologia Graeca τοῦ Migne</a>, ἀλλὰ
σχεδὸν καμία <em>ἐλεύθερη</em> πηγὴ δὲν ἔχει τὸ πρωτότυπο ἑλληνικὸ κείμενο σὲ
κατάλληλη κατάσταση.</p>
<p>Εὐτυχῶς, ὁ καθηγητὴς <a href="https://en.wikipedia.org/wiki/Anthony_Kaldellis">Ἀντώνιος Καλδέλλης</a> προσέφερε καθοδήγηση
δείχνοντάς μου ἕνα κατοπτρικὸ ἀντίγραφο ἑνὸς ἔργου ποὺ πλέον ἔχει διακοπεῖ, ἀπὸ τὸ <strong>Πανεπιστήμιο
Αἰγαίου</strong>, γιὰ τὸ ὁποῖο βρῆκα ἀρχεῖο <a href="https://web.archive.org/web/20070917124937/http://patrologia.ct.aegean.gr/">ἐδῶ</a>.  Αὐτὸ τὸ ἔργο περιέχει 143
ἀπὸ τοὺς 161 τόμους τῆς <a href="https://en.wikipedia.org/wiki/Patrologia_Graeca">Patrologia Graeca τοῦ Migne</a>, σὲ τέλεια κατάσταση.</p>
<blockquote>
<p>Μπορεῖτε νὰ πάρετε τὰ pdfs ἀπὸ τὸ ἔργο τοῦ Πανεπιστημίου Αἰγαίου <a href="/pg-migne.tar.gz">ἐδῶ</a> ὡς
<code>tar.gz</code>, τὸ ὁποῖο φιλοξενῶ ἐγώ.</p>
</blockquote>
<p>Ἔχω πλέον προσθέσει αὐτὰ τὰ κείμενα στὴ Bebliotheca, κάτω ἀπὸ τὴν
ἐτικέτα <code>#patristic</code>. Θὰ προσαρμόσω τοὺς τίτλους σὲ μιὰ σωστὴ
μετάφραση στὴν Κοινὴ Ἑλληνικὴ γιὰ νὰ ἀκολουθήσω τὸ θέμα τῆς
<em>&ldquo;Βιβλιοθήκης τῆς Κωνσταντινούπολης&rdquo;</em>.</p>
<h2 id="τρέχοντα-στατιστικὰ-τοῦ-σώματος-κειμένων-τῆς-bebliotheca">Τρέχοντα στατιστικὰ τοῦ σώματος κειμένων τῆς Bebliotheca</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>CORPUS STATISTICS:
</span></span><span style="display:flex;"><span>  Total unique works:       2690
</span></span><span style="display:flex;"><span>  Greek texts:              2316
</span></span><span style="display:flex;"><span>  English translations:     757
</span></span><span style="display:flex;"><span>  Latin texts:              374
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>TRANSLATION COVERAGE:
</span></span><span style="display:flex;"><span>  Greek with English:       571 (24%)
</span></span><span style="display:flex;"><span>  Greek with Latin:         0 (0%)
</span></span><span style="display:flex;"><span>  All three languages:      0
</span></span><span style="display:flex;"><span>  Greek without translation:1745 (75%)
</span></span><span style="display:flex;"><span>  English-only works:       0
</span></span><span style="display:flex;"><span>  Latin-only works:         188
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Σημειώσεις ἔκδοσης Gnosis 0.7.0</title>
      <link>https://thanosapollo.org/el/posts/gnosis-version-0-7-0/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-version-0-7-0/</guid>
      <description>&lt;p&gt;Δημοσίευσα ἐπιτέλους τὴν ἔκδοση &lt;code&gt;0.7.0&lt;/code&gt; τοῦ Gnosis ποὺ φέρνει
πολὺ ἀναγκαῖες ἀλλαγὲς καὶ ἐνσωμάτωση μὲ τὸ &lt;a href=&#34;https://thanosapollo.org/el/projects/gnosis/&#34;&gt;org-gnosis&lt;/a&gt;.  Μπορεῖς
νὰ πάρεις τὴν τελευταία ἔκδοση gnosis μέσω &lt;a href=&#34;https://elpa.gnu.org/packages/gnosis.html&#34;&gt;GNU ELPA&lt;/a&gt; ἢ ἀπευθείας ἀπὸ
τὸ &lt;a href=&#34;https://git.thanosapollo.org/gnosis/&#34;&gt;κύριο ἀποθετήριο&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Δημοσίευσα ἐπιτέλους τὴν ἔκδοση <code>0.7.0</code> τοῦ Gnosis ποὺ φέρνει
πολὺ ἀναγκαῖες ἀλλαγὲς καὶ ἐνσωμάτωση μὲ τὸ <a href="/el/projects/gnosis/">org-gnosis</a>.  Μπορεῖς
νὰ πάρεις τὴν τελευταία ἔκδοση gnosis μέσω <a href="https://elpa.gnu.org/packages/gnosis.html">GNU ELPA</a> ἢ ἀπευθείας ἀπὸ
τὸ <a href="https://git.thanosapollo.org/gnosis/">κύριο ἀποθετήριο</a>.</p>
<h2 id="νέες-δυνατότητες">Νέες δυνατότητες</h2>
<ul>
<li>Ἐπανάληψη θέματος ἀπὸ τὴν προβολή nodes τοῦ dashboard (<code>r</code>), μὲ
ρυθμιζόμενο βάθος forward-link καὶ backlink (<code>R</code> ἢ <code>C-u r</code>).</li>
<li>Τὸ <code>gnosis-review-topic</code> δέχεται ξεχωριστὸ βάθος
forward/backlink γιὰ νὰ συμπεριλάβει themata ἀπὸ σχετικοὺς κόμβους.</li>
<li>Τὸ <code>gnosis-save-hook</code> τρέχει μετὰ τὴν ἀποθήκευση thema, καλούμενο
μὲ τὸ ID τοῦ thema.</li>
<li>Ἐντολὲς ἀνίχνευσης καὶ ἐπισκευῆς ἀκεραιότητας συνδέσμων
(<code>gnosis-links-check</code>, <code>gnosis-links-sync</code>).</li>
<li>Μενού συντήρησης dashboard γιὰ συγχρονισμὸ/ἀνοικοδόμηση nodes καὶ
ἐλέγχους ὑγείας συνδέσμων.</li>
<li>Τὸ dashboard δείχνει themata μὲ ὀρφανοὺς συνδέσμους.</li>
<li>Προβολὴ κόμβων org-gnosis ποὺ ἔχουν προγραμματιστεῖ γιὰ ἐπανάληψη καὶ συνδέονται μὲ themata ἀπὸ τὸ
dashboard.</li>
<li>Μαζικὴ ἀντικατάσταση συμβολοσειρᾶς στὸ keimenon μὲ σύνδεσμο κόμβου
org-gnosis.</li>
<li>Προσαρμοσμένη ἐπιλογὴ <code>gnosis-center-content-during-review</code>.</li>
<li>Διαθέσιμη ἐνέργεια διαγραφῆς κατὰ τὴν ἐπανάληψη.</li>
<li>Μορφοποίηση συνδέσμων org-gnosis στὸ keimenon κατὰ τὴν ἔξοδο
ἐπανάληψης.</li>
<li>Ἐπιλογὴ ἐξαγωγῆς deck νὰ συμπεριλαμβάνει ἢ νὰ ἀποκλείει
ἀνασταλμένα themata.</li>
<li>Τὰ ἐξαγόμενα decks περιλαμβάνουν κεφαλίδα <code>#+THEMATA:</code> μὲ ἀριθμὸ
themata.</li>
<li>Ἡ εἰσαγωγὴ σὲ ὑπάρχον deck ζητᾶ ἐπιβεβαίωση.</li>
<li>Οἱ ἀποτυχημένες εἰσαγωγὲς thema ἀναφέρουν τὸν ἀριθμὸ γραμμῆς τοῦ
ἀρχείου πηγῆς.</li>
</ul>
<h2 id="dashboard">Dashboard</h2>
<ul>
<li>Προστέθηκε dashboard nodes· προβολὴ πληροφοριῶν κόμβων org-gnosis
συμπεριλαμβανομένων backlinks καὶ συνδεδεμένων themata καθὼς καὶ
ἔναρξη συνεδρίας ἐπανάληψης.</li>
<li>Ἡ στήλη Suspend ἐμφανίζει <code>Yes</code> <code>No</code> ἀντὶ <code>1</code> <code>0</code>.</li>
<li>Μεταφορὰ τῶν στοιχείων τοῦ ὑπομενού Actions στὸ ἀρχικὸ μενού.</li>
<li>Ξεχωριστὴ στήλη Import/Export.</li>
<li>Διάταξη τεσσάρων στηλῶν: Navigate, Actions, Import/Export,
Maintenance.</li>
</ul>
<h2 id="ἀλγόριθμος">Ἀλγόριθμος</h2>
<ul>
<li>Ἀνώτατο ὅριο gnosis-synolon στὸ <code>gnosis-algorithm-synolon-max</code>
(προεπιλογὴ 3.0), κατώτατο στὸ 1.3.</li>
<li>Προσθήκη τυχαίας διακύμανσης διαστήματος γιὰ ἀποτροπὴ συστάδων ἐπαναλήψεων.</li>
<li>Διόρθωση γεγονότος lethe: σωστὴ μείωση gnosis-plus σὲ διαδοχικὲς
ἀποτυχίες.</li>
</ul>
<h2 id="ἀπόδοση">Ἀπόδοση</h2>
<ul>
<li>Suspend, delete καὶ edit τοῦ dashboard ἐνημερώνουν μόνο τὴν
ἐπηρεαζόμενη ἐγγραφὴ ἀντὶ νὰ ἀνανεώνουν ὁλόκληρο τὸ buffer.</li>
<li>Ἡ προβολὴ κόμβων χρησιμοποιεῖ μαζικὰ ἐρωτήματα γιὰ ἀριθμοὺς συνδέσμων
(2 ἐρωτήματα ἀντὶ 2N).</li>
<li>Ἡ ἐξαγωγὴ deck χρησιμοποιεῖ 2 μαζικὰ ἐρωτήματα ἀντὶ 2 ἀνὰ thema
(ἀπαλείφθηκε N+1).</li>
<li>Ἡ ἐξαγωγὴ deck χρησιμοποιεῖ ἁπλὴ εἰσαγωγὴ κειμένου ἀντὶ σαρώσεων
buffer ἀνὰ thema (ἀπαλείφθηκε O(n^2)).</li>
<li>Ἡ εἰσαγωγὴ deck τυλίγει ὅλες τὶς πράξεις σὲ μία συναλλαγὴ μὲ
IDs ἀποθηκευμένα ἐκ τῶν προτέρων (10K fsyncs μειώθηκαν σὲ 1).</li>
<li>Οἱ ἐνημερώσεις ἐπανάληψης χρησιμοποιοῦν ἕνα μόνο ἐρώτημα DB.</li>
<li>Ἡ ἔξοδος ἐτικετῶν χρησιμοποιεῖ μία κλήση DB.</li>
<li>Ὁ μέσος ὅρος καθημερινῶν ἐπαναλήψεων ὑπολογίζεται μὲ μία κλήση DB.</li>
</ul>
<h2 id="διορθώσεις-σφαλμάτων">Διορθώσεις σφαλμάτων</h2>
<ul>
<li>Διόρθωση διαρροῆς ἀγκίστρου <code>gnosis-monkeytype</code> (τώρα buffer-local).</li>
<li>Διόρθωση <code>vc-pull</code> νὰ ξανανοίγει σωστὰ τὴ βάση μετὰ ἀπὸ ἐπιτυχῆ
λήψη.</li>
<li>Προφόρτωση <code>emacsql-sqlite-builtin</code> γιὰ νὰ διορθωθεῖ ἡ κατάρρευση
τῆς δρομολόγησης <code>cl-generic</code> στὸν Ἤμαξ 29+.</li>
</ul>
<h2 id="τεκμηρίωση">Τεκμηρίωση</h2>
<ul>
<li>Ἐνημέρωση Εἰσαγωγῆς γιὰ νὰ περιγράφει τὴν ἐπιδιωκόμενη ροὴ ἐργασίας
μὲ <code>org-gnosis</code> (γράψε σημειώσεις, δημιούργησε themata, σύνδεσε,
ἐπανάλαβε).</li>
<li>Τεκμηρίωση τῶν δύο ξεχωριστῶν βάσεων (gnosis καὶ org-gnosis).</li>
<li>Ἐνημέρωση ἐνότητας dashboard γιὰ νέα διάταξη μενού.</li>
<li>Προσθήκη ἐνότητας Εἰσαγωγὴ καὶ Ἐξαγωγὴ μὲ ἐπιλογὲς ἐξαγωγῆς καὶ
συμπεριφορὰ εἰσαγωγῆς.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Σημειώσεις ἔκδοσης Org Gnosis 0.2.0</title>
      <link>https://thanosapollo.org/el/posts/org-gnosis-version-0.2.0/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/org-gnosis-version-0.2.0/</guid>
      <description>&lt;p&gt;Μόλις δημοσίευσα μία νέα ἔκδοση γιὰ τὸ &lt;a href=&#34;https://thanosapollo.org/el/projects/gnosis/&#34;&gt;org-gnosis&lt;/a&gt;, τὸ ἄρθρωμα σημειώσεων τῆς
&lt;a href=&#34;https://thanosapollo.org/el/projects/gnosis/&#34;&gt;gnosis&lt;/a&gt;, ποὺ μπορεῖς νὰ βρεῖς &lt;a href=&#34;https://git.thanosapollo.org/org-gnosis/&#34;&gt;ἐδῶ&lt;/a&gt;.  Ἡ ἐνημέρωση θὰ πρέπει νὰ εἶναι διαθέσιμη
σὲ ὅλους τοὺς χρήστες μέσω &lt;a href=&#34;https://elpa.gnu.org/packages/org-gnosis.html&#34;&gt;GNU ELPA&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Μόλις δημοσίευσα μία νέα ἔκδοση γιὰ τὸ <a href="/el/projects/gnosis/">org-gnosis</a>, τὸ ἄρθρωμα σημειώσεων τῆς
<a href="/el/projects/gnosis/">gnosis</a>, ποὺ μπορεῖς νὰ βρεῖς <a href="https://git.thanosapollo.org/org-gnosis/">ἐδῶ</a>.  Ἡ ἐνημέρωση θὰ πρέπει νὰ εἶναι διαθέσιμη
σὲ ὅλους τοὺς χρήστες μέσω <a href="https://elpa.gnu.org/packages/org-gnosis.html">GNU ELPA</a>.</p>
<h2 id="σημαντικὲς-ἀλλαγές">Σημαντικὲς ἀλλαγές</h2>
<h3 id="ἀλλαγὲς-βάσης-δεδομένων">Ἀλλαγὲς βάσης δεδομένων</h3>
<ul>
<li>Ἡ ἔκδοση τῆς βάσης ἀνέβηκε στὸ 3, παρακολουθώντας <code>mtime</code> καὶ <code>hash</code> τόσο
γιὰ κόμβους ὅσο καὶ γιὰ ἀρχεῖα ἡμερολογίου.</li>
<li>Αὐτόματες προτροπὲς μετάβασης βάσης ὅταν τὸ σχῆμα τῆς βάσης εἶναι παρωχημένο.</li>
<li>Ὀκνηρὴ ἀρχικοποίηση βάσης — οἱ συνδέσεις βάσης δημιουργοῦνται μόνο
ὅταν χρειάζονται, βελτιώνοντας τὸν χρόνο ἐκκίνησης.</li>
<li>Προστέθηκε ἡ προσαρμοσμένη μεταβλητὴ <code>org-gnosis-database-file</code> γιὰ
καθορισμὸ προσαρμοσμένης τοποθεσίας ἀρχείου βάσης.</li>
</ul>
<h3 id="βελτιώσεις-ἐπίδοσης">Βελτιώσεις ἐπίδοσης</h3>
<ul>
<li>Σημαντικὲς βελτιώσεις ἐπίδοσης γιὰ <code>org-gnosis-db-sync</code> μὲ
βελτιστοποίηση GC κατὰ τὸν συγχρονισμό.</li>
<li>Δύο ἐπιπέδων αὐξητικὸς συγχρονισμός: γρήγορος ἔλεγχος <code>mtime</code>, ἔπειτα
ἀκριβὴς σύγκριση <code>hash</code>.
<ul>
<li>Ἐπεξεργάζεται μόνο ἀρχεῖα ὅπου ἔχουν ἀλλάξει τόσο ὁ χρόνος τροποποίησης
ὅσο καὶ τὸ περιεχόμενο.</li>
<li>Βελτιώνει δραματικὰ τὴν ἐπίδοση γιὰ κρυπτογραφημένα ἀρχεῖα .gpg καὶ
μεγάλα ἀποθετήρια.</li>
</ul>
</li>
<li>Τόσο τὰ ἀρχεῖα κόμβων ὅσο καὶ τὰ ἀρχεῖα ἡμερολογίου χρησιμοποιοῦν πλέον
αὐξητικὸ συγχρονισμὸ μὲ ἀναφορὰ προόδου ποὺ δείχνει μετρήσεις
ἀλλαγμένων/συνολικῶν ἀρχείων.</li>
<li>Γιὰ ἀναγκαστικὸ πλήρη ἐπανασυγχρονισμό, κάλεσε <code>org-gnosis-db-sync</code> μὲ
ὄρισμα προθέματος <code>C-u</code>. π.χ. <code>C-u M-x org-gnosis-db-sync RET</code>.</li>
</ul>
<h3 id="ἡμερολόγιο">Ἡμερολόγιο</h3>
<ul>
<li>Ἐξ ὁρισμοῦ, οἱ σημερινὲς καταχωρίσεις ἡμερολογίου δημιουργοῦνται στὸ
<code>org-gnosis-journal-file</code> ὡς ἐπικεφαλίδες ἐπιπέδου 1.
<ul>
<li>Ὅταν ὁρίζεται σὲ <code>nil</code>, δημιουργεῖ ξεχωριστὰ ἀρχεῖα γιὰ κάθε
καταχώριση ἡμερομηνίας.</li>
<li>Ἡ δημιουργία νέων καταχωρίσεων (π.χ. μέσω <code>org-gnosis-journal-find</code> γιὰ
ἕνα γεγονός, ὄχι ἡμερομηνία) δημιουργεῖ ξεχωριστὰ ἀρχεῖα στὸ
<code>org-gnosis-journal-dir</code> ἀνεξαρτήτως αὐτῆς τῆς ρύθμισης.</li>
<li>Τὸ ἑνιαῖο ἀρχεῖο ἡμερολογίου χρησιμοποιεῖται μόνο γιὰ τὶς σημερινὲς
καταχωρίσεις ἡμερομηνίας.</li>
</ul>
</li>
<li>Προστέθηκε <code>org-gnosis-journal-as-gpg</code> ποὺ ὅταν δὲν εἶναι nil τὰ ἀρχεῖα
ἡμερολογίου δημιουργοῦνται ὡς κρυπτογραφημένα ἀρχεῖα <code>gpg</code>.</li>
<li>Οἱ ἐκκρεμότητες τοῦ ἡμερολογίου πλέον ἀνακτοῦν πλαίσια ἐπιλογῆς μόνο ἀπὸ τὴ σημερινὴ
ἐπικεφαλίδα ὅταν χρησιμοποιεῖται ἑνιαῖο ἀρχεῖο ἡμερολογίου, βελτιώνοντας
τὴν ἐπίδοση.</li>
</ul>
<h3 id="διαχείριση-ἐτικετῶν">Διαχείριση ἐτικετῶν</h3>
<ul>
<li>Αὐτόματος καθαρισμὸς ὀρφανῶν ἐτικετῶν (ἐτικέτες χωρὶς συσχετισμένους
κόμβους) κατὰ τὴν ἐνημέρωση ἀρχείων.</li>
<li>Βελτιωμένη ἐπιλογὴ κόμβων βάσει ἐτικέτας μὲ ἀφιερωμένες συναρτήσεις.</li>
</ul>
<h2 id="βελτιώσεις">Βελτιώσεις</h2>
<ul>
<li>Ἁπλοποιημένος ἀλγόριθμος ἀνάλυσης γιὰ καλύτερη ἐπίδοση καὶ
συντηρησιμότητα.</li>
<li>Καλύτερη διαχείριση τίτλων θεμάτων — περιλαμβάνει γονικὲς ἐπικεφαλίδες
μόνο ὅταν ἔχουν IDs.</li>
<li>Προστέθηκε <code>org-gnosis-get-nodes-data</code> γιὰ ἀνάκτηση πληροφοριῶν κόμβου
μὲ μετρήσεις ἀντίστροφων συνδέσμων.</li>
<li>Βελτιωμένη κάλυψη δοκιμῶν γιὰ ἀνάλυση, ἐπεξεργασία τίτλων καὶ ἐκκρεμότητες
ἡμερολογίου.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>(Βίντεο) Συνεισφορὰ σὲ ἔργα Git μὲ Magit: PRs, διορθώσεις &amp; ροὴ Agit</title>
      <link>https://thanosapollo.org/el/posts/video-contributing-with-git-guide/</link>
      <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/video-contributing-with-git-guide/</guid>
      <description>&lt;center&gt;
&lt;p&gt;&lt;i&gt;Συνεισφορὰ σὲ ἔργα Git μὲ Magit: PRs, διορθώσεις καὶ ροὴ Agit&lt;/i&gt;&lt;p&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/qSHw7D_88-0?si=v248FB_QuJLrabyu&#34; title=&#34;Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/center&gt;
&lt;p&gt;Γρήγορος ὁδηγὸς βίντεο γιὰ συνεισφορὰ σὲ ἔργα git μὲ Magit.
Παρουσιάζει σύνοψη τῶν 3 πιὸ συνηθισμένων ροῶν ἐργασίας&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pull Requests&lt;/li&gt;
&lt;li&gt;Ροὴ Agit&lt;/li&gt;
&lt;li&gt;Διορθώσεις Git&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<center>
<p><i>Συνεισφορὰ σὲ ἔργα Git μὲ Magit: PRs, διορθώσεις καὶ ροὴ Agit</i><p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/qSHw7D_88-0?si=v248FB_QuJLrabyu" title="Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</center>
<p>Γρήγορος ὁδηγὸς βίντεο γιὰ συνεισφορὰ σὲ ἔργα git μὲ Magit.
Παρουσιάζει σύνοψη τῶν 3 πιὸ συνηθισμένων ροῶν ἐργασίας</p>
<ul>
<li>Pull Requests</li>
<li>Ροὴ Agit</li>
<li>Διορθώσεις Git</li>
</ul>
<blockquote>
<p>Σημειώσεις βίντεο:</p>
</blockquote>
<h2 id="εἰσαγωγή">Εἰσαγωγή</h2>
<blockquote>
<p>Τὸ δημιουργῶ ὡς βίντεο-σεμινάριο γιὰ τὸ πῶς νὰ συνεισφέρεις στὸ
<a href="https://codeberg.org/bebliotheca/bebliotheca">bebliotheca</a>, μία <em>ψηφιακὴ ἀναδημιουργία</em> τῆς Βιβλιοθήκης τῆς
Κωνσταντινούπολης γιὰ νὰ φιλοξενεῖ κείμενα ποὺ θὰ βρίσκονταν ἐκεῖ κατὰ
τὴν ἑλληνορωμαϊκὴ αὐτοκρατορία.</p>
<p>Τὰ βήματα ποὺ ἐπιδεικνύονται ἐδῶ ἰσχύουν γιὰ ὁποιοδήποτε ἔργο.</p>
</blockquote>
<p>Αὐτὸς εἶναι ἕνας ὁδηγὸς βίντεο γιὰ συνεισφορὰ σὲ ἔργα git, μὲ Ἤμαξ καὶ
Magit (<em>τὸν μαγικὸ πελάτη Git</em>).  Τὸ <code>Magit</code> παρέχει τὴν καλύτερη
ἐμπειρία ἐξ ὁρισμοῦ γιὰ κειμενικὴ διεπαφὴ πρὸς τὸ git, κάτι ποὺ καθιστᾶ
τὸ <code>magit</code> κορυφαῖο χαρακτηριστικὸ τοῦ Ἤμαξ.</p>
<p>Σὲ αὐτὸ τὸ βίντεο ξεκινᾶμε ἀπὸ ἕνα παράδειγμα διαμόρφωσης Ἤμαξ,
προσθέτοντας θέμα καὶ ἐγκαθιστώντας Magit.  Ἔπειτα βλέπουμε πῶς νὰ
συνεισφέρεις σὲ ἔργα git μὲ 3 τρόπους:</p>
<ul>
<li>Pull Requests</li>
<li><a href="https://forgejo.org/docs/latest/user/agit-support/">Pull Requests ροῆς Agit</a>
<ul>
<li>Ὑποστηρίζεται σὲ ἐγκαταστάσεις forgejo, ὅπως τὸ <code>codeberg</code></li>
</ul>
</li>
<li>Διορθώσεις Git</li>
</ul>
<blockquote>
<p>Προσωπικὰ χρησιμοποιῶ <code>vc</code>, μία ἐνσωματωμένη μονάδα.  Ἀλλὰ αὐτὸ γιατί
ἀπολαμβάνω τὸν πειραματισμὸ καὶ τὸ νὰ γράφω δικά μου σενάρια γι&rsquo; αὐτό.  Τὸ
Magit κάνει ἐξ ὁρισμοῦ πολὺ περισσότερα ἀπὸ ὅσα μπορεῖ ἀκόμη καὶ ἡ
~300 γραμμῶν διαμόρφωση vc μου.</p>
</blockquote>
<h2 id="ἀπαιτήσεις">Ἀπαιτήσεις</h2>
<p>Θὰ χρειαστεῖς τὸ ἑξῆς λογισμικὸ ἐγκατεστημένο:</p>
<ul>
<li><a href="https://git-scm.com/">git</a></li>
<li><a href="https://www.gnu.org/software/emacs/download.html">GNU Emacs</a> <em>(ἔκδοση &gt;=29.2)</em></li>
</ul>
<p><em>Ἐπιπλέον</em>, βεβαιώσου ὅτι ἔχεις ἤδη δημιουργήσει ζεῦγος <strong>κλειδιῶν SSH</strong>
καὶ τὸ ἔχεις ρυθμίσει γιὰ τὴν ὑπηρεσία φιλοξενίας κώδικά σου.</p>
<h2 id="διαμόρφωση-ἤμαξ-ποὺ-θὰ-χρησιμοποιήσω">Διαμόρφωση Ἤμαξ ποὺ θὰ χρησιμοποιήσω</h2>
<p>Παράδειγμα ἀρχείου <code>init.el</code> ποὺ θὰ χρησιμοποιήσω:</p>
<ul>
<li>Προεπιλεγμένες τοποθεσίες γιὰ <code>init.el</code>, ἀνάλογα μὲ τὸ σύστημά σου:
<ul>
<li>GNU/Linux: <code>~/.emacs.d/init.el</code></li>
<li>Windows: <code>C:\Users\&lt;YourUsername&gt;\.emacs.d\init.el</code></li>
</ul>
</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Init packages</span>
</span></span><span style="display:flex;"><span>(package-initialize)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;;;; Do not install keycast as well, I&#39;m only using it to share my</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;;;; keystrokes for the video.</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; (use-package keycast</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;;  :ensure t)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Set and load custom.el</span>
</span></span><span style="display:flex;"><span>(setf custom-file (locate-user-emacs-file <span style="color:#e6db74">&#34;custom.el&#34;</span>))
</span></span><span style="display:flex;"><span>(<span style="color:#a6e22e">load</span> custom-file <span style="color:#e6db74">&#39;noerror</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Completions</span>
</span></span><span style="display:flex;"><span>(fido-vertical-mode <span style="color:#ae81ff">1</span>)
</span></span><span style="display:flex;"><span>(electric-pair-mode <span style="color:#ae81ff">1</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;;; Theming ;;;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(column-number-mode)
</span></span><span style="display:flex;"><span>(global-display-line-numbers-mode <span style="color:#ae81ff">1</span>)
</span></span><span style="display:flex;"><span>(tool-bar-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>(tooltip-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>(menu-bar-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>(blink-cursor-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>(scroll-bar-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>(set-fringe-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Add transparency</span>
</span></span><span style="display:flex;"><span>(add-to-list <span style="color:#e6db74">&#39;default-frame-alist</span> <span style="color:#f92672">&#39;</span>(alpha-background <span style="color:#f92672">.</span> <span style="color:#ae81ff">85</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; ef-themes package provides a great theme collection, made by Protesilaos.</span>
</span></span><span style="display:flex;"><span>(use-package ef-themes
</span></span><span style="display:flex;"><span>  :ensure <span style="color:#66d9ef">t</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(defun thanos/load-theme (<span style="color:#66d9ef">&amp;optional</span> theme)
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Disable current theme and load a new THEME.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Emacs can load multiple themes at once.  With this function we make sure we only load one at a time&#34;</span>
</span></span><span style="display:flex;"><span>  (interactive)
</span></span><span style="display:flex;"><span>  (let ((theme (or theme (<span style="color:#a6e22e">intern</span> (<span style="color:#a6e22e">completing-read</span> <span style="color:#e6db74">&#34;Theme: &#34;</span> (custom-available-themes))))))
</span></span><span style="display:flex;"><span>    (disable-theme (<span style="color:#a6e22e">car</span> custom-enabled-themes))
</span></span><span style="display:flex;"><span>    (load-theme theme <span style="color:#66d9ef">t</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(thanos/load-theme <span style="color:#e6db74">&#39;ef-dark</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(use-package magit
</span></span><span style="display:flex;"><span>  :bind (<span style="color:#e6db74">&#34;C-x g&#34;</span> <span style="color:#f92672">.</span> magit)
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Hook flyspell for autocorrect during commit messages.</span>
</span></span><span style="display:flex;"><span>  :hook (git-commit-mode <span style="color:#f92672">.</span> flyspell-mode))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Agitjo extends Magit with a new menu for AGit-Flow operations.</span>
</span></span><span style="display:flex;"><span>(use-package agitjo
</span></span><span style="display:flex;"><span>  :vc (:url <span style="color:#e6db74">&#34;https://codeberg.org/halvin/agitjo&#34;</span>)
</span></span><span style="display:flex;"><span>  :ensure <span style="color:#66d9ef">t</span>)
</span></span></code></pre></div><h2 id="pull-requests">Pull Requests</h2>
<ul>
<li>Ἀπαιτοῦν δημιουργία λογαριασμοῦ στὴν ὑπηρεσία φιλοξενίας κώδικα ὅπου φιλοξενεῖται τὸ ἔργο.
<em>π.χ. Github ἢ Codeberg.</em></li>
<li><strong>Βήματα ὑποβολῆς PR</strong>
<ul>
<li><strong>Δημιούργησε προσωπικὸ ἀντίγραφο (fork)</strong> τοῦ ἀποθετηρίου, <em>μέσω διεπαφῆς Ἱστοῦ.</em></li>
<li><strong>Κλωνοποίησε</strong> τὸ fork σου</li>
<li><strong>Καταχώρισε</strong> ἀλλαγές, <em>συχνὰ σὲ νέο κλάδο.</em></li>
<li><strong>Ἀνέβασε</strong> τὶς ἀλλαγές σου στὸ fork σου</li>
<li><strong>Ὑπόβαλε</strong> ἕνα Pull Request, <em>μέσω διεπαφῆς Ἱστοῦ.</em></li>
</ul>
</li>
</ul>
<blockquote>
<p>Ἂν προτιμᾶς νὰ μὴν χρησιμοποιεῖς διεπαφὴ Ἱστοῦ, ἀλλὰ πρέπει νὰ χρησιμοποιήσεις
Pull Requests, σκέψου τὸ <a href="https://github.com/magit/forge">forge</a>.</p>
</blockquote>
<h2 id="ροὴ-agit">Ροὴ Agit</h2>
<blockquote>
<p>Σημείωσε ὅτι ἡ <strong>ροὴ agit</strong> δὲν ὑποστηρίζεται ἀπὸ τὸ GitHub τὴ στιγμὴ
δημιουργίας αὐτοῦ τοῦ βίντεο.  Γιὰ νὰ χρησιμοποιήσεις ροὴ agit, θὰ
χρειαστεῖς ἐγκατάσταση forgejo ὅπως τὸ Codeberg.</p>
</blockquote>
<ul>
<li>Κλωνοποίησε τὸ ἀποθετήριο, <em>μὲ ssh</em></li>
<li>Καταχώρισε ἀλλαγές</li>
<li>Ἀνέβασε
<ul>
<li>Ἀπὸ τὸ buffer κατάστασης Magit, πάτα <code>#</code></li>
<li>Καθόρισε τίτλο μὲ <code>-t</code>
<ul>
<li>Μπορεῖς νὰ χρησιμοποιήσεις τὸν ἴδιο τίτλο γιὰ νὰ ἀνεβάσεις τὶς ἀλλαγὲς
στὸ PR.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="διορθώσεις-git">Διορθώσεις Git</h2>
<ul>
<li>Κλωνοποίησε τὸ ἀποθετήριο.</li>
<li>Καταχώρισε ἀλλαγές.</li>
<li>Μορφοποίησε διορθώσεις.</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ git format-patch -<span style="color:#f92672">{</span>NUM<span style="color:#f92672">}</span> <span style="color:#75715e"># where NUM the number of commits.</span>
</span></span></code></pre></div><ul>
<li>Στεῖλε διορθώσεις ὡς συνημμένα μέσω ἠλεκτρονικοῦ ταχυδρομείου, πατώντας <code>C-x C-m</code>.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Cgit μὲ GNU Guix</title>
      <link>https://thanosapollo.org/el/posts/cgit-guix/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/cgit-guix/</guid>
      <description>&lt;p&gt;Πρόσφατα μετέφερα τὸν οἰκιακὸ διακομιστή μου στὸ &lt;a href=&#34;https://guix.gnu.org&#34;&gt;GNU Guix&lt;/a&gt;·
αὐτὸς εἶναι ἕνας σύντομος ὁδηγὸς γιὰ τὸ πῶς ἔστησα τὸ &lt;code&gt;cgit&lt;/code&gt;.  Ἐλπίζω
νὰ βοηθήσει κάποιους ἀπὸ ἐσᾶς.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Πρόσφατα μετέφερα τὸν οἰκιακὸ διακομιστή μου στὸ <a href="https://guix.gnu.org">GNU Guix</a>·
αὐτὸς εἶναι ἕνας σύντομος ὁδηγὸς γιὰ τὸ πῶς ἔστησα τὸ <code>cgit</code>.  Ἐλπίζω
νὰ βοηθήσει κάποιους ἀπὸ ἐσᾶς.</p>
<h2 id="γιατί-χρησιμοποιῶ-gnu-guix-γιὰ-τὸν-διακομιστή-μου">Γιατί χρησιμοποιῶ GNU Guix γιὰ τὸν διακομιστή μου</h2>
<p>Τὸ GNU Guix εἶναι τὸ προτιμώμενό μου σύστημα γιὰ κάθε μηχανὴ ποὺ
χρησιμοποιῶ· πρόσφατα μετέφερα ἀκόμα καὶ τὸν οἰκιακὸ διακομιστή μου
(<em>πίσω</em>) στὸ Guix.  Χρησιμοποιῶ τὸν οἰκιακὸ διακομιστὴ γιὰ νὰ
φιλοξενῶ αὐτὸ τὸ ἱστολόγιο καθὼς καὶ τὴν <a href="https://git.thanosapollo.org">ἐγκατάσταση cgit</a> μου· μέχρι
τώρα συνιστῶ τὸ Guix, ὡς ἐρασιτέχνης, γιὰ τοὺς ἑξῆς λόγους:</p>
<ul>
<li><code>Ἐπαναφορές</code>
<ul>
<li>Εἶχα δοκιμάσει καὶ Gentoo καὶ Debian πρὶν γιὰ τὸν διακομιστή μου·
περισσότερες ἀπὸ μία φορὲς εἶχα μία ἢ περισσότερες αὐτοφιλοξενούμενες
ὑπηρεσίες ἐκτὸς λειτουργίας ἐπειδὴ μιὰ ἐνημέρωση ἔθεσε ἐκτὸς λειτουργίας τὴ διαμόρφωσή μου.  Ὁ χρόνος
μου εἶναι περιορισμένος καὶ αὐτὲς οἱ βλάβες συχνὰ συνέβαιναν σὲ
πολυάσχολες ἑβδομάδες ὅπου δὲν εἶχα χρόνο νὰ τὶς διορθώσω.  Μὲ τὸ
Guix μπορῶ ἁπλῶς νὰ ἐπαναφέρω προηγούμενη λειτουργικὴ
γενιὰ ἂν μιὰ ἐνημέρωση ἢ μιὰ δική μου λανθασμένη διαμόρφωση προκαλέσει
βλάβη.</li>
</ul>
</li>
<li><code>Ἀναπαραγωγιμότητα</code>
<ul>
<li>Ὅρισε τὴ διάταξή σου μία φορά, τρέξε τὴν ὁπουδήποτε.  Δὲν θέλω νὰ
στήνω τίποτα χειροκίνητα.</li>
</ul>
</li>
<li><code>Ἁπλότητα</code>
<ul>
<li>Ὁλόκληρος ὁ κώδικας τοῦ Guix βρίσκεται σὲ <a href="https://codeberg.org/guix/guix">ἕνα ἀποθετήριο</a> καὶ εἶναι σχεδὸν
ἐξ ὁλοκλήρου γραμμένος σὲ μία γλώσσα, Guile Scheme.  Ἂν βρεῖς
ὁποιαδήποτε προβλήματα μὲ μιὰ ὑπηρεσία ἢ ἕνα πακέτο, μπορεῖς νὰ τὸ
ἐπαναορίσεις ὅπως θέλεις στὴ διαμόρφωσή σου.</li>
</ul>
</li>
</ul>
<h2 id="γιατί-νὰ-αὐτοφιλοξενεῖς-git-διακομιστή">Γιατί νὰ αὐτοφιλοξενεῖς git διακομιστή;</h2>
<p>Γιατί νὰ μὴν αὐτοφιλοξενεῖς τὰ δικά σου ἔργα;  Τὸ θεωρῶ ἀντίθετο πρὸς
τὸ ἦθος τοῦ FOSS, καὶ ἴσως ἀκόμα καὶ εἰρωνικό, νὰ βασίζεσαι σὲ
ἰδιόκτητες πλατφόρμες γιὰ τὴ διανομὴ ἐλεύθερου λογισμικοῦ.</p>
<p>Ἡ φιλοξενία ἑνὸς διακομιστῆ Git εἶναι ἁπλὴ καὶ ἀπαιτεῖ ἐλάχιστους
πόρους.</p>
<h2 id="πρόβλημα-uri-git-http-backend-καὶ-διόρθωση">Πρόβλημα uri git-http-backend &ldquo;/&rdquo; καὶ διόρθωση</h2>
<p>Τὸ Guix ἔχει ξεχωριστὸ τύπο δεδομένων διαμόρφωσης γιὰ τὴν ἐξυπηρέτηση
ἀποθετηρίων Git μέσω HTTP.  Πρὸς τὸ παρόν, ἡ κανονικὴ ἔκφραση ποὺ χρησιμοποιεῖ
δὲν ἐπιτρέπει τὸ ριζικὸ URI <code>&quot;/&quot;</code> νὰ χρησιμοποιηθεῖ γιὰ ἐξυπηρέτηση
(<a href="https://lists.gnu.org/archive/html/help-guix/2022-07/msg00002.html">ἀρχειοθετημένη ἀναφορά</a>).</p>
<p>Τὸ πρόβλημα βρίσκεται στὴ μονάδα <code>(gnu services version-control)</code>,
συγκεκριμένα σὲ αὐτὸ τὸ μέρος:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(define* (git-http-nginx-location-configuration <span style="color:#e6db74">#:optional</span>
</span></span><span style="display:flex;"><span>                                                (config
</span></span><span style="display:flex;"><span>                                                 (git-http-configuration)))
</span></span><span style="display:flex;"><span>  (match config
</span></span><span style="display:flex;"><span>    (($ &lt;git-http-configuration&gt; package git-root export-all?
</span></span><span style="display:flex;"><span>                                 uri-path fcgiwrap-socket)
</span></span><span style="display:flex;"><span>     (nginx-location-configuration
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">;; ISSUE here: regex won&#39;t allow for &#34;/&#34;</span>
</span></span><span style="display:flex;"><span>      (uri (string-append <span style="color:#e6db74">&#34;~ /&#34;</span> (string-trim-both uri-path <span style="color:#960050;background-color:#1e0010">#</span>\/) <span style="color:#e6db74">&#34;(/.*)&#34;</span>))
</span></span><span style="display:flex;"><span>      (body
</span></span><span style="display:flex;"><span>       (<span style="color:#a6e22e">list</span>
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">list</span> <span style="color:#e6db74">&#34;fastcgi_pass &#34;</span> fcgiwrap-socket <span style="color:#e6db74">&#34;;&#34;</span>)
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">list</span> <span style="color:#e6db74">&#34;fastcgi_param SCRIPT_FILENAME &#34;</span>
</span></span><span style="display:flex;"><span>              package <span style="color:#e6db74">&#34;/libexec/git-core/git-http-backend&#34;</span>
</span></span><span style="display:flex;"><span>              <span style="color:#e6db74">&#34;;&#34;</span>)
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;fastcgi_param QUERY_STRING $query_string;&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;fastcgi_param REQUEST_METHOD $request_method;&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;fastcgi_param CONTENT_TYPE $content_type;&#34;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;fastcgi_param CONTENT_LENGTH $content_length;&#34;</span>
</span></span><span style="display:flex;"><span>        (if export-all?
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;fastcgi_param GIT_HTTP_EXPORT_ALL \&#34;\&#34;;&#34;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;&#34;</span>)
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">list</span> <span style="color:#e6db74">&#34;fastcgi_param GIT_PROJECT_ROOT &#34;</span> git-root <span style="color:#e6db74">&#34;;&#34;</span>)
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">list</span> <span style="color:#e6db74">&#34;fastcgi_param GIT_CONFIG_GLOBAL &#34;</span>
</span></span><span style="display:flex;"><span>              (plain-file <span style="color:#e6db74">&#34;gitconfig&#34;</span>
</span></span><span style="display:flex;"><span>                          (string-append <span style="color:#e6db74">&#34;[safe]\n\tdirectory = &#34;</span> git-root <span style="color:#e6db74">&#34;/*\n&#34;</span>))
</span></span><span style="display:flex;"><span>              <span style="color:#e6db74">&#34;;&#34;</span>)
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;fastcgi_param PATH_INFO $1;&#34;</span>))))))
</span></span></code></pre></div><p>Εὐτυχῶς, μποροῦμε εὔκολα νὰ τὸ λύσουμε ἐπαναορίζοντας τὸ
<code>(gnu services version-control)</code>.</p>
<ul>
<li>Οἱ διαφορές μου (διορθωτικὸ ἀπόσπασμα) γιὰ νὰ διορθώσω αὐτὸ τὸ πρόβλημα, καθὼς καὶ νὰ
καθορίσω ἐνέργειες git:</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-diff" data-lang="diff"><span style="display:flex;"><span>diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
</span></span><span style="display:flex;"><span>index a7f40812a6c..e33e5de21f0 100644
</span></span><span style="display:flex;"><span><span style="color:#f92672">--- a/gnu/services/version-control.scm
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+++ b/gnu/services/version-control.scm
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">@@ -235,7 +235,11 @@ (define* (git-http-nginx-location-configuration #:optional
</span></span></span><span style="display:flex;"><span>     (($ &lt;git-http-configuration&gt; package git-root export-all?
</span></span><span style="display:flex;"><span>                                  uri-path fcgiwrap-socket)
</span></span><span style="display:flex;"><span>      (nginx-location-configuration
</span></span><span style="display:flex;"><span><span style="color:#f92672">-      (uri (string-append &#34;~ /&#34; (string-trim-both uri-path #\/) &#34;(/.*)&#34;))
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+      (uri (string-append &#34;~ &#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+			  (if (string=? uri-path &#34;/&#34;)
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+                              &#34;&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+                              (string-append &#34;/&#34; (string-trim-both uri-path #\/)))
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+			  &#34;/(info/refs|git-upload-pack|git-receive-pack)&#34;))
</span></span></span><span style="display:flex;"><span>       (body
</span></span><span style="display:flex;"><span>        (list
</span></span><span style="display:flex;"><span>         (list &#34;fastcgi_pass &#34; fcgiwrap-socket &#34;;&#34;)
</span></span><span style="display:flex;"><span><span style="color:#75715e">@@ -254,7 +258,7 @@ (define* (git-http-nginx-location-configuration #:optional
</span></span></span><span style="display:flex;"><span>               (plain-file &#34;gitconfig&#34;
</span></span><span style="display:flex;"><span>                           (string-append &#34;[safe]\n\tdirectory = &#34; git-root &#34;/*\n&#34;))
</span></span><span style="display:flex;"><span>               &#34;;&#34;)
</span></span><span style="display:flex;"><span><span style="color:#f92672">-        &#34;fastcgi_param PATH_INFO $1;&#34;))))))
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+        &#34;fastcgi_param PATH_INFO $uri;&#34;))))))
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> ;;;
</span></span></code></pre></div><p>Μπορεῖς νὰ βρεῖς τὴν πλήρη μονάδα ποὺ χρησιμοποιῶ <a href="https://git.thanosapollo.org/dotfiles/tree/guix/services/version-control.scm">ἐδῶ</a> στὸ
ἀποθετήριο dotfiles μου.</p>
<p>Θὰ συνιστοῦσα νὰ δημιουργήσεις τὴ δική σου μονάδα καὶ νὰ τὴν φορτώσεις
τρέχοντας τὴν ἑξῆς ἐντολή:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo guix system reocnfigure ~/dotfiles/guix/server-config.scm -L ~/dotfiles/guix
</span></span></code></pre></div><h2 id="διαμόρφωση-cgit-service-type">Διαμόρφωση <code>cgit-service-type</code></h2>
<p>Τὸ Guix παρέχει μονάδα ὑπηρεσίας cgit <code>(gnu services cgit)</code>.</p>
<blockquote>
<p>Μερικὰ πράγματα νὰ σημειώσεις:</p>
<ul>
<li>Μπορεῖς νὰ δώσεις <code>css</code> καὶ <code>favicon</code> μὲ ἐξωτερικὴ διεύθυνση URL.  Μπορεῖς
νὰ βρεῖς τὴ μορφοποίηση CSS ποὺ χρησιμοποιῶ <a href="https://thanosapollo.org/cgit.css">ἐδῶ</a>.</li>
</ul>
</blockquote>
<p>Παράδειγμα <code>cgit-service-type</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#66d9ef">define </span>my/git-repos
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">list</span>
</span></span><span style="display:flex;"><span>   (<span style="color:#a6e22e">repository-cgit-configuration</span>
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">url</span> <span style="color:#e6db74">&#34;repo1&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">name</span> <span style="color:#e6db74">&#34;repo1&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">desc</span> <span style="color:#e6db74">&#34;Example Repo 1&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">path</span> <span style="color:#e6db74">&#34;/srv/git/repo1&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">section</span> <span style="color:#e6db74">&#34;Section 1&#34;</span>))
</span></span><span style="display:flex;"><span>   (<span style="color:#a6e22e">repository-cgit-configuration</span>
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">url</span> <span style="color:#e6db74">&#34;repo2&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">name</span> <span style="color:#e6db74">&#34;repo2&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">desc</span> <span style="color:#e6db74">&#34;Example Repo 2&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">path</span> <span style="color:#e6db74">&#34;/srv/git/repo2&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">homepage</span> <span style="color:#e6db74">&#34;https://myhomepage&#34;</span>)
</span></span><span style="display:flex;"><span>     (<span style="color:#a6e22e">section</span> <span style="color:#e6db74">&#34;Section 2&#34;</span>))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#a6e22e">service</span> cgit-service-type
</span></span><span style="display:flex;"><span>         (<span style="color:#a6e22e">cgit-configuration</span>
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">package</span> cgit)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">root-desc</span> <span style="color:#e6db74">&#34;Root Desc&#34;</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">repository-directory</span> <span style="color:#e6db74">&#34;&#34;</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">root-title</span> <span style="color:#e6db74">&#34;Root Title&#34;</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">repositories</span> my/git-repos)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">enable-index-owner?</span> <span style="color:#66d9ef">#f</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">enable-http-clone?</span> <span style="color:#66d9ef">#f</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">clone-prefix</span> <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;https://git.thanosapollo.org&#34;</span>)) <span style="color:#75715e">;; change this to your own url</span>
</span></span><span style="display:flex;"><span>           <span style="color:#75715e">;; Cache</span>
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-root</span> <span style="color:#e6db74">&#34;/var/cache/cgit&#34;</span>)
</span></span><span style="display:flex;"><span>           <span style="color:#75715e">;; 20000 = 5 hours.  Feel free to adjust this.</span>
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-size</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-static-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-dynamic-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-repo-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-root-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-scanrc-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-about-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">cache-snapshot-ttl</span> <span style="color:#ae81ff">20000</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">case-sensitive-sort?</span> <span style="color:#66d9ef">#f</span>)
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">css</span> <span style="color:#e6db74">&#34;https://thanosapollo.org/cgit.css&#34;</span>) <span style="color:#75715e">;; My personal css.</span>
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">nginx</span>
</span></span><span style="display:flex;"><span>            (<span style="color:#a6e22e">list</span>
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">nginx-server-configuration</span>
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">server-name</span> <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;git.thanosapollo.org&#34;</span>))
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">root</span> cgit)
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">try-files</span> (list <span style="color:#e6db74">&#34;$uri&#34;</span> <span style="color:#e6db74">&#34;@cgit&#34;</span>))
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;; I use cloudflare tunnel, which handles certs for me.</span>
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">listen</span> <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;80&#34;</span>))
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">ssl-certificate</span> <span style="color:#66d9ef">#f</span>)
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">ssl-certificate-key</span> <span style="color:#66d9ef">#f</span>)
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;; ;; If you use certbot try the following:</span>
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;; (listen &#39;(&#34;443 ssl&#34;))</span>
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;; (ssl-certificate</span>
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;;  &#34;/etc/certs/git.my-host.org/fullchain.pem&#34;)</span>
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;; (ssl-certificate-key</span>
</span></span><span style="display:flex;"><span>               <span style="color:#75715e">;;  &#34;/etc/certs/git.my-host.org/privkey.pem&#34;)</span>
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">locations</span>
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">list</span>
</span></span><span style="display:flex;"><span>                 (<span style="color:#a6e22e">nginx-location-configuration</span>
</span></span><span style="display:flex;"><span>                   (<span style="color:#a6e22e">uri</span> <span style="color:#e6db74">&#34;@cgit&#34;</span>)
</span></span><span style="display:flex;"><span>                   (<span style="color:#a6e22e">body</span> <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;&#34;</span>
</span></span><span style="display:flex;"><span>                           <span style="color:#e6db74">&#34;fastcgi_param PATH_INFO $uri;&#34;</span>
</span></span><span style="display:flex;"><span>                           <span style="color:#e6db74">&#34;fastcgi_param QUERY_STRING $args;&#34;</span>
</span></span><span style="display:flex;"><span>                           <span style="color:#e6db74">&#34;fastcgi_param HTTP_HOST $server_name;&#34;</span>
</span></span><span style="display:flex;"><span>                           <span style="color:#e6db74">&#34;fastcgi_pass 127.0.0.1:9000;&#34;</span>)))
</span></span><span style="display:flex;"><span>                 (<span style="color:#a6e22e">git-http-nginx-location-configuration</span>
</span></span><span style="display:flex;"><span>                  (<span style="color:#a6e22e">git-http-configuration</span>
</span></span><span style="display:flex;"><span>                    (<span style="color:#a6e22e">uri-path</span> <span style="color:#e6db74">&#34;/&#34;</span>)
</span></span><span style="display:flex;"><span>                    (<span style="color:#a6e22e">export-all?</span> <span style="color:#66d9ef">#t</span>))))))))))
</span></span></code></pre></div><p>Μπορεῖς νὰ βρεῖς τὴ διαμόρφωση τοῦ οἰκιακοῦ μου διακομιστῆ <a href="https://git.thanosapollo.org/dotfiles/tree/guix/theodora.scm">ἐδῶ</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>(Βίντεο) Ἤμαξ Notmuch μὲ πολλαπλὲς διευθύνσεις &amp; αὐτόματη κρυπτογράφηση</title>
      <link>https://thanosapollo.org/el/posts/emacs-notmuch-video-guide/</link>
      <pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/emacs-notmuch-video-guide/</guid>
      <description>Ὁδηγὸς βίντεο γιὰ διαχείριση ἠλεκτρονικοῦ ταχυδρομείου μὲ Ἤμαξ, χρησιμοποιώντας notmuch &amp;amp; isync.</description>
      <content:encoded><![CDATA[<p>Αὐτὸς ὁ ὁδηγὸς παρέχει γρήγορη ρύθμιση γιὰ διαμόρφωση Notmuch μὲ GNU
Ἤμαξ γιὰ χειρισμὸ πολλαπλῶν διευθύνσεων ἠλεκτρονικοῦ ταχυδρομείου καὶ ἐνεργοποίηση
αὐτόματης κρυπτογράφησης.</p>
<p>Τὸ Notmuch ὑπῆρξε ἐξαιρετικὰ χρήσιμο γιὰ μένα τὸν περασμένο χρόνο, καὶ
ἐλπίζω αὐτὸς ὁ ὁδηγὸς νὰ βοηθήσει νέους χρήστες νὰ ξεπεράσουν τὰ ἀρχικὰ
ἐμπόδια.</p>
<center>
<p><i>Ἤμαξ Notmuch μὲ πολλαπλὲς διευθύνσεις καὶ αὐτόματη κρυπτογράφηση</i><p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/P42C5wEQK-Y?si=wbDx5y3zH5Wd23gE" title="Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</center>
<blockquote>
<p>Σημειώσεις βίντεο:</p>
</blockquote>
<h2 id="σύνοψις">Σύνοψις</h2>
<ul>
<li>Ἐπίδειξη ροῆς ἐργασίας ἠλεκτρονικοῦ ταχυδρομείου Ἤμαξ μὲ <code>notmuch.el</code>.
<ul>
<li>Ἀποστολὴ μηνυμάτων ἀπὸ πολλαπλὲς διευθύνσεις, χρησιμοποιώντας <a href="%5C%2Asmtpmail">smtpmail</a>.</li>
<li>Αὐτόματη κρυπτογράφηση μηνυμάτων ἠλεκτρονικοῦ ταχυδρομείου, ἂν ὑπάρχει διαθέσιμο κλειδὶ pgp, χρησιμοποιώντας <a href="%5C%2Amml-sec">mml-sec</a>.</li>
</ul>
</li>
</ul>
<h2 id="γιατί-notmuch">Γιατί notmuch</h2>
<ul>
<li>Ἐνσωματωμένη ὑποστήριξη Ἤμαξ, μὲ <code>notmuch.el</code>.
<ul>
<li>Πακέτα ὅπως <a href="https://github.com/tarsius/ol-notmuch">ol-notmuch</a> φέρνουν ἐνσωμάτωση μὲ τὸ ὑπόλοιπο
οἰκοσύστημα Ἤμαξ.</li>
</ul>
</li>
<li>Τὸ Notmuch εἶναι <code>σύστημα βασισμένο σὲ ἐτικέτες</code>.  Δὲν βασίζεσαι
στὸν πάροχο ἠλεκτρονικοῦ ταχυδρομείου σου γιὰ κανόνες φίλτρων κ.λπ. γιὰ νὰ ὀργανώσεις
τὴν ἀλληλογραφία σου σὲ ξεχωριστὰ γραμματοκιβώτια.
<ul>
<li>Πράγμα ποὺ εἶναι ἀναποτελεσματικὸ ἐξαρχῆς ὅταν δουλεύεις μὲ
χιλιάδες++ μηνύματα ἠλεκτρονικοῦ ταχυδρομείου.</li>
<li>Αὐτὸ ἐπίσης κάνει εὐκολότερη τὴ μετάβαση σὲ νέο πάροχο ἠλεκτρονικοῦ ταχυδρομείου.</li>
</ul>
</li>
<li>Τοπικὴ ἀποθήκευση ἀλληλογραφίας.</li>
<li>Ἐξαιρετικὴ ἐπίδοση γιὰ φιλτράρισμα καὶ ἀναζήτηση μέσα ἀπὸ ἑκατοντάδες
χιλιάδες μηνύματα.</li>
</ul>
<h2 id="ὑποθέσεις-ποὺ-κάνω-γιὰ-αὐτὸ-τὸ-βίντεο">Ὑποθέσεις ποὺ κάνω γιὰ αὐτὸ τὸ βίντεο</h2>
<h3 id="ἔχεις-λειτουργικὴ-διαμόρφωση-ἤμαξ">Ἔχεις λειτουργικὴ διαμόρφωση Ἤμαξ</h3>
<h3 id="ὁ-πάροχος-ἠλεκτρονικοῦ-ταχυδρομείου-σου-ὑποστηρίζει-ἀνάκτηση-καὶ-ἀποστολὴ-ἀλληλογραφίας-μέσω-ἐφαρμογῶν-τρίτων">Ὁ πάροχος ἠλεκτρονικοῦ ταχυδρομείου σου ὑποστηρίζει ἀνάκτηση καὶ ἀποστολὴ ἀλληλογραφίας μέσω ἐφαρμογῶν τρίτων</h3>
<ul>
<li>Ἤδη ξέρεις πῶς νὰ ρυθμίσεις <code>isync/mbsync</code> γιὰ ἀνάκτηση μηνυμάτων ἠλεκτρονικοῦ ταχυδρομείου ἀπὸ
ἀπομακρυσμένο διακομιστή.</li>
<li>Ὁ πάροχος ἠλεκτρονικοῦ ταχυδρομείου σου προσφέρει διαπιστευτήρια <code>smtp</code> γιὰ χρήση
ἐφαρμογῶν τρίτων.
<ul>
<li>Προσωπικὰ συνιστῶ νὰ δοκιμάσεις τὸ <code>purelymail.com</code> <strong>κοστίζει
μόνο 10$/χρόνο καὶ προσφέρει καλὴ ὑπηρεσία</strong>.</li>
</ul>
</li>
</ul>
<p><em>Παράδειγμα διαμόρφωσης isyncrc</em> <code>~/.config/isyncrc</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-cfg" data-lang="cfg"><span style="display:flex;"><span><span style="color:#a6e22e">IMAPAccount gmail</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Host imap.gmail.com</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Port 993</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">User user@gmail.com # Change this to your username.</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">PassCmd &#34;pass gmail/account&#34; # Change this to a command that returns your password.</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">TLSType IMAPS</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">TLSVersions +1.2</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">CertificateFile /etc/ssl/certs/ca-certificates.crt</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">IMAPStore gmail-remote</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Account gmail</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">MaildirStore gmail-local</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Path ~/Mail/gmail/</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Inbox ~/Mail/gmail/Inbox</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Trash ~/Mail/gmail/Trash</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">SubFolders Verbatim</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Channel gmail</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Far :gmail-remote:</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Near :gmail-local:</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Patterns *</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Expunge None</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">CopyArrivalDate yes</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Sync All</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Create Both</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">SyncState *</span>
</span></span></code></pre></div><p>Μετὰ τὴν προσαρμογὴ τῆς παραπάνω διαμόρφωσης, τρέξε <code>mbsync -a</code> γιὰ νὰ
συγχρονίσεις τὸ ἀπομακρυσμένο γραμματοκιβώτιο τοπικά.</p>
<h2 id="ρύθμιση-notmuch">Ρύθμιση notmuch</h2>
<h3 id="πρώτη-ἐγκατάσταση">Πρώτη ἐγκατάσταση</h3>
<ul>
<li>Μετὰ τὴν ἐγκατάσταση notmuch γιὰ πρώτη φορά, τρέξε <code>notmuch setup</code>
γιὰ διαδραστικὴ ρύθμιση.</li>
</ul>
<h3 id="δημιούργησε-dot-scripts-notmuch-hook-dot-sh">Δημιούργησε <code>~/.scripts/notmuch-hook.sh</code></h3>
<ul>
<li>Σενάριο Bash ποὺ θὰ φιλτράρει/ἐπισημαίνει τὴν ἀλληλογραφία σου</li>
</ul>
<p>Παράδειγμα:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/sh
</span></span></span><span style="display:flex;"><span>notmuch new
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Add +inbox tag to a specific alias/address</span>
</span></span><span style="display:flex;"><span>notmuch tag +inbox -- to:main@address.org
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Sent messages, change this to your mail addresses</span>
</span></span><span style="display:flex;"><span>notmuch tag -unread -new -inbox +sent -- from:*@mydomain.org or from:*@mydomain.com or from:user@gmail.com
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Example for Emacs-devel</span>
</span></span><span style="display:flex;"><span>notmuch tag +emacs-devel -new -inbox -- from:emacs-devel@gnu.org or to:emacs-devel@gnu.org
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Example for Github</span>
</span></span><span style="display:flex;"><span>notmuch tag +github -- from:*github.com
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Filter based on other tags, such as drafts</span>
</span></span><span style="display:flex;"><span>notmuch tag -inbox -sent -inbox -- tag:draft
</span></span></code></pre></div><h2 id="διαμόρφωση-ἤμαξ">Διαμόρφωση Ἤμαξ</h2>
<h3 id="notmuch">Notmuch</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package notmuch
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (defun thanos/notmuch-update--command (new-buffer)
</span></span><span style="display:flex;"><span>    (let ((default-directory <span style="color:#e6db74">&#34;~/.scripts/&#34;</span>)) <span style="color:#75715e">;; Directory where notmuch script is located.</span>
</span></span><span style="display:flex;"><span>      (async-shell-command <span style="color:#e6db74">&#34;mbsync -a; ./notmuch-hook.sh&#34;</span> new-buffer)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/notmuch-update ()
</span></span><span style="display:flex;"><span>    (interactive)
</span></span><span style="display:flex;"><span>    (let* ((buffer (generate-new-buffer <span style="color:#e6db74">&#34;*notmuch update*&#34;</span>))
</span></span><span style="display:flex;"><span>           (height (<span style="color:#a6e22e">max</span> <span style="color:#ae81ff">5</span> (<span style="color:#a6e22e">truncate</span> (<span style="color:#a6e22e">*</span> (frame-height) <span style="color:#ae81ff">0.1</span>))))
</span></span><span style="display:flex;"><span>           (window (split-window-vertically (<span style="color:#a6e22e">-</span> height))))
</span></span><span style="display:flex;"><span>      (with-selected-window window
</span></span><span style="display:flex;"><span>        (switch-to-buffer buffer)
</span></span><span style="display:flex;"><span>        (let ((proc (thanos/notmuch-update--command buffer)))
</span></span><span style="display:flex;"><span>          (<span style="color:#a6e22e">set-process-sentinel</span>
</span></span><span style="display:flex;"><span>           (<span style="color:#a6e22e">get-buffer-process</span> buffer)
</span></span><span style="display:flex;"><span>           (lambda (process event)
</span></span><span style="display:flex;"><span>             (when (<span style="color:#a6e22e">memq</span> (<span style="color:#a6e22e">process-status</span> process) <span style="color:#f92672">&#39;</span>(exit <span style="color:#a6e22e">signal</span>))
</span></span><span style="display:flex;"><span>               (delete-window (<span style="color:#a6e22e">get-buffer-window</span> (<span style="color:#a6e22e">process-buffer</span> process)))
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">kill-buffer</span> (<span style="color:#a6e22e">process-buffer</span> process)))))))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/notmuch-search ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Custom notmuch-search wrapper, that makes sure we have newest mail first.&#34;</span>
</span></span><span style="display:flex;"><span>    (interactive)
</span></span><span style="display:flex;"><span>    (let ((query (notmuch-read-query <span style="color:#e6db74">&#34;Notmuch search: &#34;</span>)))
</span></span><span style="display:flex;"><span>      (notmuch-search query <span style="color:#66d9ef">nil</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Configure saved searches to your liking, here&#39;s an example:</span>
</span></span><span style="display:flex;"><span>  (setf notmuch-saved-searches
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">`</span>((:name <span style="color:#e6db74">&#34;Week&#39;s Inbox&#34;</span> :query <span style="color:#e6db74">&#34;tag:inbox date:7d..today&#34;</span> :sort-order newest-first
</span></span><span style="display:flex;"><span>                 :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;i&#34;</span>))
</span></span><span style="display:flex;"><span>          (:name <span style="color:#e6db74">&#34;Inbox&#34;</span> :query <span style="color:#e6db74">&#34;tag:inbox&#34;</span> :sort-order newest-first :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;I&#34;</span>))
</span></span><span style="display:flex;"><span>          (:name <span style="color:#e6db74">&#34;Unread&#34;</span> :query <span style="color:#e6db74">&#34;tag:unread&#34;</span> :sort-order newest-first :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;u&#34;</span>))
</span></span><span style="display:flex;"><span>          (:name <span style="color:#e6db74">&#34;Today&#39;s message&#34;</span> :query <span style="color:#e6db74">&#34;tag:inbox date:today&#34;</span>
</span></span><span style="display:flex;"><span>                 :sort-order newest-first :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;t&#34;</span>))
</span></span><span style="display:flex;"><span>          (:name <span style="color:#e6db74">&#34;sent&#34;</span> :query <span style="color:#e6db74">&#34;tag:sent&#34;</span> :sort-order newest-first :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;s&#34;</span>))
</span></span><span style="display:flex;"><span>          (:name <span style="color:#e6db74">&#34;drafts&#34;</span> :query <span style="color:#e6db74">&#34;tag:draft&#34;</span> :sort-order newest-first :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;d&#34;</span>))
</span></span><span style="display:flex;"><span>          (:name <span style="color:#e6db74">&#34;all mail&#34;</span> :query <span style="color:#e6db74">&#34;*&#34;</span> :sort-order oldest-first :key <span style="color:#f92672">,</span>(kbd <span style="color:#e6db74">&#34;a&#34;</span>))))
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Tag format configuration</span>
</span></span><span style="display:flex;"><span>  (setf notmuch-tag-formats
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;unread&#34;</span> (<span style="color:#a6e22e">propertize</span> tag <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;notmuch-tag-unread</span>))))
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-x m&#34;</span> <span style="color:#f92672">.</span> notmuch-hello)
</span></span><span style="display:flex;"><span>         :map notmuch-hello-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;u&#34;</span> <span style="color:#f92672">.</span> notmuch-hello-update)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;U&#34;</span> <span style="color:#f92672">.</span> thanos/notmuch-update)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;s&#34;</span> <span style="color:#f92672">.</span> thanos/notmuch-search)
</span></span><span style="display:flex;"><span>         :map notmuch-search-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;u&#34;</span> <span style="color:#f92672">.</span> notmuch-refresh-all-buffers)))
</span></span></code></pre></div><h3 id="smtpmail">smtpmail</h3>
<ul>
<li>Αὐτὴ ἡ διαμόρφωση χρησιμοποιεῖται γιὰ ἀποστολὴ μηνυμάτων ἠλεκτρονικοῦ ταχυδρομείου ἀπὸ πολλαπλὲς
διευθύνσεις· βεβαιώσου ὅτι ἔχεις ἀποθηκευμένο τὸν κωδικὸ
πρόσβασης στὸ <code>~/.authinfo.gpg</code> ποὺ ὁ Ἤμαξ θὰ χρησιμοποιήσει ἐκ
προεπιλογῆς.</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package smtpmail
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Default credentials</span>
</span></span><span style="display:flex;"><span>  (setf smtpmail-smtp-user (auth-source-pass-get <span style="color:#e6db74">&#34;user&#34;</span> <span style="color:#e6db74">&#34;gmail/user&#34;</span>) <span style="color:#75715e">;; This is not your password, just the username.  Emacs will search for your pw in ~/.authinfo.gpg.</span>
</span></span><span style="display:flex;"><span>        smtpmail-smtp-server <span style="color:#e6db74">&#34;smtp.gmail.com&#34;</span>
</span></span><span style="display:flex;"><span>        smtpmail-smtp-service <span style="color:#ae81ff">465</span> <span style="color:#75715e">;; Adjust this to your mail provider port if needed</span>
</span></span><span style="display:flex;"><span>        smtpmail-stream-type <span style="color:#e6db74">&#39;ssl</span>
</span></span><span style="display:flex;"><span>        message-send-mail-function <span style="color:#e6db74">&#39;smtpmail-send-it</span>
</span></span><span style="display:flex;"><span>        message-signature <span style="color:#e6db74">&#34;My signature&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/mail-config-hook ()
</span></span><span style="display:flex;"><span>    (let ((from (mail-fetch-field <span style="color:#e6db74">&#34;From&#34;</span>))
</span></span><span style="display:flex;"><span>          (public <span style="color:#e6db74">&#34;&lt;public@thanosapollo.org&gt;&#34;</span>)
</span></span><span style="display:flex;"><span>          (gmail <span style="color:#e6db74">&#34;&lt;104111@students.mu-sofia.bg&gt;&#34;</span>))
</span></span><span style="display:flex;"><span>      (cond ((<span style="color:#a6e22e">string-match</span> public from)
</span></span><span style="display:flex;"><span>             (setf smtpmail-smtp-user (auth-source-pass-get <span style="color:#e6db74">&#34;user&#34;</span> <span style="color:#e6db74">&#34;purelymail/thanosapollo&#34;</span>)
</span></span><span style="display:flex;"><span>                   smtpmail-smtp-server <span style="color:#e6db74">&#34;smtp.purelymail.com&#34;</span>))
</span></span><span style="display:flex;"><span>            ((<span style="color:#a6e22e">string-match</span> gmail from)
</span></span><span style="display:flex;"><span>             (setf smtpmail-smtp-user <span style="color:#e6db74">&#34;104111@students.mu-sofia.bg&#34;</span>
</span></span><span style="display:flex;"><span>                   smtpmail-smtp-server <span style="color:#e6db74">&#34;smtp.gmail.com&#34;</span>)))))
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; You can use :hook instead, but I prefer add-hook under :config personally.</span>
</span></span><span style="display:flex;"><span>  (add-hook <span style="color:#e6db74">&#39;message-send-hook</span> <span style="color:#a6e22e">#&#39;</span>thanos/mail-config-hook))
</span></span></code></pre></div><h3 id="mml-sec">mml-sec</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package mml-sec
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (defun gpg-list-emails-available ()
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Return a list of trusted emails.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Parses output of `gpg --list-keys --with-colons&#39; command into a
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">list of emails.&#34;</span>
</span></span><span style="display:flex;"><span>  (let* ((command <span style="color:#e6db74">&#34;gpg --list-keys --with-colons&#34;</span>)
</span></span><span style="display:flex;"><span>         (output (shell-command-to-string command))
</span></span><span style="display:flex;"><span>         (lines (split-string output <span style="color:#e6db74">&#34;\n&#34;</span> <span style="color:#66d9ef">t</span>))
</span></span><span style="display:flex;"><span>         (emails <span style="color:#f92672">&#39;</span>()))
</span></span><span style="display:flex;"><span>    (dolist (line lines)
</span></span><span style="display:flex;"><span>      (when (string-prefix-p <span style="color:#e6db74">&#34;uid:&#34;</span> line)
</span></span><span style="display:flex;"><span>        (when (<span style="color:#a6e22e">string-match</span> <span style="color:#e6db74">&#34;&lt;\\([^&gt;]+\\)&gt;&#34;</span> line)
</span></span><span style="display:flex;"><span>          (let ((email (<span style="color:#a6e22e">downcase</span> (string-trim (match-string <span style="color:#ae81ff">1</span> line)))))
</span></span><span style="display:flex;"><span>            (push email emails)))))
</span></span><span style="display:flex;"><span>    (delete-dups emails)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/mail-list-recipients-from-buffer ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Get the list of recipients from the current email buffer.&#34;</span>
</span></span><span style="display:flex;"><span>    (save-excursion
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">goto-char</span> (<span style="color:#a6e22e">point-min</span>))
</span></span><span style="display:flex;"><span>      (let ((to (or (mail-fetch-field <span style="color:#e6db74">&#34;To&#34;</span>) <span style="color:#e6db74">&#34;&#34;</span>))
</span></span><span style="display:flex;"><span>            (cc (or (mail-fetch-field <span style="color:#e6db74">&#34;Cc&#34;</span>) <span style="color:#e6db74">&#34;&#34;</span>))
</span></span><span style="display:flex;"><span>            (bcc (or (mail-fetch-field <span style="color:#e6db74">&#34;Bcc&#34;</span>) <span style="color:#e6db74">&#34;&#34;</span>))
</span></span><span style="display:flex;"><span>            recipients)
</span></span><span style="display:flex;"><span>        (setq recipients (<span style="color:#a6e22e">concat</span> to <span style="color:#e6db74">&#34;, &#34;</span> cc <span style="color:#e6db74">&#34;, &#34;</span> bcc))
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">;; Remove empty strings from the result</span>
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">delq</span> <span style="color:#66d9ef">nil</span>
</span></span><span style="display:flex;"><span>              (<span style="color:#a6e22e">mapcar</span> (lambda (addr)
</span></span><span style="display:flex;"><span>                        (let ((clean-addr (string-trim addr)))
</span></span><span style="display:flex;"><span>                          (when (not (string-empty-p clean-addr))
</span></span><span style="display:flex;"><span>                            (<span style="color:#a6e22e">downcase</span>
</span></span><span style="display:flex;"><span>                             (if (<span style="color:#a6e22e">string-match</span> <span style="color:#e6db74">&#34;&lt;\\([^&gt;]+\\)&gt;&#34;</span> clean-addr)
</span></span><span style="display:flex;"><span>                                 (string-trim (match-string <span style="color:#ae81ff">1</span> clean-addr))
</span></span><span style="display:flex;"><span>                               clean-addr)))))
</span></span><span style="display:flex;"><span>                      (split-string recipients <span style="color:#e6db74">&#34;,&#34;</span> <span style="color:#66d9ef">t</span>))))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/mail-sign-encrypt ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Auto-encrypt if all recipients have keys, else just sign.&#34;</span>
</span></span><span style="display:flex;"><span>    (let ((trusted-emails (gpg-list-emails-available))
</span></span><span style="display:flex;"><span>          (recipients (thanos/mail-list-recipients-from-buffer)))
</span></span><span style="display:flex;"><span>      (if (cl-every (lambda (r) (<span style="color:#a6e22e">member</span> r trusted-emails)) recipients)
</span></span><span style="display:flex;"><span>          (progn
</span></span><span style="display:flex;"><span>            (<span style="color:#a6e22e">message</span> <span style="color:#e6db74">&#34;Encrypting message.&#34;</span>)
</span></span><span style="display:flex;"><span>            (mml-secure-message-sign-encrypt))
</span></span><span style="display:flex;"><span>        (progn
</span></span><span style="display:flex;"><span>          (<span style="color:#a6e22e">message</span> <span style="color:#e6db74">&#34;Just signing message.&#34;</span>)
</span></span><span style="display:flex;"><span>          (mml-secure-message-sign)))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (add-hook <span style="color:#e6db74">&#39;message-send-hook</span> <span style="color:#a6e22e">#&#39;</span>thanos/mail-sign-encrypt)
</span></span><span style="display:flex;"><span>  :custom
</span></span><span style="display:flex;"><span>  (mml-secure-openpgp-signers <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;62B758D0F6719938BC09CECA339F736C3A720928&#34;</span>))) <span style="color:#75715e">;; Change this to your own key!</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Καθημερινὴ χρήση ἑνὸς Raspberry Pi 5</title>
      <link>https://thanosapollo.org/el/posts/daily-drive-pi5-01/</link>
      <pubDate>Fri, 31 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/daily-drive-pi5-01/</guid>
      <description>Ἀντικαθιστώντας τὸ λάπτοπ x220 μου μὲ ἕνα Raspberry Pi 5.</description>
      <content:encoded><![CDATA[<p>Ἀφοῦ πέρασα ἀπὸ συσκευὲς Apple στὸ GNU/Linux, ἔχω ἀπολαύσει πολλὰ
πλεονεκτήματα.  Ὡστόσο, ὑπῆρχε πάντα <em>ἕνα</em> πρᾶγμα ποὺ μὲ ἔκανε νὰ
κοιτάζω πίσω: <em>ἡ διάρκεια μπαταρίας</em>, ἢ ἡ ἔλλειψή της.</p>
<p>Ὄχι πιά :)</p>
<p><strong>Σύνοψις</strong>: Πέρασα ἀπὸ ἕνα <a href="/images/setup-07-11-2023.jpg">thinkpad x220</a> σὲ
ἕνα Raspberry Pi 5, ποὺ χρησιμοποιῶ γιὰ νὰ ἔχω ἀπομακρυσμένη πρόσβαση
στὸν ἐπιτραπέζιό μου ὑπολογιστή.</p>
<figure>
    <img loading="lazy" src="/images/pi-monitor-back-01.png" width="80%" height="80%"/> 
</figure>

<blockquote>
<p>Raspberry Pi 5 μὲ προσαρμοσμένη βάση VESA ἐκτυπωμένη σὲ 3D στὴν ὀθόνη
Raspberry Pi Monitor</p>
</blockquote>
<h2 id="project-goals">Στόχοι τοῦ ἔργου</h2>
<p>Ὁ στόχος μου μὲ αὐτὸ τὸ «ἔργο» εἶναι νὰ ἔχω μιὰ μικρή, φορητὴ καὶ
ἀρθρωτὴ συσκευὴ ποὺ ἁπλῶς νὰ τὴν πετάω στὴν τσάντα καὶ νὰ μὴν ἀνησυχῶ
γιὰ τὴ διάρκεια μπαταρίας της καθ’ ὅλη τὴν ἡμέρα.</p>
<p>Τὸ ἐπιπλέον ποὺ θέλω εἶναι νὰ ἀποδείξω ὅτι δὲν χρειάζεται νὰ «πουλήσεις
τὸ νεφρό σου» καὶ νὰ ὑποκλιθεῖς σὲ μιὰ ἑταιρεία γιὰ τὸ «προνόμιο» νὰ
χρησιμοποιεῖς τὸ ὑλικό της σχεδιασμένο γιὰ ἀπαρχαίωση ἢ τὸ βαρὺ καὶ ὑπερφορτωμένο
λογισμικό της.</p>
<p>Ὑλικὸ ποὺ χρησιμοποιῶ:</p>
<ul>
<li>
<p>Πράγματα ποὺ ἀγόρασα:</p>
<ul>
<li>Raspberry Pi 5 8GB</li>
<li>Raspberry Pi Monitor</li>
</ul>
</li>
<li>
<p>Πράγματα ποὺ εἶχα ἤδη:</p>
<ul>
<li>Φορητὴ μπαταρία 27000 mAh</li>
<li>Πληκτρολόγιο</li>
</ul>
</li>
</ul>
<blockquote>
<p>Ἀγόρασα ἕνα κιτ Raspberry Pi 5 ποὺ ἐρχόταν μὲ ἀνεμιστῆρα θήκης γιὰ
100€.  Τὸ συνολικὸ κόστος γιὰ αὐτὸ τὸ ἔργο ἦταν 195€, γιὰ τὸ Pi καὶ
τὴν ὀθόνη.</p>
</blockquote>
<h3 id="battery-life">Διάρκεια μπαταρίας</h3>
<p>Συνήθως λείπω ἀπὸ τὸ σπίτι πάνω ἀπὸ 7 ὧρες τὴν ἡμέρα γιὰ τὶς σπουδές
μου, καὶ μοῦ ἀρέσει νὰ μελετῶ σὲ καφετέριες καὶ βιβλιοθῆκες.  Μοῦ
ἔλειπε μιὰ συσκευὴ μὲ διάρκεια μπαταρίας 10+ ὧρες, καθὼς τὸ x220 μου
μόλις καὶ μετὰ βίας κρατᾶ πάνω ἀπὸ 4,5 ὧρες.</p>
<p>Χρησιμοποιώντας μία φορητὴ μπαταρία <code>27000mAh</code>, παίρνω ~15 ὧρες διάρκειας
μπαταρίας.  Κουβαλῶ ἐπίσης μία ἐπιπλέον <em>«ἔκτακτης ἀνάγκης»</em> φορητὴ μπαταρία.</p>
<blockquote>
<p>Μὲ μεγάλη δύναμη (καὶ διάρκεια μπαταρίας) ἔρχεται μεγάλη παραγωγικότητα</p>
</blockquote>
<figure>
    <img loading="lazy" src="/images/pi-battery-usage.png" width="30%" height="30%"/> 
</figure>

<blockquote>
<p>Ἡ ὀθόνη καταναλώνει περισσότερη ἐνέργεια ἀπὸ τὸ Pi μου.</p>
</blockquote>
<h3 id="modularity">Ἀρθρωτότητα</h3>
<p>Ἀντιπαθῶ ἔντονα τὰ πληκτρολόγια λάπτοπ καὶ ἐπιμένω νὰ χρησιμοποιῶ
τέτοια μὲ trackpoint.  Πρὸς τὸ παρὸν χρησιμοποιῶ ἕνα
<a href="https://tex.com.tw/products/shinobi">πληκτρολόγιο shinobi</a>, ποὺ ἁπλῶς
μπορῶ νὰ τὸ συνδέσω στὸ Raspberry Pi καὶ νὰ τὸ χρησιμοποιήσω ὅπως στὸν
ἐπιτραπέζιό μου.</p>
<p>Ἂν κάτι δὲν μοῦ ἀρέσει στὴ διάταξη τοῦ Pi μου, θὰ ἦταν πανεύκολο νὰ
τὸ ἀλλάξω, ὅπως νὰ χρησιμοποιήσω νέα ὀθόνη, νέο πληκτρολόγιο ἢ ἄλλη
φορητὴ μπαταρία.</p>
<h3 id="performance-file-synchronization">Ἐπίδοση &amp; συγχρονισμὸς ἀρχείων</h3>
<p>Μπορεῖ τὸ Pi νὰ ξεπεράσει ἕνα σύγχρονο λάπτοπ τῆς κατηγορίας τιμῆς
&gt;1000€; Ναὶ καὶ ὄχι :)</p>
<p>Τώρα, ἴσως ἀναρωτιέσαι· πῶς μπορεῖ τὸ Pi μου νὰ δώσει καλύτερη
ἐπίδοση ἀπὸ, ἂς ποῦμε, ἕνα MacBook Air; Εὔλογη ἐρώτηση, ἀλλὰ ὡς
χρήστης GNU+Linux, ἔχω ἀγκαλιάσει τὶς δυνατότητες.  Ὁτιδήποτε εἶναι
δυνατὸ μὲ λίγο πειραματισμὸ καὶ FOSS μαγεία.</p>
<p>Χρησιμοποιῶ τὸ <a href="https://github.com/neonkore/waypipe">waypipe</a>, ἕναν
διαμεσολαβητὴ Wayland, γιὰ νὰ τρέχω Ἤμαξ ἀπομακρυσμένα μέσω δικτύου.
Ὁ Ἤμαξ τρέχει στὸν ἐπιτραπέζιό μου, ἀλλὰ τὸν προσπελαύνω ἀπὸ τὸ Pi·
ἐξαιρετικὴ ἐπίδοση ἐνῶ ἔχω ἀπρόσκοπτη πρόσβαση σὲ ὅλα τὰ ἀρχεῖα τοῦ
ἐπιτραπέζιου, ὅπως σημειώσεις καὶ PDF, καὶ αὐτὸ ἀφαιρεῖ κάθε ἀνάγκη
συγχρονισμοῦ ἀρχείων μεταξὺ συσκευῶν.</p>
<blockquote>
<p>Ἔχω σύνδεση ὀπτικῆς ἴνας, ὁπότε δὲν ὑπάρχουν προβλήματα καθυστέρησης μεταξὺ
τῶν συσκευῶν μου χρησιμοποιώντας VPN wireguard.</p>
</blockquote>
<figure>
    <img loading="lazy" src="/images/pi-waypipe-01.png"/> 
</figure>

<blockquote>
<p>Ἀπομακρυσμένη πρόσβαση στὴ συνεδρία Ἤμαξ τοῦ ἐπιτραπέζιου, ἄνοιγμα PDF
καὶ eshell.</p>
</blockquote>
<h2 id="conclusion">Συμπέρασμα</h2>
<p>Θὰ χρησιμοποιῶ αὐτὴ τὴ διάταξη γιὰ τὸ ὑπόλοιπο τῆς ἀκαδημαϊκῆς χρονιᾶς.
Μπορεῖ νὰ καταγράψω ἕνα πιὸ λεπτομερὲς βίντεο μὲ συμβουλὲς καὶ
τεχνικὲς γιὰ ἄλλους ποὺ θέλουν νὰ δοκιμάσουν κάτι παρόμοιο.</p>
<p>Μέχρι τώρα αὐτὴ ὑπῆρξε κάτι παραπάνω ἀπὸ ἰδανικὴ διάταξη γιὰ μένα,
καθὼς συχνὰ ξεχνῶ νὰ συγχρονίσω σημειώσεις καὶ ἔργα μεταξὺ συσκευῶν.
Τὸ νὰ μὴν χρειάζεται πιὰ νὰ ἀνησυχῶ γιὰ τὴ διάρκεια μπαταρίας τῆς
συσκευῆς μου εἶναι ἐπίσης ἀρκετὰ χαλαρωτικό.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ παντοῦ, ἀκόμα καὶ σὲ Wayland</title>
      <link>https://thanosapollo.org/el/posts/use-emacs-everywhere/</link>
      <pubDate>Sat, 19 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/use-emacs-everywhere/</guid>
      <description>Πῶς νὰ χρησιμοποιήσεις τὸν Ἤμαξ γιὰ εἰσαγωγὴ κειμένου σὲ κάθε σενάριο στὸ Wayland</description>
      <content:encoded><![CDATA[<p>Ἂν εἶσαι κάτι σὰν κι ἐμένα, μᾶλλον νιώθεις ὅτι κάτι πάει στραβὰ
κάθε φορὰ ποὺ πρέπει νὰ εἰσάγεις κείμενο ἔξω ἀπὸ τὸν Ἤμαξ. Μὴ φοβᾶσαι,
ὑπάρχει λύση.</p>
<p>Νά ἕνα ἁπλὸ ἀπόσπασμα κώδικα γιὰ νὰ ἀνοίγεις προσωρινὸ πλαίσιο Ἤμαξ γιὰ εἰσαγωγὴ ἀντ’ αὐτοῦ.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(defun thanos/wtype-text (text)
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Process TEXT for wtype, handling newlines properly.&#34;</span>
</span></span><span style="display:flex;"><span>  (let* ((has-final-newline (string-match-p <span style="color:#e6db74">&#34;\n$&#34;</span> text))
</span></span><span style="display:flex;"><span>         (lines (split-string text <span style="color:#e6db74">&#34;\n&#34;</span>))
</span></span><span style="display:flex;"><span>         (last-idx (<span style="color:#a6e22e">1-</span> (<span style="color:#a6e22e">length</span> lines))))
</span></span><span style="display:flex;"><span>    (string-join
</span></span><span style="display:flex;"><span>     (cl-loop for line in lines
</span></span><span style="display:flex;"><span>              for i from <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>              collect (cond
</span></span><span style="display:flex;"><span>                       <span style="color:#75715e">;; Last line without final newline</span>
</span></span><span style="display:flex;"><span>                       ((and (<span style="color:#a6e22e">=</span> i last-idx) (not has-final-newline))
</span></span><span style="display:flex;"><span>                        (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;wtype -s 350 \&#34;%s\&#34;&#34;</span>
</span></span><span style="display:flex;"><span>                                (replace-regexp-in-string <span style="color:#e6db74">&#34;\&#34;&#34;</span> <span style="color:#e6db74">&#34;\\\\\&#34;&#34;</span> line)))
</span></span><span style="display:flex;"><span>                       <span style="color:#75715e">;; Any other line</span>
</span></span><span style="display:flex;"><span>                       (<span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>                        (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;wtype -s 350 \&#34;%s\&#34; &amp;&amp; wtype -k Return&#34;</span>
</span></span><span style="display:flex;"><span>                                (replace-regexp-in-string <span style="color:#e6db74">&#34;\&#34;&#34;</span> <span style="color:#e6db74">&#34;\\\\\&#34;&#34;</span> line)))))
</span></span><span style="display:flex;"><span>     <span style="color:#e6db74">&#34; &amp;&amp; &#34;</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(defun thanos/type ()
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Launch a temporary frame with a clean buffer for typing.&#34;</span>
</span></span><span style="display:flex;"><span>  (interactive)
</span></span><span style="display:flex;"><span>  (let ((frame (make-frame <span style="color:#f92672">&#39;</span>((name <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;emacs-float&#34;</span>)
</span></span><span style="display:flex;"><span>                             (fullscreen <span style="color:#f92672">.</span> <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>                             (undecorated <span style="color:#f92672">.</span> <span style="color:#66d9ef">t</span>)
</span></span><span style="display:flex;"><span>                             (width <span style="color:#f92672">.</span> <span style="color:#ae81ff">70</span>)
</span></span><span style="display:flex;"><span>                             (height <span style="color:#f92672">.</span> <span style="color:#ae81ff">20</span>))))
</span></span><span style="display:flex;"><span>        (buf (<span style="color:#a6e22e">get-buffer-create</span> <span style="color:#e6db74">&#34;emacs-float&#34;</span>)))
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">select-frame</span> frame)
</span></span><span style="display:flex;"><span>    (switch-to-buffer buf)
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">erase-buffer</span>)
</span></span><span style="display:flex;"><span>    (org-mode)
</span></span><span style="display:flex;"><span>    (setq-local header-line-format
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34; %s to insert text or %s to cancel.&#34;</span>
</span></span><span style="display:flex;"><span>                        (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;C-c C-c&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;help-key-binding</span>)
</span></span><span style="display:flex;"><span>            (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;C-c C-k&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;help-key-binding</span>)))
</span></span><span style="display:flex;"><span>    (local-set-key (kbd <span style="color:#e6db74">&#34;C-c C-k&#34;</span>)
</span></span><span style="display:flex;"><span>           (lambda () (interactive)
</span></span><span style="display:flex;"><span>             (kill-new (<span style="color:#a6e22e">buffer-string</span>))
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">delete-frame</span>)))
</span></span><span style="display:flex;"><span>    (local-set-key (kbd <span style="color:#e6db74">&#34;C-c C-c&#34;</span>)
</span></span><span style="display:flex;"><span>           (lambda () (interactive)
</span></span><span style="display:flex;"><span>             (start-process-shell-command
</span></span><span style="display:flex;"><span>              <span style="color:#e6db74">&#34;wtype&#34;</span> <span style="color:#66d9ef">nil</span>
</span></span><span style="display:flex;"><span>              (thanos/wtype-text (<span style="color:#a6e22e">buffer-string</span>)))
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">delete-frame</span>)))))
</span></span></code></pre></div><blockquote>
<p><em>Βεβαιώσου ὅτι τὸ <code>wtype</code> εἶναι ἐγκατεστημένο στὸ σύστημά σου γιὰ νὰ δουλεύει τὸ παραπάνω ἀπόσπασμα.</em></p>
</blockquote>
<p>Τὸ μόνο ποὺ ἔχεις νὰ κάνεις τώρα εἶναι νὰ ἀντιστοιχίσεις τὸ <code>emacsclient --eval '(thanos/type)'</code>
σὲ ἕναν συνδυασμὸ πλήκτρων τῆς ἐπιλογῆς σου.</p>
<p>Στὴ διαμόρφωσή μου τοῦ Hyprland χρησιμοποιῶ τὶς ἑξῆς ρυθμίσεις</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>bind = $mainMod, j, exec, emacsclient --eval &#39;(thanos/type)&#39;
</span></span><span style="display:flex;"><span>windowrulev2 = float,class:^(emacs)$,title:^(emacs-float)$ # Launch as a floating window.
</span></span></code></pre></div><blockquote>
<p>Ἂν χρησιμοποιεῖς Xorg, μπορεῖς ἁπλῶς νὰ βασιστεῖς στὸ πακέτο <a href="https://github.com/tecosaur/emacs-everywhere">Emacs Everywhere</a>.
<em>Δυστυχῶς δὲν ὑποστηρίζει ἀκόμη Wayland καὶ δὲν τὸ ἔχω
δοκιμάσει.</em></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Μεγάλη ἐνημέρωση γιὰ τὸ Gnosis: ἔκδοση 0.5.0</title>
      <link>https://thanosapollo.org/el/posts/gnosis-0-5-0-release/</link>
      <pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-0-5-0-release/</guid>
      <description>Τὸ Gnosis μόλις πῆρε μεγάλη ἐνημέρωση μὲ αὐτὴ τὴν ἔκδοση.  Προστέθηκε ἡ ἀπὸ καιρὸ ὑποσχεμένη ὑποστήριξη org-mode μαζὶ μὲ ἄλλες σημαντικὲς ἀλλαγές.</description>
      <content:encoded><![CDATA[<p>Τὸ Gnosis μόλις πῆρε μεγάλη ἐνημέρωση μὲ αὐτὴ τὴν ἔκδοση.  Προστέθηκε ἡ ἀπὸ
καιρὸ ὑποσχεμένη ὑποστήριξη <strong>org-mode</strong> καὶ ὑποστήριξη σύνδεσης
σημειώσεων μὲ κόμβους
<a href="https://thanosapollo.org/projects/org-gnosis/">org-gnosis</a>.</p>
<h2 id="org-mode-support">Ὑποστήριξη Org Mode</h2>
<p>Μετὰ ἀπὸ δουλειὰ/πειραματισμὸ στὸ org-gnosis καὶ καλύτερη κατανόηση τοῦ πῶς
δουλεύει τὸ org-mode, ἀποφάσισα νὰ χρησιμοποιήσω org-mode γιὰ
δημιουργία καὶ ἐξαγωγὴ σημειώσεων gnosis.</p>
<p>Οἱ σημειώσεις, ἀνεξαρτήτως τύπου, θὰ εἶναι πλέον ὡς ἑξῆς:</p>
<blockquote>
<p>Παράδειγμα τύπου cloze.</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-org" data-lang="org"><span style="display:flex;"><span>*<span style="font-weight:bold"> Thema                     </span><span style="font-style:italic"> :pharmacology:antimicrobials:penicillin:</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">:PROPERTIES:
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">:GNOSIS_ID: NEW
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">:GNOSIS_TYPE: cloze
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">:END:</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Keimenon
</span></span><span style="display:flex;"><span>What is the treatment for Actinomyces infection?
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Penicillin
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Hypothesis
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>drug type
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Answer
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Penicillin
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Parathema
</span></span><span style="display:flex;"><span>Sulfonamides → Nocardia
</span></span><span style="display:flex;"><span>Actinomyces → [[<span style="color:#a6e22e">id:680ca944-8ee9-4513-92d6-25696ee01f48</span>][<span style="color:#f92672">Penicillin</span>]]
</span></span><span style="display:flex;"><span>(treatment is a SNAP)
</span></span></code></pre></div><blockquote>
<p>Σημείωσε ὅτι ἡ σύνταξη τύπου anki ἐξακολουθεῖ νὰ ὑποστηρίζεται γιὰ clozes.</p>
</blockquote>
<!--quoteend-->
<blockquote>
<p>Παράδειγμα MCQ</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-org" data-lang="org"><span style="display:flex;"><span>*<span style="font-weight:bold"> Thema                                                           </span><span style="font-style:italic"> :clinical:</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">:PROPERTIES:
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">:GNOSIS_ID: NEW
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">:GNOSIS_TYPE: mcq
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">:END:</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Keimenon
</span></span><span style="display:flex;"><span>A 60-year-old man comes to the physician with chills, nausea, and
</span></span><span style="display:flex;"><span>diffuse muscle aches for 3 days. His niece had similar symptoms 2
</span></span><span style="display:flex;"><span>weeks ago and H3N2 influenza strain was isolated from her respiratory
</span></span><span style="display:flex;"><span>secretions. He received his influenza vaccination 2 months ago. His
</span></span><span style="display:flex;"><span>temperature is 38.5°C. A rapid influenza test is
</span></span><span style="display:flex;"><span>positive. Which of the following mechanisms best explains this
</span></span><span style="display:flex;"><span>patient&#39;s infection despite vaccination?
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Hypothesis
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Random point mutations within viral genome
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Complementing with functional viral proteins
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Exchange of viral genes between chromosomes
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Reassortment of viral RNA segments
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Acquisition of viral surface proteins
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Answer
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">- </span>Random point mutations within viral genome
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">**</span> Parathema
</span></span><span style="display:flex;"><span>Random point mutations within the viral genome are responsible for
</span></span><span style="display:flex;"><span>antigenic drift, which creates a new virus strain.
</span></span></code></pre></div><p>Κάθε σημείωση εἶναι ἕνα <strong>thema</strong> ποὺ ἀποτελεῖται ἀπὸ τὰ ἑξῆς
στοιχεῖα:</p>
<ul>
<li>*Keimenon*· Τὸ κύριο κείμενο ἢ ἡ ἐρώτηση.</li>
<li>*Hypothesis*· Ὑποθέσεις/ὑποδείξεις γιὰ τὸ κείμενο ποὺ ὁδηγοῦν στὴ
σωστὴ ἀπάντηση
<ul>
<li>Γιὰ παράδειγμα χρησιμοποιεῖται ὡς ὑποδείξεις γιὰ τύπο cloze ἢ ὡς
ἐπιλογὲς σὲ MCQ</li>
</ul>
</li>
<li>*Answer*· Ἡ σωστὴ ἀπάντηση ἢ λύση στὸ keimenon.</li>
<li>*Parathema*· ἐπέκταση τοῦ keimenon, ποὺ μπορεῖ νὰ περιλαμβάνει
συνδέσμους π.χ. σὲ θέματα org-gnosis ἢ ἀκόμα καὶ ἀρχεῖα, ὡς τρόπος
σύνδεσης θεμάτων org-gnosis μὲ τὸ τρέχον thema.</li>
</ul>
<p>Προαιρετικά, μπορεῖς ἐπίσης νὰ προσθέσεις ἐτικέτες σὲ κάθε σημείωση.</p>
<p>Οἱ σημειώσεις/themata μποροῦν νὰ ἔχουν πολλαπλὲς hypotheses καὶ
ἀπαντήσεις (<em>ἀνάλογα μὲ τὸν τύπο τους</em>), διαχωρισμένες μὲ
<code>gnosis-export-separator</code>, ποὺ ἐξ ὁρισμοῦ εἶναι <code>&quot;\n-&quot;</code> (νέα
γραμμὴ ἀκολουθούμενη ἀπὸ παύλα).</p>
<h2 id="support-for-exporting-decks">Ὑποστήριξη ἐξαγωγῆς decks</h2>
<p>Προστέθηκε ὑποστήριξη ἐξαγωγῆς decks ὡς ἀρχεῖα org μέσω
<code>gnosis-export-deck</code>.</p>
<h2 id="support-for-org-gnosis-notes">Ὑποστήριξη σημειώσεων org-gnosis</h2>
<blockquote>
<p>Μὲ αὐτὴ τὴν ἐνημέρωση τὸ org-gnosis εἶναι ἐπιτέλους μέρος τοῦ gnosis.
Ὁ στόχος δὲν εἶναι ἁπλῶς ἕνα ἐργαλεῖο ἐπανάληψης μὲ διαστήματα, ἀλλὰ
ἕνα ὁλοκληρωμένο ἐργαλεῖο μάθησης.</p>
</blockquote>
<p>Μὲ αὐτὴ τὴ νέα ἐνημέρωση μπορεῖς νὰ κάνεις ἐπαναλήψεις γιὰ συγκεκριμένα
θέματα <strong>org-gnosis</strong>.</p>
<ul>
<li>Χρησιμοποίησε <code>M-x gnosis-review-topic</code> γιὰ νὰ ἐπιλέξεις θέμα ἀπὸ
τὶς σημειώσεις org-gnosis καὶ νὰ ἐπαναλάβεις ὅλα τὰ συνδεδεμένα
themata.</li>
<li>Μπορεῖς νὰ συνδέσεις ἕνα thema μὲ θέμα org-gnosis προσθέτοντας
σύνδεσμο org id εἴτε στὸ parathema <em>(συνιστᾶται)</em> εἴτε στὸ
keimenon, μὲ <code>M-x org-gnosis-insert</code>.</li>
</ul>
<blockquote>
<p>Μελλοντικὲς ἐκδόσεις θὰ ἐπεκτείνουν περαιτέρω αὐτὴ τὴ λειτουργικότητα.</p>
</blockquote>
<h2 id="deprecated-support-for-images">Παρωχημένη ὑποστήριξη εἰκόνων</h2>
<ul>
<li>Ἡ ὑποστήριξη εἰκόνων θὰ ξαναγραφεῖ στὴν ἑπόμενη δευτερεύουσα ἔκδοση
<ul>
<li>Θὰ προστεθεῖ ὑποστήριξη ἐμφάνισης συνδέσμων ἀρχείων εἰκόνων.</li>
</ul>
</li>
</ul>
<h2 id="deprecated-support-for-y-or-n-notes">Παρωχημένη ὑποστήριξη σημειώσεων y-or-n</h2>
<p>Μὲ αὐτὴ τὴν ἐνημέρωση οἱ τρέχουσες σημειώσεις <code>y-or-n</code> θὰ μετατραποῦν
σὲ τύπο MCQ, μὲ ἐπιλογὲς «Ναί» καὶ «Ὄχι».</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ: σημειώσεις &amp; ἡμερολόγιο μὲ org-gnosis [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/org-gnosis-overview/</link>
      <pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/org-gnosis-overview/</guid>
      <description>Βίντεο-σύνοψη γιὰ τὸ org-gnosis</description>
      <content:encoded><![CDATA[<center><i>Ἤμαξ: σημειώσεις & ἡμερολόγιο μὲ org-gnosis</i>
<iframe width="560" height="315" src="https://www.youtube.com/embed/5SkLa7jGjl0?si=ayncyQBxQ19NYqgV" title="Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</center>
<h2 id="video-notes">Σημειώσεις βίντεο</h2>
<h3 id="org-gnosis-overview">Σύνοψη Org Gnosis</h3>
<ul>
<li>
<p><strong>Org Gnosis</strong> <em>Ὀργάνωση τῆς Γνώσεως (Γνῶση)</em></p>
</li>
<li>
<p>Τὸ Org Gnosis εἶναι ἕνα λιτὸ ἐργαλεῖο ἀνάλυσης τοῦ org-mode ποὺ ὀργανώνει
τὰ δεδομένα τῶν σημειώσεών σου ὡς ἀτομικοὺς κόμβους σὲ βάση sqlite.</p>
<ul>
<li>Τὸ Org Gnosis παρέχει ροὴ ἐργασίας παρόμοια μὲ τοῦ Roam Research,
τοῦ Logseq καὶ τοῦ org-roam, μὲ ὑποστήριξη ἡμερολογίου.</li>
</ul>
</li>
<li>
<p>Στὸ org-gnosis ὑπάρχουν 2 τύποι κόμβων, κόμβοι gnosis &amp; κόμβοι ἡμερολογίου.</p>
</li>
</ul>
<h3 id="installation-configuration">Ἐγκατάσταση &amp; Διαμόρφωση</h3>
<ul>
<li><em>Ἀνατρέξτε στὸν
<a href="https://thanosapollo.org/projects/org-gnosis/">ἱστότοπο</a> τοῦ ἔργου γιὰ τὶς
πιὸ πρόσφατες ὁδηγίες ἐγκατάστασης.</em></li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package org-gnosis
</span></span><span style="display:flex;"><span>  :ensure <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :init
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;thanos/notes-map</span>)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;thanos/journal-map</span>)
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; I put my databse inside org-gnosis-dir to keep it in sync</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; between machines, using git.</span>
</span></span><span style="display:flex;"><span>  (setf org-gnosis-db (emacsql-sqlite-open
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">expand-file-name</span> <span style="color:#e6db74">&#34;data.db&#34;</span> org-gnosis-dir)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (setf org-gnosis-dir <span style="color:#e6db74">&#34;~/Notes&#34;</span>
</span></span><span style="display:flex;"><span>  org-gnosis-node-templates
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;Default&#34;</span> (lambda () <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#e6db74">&#34;#+startup: content\n&#34;</span>)))
</span></span><span style="display:flex;"><span>  org-gnosis-journal-templates
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;2050 Plan&#34;</span> journal/plan-2050)
</span></span><span style="display:flex;"><span>    (<span style="color:#e6db74">&#34;Empty&#34;</span> (lambda () <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#e6db74">&#34;#+startup: content\n&#34;</span>)))
</span></span><span style="display:flex;"><span>  org-gnosis-show-tags <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  org-gnosis-create-as-gpg <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  org-gnosis-completing-read-func <span style="color:#a6e22e">#&#39;</span>org-completing-read)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun journal/plan-2050 ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;My journaling template for 2050-01-01.&#34;</span>
</span></span><span style="display:flex;"><span>    (let ((days-remaining (<span style="color:#a6e22e">-</span> (time-to-days (<span style="color:#a6e22e">encode-time</span> <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">2050</span>))
</span></span><span style="display:flex;"><span>               (time-to-days (<span style="color:#a6e22e">current-time</span>)))))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">format</span>
</span></span><span style="display:flex;"><span>       <span style="color:#e6db74">&#34;\nDays until 2050: *%s* \n\n* Records\n\n* Daily notes\n* Goals\n%s&#34;</span>
</span></span><span style="display:flex;"><span>       days-remaining (org-gnosis-todos))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c n&#34;</span> <span style="color:#f92672">.</span> thanos/notes-map)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c j&#34;</span> <span style="color:#f92672">.</span> thanos/journal-map)
</span></span><span style="display:flex;"><span>   :map thanos/notes-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> org-gnosis-find)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> org-gnosis-insert)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;t&#34;</span> <span style="color:#f92672">.</span> org-gnosis-find-by-tag)
</span></span><span style="display:flex;"><span>   :map thanos/journal-map
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;j&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal-find)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal-insert)
</span></span><span style="display:flex;"><span>   :map org-gnosis-mode-map
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c C-.&#34;</span> <span style="color:#f92672">.</span> org-gnosis-insert-tags)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c i&#34;</span> <span style="color:#f92672">.</span> org-id-get-create)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c C-o&#34;</span> <span style="color:#f92672">.</span> thanos/org-open-at-point)))
</span></span></code></pre></div><h4 id="epa-easypgp-assistant">EPA (EasyPGP Assistant)</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package epa
</span></span><span style="display:flex;"><span>  :defer <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf epa-keys-select-method <span style="color:#e6db74">&#39;minibuffer</span>
</span></span><span style="display:flex;"><span>  epa-file-encrypt-to <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;your-pgp-key&#34;</span>)
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Do not prompt for key selection, we are only using the above key.</span>
</span></span><span style="display:flex;"><span>  epa-file-select-keys <span style="color:#e6db74">&#39;silent</span>))
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ Ὡς Προσομοιωτὴς Τερματικοῦ [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/emacs-shells-video/</link>
      <pubDate>Sat, 25 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/emacs-shells-video/</guid>
      <description>Σύντομο βίντεο γιὰ ἀλληλεπιδράσεις κελύφους στὸν Ἤμαξ</description>
      <content:encoded><![CDATA[<center><i>Ἤμαξ Ὡς Προσομοιωτὴς Τερματικοῦ</i>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Qo7WQjbE2io?si=PAWUzeVw79DfBA4s" title="Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</center>
<h3 id="emacs-as-your-terminal-emulator-video">Ἤμαξ Ὡς Προσομοιωτὴς Τερματικοῦ [Βίντεο]</h3>
<ul>
<li>Ὁ Ἤμαξ προσφέρει βελτιωμένη ἐμπειρία γιὰ ἀλληλεπίδραση μὲ ἐργαλεῖα
κελύφους &amp; <em>μπορεῖ</em> νὰ εἶναι ὁ πιὸ ἐπεκτάσιμος προσομοιωτὴς τερματικοῦ
ποὺ διατίθεται.</li>
<li>Παρέχει ἀπρόσκοπτη ἐνσωμάτωση ἀνάμεσα σὲ ἐργαλεῖα κελύφους &amp;
δυνατότητες ἐπεξεργασίας.</li>
</ul>
<h2 id="using-shell-commands-from-within-a-buffer">Χρήση ἐντολῶν κελύφους μέσα ἀπὸ ἕνα μπάφερ</h2>
<h3 id="shell-command">shell-command</h3>
<ul>
<li><code>M-! CMD &lt;RET&gt;</code></li>
<li>Ἐκτέλεσε τὴν ἐντολὴ κελύφους CMD καὶ ἐμφάνισε τὴν ἔξοδο.</li>
</ul>
<h3 id="async-shell-command">async-shell-command</h3>
<ul>
<li><code>M-&amp; CMD &lt;RET&gt;</code></li>
<li>Ἐκτέλεσε τὴν ἐντολὴ κελύφους CMD ἀσύγχρονα, καὶ ἐμφάνισε τὴν ἔξοδο</li>
</ul>
<h3 id="shell-command-on-region">shell-command-on-region</h3>
<ul>
<li><code>M-| CMD &lt;RET&gt;</code></li>
<li>Ἐκτέλεσε τὴν ἐντολὴ κελύφους CMD μὲ τὰ περιεχόμενα τῆς περιοχῆς ὡς
εἴσοδο· προαιρετικὰ ἀντικατέστησε τὴν περιοχὴ μὲ τὴν ἔξοδο</li>
</ul>
<h2 id="emacs-as-a-terminal-emulator">Ἤμαξ ὡς Προσομοιωτὴς Τερματικοῦ</h2>
<h3 id="shell">Shell</h3>
<ul>
<li><code>M-x shell</code></li>
<li>Ὑποκέλυφος μὲ εἴσοδο καὶ ἔξοδο μέσῳ ἑνὸς μπάφερ τοῦ
Ἤμαξ. Μπορεῖς ἔπειτα νὰ δίνεις ἐντολὲς διαδραστικά.</li>
</ul>
<h4 id="my-configuration">Ἡ διαμόρφωσή μου</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package shell
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (defun thanos/shell (n)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Create or switch to a shell buffer.&#34;</span>
</span></span><span style="display:flex;"><span>    (interactive <span style="color:#e6db74">&#34;P&#34;</span>)
</span></span><span style="display:flex;"><span>    (let* ((num (if n (<span style="color:#a6e22e">prefix-numeric-value</span> n) <span style="color:#66d9ef">nil</span>))
</span></span><span style="display:flex;"><span>           (buf-name (if num (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;*shell&lt;%d&gt;*&#34;</span> num) <span style="color:#e6db74">&#34;*shell*&#34;</span>)))
</span></span><span style="display:flex;"><span>      (shell buf-name)))
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c v&#34;</span> <span style="color:#f92672">.</span> thanos/shell)
</span></span><span style="display:flex;"><span>         :map shell-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-l&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;comint-clear-buffer</span>))
</span></span><span style="display:flex;"><span>  :hook ((shell-mode <span style="color:#f92672">.</span> (lambda () (display-line-numbers-mode <span style="color:#ae81ff">-1</span>)))))
</span></span></code></pre></div><h3 id="eshell">Eshell</h3>
<ul>
<li><code>M-x eshell</code></li>
<li>Κέλυφος ὑλοποιημένο ὁλοκληρωτικὰ σὲ Emacs Lisp</li>
</ul>
<h4 id="my-configuration-1">Ἡ διαμόρφωσή μου</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package eshell
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Prompt</span>
</span></span><span style="display:flex;"><span>  (defun eshell-git-info ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Return a string with git info.&#34;</span>
</span></span><span style="display:flex;"><span>    (when (<span style="color:#a6e22e">eq</span> (<span style="color:#a6e22e">call-process</span> <span style="color:#e6db74">&#34;git&#34;</span> <span style="color:#66d9ef">nil</span> <span style="color:#66d9ef">nil</span> <span style="color:#66d9ef">nil</span> <span style="color:#e6db74">&#34;rev-parse&#34;</span> <span style="color:#e6db74">&#34;--is-inside-work-tree&#34;</span>) <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>      (let* ((branch-raw (shell-command-to-string <span style="color:#e6db74">&#34;git rev-parse --abbrev-ref HEAD&#34;</span>))
</span></span><span style="display:flex;"><span>             (branch (if (or (string-match-p <span style="color:#e6db74">&#34;^fatal&#34;</span> branch-raw)
</span></span><span style="display:flex;"><span>                             (string-match-p <span style="color:#e6db74">&#34;^error&#34;</span> branch-raw))
</span></span><span style="display:flex;"><span>                         <span style="color:#e6db74">&#34;Unknown&#34;</span>
</span></span><span style="display:flex;"><span>                       (string-trim branch-raw)))
</span></span><span style="display:flex;"><span>             (dirty (not
</span></span><span style="display:flex;"><span>                     (string= <span style="color:#e6db74">&#34;&#34;</span> (string-trim (shell-command-to-string <span style="color:#e6db74">&#34;git status --porcelain&#34;</span>)))))
</span></span><span style="display:flex;"><span>             (dirty-info (if dirty <span style="color:#e6db74">&#34; ✎&#34;</span> <span style="color:#e6db74">&#34; ✔&#34;</span>)))
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">concat</span> (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;⎇ &#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-green-warmer</span>)
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">propertize</span> branch <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-magenta-warmer</span>)
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">propertize</span> dirty-info <span style="color:#e6db74">&#39;face</span>
</span></span><span style="display:flex;"><span>                            (if dirty <span style="color:#e6db74">&#39;modus-themes-fg-red</span> <span style="color:#e6db74">&#39;modus-themes-fg-green</span>))))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun eshell-prompt-multiline ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Eshell Multiline Git prompt.&#34;</span>
</span></span><span style="display:flex;"><span>    (let ((separator (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34; | &#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;font-lock-comment-face</span>))
</span></span><span style="display:flex;"><span>          (hr (<span style="color:#a6e22e">propertize</span> (<span style="color:#a6e22e">concat</span> <span style="color:#e6db74">&#34;\n&#34;</span> (<span style="color:#a6e22e">make-string</span> (<span style="color:#a6e22e">/</span> (<span style="color:#a6e22e">window-total-width</span>) <span style="color:#ae81ff">2</span>) <span style="color:#e6db74">?─</span>) <span style="color:#e6db74">&#34;\n&#34;</span>) <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;font-lock-comment-face</span>))
</span></span><span style="display:flex;"><span>          (dir (<span style="color:#a6e22e">propertize</span> (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;%s&#34;</span> (abbreviate-file-name (eshell/pwd))) <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-yellow-warmer</span>))
</span></span><span style="display:flex;"><span>          (git-info (eshell-git-info))
</span></span><span style="display:flex;"><span>          (time (<span style="color:#a6e22e">propertize</span> (<span style="color:#a6e22e">format-time-string</span> <span style="color:#e6db74">&#34;%H:%M:%S&#34;</span>) <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;font-lock-comment-face</span>))
</span></span><span style="display:flex;"><span>          (sign (if (<span style="color:#a6e22e">=</span> (<span style="color:#a6e22e">user-uid</span>) <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>                    (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;\n#&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-blue-intense</span>)
</span></span><span style="display:flex;"><span>                  (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;\nλ&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-red-warmer</span>))))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">concat</span> hr dir separator git-info separator time sign <span style="color:#e6db74">&#34; &#34;</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (setf eshell-prompt-function <span style="color:#e6db74">&#39;eshell-prompt-multiline</span>
</span></span><span style="display:flex;"><span>        eshell-highlight-prompt <span style="color:#66d9ef">nil</span>)
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Aliases</span>
</span></span><span style="display:flex;"><span>  (defun eshell/o (file)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Open FILE.&#34;</span>
</span></span><span style="display:flex;"><span>    (find-file file))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defvar thanos/aliases
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#39;</span>((ll <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;ls -lah&#34;</span>)
</span></span><span style="display:flex;"><span>      (clear <span style="color:#f92672">.</span> clear-scrollback)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/set-eshell-aliases (aliases)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Set ALIASES as eshell aliases.&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">;; Remove aliases file</span>
</span></span><span style="display:flex;"><span>    (when (and eshell-aliases-file
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">file-exists-p</span> eshell-aliases-file))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">delete-file</span> eshell-aliases-file))
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">mapc</span> (lambda (alias)
</span></span><span style="display:flex;"><span>            (let ((name (<span style="color:#a6e22e">symbol-name</span> (<span style="color:#a6e22e">car</span> alias)))
</span></span><span style="display:flex;"><span>                  (command (<span style="color:#a6e22e">cdr</span> alias)))
</span></span><span style="display:flex;"><span>              (eshell/alias name
</span></span><span style="display:flex;"><span>                            (cond
</span></span><span style="display:flex;"><span>                             ((<span style="color:#a6e22e">stringp</span> command) command)
</span></span><span style="display:flex;"><span>                             ((<span style="color:#a6e22e">symbolp</span> command) (<span style="color:#a6e22e">symbol-name</span> command))
</span></span><span style="display:flex;"><span>                             (<span style="color:#66d9ef">t</span> (<span style="color:#a6e22e">error</span> <span style="color:#e6db74">&#34;Unsupported alias command type&#34;</span>))))))
</span></span><span style="display:flex;"><span>          aliases))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Rebinds</span>
</span></span><span style="display:flex;"><span>  (defun thanos/eshell-clear ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Interactive call for clear-scrollback.&#34;</span>
</span></span><span style="display:flex;"><span>    (interactive)
</span></span><span style="display:flex;"><span>    (eshell/clear-scrollback))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/eshell-preview-insert ()
</span></span><span style="display:flex;"><span>    (interactive)
</span></span><span style="display:flex;"><span>    (completion-preview-insert)
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">;; This funciton just deletes the extra space inserted after</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">;; completion.</span>
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">delete-char</span> <span style="color:#ae81ff">-1</span>))
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c e&#34;</span> <span style="color:#f92672">.</span> eshell)
</span></span><span style="display:flex;"><span>         :map eshell-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-l&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;thanos/eshell-clear</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;&lt;tab&gt;&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;thanos/eshell-preview-insert</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-M-i&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;completion-at-point</span>))
</span></span><span style="display:flex;"><span>  :hook ((eshell-mode <span style="color:#f92672">.</span> (lambda ()
</span></span><span style="display:flex;"><span>                          (thanos/set-eshell-aliases thanos/aliases)
</span></span><span style="display:flex;"><span>                          (display-line-numbers-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>                          (eshell-cmpl-mode <span style="color:#ae81ff">-1</span>)))))
</span></span></code></pre></div><h3 id="eat">Eat</h3>
<p><em><a href="https://codeberg.org/akib/emacs-eat">Προσομοίωση τερματικοῦ (Eat)</a></em></p>
<ul>
<li>Προσομοιωτὴς τύπου xterm, γραμμένος σὲ Emacs Lisp.</li>
<li>Παρόλο ποὺ εἶναι αὐτοτελὲς τερματικὸ γιὰ τὸν Ἤμαξ, παρόμοιο μὲ τὸ <code>term</code>,
τὸ ἔχω χρησιμοποιήσει κυρίως γιὰ νὰ ἐνισχύσω τὸ <code>eshell</code>.</li>
</ul>
<h4 id="my-configuration-2">Ἡ διαμόρφωσή μου</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package eat
</span></span><span style="display:flex;"><span>  :ensure <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf eshell-visual-commands <span style="color:#66d9ef">nil</span>
</span></span><span style="display:flex;"><span>        eat-term-name <span style="color:#e6db74">&#34;xterm-256color&#34;</span>)
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c V&#34;</span> <span style="color:#f92672">.</span> eat))
</span></span><span style="display:flex;"><span>  :hook ((eshell-mode <span style="color:#f92672">.</span> eat-eshell-mode)
</span></span><span style="display:flex;"><span>         (eshell-mode <span style="color:#f92672">.</span> eat-eshell-visual-command-mode)
</span></span><span style="display:flex;"><span>         (eat-mode <span style="color:#f92672">.</span> (lambda () (visual-line-mode <span style="color:#ae81ff">-1</span>)))))
</span></span></code></pre></div><h3 id="term-ansi-term">Term &amp; Ansi-Term</h3>
<ul>
<li><code>M-x term</code> | <code>M-x ansi-term</code>
<ul>
<li>Τὸ <strong>ansi-term</strong> εἶναι τὸ ἴδιο μὲ τὸ term, ἐκτὸς τοῦ ὅτι πάντα δημιουργεῖ
νέο μπάφερ καὶ τὸ <code>C-x</code> σημειώνεται ὡς χαρακτῆρας διαφυγῆς.</li>
</ul>
</li>
<li>Τρέχει ὑποκέλυφος μὲ εἴσοδο καὶ ἔξοδο μέσῳ ἑνὸς μπάφερ τοῦ Ἤμαξ.</li>
</ul>
<h4 id="how-to-use">Πῶς νὰ τὸ χρησιμοποιήσεις</h4>
<ul>
<li>Ὅσο βρίσκεσαι σὲ <code>term-mode</code> τὸ <code>C-c CHAR</code> ἰσοδυναμεῖ μὲ <code>C-x CHAR</code>.
<ul>
<li>Παράδειγμα τὸ <code>C-c o</code> εἶναι ἡ καθολικὴ δέσμευση <code>C-x o</code> <em>other-window</em></li>
</ul>
</li>
<li><code>C-c C-j</code> ἀλλάζει σὲ <code>term-line-mode</code> <em>ποὺ ἐπιτρέπει πλοήγηση παρόμοια μὲ τοῦ κελύφους</em></li>
<li><code>C-c C-k</code> ἐπιστρέφει σὲ <code>term-char-mode</code></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Ἐνημέρωση προόδου γιὰ org-gnosis &amp; προσθήκη γραφικῆς διεπαφῆς.</title>
      <link>https://thanosapollo.org/el/posts/org-gnosis-progress-1/</link>
      <pubDate>Wed, 18 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/org-gnosis-progress-1/</guid>
      <description>Ἐνημέρωση προόδου γιὰ org-gnosis, σύστημα σημειώσεων τύπου roam.</description>
      <content:encoded><![CDATA[<p>Δουλεύω σὲ ἕνα σύστημα σημειώσεων «τύπου roam», γιὰ νὰ ἀντικαταστήσω &amp;
ἐνημερώσω τὴν τρέχουσα ροὴ ἐργασίας μου μὲ <code>org-roam</code>.  Αὐτὸ τὸ ἄρθρο
εἶναι μιὰ μικρὴ ἐνημέρωση γιὰ τὴν τρέχουσα κατάσταση τῆς ἀνάπτυξής του.</p>
<blockquote>
<p>κόμβος org-gnosis καὶ ἡ <a href="https://git.thanosapollo.org/org-roam-ui/">διακλάδωσή</a> μου τοῦ org-roam-ui</p>
</blockquote>
<p><strong>Ὄνομα Ἔργου</strong>: <code>org-gnosis</code> | <strong>Org*anization of *Gnosis</strong></p>
<h2 id="goals">Στόχοι</h2>
<p>Οἱ στόχοι τοῦ <code>org-gnosis</code> εἶναι οἱ ἑξῆς:</p>
<ul>
<li>Νὰ παραμείνει λιτό, νὰ ὑλοποιεῖ μόνο ἀνάλυση &amp; εἰσαγωγὴ δεδομένων
σὲ βάση δεδομένων.
<ul>
<li>Δὲν θέλω νὰ ξεπεράσει τὶς 700 γραμμὲς κώδικα, <em>πρὸς τὸ παρὸν εἶναι
στὶς 490</em>.</li>
</ul>
</li>
<li>Νὰ ἐνσωματώσει κόμβους ὡς πηγὲς γιὰ σημειώσεις <a href="/el/projects/gnosis/">gnosis</a>.
<ul>
<li>Τὸ νὰ ἔχεις κόμβους ὡς πηγὲς μπορεῖ νὰ ἀντικαταστήσει τὸ τμῆμα
<em>πρόσθετά</em> μου.</li>
</ul>
</li>
<li>Νὰ εἶναι εὔκολα ἐπεκτάσιμο
<ul>
<li>Ἡ λειτουργικότητα ἀνάλυσης τοῦ <code>org-gnosis</code> θὰ πρέπει νὰ
προσαρμόζεται εὔκολα γιὰ νὰ δουλεύει μὲ ἄλλα ἐργαλεῖα σημειώσεων.</li>
</ul>
</li>
<li>Νὰ διαχωρίζει ἡμερολόγια ἀπὸ τὴ λήψη σημειώσεων</li>
</ul>
<h2 id="how-things-are-going">Πῶς πᾶνε τὰ πράγματα</h2>
<p>Οἱ παραπάνω στόχοι ἔχουν ἐπιτευχθεῖ, ἐκτὸς ἀπὸ τὴν ἐνσωμάτωση μὲ τὸ
σύστημά μου SRS· ἡ προσαρμογή του ὥστε νὰ ἀναλύει buffers ποὺ δὲν εἶναι
<code>org-mode</code> μπορεῖ νὰ εἶναι κάπως δύσκολη.  Παρόλα αὐτά, ὑπῆρξε
ἄμεσος ἀντικαταστάτης χωρὶς ἀλλαγὲς γιὰ τὴν προηγούμενη ροὴ ἐργασίας μου μὲ
<code>org-roam</code>.</p>
<p>Ἔχω ἐπίσης δημιουργήσει μία διακλάδωση τοῦ
<a href="https://git.thanosapollo.org/org-roam-ui/">org-roam-ui</a> ποὺ
χρησιμοποιῶ γιὰ νὰ ὁπτικοποιῶ τὶς σημειώσεις μου.  Θὰ δοκιμάζω αὐτὸ
τὸ πακέτο καὶ <em>ἐλπίζω</em> νὰ τὸ δημοσιεύσω εἴτε στὸ nongnu elpa εἴτε στὸ
melpa <em>σύντομα</em>.</p>
<p>Ἂν ἐνδιαφέρεσαι, δοκίμασέ το ἀπὸ αὐτὸ τὸ ἀποθετήριο
<a href="https://git.thanosapollo.org/org-gnosis/">ἐδῶ</a>.  Ἂν βρεῖς
ὁποιαδήποτε προβλήματα ἢ ἔχεις ἐρωτήσεις, μὴ διστάσεις νὰ μοῦ
στείλεις μήνυμα ἠλεκτρονικοῦ ταχυδρομείου.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ 30 ἐνσωματωμένο Completion UI &amp; Styles [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/emacs-built-in-completions-video/</link>
      <pubDate>Thu, 12 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/emacs-built-in-completions-video/</guid>
      <description>Σύντομο βίντεο γιὰ τὸ ἐνσωματωμένο Completion UI &amp;amp; Styles τοῦ Ἤμαξ 30</description>
      <content:encoded><![CDATA[<center>
<p><i>Ἐνσωματωμένο UI καὶ ὕφη συμπλήρωσης τοῦ Ἤμαξ 30</i><p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/-ZeoGVtMLaU?si=nvEEv_8RPVa2EUij" title="Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</center>
<h2 id="video-notes">Σημειώσεις βίντεο:</h2>
<ul>
<li>Ὅταν λέω «completions τοῦ Ἤμαξ», ἐννοῶ Completion Styles &amp; UI</li>
<li>Συχνὰ βασιζόμουν σὲ πακέτα τρίτων γιὰ νὰ μιμηθῶ δυνατότητες ἄλλων
κειμενοεπεξεργαστῶν.  Γιὰ παράδειγμα χρησιμοποιοῦσα γιὰ καιρὸ <code>vertico</code>,
<code>corfu</code> καὶ <code>orderless</code>.
<ul>
<li>Παρόλο ποὺ ἀκόμα συνιστῶ αὐτὰ τὰ πακέτα, μὲ ἐνδιέφερε νὰ
χρησιμοποιήσω τὸν Ἤμαξ χωρὶς ἐξάρτηση ἀπὸ ἐπιλογὲς τρίτων.</li>
<li>Ἡ τρέχουσα διάταξή μου προσπαθεῖ νὰ μιμηθεῖ τὴ ροὴ ἐργασίας μου
μὲ τὰ παραπάνω πακέτα.</li>
</ul>
</li>
<li>Ὁ καταλύτης ποὺ μὲ ὤθησε νὰ δοκιμάσω τὸ ἐνσωματωμένο completion
ἦταν ἡ προσθήκη τοῦ <code>completion-preview-mode</code> στὸν Ἤμαξ 30.</li>
</ul>
<h3 id="mini-buffer-completions">Completions τοῦ mini-buffer</h3>
<ul>
<li>Ὁ Ἤμαξ δὲν ἐνεργοποιεῖ «κατακόρυφα» completions γιὰ τὸ mini-buffer
ἐξ ὁρισμοῦ, ἀλλὰ μπορεῖς νὰ ἐνεργοποιήσεις τὸ <code>fido-vertical-mode</code>
ποὺ ἔρχεται ἐνσωματωμένο.
<ul>
<li>Τὸ <code>fido-mode</code> εἶναι βελτιωμένο <code>icomplete-mode</code> ποὺ μιμεῖται
τὸ <code>ido-mode</code>, ἀλλιῶς γνωστὸ καὶ ὡς <code>fake ido-mode</code>.</li>
</ul>
</li>
</ul>
<h3 id="completion-styles">Completion Styles</h3>
<ul>
<li>Παράδειγμα ἀλλαγῆς <code>completion-styles</code>:</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setf completion-styles <span style="color:#f92672">&#39;</span>(basic flex))
</span></span></code></pre></div><ul>
<li>Ὑπάρχει πληθώρα completion styles· τὰ ἐνσωματωμένα περιλαμβάνουν
<code>flex</code>, ποὺ προσφέρει «fuzzy» completions.</li>
</ul>
<h3 id="completion-ui-code-completions">Completion UI &amp; completions κώδικα</h3>
<ul>
<li>Τὰ ἐνσωματωμένα completions τοῦ Ἤμαξ ἔχουν ἰδιαίτερη προσέγγιση.</li>
<li>Ἀντὶ γιὰ popup στὸ σημεῖο, ἐμφανίζεται νέο buffer <strong>Completions</strong>
ὅταν καλεῖς <code>completion-at-point</code>.</li>
</ul>
<p>Παράδειγμα διαμόρφωσης:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setf completion-styles <span style="color:#f92672">&#39;</span>(basic flex)
</span></span><span style="display:flex;"><span>      completion-auto-select <span style="color:#66d9ef">t</span> <span style="color:#75715e">;; Show completion on first call</span>
</span></span><span style="display:flex;"><span>      completion-auto-help <span style="color:#e6db74">&#39;visible</span> <span style="color:#75715e">;; Display *Completions* upon first request</span>
</span></span><span style="display:flex;"><span>      completions-format <span style="color:#e6db74">&#39;one-column</span> <span style="color:#75715e">;; Use only one column</span>
</span></span><span style="display:flex;"><span>      completions-sort <span style="color:#e6db74">&#39;historical</span> <span style="color:#75715e">;; Order based on minibuffer history</span>
</span></span><span style="display:flex;"><span>      completions-max-height <span style="color:#ae81ff">20</span> <span style="color:#75715e">;; Limit completions to 15 (completions start at line 5)</span>
</span></span><span style="display:flex;"><span>      completion-ignore-case <span style="color:#66d9ef">t</span>)
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Ἐγκατάσταση GNU Guix | Χρῆση μὴ ἐλεύθερων ὁδηγῶν (NonGuix) [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/installing-gnu-guix-video/</link>
      <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/installing-gnu-guix-video/</guid>
      <description>Βίντεο-ὁδηγὸς ἐγκατάστασης GNU Guix μὲ NonGuix.</description>
      <content:encoded><![CDATA[<center>
<p><i>Ἐγκατάσταση GNU Guix | Χρήση μὴ ἐλεύθερων ὁδηγῶν πυρήνα (Nonguix)</i></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/p1w8dwHxFnk?si=EA976WIQ-ZFXSUNu" title="Πρόγραμμα ἀναπαραγωγῆς βίντεο YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</center>
<h2 id="notes-shown-in-the-video">Σημειώσεις ποὺ φαίνονται στὸ βίντεο:</h2>
<ul>
<li>Τὸ <strong>GNU Guix</strong> εἶναι διανομὴ GNU</li>
<li>Προσφέρει ἕνα <strong>τύπου Ἤμαξ</strong> λειτουργικὸ σύστημα, μὲ guile scheme
ὡς γλῶσσα διαμόρφωσης.</li>
<li>Μόνο ἐλεύθερο λογισμικὸ εἶναι διαθέσιμο ἐξ ἀρχῆς· χρησιμοποιεῖ πυρῆνα
<code>linux-libre</code> ἐξ ὁρισμοῦ.
<ul>
<li>Ἀλλὰ ἐπειδὴ εἶναι λειτουργικὸ σύστημα τύπου Ἤμαξ, μποροῦμε νὰ τὸ διαμορφώσουμε
ὅπως θέλουμε, συμπεριλαμβανομένης τῆς χρήσης τοῦ πλήρους πυρῆνα
linux.</li>
</ul>
</li>
</ul>
<h3 id="installing-guix-using-nonguix">Ἐγκατάσταση Guix μὲ <a href="https://gitlab.com/nonguix/nonguix">NonGuix</a></h3>
<ul>
<li>Τὸ <a href="https://gitlab.com/nonguix/nonguix">NonGuix</a> εἶναι κανάλι Guix
ποὺ παρέχει μὴ ἐλεύθερο λογισμικό, ὅπως
μὴ ἐλεύθερους ὁδηγοὺς καὶ παιχνίδια.</li>
<li>Τὸ NonGuix παρέχει ἐπίσης εἰκόνα iso μὲ τὸν πλήρη πυρῆνα linux</li>
</ul>
<h3 id="download-nonguix-iso">Κατέβασε τὸ iso τοῦ nonguix</h3>
<ul>
<li>Ἐπισκέψου τὴ σελίδα <a href="https://gitlab.com/nonguix/nonguix/-/releases">ἐκδόσεων nonguix</a></li>
<li>Κατέβασε τὴν εἰκόνα iso καὶ γράψ’ την σὲ μονάδα USB</li>
</ul>
<p><em>Παράδειγμα ἐντολῆς <code>dd</code>:</em></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ sudo dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/path/to/image.iso of<span style="color:#f92672">=</span>/dev/sdX bs<span style="color:#f92672">=</span>4M status<span style="color:#f92672">=</span>progress
</span></span></code></pre></div><h3 id="clone-nonguix-repo">Κλωνοποίησε τὸ ἀποθετήριο nonguix</h3>
<ul>
<li><em>Μετὰ τὴν ὁλοκλήρωση τοῦ γραφικοῦ ἐγκαταστάτη</em></li>
<li>Κλωνοποίησε τὸ ἀποθετήριο nonguix ἀπὸ <code>https://gitlab.com/nonguix/nonguix</code></li>
<li>Ἀντίγραψε τὶς ὁδηγίες README γιὰ κανάλια στὸ
<code>/mnt/etc/channels.scm</code></li>
<li>Πρόσθεσε τὶς μονάδες NonGuix στὴ διαμόρφωση συστήματος καὶ
χρησιμοποίησε τὸν πυρῆνα <code>linux-lts</code> στὸ <code>/mnt/etc/config.scm</code></li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span><span style="color:#75715e">;; Import nonfree linux module.</span>
</span></span><span style="display:flex;"><span>(<span style="color:#a6e22e">use-modules</span> (<span style="color:#a6e22e">nongnu</span> packages linux)
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">nongnu</span> system linux-initrd))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#a6e22e">operating-system</span>
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">kernel</span> linux-lts)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">initrd</span> microcode-initrd)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">firmware</span> (list linux-firmware))
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">...</span>
</span></span><span style="display:flex;"><span>  )
</span></span></code></pre></div><h3 id="install-your-system">Ἐγκατέστησε τὸ σύστημά σου</h3>
<ul>
<li>Τρέξε τὴν παρακάτω ἐντολὴ γιὰ ἐγκατάσταση:</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ guix time-machine -C /mnt/etc/channels.scm -- system init /mnt/etc/config.scm /mnt
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>org-gnosis | Σύστημα σημειώσεων τύπου Roam</title>
      <link>https://thanosapollo.org/el/posts/org-gnosis-01/</link>
      <pubDate>Thu, 21 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/org-gnosis-01/</guid>
      <description>Δημιουργώντας ἀντικαταστάτη τοῦ org-roam</description>
      <content:encoded><![CDATA[<p>Τὸ <code>org-roam</code> ἦταν τὸ προτιμώμενό μου ἐργαλεῖο γιὰ σημειώσεις καὶ
ἡμερολόγιο, ἀλλὰ ἀφοῦ ὁ συγγραφέας του φαίνεται νὰ ἔχει ἀποσυρθεῖ καὶ ἡ
ὑλοποίησή του διαφέρει ἀρκετὰ ἀπὸ τὸ πῶς θὰ προσέγγιζα ἕνα zettelkasten
γιὰ Ἤμαξ, ἀποφάσισα νὰ ξεκινήσω ἕνα νέο πακέτο, μὲ ὄνομα <code>org-gnosis</code>.</p>
<h2 id="goals-of-this-project">Στόχοι αὐτοῦ τοῦ ἔργου</h2>
<p>Ὁ πρωταρχικὸς στόχος εἶναι ἡ πλήρης συμβατότητα μὲ ὑπάρχουσες σημειώσεις
org-roam, ἐνῶ ταυτόχρονα ἐπιλύονται τὰ τρέχοντα προβλήματα ὑλοποίησης τῆς
βάσης δεδομένων.  Αὐτοὶ οἱ στόχοι ἐπιτεύχθηκαν ἐπιτυχῶς τὴν πρώτη μέρα
ἀνάπτυξης.</p>
<p>Δεδομένου ὅτι σχεδιάζω νὰ χρησιμοποιῶ αὐτὸ τὸ σύστημα γιὰ τὰ ἑπόμενα
χρόνια, ἡ ἐπίδοση μὲ μεγάλα σύνολα δεδομένων εἶναι κρίσιμη.  Ἔχω
δοκιμάσει τὸ org-gnosis μὲ σύνολο 70.000 κόμβων καὶ ἔχει δείξει ἄψογη
ἐπίδοση χωρὶς προβλήματα.  Ἡ ἀρχικοποίηση, ὡστόσο, μπορεῖ νὰ πάρει λίγο
χρόνο.</p>
<p>Πέρα ἀπὸ τὴν ἐπίδοση, θέλω νὰ τὸ κρατήσω μικρὸ καὶ ἁπλό, ἰδίως σὲ ἀριθμὸ
γραμμῶν κώδικα.  Ὅσο λιγότερες γραμμὲς ἔχω νὰ συντηρῶ, τόσο πιὸ εὐτυχισμένος
εἶμαι :)</p>
<h2 id="how-to-install">Πῶς νὰ ἐγκαταστήσεις</h2>
<p>Αὐτὸ τὸ ἔργο δημιουργήθηκε <em>μόλις πρὶν 26 ὧρες</em> πρὸς τὸ παρόν· δὲν τὸ ἔχω
δημοσιεύσει σὲ κανένα ELPA, ἀλλὰ μπορεῖς νὰ τὸ βρεῖς σὲ αὐτὸ τὸ
<a href="https://git.thanosapollo.org/org-gnosis/">git ἀποθετήριο</a>· μὴ διστάσεις νὰ τὸ
κλωνοποιήσεις καὶ νὰ τὸ δοκιμάσεις.</p>
<p>Παράδειγμα ἀποσπάσματος <code>use-package</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package org-gnosis
</span></span><span style="display:flex;"><span>  :load-path <span style="color:#e6db74">&#34;~/Dev/emacs-lisp/org-gnosis&#34;</span>
</span></span><span style="display:flex;"><span>  :init
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;thanos/notes-map</span>)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;thanos/journal-map</span>)
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf org-gnosis-dir <span style="color:#e6db74">&#34;~/Notes&#34;</span>
</span></span><span style="display:flex;"><span>    org-gnosis-show-tags <span style="color:#66d9ef">t</span>) <span style="color:#75715e">;; Enable this if you use a completion system like vertico</span>
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c n&#34;</span> <span style="color:#f92672">.</span> thanos/notes-map)
</span></span><span style="display:flex;"><span>     (<span style="color:#e6db74">&#34;C-c j&#34;</span> <span style="color:#f92672">.</span> thanos/journal-map) <span style="color:#75715e">;; You can use &#34;C-c n j&#34; if you prefer</span>
</span></span><span style="display:flex;"><span>     :map thanos/notes-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> org-gnosis-find)
</span></span><span style="display:flex;"><span>     (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> org-gnosis-insert)
</span></span><span style="display:flex;"><span>     :map thanos/journal-map
</span></span><span style="display:flex;"><span>     (<span style="color:#e6db74">&#34;j&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal)
</span></span><span style="display:flex;"><span>     (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal-find)
</span></span><span style="display:flex;"><span>     (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal-insert)
</span></span><span style="display:flex;"><span>     :map org-mode-map
</span></span><span style="display:flex;"><span>     (<span style="color:#e6db74">&#34;C-c i&#34;</span> <span style="color:#f92672">.</span> org-id-get-create)))
</span></span></code></pre></div><p>Μετὰ τὴν ἐγκατάσταση τοῦ <code>org-gnosis</code> τρέξε <code>M-x org-gnosis-db-sync</code> γιὰ νὰ
συγχρονίσεις τὴ βάση δεδομένων· ἔπειτα ἁπλῶς χρησιμοποίησε τὸ
<code>org-gnosis-find</code> ὅπως θὰ χρησιμοποιοῦσες τὸ <code>org-roam-find-node</code>.</p>
<blockquote>
<p>Αὐτὸ τὸ πακέτο εἶναι ἀκόμη ὑπὸ ἀνάπτυξη· ἂν συναντήσεις σφάλματα, μὴ διστάσεις
νὰ μοῦ στείλεις μήνυμα ἠλεκτρονικοῦ ταχυδρομείου.</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Δεξιοτεχνία στὸ RSS μὲ RSS-Bridge &amp; Elfeed [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/rss-video/</link>
      <pubDate>Sat, 09 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/rss-video/</guid>
      <description>Μικρὸ βίντεο γιὰ RSS, RSS-Bridge &amp;amp; Elfeed</description>
      <content:encoded><![CDATA[<p>Μόλις δημοσίευσα ἕνα μικρὸ βίντεο ποὺ καλύπτει τὰ βασικὰ τοῦ RSS, τοῦ
RSS-Bridge καὶ τοῦ Elfeed· εἶναι διαθέσιμο στὸ
<a href="https://www.youtube.com/watch?v=XvgChZdTvYU">YouTube</a>.</p>
<h2 id="video-notes">Σημειώσεις βίντεο</h2>
<h3 id="what-is-rss">Τί εἶναι τὸ RSS;</h3>
<ul>
<li>Διαδικτυακὴ ροὴ βασισμένη σὲ XML ποὺ ἐπιτρέπει στοὺς χρήστες νὰ
λαμβάνουν ἐνημερώσεις ἱστοτόπων, χωρὶς νὰ «ἐπισκέπτονται» τὸν ἱστότοπο.</li>
<li>Ἀκτιβιστὲς συμπεριλαμβανομένου τοῦ <a href="https://en.wikipedia.org/wiki/Aaron_Swartz">Aaron
Swartz</a> συνέβαλαν στὴν
ἀνάπτυξη τοῦ RSS</li>
</ul>
<h3 id="why-use-it">Γιατί νὰ τὸ χρησιμοποιήσεις;</h3>
<ul>
<li>Πλήρης ἔλεγχος πάνω στὶς πληροφορίες ποὺ καταναλώνεις
<ul>
<li>Φιλτράρισμα/προτεραιοποίηση περιεχομένου ἀπὸ διάφορες πηγές</li>
<li>Παράκαμψη ἀλγορίθμων</li>
<li>Ἀνάγνωση χωρὶς διαφημίσεις</li>
</ul>
</li>
<li>Πρόσβαση ἐκτὸς σύνδεσης</li>
<li>Ἐξοικονόμηση χρόνου</li>
<li>Ἐπιτρέπει τὴ δημιουργία ἑνὸς <strong>προσωποποιημένου</strong> καὶ <strong>ἀποκεντρωμένου</strong> κόμβου
πληροφοριῶν</li>
</ul>
<h3 id="emacs-rss-elfeed">(+ Emacs RSS) ;; =&gt; &rsquo;elfeed</h3>
<p><strong>Ἀνεξάρτητα ἀπὸ ποιὸν ἀναγνώστη RSS ἐπιλέξεις, ὅλοι κάνουν τὴν ἴδια δουλειά</strong></p>
<ul>
<li>Τὸ <a href="https://github.com/skeeto/elfeed">Elfeed</a> εἶναι ἕνας ἁπλὸς καὶ ἐξαιρετικὰ προσαρμόσιμος πελάτης RSS γιὰ
Ἤμαξ
<ul>
<li>Ἀναπτύχθηκε ἀπὸ τὸν Christopher Wellons (<a href="https://github.com/skeeto">skeeto</a>)</li>
</ul>
</li>
<li>Ἔχει καλὰ σχεδιασμένη βάση δεδομένων καὶ σύστημα ἐτικετῶν</li>
</ul>
<p>Παράδειγμα ἐγκατάστασης μὲ <code>use-package</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package elfeed
</span></span><span style="display:flex;"><span>  :vc (:url <span style="color:#e6db74">&#34;https://github.com/skeeto/elfeed&#34;</span>) <span style="color:#75715e">;; vc option is available on Emacs 30</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf elfeed-search-filter <span style="color:#e6db74">&#34;@1-week-ago +unread&#34;</span>
</span></span><span style="display:flex;"><span>        browse-url-browser-function <span style="color:#a6e22e">#&#39;</span>browse-url-default-browser
</span></span><span style="display:flex;"><span>        elfeed-db-directory (locate-user-emacs-file <span style="color:#e6db74">&#34;elfeed-db&#34;</span>))
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Feeds Example</span>
</span></span><span style="display:flex;"><span>  (setf elfeed-feeds
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;https://hackaday.com/blog/feed/&#34;</span>
</span></span><span style="display:flex;"><span>           hackaday linux)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Play videos from elfeed</span>
</span></span><span style="display:flex;"><span>  (defun elfeed-mpv (<span style="color:#66d9ef">&amp;optional</span> use-generic-p)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Play video link with mpv.&#34;</span>
</span></span><span style="display:flex;"><span>    (interactive <span style="color:#e6db74">&#34;P&#34;</span>)
</span></span><span style="display:flex;"><span>    (let ((entries (elfeed-search-selected)))
</span></span><span style="display:flex;"><span>      (cl-loop for entry in entries
</span></span><span style="display:flex;"><span>               do (elfeed-untag entry <span style="color:#e6db74">&#39;unread</span>)
</span></span><span style="display:flex;"><span>               when (elfeed-entry-link entry)
</span></span><span style="display:flex;"><span>               do (start-process-shell-command <span style="color:#e6db74">&#34;elfeed-video&#34;</span> <span style="color:#66d9ef">nil</span> (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;mpv \&#34;%s\&#34;&#34;</span> it)))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">mapc</span> <span style="color:#a6e22e">#&#39;</span>elfeed-search-update-entry entries)
</span></span><span style="display:flex;"><span>      (unless (use-region-p) (<span style="color:#a6e22e">forward-line</span>))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-x f&#34;</span> <span style="color:#f92672">.</span> elfeed)
</span></span><span style="display:flex;"><span>         :map elfeed-search-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;v&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;elfeed-mpv</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;U&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;elfeed-update</span>)))
</span></span></code></pre></div><h3 id="what-to-do-with-websites-that-do-not-provide-an-rss-feed">Τί κάνεις μὲ ἱστοτόπους ποὺ δὲν παρέχουν ροὴ RSS;</h3>
<ul>
<li>Χρησιμοποίησε τὸ <a href="https://github.com/RSS-Bridge/rss-bridge">rss-bridge</a> γιὰ νὰ δημιουργήσεις μία.</li>
<li>Τὸ RSS Bridge αὐτοφιλοξενεῖται εὔκολα μὲ docker</li>
</ul>
<p>Παράδειγμα ὑπηρεσίας <code>guix</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(service oci-container-service-type
</span></span><span style="display:flex;"><span>         (<span style="color:#a6e22e">list</span>
</span></span><span style="display:flex;"><span>          (oci-container-configuration
</span></span><span style="display:flex;"><span>           (image <span style="color:#e6db74">&#34;rssbridge/rss-bridge&#34;</span>)
</span></span><span style="display:flex;"><span>           (network <span style="color:#e6db74">&#34;host&#34;</span>)
</span></span><span style="display:flex;"><span>           (ports
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;3000&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;80&#34;</span>))))))
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Γιατί προτιμῶ τὸ VC ἀπὸ τὸ Magit [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/why-i-prefer-vc-over-magit/</link>
      <pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/why-i-prefer-vc-over-magit/</guid>
      <description>Μικρὸ βίντεο γιὰ VC &amp;amp; Magit</description>
      <content:encoded><![CDATA[<p>Μόλις ἀνέβασα ἕνα μικρὸ βίντεο γιὰ τὸ γιατί προτιμῶ τὸ VC ἀπὸ τὸ Magit,
μαζὶ μὲ μία σύντομη ἐπίδειξη ροῆς ἐργασίας μὲ VC.</p>
<p>Τὸ βίντεο εἶναι διαθέσιμο στὸ YouTube
<a href="https://www.youtube.com/watch?v=-pPkGWIfdqM">ἐδῶ</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ξαναγράφοντας τὴ Γνῶση: ἔκδοση 0.4.0</title>
      <link>https://thanosapollo.org/el/posts/gnosis-0-4-0-release/</link>
      <pubDate>Wed, 07 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-0-4-0-release/</guid>
      <description>Γνῶσις (γνῶσις), ὑλοποίηση συστήματος ἐπανάληψης μὲ διαστήματα γιὰ GNU Ἤμαξ</description>
      <content:encoded><![CDATA[<p>Ποιὸ εἶναι τὸ πιὸ σημαντικὸ πρᾶγμα γιὰ τὴν ἀποθήκευση γνώσης;</p>
<p>Θὰ ἔλεγα ἡ σωστὴ ὀργάνωση αὐτῆς τῆς γνώσης, ὅπως μὲ decks γιὰ κάθε
ἀντικείμενο καὶ οὐσιώδεις ἐτικέτες ποὺ συνδέουν σχετικὲς ἔννοιες μεταξύ
decks, κάνοντάς την εὔκολα ἀναζητήσιμη καὶ προσβάσιμη.</p>
<p>Καθὼς ἄρχισα νὰ προσθέτω ὅλο καὶ περισσότερες σημειώσεις στὴ gnosis, βρέθηκα
νὰ θέλω νὰ προσαρμόζω τὸν ἀλγόριθμο ἐπανάληψης ὄχι μόνο γιὰ decks ἀλλὰ καὶ
γιὰ ἐτικέτες.  Αὐτὸ μὲ ὁδήγησε νὰ ἀναδιαμορφώσω τὴν ὑποκείμενη ἀρχιτεκτονικὴ
καὶ νὰ ξαναϋλοποιήσω βασικὲς ἔννοιες.</p>
<h2 id="key-changes-made">Κύριες ἀλλαγές</h2>
<ul>
<li>Ἀνασχεδιασμὸς τοῦ <code>gnosis-dashboard</code> μὲ buffer <em>σὰν ἀρχικὴ σελίδα</em>
ποὺ ἐμφανίζει τρέχοντα στατιστικὰ δραστηριότητας, ὅπως σειρὰ ἐπανάληψης καὶ
τὶς σημειώσεις ποὺ εἶναι προγραμματισμένες γιὰ σήμερα.
<img loading="lazy" src="/images/gnosis-dashboard-03.png"></li>
<li>Ξαναγραμμένος ἀλγόριθμος gnosis:
<ul>
<li>Προστέθηκε <strong>gnosis-score</strong>, ἡ τρέχουσα βαθμολογία γνώσης γιὰ μία σημείωση.</li>
<li>Προστέθηκε τιμὴ <strong>epignosis</strong>, ποὺ δείχνει τὴν ἀκρίβεια γνώσης γιὰ
δεδομένη σημείωση, καθὼς καὶ <strong>agnoia</strong> γιὰ τὴν ἔλλειψη γνώσης
μιᾶς σημείωσης· αὐτὲς οἱ τιμὲς θὰ χρησιμοποιηθοῦν σὲ <strong>γεγονότα
anagnosis</strong>. <em>Τὰ ὀνόματα εἶναι ἑλληνικὲς λέξεις· epignosis ≈ ἐπίγνωσις, agnoia ≈ ἄγνοια.</em></li>
<li>Προστέθηκαν εἰδικὰ γεγονότα ἐπανάληψης· <strong>Anagnosis</strong> &amp; <strong>Lethe</strong>
<ul>
<li><strong>Anagnosis</strong> ἀναφέρεται στὴν ἀναγνώριση καὶ κατανόηση ἑνὸς
πλαισίου· τὰ γεγονότα anagnosis πυροδοτοῦνται εἴτε ἀπὸ διαδοχικὲς
ἀποτυχημένες εἴτε ἀπὸ ἐπιτυχεῖς ἀνακλήσεις.  Ἀνάλογα μὲ τὸ πῶς
πυροδοτοῦνται, ἐφαρμόζεται <strong>epignosis</strong> ἢ <strong>agnoia</strong> στὸ <strong>gnosis-score</strong></li>
<li><strong>Lethe</strong> ἀναφέρεται στὴ λήθη τῆς γνώσης· πυροδοτεῖται ἀπὸ
διαδοχικὲς ἀποτυχίες ἀνάκλησης ἀπάντησης· μὲ αὐτὸ τὸ γεγονὸς τὸ
ἑπόμενο διάστημα ὁρίζεται σὲ 0</li>
</ul>
</li>
<li>Προστέθηκε *amnesia*· ὅταν ἀποτυγχάνεις νὰ ἀνακαλέσεις μία σημείωση,
ἡ τιμὴ amnesia χρησιμοποιεῖται γιὰ νὰ καθορίσει τὸ ἑπόμενο διάστημα.</li>
<li>Προστέθηκε <strong>proto</strong>, μία λίστα ἀκεραίων ποὺ δείχνει τὶς τιμὲς
γιὰ τὰ πρῶτα διαστήματα.  Ἡ λίστα proto δὲν ἔχει ὅριο μῆκους.</li>
</ul>
</li>
<li>Ξαναϋλοποιήθηκε ἡ διαμόρφωση γιὰ τὶς παραπάνω τιμὲς deck καὶ προστέθηκε
ἡ ἱκανότητα νὰ κάνεις τὸ ἴδιο γιὰ ἐτικέτες.  Ἡ διαμόρφωση ἐτικέτας
ἔχει προτεραιότητα πάνω ἀπὸ τὴ διαμόρφωση deck.</li>
</ul>
<p><em>Παράδειγμα:</em></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq gnosis-custom-values
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#39;</span>((:deck <span style="color:#e6db74">&#34;demo&#34;</span> (:proto (<span style="color:#ae81ff">0</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">3</span>) :anagnosis <span style="color:#ae81ff">3</span> :epignosis <span style="color:#ae81ff">0.5</span> :agnoia <span style="color:#ae81ff">0.3</span> :amnesia <span style="color:#ae81ff">0.5</span> :lethe <span style="color:#ae81ff">3</span>))
</span></span><span style="display:flex;"><span>    (:tag <span style="color:#e6db74">&#34;demo-concept&#34;</span> (:proto (<span style="color:#ae81ff">1</span> <span style="color:#ae81ff">2</span>) :anagnosis <span style="color:#ae81ff">3</span> :amnesia <span style="color:#ae81ff">0.7</span>))))
</span></span></code></pre></div><p>Μία σημείωση κάτω ἀπὸ τὸ deck <em>demo</em> μὲ ἐτικέτα <em>demo-concept</em> θὰ ἔχει τὶς
τιμὲς τοῦ deck demo μὲ ἐξαίρεση:</p>
<ul>
<li>τιμὴ <code>proto</code> ὁρισμένη σὲ <code>(1 2)</code></li>
<li>τιμὴ <code>amnesia</code> ὁρισμένη σὲ <code>0.7</code></li>
</ul>
<p>Γιὰ σημειώσεις μὲ πολλαπλὲς ἐτικέτες, διατηρεῖται ἡ μέγιστη τιμὴ γιὰ
τὶς περισσότερες παραμέτρους.  Ὡστόσο, τὰ <code>anagnosis</code> καὶ <code>lethe</code>
διατηροῦν τὴν ἐλάχιστη τιμὴ.</p>
<h2 id="next-features-on-the-horizon">Ἑπόμενα χαρακτηριστικὰ στὸν ὁρίζοντα</h2>
<ul>
<li>Ἐνσωμάτωση Org mode</li>
<li>Ἐξαγωγὴ καὶ εἰσαγωγὴ deck</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Σύνοψις παρουσίασης πενικιλλινῶν</title>
      <link>https://thanosapollo.org/el/posts/penicillins-presentation/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/penicillins-presentation/</guid>
      <description>&lt;p&gt;Συνοπτικὴ ἔκδοση τῆς παρουσίασής μου γιὰ τὶς &lt;a href=&#34;https://en.wikipedia.org/wiki/Penicillin&#34;&gt;πενικιλλίνες&lt;/a&gt; στὸ μάθημα
φαρμακολογίας.  Οἱ πενικιλλίνες εἶναι β-λακταμικὰ ἀντιβακτηριακὰ
φάρμακα ποὺ ἀναστέλλουν τὴ σύνθεση τοῦ βακτηριακοῦ κυτταρικοῦ
τοιχώματος, καὶ ἔτσι κατηγοριοποιοῦνται ὡς βακτηριοκτόνα.&lt;/p&gt;
&lt;h2 id=&#34;ἱστορία&#34;&gt;Ἱστορία&lt;/h2&gt;
&lt;p&gt;Ἀνακαλύφθηκαν ἀπὸ τὸν Alexander Fleming, τὸ 1928.  Παρατήρησε
τυχαία ὅτι οἱ &lt;em&gt;σταφυλόκοκκοι&lt;/em&gt; δὲν μεγάλωναν γύρω ἀπὸ τὴ μούχλα
Penicillium rubens.&lt;/p&gt;
&lt;p&gt;Ὡστόσο, μόλις τὸ 1941 ὁ Αὐστραλὸς παθολόγος Howard Florey καὶ ὁ
Γερμανογέννητος Βρετανὸς βιοχημικὸς Ernst Boris Chain
ἀνέπτυξαν ἐπιτυχῶς μέθοδο παραγωγῆς καθαρῆς μορφῆς πενικιλλίνης
σὲ μεγάλη κλίμακα.  Αὐτὴ ἡ τομὴ ὁδήγησε τελικὰ σὲ μαζικὴ παραγωγή,
μὲ τὴν πενικιλλίνη νὰ γίνεται εὐρέως διαθέσιμη πρὸς τὸ τέλος τοῦ
Δευτέρου Παγκοσμίου Πολέμου.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Συνοπτικὴ ἔκδοση τῆς παρουσίασής μου γιὰ τὶς <a href="https://en.wikipedia.org/wiki/Penicillin">πενικιλλίνες</a> στὸ μάθημα
φαρμακολογίας.  Οἱ πενικιλλίνες εἶναι β-λακταμικὰ ἀντιβακτηριακὰ
φάρμακα ποὺ ἀναστέλλουν τὴ σύνθεση τοῦ βακτηριακοῦ κυτταρικοῦ
τοιχώματος, καὶ ἔτσι κατηγοριοποιοῦνται ὡς βακτηριοκτόνα.</p>
<h2 id="ἱστορία">Ἱστορία</h2>
<p>Ἀνακαλύφθηκαν ἀπὸ τὸν Alexander Fleming, τὸ 1928.  Παρατήρησε
τυχαία ὅτι οἱ <em>σταφυλόκοκκοι</em> δὲν μεγάλωναν γύρω ἀπὸ τὴ μούχλα
Penicillium rubens.</p>
<p>Ὡστόσο, μόλις τὸ 1941 ὁ Αὐστραλὸς παθολόγος Howard Florey καὶ ὁ
Γερμανογέννητος Βρετανὸς βιοχημικὸς Ernst Boris Chain
ἀνέπτυξαν ἐπιτυχῶς μέθοδο παραγωγῆς καθαρῆς μορφῆς πενικιλλίνης
σὲ μεγάλη κλίμακα.  Αὐτὴ ἡ τομὴ ὁδήγησε τελικὰ σὲ μαζικὴ παραγωγή,
μὲ τὴν πενικιλλίνη νὰ γίνεται εὐρέως διαθέσιμη πρὸς τὸ τέλος τοῦ
Δευτέρου Παγκοσμίου Πολέμου.</p>
<p>Ἔφερε ἐπανάσταση στὸν ἰατρικὸ κόσμο, παρέχοντας ἀποτελεσματικὴ θεραπεία
γιὰ πολλὲς βακτηριακὲς λοιμώξεις, καὶ χάρισε στοὺς Fleming, Florey
καὶ Chain τὸ βραβεῖο Νόμπελ Φυσιολογίας ἢ Ἰατρικῆς τοῦ 1945.</p>
<p><em>Ἐνδιαφέρον γεγονὸς</em>:</p>
<blockquote>
<p>Ἡ <a href="https://en.wikipedia.org/wiki/Amalia_Fleming">Ἀμαλία Φλέμιγκ</a>, σύζυγος τοῦ Alexander Fleming, ἦταν Ἑλληνίδα
ἰατρὸς καὶ πολιτικὸς ποὺ βοήθησε τὴν <a href="https://en.wikipedia.org/wiki/Greek_resistance">Ἑλληνικὴ Ἀντίσταση</a> κατὰ τῆς
κατοχῆς τῶν δυνάμεων τοῦ Ἄξονα.</p>
</blockquote>
<h2 id="ἐπισκόπηση">Ἐπισκόπηση</h2>
<h3 id="δομή">Δομή</h3>
<p>Δομικά, αὐτὴ ἡ κατηγορία β-λακταμικῶν φέρει ἰδιαίτερα ἕναν διακριτὸ
4-μελῆ δακτύλιο β-λακτάμης, ἐπιπλέον δακτυλίου θειαζολιδίνης καὶ
πλευρικῆς ἁλύσου R.</p>
<p>Τὸ κύριο διακριτικὸ χαρακτηριστικὸ μεταξὺ παραλλαγῶν αὐτῆς τῆς
οἰκογένειας εἶναι ὁ <em>ὑποκαταστάτης R</em>.  Αὐτὴ ἡ πλευρικὴ ἅλυσος
συνδέεται μὲ τὸ ὑπόλειμμα 6-αμινοπενικιλλανικοῦ ὀξέος καὶ ὁδηγεῖ σὲ
<em>παραλλαγὲς</em> στὸ ἀντιμικροβιακὸ φάσμα, τὴ σταθερότητα καὶ τὴν
εὐαισθησία στὶς β-λακταμάσες κάθε βακτηριοκτόνου φαρμάκου.</p>
<h2 id="μηχανισμὸς-δράσης">Μηχανισμὸς δράσης</h2>
<p>Ὁ μηχανισμὸς δράσης τῶν πενικιλλινῶν ἐστιάζει κυρίως στὴν
<strong>ἀναστολὴ τῆς σύνθεσης τοῦ βακτηριακοῦ κυτταρικοῦ τοιχώματος</strong>,
οὐσιώδη διαδικασία γιὰ τὴν αὔξηση καὶ ἐπιβίωση τῶν βακτηρίων.  Ὁ
δακτύλιος β-λακτάμης στὶς πενικιλλίνες μιμεῖται τὶς τερματικὲς
δομὲς D-Alanyl-D-Alanine ποὺ βρίσκονται στοὺς προδρόμους τῶν
βακτηριακῶν κυτταρικῶν τοιχωμάτων.  Αὐτὴ ἡ μίμηση ἐπιτρέπει στὶς
πενικιλλίνες νὰ δεσμεύονται στὶς πρωτεΐνες δέσμευσης πενικιλλίνης
(<em>PBPs</em>), ἔνζυμα ποὺ ἐμπλέκονται στὴ σύνθεση τοῦ κυτταρικοῦ
τοιχώματος.</p>
<p>Μὲ τὴ δέσμευση, ἡ φυσιολογικὴ λειτουργία τῶν PBPs διαταράσσεται,
ὁδηγώντας σὲ ἐλαττωματικὴ παραγωγὴ κυτταρικοῦ τοιχώματος.  Ἀποτέλεσμα
αὐτῶν τῶν ἀλλαγῶν στὴν ἀκεραιότητα τοῦ τοιχώματος εἶναι ὅτι τὰ
βακτήρια μποροῦν νὰ ὑποστοῦν λύση λόγω ἀνισορροπιῶν στὴν κυτταρικὴ
ὀσμωτικὴ πίεση, ἐπιτυγχάνοντας ἔτσι τὸ βακτηριοκτόνο ἀποτέλεσμα τῶν
πενικιλλινῶν.</p>
<p>Ἐπιπλέον, ἡ πλευρικὴ ἅλυσος R τῆς πενικιλλίνης ἐπιτρέπει τὸ εὐρὺ
φάσμα δράσης της κατὰ διαφόρων τύπων βακτηρίων, λόγω παραλλαγῶν
ποὺ ἐπηρεάζουν τὸ ἀντιμικροβιακὸ φάσμα, τὴ σταθερότητα καὶ τὴν
ἀντίσταση στὶς β-λακταμάσες.</p>
<h2 id="ἀντιβακτηριακὸ-φάσμα-and-τύποι">Ἀντιβακτηριακὸ φάσμα &amp; τύποι</h2>
<h3 id="φυσικῶς-ἐμφανιζόμενες">Φυσικῶς ἐμφανιζόμενες</h3>
<p><em>Λαμβάνονται ἀπὸ ζυμώσεις τοῦ μύκητα Penicillum chrysogenum</em></p>
<h4 id="πενικιλλίνη-g">Πενικιλλίνη G</h4>
<p>Ἡ πενικιλλίνη G εἶναι κρίσιμο μέλος τῆς οἰκογένειας πενικιλλινῶν
λόγω τῶν μοναδικῶν χαρακτηριστικῶν της.  Δὲν ἀπορροφᾶται καλὰ ἀπὸ
τὸν γαστρεντερικὸ σωλήνα, γι’ αὐτὸ χρησιμοποιεῖται κυρίως
ἐνδοφλεβίως.  Λόγω τῆς ἐκλεκτικότητάς της, τὰ περισσότερα εἴδη
στρεπτοκόκκων εἶναι εὐαίσθητα σὲ αὐτήν, ὁδηγώντας σὲ
ἀποτελεσματικὸ ἔλεγχο λοιμώξεων στὶς περισσότερες περιπτώσεις.</p>
<p>Ὡστόσο, ἀξίζει νὰ σημειωθεῖ ὅτι ἡ πλειονότητα τῶν εἰδῶν
Staphylococcus aureus ἔχει ἀναπτύξει ἀντίσταση σὲ αὐτήν, καθιστώντας
τὴν πενικιλλίνη G λιγότερο ἀποτελεσματικὴ σὲ τέτοιες καταστάσεις.</p>
<p>Παρ’ ὅλα αὐτά, ἡ πενικιλλίνη G εἶναι τὸ φάρμακο ἐκλογῆς γιὰ τὴ
θεραπεία ἀεριογόνου γάγγραινας ἀπὸ Clostridium perfringens.
Παρομοίως, ἡ ἀποτελεσματικότητά της ἀποδεικνύεται στὴ θεραπεία
λοιμώξεων ὅπως ἡ σύφιλη ἀπὸ Treponema.</p>
<p>Ἡ πενικιλλίνη G εἶναι ἀποτελεσματικὴ στὴ θεραπεία τῆς σύφιλης· ἕνα
οὐσιῶδες σημεῖο εἶναι ἡ πιθανὴ ἐμφάνιση τῆς ἀντίδρασης
Jarisch-Herxheimer.  Πρόκειται γιὰ συστηματικὴ ἀντίδραση, ποὺ συχνὰ
παρατηρεῖται ἐντὸς τῶν πρώτων ὡρῶν θεραπείας σὲ ἀσθενεῖς ποὺ
θεραπεύονται γιὰ σύφιλη.  Τὰ συμπτώματα μπορεῖ νὰ περιλαμβάνουν
πυρετό, ρίγη, κεφαλαλγία καὶ μυαλγία.  Παρόλο ποὺ μπορεῖ νὰ εἶναι
ἀνησυχητική, ἡ ἀντίδραση εἶναι τυπικὰ αὐτοπεριοριζόμενη καὶ
μπορεῖ νὰ ἀντιμετωπιστεῖ συμπτωματικά.</p>
<h4 id="πενικιλλίνη-v">Πενικιλλίνη V</h4>
<p>Ἡ πενικιλλίνη V, λιγότερο ἰσχυρὴ παραλλαγὴ τῆς πενικιλλίνης G,
χορηγεῖται συνήθως ἀπὸ τὸ στόμα λόγω τῶν ὀξεοσταθερῶν ἰδιοτήτων
της.  Αὐτὸ τὴν καθιστᾶ ἰδιαίτερα ἀποτελεσματικὴ καὶ ἀσφαλῆ γιὰ
γαστρικὴ χορήγηση.</p>
<p>Παρόλο ποὺ προσφέρει ἠπιότερη ἐπίδραση σὲ σύγκριση μὲ τὴν
πενικιλλίνη G, χρησιμοποιεῖται εὐρέως στὴ θεραπεία λιγότερο σοβαρῶν
λοιμώξεων, καθιστώντας τὴν οὐσιώδη συνιστῶσα στὸ φάσμα τῶν
πενικιλλινῶν.</p>
<h3 id="ἀντισταφυλοκοκκικὲς-πενικιλλίνες">Ἀντισταφυλοκοκκικὲς πενικιλλίνες</h3>
<p><em>Γνωστὲς καὶ ὡς πενικιλλίνες ἀνθεκτικὲς στὴν πενικιλλινάση</em>, εἶναι
ὑποσύνολο πενικιλλινῶν ἰδιαίτερα ἀποτελεσματικὸ κατὰ λοιμώξεων
Staphylococcus.  Σὲ ἀντίθεση μὲ τὶς συνήθεις πενικιλλίνες, εἶναι
ἀνθεκτικὲς στὰ ἔνζυμα πενικιλλινάσης (β-λακταμάσης) ποὺ ἐκκρίνουν
ὁρισμένα βακτήρια γιὰ νὰ ἀκυρώσουν τὴ βακτηριοκτόνο δράση τῶν
πενικιλλινῶν.</p>
<p>Ἡ μεθικιλλίνη, παρόλο ποὺ δὲν χρησιμοποιεῖται πιὰ εὐρέως λόγω
ἀλλεργικῶν ἀντιδράσεων καὶ ἀντίστασης, ἦταν μία ἀπὸ τὶς πρῶτες
αὐτῶν τῶν πενικιλλινῶν.  Ἄνοιξε τὸν δρόμο γιὰ ἄλλες, πιὸ στιβαρές,
ἀντισταφυλοκοκκικὲς πενικιλλίνες.</p>
<p>Ἡ <strong>φλουκλοξακιλλίνη</strong>, ἡ <strong>ὀξακιλλίνη</strong> καὶ ἡ <strong>δικλοξακιλλίνη</strong> ἔχουν
σὲ μεγάλο βαθμὸ ἀντικαταστήσει τὴ μεθικιλλίνη.</p>
<p>Ὅλες ἔχουν παρόμοιο μηχανισμὸ δράσης· ἀναστέλλουν τὴ σύνθεση τοῦ
βακτηριακοῦ κυτταρικοῦ τοιχώματος δεσμευόμενες στὶς πρωτεΐνες
δέσμευσης πενικιλλίνης, ὁδηγώντας τελικὰ σὲ θάνατο τοῦ βακτηριακοῦ
κυττάρου.  Αὐτὰ τὰ φάρμακα χρησιμοποιοῦνται κυρίως γιὰ λοιμώξεις
δέρματος καὶ μαλακῶν ἱστῶν ἀπὸ Staphylococcus aureus, συμπεριλαμβανομένων
κυτταρίτιδας καὶ μολυσματικοῦ κηρίου.</p>
<p>Παρόλο ποὺ γενικὰ γίνονται καλὰ ἀνεκτά, μποροῦν νὰ προκαλέσουν
παρενέργειες ὅπως γαστρεντερικὰ προβλήματα καὶ ἀλλεργικὲς
ἀντιδράσεις.  Αὐτὰ τὰ φάρμακα πρέπει νὰ χρησιμοποιοῦνται μὲ
προσοχὴ σὲ ἀσθενεῖς μὲ ἱστορικὸ ἀλλεργίας στὴν πενικιλλίνη καὶ
νεφρικὴ νόσο.  Ἡ ὀξακιλλίνη καὶ ἡ δικλοξακιλλίνη εἶναι συχνὰ πιὸ
ἐπιθυμητὲς λόγω τῆς δυνατότητας χορήγησης ἀπὸ τὸ στόμα σὲ σύγκριση
μὲ τὴ φλουκλοξακιλλίνη, ποὺ συνήθως χορηγεῖται παρεντερικά.</p>
<h3 id="ἀμινοπενικιλλίνες">Ἀμινοπενικιλλίνες</h3>
<p>Κατηγοριοποιοῦνται ὡς ἀντιβιοτικὰ εὐρέος φάσματος λόγω τῆς
χρησιμότητάς τους κατὰ Gram-ἀρνητικῶν καὶ Gram-θετικῶν βακτηρίων.
Ἡ ἀμοξικιλλίνη καὶ ἡ ἀμπικιλλίνη εἶναι κοινὰ παραδείγματα
ἀμινοπενικιλλινῶν.</p>
<h4 id="ἀμπικιλλίνη">Ἀμπικιλλίνη</h4>
<p>Ἡ ἀμπικιλλίνη παρουσιάζει παρόμοιο ἀντιβακτηριακὸ φάσμα μὲ τὴν
ἀμοξικιλλίνη ἀλλὰ διαφέρει κρίσιμα στὴ φαρμακοκινητικὴ καὶ τὸν
τρόπο χορήγησης.</p>
<p>Παρόλο ποὺ εἶναι ἀποτελεσματικὴ κατὰ πολλῶν Gram-θετικῶν καὶ
ἐπιλεγμένων Gram-ἀρνητικῶν βακτηρίων, στερεῖται σταθερότητας στὸ
γαστρικὸ ὀξύ, πρᾶγμα ποὺ μπορεῖ νὰ μειώσει τὴ συστηματικὴ
ἀπορρόφησή της ὅταν λαμβάνεται ἀπὸ τὸ στόμα.</p>
<p>Γι’ αὐτὸ χορηγεῖται συχνὰ ἐνδοφλεβίως ἢ ἐνδομυϊκῶς σὲ κλινικὸ
πλαίσιο.  Τὸ φάσμα τῆς ἀμπικιλλίνης μπορεῖ νὰ διευρυνθεῖ σημαντικὰ
μὲ συγχορήγηση ἀναστολέα β-λακταμάσης ὅπως ἡ σουλβακτάμη.</p>
<h4 id="ἀμοξικιλλίνη">Ἀμοξικιλλίνη</h4>
<p>Διακρίνεται γιὰ τὴν εὐρεῖα χρήση της στὴ θεραπεία ποικιλίας
βακτηριακῶν λοιμώξεων.  Προτιμᾶται γιὰ τὴν εὐρέος φάσματος
ἀντιβακτηριακὴ δράση της κατὰ Gram-θετικῶν καὶ Gram-ἀρνητικῶν
μικροβίων, συμπεριλαμβανομένων H. influenzae, E. coli καὶ
S. pneumoniae.  Ἡ ἐνισχυμένη σταθερότητά της ἔναντι τοῦ γαστρικοῦ
ὀξέος ἐξασφαλίζει ὑψηλότερη συστηματικὴ ἀπορρόφηση ὅταν χορηγεῖται
ἀπὸ τὸ στόμα, μεῖζον πλεονέκτημα ἔναντι τῶν συγχρόνων της.</p>
<p>Ἐπιπλέον, ἡ ἀμοξικιλλίνη συνταγογραφεῖται συχνὰ σὲ συνδυασμὸ μὲ
κλαβουλανικὸ ὀξύ, ἀναστολέα β-λακταμάσης, γιὰ ἀντιμετώπιση
βακτηρίων ποὺ παράγουν ἔνζυμα β-λακταμάσης τὰ ὁποῖα ἀλλιῶς
μποροῦν νὰ ἀδρανοποιήσουν τὴν ἀμοξικιλλίνη.</p>
<h3 id="ἐκτεταμένου-φάσματος">Ἐκτεταμένου φάσματος</h3>
<h4 id="πιπερακιλλίνη">Πιπερακιλλίνη</h4>
<p>Ἡ πιπερακιλλίνη εἶναι ἰσχυρὴ πενικιλλίνη ἐκτεταμένου φάσματος
ἀνεπτυγμένη γιὰ νὰ ἀντιμετωπίσει τὴν ἄνοδο ἀνθεκτικῶν βακτηριακῶν
λοιμώξεων.</p>
<p>Ἔχει εὐρύτερη ἀντιβακτηριακὴ δράση ἀπὸ τὶς περισσότερες ἄλλες
πενικιλλίνες, ἰδιαίτερα ἀποτελεσματικὴ κατὰ Gram-ἀρνητικῶν
βακτηρίων συμπεριλαμβανομένης τῆς <strong>pseudomonas aeruginosa</strong>.  Ἡ
πιπερακιλλίνη ἔχει ἐπίσης ἀνώτερη δράση κατὰ ἐντεροκόκκων· ὡστόσο
παραμένει ἀναποτελεσματικὴ κατὰ Staphylococcus aureus ἀνθεκτικοῦ στὴ μεθικιλλίνη
(MRSA).  Λειτουργεῖ ἀναστέλλοντας τὴ σύνθεση
τοῦ βακτηριακοῦ κυτταρικοῦ τοιχώματος, ὁδηγώντας σὲ θάνατο
κυττάρου.</p>
<blockquote>
<p>Ἡ πιπερακιλλίνη συχνὰ συνδυάζεται μὲ ταζοβακτάμη, ἀναστολέα
β-λακταμάσης, γιὰ ὑπερνίκηση ἀντίστασης ἀπὸ ἔνζυμα β-λακταμάσης.</p>
</blockquote>
<h4 id="τικαρκιλλίνη">Τικαρκιλλίνη</h4>
<p>Ἡ τικαρκιλλίνη, ἄλλη πενικιλλίνη ἐκτεταμένου φάσματος, ἔχει παρόμοιο
μηχανισμὸ μὲ τὴν πιπερακιλλίνη, στοχεύοντας τὴ σύνθεση τοῦ
βακτηριακοῦ κυτταρικοῦ τοιχώματος.  Ἀλλὰ διαφέρει ἀπὸ τὴν
πιπερακιλλίνη στὸ ἀντιμικροβιακὸ φάσμα της.</p>
<p>Εἶναι λιγότερο δραστικὴ κατὰ Gram-ἀρνητικῶν βακτηρίων καὶ ἔχει
ἐλάχιστη δράση κατὰ pseudomonas aeruginosa.  Ὡστόσο εἶναι πιὸ
ἀποτελεσματικὴ κατὰ σταφυλοκόκκων καὶ στρεπτοκόκκων.</p>
<blockquote>
<p>Ἡ τικαρκιλλίνη χρησιμοποιεῖται συχνὰ μὲ ἀναστολέα β-λακταμάσης,
κλαβουλανικὸ ὀξύ, γιὰ καταπολέμηση ἀντίστασης σχετιζόμενης μὲ
β-λακταμάση.</p>
</blockquote>
<h4 id="σύγκριση">Σύγκριση</h4>
<p>Συγκρίνοντας καὶ τὶς δύο, ἡ τικαρκιλλίνη ἔχει χαμηλότερο φορτίο
νατρίου ποὺ μπορεῖ νὰ εἶναι ὠφέλιμο σὲ ἀσθενεῖς ποὺ χρειάζονται
περιορισμὸ νατρίου.</p>
]]></content:encoded>
    </item>
    <item>
      <title>XMPP: Ξεκινώντας μὲ τὸ καθολικὸ πρότυπο ἐπικοινωνίας</title>
      <link>https://thanosapollo.org/el/posts/moving-to-xmpp/</link>
      <pubDate>Tue, 30 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/moving-to-xmpp/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Τὸ &lt;a href=&#34;https://xmpp.org/&#34;&gt;XMPP&lt;/a&gt; εἶναι μιὰ ἐλεύθερη ἀποκεντρωμένη συλλογὴ τεχνολογιῶν,
ἐναλλακτικὴ σὲ κλειστὲς ὑπηρεσίες ἐπικοινωνίας.  Ἄρχισα νὰ
αὐτοφιλοξενῶ τὸν δικό μου διακομιστὴ xmpp καὶ νὰ μετακινῶ ἀνθρώπους
ἀπὸ τὸν στενὸ μου κύκλο ἐκεῖ.  Αὐτὴ εἶναι σύνοψις τῆς συλλογῆς
σημειώσεών μου γιὰ τὸ XMPP μέχρι τώρα, δημοσιευμένη ὡς σύντομο
ἄρθρο.  Ἂν ἐνδιαφέρεσαι νὰ μάθεις περισσότερα γιὰ τὸ XMPP, συνιστῶ
τὴν ἐπίσημη &lt;a href=&#34;https://xmpp.org/&#34;&gt;ἱστοσελίδα&lt;/a&gt; τους.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;τί-εἶναι-τὸ-xmpp&#34;&gt;Τί εἶναι τὸ XMPP;&lt;/h2&gt;
&lt;p&gt;Τὸ XMPP σημαίνει eXtensible Messaging and Presence Protocol· εἶναι
σύνολο ἐλεύθερων τεχνολογιῶν ποὺ μποροῦν νὰ χρησιμοποιηθοῦν γιὰ
ὑπηρεσίες ἐπικοινωνίας, ὅπως ἄμεσα μηνύματα, φωνητικὲς καὶ
βιντεοκλήσεις καθὼς καὶ μεταφορὲς ἀρχείων.  Αὐτὸ γίνεται μὲ
δρομολόγηση δεδομένων &lt;code&gt;XML&lt;/code&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>Τὸ <a href="https://xmpp.org/">XMPP</a> εἶναι μιὰ ἐλεύθερη ἀποκεντρωμένη συλλογὴ τεχνολογιῶν,
ἐναλλακτικὴ σὲ κλειστὲς ὑπηρεσίες ἐπικοινωνίας.  Ἄρχισα νὰ
αὐτοφιλοξενῶ τὸν δικό μου διακομιστὴ xmpp καὶ νὰ μετακινῶ ἀνθρώπους
ἀπὸ τὸν στενὸ μου κύκλο ἐκεῖ.  Αὐτὴ εἶναι σύνοψις τῆς συλλογῆς
σημειώσεών μου γιὰ τὸ XMPP μέχρι τώρα, δημοσιευμένη ὡς σύντομο
ἄρθρο.  Ἂν ἐνδιαφέρεσαι νὰ μάθεις περισσότερα γιὰ τὸ XMPP, συνιστῶ
τὴν ἐπίσημη <a href="https://xmpp.org/">ἱστοσελίδα</a> τους.</p>
</blockquote>
<h2 id="τί-εἶναι-τὸ-xmpp">Τί εἶναι τὸ XMPP;</h2>
<p>Τὸ XMPP σημαίνει eXtensible Messaging and Presence Protocol· εἶναι
σύνολο ἐλεύθερων τεχνολογιῶν ποὺ μποροῦν νὰ χρησιμοποιηθοῦν γιὰ
ὑπηρεσίες ἐπικοινωνίας, ὅπως ἄμεσα μηνύματα, φωνητικὲς καὶ
βιντεοκλήσεις καθὼς καὶ μεταφορὲς ἀρχείων.  Αὐτὸ γίνεται μὲ
δρομολόγηση δεδομένων <code>XML</code>.</p>
<p>Τὸ XMPP λειτουργεῖ παρόμοια μὲ τὸ HTTP, μὲ τὸν πελάτη νὰ ἀνοίγει
ὑποδοχὴ ἐπικοινωνίας πρὸς διακομιστὴ XMPP καὶ νὰ τὴν κρατᾶ ἀνοιχτὴ
γιὰ ὅλη τὴν ἐνεργὴ συνεδρία τοῦ πελάτη.</p>
<blockquote>
<p>Τὸ XMPP ἀναπτύχθηκε ἀρχικὰ στὴν κοινότητα Jabber γιὰ νὰ προσφέρει
ἀνοιχτὴ ἀποκεντρωμένη ἐναλλακτικὴ σὲ κλειστὲς ὑπηρεσίες μηνυμάτων.</p>
</blockquote>
<p>Τὸ XMPP χρησιμοποιεῖται ἀπὸ μερικὲς δημοφιλεῖς πλατφόρμες, μεταξὺ
τῶν ὁποίων <a href="https://medium.com/@rajendra_51543/how-whatsapp-works-197bfc6d6b95">WhatsApp</a>, Facebook
Messenger καὶ Jitsi.</p>
<h2 id="γιατί-νὰ-χρησιμοποιήσεις-xmpp">Γιατί νὰ χρησιμοποιήσεις XMPP;</h2>
<p>Γιὰ μένα, ἡ κύρια ἕλξη τοῦ XMPP βρίσκεται στὴ διαλειτουργικότητα, τὴν
εὐελιξία καὶ τὴν ἐπεκτασιμότητά του.  Μέσω XMPP transports ἢ γεφυρῶν, τὸ
XMPP ἐπιτρέπει ἀπρόσκοπτη σύνδεση μὲ κοινότητες σὲ διάφορες
πλατφόρμες <em>συμπεριλαμβανομένων IRC, Matrix, WhatsApp, Telegram</em> καὶ
ὅλα αὐτὰ ἀπὸ ἕναν μόνο πελάτη.</p>
<p>Ἐπιπλέον, ἡ ἀποκεντρωμένη φύση τοῦ XMPP εἶναι <strong>σχεδιασμένη</strong> γιὰ
αὐτοφιλοξενία, <em>μὲ ἐλάχιστους πόρους</em>.  Αὐτὸ μοῦ δίνει τὴν ἐλευθερία
νὰ στήσω καὶ νὰ διαχειριστῶ τὸν δικό μου διακομιστή, δημιουργώντας
οἰκοσύστημα ποὺ μοῦ παρέχει ἐλευθερία καὶ σέβεται τὰ δικαιώματά μου,
στὸ ὁποῖο μπορῶ νὰ φέρω οἰκογένεια καὶ φίλους.</p>
<h3 id="πῶς-νὰ-ἐπικοινωνήσεις-μὲ-irc-and-matrix-μέσω-xmpp">Πῶς νὰ ἐπικοινωνήσεις μὲ IRC &amp; Matrix μέσω XMPP;</h3>
<p>Μπορεῖς νὰ χρησιμοποιήσεις γέφυρα ποὺ συνδέεται στὴν ἐπιθυμητὴ
πλατφόρμα/πρωτόκολλο.  Γιὰ παράδειγμα, γιὰ IRC θὰ χρησιμοποιοῦσες
<a href="https://github.com/louiz/biboumi">biboumi</a> ἢ <a href="https://github.com/matrix-org/matrix-bifrost">btifrost</a>
γιὰ Matrix.</p>
<blockquote>
<p>Ὑπάρχουν δημόσια διαθέσιμες γέφυρες· γιὰ παράδειγμα μπορεῖς νὰ
χρησιμοποιήσεις τὴ γέφυρα biboumi ἀπὸ <a href="https://jabberfr.org/">jabberfr.org</a>
γιὰ σύνδεση στὸ κανάλι IRC τοῦ emacs στὸ libera.chat ἔτσι:
<code>#emacs%irc.libera.chat@irc.jabberfr.org</code></p>
</blockquote>
<h2 id="αὐτοφιλοξενία-διακομιστῆ-xmpp">Αὐτοφιλοξενία διακομιστῆ XMPP</h2>
<p>Ἂν δὲν ἐνδιαφέρεσαι νὰ αὐτοφιλοξενήσεις διακομιστὴ XMPP, συμβουλεύσου αὐτὴ
τὴ <a href="https://list.jabber.at/">λίστα</a> γιὰ διακομιστὲς στοὺς ὁποίους μπορεῖς νὰ ἐγγραφεῖς.</p>
<h3 id="ejabberd">ejabberd</h3>
<p>Ἐπέλεξα τὸν διακομιστὴ <a href="https://www.ejabberd.im/">ejabberd</a> γιὰ τὴ διάταξή μου, ποὺ βρῆκα
πραγματικὰ ἁπλὸ στὴν ἐγκατάσταση μὲ φωνητικὲς καὶ βιντεοκλήσεις.</p>
<p>Ἡ ἐγκατάσταση διακομιστῆ ejabberd εἶναι τόσο ἁπλὴ ποὺ δὲν χρειάζεται
πραγματικὰ ὁδηγίες.  Θὰ συνιστοῦσα τὸν <a href="https://docs.ejabberd.im/admin/install/binary-installer/#linux-run-installer">RUN Installer</a> τους ἢ ἂν εἶσαι
σὲ debian/fedora νὰ δεῖς τὶς <a href="https://github.com/processone/ejabberd/releases">ἐκδόσεις</a> τους γιὰ πακέτο rpm/deb.</p>
<p>Ἄλλες ἐπιλογὲς διακομιστῆ καὶ πελάτη βρίσκονται <a href="https://xmpp.org/software/?platform=linux">ἐδῶ</a>.</p>
<h2 id="πελάτες-xmpp">Πελάτες XMPP</h2>
<p>Συνολικά, τὸ XMPP προσφέρει φιλικοὺς πρὸς τὸν χρήστη πελάτες σὲ ὅλες
τὶς πλατφόρμες, ποὺ μπορεῖ νὰ χρησιμοποιήσει ὁ καθένας· ὅπως πάντα
συμβουλεύσου <a href="https://xmpp.org/software/?platform=linux">ἐδῶ</a> γιὰ ἐπίκαιρες συστάσεις.</p>
<p>Αὐτὸ εἶναι αὐτὸ ποὺ <em>προσωπικὰ</em> χρησιμοποιῶ αὐτὴ τὴν ἑβδομάδα μὲ
XMPP καὶ συνιστῶ.</p>
<h3 id="κινητό">Κινητό</h3>
<ul>
<li>Γιὰ android, θὰ συνιστοῦσα <a href="https://f-droid.org/packages/com.cheogram.android/">cheogram</a>· βασίζεται στὸ
<a href="https://conversations.im/">conversations</a> μὲ λίγες ὀπτικὲς προσαρμογὲς καὶ ἐπιπλέον
δυνατότητες.</li>
<li>Γιὰ iOS, ἐγκατέστησα <a href="https://monal-im.org/">Monal</a> σὲ φίλους καὶ οἰκογένεια.  Δὲν
εἶμαι σίγουρος ἂν εἶναι τὸ καλύτερο διαθέσιμο ἐπειδὴ τὸ
οἰκοσύστημα iOS μοῦ εἶναι ξένο, ἀλλὰ οἱ ἄνθρωποι στοὺς ὁποίους τὸ
ἐγκατέστησα τὸ βρῆκαν εὐχάριστο στὴ χρήση.</li>
</ul>
<h3 id="ἐπιφάνεια-ἐργασίας">Ἐπιφάνεια ἐργασίας</h3>
<ul>
<li>Θὰ συνιστοῦσα <a href="https://dino.im/">Dino</a>· ἦταν πραγματικὰ εὔκολο στὴ χρήση μὲ πλήρη
ὑποστήριξη τῶν περισσότερων δυνατοτήτων xmpp (<a href="https://en.wikipedia.org/wiki/OMEMO">OMEMO</a> κρυπτογράφηση
κ.λπ.)</li>
<li>Ὑπάρχει ἐπίσης <a href="https://codeberg.org/emacs-jabber/emacs-jabber">emacs-jabber</a>, ἐπέκταση jabber γιὰ Ἤμαξ, ποὺ
δυστυχῶς δὲν ὑποστηρίζει κανένα εἶδος κρυπτογράφησης.  Εἶναι
ἀξιοπρεπὲς γιὰ δημόσια ἀκρυπτογράφητα κανάλια.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Jellyfin: Τροφοδοτώντας τὴν αὐτοφιλοξενούμενη ἐπανάσταση πολυμέσων</title>
      <link>https://thanosapollo.org/el/posts/jellyfin-setup/</link>
      <pubDate>Thu, 04 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/jellyfin-setup/</guid>
      <description>&lt;p&gt;Τὸ &lt;a href=&#34;https://jellyfin.org/&#34;&gt;Jellyfin&lt;/a&gt; εἶναι ἡ ἀγαπημένη μου ὑπηρεσία αὐτοφιλοξενίας· τὸ
χρησιμοποιῶ γιὰ ταινίες καὶ βιβλία καὶ θὰ τὸ σκεφτόμουν ἀκόμη καὶ γιὰ
φωτογραφίες ἂν δὲν ὑπῆρχε τὸ &lt;a href=&#34;https://thanosapollo.org/el/posts/immich-setup/&#34;&gt;Immich&lt;/a&gt;.  Τὸ Jellyfin εἶναι πραγματικὰ
δημοφιλὲς ὡς αὐτοφιλοξενούμενη ὑπηρεσία ροῆς γιὰ ταινίες καὶ τηλεοπτικὲς
σειρές, ἀφοῦ ἐκεῖνες οἱ πλατφόρμες ὑποφέρουν βαριὰ ἀπὸ
&lt;a href=&#34;https://en.wikipedia.org/wiki/Enshittification&#34;&gt;σταδιακὴ ἐξαχρείωση τῶν πλατφορμῶν&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Τὸ Jellyfin μπορεῖ νὰ κάνει πολὺ περισσότερα ἀπὸ τὸ νὰ μεταδίδει τὶς
ἀγαπημένες σου ταινίες καὶ σειρές.  Εἴτε εἶσαι λάτρης ταινιῶν, μουσικῆς
ἢ φωτογραφίας, τὸ Jellyfin σὲ καλύπτει.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Τὸ <a href="https://jellyfin.org/">Jellyfin</a> εἶναι ἡ ἀγαπημένη μου ὑπηρεσία αὐτοφιλοξενίας· τὸ
χρησιμοποιῶ γιὰ ταινίες καὶ βιβλία καὶ θὰ τὸ σκεφτόμουν ἀκόμη καὶ γιὰ
φωτογραφίες ἂν δὲν ὑπῆρχε τὸ <a href="/el/posts/immich-setup/">Immich</a>.  Τὸ Jellyfin εἶναι πραγματικὰ
δημοφιλὲς ὡς αὐτοφιλοξενούμενη ὑπηρεσία ροῆς γιὰ ταινίες καὶ τηλεοπτικὲς
σειρές, ἀφοῦ ἐκεῖνες οἱ πλατφόρμες ὑποφέρουν βαριὰ ἀπὸ
<a href="https://en.wikipedia.org/wiki/Enshittification">σταδιακὴ ἐξαχρείωση τῶν πλατφορμῶν</a>.</p>
<blockquote>
<p>Τὸ Jellyfin μπορεῖ νὰ κάνει πολὺ περισσότερα ἀπὸ τὸ νὰ μεταδίδει τὶς
ἀγαπημένες σου ταινίες καὶ σειρές.  Εἴτε εἶσαι λάτρης ταινιῶν, μουσικῆς
ἢ φωτογραφίας, τὸ Jellyfin σὲ καλύπτει.</p>
</blockquote>
<h2 id="τί-εἶναι-τὸ-jellyfin">Τί εἶναι τὸ Jellyfin</h2>
<p>Τὸ Jellyfin εἶναι αὐτοφιλοξενούμενη ὑπηρεσία πολυμέσων, ποὺ σοῦ δίνει
πλήρη ἔλεγχο πάνω στὰ <strong>δικά σου</strong> μέσα.  Εἶναι μία ἀπὸ τὶς εὐκολότερες
καὶ πιὸ χρήσιμες ὑπηρεσίες γιὰ αὐτοφιλοξενία· ἀνατρέξτε στὶς
<a href="https://jellyfin.org/docs/general/installation/">ὁδηγίες ἐγκατάστασης</a> τοῦ Jellyfin γιὰ ἐπίκαιρες πληροφορίες.</p>
<h3 id="γιατί-jellyfin">Γιατί Jellyfin</h3>
<p>Ἡ βασικὴ δύναμη τοῦ Jellyfin εἶναι ἡ ὑποστήριξη πολλῶν πλατφορμῶν.  Σὲ
ἀντίθεση μὲ ἄλλες ὑπηρεσίες μέσων ὅπως τὸ <a href="https://github.com/Dusk-Labs/dim">Dim</a>, ἕνας διαχειριστὴς μέσων
σὲ rust, τὸ jellyfin ὑποστηρίζει εὐρὺ φάσμα πλατφορμῶν συμπεριλαμβανομένων
iOS καὶ Android.  Αὐτὸ καθιστᾶ εὔκολη τὴν πρόσβαση στὸ περιεχόμενό σου,
ἀπὸ ὁποιαδήποτε συσκευή, ὁποιαδήποτε στιγμή.</p>
<h3 id="πρόσβαση-στὸ-jellyfin">Πρόσβαση στὸ Jellyfin</h3>
<p>Τὸ Jellyfin θὰ εἶναι διαθέσιμο ἐξ ὁρισμοῦ στὸ τοπικό σου δίκτυο στὸ
<code>&lt;host:8096&gt;</code>.  Συστήνω ὑπηρεσία VPN ὅπως <a href="https://tailscale.com/">tailscale</a> ἢ
<a href="https://www.pivpn.io/">pivpn</a> γιὰ πρόσβαση στὴν ἐγκατάσταση jellyfin ὅταν δὲν εἶσαι στὸ τοπικό
σου δίκτυο.</p>
<h2 id="jellyfin-ὡς-ὑπηρεσία-ροῆς-ταινιῶν-and-σειρῶν">Jellyfin ὡς ὑπηρεσία ροῆς ταινιῶν &amp; σειρῶν</h2>
<p>Οἱ ὑπηρεσίες ροῆς περνοῦν μία παράξενη φάση· ἔχει ξεκινήσει μία ἐποχὴ
ἐξειδίκευσης ὑπηρεσιῶν, ἐπίσης γνωστὴ ὡς <em>παρακμὴ τῶν πλατφορμῶν</em>.  Ἔχουν περάσει
οἱ μέρες ποὺ ἀρκούσε μία μόνο συνδρομὴ· πλέον χρειάζονται συνδρομὲς σὲ
πολλὲς πλατφόρμες.</p>
<p>Μὲ τὸ jellyfin μπορεῖς νὰ παρακάμψεις γεωγραφικοὺς περιορισμοὺς καὶ νὰ
ἔχεις πλήρη ἔλεγχο καὶ αὐτονομία.  Οἱ σημερινὲς ἐμπορικὲς ὑπηρεσίες ροῆς
φαίνεται νὰ προσφέρουν φθίνουσα ἐμπειρία χρήστη, κάνοντας ὅλο καὶ πιὸ
δύσκολο νὰ δικαιολογήσεις τὰ τέλη συνδρομῆς τους.</p>
<blockquote>
<p>Ἀνάλογα μὲ τὸ πῶς προσπελαύνεις τὴν ἐγκατάσταση Jellyfin καὶ τὸ ὑλικὸ ποὺ
χρησιμοποιεῖς, μπορεῖς νὰ ἔχεις βελτιωμένη ἐπίδοση, ἰδίως σὲ σύγκριση μὲ
<em>«δωρεὰν»</em> ὑπηρεσίες ροῆς.</p>
</blockquote>
<h2 id="jellyfin-ὡς-ὑπηρεσία-ροῆς-μουσικῆς">Jellyfin ὡς ὑπηρεσία ροῆς μουσικῆς</h2>
<p>Ὅλοι γράφουν ἄρθρα γιὰ τὸ Jellyfin ὡς ἐναλλακτικὴ τοῦ Plex/Netflix, ἀλλὰ
εἶναι ἐπίσης ἀκόμη καλύτερος μουσικὸς ἀναπαραγωγέας σὲ κινητὸ ἀπὸ τὸ
Spotify, χάρη στὸ <a href="https://github.com/dkanada/gelli">Gelli</a>, ποὺ προσφέρει ἐγγενῆ ἀναπαραγωγέα μουσικῆς γιὰ
Android.</p>
<p>Ἡ μουσική μου συλλογὴ μοῦ εἶναι πολύτιμη· δυστυχῶς μὲ ὑπηρεσίες ὅπως τὸ
Spotify δὲν τὴν κατέχεις, παραχωρεῖς τὸν ἔλεγχο πάνω στὴ συλλογή σου.
Τὸ Spotify, τεράστιο σὲ ἐμβέλεια καὶ κλίμακα, μπορεῖ νὰ ἀλλάξει ὅρους καὶ
ἐμπειρία χρήστη κατὰ βούληση, ὅπως ἀφαιρώντας ἄλμπουμ ἀγαπημένων καλλιτεχνῶν
ἢ προσαρμόζοντας τὶς συστάσεις τοῦ ἀλγορίθμου γιὰ νὰ μεγιστοποιήσει τὸ
κέρδος του παραβλέποντας τὸ δικό σου γοῦστο.</p>
<p>Τὸ Jellyfin εἶναι αὐτοφιλοξενούμενο, ὁπότε ὅλες οἱ ἐπιλογὲς καὶ ἀποφάσεις
μένουν ἀκέραιες στὸ δικό σου πεδίο ἐλέγχου.</p>
<h2 id="jellyfin-ὡς-ψηφιακὴ-βιβλιοθήκη">Jellyfin ὡς ψηφιακὴ βιβλιοθήκη</h2>
<p>Ἡ ψηφιακή μου βιβλιοθήκη μοῦ εἶναι <strong>κρίσιμη</strong>.  Ἡ προσβασιμότητα εἶναι
κλειδί, εἴτε στὴ βιβλιοθήκη τοῦ πανεπιστημίου μου, εἴτε στὸ καφενεῖο, εἴτε
ἀκόμη καὶ σὲ αἴθουσα διαλέξεων.  Τὸ Jellyfin τὸ διευκολύνει ἀπρόσκοπτα.
Ἐνῶ ὁ προβολέας περιεχομένου ἴσως δὲν ταιριάζει στὶς προτιμήσεις μου, τὸ
ἀντιμετωπίζω κατεβάζοντας τὸ ἀπαιτούμενο βιβλίο καὶ διαβάζοντάς το στὸν
Ἤμαξ μὲ <a href="https://github.com/vedang/pdf-tools">pdf-tools</a> ἢ <a href="https://depp.brause.cc/nov.el/">nov.el</a>.</p>
<h2 id="μειονεκτήματα-χρήσης-jellyfin">Μειονεκτήματα χρήσης Jellyfin</h2>
<p>Τὸ μειονέκτημα τοῦ Jellyfin εἶναι ἡ πιθανὴ ἐξάρτηση ποὺ μπορεῖ ἀθέλητα
νὰ δημιουργήσει ἀπὸ ὑπηρεσίες διαμοιρασμοῦ ἀρχείων.  Ἀνάλογα μὲ τὶς
κοινότητες ποὺ ἐπισκέπτεσαι, ἡ ἐμπειρία σου μπορεῖ νὰ διαφέρει· ἴσως
συναντήσεις τοξικὰ ἄτομα ἢ φιλικοὺς ἀνθρώπους ποὺ μοιράζονται τὸ πάθος σου.</p>
<p>Συστήνω τὴν ἀνάγνωση τοῦ <a href="https://torrentfreak.com/">torrentfreak</a> γιὰ νὰ μένεις ἐνημερωμένος γιὰ
πρόσφατες ἐξελίξεις καὶ προτάσεις.</p>
<h2 id="συμπέρασμα">Συμπέρασμα</h2>
<p>Τὸ Jellyfin εἶναι ἰσχυρὴ αὐτοφιλοξενούμενη λύση πολυμέσων ποὺ ἐπιτρέπει
στοὺς χρήστες νὰ διαχειρίζονται τὴ βιβλιοθήκη ταινιῶν, τὴ μουσικὴ συλλογὴ
καὶ τὴν ψηφιακὴ βιβλιοθήκη μέσα σὲ μία ὑπηρεσία σὲ πολλαπλὲς πλατφόρμες.</p>
<p>Τὸ κύριο μειονέκτημα χρήσης Jellyfin εἶναι ἡ ἐξάρτηση ἀπὸ ὑπηρεσίες
διαμοιρασμοῦ ἀρχείων τρίτων.  Ὡστόσο, ἡ ἐξάρτηση ἀπὸ ἐμπορικὴ ὑπηρεσία
ροῆς εἶναι ἀκόμη χειρότερη ἐπιλογὴ σήμερα.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Immich: Αὐτοφιλοξενούμενη διαχείριση φωτογραφιῶν &amp; βίντεο</title>
      <link>https://thanosapollo.org/el/posts/immich-setup/</link>
      <pubDate>Mon, 25 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/immich-setup/</guid>
      <description>&lt;p&gt;Πρόσφατα πέρασα σὲ τηλέφωνο Pixel μὲ GrapheneOS ὡς κύρια συσκευή, ἀφήνοντας
πίσω ἕνα iPhone.  Τὸ μόνο ποὺ μοῦ ἔλειπε ἦταν νὰ ἔχω τὶς φωτογραφίες μου σὲ
συγχρονισμὸ σὲ ὅλες τὶς συσκευές μου μέσω iCloud, ἀλλὰ παρὰ τὴν εὐκολία τῆς
ὑπηρεσίας iCloud τῆς Apple γιὰ συγχρονισμὸ φωτογραφιῶν, συχνὰ παραβλέπει τὰ
δικαιώματα καὶ τὴν ἰδιωτικότητα τοῦ χρήστη.  Εὐτυχῶς, τὸ &lt;a href=&#34;https://immich.app/&#34;&gt;Immich&lt;/a&gt; προσφέρει μία
αὐτοφιλοξενούμενη καὶ βελτιωμένη ἐναλλακτική, σεβόμενο τὴν ἰδιωτικότητά μου
καὶ τὰ δικαιώματα τοῦ χρήστη.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Πρόσφατα πέρασα σὲ τηλέφωνο Pixel μὲ GrapheneOS ὡς κύρια συσκευή, ἀφήνοντας
πίσω ἕνα iPhone.  Τὸ μόνο ποὺ μοῦ ἔλειπε ἦταν νὰ ἔχω τὶς φωτογραφίες μου σὲ
συγχρονισμὸ σὲ ὅλες τὶς συσκευές μου μέσω iCloud, ἀλλὰ παρὰ τὴν εὐκολία τῆς
ὑπηρεσίας iCloud τῆς Apple γιὰ συγχρονισμὸ φωτογραφιῶν, συχνὰ παραβλέπει τὰ
δικαιώματα καὶ τὴν ἰδιωτικότητα τοῦ χρήστη.  Εὐτυχῶς, τὸ <a href="https://immich.app/">Immich</a> προσφέρει μία
αὐτοφιλοξενούμενη καὶ βελτιωμένη ἐναλλακτική, σεβόμενο τὴν ἰδιωτικότητά μου
καὶ τὰ δικαιώματα τοῦ χρήστη.</p>
<p>Ἡ ἐγκατάσταση τοῦ Immich εἶναι ἀρκετὰ ἁπλή· ἁπλῶς ἀκολουθῆστε τὴν ἐπίσημη
<a href="https://immich.app/docs/overview/introduction">τεκμηρίωση</a>.  Προσφέρουν ἀκόμη καὶ <a href="https://immich.app/docs/install/script">σενάριο ἐγκατάστασης</a>.</p>
<h2 id="συστάσεις">Συστάσεις</h2>
<p>Συμβουλεύω νὰ μὴν χρησιμοποιεῖτε ὑπηρεσίες ὅπως τὸ Cloudflare Tunnel γιὰ νὰ
κάνετε τὸ Immich δημόσια προσβάσιμο, γιὰ λόγους ἀσφαλείας καὶ ἰδιωτικότητας.
Ἀντὶ αὐτοῦ, σκεφτεῖτε μία ὑπηρεσία VPN ὅπως tailscale/headscale γιὰ πιὸ
ἀσφαλῆ καὶ βολικὴ διάταξη.</p>
<p>Ἂν χρησιμοποιεῖτε iCloud γιὰ τὶς φωτογραφίες σας, ὑπάρχει ἕνα
<a href="https://github.com/immich-app/immich/issues/3842#issuecomment-2008718176">σφάλμα διαρροῆς μνήμης</a>
ποὺ προκαλεῖ κατάρρευση τῆς ἐφαρμογῆς iOS ὅταν ἀνεβάζει μεγάλους ὄγκους ἀρχείων
πολυμέσων.  Εἴτε κατεβάστε πρῶτα ὅλες τὶς φωτογραφίες σας ἀπὸ τὸ iCloud καὶ
μετὰ ἀνεβάστε τες στὸ Immich, εἴτε «φυλάξτε» τὸ τηλέφωνό σας ἐνῶ ἀνεβάζει.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Γιατί ὁ Ἤμαξ δὲν θὰ γίνει ΠΟΤΕ δημοφιλής</title>
      <link>https://thanosapollo.org/el/posts/emacs-will-never-be-popular/</link>
      <pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/emacs-will-never-be-popular/</guid>
      <description>&lt;p&gt;Ὁ Ἤμαξ εἶναι τὸ ἀχώριστό μου λογισμικό, ὅπου κάνω ὅλη μου τὴν
ὑπολογιστικὴ ἐργασία.  Χωρὶς τὸν Ἤμαξ δὲν θὰ μὲ ἔνοιαζε οὔτε ἕνα byte γιὰ
τοὺς ὑπολογιστές.  Πέρασα στὸ GNU/Linux ἀκριβῶς γιὰ τὸν Ἤμαξ.  Ἀλλὰ
ἂς τὸ ποῦμε καθαρὰ: ὁ Ἤμαξ θὰ κολυμπᾶ γιὰ πάντα κόντρα στὸ ρεῦμα.
Ὅπως καὶ τὸ Gentoo, εἶναι πολὺ ἀπαιτητικὸ γιὰ τὸ εὐρὺ κοινό.  Νὰ
ταιριάξεις μαζί του ἢ ὄχι — αὐτὸ εἶναι τὸ ἐρώτημα τοῦ ἑνὸς
ἑκατομμυρίου δολαρίων.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ὁ Ἤμαξ εἶναι τὸ ἀχώριστό μου λογισμικό, ὅπου κάνω ὅλη μου τὴν
ὑπολογιστικὴ ἐργασία.  Χωρὶς τὸν Ἤμαξ δὲν θὰ μὲ ἔνοιαζε οὔτε ἕνα byte γιὰ
τοὺς ὑπολογιστές.  Πέρασα στὸ GNU/Linux ἀκριβῶς γιὰ τὸν Ἤμαξ.  Ἀλλὰ
ἂς τὸ ποῦμε καθαρὰ: ὁ Ἤμαξ θὰ κολυμπᾶ γιὰ πάντα κόντρα στὸ ρεῦμα.
Ὅπως καὶ τὸ Gentoo, εἶναι πολὺ ἀπαιτητικὸ γιὰ τὸ εὐρὺ κοινό.  Νὰ
ταιριάξεις μαζί του ἢ ὄχι — αὐτὸ εἶναι τὸ ἐρώτημα τοῦ ἑνὸς
ἑκατομμυρίου δολαρίων.</p>
<h2 id="πιθανὲς-λύσεις">Πιθανὲς λύσεις</h2>
<p>Ὁ Ἤμαξ χρειάζεται διανομὲς γιὰ νὰ λάμψει σὲ αὐτὸ τὸ σύγχρονο
ψηφιακὸ τοπίο ὅπου ὅλα πρέπει νὰ λειτουργοῦν ἀμέσως, χωρὶς πρόσθετες ρυθμίσεις.  Διανομὲς ὅπως
τὸ <a href="https://github.com/doomemacs/doomemacs">Doom Emacs</a> μποροῦν νὰ δείξουν τὴ δύναμη τοῦ Ἤμαξ, ἑλκύοντας
ἀκόμα καὶ ὅσους δὲν μποροῦν νὰ τὸν ὁρίσουν.</p>
<p>Οἱ περισσότεροι ξεκινοῦν μὲ ἕναν κειμενοεπεξεργαστὴ καὶ δὲν μπαίνουν στὸν
κόπο νὰ ψάξουν ἐναλλακτικές.  Ἀκόμα καὶ ὅσοι μαθαίνουν Lisp συνήθως
παραλείπουν τὸν Ἤμαξ ὡς ἀφετηρία.  Ἂν ὄχι αὐτοί, τότε ποιός;</p>
<p>Μιὰ διανομὴ Ἤμαξ ποὺ λειτουργεῖ ἀμέσως, χωρὶς πρόσθετες ρυθμίσεις, θὰ τραβοῦσε νεοφερμένους ἢ τουλάχιστον
θὰ ἦταν ὁ κειμενοεπεξεργαστὴς ποὺ δίνεις σὲ κάποιον γιὰ νὰ μάθει
προγραμματισμό.  Ἴσως καὶ κάτι λεπτὰ ρυθμισμένο γιὰ ἀκαδημαϊκοὺς καὶ
λογοτέχνες μὲ org-mode.</p>
<h2 id="δημοφιλία-σχμοφιλία">Δημοφιλία-σχμοφιλία!</h2>
<p>Ἡ διάδοση τοῦ Ἤμαξ δὲν εἶναι μόνο γιὰ τὴ δική του φήμη· εἶναι γιὰ
τὴ διάδοση τῆς φιλοσοφίας GNU καὶ τοῦ προγραμματισμοῦ Lisp ποὺ
ἐνσαρκώνει ὁ Ἤμαξ.</p>
<p>Δὲν προωθοῦμε ἁπλῶς ἕνα ἐργαλεῖο, ἀλλὰ ἕνα φρόνημα καὶ ἕναν τρόπο
σκέψης ποὺ ἀμφισβητεῖ τὴν κατεστημένη τάξη στὸν κόσμο.  Νὰ ἀγκαλιάζεις τὸν
Ἤμαξ σημαίνει νὰ ἀγκαλιάζεις τὸ ἦθος τῶν χάκερ, ποὺ ἔχει στὸ κέντρο του τὴν ἐλευθερία.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cloudflare Tunnel: Ἀντίο ὑπηρεσίες VPS!</title>
      <link>https://thanosapollo.org/el/posts/bye-bye-vps/</link>
      <pubDate>Sun, 10 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/bye-bye-vps/</guid>
      <description>&lt;p&gt;Ὑπηρεσίες VPS, ἡ κορυφὴ τῆς ἐλευθερίας στὸν ψηφιακὸ κόσμο!  Τίποτα
δὲν συγκρίνεται μὲ τὴ συγκίνηση νὰ ἐμπιστεύεσαι τὰ δεδομένα καὶ τὶς
ὑπηρεσίες σου σὲ μιὰ μυστηριώδη ὀντότητα τοῦ νέφους, ἐνῶ
παραδίδεις τὸν ἔλεγχο τοῦ ὑλικοῦ σου.  Καὶ μὴν ξεχνᾶς τὴ χαρὰ νὰ
βασίζεσαι σὲ τρίτο πάροχο νέφους γιὰ τὶς ἀνάγκες φιλοξενίας, ποὺ
μπορεῖ νὰ σοῦ στείλει &lt;a href=&#34;https://old.reddit.com/r/webdev/comments/1b14bty/netlify_just_sent_me_a_104k_bill_for_a_simple/&#34;&gt;λογαριασμὸ 104K&lt;/a&gt;
γιὰ τὸ στατικό σου ἱστότοπο.  Ποιὸς χρειάζεται νὰ κατέχει τὸ δικό του
ὑλικό;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ὑπηρεσίες VPS, ἡ κορυφὴ τῆς ἐλευθερίας στὸν ψηφιακὸ κόσμο!  Τίποτα
δὲν συγκρίνεται μὲ τὴ συγκίνηση νὰ ἐμπιστεύεσαι τὰ δεδομένα καὶ τὶς
ὑπηρεσίες σου σὲ μιὰ μυστηριώδη ὀντότητα τοῦ νέφους, ἐνῶ
παραδίδεις τὸν ἔλεγχο τοῦ ὑλικοῦ σου.  Καὶ μὴν ξεχνᾶς τὴ χαρὰ νὰ
βασίζεσαι σὲ τρίτο πάροχο νέφους γιὰ τὶς ἀνάγκες φιλοξενίας, ποὺ
μπορεῖ νὰ σοῦ στείλει <a href="https://old.reddit.com/r/webdev/comments/1b14bty/netlify_just_sent_me_a_104k_bill_for_a_simple/">λογαριασμὸ 104K</a>
γιὰ τὸ στατικό σου ἱστότοπο.  Ποιὸς χρειάζεται νὰ κατέχει τὸ δικό του
ὑλικό;</p>
<h2 id="ἡ-νέα-μου-διάταξη">Ἡ νέα μου διάταξη</h2>
<p>Τοὺς τελευταίους ~6 μῆνες βασιζόμουν σὲ ὑπηρεσία VPS ἀπὸ τὴν
<a href="https://www.ionos.com/">Ionos</a>, <em>ποὺ προσφέρει ἀξιοπρεπῆ ὑπηρεσία γιὰ τὰ πακέτα τιμῶν της</em>,
γιὰ νὰ φιλοξενῶ αὐτὸν τὸν ἱστότοπο καὶ τὸν git διακομιστή μου, καθὼς
καὶ γιὰ περιστασιακὴ προώθηση θύρας ὑπηρεσιῶν πολυμέσων ὅπως τὸ
jellyfin μέσω σήραγγας SSH.  Αὐτὸ τὸ Σαββατοκύριακο ἐπέλεξα νὰ
μεταφερθῶ σὲ ἕνα παλιὸ thinkpad ποὺ μάζευε σκόνη, μαζὶ μὲ
<a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/">cloudflare tunnel</a>.</p>
<p>Τὸ Cloudflare tunnel εἶναι ἰδανικὸ γιὰ ἀσφαλὴ σύνδεση αὐτοφιλοξενούμενου
διακομιστῆ ἱστοῦ μὲ τὸ παγκόσμιο δίκτυο τῆς Cloudflare.  Ὅμως
πρόσεξε ὅτι ἡ Cloudflare μπορεῖ νὰ ἀποκρυπτογραφήσει τὴν κίνησή σου.
Δὲν συνιστῶ τὸ cloudflare tunnel γιὰ εὐαίσθητες πληροφορίες ἢ γιὰ
κοινὴ χρήση μεγάλων ἀρχείων πολυμέσων.</p>
<p>Γιὰ νὰ μοιράζομαι πολυμέσα μὲ φίλους χρησιμοποιῶ <a href="https://tailscale.com/">tailscale</a>·
σκοπεύω στὸ μέλλον νὰ φιλοξενήσω <a href="https://headscale.net/">headscale</a>, μιὰ
αὐτοφιλοξενούμενη ὑλοποίηση τοῦ tailscale.  Τὸ Tailscale εἶναι ἕνα
VPN μηδενικῆς διαμόρφωσης· μπορεῖς νὰ προσθέσεις οἰκογένεια καὶ
φίλους στὸν λογαριασμό σου ἢ ἁπλῶς νὰ «funnel» περιεχόμενο σὲ
δημόσια διεύθυνση γιὰ γρήγορη πρόσβαση.</p>
<h2 id="συμβουλὲς-μετάβασης">Συμβουλὲς μετάβασης</h2>
<p>Πρῶτα ἀπὸ ὅλα, ἀξιολόγησε τὴν τρέχουσα χρήση VPS καὶ ἐντόπισε ποιὲς
ὑπηρεσίες αὐτοφιλοξενοῦνται εὔκολα.  Θὰ συνιστοῦσα νὰ ἀρχίσεις
ἀργὰ τὴ μετάβαση τῶν ὑπηρεσιῶν σου στὸ δικό σου ὑλικὸ καὶ νὰ
χρησιμοποιεῖς σήραγγα SSH γιὰ προώθηση θυρῶν.</p>
<p>Δοκίμασε cloudflare tunnel, tailscale καὶ ἄλλες παρόμοιες ὑπηρεσίες
μέχρι νὰ βρεῖς αὐτὴ ποὺ σοῦ ταιριάζει περισσότερο.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Διαχείριση ἠλεκτρονικοῦ ταχυδρομείου στὸν Ἤμαξ | Ὁδηγὸς ἐγκατάστασης mu4e &amp; isync</title>
      <link>https://thanosapollo.org/el/posts/mu4e-guide/</link>
      <pubDate>Mon, 29 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/mu4e-guide/</guid>
      <description>Διαχείριση ἠλεκτρονικοῦ ταχυδρομείου μὲ Ἤμαξ, χρησιμοποιώντας mu4e &amp;amp; isync.</description>
      <content:encoded><![CDATA[<p>Τὸ ἠλεκτρονικὸ ταχυδρομεῖο, μίσησέ το ἢ ἀγάπησέ το, ὅλοι πρέπει νὰ τὸ ἀντιμετωπίσουμε.  Εὐτυχῶς,
χάρη στὸν Ἤμαξ καὶ τὸ <a href="https://github.com/djcb/mu">mu4e</a> μπορεῖς νὰ δουλεύεις μὲ τὸ ἠλεκτρονικὸ ταχυδρομεῖο
παραγωγικὰ καί, τολμῶ νὰ πῶ, εὐχάριστα.</p>
<h2 id="about">Σχετικά</h2>
<p>Σὲ αὐτὸν τὸν ὁδηγὸ θὰ σὲ καθοδηγήσω στὴν ἐγκατάσταση mu4e μὲ πολλαπλοὺς
λογαριασμούς, χρησιμοποιώντας isync καὶ mu, καθὼς καὶ στὰ βασικὰ τοῦ πῶς νὰ
ἐνσωματώσεις τὸ mu4e στὴ ροὴ ἐργασίας σου, συν συμβουλὲς καὶ κόλπα ὅπως
χρήση ἐνεργειῶν τοῦ mu4e γιὰ ἐφαρμογὴ διορθώσεων Git.</p>
<p>Γιὰ νὰ ἀκολουθήσεις αὐτὸν τὸν ὁδηγό, βεβαιώσου ὅτι ἔχεις ἐνεργοποιήσει
πρόσβαση IMAP/SMTP γιὰ τὸν λογαριασμὸ ἠλεκτρονικοῦ ταχυδρομείου σου.  Τὰ βήματα ἐνεργοποίησης
μπορεῖ νὰ διαφέρουν ἀνάλογα μὲ τὸν συγκεκριμένο πάροχο ἠλεκτρονικοῦ ταχυδρομείου, ὁπότε δὲν θὰ
τὰ καλύψω ἐδῶ.</p>
<h2 id="why-mu4e">Γιατί mu4e;</h2>
<p>Ὑπάρχουν πολλαπλὲς ἐπιλογὲς στὸν GNU Ἤμαξ γιὰ διαχείριση ἠλεκτρονικοῦ ταχυδρομείου, ὅπως rmail,
gnus, notmuch καὶ mu4e.</p>
<p>Καθεμία ἀπὸ αὐτὲς τὶς ἐπιλογὲς ἔχει τὶς δικές της πολυπλοκότητες, ἀνάλογα μὲ
τὴ συγκεκριμένη περίπτωση χρήσης σου.</p>
<p>Στὴν προσωπική μου ἐμπειρία, προτιμῶ τὸ mu4e λόγω τῆς εὐκολίας ἐγκατάστασης,
ἰδίως ὅταν ἔχεις νὰ κάνεις μὲ πολλαπλοὺς λογαριασμούς.</p>
<h2 id="installing-mu-isync">Ἐγκατάσταση MU &amp; isync</h2>
<p>Γιὰ νὰ ξεκινήσεις, ἐγκατάστησε <strong>mu</strong> καὶ <strong>isync</strong></p>
<ul>
<li>Arch Linux</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ sudo pacman -S mu isync
</span></span></code></pre></div><ul>
<li>Gentoo</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ sudo emerge -av mu isync
</span></span></code></pre></div><p><code>NOTE</code>: Βεβαιώσου ὅτι χρησιμοποιεῖς <code>emacs</code> USEFLAG γιὰ τὸ mu</p>
<p>Ἂν τὸ <code>mu</code> δὲν εἶναι πακεταρισμένο γιὰ τὴ διανομή σου, συστήνω νὰ ἀλλάξεις
σὲ νέα.  Ἀλλὰ ἂν ἐπιμένεις, ἴσως ἔχεις ἐπιτυχία ἐγκαθιστώντας mu ἀπὸ
πηγή, χρησιμοποιώντας
<a href="https://github.com/radian-software/straight.el">straight.el</a>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(straight-use-package <span style="color:#e6db74">&#39;mu4e</span>)
</span></span></code></pre></div><h2 id="setting-up-mbsync">Ρύθμιση mbsync</h2>
<p>Ἐπεξεργάσου τὴ διαμόρφωσή σου: <code>~/.mbsyncrc</code></p>
<h3 id="example-setup-for-fastmail">Παράδειγμα ρύθμισης γιὰ Fastmail:</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>IMAPAccount fastmail
</span></span><span style="display:flex;"><span>Host imap.fastmail.com
</span></span><span style="display:flex;"><span>Port 993
</span></span><span style="display:flex;"><span>User myaccount@fastmail.com
</span></span><span style="display:flex;"><span>PassCmd &#34;emacsclient -e &#39;(password-store-get-field \&#34;fastmail.com/myaccount@fastmail.com\&#34; \&#34;smtp\)&#39;&#34;
</span></span><span style="display:flex;"><span>SSLType IMAPS
</span></span><span style="display:flex;"><span>SSLVersions TLSv1.2
</span></span><span style="display:flex;"><span>CertificateFile /etc/ssl/certs/ca-certificates.crt
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>IMAPStore fastmail-remote
</span></span><span style="display:flex;"><span>Account fastmail
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>MaildirStore fastmail-local
</span></span><span style="display:flex;"><span>Path ~/Mail/Fastmail/
</span></span><span style="display:flex;"><span>Inbox ~/Mail/Fastmail/Inbox
</span></span><span style="display:flex;"><span>Trash ~/Mail/Fastmail/Trash/
</span></span><span style="display:flex;"><span>SubFolders Verbatim
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Channel fastmail
</span></span><span style="display:flex;"><span>Far :fastmail-remote:
</span></span><span style="display:flex;"><span>Near :fastmail-local:
</span></span><span style="display:flex;"><span>Patterns *
</span></span><span style="display:flex;"><span>Expunge None
</span></span><span style="display:flex;"><span>CopyArrivalDate yes
</span></span><span style="display:flex;"><span>Sync All
</span></span><span style="display:flex;"><span>Create Both
</span></span><span style="display:flex;"><span>SyncState *
</span></span></code></pre></div><h3 id="example-setup-for-gmail">Παράδειγμα ρύθμισης γιὰ Gmail:</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>IMAPAccount gmail
</span></span><span style="display:flex;"><span>Host imap.gmail.com
</span></span><span style="display:flex;"><span>Port 993
</span></span><span style="display:flex;"><span>User myaccount@gmail.com
</span></span><span style="display:flex;"><span>PassCmd &#34;pass google/mygmail.com&#34;
</span></span><span style="display:flex;"><span>SSLType IMAPS
</span></span><span style="display:flex;"><span>SSLVersions TLSv1.2
</span></span><span style="display:flex;"><span>CertificateFile /etc/ssl/certs/ca-certificates.crt
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>IMAPStore gmail-remote
</span></span><span style="display:flex;"><span>Account gmail
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>MaildirStore gmail-local
</span></span><span style="display:flex;"><span>Path ~/Mail/Account-GMAIL/
</span></span><span style="display:flex;"><span>SubFolders Verbatim
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Channel gmail
</span></span><span style="display:flex;"><span>Far :gmail-remote:
</span></span><span style="display:flex;"><span>Near :gmail-local:
</span></span><span style="display:flex;"><span>Patterns * ![Gmail]* &#34;[Gmail]/Sent Mail&#34; &#34;[Gmail]/Starred&#34; &#34;[Gmail]/All Mail&#34; &#34;[Gmail]/Trash&#34;
</span></span><span style="display:flex;"><span>Expunge None
</span></span><span style="display:flex;"><span>CopyArrivalDate yes
</span></span><span style="display:flex;"><span>Sync All
</span></span><span style="display:flex;"><span>Create Both
</span></span><span style="display:flex;"><span>SyncState *
</span></span><span style="display:flex;"><span>Settings you should adjust:
</span></span></code></pre></div><ul>
<li><code>PassCmd</code> αὐτὸ θὰ πρέπει νὰ ἐξάγει τὸν κωδικὸ τοῦ λογαριασμοῦ σου.
Προσωπικὰ χρησιμοποιῶ pass ὡς διαχειριστὴ κωδικῶν.</li>
</ul>
<p>Στὸ παραπάνω παράδειγμα fastmail παίρνω τὸν κωδικὸ μὲ αὐτὴ τὴ συνάρτηση
Ἤμαξ:</p>
<p><code>(password-store-get-field \&quot;fastmail.com/myaccount@fastmail.com\&quot; \&quot;smtp\)</code></p>
<p>Τὸ <code>password-store</code> εἶναι διεπαφὴ τοῦ pass γιὰ τὸν Ἤμαξ.</p>
<p><code>NOTE</code>: Ἀντὶ γιὰ PassCmd, μπορεῖς νὰ χρησιμοποιήσεις Pass ποὺ ἁπλῶς ἔχει
τὸν κωδικό σου σὲ ἀπλὸ κείμενο, ἀλλὰ δὲν τὸ συστήνω γιὰ λόγους ἀσφαλείας.</p>
<ul>
<li>
<p><code>CertificateFile</code> - Αὐτὴ ἡ τοποθεσία μπορεῖ νὰ διαφέρει ἀνάλογα μὲ τὴ
διανομὴ Linux σου.</p>
</li>
<li>
<p><code>Patterns</code> - Ὁρίζει ποιοὶ φάκελοι θὰ συγχρονιστοῦν· προσωπικὰ ἁπλῶς
ὁρίζω τοὺς φακέλους μου χειροκίνητα, παρόμοια μὲ τὸ παράδειγμα fastmail.</p>
</li>
</ul>
<p>Μὴ διστάσεις νὰ ὁρίσεις πολλαπλοὺς λογαριασμοὺς μὲ αὐτὸν τὸν τρόπο.</p>
<p>Μετὰ τὴ διαμόρφωση τοῦ isync, ξεκίνα τὸν ἀρχικὸ συγχρονισμὸ τρέχοντας αὐτὴ
τὴν ἐντολή:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ mbsync -a
</span></span></code></pre></div><h2 id="setting-up-mu-mu4e">Ρύθμιση mu &amp; mu4e</h2>
<p>Πρῶτα, πρέπει νὰ τρέξεις τὴν ἀρχικὴ εὐρετηρίαση.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>mu init --maildir=~/Mail --my-address myaccount@fastmail.com
</span></span><span style="display:flex;"><span>mu index
</span></span></code></pre></div><p><code>NOTE</code>: Μπορεῖς νὰ προσθέσεις ὅσα ὁρίσματα <code>--my-address</code> θέλεις.</p>
<p>Τώρα εἶναι ὥρα νὰ δημιουργήσεις τὴ διαμόρφωση mu4e γιὰ Ἤμαξ.</p>
<p>Μπορεῖς νὰ τὴ δημιουργήσεις ὡς μονάδα, ἢ ἁπλῶς ὡς μέρος τοῦ :config μὲ
use-package.  Προσωπικὰ ὁρίζω μεταβλητὲς στὸ init.el μου ἔτσι:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(defvar is-desktop (<span style="color:#a6e22e">equal</span> (<span style="color:#a6e22e">system-name</span>) <span style="color:#e6db74">&#34;desktop-hostname&#34;</span>)) <span style="color:#75715e">;; your $HOSTNAME</span>
</span></span><span style="display:flex;"><span>(defvar is-laptop (<span style="color:#a6e22e">equal</span> (<span style="color:#a6e22e">system-name</span>) <span style="color:#e6db74">&#34;laptop-hostname&#34;</span>))
</span></span></code></pre></div><p>Δημιούργησε <code>~/.emacs.d/modules/thanos-mu4e.el</code> γιὰ τὴ διαμόρφωση μονάδας
mu4e.  Καὶ πρόσθεσε αὐτὸ στὸ init.el μου</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(add-to-list <span style="color:#e6db74">&#39;load-path</span> <span style="color:#e6db74">&#34;~/.emacs.d/modules&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(when (or is-desktop is-laptop)
</span></span><span style="display:flex;"><span>  (require <span style="color:#e6db74">&#39;thanos-mu4e</span>))
</span></span></code></pre></div><p>Ἔτσι φορτώνω τὴ διαμόρφωση mu4e μόνο ὅταν χρησιμοποιῶ φορητὸ ἢ ἐπιτραπέζιο ὑπολογιστή.</p>
<h2 id="loading-mu4e">Φόρτωση Mu4e</h2>
<p>Βεβαιώσου ὅτι τὸ <code>mu4e</code> εἶναι στὸ load-path:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(add-to-list <span style="color:#e6db74">&#39;load-path</span> <span style="color:#e6db74">&#34;/usr/share/emacs/site-lisp/mu4e/&#34;</span>) <span style="color:#75715e">;; path to mu4e</span>
</span></span><span style="display:flex;"><span>(require <span style="color:#e6db74">&#39;mu4e</span>)
</span></span></code></pre></div><h2 id="the-essentials">Τὰ οὐσιώδη</h2>
<p>Αὐτὸ εἶναι ἕνα παράδειγμα διαμόρφωσης γιὰ νὰ ξεκινήσεις μὲ mu4e
χρησιμοποιώντας πολλαπλοὺς λογαριασμούς:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setf mu4e-get-mail-command <span style="color:#e6db74">&#34;mbsync -a&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(when (and is-desktop (server-running-p))
</span></span><span style="display:flex;"><span>  (setf mu4e-update-interval (<span style="color:#a6e22e">*</span> <span style="color:#ae81ff">10</span> <span style="color:#ae81ff">60</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Snippet from EmacsWiki</span>
</span></span><span style="display:flex;"><span>(defun set-mu4e-context (context-name full-name mail-address signature)
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Return a mu4e context named CONTEXT-NAME with :match-func matching
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    folder name CONTEXT-NAME in Maildir. The context&#39;s </span><span style="color:#e6db74">`user-mail-address&#39;</span><span style="color:#e6db74">,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    </span><span style="color:#e6db74">`user-full-name&#39;</span><span style="color:#e6db74"> and </span><span style="color:#e6db74">`mu4e-compose-signature&#39;`smtpmail-smpt-server&#39;</span><span style="color:#e6db74"> is set to MAIL-ADDRESS
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    FULL-NAME SIGNATURE and SERVER respectively.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">    Special folders are set to context specific folders.&#34;</span>
</span></span><span style="display:flex;"><span>  (let ((dir-name (<span style="color:#a6e22e">concat</span> <span style="color:#e6db74">&#34;/&#34;</span> context-name)))
</span></span><span style="display:flex;"><span>    (make-mu4e-context
</span></span><span style="display:flex;"><span>     :name context-name
</span></span><span style="display:flex;"><span>     <span style="color:#75715e">;; we match based on the maildir of the message</span>
</span></span><span style="display:flex;"><span>     :match-func
</span></span><span style="display:flex;"><span>     <span style="color:#f92672">`</span>(lambda (msg)
</span></span><span style="display:flex;"><span>    (when msg
</span></span><span style="display:flex;"><span>      (string-match-p
</span></span><span style="display:flex;"><span>       <span style="color:#f92672">,</span>(<span style="color:#a6e22e">concat</span> <span style="color:#e6db74">&#34;^&#34;</span> dir-name)
</span></span><span style="display:flex;"><span>       (mu4e-message-field msg :maildir))))
</span></span><span style="display:flex;"><span>     :vars
</span></span><span style="display:flex;"><span>     <span style="color:#f92672">`</span>((user-mail-address    <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>mail-address)
</span></span><span style="display:flex;"><span>       (<span style="color:#a6e22e">user-full-name</span>       <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>full-name)
</span></span><span style="display:flex;"><span>       (mu4e-sent-folder     <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>(<span style="color:#a6e22e">concat</span> dir-name <span style="color:#e6db74">&#34;/Sent&#34;</span>))
</span></span><span style="display:flex;"><span>       (mu4e-drafts-folder   <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>(<span style="color:#a6e22e">concat</span> dir-name <span style="color:#e6db74">&#34;/Drafts&#34;</span>))
</span></span><span style="display:flex;"><span>       (mu4e-trash-folder    <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>(<span style="color:#a6e22e">concat</span> dir-name <span style="color:#e6db74">&#34;/Trash&#34;</span>))
</span></span><span style="display:flex;"><span>       (mu4e-trash-folder    <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>(<span style="color:#a6e22e">concat</span> dir-name <span style="color:#e6db74">&#34;/Starred&#34;</span>))
</span></span><span style="display:flex;"><span>       (mu4e-refile-folder   <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>(<span style="color:#a6e22e">concat</span> dir-name <span style="color:#e6db74">&#34;/Archive&#34;</span>))
</span></span><span style="display:flex;"><span>       (mu4e-compose-signature <span style="color:#f92672">.</span> <span style="color:#f92672">,</span>signature)))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;;Fixing duplicate UID errors when using mbsync and mu4e</span>
</span></span><span style="display:flex;"><span>(setf mu4e-change-filenames-when-moving <span style="color:#66d9ef">t</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(setf mu4e-maildir-shortcuts
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;/Fastmail/Inbox&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">?f</span>)
</span></span><span style="display:flex;"><span>    (<span style="color:#e6db74">&#34;/Drafts&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">?d</span>)
</span></span><span style="display:flex;"><span>    (<span style="color:#e6db74">&#34;/Sent&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">?s</span>)
</span></span><span style="display:flex;"><span>    (<span style="color:#e6db74">&#34;/Gmail-Account/[Gmail]/All Mail&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">?g</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(setf mu4e-contexts
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">list</span>
</span></span><span style="display:flex;"><span>       (make-mu4e-context
</span></span><span style="display:flex;"><span>    :name <span style="color:#e6db74">&#34;fastmail&#34;</span>
</span></span><span style="display:flex;"><span>    :match-func
</span></span><span style="display:flex;"><span>    (lambda (msg)
</span></span><span style="display:flex;"><span>      (when msg
</span></span><span style="display:flex;"><span>        (string-prefix-p <span style="color:#e6db74">&#34;/Fastmail&#34;</span> (mu4e-message-field msg :maildir))))
</span></span><span style="display:flex;"><span>    :vars <span style="color:#f92672">&#39;</span>((user-mail-address <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;username@fastmail.com&#34;</span>)
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">user-full-name</span>    <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;User Name&#34;</span>)
</span></span><span style="display:flex;"><span>        (smtpmail-smtp-server <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;smtp.fastmail.com&#34;</span>)
</span></span><span style="display:flex;"><span>        (smtpmail-smtp-service <span style="color:#f92672">.</span> <span style="color:#ae81ff">465</span>)
</span></span><span style="display:flex;"><span>        (smtpmail-stream-type <span style="color:#f92672">.</span> ssl)
</span></span><span style="display:flex;"><span>        (mu4e-drafts-folder  <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;/Drafts&#34;</span>)
</span></span><span style="display:flex;"><span>        (mu4e-sent-folder  <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;/Sent&#34;</span>)
</span></span><span style="display:flex;"><span>        (mu4e-refile-folder  <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;/Archive&#34;</span>)
</span></span><span style="display:flex;"><span>        (mu4e-trash-folder  <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;/Trash&#34;</span>)))
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">;; You can comment out the second account.</span>
</span></span><span style="display:flex;"><span>       (make-mu4e-context
</span></span><span style="display:flex;"><span>    :name <span style="color:#e6db74">&#34;gmail&#34;</span>
</span></span><span style="display:flex;"><span>    :match-func
</span></span><span style="display:flex;"><span>    (lambda (msg)
</span></span><span style="display:flex;"><span>      (when msg
</span></span><span style="display:flex;"><span>        (string-prefix-p <span style="color:#e6db74">&#34;/Gmail-Account&#34;</span> (mu4e-message-field msg :maildir))))
</span></span><span style="display:flex;"><span>    :vars <span style="color:#f92672">&#39;</span>((user-mail-address <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;username@gmail.com&#34;</span>)
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">user-full-name</span>    <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;User Name&#34;</span>)
</span></span><span style="display:flex;"><span>        (smtpmail-smtp-server <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;smtp.gmail.com&#34;</span>)
</span></span><span style="display:flex;"><span>        (smtpmail-smtp-service <span style="color:#f92672">.</span> <span style="color:#ae81ff">465</span>)
</span></span><span style="display:flex;"><span>        (smtpmail-stream-type <span style="color:#f92672">.</span> ssl)))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(setf message-send-mail-function <span style="color:#e6db74">&#39;smtpmail-send-it</span>
</span></span><span style="display:flex;"><span>      mu4e-compose-signature <span style="color:#e6db74">&#34;My Signature&#34;</span>
</span></span><span style="display:flex;"><span>      mu4e-compose-context-policy <span style="color:#e6db74">&#39;ask</span>)
</span></span></code></pre></div><h2 id="extras">Ἐπιπλέον</h2>
<h3 id="mu4e-actions">Ἐνέργειες Mu4e</h3>
<p>Οἱ ἐνέργειες Mu4e καθιστοῦν πραγματικὰ ἁπλὴ τὴν ἐργασία μὲ διορθώσεις Git· αὐτὴ
εἶναι ἕνα παράδειγμα διαμόρφωσης ποὺ ἴσως θέλεις νὰ χρησιμοποιήσεις:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setf mu4e-view-actions
</span></span><span style="display:flex;"><span>      (delete-dups
</span></span><span style="display:flex;"><span>       (<span style="color:#a6e22e">append</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;gapply git patches&#34;</span> <span style="color:#f92672">.</span> mu4e-action-git-apply-patch)
</span></span><span style="display:flex;"><span>      (<span style="color:#e6db74">&#34;mgit am patch&#34;</span> <span style="color:#f92672">.</span> mu4e-action-git-apply-mbox)))))
</span></span></code></pre></div><h3 id="sign-your-emails-using-pgp">Ὑπόγραψε τὰ μηνύματα ἠλεκτρονικοῦ ταχυδρομείου σου μὲ pgp</h3>
<p>Ἂν ἔχεις ρυθμίσει τὸ δικό σου κλειδὶ pgp, μπορεῖς νὰ ὑπογράφεις αὐτόματα ὅλα
τὰ μηνύματα ἠλεκτρονικοῦ ταχυδρομείου σου μὲ αὐτὸ τὸ ἄγκιστρο:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(add-hook <span style="color:#e6db74">&#39;message-send-hook</span> <span style="color:#e6db74">&#39;mml-secure-message-sign-pgpmime</span>)
</span></span></code></pre></div><p>Ρίξε μία ματιὰ στὶς συναρτήσεις ποὺ ὁρίζονται γιὰ <code>mml-mode-map</code> γιὰ περισσότερα.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Πρώτη ἔκδοση Gnosis (γνῶσις)</title>
      <link>https://thanosapollo.org/el/posts/gnosis-release/</link>
      <pubDate>Tue, 16 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gnosis-release/</guid>
      <description>Gnosis (γνῶσις), ὑλοποίηση συστήματος ἐπανάληψης μὲ διαστήματα γιὰ GNU Ἤμαξ</description>
      <content:encoded><![CDATA[<p>Τὸ Gnosis (γνῶσις) εἶναι ὑλοποίηση συστήματος
<a href="https://en.wikipedia.org/wiki/Spaced_repetition">ἐπανάληψης μὲ
διαστήματα</a>
(SRS) γιὰ λήψη σημειώσεων καὶ αὐτοέλεγχο, γιὰ <a href="https://www.gnu.org/software/emacs/">GNU
Ἤμαξ</a>.</p>
<p>Τὸ Gnosis δὲν χρησιμοποιεῖ μάθηση τύπου καρτῶν μνήμης· ἀντ’ αὐτοῦ
χρησιμοποιεῖ δυαδικὴ τιμὴ γιὰ νὰ ἀξιολογήσει τὴν εἴσοδο τοῦ χρήστη.
Δηλαδή ἢ ξέρεις τὴ σωστὴ ἀπάντηση, ἢ δὲν τὴν ξέρεις· δὲν ἐμπλέκεται
καμία δική σου βαθμολόγηση.</p>
<h2 id="about">Περὶ</h2>
<p>Στὸ προηγούμενό μου ἄρθρο, <a href="http://thanosapollo.org/post/spaced-repetition-software-gripes/">Παράπονα γιὰ λογισμικὸ ἐπανάληψης μὲ διαστήματα</a>,
παρουσίασα ἕνα σχέδιο γιὰ αὐτὸ ποὺ θεωρῶ βέλτιστο σχεδιασμὸ ἑνὸς
SRS, ποὺ καλύπτει τὶς <strong>δικές μου προσωπικὲς</strong> προτιμήσεις.</p>
<p>Ἔτσι, ἀνέπτυξα τὸ δικό μου SRS, gnosis (γνῶσις), προφερόμενο
«GNU-sis», <em>ποὺ σημαίνει γνώση στὰ ἑλληνικά</em>.  Αὐτὸ τὸ SRS ἀντιμετωπίζει
τὶς ἀνησυχίες ποὺ εἶχα ἐπισημάνει προηγουμένως.  Πρὸς τὸ παρόν, τὸ
βρῆκα ἐξαιρετικὰ ὠφέλιμο καὶ, ὡς ἐκ τούτου, ἀποφάσισα νὰ τὸ μοιραστῶ
μὲ ὅλους σας.</p>
<h3 id="differences-with-other-srs">Διαφορὲς μὲ ἄλλα SRS</h3>
<p>Τὸ Gnosis δὲν ὑλοποιεῖ συνεδρίες ἐπανάληψης μὲ κάρτες μνήμης ὅπου ὁ
χρήστης βαθμολογεῖ μόνος του τὴν ἀπάντησή του σὲ αὐθαίρετη κλίμακα.
Ἀντ’ αὐτοῦ ὑλοποιεῖ τύπους «σημείωσης» ποὺ ἀπαιτοῦν εἴσοδο χρήστη.
Κάποιοι ἀπὸ αὐτοὺς τοὺς τύπους σημειώσεων, ὅπως τὸ <code>MCQ</code>
<em>ἐρώτηση πολλαπλῆς ἐπιλογῆς</em>, ἐπιτρέπουν ἀκόμα καὶ τὴν προσομοίωση
ἐξετάσεων πραγματικῆς ζωῆς.</p>
<p>Σὲ ἀντίθεση μὲ ἄλλες ὑλοποιήσεις SRS γιὰ GNU Ἤμαξ, τὸ gnosis δὲν
βασίζεται στὸ <code>org-mode</code>, ποὺ ἔχω βρεῖ ὅτι δὲν εἶναι ἰδανικὴ ἐπιλογὴ
ὡς ἀντικαταστάτης βάσης δεδομένων.  Ἀντ’ αὐτοῦ ἐπιλέγει βάση
<a href="https://www.sqlite.org/index.html">sqlite</a> μὲ
<a href="https://en.wikipedia.org/wiki/Git">git</a> γιὰ παρακολούθηση ὁποιωνδήποτε
ἀλλαγῶν, ἐπιτρέποντας ἀποδοτικὴ διαχείριση δεδομένων, χειρισμὸ καὶ
ἀκεραιότητα δεδομένων.</p>
<p>Ἐπιπλέον, ἐφόσον τὸ Gnosis βασίζεται στὸν Ἤμαξ καὶ εἶναι γραμμένο
σὲ Emacs Lisp, προσφέρει βολικὴ καὶ (ἐλπίζω) εὐχάριστη ἐμπειρία
προσαρμογῆς σύμφωνα μὲ τὶς ἀτομικές σου προτιμήσεις.</p>
<p>Ὡστόσο, ἕνα μειονέκτημα τῆς χρήσης τοῦ Gnosis εἶναι ὅτι πρὸς τὸ παρὸν
δὲν ὑποστηρίζεται σὲ κινητὲς συσκευές, καθὼς ὁ Ἤμαξ δὲν ἔχει ἀκόμα
ἐπεκτείνει τὴ συμβατότητά του σὲ τέτοιες πλατφόρμες.</p>
<h2 id="installation">Ἐγκατάσταση</h2>
<p>Μπορεῖς νὰ πάρεις τὸ gnosis ἀπὸ τὸν προσωπικό μου git διακομιστὴ
<a href="https://git.thanosapollo.org/gnosis">ἐδῶ</a> ἢ χρησιμοποιώντας αὐτὸν τὸν
<a href="https://git.sr.ht/~thanosapollo/gnosis">ἀντίγραφο στὸ SourceHut</a>.</p>
<h3 id="straight.el">Straight.el</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(straight-use-package
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#39;</span>(gnosis :type git
</span></span><span style="display:flex;"><span>          :host <span style="color:#66d9ef">nil</span>
</span></span><span style="display:flex;"><span>          :repo <span style="color:#e6db74">&#34;https://git.thanosapollo.org/gnosis&#34;</span>))
</span></span></code></pre></div><h3 id="manual">Χειροκίνητα</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ git clone https://git.thanosapollo.org/gnosis
</span></span></code></pre></div><p><em>Πρόσθεσε αὐτὸ στὴ διαμόρφωση Ἤμαξ σου:</em></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(add-to-list <span style="color:#e6db74">&#39;load-path</span> <span style="color:#e6db74">&#34;/path/to/gnosis&#34;</span>)
</span></span><span style="display:flex;"><span>(load-file <span style="color:#e6db74">&#34;~/path/to/gnosis.el&#34;</span>)
</span></span><span style="display:flex;"><span>(require <span style="color:#e6db74">&#39;gnosis</span>)
</span></span></code></pre></div><h2 id="adding-notes">Προσθήκη σημειώσεων</h2>
<p>Ἡ δημιουργία σημειώσεων γιὰ gnosis μπορεῖ νὰ γίνει μὲ ἁπλὸ
<code>M-x gnosis-add-note</code></p>
<p>Τὰ πάντα γίνονται μέσω τοῦ mini-buffer.  Ἡ προσωπική μου ροὴ ἐργασίας
ἐκμεταλλεύεται αὐτὸ μὴ φεύγοντας οὐσιαστικὰ ἀπὸ τὴν προτροπὴ
<code>gnosis-add-note</code> μέχρι νὰ τελειώσω τὴ μελέτη ἑνὸς κεφαλαίου/τμήματος,
χρησιμοποιώντας
<a href="https://github.com/vedang/pdf-tools">pdf-tools</a> ἢ
<a href="https://depp.brause.cc/nov.el/">nov.el</a>.</p>
<p><em>Νομίζω δὲν θὰ χρειαστεῖς πολλὴ καθοδήγηση στὴ δημιουργία σημειώσεων
γιὰ ὁποιονδήποτε τύπο σημείωσης, ἐκτὸς ἀπὸ <code>cloze</code>.</em></p>
<h3 id="creating-cloze-type-notes">Δημιουργία σημειώσεων τύπου cloze</h3>
<p>Οἱ ἐρωτήσεις σημειώσεων τύπου cloze μορφοποιοῦνται παρόμοια μὲ τὴ
σύνταξη τοῦ Anki, ὡς ἑξῆς:
&gt; Ἡ {c1:κυπροεπταδίνη} εἶναι {c2:ἀνταγωνιστὴς ὑποδοχέων 5-HT2} ποὺ χρησιμοποιεῖται γιὰ τὴ θεραπεία τοῦ {c2:συνδρόμου σεροτονίνης}</p>
<p><em>ΣΗΜΕΙΩΣΗ</em>: Μπορεῖς ἐπίσης νὰ μορφοποιήσεις clozes σὰν Anki ἂν τὸ
προτιμᾶς· π.χ. <code>{{c1::Cyproheptadine}}</code></p>
<ul>
<li>
<p>Γιὰ κάθε ἐτικέτα <code>cX</code> θὰ δημιουργηθεῖ σημείωση τύπου cloze· τὸ
παραπάνω παράδειγμα δημιουργεῖ 2 σημειώσεις τύπου cloze.</p>
</li>
<li>
<p>Κάθε ἐτικέτα <code>cX</code> μπορεῖ νὰ ἔχει πολλαπλὰ clozes, ἀλλὰ κάθε cloze
πρέπει νὰ εἶναι <em>ΜΟΝΑΔΙΚΗ</em> λέξη (ἢ μοναδικὸς συνδυασμὸς λέξεων) στὴ
δεδομένη σημείωση.</p>
</li>
</ul>
<h2 id="customizing-gnosis-algorithm">Προσαρμογὴ ἀλγορίθμου gnosis</h2>
<h3 id="gnosis-algorithm-interval"><code>gnosis-algorithm-interval</code></h3>
<p>Αὐτὴ εἶναι μιὰ λίστα 2 ἀριθμῶν, γιὰ τὰ πρῶτα 2 διαστήματα μετὰ ἀπὸ
ἐπιτυχῆ ἐπανάληψη.  Γιὰ παράδειγμα:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq gnosis-algorithm-interval <span style="color:#f92672">&#39;</span>(<span style="color:#ae81ff">1</span> <span style="color:#ae81ff">3</span>))
</span></span></code></pre></div><p>Μετὰ τὴν πρώτη ἐπιτυχῆ ἐπανάληψη μιᾶς σημείωσης, θὰ τὴ δεῖς ξανὰ
αὔριο· ἂν ἐπαναλάβεις ἐπιτυχῶς τὴν ἴδια σημείωση ξανά, ἡ ἑπόμενη
ἐπανάληψη θὰ εἶναι μετὰ ἀπὸ 3 μέρες.</p>
<h3 id="gnosis-algorithm-ef"><code>gnosis-algorithm-ef</code></h3>
<p>Αὐτὴ εἶναι ἡ τιμὴ τοῦ «παράγοντα εὐκολίας» gnosis· βασικὰ εἶναι μιὰ
λίστα ποὺ ἀποτελεῖται ἀπὸ 3 στοιχεῖα.  Τὸ πρῶτο στοιχεῖο εἶναι ὁ
παράγοντας αὔξησης, ποὺ χρησιμοποιεῖται γιὰ νὰ αὐξήσει τὸν παράγοντα
εὐκολίας μετὰ ἀπὸ ἐπιτυχῆ ἐπανάληψη.  Τὸ δεύτερο στοιχεῖο ἀναφέρεται
στὸν παράγοντα μείωσης, ποὺ χρησιμοποιεῖται γιὰ νὰ μειώσει τὸν
παράγοντα εὐκολίας μετὰ ἀπὸ ἀποτυχημένη ἐπανάληψη.  Τὸ τρίτο στοιχεῖο
εἶναι ὁ (ἀρχικὸς) συνολικὸς παράγοντας εὐκολίας, ποὺ χρησιμοποιεῖται
γιὰ τὸν ὑπολογισμὸ τοῦ ἑπόμενου διαστήματος.</p>
<p>Τὰ βασικὰ τοῦ πῶς χρησιμοποιεῖται εἶναι ὅτι πολλαπλασιάζεται μὲ τὸ
τελευταῖο διάστημα· π.χ. ἂν ἐπανέλαβες τελευταία φορὰ μιὰ σημείωση πρὶν
6 μέρες, καὶ ὁ παράγοντας εὐκολίας (συνολικὸς) αὐτῆς τῆς σημείωσης
εἶναι 2.0, τὸ ἑπόμενο διάστημά σου θὰ ἦταν 6 * 2.0 &amp; ὁ ἑπόμενος
συνολικὸς ef θὰ εἶναι 2.0 + increase-factor.</p>
<p>Παράδειγμα διαμόρφωσης:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq gnosis-algorithm-ef <span style="color:#f92672">&#39;</span>(<span style="color:#ae81ff">0.3</span> <span style="color:#ae81ff">0.3</span> <span style="color:#ae81ff">1.3</span>))
</span></span></code></pre></div><h3 id="gnsois-algorithm-ff"><code>gnsois-algorithm-ff</code></h3>
<p>Αὐτὴ εἶναι ἡ τιμὴ τοῦ παράγοντα λήθης (ff) gnosis· πρέπει νὰ εἶναι
ἀριθμὸς κινητῆς ὑποδιαστολῆς κάτω ἀπὸ 1.  Χρησιμοποιεῖται γιὰ τὸν
ὑπολογισμὸ τοῦ ἑπόμενου διαστήματος μετὰ ἀπὸ ἀποτυχημένη ἐπανάληψη,
πολλαπλασιαζόμενη μὲ τὸ τελευταῖο διάστημα.  Ἂν γιὰ μιὰ σημείωση μὲ
τιμὴ last-interval 6 ἡμερῶν καὶ ff 0.5, μετὰ ἀπὸ ἀποτυχημένη
ἐπανάληψη τὸ ἑπόμενο διάστημα θὰ εἶναι σὲ 6 * 0.5 μέρες</p>
<p>Παράδειγμα διαμόρφωσης:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq gnosis-algorithm-ff <span style="color:#ae81ff">0.5</span>)
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Παράπονα γιὰ λογισμικὸ ἐπανάληψης μὲ διαστήματα</title>
      <link>https://thanosapollo.org/el/posts/spaced-repetition-software-gripes/</link>
      <pubDate>Tue, 09 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/spaced-repetition-software-gripes/</guid>
      <description>Προβλήματα μὲ λογισμικὸ ἐπανάληψης μὲ διαστήματα (μάθησης) &amp;amp; ἀνακοίνωση τοῦ Gnosis</description>
      <content:encoded><![CDATA[<p>Σὲ αὐτὸ τὸ ἄρθρο οὐσιαστικὰ δημοσιοποιῶ τὶς σημειώσεις μου γιὰ
λογισμικὸ ἐπανάληψης μὲ διαστήματα, καὶ ἀνακοινώνω ὅτι δουλεύω στὸ
<a href="https://git.thanosapollo.org/gnosis">gnosis</a>, ἐπέκταση/πακέτο μάθησης
μὲ ἐπανάληψη μὲ διαστήματα γιὰ GNU Ἤμαξ.</p>
<p>Θὰ πρέπει ἐπίσης νὰ σημειώσω ὅτι θεωρῶ τὴν
<a href="https://en.wikipedia.org/wiki/Spaced_repetition">ἐπανάληψη μὲ
διαστήματα</a> κόλπο γιὰ τὴ μάθηση, <strong>ποὺ θὰ ἔπρεπε νὰ χρησιμοποιεῖται
ἀπὸ κάθε φοιτητή</strong>.</p>
<h2 id="what-is-spaced-repetition-learning">Τί εἶναι ἡ μάθηση μὲ ἐπανάληψη μὲ διαστήματα</h2>
<p>Ἡ <a href="https://en.wikipedia.org/wiki/Spaced_repetition">ἐπανάληψη μὲ
διαστήματα</a>
βασίζεται στὴν ἑξῆς προϋπόθεση:
&gt; Ἡ ἐπαναλαμβανόμενη ἔκθεση σὲ πληροφορία συμβάλλει στὴν ἐπιμήκυνση τῆς
&gt; διατήρησης μνήμης.</p>
<p>Οἱ γνωστικές μας ἱκανότητες εἶναι ἐγγενῶς προγραμματισμένες νὰ
διατηροῦν σχετικὴ πληροφορία ἐνῶ ἀπορρίπτουν περιττὲς λεπτομέρειες,
διαδικασία ποὺ ἐξαρτᾶται ἀπὸ τὴ συχνότητα μὲ τὴν ὁποία συναντᾶμε τέτοια
πληροφορία.</p>
<blockquote>
<p>Σύνοψις: Ὅσο πιὸ συχνὰ ἐκτίθεσαι σὲ πληροφορία, τόσο περισσότερο τὴν
διατηρεῖς</p>
</blockquote>
<h2 id="my-gripes-with-spaced-repetition-software">Τὰ «παράπονά» μου μὲ λογισμικὸ ἐπανάληψης μὲ διαστήματα</h2>
<p>Ἔχω ἐπιλέξει νὰ ἀναπτύξω τὸ δικό μου SRS (λογισμικὸ/σύστημα ἐπανάληψης μὲ διαστήματα) ἀντὶ νὰ βασίζομαι σὲ ὑπάρχοντα, καθιερωμένα.  Μέσω
τῆς ὑλοποίησής μου μὲ ὄνομα «gnosis» (GNOH-sis, ποὺ σημαίνει γνώση στὰ
ἑλληνικὰ) στοχεύω νὰ ἀντιμετωπίσω καὶ νὰ ὑπερβῶ τὶς προκλήσεις καὶ
τοὺς περιορισμοὺς ποὺ συνδέονται μὲ τρέχουσες λύσεις SRS.  Μὲ τὸ
gnosis, ἐλπίζω νὰ ἐπιλύσω τὰ περισσότερα, ἂν ὄχι ὅλα, ἀπὸ αὐτὰ τὰ
προβλήματα καὶ νὰ προσφέρω πιὸ ἐκλεπτυσμένη καὶ <strong>προηγμένη</strong> μαθησιακὴ
ἐμπειρία.</p>
<h3 id="not-libreware">Ὄχι libreware</h3>
<p>Αὐτὸ ἀναφέρεται σὲ <a href="https://en.wikipedia.org/wiki/Proprietary_software">ἰδιόκτητα
προγράμματα λογισμικοῦ</a> ποὺ
ὑλοποιοῦν ἐπανάληψη μὲ διαστήματα, μερικὰ ἀπὸ τὰ ὁποῖα εἶναι ἀκόμα καὶ
ἔνοχα γιὰ ἀφαίρεση τῆς δυνατότητας ἐπανάληψης μὲ διαστήματα γιὰ τὴν
ὁποία οἱ χρήστες πλήρωσαν.  Εἶχα πληρωμένη συνδρομὴ μὲ τὸ
<a href="https://quizlet.com/">quizlet</a> μόνο γιὰ νὰ
ἀνακαλύψω ὅτι ἀφαίρεσαν τὴ δυνατότητα ἐπανάληψης μὲ διαστήματα ποὺ
εἶχα ἤδη πληρώσει &amp; χρησιμοποιοῦσα, καθιστώντας τὴν τότε ροὴ ἐργασίας
μου ἄχρηστη.</p>
<p>Μὴ βασίζεσαι σὲ λογισμικὸ ποὺ δὲν κατέχεις γιὰ τὴ δουλειά σου.  <strong>Δὲν
«κατέχεις» ἰδιόκτητο λογισμικό, παρὰ τὸ ὅτι πληρώνεις γι’ αὐτό.</strong></p>
<blockquote>
<p>Θὰ ἔπρεπε νὰ ἐπιδιώκεις νὰ χρησιμοποιεῖς μόνο
<a href="https://en.wikipedia.org/wiki/Free_software">libreware</a> γιὰ τὴ ροὴ
ἐργασίας σου.</p>
</blockquote>
<h3 id="lack-of-customization">Ἔλλειψη προσαρμογῆς</h3>
<p>Τὸ καλὸ λογισμικὸ θὰ ἔπρεπε νὰ ταιριάζει στὴ ροὴ ἐργασίας σου σὰν
γάντι· γιὰ νὰ τὸ κάνει αὐτὸ πρέπει νὰ δίνει <em>πολὺ</em> χῶρο γιὰ
προσαρμογὴ ἀπὸ τὸν χρήστη.  Ἁπλὲς ἀλλαγὲς ὅπως ἀλλαγὲς
χρωματικοῦ σχήματος μέχρι πιὸ προηγμένη προσαρμογὴ χαρακτηριστικῶν
ὅπως προσθήκη δικών σου τύπων καρτῶν καὶ ἀλλαγὴ τοῦ ἀλγορίθμου
ἐπανάληψης μὲ διαστήματα θὰ ἔπρεπε νὰ εἶναι ἁπλὲς καὶ εὔκολες.  Γιὰ
παράδειγμα, ἕνας φοιτητὴς ἰατρικῆς θὰ χρησιμοποιοῦσε μεγαλύτερο
χρονικὸ διάστημα γιὰ τὸν ἀλγόριθμό του ἀπὸ, ἂς ποῦμε, κάποιον ποὺ
προσπαθεῖ νὰ ἐπεκτείνει τὸ ἰαπωνικό του λεξιλόγιο.</p>
<p>Ἀφοῦ ἤδη καθιερώσαμε τὴν ἀνάγκη τὸ ἰδανικό μας λογισμικὸ νὰ εἶναι
<em>libreware</em>, ἡ πραγματοποίηση ἀλλαγῶν στὰ βασικὰ συστατικὰ θὰ ἦταν
εὔκολη.  Ἀλλὰ θὰ ἔπρεπε νὰ προστεθεῖ ὅτι ἡ προσαρμογὴ γιὰ
διαφορετικὲς ἀνάγκες &amp; στυλ μάθησης θὰ ἔπρεπε νὰ εἶναι πρωταρχικὸς
στόχος κατὰ τὸν σχεδιασμὸ ἑνὸς SRS.</p>
<h3 id="flashcards-are-an-inferior-learning-method.">Οἱ κάρτες μνήμης εἶναι κατώτερη μέθοδος μάθησης.</h3>
<p>Οἱ κάρτες μνήμης εἶναι ἀρκετὰ ἁπλὲς νὰ φτιαχτοῦν· πρωτότυπες
μέθοδοι ἐπανάληψης μὲ διαστήματα χρησιμοποιοῦσαν φυσικὲς κάρτες μνήμης.
Οἱ σημερινοὶ ὑπολογιστὲς μᾶς ἐπιτρέπουν πιὸ ἐξελιγμένες μεθόδους
«ἐπανάληψης», <em>ὅπως τὴ χρήση εἰσόδου χρήστη</em>.</p>
<p>Ἡ χρήση εἰσόδου χρήστη γιὰ τὴν ἀξιολόγηση τῆς ἀποτελεσματικότητας μιᾶς
ἐπανάληψης εἶναι προτιμότερη ἀπὸ τὸ ἁπλῶς νὰ ἀποκαλύπτεις μιὰ ἀπάντηση
καὶ νὰ ρωτᾶς ἂν ἦταν γνωστὴ ἢ ὄχι.  Αὐτὴ ἡ προσέγγιση ἐξασφαλίζει ὄχι
μόνο τὴν κατανόηση τῆς ἀπάντησης ἀλλὰ καὶ τὴν ἀκριβῆ ὀρθογραφία της.
Ἐπιπλέον, ὁδηγεῖ σὲ πιὸ ἀποδοτικὴ διατήρηση σὲ σύγκριση μὲ τὴν ἁπλὴ
ἐμφάνιση τῆς ἀπάντησης χωρὶς ἐνεργὴ συμμετοχὴ τοῦ χρήστη.</p>
<p>Ἰδανικὰ μὲ τὸ <a href="https://git.thanosapollo.org/gnosis">Gnosis</a> θὰ
ἤθελα ἐπίσης νὰ ὑλοποιήσω τύπο
<a href="https://en.wikipedia.org/wiki/Multiple_choice">MCQ</a> γιὰ προσομοίωση
τῶν ἐξετάσεων <a href="https://en.wikipedia.org/wiki/Usmle">USMLE</a> ποὺ
<em>ἐλπίζω</em> σύντομα νὰ ἐξεταστῶ.  <em>Αὐτὸ θὰ καταστήσει δυνατὴ τὴν
προσομοίωση ὁποιασδήποτε ἄλλης ἐξέτασης MCQ</em></p>
<h3 id="no-self-rating">Ὄχι αὐτοβαθμολόγηση</h3>
<p>Συνιστᾶται οἱ χρήστες νὰ μὴν αὐτοβαθμολογοῦν τὶς ἀπαντήσεις τους.  Ἡ
διαδικασία ἐπανάληψης θὰ ἔπρεπε νὰ περιλαμβάνει δυαδικὴ ἀξιολόγηση
ἐπιτυχίας ἢ ἀποτυχίας, ὅπου οἱ χρήστες εἴτε ἀνακαλοῦν σωστὰ τὴν
ἀπάντηση εἴτε ὄχι.  Αὐτὴ ἡ βαθμολογία ἐπιτυχίας/ἀποτυχίας θὰ
χρησιμοποιεῖται γιὰ νὰ καθορίσει τὸ ἑπόμενο διάστημα γιὰ τὴ συγκεκριμένη
σημείωση, βελτιστοποιώντας τὸ σύστημα ἐπανάληψης μὲ διαστήματα γιὰ
ἀποτελεσματικὴ μάθηση.</p>
<h3 id="collaboration">Συνεργασία</h3>
<p>Τὸ περισσότερο λογισμικὸ ἐπανάληψης μὲ διαστήματα βασίζεται σὲ βάσεις
δεδομένων γιὰ ἀποθήκευση, ἀλλὰ τὸ μειονέκτημα εἶναι ὅτι οἱ βάσεις
δεδομένων δὲν εἶναι εὔκολα ἀναγνώσιμες ἢ ἐπεξεργάσιμες ἀπὸ ἀνθρώπους,
ἐμποδίζοντας τὴν κοινὴ χρήση καὶ τὴ συνεργασία.</p>
<p>Γιὰ νὰ ἀντιμετωπίσω αὐτὸν τὸν περιορισμό, σκοπεύω νὰ ἐνσωματώσω
δυνατότητες ἐξαγωγῆς στὸ gnosis.  Αὐτὴ ἡ δυνατότητα θὰ ἐπέτρεπε στοὺς
χρήστες νὰ ἐξάγουν ἕνα deck σημειώσεων σὲ φιλικὴ πρὸς τὸν χρήστη μορφή,
τὸ ὁποῖο οἱ χρήστες μποροῦν νὰ μοιράζονται καὶ νὰ ἐπεξεργάζονται συνεργατικὰ μὲ
ἐργαλεῖα ὅπως ἀποθετήρια
<a href="https://en.wikipedia.org/wiki/Git">git</a>.</p>
<p>Αὐτὴ ἡ συνεργατικὴ προσέγγιση θὰ μᾶς ἐπέτρεπε νὰ δουλεύουμε μαζί, νὰ
μοιραζόμαστε, καὶ νὰ δημιουργοῦμε πολύτιμο μαθησιακὸ ὑλικὸ ποὺ μπορεῖ
νὰ χρησιμοποιηθεῖ καὶ νὰ τροποποιηθεῖ ἀπὸ ὅλους τοὺς ἐμπλεκόμενους.</p>
<h3 id="syncing-between-devices">Συγχρονισμὸς μεταξὺ συσκευῶν</h3>
<p>Τὸ Anki κάνει τὸν συγχρονισμὸ μεταξὺ συσκευῶν παιχνιδάκι!  Ἀλλὰ γίνεται
τρομερὰ ἀργὸ ἂν συγχρονίζεις νέα συσκευὴ ὅταν ἔχεις πολὺ ὑλικὸ στὸν
λογαριασμό σου, συν ὅτι βασίζεσαι στοὺς διακομιστὲς τοῦ Anki γιὰ νὰ
δουλεύει.</p>
<p>Ἀφοῦ στὸ gnosis θὰ χρησιμοποιῶ
<a href="https://en.wikipedia.org/wiki/Sqlite">sqlite</a> ὡς ὑλοποίηση βάσης
δεδομένων, ἁπλῶς θὰ χρησιμοποιοῦσα git γιὰ νὰ κρατῶ τὴ βάση δεδομένων
μου συγχρονισμένη μεταξὺ διαφορετικῶν συσκευῶν.</p>
<h2 id="gnosis">Gnosis</h2>
<p>Μπορεῖς νὰ βρεῖς τὸ gnosis στὸν git διακομιστή μου
<a href="https://git.thanosapollo.org/gnosis">ἐδῶ</a>, <em>διάβασε τὸ τμῆμα Περὶ
γιὰ ὁδηγίες ἐγκατάστασης</em>.</p>
<p>Δὲν εἶναι ἀκόμα οὔτε σὲ δοκιμαστικὴ ἔκδοση ἄλφα, ἀλλὰ διαθέτει ἤδη τὴ βασικὴ
λειτουργικότητα γιὰ νὰ τὸ δοκιμάσεις.  Μὴ διστάσεις νὰ μοῦ
στείλεις μήνυμα ἠλεκτρονικοῦ ταχυδρομείου ἂν ἔχεις ἐρωτήσεις ἢ αἰτήματα γιὰ gnosis.</p>]]></content:encoded>
    </item>
    <item>
      <title>Μετάβαση στὸ Gentoo Linux</title>
      <link>https://thanosapollo.org/el/posts/gentoo-beginning/</link>
      <pubDate>Sun, 12 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/gentoo-beginning/</guid>
      <description>Τὸ τελικὸ στάδιο τοῦ ταξιδιοῦ μου στὸ Linux ἄρχισε | Μετάβαση στὸ Gentoo, ἡ ἀρχή.</description>
      <content:encoded><![CDATA[<p>Ἀνέβηκα ἐπίπεδο καὶ ἔγινα χρήστης Gentoo, τὸ πιὸ ἐλίτ εἶδος σπασίκλα
στὴ χώρα τοῦ GNU/Linux.  Ὅλες μου οἱ συσκευὲς ἔχουν μεταμορφωθεῖ
σὲ μηχανὲς Gentoo, καὶ περιττὸ νὰ πῶ ὅτι εἶμαι ἐνθουσιασμένος.</p>
<p><em>Σημείωση: Αὐτὸ τὸ ἄρθρο περιέχει ὑγιῆ δόση σαρκασμοῦ, σὲ περίπτωση
ποὺ δὲν τὸ ἔπιασες.</em></p>
<figure>
    <img loading="lazy" src="/images/setup-07-11-2023.jpg"
         alt="Ἐπιφάνεια ἐργασίας Gentoo καὶ διάταξη Thinkpad" width="450"/> 
</figure>

<h2 id="about">Περὶ</h2>
<p>Εἶμαι χρήστης <a href="https://archlinux.org">Arch Linux</a> ἐδῶ καὶ καιρό·
τὸ Arch Linux ἦταν ἡ πρώτη διανομὴ ποὺ ἐγκατέστησα σὲ ὑλικό.  Μὲ
μεταχειρίστηκε καλὰ τὸν περασμένο χρόνο, ἀλλὰ μετὰ ἀπὸ δοκιμὴ
gentoo σὲ εἰκονικὴ μηχανὴ νομίζω ὅτι βρῆκα τὸ <code>$HOME</code> μου.  Τώρα
τρέχω <a href="https://gentoo.org">Gentoo</a> σὲ ὅλες μου τὶς συσκευὲς τὶς τελευταῖες 2+ ἑβδομάδες.</p>
<h2 id="what-did-you-enjoy-so-much-about-gentoo">Τί ἀπόλαυσες τόσο πολὺ στὸ Gentoo;</h2>
<h3 id="gentoo-handbook">Gentoo Handbook</h3>
<p><a href="https://wiki.gentoo.org/wiki/Handbook:Main_Page">Τὸ Gentoo Handbook</a>·
δὲν μπορῶ νὰ τὸ τονίσω ἀρκετά: τὸ Gentoo Handbook εἶναι
<strong><em>ἐκτενῶς</em></strong> τεκμηριωμένο μὲ κάθε λεπτομέρεια ποὺ ἴσως χρειαστεῖς,
<strong><em>εἰδικὰ</em></strong> γιὰ χρήση Gentoo.  Τὸ Arch Wiki εἶναι ὑπέροχο,
περιλαμβάνει τεκμηρίωση γιὰ εὐρεῖα γκάμα προγραμμάτων, ἀλλὰ εἶναι
γενικὴ τεκμηρίωση ποὺ μοιάζει περισσότερο μὲ γενικὸ «wiki Linux»
παρὰ εἰδικὰ γιὰ Arch Linux.  Ἀκόμα καὶ τὰ μέρη ποὺ εἶναι εἰδικὰ
γιὰ Arch Linux, ὅπως οἱ ὁδηγίες ἐγκατάστασης, ὑστεροῦν <em>σοβαρά</em>,
πρᾶγμα ποὺ ὁδηγεῖ τοὺς περισσότερους χρήστες Arch νὰ βασίζονται
σὲ ὁδηγοὺς τρίτων ἀκόμα καὶ γιὰ τὴν ἐγκατάσταση τοῦ λειτουργικοῦ τους συστήματος.</p>
<p>Καμία ἄλλη διανομὴ Linux δὲν ἔχει ἕνα κεντρικὸ «βιβλίο» ποὺ σὲ
παίρνει «ἀπὸ τὸ χέρι» ἀπὸ τὴ διαδικασία ἐγκατάστασης μέχρι τὴν
ἐργασία μὲ τὰ ἐγγενῆ ἐργαλεῖα λογισμικοῦ ποὺ θὰ χρησιμοποιεῖς
καθημερινά, συγκρίσιμο μὲ τὸ Gentoo Handbook.</p>
<h3 id="community">Κοινότητα</h3>
<p>Ἕνα πράγμα ποὺ ὑπερασπίζομαι γιὰ τὴν ἐπιλογὴ λογισμικοῦ εἶναι:</p>
<blockquote>
<p>Χρησιμοποίησε ἔργα λογισμικοῦ στὰ ὁποῖα δὲν θὰ σὲ πείραζε / θὰ ἤθελες
νὰ συμβάλεις</p>
</blockquote>
<p>Ἡ κοινότητα Gentoo εἶναι ἡ πιὸ βοηθητικὴ ποὺ ἔχω βρεῖ μέχρι τώρα·
εἰδικότερα ἄνθρωποι στὸ <a href="https://wiki.gentoo.org/wiki/Project:GURU">ἔργο
GURU</a>, <em>ἀνάλογο τοῦ
AUR</em>, συσκευάσανε λογισμικὸ ποὺ χρειαζόμουν καὶ μὲ βοήθησαν στὴ
συμβολή, ἐμπειρία μᾶλλον εὐχάριστη καὶ ἤρεμη.</p>
<blockquote>
<p>Ἂν ἕνα ἔργο ἔχει «τοξικὴ» κοινότητα μὲ τὴν ὁποία δὲν θέλεις νὰ
ἀλληλεπιδρᾶς, εἶναι μεγάλο κόκκινο σημάδι γιὰ μένα.</p>
</blockquote>
<h2 id="but-why-would-you-compile-everything-from-source">Ἀλλὰ&hellip; Γιατί νὰ μεταγλωττίζεις τὰ πάντα ἀπὸ πηγή;</h2>
<blockquote>
<p><em>Γιατί κάποιος πρέπει&hellip;</em></p>
</blockquote>
<p>Ἀστεῖα στὴν ἄκρη, ὑπάρχουν πολλὰ πλεονεκτήματα στὸ νὰ μεταγλωττίζεις
τὸ σύστημά σου ἀπὸ πηγὴ ἀντὶ νὰ ἐγκαθιστᾶς ἕνα ἕτοιμο δυαδικὸ πακέτο ποὺ
κάποιος ἄλλος μεταγλώττισε, ἐλπίζοντας ὅτι μεταγλωττίστηκε ὅπως
θέλεις.</p>
<blockquote>
<p>Ὁ <a href="https://yewtu.be/watch?v=8QcI43IwkVc">Mental Outlaw (Invidious)</a>
ἔχει κάνει ὡραῖο βίντεο ποὺ ἐξηγεῖ σημαντικὲς λεπτομέρειες/λόγους
γιὰ τρέξιμο Gentoo, καθὼς καὶ ὁ <a href="https://yewtu.be/watch?v=6JUD-ZYuLPA">10leej
(Invidious)</a>, ἂν θέλεις νὰ μάθεις περισσότερα.</p>
</blockquote>
<h2 id="it-takes-way-too-much-time-install-nobody-has-time-for-that">Παίρνει πάρα πολὺ χρόνο ἡ ἐγκατάσταση, κανεὶς δὲν ἔχει χρόνο γιὰ αὐτό!</h2>
<p>Δὲν παίρνει πραγματικὰ πολὺ περισσότερο χρόνο ἀπὸ τὴν ἐγκατάσταση
Arch Linux· ἐγκατέστησα Gentoo στὸν ἐπιτραπέζιο ὑπολογιστή μου (Ryzen 7 5800X) τὴν
πρώτη φορά σὲ ~2 ὧρες, τὶς περισσότερες ἀπὸ τὶς ὁποῖες πέρασα διαβάζοντας
τὸ ἐγχειρίδιο.  Γιὰ ἀναφορά, οἱ χρόνοι μεταγλώττισής μου εἶναι οἱ ἑξῆς:</p>
<p><em>ἔξοδος τοῦ <code>genlop -t &lt;package&gt;</code></em></p>
<blockquote>
<p>sys-kernel/gentoo-kernel-6.1.57 merge time: 15 minutes and 40 seconds.
www-client/firefox-115.4.0 merge time: 15 minutes and 26 seconds.
app-editors/emacs-29.1-r1 merge time: 52 seconds.
x11-wm/qtile-0.22.1-r2 merge time: 6 seconds.</p>
</blockquote>
<p>Οἱ μόνες χρονοβόρες μεταγλωττίσεις ποὺ εἶδα ἦταν γιὰ firefox
καὶ πυρῆνα linux, καὶ οἱ δύο μαζὶ μόλις 30 λεπτά· ἔχεις καὶ τὴν
ἐπιλογὴ νὰ χρησιμοποιήσεις πακέτα -bin.  Μὲ ἐξαίρεση αὐτὰ τὰ 2
πακέτα, δὲν ἔχω περάσει πάνω ἀπὸ 2 λεπτὰ μεταγλωττίζοντας πακέτο.</p>
<p>Σκέφτηκα ἀρχικὰ νὰ στήσω <a href="https://www.distcc.org/">distcc</a> γιὰ
τὸ ThinkPad x220 μου, ἀλλὰ τελικὰ ἄφησα firefox καὶ gentoo-kernel
νὰ μεταγλωττίζονται ἐνῶ ἤμουν στὸ γυμναστήριο γιὰ προπόνηση.</p>
<blockquote>
<p>Σημείωση: Ἔχω ἐγκαταστήσει μόλις ~700 πακέτα στὸ ThinkPad καὶ ~900
στὸν ἐπιτραπέζιο· τὸ μεγαλύτερο μέρος τῆς διαφορᾶς ὀφείλεται σὲ
qemu/virt-manager στὸν ἐπιτραπέζιο καὶ τυχαῖες γραμματοσειρές.  Δὲν
χρησιμοποιῶ DE· ἂν σκοπεύεις νὰ χρησιμοποιήσεις GNOME ἢ KDE κ.λπ. ἴσως ἔχεις διαφορετικὴ
ἐμπειρία, ἐπειδὴ πολλὰ DE εἶναι ἀρκετὰ μεγάλα καὶ παίρνουν πολὺ
χρόνο νὰ μεταγλωττιστοῦν.</p>
</blockquote>
<h2 id="summary">Σύνοψις</h2>
<p>Ἀπολαμβάνω νὰ χρησιμοποιῶ Gentoo σὲ ὅλες μου τὶς συσκευὲς τὶς τελευταῖες
ἑβδομάδες.  Ἕνα ἀπὸ τὰ κύρια πλεονεκτήματα τοῦ Gentoo εἶναι ὁ ἔλεγχος
ποὺ προσφέρει γιὰ προσαρμογὴ τοῦ συστήματος στὰ γοῦστα σου.  Αὐτὸ
συνοδεύεται ἀπὸ μία ἀπὸ τὶς καλύτερες τεκμηριώσεις, ἂν ὄχι τὴν
καλύτερη, γιὰ νὰ μάθεις ὅ,τι χρειάζεσαι γιὰ τὴ χρήση τοῦ συστήματος
Linux σου.</p>
<p>Ἡ κοινότητα εἶναι μᾶλλον ἤρεμη καὶ φιλική, καλωσορίζει νέες
συμβολὲς καὶ θὰ σὲ βοηθήσει μὲ ὅποιο πρόβλημα ἔχεις.</p>
<blockquote>
<p>Ἂν μπορεῖς νὰ διαβάσεις καὶ νὰ ἀκολουθήσεις ὁδηγίες γιὰ ἐγκατάσταση
καὶ χρήση τοῦ συστήματός σου, θὰ διαπιστώσεις ὅτι τὸ Gentoo εἶναι ἁπλὴ καὶ ἀξιόπιστη
διανομὴ Linux, μὲ βοηθητικὴ κοινότητα.  Ἂν θέλεις ἐμπειρία ὅπου ὅλα λειτουργοῦν
ἀμέσως, χωρὶς πρόσθετες ρυθμίσεις, μεῖνε μακριὰ ἀπὸ τὸ Gentoo· εἶναι μέρος «μόνο γιὰ σπασίκλες».</p>
</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Γιατί χρειαζόμαστε περισσότερους ἱστότοπους .org.</title>
      <link>https://thanosapollo.org/el/posts/more-org-sites/</link>
      <pubDate>Tue, 07 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/more-org-sites/</guid>
      <description>Γιατί νὰ ἀλλάξει ἡ ἐπέκταση τοῦ ἱστότοπου ἀπὸ .com σὲ .org</description>
      <content:encoded><![CDATA[<p>Ὁ σημερινὸς παγκόσμιος ἱστὸς χρειάζεται περισσότερους ἱστότοπους .org.  Ἀλλάζω τὴν
ἐπέκταση αὐτοῦ τοῦ ἱστότοπου σὲ thanosapollo.org ἀπὸ .com.</p>
<h2 id="about">Περὶ</h2>
<p>Πρῶτα καταχώρισα αὐτὸ τὸ ὄνομα τομέα χρησιμοποιώντας <code>thanosapollo.com=· τὸ =.com</code> εἶναι τὸ <em>προεπιλεγμένο</em> ὅταν πρόκειται γιὰ τοὺς σημερινοὺς
ἱστότοπους· περίπου 50% τῶν ἱστότοπων τὸ χρησιμοποιοῦν καὶ αὐτὸ εἶναι
ποὺ οἱ περισσότεροι χρήστες γνωρίζουν.</p>
<blockquote>
<p>Τὸ <code>.com</code> σημαίνει ἐμπορικὸ/γιὰ κέρδος, ἂν καὶ μερικὲς φορὲς
χρησιμοποιεῖται ἐπίσης ἀπὸ ἱστολόγια καὶ μὴ κερδοσκοπικοὺς ἱστότοπους
γιὰ νὰ ἑλκύσουν περισσότερους ἐπισκέπτες.  Ἀπὸ τὴν ἄλλη, τὸ <code>.org</code>
συνδέεται μὲ μὴ κερδοσκοπικοὺς ὀργανισμοὺς, ἢ γενικὰ μὲ ὅσους παρέχουν
ἐλεύθερη πληροφορία καὶ πόρους.</p>
</blockquote>
<!--quoteend-->
<blockquote>
<p>Τὸ πλαίσιο αὐτοῦ τοῦ ἄρθρου ἀναφέρεται στὸ <code>.org</code> ὄχι μόνο ὡς
τομέας κορυφαίου ἐπιπέδου, ἀλλὰ ὡς ἐλεύθερα προσβάσιμος FOSS ἱστότοπος.</p>
</blockquote>
<h2 id="why-switch-to-.org-and-why-we-need-more-.org-sites">Γιατί μετάβαση σὲ .org καὶ γιατί χρειαζόμαστε περισσότερους ἱστότοπους .org</h2>
<p>Δὲν σχεδιάζω νὰ χρησιμοποιήσω αὐτὸν τὸν ἱστότοπο γιὰ ὁποιοδήποτε
εἴδους ἐμπορικὸ/κερδοσκοπικὸ σκοπό· τὸ νὰ ἔχεις ἐπέκταση <code>.org</code>
ὑπονοεῖ ὅτι ὁ σκοπὸς αὐτοῦ τοῦ ἱστότοπου εἶναι μὴ ἐμπορικός.  Παρόλο ποὺ
εἶναι λιγότερο δημοφιλές, θεωρῶ ὅτι τὸ σημερινὸ τοπίο τοῦ παγκοσμίου ἱστοῦ
χρειάζεται περισσότερους ἱστότοπους <code>.org</code> καὶ λιγότερους <code>.com</code>.</p>
<p>Περίπου ~10 χρόνια πρίν, <em>ὅταν ἤμουν 13 ἐτῶν</em>, ὁ ἱστὸς φαινόταν νὰ εἶναι
καταφύγιο ἐλεύθερα διαθέσιμης πληροφορίας.  10 χρόνια μετά, ἀκόμα καὶ
ἄχρηστη πληροφορία βρίσκεται πίσω ἀπὸ JavaScript τεῖχος πληρωμῆς ἢ πύλη
σύνδεσης.  Ἡ αὐξημένη κίνηση τοῦ ἱστοῦ συνοδεύτηκε ἀπὸ λιγότερη
δημιουργία πολύτιμου περιεχομένου, μὲ τοὺς σημερινοὺς χρήστες
συνηθισμένους νὰ χρησιμοποιοῦν τὸν «ἱστὸ» μόνο μέσω ἐφαρμογῶν κοινωνικῶν
μέσων σὲ κινητά, ἐγκλωβίζοντάς τους σὲ ἰδιόκτητο οἰκοσύστημα ὅπου δὲν
κατέχουν καν τὰ προφίλ τους στὶς ἐν λόγω πλατφόρμες· τὰ κατέχει ὁ
διαχειριστής τους.</p>
<p>Χρειαζόμαστε περισσότερους ἱστότοπους ποὺ προσφέρουν ἐλεύθερη
πληροφορία γιὰ ὅλους καὶ λιγότερους ἀνθρώπους ἐγκλωβισμένους σὲ ἰδιόκτητες
πλατφόρμες.  Ἐλπίζω στὸ μέλλον νὰ ἔχουμε περισσότερους ἀνθρώπους ποὺ
πραγματικὰ κατέχουν τοὺς ἱστότοπους ὅπου μοιράζονται τὸ περιεχόμενό
τους.  Μπορεῖ νὰ φτιάχνουν ἱστολόγια ἢ ὁτιδήποτε ἄλλο τοὺς ἀρέσει, ἀρκεῖ
λιγότεροι ἀπὸ αὐτοὺς νὰ καταλήγουν στὸ ἔλεος τῶν μεγάλων τεχνολογικῶν ἑταιρειῶν
<code>.com</code>.</p>
<blockquote>
<p>Ἀκόμα κι ἂν ἐπιδιώκεις νὰ δημιουργεῖς μόνο περιεχόμενο γιὰ κέρδος, τὸ
νὰ κάνεις τὴν ἐπιχείρησή σου νὰ ἐξαρτᾶται ἐξ ὁλοκλήρου ἀπὸ τρίτο μέρος δὲν
εἶναι ἡ σοφότερη ἰδέα.</p>
</blockquote>
<h2 id="difficulties-of-changing-my-site-to-.org">Δυσκολίες ἀλλαγῆς τοῦ ἱστότοπού μου σὲ .org</h2>
<p>Τὸ μόνο πρόβλημα μὲ τὴν ἀλλαγὴ ἐπέκτασης τοῦ ἱστότοπού μου ἦταν ἡ
ἐνημέρωση τῶν ἀπομακρυσμένων ἀποθετηρίων Git &amp; συνταγῶν πακέτων τῶν ἔργων μου καθὼς καὶ
τῶν ὑπηρεσιῶν ἠλεκτρονικοῦ ταχυδρομείου στὸ νέο ὄνομα τομέα.  Ἂν καὶ αὐτὸ εἶναι περισσότερο
ἀναστάτωση παρὰ πραγματικὴ δυσκολία.</p>]]></content:encoded>
    </item>
    <item>
      <title>pcomplete-yay | Ἐπεκτάσιμες συμπληρώσεις γιὰ τὸ yay στὸ eshell</title>
      <link>https://thanosapollo.org/el/posts/pcomplete-yay/</link>
      <pubDate>Fri, 13 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/pcomplete-yay/</guid>
      <description>Ἐπεκτάσιμες συμπληρώσεις γιὰ τὸ yay στὸ eshell [Πακέτο Ἤμαξ]</description>
      <content:encoded><![CDATA[<p>Τὸ Eshell εἶναι τὸ ἀγαπημένο μου κέλυφος, ἀλλὰ δὲν εἶναι τόσο καλοδουλεμένο οὔτε
καλὰ τεκμηριωμένο γιὰ καθημερινὲς ἐργασίες.  Ἕνα τέτοιο παράδειγμα εἶναι ἡ
χρήση συμπληρώσεων γιὰ διαχειριστὲς πακέτων, ὅπως τὸ yay, γιὰ ἐγκατάσταση ἢ
ἀφαίρεση πακέτων.</p>
<h2 id="about">Σχετικά</h2>
<p>Χρησιμοποιῶ τὸ eshell περισσότερο ἀπὸ κάθε ἄλλο κέλυφος τελευταῖα, ἀλλὰ
ὑστερεῖ σὲ συμπληρώσεις σὲ σύγκριση μὲ ἄλλα κελύφη.</p>
<p>Ἔφτιαξα αὐτὸ τὸ ἁπλὸ πακέτο γιὰ νὰ προσφέρει συμπληρώσεις γιὰ ἐγκατάσταση
καὶ ἀφαίρεση πακέτων μὲ τὸ <a href="https://github.com/Jguer/yay">yay</a>.</p>
<p>Τὸ Eshell παρέχει ἀπρόσκοπτη ἐνσωμάτωση μὲ τὸ ὑπόλοιπο οἰκοσύστημα τοῦ
Ἤμαξ καί, χάρη στὴν ἐνσωμάτωση μὲ τὸ
<a href="https://codeberg.org/akib/emacs-eat">Eat</a>, δὲν ἔχει πλέον πρόβλημα μὲ
ὀπτικὲς ἐντολές, μὲ τὶς ὁποῖες παλαιότερα δυσκολευόταν.  Τὸ μόνο ποὺ τοῦ λείπει εἶναι
ἀξιοπρεπεῖς δυνατότητες συμπλήρωσης· πιστεύω πὼς σύντομα θὰ δοῦμε
περισσότερες.</p>
<h2 id="installation">Ἐγκατάσταση</h2>
<p>Μπορεῖτε νὰ πάρετε τὸ <code>pcomplete-yay</code> ἀκολουθώντας τὶς ὁδηγίες στὸ
<a href="https://git.thanosapollo.org/pcomplete-yay/about">git ἀποθετήριο</a> τοῦ ἔργου.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ρυθμίζοντας τὸ Firefox νὰ χρησιμοποιεῖ συνδυασμοὺς πλήκτρων Ἤμαξ</title>
      <link>https://thanosapollo.org/el/posts/firefox-with-emacs-keybindings/</link>
      <pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/firefox-with-emacs-keybindings/</guid>
      <description>Ρύθμιση Firefox μὲ συνδυασμοὺς πλήκτρων Ἤμαξ, χρησιμοποιώντας vimium.</description>
      <content:encoded><![CDATA[<p>Ἐπιστρέφοντας στὸ Firefox ἀπὸ τὸ Nyxt, ἐνῶ διατηρῶ τὴ ροὴ ἐργασίας καὶ
τοὺς συνδυασμοὺς πλήκτρων στυλ Ἤμαξ.</p>
<h2 id="about">Περὶ</h2>
<p>Ἀγαπῶ τὸν Ἤμαξ, ἀλλὰ σίγουρα δὲν εἶναι βιώσιμη ἐναλλακτικὴ στοὺς
σύγχρονους περιηγητὲς ὅπως τὸ firefox.  Ἡ ἐπιθυμία νὰ ἔχω ἕναν
«τύπου Ἤμαξ» περιηγητὴ μὲ ὁδήγησε νὰ χρησιμοποιῶ τὸ
<a href="https://nyxt.atlas.engineer">Nyxt</a>.</p>
<p>Παρόλο ποὺ τὸ nyxt εἶναι ἐντυπωσιακό, ἔχει κάποιες ἀτέλειες καὶ
ἐγγενῆ προβλήματα.  Ἐπιπλέον, διάφοροι ἱστότοποι ποὺ χρησιμοποιοῦν
cloudflare δὲν λειτουργοῦν σωστὰ μὲ τὸ nyxt, ὁδηγώντας σὲ ἀτελείωτο
βρόχο ἐπαλήθευσης.</p>
<p>Πρὸς τὸ παρόν, ἔχω ἐπιλέξει νὰ χρησιμοποιῶ Firefox μὲ συνδυασμοὺς
πλήκτρων στυλ Ἤμαξ μέσω τῆς ἐπέκτασης
<a href="https://addons.mozilla.org/en-US/firefox/addon/vimium-ff">vimiun</a>.</p>
<p><em>Ἀκολουθεῖ ἕνας σύντομος ὁδηγὸς γιὰ τὴν ἀναπαραγωγὴ αὐτῆς τῆς διάταξης.</em></p>
<h3 id="step-i-aboutconfig">Βῆμα I: about:config</h3>
<p>Πρῶτα ἐπισκέψου τὸ <code>about:config</code>.</p>
<p>Γιὰ νὰ ἐνεργοποιήσεις συνδυασμοὺς πλήκτρων Ἤμαξ κατὰ τὴν ἐπεξεργασία
κειμένου στὸ Firefox, κάνε τὶς ἑξῆς ἀλλαγές:</p>
<ul>
<li>Ὅρισε <code>ui.key.accelKey</code> σὲ <code>18</code></li>
<li>Ὅρισε <code>ui.key.chromeAccess</code> σὲ <code>0</code></li>
<li>Ὅρισε <code>devtools.editor.keymap</code> σὲ <code>emacs</code></li>
</ul>
<h3 id="step-ii-gtk-key-theme">Βῆμα II: gtk-key-theme</h3>
<p>Τώρα, προσάρμοσε τὸ <code>.config/gtk-3.0/settings.ini</code>, βεβαιώσου ὅτι ἔχεις
προσθέσει <code>gtk-key-theme-name = Emacs</code>.  Θὰ πρέπει νὰ μοιάζει κάπως
ἔτσι:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[Settings]
</span></span><span style="display:flex;"><span>.....
</span></span><span style="display:flex;"><span>gtk-key-theme-name = Emacs
</span></span></code></pre></div><h3 id="step-iii-vimium">Βῆμα III: Vimium</h3>
<p>Ἐγκατέστησε τὸ <a href="https://addons.mozilla.org/en-US/firefox/addon/vimium-ff">vimium</a>.</p>
<p>Πήγαινε στὴ σελίδα Options τοῦ Vimium, <em>κάνοντας κλικ στὸ πρόσθετο</em>, καὶ
προσάρμοσε τὰ =Custom Key Mappings=· νά ἕνα παράδειγμα διάταξης γιὰ
Ἤμαξ.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>unmapAll # use emacs-style bindings only
</span></span><span style="display:flex;"><span>map &lt;c-n&gt; scrollDown
</span></span><span style="display:flex;"><span>map &lt;c-p&gt; scrollUp
</span></span><span style="display:flex;"><span>map &lt;c-b&gt; goBack
</span></span><span style="display:flex;"><span>map &lt;c-f&gt; goForward
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;. scrollToTop
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;, scrollToBottom
</span></span><span style="display:flex;"><span>map &lt;c-V&gt; scrollFullPageUp
</span></span><span style="display:flex;"><span>map &lt;c-v&gt; scrollFullPageDown
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-r&gt; reload
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;k removeTab
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;&lt;c-u&gt; copyCurrentUrl
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;&lt;c-l&gt; LinkHints.activateModeToCopyLinkUrl
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;&lt;c-o&gt; openCopiedUrlInCurrentTab
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;&lt;c-O&gt; openCopiedUrlInNewTab
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;&lt;c-i&gt; enterInsertMode
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-f&gt; LinkHints.activateMode
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-F&gt; LinkHints.activateModeToOpenInNewForegroundTab
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;a-f&gt; LinkHints.activateModeWithQueue
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;f LinkHints.activateModeToOpenInNewTab
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-d&gt; Vomnibar.activate
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-D&gt; Vomnibar.activateInNewTab
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;b Vomnibar.activateTabSelection
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-b&gt; Vomnibar.activateBookmarks
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-B&gt; Vomnibar.activateBookmarksInNewTab
</span></span><span style="display:flex;"><span>map &lt;c-@&gt; Marks.activateCreateMode
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;&lt;c-@&gt; Marks.activateGotoMode
</span></span><span style="display:flex;"><span>map &lt;c-s&gt; enterFindMode
</span></span><span style="display:flex;"><span>map &lt;c-S&gt; performFind
</span></span><span style="display:flex;"><span>map &lt;c-r&gt; performBackwardsFind
</span></span><span style="display:flex;"><span>map &lt;c-R&gt; performBackwardsFind
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;b previousTab
</span></span><span style="display:flex;"><span>map &lt;c-c&gt;f nextTab
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;4 duplicateTab
</span></span><span style="display:flex;"><span>map &lt;c-g&gt;&lt;c-r&gt; restoreTab
</span></span><span style="display:flex;"><span>map &lt;c-x&gt;5 moveTabToNewWindow
</span></span><span style="display:flex;"><span>map &lt;c-g&gt;&lt;c-p&gt; togglePinTab
</span></span><span style="display:flex;"><span>map &lt;a-B&gt; moveTabLeft
</span></span><span style="display:flex;"><span>map &lt;a-F&gt; moveTabRight
</span></span><span style="display:flex;"><span>map &lt;c-h&gt; showHelp
</span></span></code></pre></div><p>Μπορεῖς νὰ βρεῖς μιὰ πλήρη διαμόρφωση vimium ποὺ χρησιμοποιῶ στὸ
<a href="https://git.thanosapollo.org/dotfiles/tree/vimium-options.json">ἀποθετήριο
dotfiles</a> μου</p>
<h2 id="related-content">Σχετικὸ περιεχόμενο</h2>
<ul>
<li><a href="https://github.com/raamdev/vimium">Διαμόρφωση vimium Ἤμαξ τοῦ Raamdev</a></li>
<li><a href="https://github.com/bwachter/emacs-keybinding">πρόσθετο emacs-keybinding</a> <em>Δὲν συνιστῶ τὴ χρήση αὐτοῦ τοῦ προσθέτου</em></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Αὐτοφιλοξενία SearXNG τὸ 2023</title>
      <link>https://thanosapollo.org/el/posts/starting-point-searxng/</link>
      <pubDate>Mon, 25 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/starting-point-searxng/</guid>
      <description>Ἡ ἐμπειρία μου αὐτοφιλοξενώντας SearXNG, ὁ καλύτερος τρόπος περιήγησης στὸ δίκτυο μέχρι τώρα.</description>
      <content:encoded><![CDATA[<p>Ἡ φιλοξενία SearXNG ἦταν ἡ πιὸ εὔκολη ἐγκατάσταση μέχρι τώρα·
κυριολεκτικὰ παίρνει 5 λεπτά.  Τὰ ὀφέλη της εἶναι περισσότερα ἀπὸ
ἁπλῶς ἰδιωτικότητα· ἂς μποῦμε στὸ θέμα.</p>
<ul>
<li>Μπορεῖς νὰ βρεῖς τὴν ἐγκατάστασή μου SearXNG <a href="https://search.thanosapollo.com">ἐδῶ</a></li>
</ul>
<h2 id="about">Περὶ</h2>
<p>Τὸ SearXNG εἶναι μεταμηχανὴ ἀναζήτησης, <em>συναθροίζει ἀποτελέσματα
ἀναζήτησης ἀπὸ διάφορες πηγές</em>.  Καμία μηχανὴ ἀναζήτησης σήμερα δὲν
παρέχει ἐπαρκῆ ἀποτελέσματα· τὰ πάντα εἶναι γεμάτα διαφημίσεις καὶ
ἱστότοπους ποὺ ἁπλῶς βελτιστοποιοῦν γιὰ SEO καὶ ποσότητα ἀντὶ
ποιότητας.</p>
<ul>
<li><em>Οἱ περισσότεροι κυρίαρχοι ἱστότοποι σήμερα παρέχουν χειρότερο
περιεχόμενο ἀπὸ τὸ chat gpt 3.5.</em></li>
</ul>
<h3 id="what-issues-does-searxng-solve">Τί προβλήματα λύνει τὸ SearXNG;</h3>
<p><strong>Εὕρεση καλοῦ περιεχομένου καὶ εὕρεσή του ΓΡΗΓΟΡΑ!</strong>
Δὲν μοῦ ἀρέσει νὰ σπαταλῶ τὸν χρόνο μου, /ἐκτὸς ἂν πρόκειται γιὰ
διαμόρφωση Ἤμαξ/· ἁπλῶς θέλω νὰ ψάξω κάτι καὶ νὰ πάρω τὰ καλύτερα
ἀποτελέσματα τὸ συντομότερο δυνατό.</p>
<blockquote>
<p>Ἀλλὰ Θάνο, τί ἐννοεῖς; Εἶναι μεταμηχανὴ ἀναζήτησης, δὲν εἶναι τόσο
γρήγορη ὅσο κάτι σὰν google ἢ duckduckgo</p>
</blockquote>
<p>Ναί!  Ἐπειδὴ τὸ SearXNG συναθροίζει ἀποτελέσματα ἀπὸ διαφορετικὲς
πηγές, δὲν εἶναι τόσο γρήγορο ὅσο ἡ χρήση μίας μόνης τους.  <em>Ἀλλὰ&hellip;</em>
ἂς δοῦμε ἕνα σενάριο ὅπου θέλεις νὰ ψάξεις βίντεο· θὰ ἄνοιγες τὸν
φυλλομετρητή, μετὰ θὰ πήγαινες στὸ youtube.com <em>ἢ odysee</em>, μετὰ θὰ
ἔψαχνες τὸ ἐρώτημά σου.  Μὲ SearXNG ἁπλῶς πληκτρολογεῖς <code>!yt</code>
<em>VIDEO-QUERY</em>.  Ἴσως ψάχνεις βιβλίο; ἁπλῶς γράψε <code>!aa book-title</code>
στὴ γραμμὴ ἀναζήτησης καὶ θὰ πάρεις ἀποτελέσματα ἀπὸ
<a href="https://annas-archive.org">annas-archive.org</a></p>
<p>Εἶναι ἀκόμα πιὸ ἰσχυρὸ γιὰ ἔρευνα «ἐπιστημονικῶν» θεμάτων.  Μπορῶ
ἀπευθείας νὰ ψάξω pubmed γιὰ <code>nano-antibiotics in treatment of lung infection</code> γράφοντας ἁπλῶς <code>!pub</code> μπροστὰ ἀπὸ τὸ ἐρώτημα.</p>
<p>Χρησιμοποιῶ <a href="https://nyxt.atlas.engineer/">Nyxt</a> ὡς φυλλομετρητή· εἶχα ὁρίσει διαφορετικοὺς
συνδυασμοὺς πλήκτρων γιὰ ἀναζήτηση pubmed καὶ archlinux wiki, ἀλλὰ
ἡ χρήση μεταμηχανῆς ἀναζήτησης ὅπως τὸ SearXNG εἶναι ἀκόμα πιὸ
ἰσχυρὴ ἀπὸ αὐτό καὶ πολὺ εὐκολότερη στὴν ἐγκατάσταση, <strong>προσφέροντας
~70 μηχανὲς ἀναζήτησης!</strong>.</p>
<h2 id="how-to-setup-searxng">Πῶς νὰ στήσεις SearXNG</h2>
<ul>
<li>Χρησιμοποιῶ <a href="https://www.ionos.com">Ionos</a> γιὰ νὰ φιλοξενῶ τὴν ἐγκατάστασή μου SearXNG·
προσφέρει ἀπεριόριστο εὖρος ζώνης γιὰ μόλις 1$/μῆνα, <em>ἡ καλύτερη
συμφωνία ποὺ ἔχω βρεῖ.</em></li>
<li>Ὁ καλύτερος ὁδηγὸς ποὺ βρῆκα γιὰ στήσιμο SearXNG εἶναι στὸ
<a href="https://landchad.net/searxng">landchad.net</a> /ἀπὸ <a href="https://goshawk22.uk">goshawk22</a>/·
συμβουλεύσου αὐτὸν τὸν ὁδηγὸ καὶ τὴν <a href="https://docs.searxng.org/">τεκμηρίωση SearXNG</a> ἂν ἔχεις
προβλήματα.</li>
</ul>
<h3 id="step-1-clone-the-repo-run-the-installation-script">Βῆμα 1: Κλωνοποίησε τὸ ἀποθετήριο καὶ τρέξε τὸ σενάριο ἐγκατάστασης</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ git clone https://github.com/searxng/searxng /usr/local/searxng/searxng-src
</span></span><span style="display:flex;"><span>$ cd /usr/local/searxng/searxng-src
</span></span><span style="display:flex;"><span>$ ./utils/searxng.sh install all
</span></span></code></pre></div><h3 id="step-2-configure-nginx">Βῆμα 2: Διαμόρφωσε nginx</h3>
<p>Δημιούργησε νέο ἀρχεῖο <code>/etc/nginx/sites-available/searxng.conf</code> καὶ
πρόσθεσε τὰ ἑξῆς:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>server {
</span></span><span style="display:flex;"><span>    # Listens on http
</span></span><span style="display:flex;"><span>    listen 80;
</span></span><span style="display:flex;"><span>    listen [::]:80;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    # Your server name
</span></span><span style="display:flex;"><span>    server_name searx. example.org ;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    # If you want to log user activity, comment these
</span></span><span style="display:flex;"><span>    access_log /dev/null;
</span></span><span style="display:flex;"><span>    error_log  /dev/null;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    # X-Frame-Options (XFO) header set to DENY
</span></span><span style="display:flex;"><span>    add_header X-Frame-Options &#34;DENY&#34;;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    # HTTP Strict Transport Security (HSTS) header
</span></span><span style="display:flex;"><span>    add_header Strict-Transport-Security &#34;max-age=31536000; includeSubDomains&#34;;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    # Content Security Policy (CSP)
</span></span><span style="display:flex;"><span>    add_header Content-Security-Policy &#34;default-src &#39;self&#39;;&#34;;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    location / {
</span></span><span style="display:flex;"><span>        uwsgi_pass unix:///usr/local/searxng/run/socket;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        include uwsgi_params;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        uwsgi_param    HTTP_HOST             $host;
</span></span><span style="display:flex;"><span>        uwsgi_param    HTTP_CONNECTION       $http_connection;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        # see flaskfix.py
</span></span><span style="display:flex;"><span>        uwsgi_param    HTTP_X_SCHEME         $scheme;
</span></span><span style="display:flex;"><span>        uwsgi_param    HTTP_X_SCRIPT_NAME    /searxng;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        # see limiter.py
</span></span><span style="display:flex;"><span>        uwsgi_param    HTTP_X_REAL_IP        $remote_addr;
</span></span><span style="display:flex;"><span>        uwsgi_param    HTTP_X_FORWARDED_FOR  $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><ul>
<li>Δημιούργησε συμβολικὸ σύνδεσμο γιὰ ἐνεργοποίηση αὐτοῦ τοῦ ἱστότοπου.</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ ln -s /etc/nginx/sites-available/searxng.conf /etc/nginx/sites-enabled/searxng.conf
</span></span></code></pre></div><ul>
<li>Τώρα τὸ μόνο ποὺ μένει εἶναι ἐπανεκκίνηση Nginx καὶ SearXNG.</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ systemctl restart nginx
</span></span><span style="display:flex;"><span>$ service uwsgi restart searxng
</span></span></code></pre></div><ul>
<li>Ρύθμιση σύνδεσης <code>https</code> μὲ certbot <em>προαιρετικά</em></li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ apt install python3-certbot-nginx <span style="color:#75715e"># install certbot</span>
</span></span><span style="display:flex;"><span>$ certbot --nginx
</span></span></code></pre></div><h3 id="step-3-configuring-your-instance">Βῆμα 3: Διαμόρφωση τῆς ἐγκατάστασής σου</h3>
<p>Θὰ πειραματίζεσαι μὲ αὐτὲς τὶς δύο διαδρομές:</p>
<p><code>/etc/searxng/settings.yml</code> &amp; <code>/usr/local/searxng</code></p>
<p>Μπορεῖς νὰ βρεῖς τὴν προεπιλεγμένη διαμόρφωση <a href="https://github.com/searxng/searxng/blob/master/searx/settings.yml">ἐδῶ</a>, παρόλο ποὺ
συνιστῶ νὰ χρησιμοποιεῖς τὶς προεπιλεγμένες ρυθμίσεις ὅσο τὸ δυνατὸν
περισσότερο ἂν μόλις ξεκινᾶς.</p>
<p>Ἡ διαμόρφωση θέματος βρίσκεται στὸ
=usr/local/searxng/searxng-src/searx/static/themes/simple=· μπορεῖς
νὰ ἀφαιρέσεις καὶ νὰ ἐπεξεργαστεῖς τὰ προεπιλεγμένα λογότυπα ἢ νὰ
κάνεις ὅ,τι ἐντυπωσιακὸ θέλεις ἐκεῖ.</p>]]></content:encoded>
    </item>
    <item>
      <title>yeetube | Διεπαφὴ YouTube γιὰ τὸν Ἤμαξ (ἄρθρο)</title>
      <link>https://thanosapollo.org/el/posts/yeetube/</link>
      <pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/posts/yeetube/</guid>
      <description>Δημιουργώντας διεπαφὴ γιὰ ἀναπαραγωγὴ βίντεο YouTube μὲ Ἤμαξ</description>
      <content:encoded><![CDATA[<p>Γιὰ νὰ μάθω elisp ἀποφάσισα νὰ δουλέψω σὲ ἕνα ἔργο ποὺ ἔνιωθα ὅτι
ἔλειπε ἀπὸ τὸ οἰκοσύστημα GNU Ἤμαξ, μία ἄμεση διεπαφὴ γιὰ YouTube.</p>
<p><strong>Ἐνημέρωση 2024-02-26</strong>: Αὐτὸ εἶναι παλιὸ ἄρθρο ἱστολογίου ἀπὸ ὅταν ἄρχισα νὰ
δουλεύω σὲ αὐτὸ τὸ ἔργο.  Δὲς τὴ <a href="/projects/yeetube">Σελίδα τοῦ Ἔργου</a>
γιὰ ἐνημερωμένες πληροφορίες.</p>
<blockquote>
<p>Αὐτὸ τὸ πακέτο δὲν χρησιμοποιεῖ κανενὸς εἴδους API, ἁπλῶς ἀναλύει html
&amp; json μὲ κανονικὲς ἐκφράσεις.</p>
</blockquote>
<h2 id="motivation">Κίνητρο</h2>
<p>Ἁπλῶς ἤθελα νὰ μάθω elisp, καὶ ἀποφάσισα νὰ μὴν βλέπω κανένα περιεχόμενο
youtube ἐκτὸς ἂν εἶναι μέσα στὸν Ἤμαξ.  Μὲ αὐτὸν τὸν τρόπο ἐξοικονόμησα
καὶ πολὺ χρόνο ποὺ ἀλλιῶς θὰ σπαταλοῦσα βλέποντας τυχαῖα βίντεο youtube.</p>
<p>Τὸ νὰ βλέπεις youtube μέσω <a href="https://youtube.com">youtube.com</a> σοῦ
ἀποσπᾷ ὑπερβολικὰ τὴν προσοχή· ὁ σκοπὸς τοῦ ἱστότοπου εἶναι νὰ σὲ κρατᾶ κολλημένο μὲ
προτεινόμενα βίντεο ποὺ κάνουν τὸ ἐλάχιστο γιὰ νὰ σὲ κρατήσουν
ἐνεργό.  Χωρὶς νὰ ἀναφέρω ὅτι ἡ πλατφόρμα εἶναι βασικὰ ἰδιόκτητο
λογισμικὸ κατασκοπείας.</p>
<p>Παρόλα αὐτά, πολλοὶ ἀκαδημαϊκοὶ ἀποφασίζουν νὰ ἀνεβάζουν τὰ βίντεο καὶ
ἀκόμα καὶ τὶς διαλέξεις τους ἐκεῖ, ὁπότε ἐκτὸς ἀπὸ ψυχαγωγία εἶναι
πολύτιμος μαθησιακὸς πόρος.</p>
<h2 id="installation-guide">Ὁδηγὸς ἐγκατάστασης</h2>
<p><a href="https://git.thanosapollo.org/yeetube">Ἀποθετήριο τοῦ ἔργου</a></p>
<p>Μπορεῖς νὰ ἐγκαταστήσεις τὸ yeetube μέσω <a href="https://melpa.org/#/yeetube">MELPA</a></p>
<h3 id="straight.el">Straight.el</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(straight-use-package
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#39;</span>(yeetube :type git
</span></span><span style="display:flex;"><span>           :host <span style="color:#66d9ef">nil</span>
</span></span><span style="display:flex;"><span>           :repo <span style="color:#e6db74">&#34;https://git.thanosapollo.org/yeetube&#34;</span>))
</span></span></code></pre></div><h3 id="manual">Χειροκίνητα</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ git clone https://git.thanosapollo.org/yeetube
</span></span></code></pre></div><p>Πρόσθεσε αὐτὸ στὴ διαμόρφωση Ἤμαξ σου</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(add-to-list <span style="color:#e6db74">&#39;load-path</span> <span style="color:#e6db74">&#34;/path/to/yeetube&#34;</span>)
</span></span><span style="display:flex;"><span>(load-file <span style="color:#e6db74">&#34;~/path/to/yeetube.el&#34;</span>)
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Bebliotheca</title>
      <link>https://thanosapollo.org/el/projects/bebliotheca/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/projects/bebliotheca/</guid>
      <description>&lt;p&gt;Ἡ Bebliotheca εἶναι μία ψηφιακὴ ἀναδημιουργία τῆς Βιβλιοθήκης τῆς Κωνσταντινουπόλεως.&lt;/p&gt;
&lt;p&gt;Ὁ ἱστότοπος εἶναι διαθέσιμος &lt;a href=&#34;https://bebliotheca.thanosapollo.org&#34;&gt;ἐδῶ&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.thanosapollo.org/bebliotheca&#34;&gt;Κεντρικό ἀποθετήριο&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/bebliotheca/bebliotheca&#34;&gt;Καθρέφτης Codeberg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;στόχοι-τοῦ-ἔργου&#34;&gt;Στόχοι τοῦ ἔργου&lt;/h2&gt;
&lt;p&gt;Ἕνα ἀποθετήριο μὲ ὅλα τὰ σημαντικὰ ἔργα ποὺ θὰ εὕρισκε κανεὶς στὴν
Κωνσταντινούπολη κατὰ τὴ Ῥωμαϊκὴ ἐποχή.&lt;/p&gt;
&lt;p&gt;Σὲ μορφὴ ἁπλοῦ κειμένου &lt;a href=&#34;https://orgmode.org/&#34;&gt;org-mode&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ἡ Bebliotheca εἶναι μία ψηφιακὴ ἀναδημιουργία τῆς Βιβλιοθήκης τῆς Κωνσταντινουπόλεως.</p>
<p>Ὁ ἱστότοπος εἶναι διαθέσιμος <a href="https://bebliotheca.thanosapollo.org">ἐδῶ</a>.</p>
<ul>
<li><a href="https://git.thanosapollo.org/bebliotheca">Κεντρικό ἀποθετήριο</a></li>
<li><a href="https://codeberg.org/bebliotheca/bebliotheca">Καθρέφτης Codeberg</a></li>
</ul>
<h2 id="στόχοι-τοῦ-ἔργου">Στόχοι τοῦ ἔργου</h2>
<p>Ἕνα ἀποθετήριο μὲ ὅλα τὰ σημαντικὰ ἔργα ποὺ θὰ εὕρισκε κανεὶς στὴν
Κωνσταντινούπολη κατὰ τὴ Ῥωμαϊκὴ ἐποχή.</p>
<p>Σὲ μορφὴ ἁπλοῦ κειμένου <a href="https://orgmode.org/">org-mode</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Gnosis</title>
      <link>https://thanosapollo.org/el/projects/gnosis/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/projects/gnosis/</guid>
      <description>Spaced Repetition-like System for GNU Emacs.</description>
      <content:encoded><![CDATA[<p>Ἤμαξ σύστημα ὀργάνωσης γνώσεων, σημειώσεις καί αὐτό-ἐξέταση</p>
<ul>
<li>
<p>Git repositories:</p>
<ul>
<li><a href="https://git.thanosapollo.org/gnosis">Main Repository</a></li>
<li><a href="https://codeberg.org/ThanosApollo/emacs-gnosis">Codeberg Mirror</a></li>
</ul>
</li>
<li>
<p>Manual:</p>
<ul>
<li><a href="https://elpa.gnu.org/packages/doc/gnosis.html">GNU ELPA</a></li>
</ul>
</li>
<li>
<p><a href="/log/gnosis/">Changelog</a></p>
</li>
</ul>
<h2 id="about">Περί τοῦτο</h2>
<p>Τὸ Γνῶσις εἶναι ἕνα σύστημα προσωπικῆς διαχείρισης γνώσεως καὶ
ἐπανάληψης μὲ διαστήματα γιὰ τὸ Emacs. Ἐνσωματώνει δύο συμπληρωματικὰ
ὑποσυστήματα σὲ ἕνα πακέτο· ἕνα σύστημα σημειώσεων τύπου Zettelkasten,
ποὺ ὀνομάζεται κόμβοι, καὶ ἕνα σύστημα αὐτοεξέτασης μὲ κάρτες γύρω ἀπὸ
τὰ θέματα.</p>
<p>Καὶ τὰ δύο ὑποσυστήματα μοιράζονται μία κοινὴ βάση δεδομένων SQLite,
καὶ τὸ περιεχόμενό τους εἶναι σχεδιασμένο ἔτσι ὥστε νὰ συνδέεται
μεταξύ τους, γιὰ νὰ μπορεῖ κάθε ἐρώτηση τῶν καρτῶν νὰ παραπέμπει ἄμεσα
στὶς σημειώσεις ἀπὸ τὶς ὁποῖες προέρχεται.</p>
<p>Τὸ ὄνομα Γνῶσις ἀντικατοπτρίζει τὸν φιλοσοφικὸ προσανατολισμὸ τοῦ
πακέτου· ὁ στόχος δὲν εἶναι ἁπλῶς ἡ ἀπομνημόνευση, ἀλλὰ ἡ σκόπιμη
οἰκοδόμηση τῆς γνώσης μὲ τὸ πέρασμα τοῦ χρόνου.</p>
<h2 id="γιατί-τὸ-γνῶσις">Γιατί τὸ Γνῶσις</h2>
<p>Tὰ περισσότερα ἐργαλεῖα ἐπαναλήψεως μὲ διαστήματα ἀντιμετωπίζουν τὶς
κάρτες ὡς μεμονωμένες μονάδες. Δημιουργεῖς μία κάρτα, τὴν
ἐπαναλαμβάνεις, καὶ τὸ σύστημα ὁρίζει τὴν ἑπόμενη ἐπανάληψη. Οἱ κάρτες
δὲν ἔχουν καμία σχέση μεταξύ τους ἢ μὲ κάτι ἔξω ἀπὸ τὸν κύκλο τῆς
ἐπαναλήψεως.</p>
<p>Τὰ περισσότερα ἐργαλεῖα καταγραφῆς σημειώσεων κάνουν τὸ ἀντίθετο· σὲ
βοηθοῦν νὰ χτίσεις ἕνα δίκτυο ἀλληλοσυνδεδεμένων ἰδεῶν, ἀλλὰ δὲν
προσφέρουν κανέναν μηχανισμὸ γιὰ συστηματικὴ ἐξέταση καὶ ἐνίσχυση
αὐτῶν ποὺ ἔχεις γράψει.</p>
<p>Τὸ Γνῶσις γεφυρώνει αὐτὲς τὶς δύο προσεγγίσεις. Οἱ σημειώσεις σου καὶ
τὸ ὑλικό σου ἐπαναλήψεως ζοῦν στὸ ἴδιο σύστημα, συνδεδεμένα μεταξύ
τους. Ὅταν γράφεις ἕναν κόμβο γιὰ ἕνα θέμα, μπορεῖς νὰ δημιουργεῖς
θέματα τῶν ὁποίων οἱ ἐρωτήσεις παραπέμπουν σὲ αὐτὸν τὸν κόμβο. Ὅταν
ἐπαναλαμβάνεις, μπορεῖς νὰ ἐπαναλάβεις ὅλες τὶς ἐρωτήσεις ποὺ
συνδέονται μὲ μία δεδομένη σημείωση, ἢ νὰ ἀκολουθήσεις τὸ γράφο
συνδέσμων γιὰ νὰ ἐπαναλάβεις συναφῆ θέματα. Ὁ στόχος εἶναι ἕνα ἑνιαῖο
σύστημα ὅπου ἡ κατανόηση καὶ ἡ ἀνάκληση ἀλληλοενισχύονται.</p>
<h2 id="installation">Ἐγκατάσταση</h2>
<p>Διαθέσιμο ἀπό <a href="https://elpa.gnu.org/packages/gnosis.html">GNU ELPA</a>, &amp; <a href="https://packages.guix.gnu.org/packages/emacs-gnosis">GNU Guix</a></p>
<p>Παράδειγμα μὲ <code>use-package</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package gnosis
</span></span><span style="display:flex;"><span>  :init
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;my/gnosis-map</span>)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;my/gnosis-nodes-map</span>)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;my/journal-map</span>)
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf gnosis-journal-file (<span style="color:#a6e22e">expand-file-name</span> <span style="color:#e6db74">&#34;journal.org.gpg&#34;</span> gnosis-journal-dir)
</span></span><span style="display:flex;"><span>        gnosis-journal-as-gpg <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>        gnosis-nodes-show-tags <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>        gnosis-script-input-method-alist
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#39;</span>((greek <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;greek-polytonic&#34;</span>)
</span></span><span style="display:flex;"><span>          (cyrillic <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;cyrillic-translit&#34;</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (setf gnosis-custom-values
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#39;</span>((:tag <span style="color:#e6db74">&#34;demo&#34;</span> (:proto (<span style="color:#ae81ff">1</span> <span style="color:#ae81ff">3</span>) :anagnosis <span style="color:#ae81ff">3</span> :amnesia <span style="color:#ae81ff">0.45</span> :epignosis <span style="color:#ae81ff">0.5</span>
</span></span><span style="display:flex;"><span>                                 :agnoia <span style="color:#ae81ff">0.4</span> :lethe <span style="color:#ae81ff">2</span>))
</span></span><span style="display:flex;"><span>          (:tag <span style="color:#e6db74">&#34;English&#34;</span> (:amnesia <span style="color:#ae81ff">0.55</span> :proto (<span style="color:#ae81ff">0</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">3</span>) :lethe <span style="color:#ae81ff">2</span>
</span></span><span style="display:flex;"><span>                                      :epignosis))
</span></span><span style="display:flex;"><span>          (:tag <span style="color:#e6db74">&#34;vocabulary&#34;</span> (:amnesia <span style="color:#ae81ff">0.65</span> :proto (<span style="color:#ae81ff">0</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">3</span>))))
</span></span><span style="display:flex;"><span>        gnosis-nodes-timestring <span style="color:#66d9ef">t</span>)
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c c&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;my/gnosis-map</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-c n&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;my/gnosis-nodes-map</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-c j&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;my/journal-map</span>)
</span></span><span style="display:flex;"><span>         :map my/gnosis-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;d&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-dashboard</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;j j&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-journal</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;j f&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-journal-find</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;n i&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-insert</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;n t&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-insert-template</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;S&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-db-sync</span>)
</span></span><span style="display:flex;"><span>         :map my/gnosis-nodes-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-find</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;S&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-db-sync</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;t&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-insert-template</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-insert</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;d&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-nodes-delete-file</span>)
</span></span><span style="display:flex;"><span>         :map my/journal-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;j&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-journal</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;gnosis-journal-find</span>)
</span></span><span style="display:flex;"><span>         :map gnosis-nodes-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-c i&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;org-id-get-create</span>))
</span></span><span style="display:flex;"><span>  :custom
</span></span><span style="display:flex;"><span>  (gnosis-vc-auto-push <span style="color:#66d9ef">t</span>)
</span></span><span style="display:flex;"><span>  (gnosis-default-average-review-period <span style="color:#ae81ff">30</span>)
</span></span><span style="display:flex;"><span>  (gnosis-algorithm-day-start-hour <span style="color:#ae81ff">3</span>))
</span></span></code></pre></div><h2 id="screenshots">Εἰκόνες</h2>
<figure>
    <img loading="lazy" src="/images/gnosis-basic-example.png"
         alt="Figure 1: gnosis basic note"/> <figcaption>
            <p><span class="figure-number">Figure 1: </span>gnosis basic note</p>
        </figcaption>
</figure>

<figure>
    <img loading="lazy" src="/images/gnosis-basic-example-answer.png"
         alt="Figure 2: gnosis basic review answer"/> <figcaption>
            <p><span class="figure-number">Figure 2: </span>gnosis basic review answer</p>
        </figcaption>
</figure>

<figure>
    <img loading="lazy" src="/images/gnosis-cloze-basic.png"
         alt="Figure 3: gnosis cloze note type"/> <figcaption>
            <p><span class="figure-number">Figure 3: </span>gnosis cloze note type</p>
        </figcaption>
</figure>

<figure>
    <img loading="lazy" src="/images/gnosis-cloze-answered.png"
         alt="Figure 4: gnosis post review"/> <figcaption>
            <p><span class="figure-number">Figure 4: </span>gnosis post review</p>
        </figcaption>
</figure>]]></content:encoded>
    </item>
    <item>
      <title>Περὶ ἐμοῦ</title>
      <link>https://thanosapollo.org/el/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thanosapollo.org/el/about/</guid>
      <description>&lt;h2 id=&#34;περὶ-ἐμοῦ&#34;&gt;Περὶ ἐμοῦ&lt;/h2&gt;
&lt;p&gt;Εἶμαι μαθητὴς ἰατρικῆς, καὶ οἵ ἀπασχολήσεις μοῦ συμπεριλαμβάνουν:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Προγραμματισμό&lt;/li&gt;
&lt;li&gt;Θεολογία &amp;amp; Φιλοσοφία&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Κατάγομαι ἀπὸ τὸ Σούλι· ὅμως θὰ μὲ χαρακτήριζα ὡς πλανόδιο
Ἕλλην/Ῥωμηός, διότι ἔχω ζήσει τὸ μεγαλύτερο μέρος τῆς ζωῆς μοῦ σὲ
διαφορτικὲς πόλεις καὶ χώρες.  Αὐτὸ μοῦ ἔχει δώσει εὐχαρίστηση λόγῳ
τῆς ἀγάπης μοῦ γιὰ τὴν περιπέτεια καὶ τὰ ταξίδια &amp;amp; εὐελπιστῶ νὰ
συνεχίσω νὰ ζῶ μὲ παρόμοιο.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Νῦν κατοικῶ στὴν Σόφια, Βουλγαρία&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;πληροφορίες-ἐπικοινωνίας&#34;&gt;Πληροφορίες Ἐπικοινωνίας&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ηλ.Διεύθυνση: &lt;code&gt;public&lt;/code&gt; &lt;em&gt;at&lt;/em&gt; &lt;code&gt;thanosapollo&lt;/code&gt; &lt;em&gt;.&lt;/em&gt; &lt;code&gt;org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;PGP: &lt;a href=&#34;https://thanosapollo.org/key.asc&#34;&gt;62B7 58D0 F671 9938 BC09 CECA 339F 736C 3A72 0928&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Μπορεῖτε νὰ λάβετε τὸ pgp κλειδί μοῦ τρέχοντας τὴν παρακάτω ἐντολή&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="περὶ-ἐμοῦ">Περὶ ἐμοῦ</h2>
<p>Εἶμαι μαθητὴς ἰατρικῆς, καὶ οἵ ἀπασχολήσεις μοῦ συμπεριλαμβάνουν:</p>
<ul>
<li>Προγραμματισμό</li>
<li>Θεολογία &amp; Φιλοσοφία</li>
</ul>
<p>Κατάγομαι ἀπὸ τὸ Σούλι· ὅμως θὰ μὲ χαρακτήριζα ὡς πλανόδιο
Ἕλλην/Ῥωμηός, διότι ἔχω ζήσει τὸ μεγαλύτερο μέρος τῆς ζωῆς μοῦ σὲ
διαφορτικὲς πόλεις καὶ χώρες.  Αὐτὸ μοῦ ἔχει δώσει εὐχαρίστηση λόγῳ
τῆς ἀγάπης μοῦ γιὰ τὴν περιπέτεια καὶ τὰ ταξίδια &amp; εὐελπιστῶ νὰ
συνεχίσω νὰ ζῶ μὲ παρόμοιο.</p>
<p><em>Νῦν κατοικῶ στὴν Σόφια, Βουλγαρία</em></p>
<h2 id="πληροφορίες-ἐπικοινωνίας">Πληροφορίες Ἐπικοινωνίας</h2>
<ul>
<li>Ηλ.Διεύθυνση: <code>public</code> <em>at</em> <code>thanosapollo</code> <em>.</em> <code>org</code></li>
<li>PGP: <a href="https://thanosapollo.org/key.asc">62B7 58D0 F671 9938 BC09 CECA 339F 736C 3A72 0928</a></li>
</ul>
<p>Μπορεῖτε νὰ λάβετε τὸ pgp κλειδί μοῦ τρέχοντας τὴν παρακάτω ἐντολή</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ curl -sL https://thanosapollo.org/key.asc | gpg --import
</span></span></code></pre></div><blockquote>
<p>Ἠλεκτρονικὰ μηνύματα ἀπὸ ἐμένα θὰ εἶναι ὑπογεγραμμένα μὲ τὸ
κρυπτογραφικό pgp κλειδὶ μοῦ.</p>
</blockquote>
]]></content:encoded>
    </item>
  </channel>
</rss>
