(no commit message)
[wiki.git] / doc / UsingZephyr
1 = Using Zephyr =
2
3 == Introduction to Zephyr ==
4
5 Zephyr was a system designed to let system administrators send important messages to users in an easily noticeable format. It was meant to have a low volume of traffic and be used only for official notices. This is obviously not what Zephyr is today. It can still be used in the way it was intended: notice that you get official zephyrgrams as you log in, with important information about Athena services and planned outages. However, the most common usage is by average users exchanging information about classes, how their days are going, and talking on Zephyr classes and instances about everything from the latest episode of Battlestar Galactica to the next 18.03 problem set. The usage of Zephyr has far exceeded original expectations. Over time, people have also created programs that give Zephyr a graphical interface, and programs that give zephyr a purely textual interface, that can be used entirely within a ssh terminal. Some of these zephyr clients have become so widely used that there are users who do not know that there are other ways to send (and receive) zephyrgrams. This wiki will cover the traditional commands, typed at the athena% prompt, as well as the more common modern zephyr client Barnowl.
6
7 The information in this wiki about Barnowl just barely touches the surface.  More for in-depth functionality, visit the Barnowl wiki at https://barnowl.scripts.mit.edu:444/wiki.
8
9 == Modern Zephyr ==
10
11 Today the majority of Zephyr users use the barnowl client.  There are other clients as well (for example, Pidgin supports Zephyr).  The following sections will go into detail about how to install, use, and customize barnowl.
12
13 === Using Barnowl ===
14
15 To start barnowl, run the command {{{add barnowl; barnowl}}} at the prompt on any Athena machine or dialup, such as linerva.mit.edu.
16
17 The simplest use of Zephyr is to send personal zephyrs to other users. To send a zephyr, type : to bring up a command line, and run the command {{{zwrite USERNAME}}}. You can also start a {{{zwrite}}} command by simply typing z.
18
19 You can then enter your message, and then enter a {{{.}}} on a line by itself to finish the zephyr. By convention, zephyrs are usually word-wrapped to 70-character lines or so; Pressing M-q (Alt-q) will word-wrap the text you've entered for you.
20
21 Once you've sent and received zephyrs, you can navigate the message list with the arrow keys. Press {{{d}}} to mark a message as deleted, {{{u}}} to undelete it, and {{{x}}} to expunge all messages that have been marked as deleted.
22
23 Instead of entering a {{{zwrite}}} command manually, you can also select a message in the message list with the arrow keys, and reply to it using {{{r}}}, which will automatically set up an appropriate {{{zwrite}}} command.
24
25 For more documentation on the built-in commands and keybindings, you can press h to bring up barnowl's built-in help screen. For help with a specific command, bring up a command line with {{{:}}} and then type {{{help COMMAND}}}.
26
27 === Classes and Instances ===
28
29 Generally the most interesting discussion on Zephyr, however, happens on so-called Zephyr ''classes''. A class is a bit like a chat room in other IM systems. Anyone can send a zephyr to a class, and anyone who is subscribed to that class will receive it. There is no security on classes -- anyone who knows the name of a class can subscribe, and there is no way to determine who is subscribed to a given class.
30
31 To subscribe to a class, use the subscribe command:
32
33 {{{
34 :subscribe CLASSNAME * *
35 }}}
36
37 To send a zephyr to a class, use the zwrite command with the -c option:
38
39 {{{
40 :zwrite -c CLASSNAME
41 }}}
42
43 Zephyrs to classes usually have an instance attached. An instance is a short \93topic\94 or \93subject\94 that indicates the context of a zephyr. Different instances are often used to multiplex multiple conversations on a high-traffic class. You can specify an instance with the -i option to zwrite:
44
45 {{{
46 :zwrite -c CLASSNAME -i INSTANCE
47 }}}
48
49 A message without an instance specified will default to the instance \93personal\94
50
51 Some common classes include:
52
53 '''help'''::
54  -c help is a class for asking (and answering) questions on virtually any topic imaginable. Be sure to use an instance (such as \93linux\94\93barnowl\94\93campus\94, or so on) when asking questions, since it's a fairly high-traffic class. 
55
56 '''sipb'''::
57  -c sipb is where most SIPB members hang out. It's a place for technical discussion, questions, support, and organizing SIPB events or projects. You should also always use an instance when sending to -c sipb. 
58
59 '''Personal Classes'''::
60  By convention, nearly every Zephyr user has a "personal" class that is the same as their username. How this class is used varies from person to person, but it's often a sort of mini-blog, a place to report what one is working on or up to, or ask friends questions, or just rant about something.
61
62 '''"un" Classes'''::
63  Many people use "un" classes in addition to their personal class, for example {{{johndoe}}} might use {{{-c unjohndoe}}}.  Sometimes there are nested un-classes as well, such as {{{-c ununjohndoe}}} or {{{-c unununjohndoe}}}.  It is extremely rare to see anything more than three "un"s.  Un-classes are generally used for snarking about a conversation going on in the next class up ({{{-c unjohndoe}}} snarking about {{{-c johndoe}}}), or for more intense ranting.  The more "un"s, the more intense the snarking/ranting generally becomes.
64
65 === Zephyr Slang ===
66
67 If you spend enough time on Zephyr, you'll begin noticing some strange phrases and words being thrown around.  Some of these include:
68
69 '''i,i foo''':  originated from CMU and means "I have no point here, I just like to say".  Sometimes people simply use quotes: {{{"foo"}}}
70
71 '''mix''':  If somebody accidentally sends a Zephyr to the wrong class or person, they will send another Zephyr to that wrong/class person simply saying "mix".  This basically just means, "oops, sorry, I didn't mean to send that Zephyr here".  You might also see "-i mix", which is the same thing, only with instances.
72
73 '''.d''':  You may see an instance change from {{{-i foo}}} to {{{-i foo.d}}}.  This indicates a deviation or tangent from the the original topic.
74
75 '''ttants''':  Literally, "Things That Are Not The Same".
76
77 '''prnf''':  Literally, "Pseudo-Random Neuron Firings".
78
79 There are many other acronyms that are used; if you don't know what it means, try using the {{{whats foo}}} command at an Athena terminal.
80
81 === Startup ===
82
83 There might be some options that you want to be consistent from session to session; you don't want to have to set the same variables each time.  You can fix this by adding the commands to your "startup" file, for example, {{{.owl/startup}}}.  This can be done from within Barnowl, by using the {{{startup}}} command:
84
85 {{{
86 :startup set foo bar
87 }}}
88
89 Where {{{foo}}} is the variable you want to set, and {{{bar}}} is the value.  You do not necessarily have to use the {{{set}}} command, either, any command you can type in Barnowl can be added to the startup file.
90
91 === Logging ===
92
93 It is handy to be able to log your conversations so you can refer back to them later.  To log classes, for example:
94
95 {{{
96 :set classlogging on
97 "set classlogpath ~/path/to/class/log
98 }}}
99
100 And to log personals:
101
102 {{{
103 :set logging on
104 :set logpath ~/path/to/people/log
105 }}}
106
107 === Colors ===
108
109 By default, there are seven colors you may use in the terminal:  red, green, yellow, blue, magenta, cyan, and white.  In order to use color in Zephyr, you can use the following notation:  {{{@(@color(red)This is some red text))}}}
110
111 Colors may vary from machine to machine, as different terminal profiles may have different shades of the seven colors.
112
113 === Filters ===
114
115 Some people like to customize their Barnowl by color-coding classes.  This makes it easier to tell different classes apart (and minimize mixing).  Barnowl has some already existing filters, for example, {{{personal}}} (for incoming personals), {{{out}}} (for outgoing personals), and {{{ping}}} (for pings).  To assign a color to a filter, add the following to your startup file:
116
117 {{{
118 filter personal -c green
119 }}}
120
121 What if you want to color-code your class, or a friends class?  You can create and color filters with:
122
123 {{{
124 filter johndoe class johndoe
125 filter johndoe -c blue
126 }}}
127
128 You can update your settings and filters without restarting your Barnowl session by:
129
130 {{{
131 :source ~/path/to/config/file
132 }}}
133
134 For more detailed information on filters, visit https://barnowl.scripts.mit.edu:444/wiki/Filters.
135
136 == Running Barnowl in Screen ==
137
138 It can be very annoying to have to close Barnowl when you turn off your computer.  During the time your computer is off, you're missing many (possibly important) zephyrs.  It can also be frustrating if you leave your computer on with Zephyr up, but go to a different computer and want to check your zephyrs - how do you do this?  These problems can be solved with the magic of screen.
139
140 A more detailed and extensive explanation of this can be found at http://web.mit.edu/kchen/bin/owl-screen.txt.
141
142 === Screen ===
143
144 You should find a computer or server on which to run your screen session(s) that is up all the time, for example, linerva.mit.edu.  Screen allows you to run programs inside of it on one computer, and to access those same programs from other computers via ssh.
145
146 === Quickstart ===
147
148 1.  Pick a machine to host your screen session on.  If you don't know of any options, linerva.mit.edu is a good choice.
149 2.  ssh to that machine.
150 3.  Run "add kchen".  You may want to add this to your {{{~/.environment}}} file.
151 4.  Run "owl-screen"
152
153 Your screen session is now ready.  Once you start the screen session, you'll need to get renewable Kerberos tickets in order to run it for any extended period of time.  Press C-a C-c to open a new screen window, and run
154
155 {{{
156 kinit -l7d
157 }}}
158
159 Press C-a 0 to return back to your Barnowl window.
160
161 When you're ready to log out, press C-a d to "detach" your screen, and then type {{{exit}}} or {{{logout}}} to log out.  Later, when you want to "reattach" your screen, ssh to the machine again, and run {{{screen -x}}}.
162
163 === Kerberos Tickets and AFS Tokens ===
164
165 In order to keep your screen session authenticated, you'll need to keep your Kerberos tickets and AFS tokens up-to-date.  There is a script that will do this for you, located in the {{{kchen}}} locker.  After you ssh into the machine that hosts your screen sessions, run the following commands:
166
167 {{{
168 add kchen
169 owl-screen
170 C-a C-c
171 kinit -l1d -r7d
172 cont-renew &
173 C-a 0
174 }}}
175
176 === Attaching and Detaching Sessions ===
177
178 To detach a screen session (for example, if you want to log out), press C-a d.  Screen continues to run, but is no longer active.
179
180 To reattach a screen session, run one of the following commands (as listed in the screen man page):
181
182 '''{{{-d -r}}}'''   Reattach a session and if necessary detach it first.[[BR]]
183 '''{{{-d -R}}}'''   Reattach a session and if necessary detach or even create it first.[[BR]]
184 '''{{{-d -RR}}}'''  Reattach a session and if necessary detach or create it. Use the first session if more than one session is available.[[BR]]
185 '''{{{-D -r}}}'''   Reattach a session. If necessary detach and logout remotely first.[[BR]]
186 '''{{{-D -R}}}'''   Attach here and now.  In detail this means: If a session is running, then reattach.  If necessary detach and logout remotely first.  If it was not running create it and notify the user.[[BR]]
187 '''{{{-D -RR}}}'''  Attach here and now. Whatever that means, just do it.[[BR]]
188 '''{{{-x}}}'''      Attach to a not detached screen session. (Multi display mode).[[BR]]
189
190 Note: It is always a good idea to check the status of your sessions by means of "screen -list".
191
192 The -x option is preferable, since it means you don't need to reattach your screen elsewhere if it was previously attached.
193
194 == Traditional Zephyr (archaic) ==
195
196 When you log into Athena, you may occasionally see a white box pop up with text on it.  This is Zephyr in it's traditional form.
197
198 === Terminology ===
199
200 '''windowgrams''' are the small windows that appear on your screen with a message from another person.
201
202 '''Zephyrgrams''' are the messages that you send and receive when you are using Zephyr. They can appear as windowgrams or in other forms, depending on which client you are using. 
203
204 '''zwgc''' is the basic, traditional Zephyr client.
205
206 === Basic Commands ===
207
208 '''zlocate''' '''''friend''''' is the command used to find out if user "friend" is logged in and subscribing to zephyrgrams. If they are logged in and subscribing to messages you will receive information about where they are logged in. If they are not logged in you will receive the message "Hidden or not logged-in." This means they either do not want to be found or are not logged in.
209
210 '''zwrite''' '''''friend''''' is used to send a message to {{{friend}}}. Just follow the instructions given. If you get an error saying the person is hidden or not logged in then your message has not been sent and the person you are trying to reach is not logged in or is not subscribing to messages and you should try sending e-mail instead.
211
212 '''zctl hide''' can be used to "hide" yourself. When hidden you are not {{{zlocatable}}}, but if someone tries to zwrite you anyway they will succeed. 
213
214 '''zctl wg_shutdown''' should be used if you want to stop receiving zephyrgrams for this session.
215
216 '''zctl set zwrite-signature "foo"''' (quotes are mandatory) will change your Zephyr signature, or zsig, to foo. By default your zsig is your name as it exists in your finger information. It shows up in a zephyrgram before your username. You can change it to almost anything you like, although you should avoid very long zsigs since they tend to annoy people. 
217
218 '''zaway''' is used to let people know you are away from the terminal and not deliberately ignoring their messages. It sends a message to whoever sends you a personal zephyrgram that lets them know that you are away (and will probably respond later). 
219
220 '''zwgc -ttymode''' will start up a Zephyr client when you are logged in remotely. Zephyrs appear as plain text on your screen. 
221
222 '''znol''' will let you know which people on a list are logged in. Your {{{~/.anyone}}} file should contain the list of usernames you want to know about (it should have one name per line and no spaces). You will also be sent login and logout notices in the form of a zephyrgram whenever one of the users in your list logs in or out (if they are announced, see below) after you have run {{{znol}}} during a session. 
223
224 '''zctl set exposure exposurelevel''' will set your exposure (how other people know when you are logged in). An exposure level of {{{net-announced}}} causes login and logout notices to be sent to people who have you in their {{{.anyone}}} file, and you will be zlocatable. {{{net-visible}}} is the same except login and logout notices are not sent. The {{{realm-announced}}}  and {{{realm-visible}}} settings require authentication before your information is divulged, but behave in most situations in the same way as {{{net-announced}}} and {{{net-visible}}}, respectively. The {{{opstaff}}}  setting makes you unable to be zlocated and does not send login and logout notices. Finally the {{{none}}} setting provides no information about you and '''you will not be able to receive zephyrgrams'''.
225
226 '''zctl sub message foo *''' will subscribe you to a Zephyr "instance" named foo. Zephyr instances (and classes) allow groups of people to have conversations via Zephyr. The above {{{zctl}}} command will subscribe you to the instance {{{foo}}} for your current login only; to make it more permanent replace {{{sub}}} with {{{add}}}. To unsubscribe for this login only change {{{sub}}} to {{{unsub}}}, and to unsubscribe permanently use {{{delete}}} instead. 
227
228 '''zwrite -i foo''' will send a message to the Zephyr instance {{{foo}}}.
229
230 '''zctl sub foo * *''' subscribes you to the Zephyr class {{{foo}}}. Zephyr classes are slightly more private than instances as you must know the name of the class to subscribe to it. {{{unsub}}}, {{{add}}} and {{{delete}}} work the same way for classes as for instances. 
231
232 '''zwrite -c foo''' sends a zephyr(gram) to class {{{foo}}}.