Literate DevOps in Emacs and Org Mode
Table of Contents
Commentary
This is a set of notes on Literate Devops with Emacs.
Ενώ ήδη χρησιμοποιώ Org Mode και literate programming αρκετά εκτεταμένα είδα ότι είχα αυτή την παρουσίαση στο Watch Later μου εδώ και αρκετό καιρό οπότε είπα να την καθαρίσω.
Ξέρω:
Ακόμα θα ήθελα να πω, για την περίπτωση που κάποιος δει το source code, δεν
χρησιμοποιώ τα :exports
directives, μόνο και μόνο για να μην μου δημιουργούν
πρόβλημα κατά το org-publish
, ενώ θα βλέπετε μπροστά στα παραδείγματα που δεν
κάνουν render να υπάρχει μία #
συνοδευόμενη από κενό.
Εισαγωγή
Ο βασικός λόγος για τον οποίο κανείς θα έπρεπε να δοκιμάζει αυτή την προσέγγιση στον προγραμματισμό (literate programming), να γράφει δηλαδή κυρίως κείμενο, διακοπτόμενο ανα σημεία από τον κώδικα και όχι κώδικα διακοπτόμενο ανα σημεία για σχόλια, είναι για να βελτιώσει την αναγνωσιμότητα του κώδικα: κατ αυτόν τον τρόπο, αν και δουλεύεις περισσότερο γράφοντας τον κώδικα, όταν τον επισκεφτείς στο μέλλον έχεις ένα σύνολο σημειώσεων, οι οποίες αν είναι αναλυτικές, μειώνουν ή ακόμα μηδενίζουν τον χρόνο για την πλοήγηση στον κώδικα, εύρεση του κατάλληλου σημείου και πραγματοποίηση των απαιτούμενων τροποποιήσεων.
Βέβαια, γράφοντας την παραπάνω παράγραφο, συνειδητοποίησα πως η τελευταία πρόταση μάλλον δεν επαληθεύεται από την προσωπική μου εμπειρία. Ενώ η λογική λέει πως πληκτρολογώντας περισσότερες λέξεις και όντας πολύ πιο αναλυτικός θα έπρεπε να σε παίρνει περισσότερο χρόνο, υπάρχει άλλη μία διασταση: η δυνατότητα να γράφεις τις σκέψεις σου, όπως εκείνες σε έρχονται εκείνη την στιγμή, στο ίδιο αρχείο, αντί να μετακινείσαι μεταξύ αρχείων ή από το χαρτί στην οθόνη και πάλι πίσω.
Είναι επιστημονικό γεγονός πως το να γράφεις τις ιδέες σου, αντί να τις δουλεύεις σε νοητικό επίπεδο, επιτρέπει την καλύτερη εργασία επί αυτών (βασικός λόγος για αυτό είναι τα οπτικά ερεθίσματα). Αυτό αποδίδω στην καλύτερη επίδοση που έχω παρατηρήσει, όταν δουλεύω σε κάποιο πρόγραμμα κατ’ αυτόν τον τρόπο.
Πρέπει να παραδεχθώ, σε κάθε περίπτωση, πως δεν γράφω προγραμματισμό μόνο καθ’ αυτόν τον τρόπο. Στην πλειοψηφία μάλιστα των προγραμμάτων μου, προσπαθώντας να τα κρατήσω μικρά και απλά, ούτως ώστε να συνδυάζονται και μεταξύ τους μένω στο παλιό, κλασσικό τρόπο προγραμματισμού.
Writing code
Τα βασικά είναι:
Γράφεις κώδικα χρησιμοποιώντας source blocks αυτού του τύπου. Μπορείς να τα βάλεις εύκολα χρησιμοποιώντας το
C-c C-,
:#+begin_src sh #+end_src
- Εκτελείς τον κώδικα εντός ενός source block με το
C-c C-c
Code and Results
This shows both input
#+begin_src sh :exports both #+end_src
Παράδειγμα
brew search pyenv
Example Only
Αυτό δείχνει μόνο τον κώδικα, αγνοώντας το output.
#+begin_src sh :exports code #+end_src
pyenv virtualenv demo pyenv activate demo pip install --upgrade flake
Setting directory in which the code is to run
#+begin_src sh :dir ~ #+end_src
Παράδειγμα:
pwd
Modifying the directory var to run on a server
#:PROPERTIES: #:dir: /<server-dns>: #:END:
I am not sure how this works though.
Setting Variables
#+begin_src sh :var varname=varvalue #+end_src
echo $hellostring
Setting variables up so that they are used in all source blocks
#:PROPERTIES: #:dir: /Users/sickvm #:END:
Nah this does not seem to be working - I do not know why though.
pwd
Tangle
Αυτό είναι ουσιαστικά και ο τρόπος με τον οποίο μπορείς να δημιουργήσεις αρχεία
κλασσικού προγραμματισμού, μέσα από ένα αρχείο literate programming:
org-babel-tangle
#+begin_src sh :tangle <filename> #+end_src
Exporting
Το δοκίμασα και μόνος μου: Δεν χρειάζεται css η οτιδήποτε, το C-c C-e
δουλέυει
και απο μόνο του.