Add description of -c hello
[wiki.git] / doc / zephyr.mdwn
1 [[!meta title="Using Zephyr (a.k.a. Zephyr For Dummies)"]]
2
3 <!-- For information on the archaic way of using Zephyr, see TraditionalZephyr.-->
4
5 ## Introduction to Zephyr
6
7 Zephyr is a general purpose chat system for MIT.
8
9 People use it to exchange information about classes, how their days are
10 going, and talk on Zephyr classes and instances about everything
11 from the latest episode of Game of Thrones to the next 18.03
12 problem set.
13
14 Zephyr is an underlying chat system; the built-in tools for exchanging messages via Zephyr are rudimentary. Most people who use Zephyr today take advantage of integrated clients that make the system easy to use.
15
16 ## Major clients
17
18 Here are some of the primary clients used at MIT. There's also a listing of [other Zephyr clients](http://zephyr.1ts.org/wiki/ZephyrClients), but their use is generally not recommended.
19
20 ### BarnOwl
21
22 [BarnOwl](http://barnowl.mit.edu/) is a command-line Zephyr client that supports advanced filtering and customisation. It is probably the most commonly used client, but requires some effort to get started. To use BarnOwl effectively, you should connect to an [Athena dialup](http://web.mit.edu/dialup/www/ssh.html) and run BarnOwl along with a program to renew your Kerberos tickets. The Athena command `athrun sipb pag-screen` will set up ticket renewal, and `athrun barnowl` after that will run BarnOwl itself.
23
24 In addition to primarily supporting Zephyr, BarnOwl also lets you connect to [AIM](http://aim.com), [XMPP/Jabber](http://xmpp.org/) (Google Talk, Facebook, etc.), [Twitter](http://twitter.com), and IRC networks.
25
26 See [Getting Started with BarnOwl](http://barnowl.mit.edu/wiki/GettingStarted) for more information.
27
28 ### Roost
29
30 [Roost](https://roost.mit.edu/) is a graphical Zephyr client built by [David Benjamin](https://davidben.net/) (MIT '12, SIPB member) as part of his [master's thesis](https://davidben.net/thesis.pdf). It is relatively new and currently considered experimental by its author.
31
32 Roost makes use of [Webathena](https://webathena.mit.edu/) to keep you subscribed to Zephyr. This makes for a much easier setup.
33
34 ### Zulip
35
36
37 [Zulip](https://zulipchat.com/zephyr) ([source code](https://github.com/zulip/zulip)) is a web-based Zephyr client that also provides [mobile apps](https://zephyr.zulipchat.com/apps) for Android and iOS and desktop apps for Linux, Mac, and Windows. Zulip was originally a proprietary product developed by a company composed largely of MIT alums and SIPB members. It was acquired by [Dropbox](https://www.dropbox.com/about) in 2014, and [released as open-source software](https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project/) a year later. The Zulip for Zephyr service is offered by [Tim Abbott](http://web.mit.edu/tabbott/www/) (MIT '06, SIPB member)'s Kandra Labs.
38
39 Zulip, like Roost, is easy to set up because it uses Webathena for authentication.
40
41 See [Zulip for MIT setup](http://zulipchat.com/zephyr) for details.
42
43 <!-- merge to http://zephyr.1ts.org/wiki/ZephyrClients (I would do this, except I can't log in…)
44
45 ## Other Clients
46
47 There are other clients besides the above, but their use is not
48 nearly as widespread.  Some of these include:
49
50 * Owl (unmaintained, BarnOwl evolved from this)
51 * vt / jervt
52 * zwgc (see TraditionalZephyr)
53 * Pidgin
54 * zephyr-mode for emacs
55 * [ZephyrPlus web client](https://zephyrplus.mit.edu)
56
57 -->
58
59 ## Culture
60
61 ### Classes and Instances
62
63 Generally the most interesting discussion on Zephyr happens
64 on so-called Zephyr <em>classes</em>. A class is a bit like a chat
65 room in other IM systems. Anyone can send a zephyr to a class, and
66 anyone who is subscribed to that class will receive it. There is no
67 security on classes &mdash; anyone who knows the name of a class can
68 subscribe, and there is no way to determine who is subscribed to a
69 given class. (For secure or private zephyring, consider [[zcrypt]].)
70
71 To subscribe to a class, use the subscribe command:
72
73     :subscribe CLASSNAME * * 
74
75 To send a zephyr to a class, use the zwrite command with the -c option:
76
77     :zwrite -c CLASSNAME
78
79 Zephyrs to classes usually have an instance attached. An instance is a
80 short &ldquo;topic&rdquo; or &ldquo;subject&rdquo; that indicates the
81 context of a zephyr.  Different instances are often used to multiplex
82 multiple conversations on a high-traffic class. You can specify an
83 instance with the -i option to zwrite:
84
85     :zwrite -c CLASSNAME -i INSTANCE
86
87 A message without an instance specified will default to the instance
88 &ldquo;personal&rdquo;.
89
90 You can send zephyrs to individuals (as opposed to classes) with:
91
92     :zwrite USERNAME
93
94 It is possible to `zwrite` to multiple individuals at once, by listing the
95 usernames separated by spaces:
96
97     :zwrite -C USERONE USERTWO USERTHREE
98
99 The `-C` option automatically puts the line `CC: USERONE USERTWO USERTHREE`
100 in the body of the zephyr,
101 although this is only a convention and is not required or enforced.
102
103 ### Aside: zephyr triplets
104
105 All messages are actually sent to a "zephyr triplet" &mdash; a class, instance, and recipient. Subscriptions are also made to zephyr triplets. The recipient can be either "*" &mdash; to indicate a broadcast message &mdash; or a specific individual.
106
107 When sending, the default class is "message", instance is "personal", and recipient is "*". `zwrite` supports sending to arbitrary triples with `:zwrite -c CLASS -i INSTANCE USERNAME` &mdash; the two examples above use the defaults for the parts that aren't specified.
108
109 For subscriptions, the class must be specified. You can specify all instances on a class with "\*", or specify just one instance. You can only sub to recipient "\*" or your own personals (indicated by "%me%").)
110
111 ### Common classes
112
113 Some common classes include:
114
115 <strong>help</strong>:
116 > -c help is a class for asking (and answering) questions on virtually
117 > any topic imaginable. Be sure to use an instance (such as
118 > &ldquo;linux&rdquo;, &ldquo;barnowl&rdquo;, &ldquo;campus&rdquo;, or
119 > so on) when asking questions, since it's a fairly high-traffic
120 > class.
121
122 <strong>sipb</strong>:
123 > -c sipb is where most SIPB members hang out. It's a place for
124 > technical discussion, questions, support, and organizing SIPB events
125 > or projects. You should also always use an instance when sending to
126 > -c sipb.
127
128 <strong>Personal Classes</strong>:
129 > By convention, nearly every Zephyr user has a "personal" class that
130 > is the same as their username. How this class is used varies from
131 > person to person, but it's often a sort of mini-blog, a place to
132 > report what one is working on or up to, or ask friends questions, or
133 > just rant about something.
134
135 <strong>hello</strong>:
136 > -c hello is for introducing yourself to the Zephyrsphere! Send
137 > a zephyrgram to `-c hello -i YOUR_USERNAME` to let people
138 > know you're a zephyr user! Don't be afraid to subscribe to the personal classes
139 > of anyone who responds. In the same way, greet anyone who says 
140 > hello, and sub to their class!
141
142 <strong>unclasses</strong>:
143 > Most classes have an unclass, formed by prefixing "un" to the name. For
144 > example, -c help has the unclass -c unhelp. The unclass is generally used for
145 > snarky or unproductive replies; the prototypical example that first inspired
146 > their creation was telling somebody with computer issues to run
147 > `sudo rm -rf /`. Rarely, un- prefixes are stacked for even snarkier
148 > discussion, on -c ununhelp and so on.
149
150 <strong>.d classes</strong>:
151 > Classes like -c help.d are sometimes used for discussions that deviate from
152 > the conversation on the main class. .d instances are more common, though;
153 > see below.
154
155 ### Zephyr Slang
156
157 If you spend enough time on Zephyr, you'll begin noticing some strange
158 phrases and words being thrown around.  Some of these include:
159
160 <strong>i,i foo</strong>:
161 > USENET saying picked up from CMU zephyrland that expands to "I have no point here, I
162 > just like saying:".  Sometimes people use
163 > [scare quotes](https://en.wikipedia.org/wiki/Scare_quotes) (e.g. `"foo"`) 
164 > for similar purposes.
165
166 <strong>mix</strong>:
167 > If somebody accidentally sends a Zephyr to the wrong class or
168 > person, they will send another Zephyr to that wrong/class person
169 > simply saying "mix".  This basically just means, "oops, sorry, I
170 > didn't mean to send that Zephyr here".  You might also see "-i mix",
171 > which is the same thing, only with instances. The specific invocation "unmix"
172 > is used when accidentally sending a Zephyr to a class instead of its unclass
173 > or vice versa.
174
175 <strong>to Stark</strong>:
176 > To answer a question or replying to a topic to a topic several hours
177 > (or days, occasionally) later. The term originates from Greg Stark,
178 > who would often reply to zephyrs hours or occasionally days later
179 > without seeing if anyone had answered yet, or worse, if the instance
180 > had moved on to an entirely different topic.
181
182 <strong>.d</strong>:
183 > You may see an instance change from `-i foo` to `-i foo.d`.  This
184 > indicates a deviation or tangent from the the original topic.
185
186 <strong>.q</strong>:
187 > Similarly, `.q` at the end of an instance name indicates a quote.
188
189 <strong>ttants</strong>:
190 > Literally, "Things That Are Not The Same". When the things are people,
191 > <strong>pwants</strong> for "People Who Are Not The Same" may be used.
192
193 <strong>prnf</strong>:
194 > Literally, "Pseudo-Random Neuron Firing".
195
196 <strong>eiz</strong> or <strong>eip</strong> or <strong>else</strong>:
197 > Instances used to comment on discussions on other classes in Zephyr without
198 > linking to the original source for reasons of privacy or discretion. "eiz"
199 > means "Elsewhere in Zephyr", "eip" means "Elsewhere in Personals".
200
201 <strong>eim</strong>:
202 > "Elsewhere in Meatspace": instance used to comment on events not on Zephyr.
203
204 <strong>doxp</strong>:
205 > "Do X predicate", from Lisp naming convention. A discussion on whether one
206 > should do X.
207 > A common variation is "doxory", literally "Do X or Y".
208
209 Many of the acronyms may be suffixed onto normal instance topics with a period
210 to indicate relation. There are many other acronyms that are used; if you don't
211 know what it means, try using the `whats foo` command at an Athena terminal. If
212 you don't have the command, run `add sipb` first. Alternatively, running the
213 single command `athrun sipb whats foo` works as well.
214
215 ### Zephyr Etiquette
216
217 There are rules that people tend to use on Zephyr.  These include:
218
219 Good grammar, spelling, and punctuation.  Not everybody uses
220 capitalization, but they will still use good English.  Please do not say
221 things such as "hey wut r u up to???".
222
223 You don't need multiple question marks or exclamation points.  Usually.
224
225 There are a few abbreviations people use, such as YMMV (Your Mileage May
226 Vary) or IIRC (If I Remember Correctly), as well as some nerdier ones
227 like DTRT (Do The Right Thing, in reference to
228 [ The Rise of "Worse Is
229 Better"](http://www.jwz.org/doc/worse-is-better.html)). 
230 As mentioned above, try running `athrun sipb whats dtrt` to look up an
231 abbreviation.
232
233 Personal classes are by convention considered a little more private than
234 non-personal (public) classes. Although most people don't mind people
235 they've met subscribing to their personal class and lurking, it's poor
236 form to talk loudly on the personal class of someone you don't know.
237
238
239 ## Interaction with Traditional Zephyr
240
241 The default Athena startup scripts launch `zwgc`  on login. `zwgc` displays a popup for each message, so if you are subscribed to many classes and use Zephyr as many do today, `zwgc`'s behavior is not very desirable. To disable `zwgc` startup, add:
242
243     setenv ZEPHYR_CLIENT false
244
245 to your `~/.environment` file if you use `tcsh` or
246
247     ZEPHYR_CLIENT=false
248
249 to your `~/.bash_environment` if you use `bash`. This will cause your
250 shell to launch the `false` executable instead of `zwgc`, thereby disabling it ('false' does nothing).