changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > org > meta / ulang.org

changeset 5: 6538a100c792
parent: 55e56793d888
child: f747ffac7f40
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 18 Aug 2024 22:16:12 -0400
permissions: -rw-r--r--
description: weekend warrior
1 #+title: Universal Language
2 #+author: Richard Westhaver
3 #+email: ellis@rwest.io
4 #+setupfile: ../clean.theme
5 #+infojs_opt: toc:nil home:https://compiler.company up:./ view:showall
6 #+print_glossary: :level 0 :consume yes :all yes :only-contents no
7 #+glossary_sources: glossary.org
8 * Introduction
9 :PROPERTIES:
10 :ID: e63d129f-9024-4cd8-9e2c-77f4bc614663
11 :END:
12 This document describes a *U-Language* as described by the late great
13 [[https://iep.utm.edu/haskell-brooks-curry/][Haskell Curry]]:
14 #+begin_quote
15 Every investigation, including the present one, has to be communicated
16 from one person to another by means of language. It is expedient to
17 begin our study by calling attention to this obvious fact, by giving a
18 name to the language being used, and by being explicit about a few of
19 its features. We shall call the language being used the
20 U-Language. [...] There would be no point in calling attention to it,
21 if it were not for the fact that language is more intimately related
22 to our job than of most others.
23 #+end_quote
24 
25 In this document, we will be calling attention to our own language -
26 examining it, and describing how it works.
27 
28 Our job is to solve problems. Hard problems preferred. So we ought to
29 pay close attention to the language we use because it brings the
30 reader and writer /closer/ to the problem at hand.
31 
32 For starters, we are primarily concerned with /written languages/ like
33 the one you're reading now. We will skip past the obvious details -
34 English is our primary form of communication for example. The line you
35 are reading currently is a sentence which is part of a paragraph.
36 
37 - This document is for authors and curious readers. It is a loose
38  specification, but also serves as introductory material into our
39  communication and design philosophy.
40 - All sources we write attempt to comply to this standard but it is
41  not strictly enforced. If there is a reason to not comply with a
42  rule, it is already broken.
43 
44 ** Org Mode
45 :PROPERTIES:
46 :ID: 98a02bb2-3f39-49c6-898a-68ccd8f3cbe1
47 :END:
48 [[https://www.gnu.org/software/emacs/][GNU Emacs]] is our text editor, so naturally [[https://orgmode.org/][Org Mode]] is our word
49 processor.
50 
51 If you are already familiar with Emacs and Org-Mode, I recommend
52 opening the source of this document in Emacs and following along.
53 
54 If not, I recommend browsing through the [[https://orgmode.org/worg/][Worg resources]], but we won't
55 be getting too deep into tribal hacker knowledge of Emacs.
56 
57 What's important to know is this: There is /Org Syntax/ and
58 /Org-mode/ - these are different things.
59 
60 Our =ulang= is almost /exclusively/ based on /Org Syntax/ and we are
61 not concerned about /Org-mode/ the application in this document.
62 
63 For the remainder of this document, we assume basic knowledge of Org
64 Mode.
65 
66 * ulang
67 :PROPERTIES:
68 :CUSTOM_ID: ulang
69 :ID: 236227a5-b30c-4548-8cad-360428d74d67
70 :END:
71 Our *U-Language* is colloquially termed *ulang*. Each section of this
72 document describes a feature or property of our ulang.
73 ** Glossary
74 :PROPERTIES:
75 :ID: cf237775-6e69-4554-999d-7c9cc4445f77
76 :END:
77 *** Terms
78 :PROPERTIES:
79 :ID: e808e546-65fb-4470-a21f-27eb9a7b50ee
80 :END:
81 *** Acronyms
82 :PROPERTIES:
83 :ID: c04c4524-a3d6-495d-98be-8ca291c5db08
84 :END:
85 ** Dictionary
86 :PROPERTIES:
87 :ID: 689826b6-0df4-4f0e-944a-b96fa4f8599e
88 :END:
89 compiler.company:2628
90 ** Emphasis
91 :PROPERTIES:
92 :ID: 88bf1177-b5b7-4945-8bdc-5229803e617e
93 :END:
94 We derive all text emphasis syntax for rich contents from [[https://orgmode.org/manual/Emphasis-and-Monospace.html][Org Mode]].
95 #+name: org-emphasis
96 #+begin_src org
97  - *bold*
98  - /italic/
99  - _underlined_
100  - =verbatim=
101  - ~code~
102  - +strike-through+
103 #+end_src
104 - *bold*
105 - /italic/
106 - _underlined_
107 - =verbatim=
108 - ~code~
109 - +strike-through+
110 
111 Text emphasis markers may be embedded in any syntax as long as it does
112 not cause any conflicts with the host language.
113 ** Headings
114 :PROPERTIES:
115 :ID: ed035298-f7fa-4726-ad58-2d542323bb61
116 :END:
117 In Org, headings can be summarize as any line starting with a star: =*
118 H1=. Headings can be nested or 'demoted' by prepending another star:
119 =** H2=.
120 
121 #+name: org-headings
122 #+begin_src org
123 ,* H1
124 ,** H2
125 ,*** H3
126 ,** H2
127 ,* H1
128 #+end_src
129 
130 This is a useful pattern which we apply outside of Org - most commonly
131 in our code comments.
132 
133 In our source code, we use the comment character instead of a star:
134 #+name: lisp-headings
135 #+begin_src lisp
136 ;;; foo
137 (print "H1") ;; just an inline comment
138 ;;;; bar
139 (print "H2")
140 ;;; baz
141 (print "H1")
142 #+end_src
143 
144 #+name: rust-headings
145 #+begin_src rust
146  /// foo
147  println!("H1");
148  //// bar
149  println!("H2");
150  /// baz
151  println!("H1");
152 #+end_src
153 
154 ** Outlines
155 :PROPERTIES:
156 :ID: 7b4d3229-d85f-4464-b9d0-6beccb1f7b2e
157 :END:
158 A collection of /headings/ is what we call an *Outline* - which is
159 also the name of the major-mode utilized for this feature and of
160 course - what Org itself is derived from.
161 ** Keywords
162 :PROPERTIES:
163 :ID: 2cadda9a-22a3-4b42-ad4e-d7a774f74cba
164 :END:
165 
166 In Org, TODO keywords are used to key track of the state of a [[https://orgmode.org/manual/TODO-Items.html][TODO
167 Item]].
168 
169 In ulang, they are used for this purpose and [[https://orgmode.org/manual/TODO-Extensions.html][extended]] to support a
170 variety of stateful item types beyond just tasks - for example =NOTE=
171 and =PROJECT=.
172 
173 The following keywords indicate the state of a heading element. They
174 often appear as the first word in a heading.
175 
176 - TBD :: A task to be done at a later date.
177 - TODO :: A task yet to be done.
178 - FIXME :: Item that needs fixing.
179 - WIP :: Work In Progress task.
180 - WAIT :: A suspended task.
181 - DEAD :: Item that will not be completed.
182 - DONE :: Completed task.
183 - BUG :: Designate a bug item.
184 - IDEA :: Designate an idea item.
185 - NOTE :: Designates a note item.
186 - DRAFT :: Designates a draft item.
187 - COMMENT :: A 'commented' item.
188 - PROJECT :: Designates a project item containing a sequence of tasks.
189 
190 #+begin_src org
191  ,* PROJECT project
192  ,** DONE foo
193  ,** TODO bar
194 #+end_src
195 
196 ** COMMENT Tasks
197 :PROPERTIES:
198 :ID: 0f4c0afd-a774-4b98-900b-1ab44f9fd2ef
199 :END:
200 Tasks as they are known in Org, usually consist of a heading that
201 starts with a [[id:2cadda9a-22a3-4b42-ad4e-d7a774f74cba][Keyword]]. Here we describe some additional sections and
202 metadata which are present in our collection of tasks.
203 
204 Our task management system is roughly a hybrid of two more
205 conventional methods: GTD and Agile. For convenience I will describe
206 these styles and how I use them separately, but the concepts may be
207 spliced differently in real tasks.
208 
209 - *GTD* \\
210 - *Agile* \\
211  It's a dirty word in some tech circles - the dreaded PIs, daily
212  standups, and still nobody knows what's going on, Oh my! Do not
213  worry. For the most part we just borrow the vocabulary.
214 
215  Our /Agile/ workflow consists of roadmaps, features (epics/ARTs),
216  issues (user stories), and of course, tasks.
217 ** Properties
218 :PROPERTIES:
219 :ID: 174a993b-a5dc-4324-b4f8-dda8101a55b7
220 :END:
221 *** IDs
222 :PROPERTIES:
223 :ID: 3944c851-e46c-4d75-b8f5-07b5c052177a
224 :END:
225 We reference two different types of identifiers in documentation:
226 - UUID :: =ID= property
227 - User-defined :: =CUSTOM_ID= property
228 
229 Most of the time these IDs don't add any information for the reader -
230 the UUIDs are used to index and graph documents, CUSTOM_IDs are for
231 convenience but are rarely necessary given the many ways of
232 identifying a headline.
233 ** Tags
234 :PROPERTIES:
235 :ID: a7ae1b2a-559e-46e9-8cab-33e39a218288
236 :END:
237 [[https://orgmode.org/manual/Tags.html][Tags]] are used liberally throughout our documents. They are simple
238 strings usually following a headline as a =:=-separated list.
239 
240 A tag can be any text without newlines, although it is recommended to
241 treat them as unique identifiers and usage of whitespace is
242 discouraged (but not disallowed).
243 *** Tag Types
244 :PROPERTIES:
245 :ID: b686dbc5-3505-49d7-b66a-0772bcf1a726
246 :END:
247 Tags may be prefixed with one of the following characters, indicating
248 a special tag type:
249 - =@= :: location-tag \\
250  A /location tag/ refers to some context-dependent named point in
251  space, such as a user's home address, a popular fast food
252  restaurant, or a specific room found in most houses.
253  - =@home=, =@taco-bell=, =@bedroom=
254 - =!= :: timestamp-tag \\
255  /Timestamp tags/ refer to some point in time, often named for
256  convenience. You may use literal [[https://orgmode.org/manual/Timestamps.html][Timestamps]] too. Timestamp tags
257  should not /directly reference/ scheduling information, doing so is
258  often a code-smell.
259  - =!now=, =!christmas=, =!someday=
260 - =#= :: anchor-tag \\
261  An /anchor tag/ implies a link to the object identified by some [[id:3944c851-e46c-4d75-b8f5-07b5c052177a][ID]].
262  - =#readme=, =#a7ae1b2a-559e-46e9-8cab-33e39a218288=, =#custom-id=
263 *** Tag Lists
264 :PROPERTIES:
265 :ID: 805862be-ba2b-4288-a2e3-791c0aa3802f
266 :END:
267 ** Links
268 :PROPERTIES:
269 :ID: 7ecaec5d-c656-44e1-8fad-185915655cee
270 :END:
271 *** Link Types
272 :PROPERTIES:
273 :ID: 6aedc026-36d0-4763-adc8-8ae1a79f1b3e
274 :END: