|
|
1.1 root 1: % run this through SLiTeX with the appropriate wrapper
2:
3: \begin{bwslide}
4: \part {THE VIRTUAL FILESTORE}
5:
6: \begin{nrtc}\bf
7: \item PHILOSOPHY
8:
9: \item FILE ATTRIBUTES
10:
11: \item ACTIVITY ATTRIBUTES
12:
13: \item DOCUMENT TYPES
14: \end{nrtc}
15: \end{bwslide}
16:
17:
18: \begin{note}\em
19: this section corresponds roughly to iso/dis 8571/2,
20: but the concepts are explained in almost an entirely different way
21:
22: this description is done via successive refinement:
23: concepts are introduced and continuously expanded
24:
25: hopefully,
26: this is less intimidating than the way the standard presents things$\ldots$
27: \end{note}
28:
29:
30: \begin{bwslide}
31: \part* {PHILOSOPHY}\bf
32:
33: \begin{nrtc}
34: \item AS WITH ALL ``OPEN SYSTEM'' SERVICES
35: \begin{nrtc}
36: \item DESCRIBES A CONCEPTUAL MODEL OF THE VIRTUAL SERVICE
37:
38: \item SPECIFIES THE SERVICE AND THE PROTOCOL\\
39: INDEPENDENT OF ACTUAL LOCAL SYSTEMS
40: \begin{nrtc}
41: \item PROGRAMATIC INTERFACES ARE NOT SPECIFIED
42: \end{nrtc}
43: \end{nrtc}
44:
45: \item THE FUNDAMENTAL ABSTRACTION: THE VIRTUAL FILESTORE
46:
47: \item A CONCEPTUAL MODEL OF A FILE SERVICE ON A LOCAL SYSTEM (LOCALSTORE)
48:
49: \item DIFFICULT TASK~---~EXISTING FILE SERVICES ARE QUITE DIFFERENT
50:
51: \item POTENTIALLY VERY REWARDING!
52: \end{nrtc}
53: \end{bwslide}
54:
55:
56: \begin{bwslide}
57: \ctitle {RELATIONSHIP OF THE VIRTUAL FILESTORE\\ AND LOCALSTORE}
58:
59: \vskip.5in
60: \diagram[p]{figure1}
61: \end{bwslide}
62:
63:
64: \begin{note}\em
65: why a virtual filestore?
66:
67: it is unacceptable to choose any existing real filestore as the basis
68: for the file service (all lack one thing or another)
69:
70: hence, it is desirable to devise a model which can reasonably express any
71: existing real filestore.
72: \end{note}
73:
74:
75: \begin{bwslide}
76: \ctitle {ELEMENTS}\bf
77:
78: \begin{nrtc}
79: \item A (VIRTUAL) FILESTORE IS A COLLECTION OF FILES
80:
81: \item A FILENAME IDENTIFIES EXACTLY ONE FILE IN THE FILESTORE
82:
83: \item THERE IS NO EXPLICIT RELATIONSHIP BETWEEN DIFFERENT FILES IN THE
84: FILESTORE
85: \begin{nrtc}
86: \item i.e., NO DIRECTORY STRUCTURE (A {\bf BIG} MISTAKE)
87: \end{nrtc}
88:
89: \item FILES HAVE
90: \begin{nrtc}
91: \item ATTRIBUTES (e.g., OWNERSHIP INFORMATION)
92:
93: \item CONTENTS (e.g., RANDOM-ACCESS RECORDS)
94: \end{nrtc}
95: \end{nrtc}
96: \end{bwslide}
97:
98:
99: \begin{bwslide}
100: \ctitle {ELEMENTS -- ATTRIBUTES}
101:
102: \begin{nrtc}
103: \item TWO KINDS OF ATTRIBUTES ARE DEFINED
104:
105: \item FILE ATTRIBUTES, WHICH EXIST ON A PER-FILE BASIS
106: \begin{nrtc}
107: \item SIMULTANEOUS CLIENTS OF THE FILESTORE SEE THE SAME INFORMATION
108:
109: \item e.g., THE NAME OF THE FILE
110: \end{nrtc}
111:
112: \item ACTIVITY ATTRIBUTES, WHICH EXIST ON A PER-CLIENT BASIS
113: \begin{nrtc}
114: \item INTERACTIONS BY A CLIENT ARE NOT DIRECTLY VISIBLE TO OTHER
115: CLIENTS
116:
117: \item e.g., HOW THE FILE IS BEING TRAVERSED
118: \end{nrtc}
119:
120: \item THE CLIENT INTERACTS ON AT MOST ONE FILE
121: \begin{nrtc}
122: \item THE ``SELECTED'' FILE
123: \end{nrtc}
124: \end{nrtc}
125: \end{bwslide}
126:
127:
128: \begin{bwslide}
129: \ctitle {ELEMENTS -- CONTENTS}
130:
131: \begin{nrtc}
132: \item TYPICALLY, FILES ARE DEFINED IN TERMS OF A ``DOCUMENT TYPE''
133:
134: \item STATIC CHARACTERISTICS
135: \begin{nrtc}
136: \item THE COMPOSITION OF THE FILE IN TERMS OF FILE ACCESS DATA
137: UNITS (FADUs)\\
138: e.g., A SEQUENTIAL COLLECTION OF RECORDS
139:
140: \item THE STRUCTURE OF EACH DATA UNIT (DUs)\\
141: e.g., EACH RECORD CONTAINS A PERSONNEL RECORD
142: \end{nrtc}
143:
144: \item DYNAMIC CHARACTERISTICS
145: \begin{nrtc}
146: \item HOW DATA UNITS ARE ENCODED ON THE NETWORK
147:
148: \item HOW DATA UNITS ARE REFERENCED (e.g., CURRENT POSITION)
149: \end{nrtc}
150: \end{nrtc}
151: \end{bwslide}
152:
153:
154: \begin{bwslide}
155: \part* {FILE ATTRIBUTES}\bf
156:
157: \begin{nrtc}
158: \item FOUR GROUPS OF FILE ATTRIBUTES
159:
160: \item KERNEL GROUP (REQUIRED)
161: \begin{nrtc}
162: \item NECESSARY FOR FILE SELECTION AND BASIC FILE TRANSFER
163: \end{nrtc}
164:
165: \item STORAGE GROUP (OPTIONAL)
166: \begin{nrtc}
167: \item DESCRIBES THE STORAGE CHARACTERISTICS FOR THE FILE
168: \end{nrtc}
169:
170: \item SECURITY GROUP (OPTIONAL)
171: \begin{nrtc}
172: \item DESCRIBES THE ACCESS CONTROL MECHANISMS FOR THE FILE
173: \end{nrtc}
174:
175: \item PRIVATE GROUP (OPTIONAL)
176: \begin{nrtc}
177: \item A MECHANISM TO CAPTURE NON-STANDARD (PROPRIETARY)
178: MECHANISMS THAT CAN NOT BE OTHERWISE REPRESENTED
179: \end{nrtc}
180: \end{nrtc}
181: \end{bwslide}
182:
183:
184: \begin{note}\em
185: definitions of types is rather loose at this point in the presentation;
186: e.g., ``string'' is usually an asn.1 graphicstring
187:
188: the emphasis at the moment is on the concept,
189: not on the actual abstract data type
190: \end{note}
191:
192:
193: \begin{bwslide}
194: \ctitle {KERNEL GROUP}
195:
196: \begin{nrtc}
197: \item FILENAME: A SEQUENCE OF STRINGS
198: \begin{nrtc}
199: \item MAPPING TO THE LOCALSTORE NAMING CONVENTIONS IS A
200: ``LOCAL IMPLEMENTATION CHOICE''
201: \end{nrtc}
202:
203: \item CONTENTS TYPE: STRUCTURING INFORMATION
204: \begin{nrtc}
205: \item THE FILE STRUCTURE (A {\bf LOT} MORE LATER)
206: \end{nrtc}
207:
208: \end{nrtc}
209: \end{bwslide}
210:
211:
212: \begin{bwslide}
213: \ctitle {STORAGE GROUP}
214:
215: \begin{nrtc}
216: \item STORAGE ACCOUNT: A STRING
217: \begin{nrtc}
218: \item ENTITY ACCRUING FILE STORAGE CHARGES
219: \end{nrtc}
220:
221: \item IDENTITY OF USER AND THE DATE/TIME OF
222: \begin{nrtc}
223: \item FILE CREATION
224:
225: \item LAST READ AND LAST MODIFICATION OF FILE CONTENTS
226:
227: \item LAST MODIFICATION OF FILE ATTRIBUTES
228: \end{nrtc}
229:
230: \item FILE AVAILABILITY
231: \begin{nrtc}
232: \item IMMEDIATE (FILE IS ``ON-LINE'')
233:
234: \item DEFFERRED (ACCESS TO FILE MAY ENCOUNTER DELAY,
235: e.g., AWAITING ARCHIVE RETRIEVAL)
236: \end{nrtc}
237: \end{nrtc}
238: \end{bwslide}
239:
240:
241: \begin{bwslide}
242: \ctitle {STORAGE GROUP (cont.)}
243:
244: \begin{nrtc}
245: \item PERMITTED ACTIONS
246: \begin{nrtc}
247: \item DESCRIBES THE TYPES OF DATA ACCESS THAT CAN BE PERFORMED ON
248: THE FILE
249:
250: \item HOW DATA UNITS MAY BE ACCESSED
251: (READ, WRITE, EXTEND, etc.)
252:
253: \item HOW THE FILE MAY BE TRAVERSED
254: (MOVING FROM ONE DATA UNIT TO ANOTHER)
255: \end{nrtc}
256:
257: \item FILESIZE (IN OCTETS)
258: \begin{nrtc}
259: \item AN ESTIMATE OF THE TOTAL SIZE OF THE FILE'S CONTENTS
260: \end{nrtc}
261:
262:
263: \item FUTURE FILESIZE (IN OCTETS)
264: \begin{nrtc}
265: \item A SOFT LIMIT ON THE TOTAL SIZE OF THE FILE'S CONTENTS
266: \end{nrtc}
267: \end{nrtc}
268: \end{bwslide}
269:
270:
271: \begin{bwslide}
272: \ctitle {SECURITY GROUP}
273:
274: \begin{nrtc}
275: \item ACCESS CONTROL (AN ACCESS CONTROL LIST)\\
276: FOR EACH ELEMENT OF THE LIST:
277: \begin{nrtc}
278: \item FILE ACTIONS PERMITTED
279:
280: \item ENTITY PERMITTED TO REQUEST ACTION (OPTIONAL)
281:
282: \item PASSWORD REQUIRED TO VALIDATE ACTION
283: \end{nrtc}
284:
285: \item ENCRYPTION NAME
286: \begin{nrtc}
287: \item DEFINES HOW FILE WAS ENCRYPTED
288:
289: \item FILES ARE TRANSFERRED IN ENCRYPTED FORM
290:
291: \item REQUIRES A REGISTRATION AUTHORITY TO BE ESTABLISHED
292: \end{nrtc}
293:
294: \item LEGAL QUALIFICATIONS
295: \begin{nrtc}
296: \item DEFINES THE ``LEGAL STATUS'' OF THE FILE
297:
298: \item MEANT TO BE USED WITH A NATIONAL PRIVACY LEGISLATION
299: \end{nrtc}
300: \end{nrtc}
301: \end{bwslide}
302:
303:
304: \begin{bwslide}
305: \ctitle {PRIVATE GROUP}
306:
307: \begin{nrtc}
308: \item A ``CATCH-ALL''
309:
310: \item USE IS STRONGLY DISCOURAGED
311: \end{nrtc}
312: \end{bwslide}
313:
314:
315: \begin{bwslide}
316: \part* {ACTIVITY ATTRIBUTES}\bf
317:
318: \begin{nrtc}
319: \item ACTIVITY ATTRIBUTES ARE ALSO DEFINED IN TERMS OF GROUPS\\
320: KERNEL, STORAGE, AND SECURITY (NO PRIVATE GROUP, OBVIOUSLY)
321:
322: \item THESE ARE USUALLY INITIALIZED WHEN A FILE IS EITHER
323: \begin{nrtc}
324: \item SELECTED
325:
326: \item OPENED FOR TRANSFER/ACCESS
327: \end{nrtc}
328: \end{nrtc}
329: \end{bwslide}
330:
331:
332: \begin{note}\em
333: relationship of actions is rather loose at this point in the presentation;
334: selection, open, transfer/access
335:
336: the next section will formalize these terms
337: \end{note}
338:
339:
340: \begin{bwslide}
341: \ctitle {KERNEL GROUP ACTIVITY ATTRIBUTES}
342:
343: \begin{nrtc}
344: \item ACTIVE CONTENTS TYPE
345: \begin{nrtc}
346: \item THE CONTENTS TYPE
347: \end{nrtc}
348:
349: \item CURRENT ACCESS REQUEST
350: \begin{nrtc}
351: \item THOSE PERMITTED ACTIONS WHICH ARE REQUESTED BY THE CLIENT
352:
353: \item CONTENTS: READ, INSERT, REPLACE, EXTEND, ERASE
354:
355: \item ATTRIBUTES: READ, CHANGE, AND DELETE FILE
356: \end{nrtc}
357:
358: \item CURRENT LOCATION
359:
360: \item CURRENT PROCESSING MODE
361: \begin{nrtc}
362: \item ACTIONS ON THE CONTENTS WHICH THE CLIENT WISHES TO PERFORM
363: (READ, INSERT, REPLACE, EXTEND, ERASE, LOCATE)
364: \end{nrtc}
365:
366: \item CURRENT APPLICATION ENTITY TITLE
367: \begin{nrtc}
368: \item A GLOBAL IDENTIFIER FOR THE ENTITY PROVIDING THE FILE SERVICE
369: (A FILESTORE OR FILESERVER)
370: \end{nrtc}
371: \end{nrtc}
372: \end{bwslide}
373:
374:
375: \begin{bwslide}
376: \ctitle {STORAGE GROUP ACTIVITY ATTRIBUTES}
377:
378: \begin{nrtc}
379: \item CURRENT ACCOUNT
380: \begin{nrtc}
381: \item THE CLIENT'S ACCOUNT WHEN THE FILE SERVICE WAS INITIATED
382: (MAY BE CHANGED WHEN A FILE IS SELECTED)
383: \end{nrtc}
384:
385: \item CURRENT ACCESS CONTEXT
386: \begin{nrtc}
387: \item HOW THE FILE STRUCTURE IS COMMUNICATED ON THE NETWORK
388: (MUCH MORE ON THIS LATER)
389: \end{nrtc}
390:
391: \item CURRENT CONCURRENCY CONTROL
392: \begin{nrtc}
393: \item HOW SIMULTANEOUS CLIENTS INTERACT WHEN ACCESSING THE FILE
394:
395: \item FOR EACH ACTION: SHARED, EXCLUSIVE, NOT REQUIRED, NO ACCESS
396: \end{nrtc}
397: \end{nrtc}
398: \end{bwslide}
399:
400:
401: \begin{bwslide}
402: \ctitle {SECURITY GROUP ACTIVITY ATTRIBUTES}
403:
404: \begin{nrtc}
405: \item ACTIVE LEGAL QUALIFICATION
406:
407: \item CURRENT INITIATOR IDENTITY
408: \begin{nrtc}
409: \item THE CLIENT'S IDENTITY WHEN THE FILE SERVICE WAS INITIATED
410: \end{nrtc}
411:
412: \item CURRENT ACCESS PASSWORDS
413: \begin{nrtc}
414: \item THE ACCESS LIST WHICH APPLIES TO THE CLIENT
415: \end{nrtc}
416: \end{nrtc}
417: \end{bwslide}
418:
419:
420: \begin{bwslide}
421: \part* {DOCUMENT TYPES}\bf
422:
423: \begin{nrtc}
424: \item STATIC CHARACTERISTICS
425: \begin{nrtc}
426: \item THE FILE ACCESS STRUCTURE (CONSTRAINT SET NAME)
427:
428: \item THE PRESENTATION STRUCTURE (ABSTRACT SYNTAX NAME)
429: \end{nrtc}
430:
431: \item DYNAMIC CHARACTERISTICS
432: \begin{nrtc}
433: \item THE TRANSFER STRUCTURE (TRANSFER SYNTAX NAME)
434:
435: \item A IDENTIFICATION STRUCTURE (ACCESS CONTEXTS)
436: \end{nrtc}
437:
438: \item ``REGISTERED'' AND REFERENCED VIA A UNIQUE IDENTIFIER
439: \end{nrtc}
440: \end{bwslide}
441:
442:
443: \begin{bwslide}
444: \ctitle {FILE ACCESS STRUCTURE}
445:
446: \begin{nrtc}
447: \item ANY FILE'S CONTENT CAN BE DESCRIBED AS A TREE
448:
449: \item EACH NODE IN THE TREE CONTAINS
450: \begin{nrtc}
451: \item A DESCRIPTOR (A NAME AND DISTANCE TO PARENT)
452:
453: \item OPTIONALLY, A DATA UNIT (DEFINED BY THE PRESENTATION STRUCTURE)
454:
455: \item OPTIONALLY, CHILDREN (OTHER NODES)
456: \end{nrtc}
457:
458: \item THE ROOT NODE DEFINES THE ``STARTING'' POINT FOR THE FILE
459:
460: \item NEED A WAY TO LIMIT THE COMPLEXITY OF THE TREE
461: \end{nrtc}
462: \end{bwslide}
463:
464:
465: \begin{bwslide}
466: \ctitle {CONSTRAINT SETS}
467:
468: \begin{nrtc}
469: \item DEFINES THE STRUCTURE OF THE TREE AND HOW ACTIONS ON THE FILE
470: (e.g., WRITE, ERASE) CHANGE THE STRUCTURE AND POSITION
471:
472: \item SEVERAL KINDS
473: \begin{nrtc}
474: \item UNSTRUCTURED
475:
476: \item SEQUENTIAL FLAT
477:
478: \item ORDERED FLAT
479:
480: \item ORDERED FLAT WITH UNIQUE NAMES
481:
482: \item ORDERED HIERARCHICAL
483:
484: \item GENERAL HIERARCHICAL
485:
486: \item GENERAL HIERARCHICAL WITH UNIQUE NAMES
487: \end{nrtc}
488: \end{nrtc}
489: \end{bwslide}
490:
491:
492: \begin{bwslide}
493: \ctitle {EXAMPLE: UNSTRUCTURED CONSTRAINT SET}
494:
495: \vskip.5in
496: \diagram[p]{figure2}
497: \end{bwslide}
498:
499:
500: \begin{note}\em
501: a unnamed root node with a data unit but no children
502:
503: file can be transferred as a whole, or extended
504:
505: access to a part is not permitted
506: \end{note}
507:
508:
509: \begin{bwslide}
510: \ctitle {EXAMPLE: SEQUENTIAL FLAT CONSTRAINT SET}
511:
512: \vskip.5in
513: \diagram[p]{figure3}
514: \end{bwslide}
515:
516:
517: \begin{note}\em
518: a two-level tree:\\
519: a root with no data unit but with zero or more children;
520: and,
521: each child has a data unit but no children
522:
523: data unit is identified based on position in the file (relation to siblings)
524:
525: insertions occur at end of file
526:
527: erase at root node to empty file
528:
529: ordered-flat differs by naming each child and identifying data units based
530: on the name
531: \end{note}
532:
533:
534: \begin{bwslide}
535: \ctitle {EXAMPLE: GENERAL HIERARCHICAL CONSTRAINT SET}
536:
537: \vskip.5in
538: \diagram[p]{figure4}
539: \end{bwslide}
540:
541:
542: \begin{note}\em
543: hierarchical: a tree of arbitrary structure
544:
545: at a given level, nodes have the same ``type'' of name
546:
547: insert as sister (sibling):\\
548: the data unit becomes the next child visited when using preorder traversal
549: (not valid for the root node, obviously)
550:
551: insert as child:\\
552: the data unit becomes the first child visited when using preorder traversal
553:
554: note difference between fadu and data(du)
555: \end{note}
556:
557:
558: \begin{bwoverlay}
559: \ctitle {EXAMPLE: GENERAL HIERARCHICAL CONSTRAINT SET}
560:
561: \vskip.5in
562: \diagram[p]{figure4a}
563: \end{bwoverlay}
564:
565:
566: \begin{bwoverlay}
567: \ctitle {EXAMPLE: GENERAL HIERARCHICAL CONSTRAINT SET}
568:
569: \vskip.5in
570: \diagram[p]{figure4b}
571: \end{bwoverlay}
572:
573:
574: \begin{bwoverlay}
575: \ctitle {EXAMPLE: GENERAL HIERARCHICAL CONSTRAINT SET}
576:
577: \vskip.5in
578: \diagram[p]{figure4c}
579: \end{bwoverlay}
580:
581:
582: \begin{bwslide}
583: \ctitle {PRESENTATION STRUCTURE}
584:
585: \begin{nrtc}
586: \item STRUCTURE OF EACH DATA UNIT IS DEFINED USING ABSTRACT SYNTAX NOTATION
587: ONE (ASN.1)
588:
589: \item SPECIFICATION CAN BE SIMPLE, e.g., A STRING OF OCTETS
590:
591: \item OR COMPLEX, e.g., A PERSONNEL RECORD
592: \end{nrtc}
593: \end{bwslide}
594:
595:
596: \begin{bwslide}
597: \ctitle {TRANSFER STRUCTURE}
598:
599: \begin{nrtc}
600: \item DATA UNITS ARE COMPOSED OF ``DATA ELEMENTS''
601:
602: \item EACH DATA ELEMENT MAPS DIRECTLY TO A ``WRITE'' TO THE NETWORK
603:
604: \item A TRANSFER STRUCTURE IS SAID TO BE ``SELF-DELIMITING'' IF EACH
605: DATA UNIT MAPS TO EXACTLY ONE DATA ELEMENT
606:
607: \item OTHERWISE, A 1:n RATIO IS USED AS AN EFFICIENCY ``HACK''
608: \begin{nrtc}
609: \item DATA ELEMENTS ARE CONCATENATED TO FORM A SINGLE DATA UNIT
610: \end{nrtc}
611: \end{nrtc}
612: \end{bwslide}
613:
614:
615: \begin{bwslide}
616: \ctitle {IDENTIFICATION STRUCTURE}
617:
618: \begin{nrtc}
619: \item ACCESS CONTEXT:
620: AN ALGORITHM FOR DEFINING A ASPECT OF THE FILE STRUCTURE
621:
622: \item ACTIONS TAKEN IN THE CONTEXT OF THE CURRENT POSITION\\ (i.e., NODE)
623:
624: \item RECURSIVE ACTIONS PERFORMED IN PREORDER TRAVERSAL
625:
626: \item IMPORTANT DISTINCTION
627: \begin{nrtc}
628: \item ALL DATA UNITS~---~THE NODE'S DATA UNIT AND DATA BELONGING
629: TO ALL CHILDREN OF THE NODE
630:
631: \item SINGLE DATA UNIT~---~THE NODE'S DATA UNIT (IGNORE CHILDREN)
632: \end{nrtc}
633:
634: \item SEVERAL DEFINED (OF COURSE)
635: \end{nrtc}
636: \end{bwslide}
637:
638:
639: \begin{bwslide}
640: \ctitle {EXAMPLE: ACCESS CONTEXTS}
641:
642: \vskip.5in
643: \diagram[p]{figure4}
644: \end{bwslide}
645:
646:
647: \begin{note}\em
648: unstructured single data unit (US):\\
649: transmit the node's data
650:
651: unstructured all data units (UA):\\
652: transmit all data in the fadu
653:
654: flat single data unit (FS):\\
655: transmit the single node's name and all data in the fadu
656:
657: flat one level data units (FL):\\
658: transmit names/data from all nodes at a given level having data
659:
660: flat all data units (FA):\\
661: transmit names/data from all nodes having data
662:
663: hierarchical no data units (HN):\\
664: transmit name, data, and structure
665:
666: hierarchical all data units (HA):\\
667: transmit name, data, and structure
668: \end{note}
669:
670:
671: \begin{bwslide}
672: \part* {SUMMARY}\bf
673:
674: \begin{nrtc}
675: \item THE VIRTUAL FILESTORE IS THE OPEN SYSTEMS ABSTRACTION OF A LOCALSTORE
676:
677: \item FILES CONTAIN ATTRIBUTES AND STRUCTURING INFORMATION IN ADDITION TO
678: ``TYPED'' DATA
679:
680: \item FILES ARE DISTINGUISHED BY NAME
681:
682: \item SOME ATTRIBUTES ARE DYNAMIC, ON A PER-CLIENT BASIS
683:
684: \item STRUCTURE IS BASED ON A HIERARCHICAL MODEL
685:
686: \item DATA AND STRUCTURE ARE SEPARATE AND DISTINCT
687:
688: \item DOCUMENT TYPES PROVIDE AN ABBREVIATED METHOD FOR REFERRING TO THE
689: FILE STRUCTURE
690: \end{nrtc}
691: \end{bwslide}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.