RFC 1431
DUA Metrics (OSI-DS 33 (v2))
RFC 1431: DUA Metrics ๐
Author: P. Barker, University College London ๐ Date: February 1993 ๐ Status: Provides information for the Internet community. It does not specify an Internet standard ๐ฆ Obsoletes / Updates: The title block doesn't list any RFCs that this one obsoletes or updates โจ
Status of this Memo โจ
Okay so this memo is just here to give information to the Internet community. It is not an Internet standard, so don't go treating it like one ๐ โโ๏ธ. Distribution is unlimited, so share it with everyone ๐.
Abstract ๐
So this RFC is being passed around so the Internet community can react to the proposals in it ๐ฌ. The issues might not be directly relevant to the Internet's core research problems, but a bunch of researchers and implementers could still find them super interesting ๐ค.
It defines a set of criteria for judging a DUA implementation, or more precisely a Directory user interface ๐. The big topics are terminal requirements, style of interface, target user, default object classes and attribute types, use of DAP, and error handling ๐ ๏ธ. The main focus is on "white pages" DUAs, because that's what the current information base looks like ๐. Still, a lot of it will apply to DUAs built for other kinds of Directory usage ๐ธ.
Please send comments to the author or to the discussion group osi-ds@CS.UCL.AC.UK ๐ฎ.
Table of Contents ๐๏ธ
1. Overview................................................ 2
2. General Information..................................... 3
3. Conformance to OSI Standards............................ 5
3.1 Directory protocols.............................. 5
3.2 Protocol stacks.................................. 5
3.3 Schema .......................................... 5
3.4 DIT structure .................................. 5
4. Conformance to Research Community Standards............. 6
5. The General Style of the DUA............................ 6
6. Schema.................................................. 7
6.1 Object Classes and Attribute Types............... 7
6.2 DIT structure.................................... 8
7. Entering queries........................................ 9
8. Strategy for locating entries........................... 9
9. Displaying results...................................... 10
10. Association Handling.................................... 11
11. Suitability for management.............................. 12
12. Query Resolution........................................ 13
13. International Languages................................. 16
14. User Friendliness....................................... 16
15. Operational Use......................................... 17
16. Security Considerations................................. 19
17. Author's Address........................................ 19
1. Overview ๐
Okay bestie, so the whole point of this doc is to define some metrics that we can use to measure DUA products ๐โจ. But first, the word "DUA" is kinda misleading ๐. It assumes the DUA is implemented correctly and can actually "talk" valid X.500 protocol, and that's a total sine qua non ๐ . So instead of that, this document digs into the characteristics of Directory user interfaces ๐. People keep using the term DUA anyway because that's what most people call Directory user interfaces, so we're rolling with it ๐คทโโ๏ธ.
The metrics come in the form of a questionnaire that pulls out a detailed description of a user interface ๐. DUAs come in totally different flavours ๐ฆ. Lots of them use windowing environments and give you that "high-tech" view of the Directory ๐ช, while others are built to run in a terminal ๐ป. Some interfaces give you tons of control over the Directory, so they're great for Directory managers ๐, and others are more for novice users ๐ฑ. Some can search for any attribute in any part of the DIT ๐ณ, but others skip that generality and just nail the most typical queries ๐ฏ.
Honestly, you can't tell from the answers to this questionnaire whether one DUA is better than another ๐ญ. A flexible management tool will be better for management than a DUA built for simple look-ups, and the reverse is also true ๐โโ๏ธ. There are also areas where several radically different approaches exist, and it isn't clear yet which one is better ๐ค. A good example is how much a DUA abstracts the underlying DIT hierarchy: does it lean into the world as a tree, or does it try to hide that from the user ๐ฒ๐ซฃ?
Other stuff, though, can actually be measured. Things like whether the DUA can find the entries you need, and how fast it does it โก. Throughout the document, some questions come with a square-bracketed points score and an explanation of how to allocate the points ๐งฎ. For example, a question might end with "[2 if yes]", which means you get 2 points for a yes answer ๐. You collate all those points in Table 1 at the end of the document, and that table is the measure of the DUA ๐. The metrics are arranged section by section, so if you're hunting for, say, a DUA with strong management features that runs on loads of platforms, you can jump straight to the parts that matter for you ๐.
2. General Information ๐
This section gathers general information about the implementation being discussed ๐.
1. Name of the implementation ......................................
2. Version number of the DUA described in this document ............
3. Are further versions planned? [3 if yes] .......................
4. Name and address of supplier or person to contact ...............
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
5. Describe the hardware and software platforms on which the DUA will
run. Some DUAs are split into a user interface part, and a DUA
server part, communicating by means of a protocol. If the DUA is
of the type where the DUA protocol machinery and user agent are
implemented in a single process, complete only the user interface
section, and indicate "n/a" for the DUA server and
communications protocol questions.
(a) User interface part [1 per platform, up to a maximum of 4]
i. Hardware (If appropriate, can summarise as, for example,
ii. O/S (state version if critical)
A. UNIX (be sure to indicate which flavour - e.g., SYSV,
BSD, SUNOS, etc) ....................................
........................................................
B. VMS) ................................................
C. MS-DOS ..............................................
D. MS-Windows ..........................................
E. Macintosh ...........................................
F. Other) ..............................................
(b) DUA server part (or n/a) ....................................
i. Hardware (If appropriate, can summarise as, for example,
"generic UNIX platform", or "386 PC") ...............
ii. O/S (state version if critical)
A. UNIX (be sure to indicate which flavour - e.g., SYSV,
BSD, SUNOS, etc) ....................................
B. VMS) ................................................
C. MS-DOS ..............................................
D. Macintosh ...........................................
E. Other) ..............................................
iii. How does the user interface communicate with the DUA
server?
A. Directory Assistance Service, as described in RFC1202
........................................................
B. DIXIE protocol, as described in RFC1249 .............
C. LDAP protocol, as described in Internet Draft OSI-DS
26
D. Other ...............................................
(c) Name any other software required to run the DUA which is not
supplied with the operating system or with the DUA software
itself. Examples might include X.500 DAP libraries, or
communications software .....................................
6. Is the software free? If the DUA needs other packages, are these
also freely available? [3 if completely free] ..................
....................................................................
3. Conformance to OSI Standards ๐งฉ
3.1. Directory protocols ๐
This bit checks how much conformance testing the DUA has had ๐งช.
7. Please list all conformance testing work applied to the DUA
implementation (here the term DUA is used correctly in the sense
of the DUA protocol machinery) [2 if any conformance work has been
done] ...........................................................
....................................................................
3.2. Protocol stacks ๐ฅ
For the next two questions, each supported stack gets you 2 points, up to 4 stacks ๐.
8. Which of the following transport and network layer protocols does
the DUA support:
(a) TP.x over CONS (state transport class) ......................
(b) TP.4 over CLNS ..............................................
9. Does the DUA support other transport and "network" layer
protocols?
(a) TP.x over RFC1006 over TCP/IP (state transport class) .......
(b) TP.x over X.25(1980) (state transport class) ................
(c) State any other options supported. .........................
10. Does the DUA also run over any lightweight stack? If so, describe
it with reference to the OSI seven layer model [3] ..............
....................................................................
3.3. Schema ๐
11. Does the DUA support the full schema in X.520 and X.521 (y/n)?
(Omissions should be described in response to a later question) [2
for full schema support] ........................................
3.4. DIT structure ๐ณ
12. Does the DUA only follow object class hierarchies which conform to
the suggested DIT structure in X.521?............................
โญ To be continued in part 2, bestie! ๐
4. Conformance to Research Community Standards ๐
okay so the COSINE and Internet Directory Pilots agreed on a set of extensions to the standard, which makes the whole pilot feel way more cohesive โจ. this section is all about whether your DUA conforms to those extensions ๐
- Does the DUA fully support
RFC1274, "The COSINE and Internet X.500 Schema" (y/n)? (Omissions should be described in response to a later question.) [2 for full support] - Can the DUA handle referrals whose network addresses conform to
RFC1277, "Encoding Network Addresses to support operation over non-OSI lower layers"? [2 if yes] - Does the DUA handle the Distinguished Name string syntax described in OSI-DS 23, "A String Representation of Distinguished Names"? [2 if yes]
- Does the DUA use the user-friendly naming query resolution described in OSI-DS 24, "Using the OSI Directory to achieve User Friendly Naming"? [2 if yes]
- Does the DUA make use of the Quality of Service schema extensions described in OSI-DS 15, "Handling QOS (Quality of service) in the Directory"? [2 if yes] ๐ฅ
5. The General Style of the DUA ๐
- Is this a "white pages" interface, designed to give access to information about people within organisations? If not, state the types of information at which this interface is targetted.
- If this is a white pages DUA, who is it principally designed to serve? Indicate more than one of the following categories if appropriate (but please do not fill in so many categories as to hide due emphasis). [mark allocated should be the highest for any single classification] ๐
- (a) The ordinary user, who has no understanding of X.500, the hierarchical DIT, the state of advancement of the pilot, etc. [10]
- (b) A secretary who wants to do telephone or room number look-ups within their department or organisation [8]
- (c) A computer-literate user, who habitually uses a wide-range of network services [6]
- (d) An organisation's (or department's) data manager [4]
- (e) A Directory system manager [2]
- Which best describes the use the DUA makes of the user's terminal?
- (a) Scrolling, line-mode interface
- (b) Full screen,
vt100style interface - (c) X-Windows
- (d) MS-Windows
- (e) Macintosh
- (f) Other
- Does the DUA tend to emphasise or de-emphasise the DIT hierarchy?
- Describe the interface in your own terms (up to about 50 words). ๐ฆ
6. Schema ๐ง
6.1. Object Classes and Attribute Types
some DUAs are tightly focussed on answering particular queries, like white pages look-ups for information about people. others offer more general capabilities. please answer this question accordingly ๐ซถ
- If the DUA has a tight focus, state:
- (a) The target object classes
- (b) The default attribute types
- (c) Other attribute types which may be configured. This might be answered as, for example, "all barring photo and audio", or as a list of supported attribute types
- If the DUA has more general capabilities, state:
6.2. DIT structure
- DUAs often have a default object class hierarchy (e.g., it might assume countries at the root of the DIT, organisations immediately under countries, and people somewhere under organisations). Describe the type of hierarchy which the DUA most closely accords to:
- (a) Rigid
- (b) Rigid, but several hierarchies supported
- (c) Default hierarchy offered, but many hierarchies are supported
- (d) Default hierarchy offered, but DUA fully flexible
- (e) No default hierarchy, DUA fully flexible
- If a default hierarchy is offered, please describe it.
- State any hierarchies, which are valid according to X.521's suggested DIT structure, but which cannot be queried (exclude hierarchies which cannot be queried because the DUA does not query for entries of particular object classes). ๐ธ
7. Entering queries ๐
the term "querying" is used here as a generic term for finding an entry, whether it be as a simple look-up, or the prelude to a modification operation. no cap, it covers everything ๐
- Which best describes the query entry style?
- (a) Form filling (user responds to a set of prompts)
- i. Query specified first, then resolved
- ii. Query entry and resolution mixed
- iii. Both modes possible
- (b) Queries entered as "user-friendly names"
- (c) Querying is by "navigating" around the DIT, the user searching and selecting
- (d) Other (please describe)
- (a) Form filling (user responds to a set of prompts)
8. Strategy for locating entries ๐
a number of strategies are employed by DUAs to find the entry the user is looking for. these have implications for user-friendliness and performance. for example, an interface which makes extensive use of search operations may be excellent at finding entries, but at the cost of being intolerably slow. ๐
- Which of the following strategies most closely accords with the behaviour of the DUA?
- (a) The DUA always uses search operations to find entries
- (b) The DUA offers users a list of entries, and invites the user to select from the list
- (c) The DUA only tries read operations (i.e., the DN must be exactly right)
- (d) The DUA tries read operations first, then searches for something similar if no entry can be found
- (e) The DUA tries read operations first, then offers a list of possible entries if no entry can be found
- (f) User explicitly controls the X.500 operation which is invoked
- (g) Other. Please describe.
- Does the DUA allow a user to "list" (either by the list operation or by a single level search operation) all the child entries of a node (notwithstanding administrative limits)?
- Does the DUA follow aliases? If so, does it do so:
- (a) Always?
- (b) Optionally?
- Will the DUA optionally follow links to other entries by using attributes such as seeAlso and roleOccupant with a DN syntax?
9. Displaying results โจ
- Are the strings used to describe attribute types freely and independently configurable? [2]
- Name any attribute types where the attribute values may be presented in local formats? (For example, it may be possible to configure the display of telephone numbers so that local numbers are shown as extensions, rather than with the full international dialling code.) [1 per attribute, up to a maximum of 4]
- Does the DUA allow for the display of more than one result at a time (showing attribute values other than the name of the entry)? If so, how many entries may be displayed in response to a single query? [2 if feature provided]
- Does the DUA support the notion of a quick synopsis, where a small core of attributes is retrieved initially, and a larger set is returned if required? [2 if yes]
- What does the DUA do with attribute types it doesn't support in its sub-schema, but which have a standard syntax?
- What does the DUA do with attributes which are not in its sub-schema, and which have a non-standard syntax?
- (a) Ignore them?
- (b) Tell user, but don't display?
- (c) Display hex BER encoded value?
- (d) Display in some other format?
10. Association Handling โจ
okay so this section is all about how a DUA keeps its connection to the Directory, aka its association ๐
39. How/where is the access point to the Directory configured? If
more than one method, indicate which ways are possible. [1 per
method, up to maximum of 3]
(a) In a system-wide tailor file ................................
(b) In a per user tailor file ...................................
(c) As a run-time command line argument .........................
(d) Other. Please describe .....................................
................................................................
40. Does the DUA allow for automatic connection to a back-up DSA if
the access point DSA is unavailable? [2 if yes] ................
41. Can the DUA keep connections open to more than one DSA at a time?
[1 if yes] ......................................................
....................................................................
42. Does the DUA keep an idle connection open to the DSA(s). If not,
describe the timeout strategy. [1 if yes] ......................
....................................................................
43. Does the DUA handle referrals automatically? [2 if yes] ........
If not: does the DUA handle referrals at all? [1 if yes] ......
44. Does the DUA make use of asynchronous operations?
(a) Does the DUA bind asynchronously? [2 if yes]................
(b) Are the operations handled asynchronously? .................
If so, is this true for:
i. All operations? [2 if yes] .............................
ii. Some operations? [1 if yes] ............................
45. Does the DUA use size and time limits by default? [2 if no
limits, or limits may be over-ridden] If so: ...................
(a) What size limit is used? ...................................
(b) What time limit is used? ...................................
(c) Are these limits overridable? ..............................
11. Suitability for management
this one's the vibe check on which operations the DUA can actually pull off, and whether it's ready for management tasks ๐ผ
46. Is it possible to invoke all the operations in the Directory
Abstract Service? If not, say which operations it does use [2 if
all] ............................................................
....................................................................
47. Is the user given full control over the service controls? If not,
say which may be controlled, or none at all [2 if full, 1 if some
control] ........................................................
....................................................................
48. Is it possible to manage system attributes with the DUA? If so,
indicate which DSA implementations for which this DUA provides
management capabilities. .......................................
(a) Knowledge [1]................................................
(b) Replication information [1] .................................
(c) Other .......................................................
49. Access control notwithstanding, does the DUA allow the following?
(a) Attribute management [2 for all below, 1 for some]
i. Addition ................................................
ii. Modification ............................................
iii. Deletion ................................................
(b) Entry management [2 for all below, 1 for some]
i. Addition ................................................
ii. Modification ............................................
iii. Deletion ................................................
iv. Renaming ................................................
12. Query Resolution
this is where the real fun starts ๐ the whole section is about how a DUA resolves a query. two DUAs can both find the same info, but one might do it way faster, or be more "economic" with its DAP operations to get the same results. some DUAs even find the right results when the user's input only loosely matches Directory names ๐
three aspects of query resolution get measured:
- Does the DUA actually find the required entry?
- If the required entry is found, how many entries were returned as well?
- How "expensive" was the query in terms of underlying X.500 operations, whether the query was resolved successfully or not?
the following queries could all conceivably find the author's Directory entry. they're split into 2 groups: the first group SHOULD pose no difficulties for a reasonable DUA, and the second group are more problematic ๐ฅบ for each one, award [2] marks if the query found the author's entry successfully. the expensiveness of each query gets measured with the formula below, which introduces the notion of SearchStones! ๐ a SearchStone rating is the total operations used to resolve a query, added together and weighted like this:
- Bind [5]
- Read operation [1]
- List operation [2]
- Search single level for countries, organisations or localities [3]
- Search single level for organisational units, people or roles [3]
- Search subtree [5]
Note: The single level searches have been separated into two categories in acknowledgement that certain types of search are much more likely to span multiple DSAs than others. The weightings are the same for the moment because of the pervasiveness of the Quipu implementation, which replicates all sibling entries in a single DSA, whatever the level in the DIT.
okay so SearchStones deserve a bit more explaining, plus some caveats ๐ง
the idea is to give a broad brush view of the work a DUA does to retrieve an entry. there will be some correspondence between a low SearchStone rating and a DUA responding quickly, and vice-versa, although this correlation is not consistent, for reasons given below. it would be desirable to have some timing information for resolving queries, but those results would only be meaningful if the tests were for target entries widely distributed throughout the DIT. maybe that's something for the future? in the meantime, here are some factors that make it hard to interpret SearchStones in a simple way:
- The DIT is not uniform, with the depth varying considerably
- While the DIT is currently mastered mostly by DSAs of a single implementation, this will be decreasingly the case, and other DSAs may have very different performance profiles.
- Different directory domains are already adopting different strategies on information replication with profound performance implications.
- No weighting is given to different search filters, or to boolean combinations of filters.
that said, there are counter arguments too ๐
- Some DUAs are better than others at finding the required results
- Some DUAs will get the required results more quickly than most
- DUA designers have to build DUAs in the knowledge that the DIT is heterogeneous with respect to DSA implementation and DIT structure
one possible way forward would be to refine the test queries so they better represent the diversity of the DIT. but as a first step, the tests are restricted to queries that could reasonably be constructed as searches for the author's entry. the author's entry lives in part of the DIT that's representative of much of the current DIT. to normalise the tests as much as possible, testing should be done by connecting to the target DSA directly. the DSA's name is cn=Vicuna, c=GB, and its addresses can be found in the presentation address attribute for that entry. note that the SearchStone rating should be shown even for queries which cannot be resolved ๐ซถ
first, the straightforward queries:
50. NAME=Paul Barker, OU=Computer Science, O=University College
London, C=GB
51. NAME=Paul Barker, OU=Computer Science, O=UCL, C=GB
52. NAME=Barker, OU=Computer, O=UCL, C=GB
53. NAME=Barker, O=UCL, C=GB
54. NAME=p barker, O=university college, C=GB
55. NAME=paul b, OU=cs, O=university college, C=GB
now the more difficult queries ๐
56. NAME=p b, O=university college, C=uk
57. NAME=Paul Barker, OU=Computer Networking, O=london college, C=GB
58. NAME=Paul Baker (sic), OU=cs, O=ucl, C=Britain
59. NAME=p baker (sic), O=UCL, C=England
60. NAME=Paul Barker, OU=Directories, O=london, C=United Kingdom
other general questions ๐ญ
61. Will the DUA attempt a query of the form "Find all the Smiths in
Britain"? .....................................................
If so, does it do it by:
(a) A single query under the country node? .....................
(b) Multiple queries under all organisation nodes? .............
62. Does the DUA allow "hands-off" querying whereby the details of a
query may be entered in one go, and the DUA attempts to resolve
the query without any further user intervention? ...............
13. International Languages
last stop on this tour ๐ธ all about language support
63. Does the DUA offer multi-lingual support. If so: ..............
(a) State which languages are already supported [1 per language up
to a maximum of 3] ..........................................
................................................................
64. Can the DUA handle national language characters not found in
PrintableString? [2 if yes] ....................................
14. User Friendliness ๐
okay bestie, this section is all about how friendly the DUA is to the human sitting in front of it ๐ฅนโจ we're scoring it, so every question has a point value attached ๐
- Is run-time help available? [2 if yes] ......................... ๐ If so:
(a) Is context-sensitive help available? [1 if yes] ............ ๐ง
(b) How many screens/windows? .................................. ๐ช
(c) How many bytes of help information? [2 if more than 5 Kbytes of text, 1 if more than 3 Kbytes] ........................... ๐
- Are the error messages terse renderings of the X.500 service errors, or user-friendly!? ๐ญ As an example, provide the error message displayed to the user if an administrative limit is exceeded. [2 if user-orientated, 1 if administrator-orientated, 0 if no message at all] ........................................... ๐ .................................................................... ....................................................................
- If modify operations are provided, is there support for editing the attributes correctly with the appropriate syntax (e.g., does the DUA guide the user that addresses are of up to 6 lines of up to 30 characters; what support is given for entering distinguished names) [2 for postal address support, 2 for DN support, 1 for any other support] .................................................. ๐
- Is the user allowed to see what sort of entries are in the Directory if they are unable to find the entry they are looking for? [1 if yes] ................................................ ๐
- Does the DUA allow automatic following of attributes with DN values, such as seeAlso and roleOccupant? [1 if yes]............ ๐
15. Operational Use ๐
okay so the DUA exists, literally ๐ but is there any evidence that it's actually a usable tool? that's the real question ngl ๐ซถ
- Is this DUA widely in use? [5 if used by more than 20 orgs, 3 if by more than 10 orgs, 2 if by more than 5 orgs, 1 if used operationally to provide a service anywhere] .................... ๐ธ
(a) Is this DUA in use anywhere in the COSINE/Internet Pilot? .. ................................................................
(b) Is this DUA in use in any other major pilot? ...............
(c) Is this DUA in use anywhere else operationally? ............
- Has this DUA been assessed by groups outside of the software developers or providers? ....................................... ๐ต๏ธโโ๏ธ
- If so, are the assessments public? Please provide copies of these assessments if they are available ............................... ๐
Here's the scoring table, and it's giving spreadsheet energy ๐๐
__________________________________________________________
|_____Section_____|_____Points____|______________________|
|No._|Description_|Maximum_|Scored|______________________|
| | | | | |
|__2_|Gen_Info____|__10____|...___|__________n/a_________|
| | | | | |
|__3_|Conf_to_OSI_|__15____|...___|__________n/a_________|
| |Conf to Res | | | |
|__4_|Comm_stds___|__10____|...___|__________n/a_________|
| | | | | |
|__5_|Gen_Style___|__10____|_...__|__________n/a_________|
| | | | | |
|__9_|Disp_Res____|__10____|_...__|__________n/a_________|
| | | | | |
|_10_|Assoc_hand._|__15____|_...__|__________n/a_________|
| | | | | |
|_11_|Man_cap_____|__10____|_...__|__________n/a_________|
| 12 |Query res | | |Search |No. of other |
| | | | |Stones |entries found |
|____|Q._50_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._51_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._52_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._53_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._54_______|__2_____|_...__|_...___|:_...._....___|
__________________________________________________________
|_____Section_____|_____Points____|______________________|
|No._|Description_|Maximum_|Scored|______________________|
| | | | | | |
|____|Q._55_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._56_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._57_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._58_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._59_______|__2_____|_...__|_...___|:_...._....___|
| | | | | | |
|____|Q._60_______|__2_____|_...__|_...___|:_...._....___|
| | | | | |
|_13_|Int_Lang____|__5_____|_...__|__________n/a_________|
| 14 |User-fr | | | |
| | | | | |
| |Query DUA | 10 | .... | n/a |
| | | | | |
|____|Modify_DUA__|__15____|_...__|__________n/a_________|
| | | | | |
|_15_|Op_use______|__5_____|_...__|__________n/a_________|
Table 1: DUA Metrics ๐
16. Security Considerations ๐
okay this one is short and sweet ๐ฅบ security issues are not discussed in this memo. ๐
17. Author's Address ๐
Paul Barker
Department of Computer Science
University College London
Gower Street
London
WC1E 6BT
United Kingdom
Phone: +44 71 380 7366
Fax: +44 71 387 1397
Email: P.Barker@cs.ucl.ac.uk
that's the whole thing bestie!! ๐๐โจ go touch grass, you earned it ๐ซถ
๐ฆ where this page comes from
- ietf: rfc1431 1993-02
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms