Шукати в цьому блозі

неділю, 19 грудня 2010 р.

Debian: IPSET, TARPIT и т.д. на ядре 2.6.32 и выше

Для тех кто мучается с netfilter-extension и не понимает, что же делать-то ;)
  1. aptitude install module-assistant xtables-addons-source
  2. module-assistant prepare
  3. module-assistant auto-install xtables-addons-source
  4. depmod -a
Всё! Наслаждаемся екстеншенами.

Новые таржеты для iptables:
  • CHAOS: randomly use REJECT, DELUDE or TARPIT targets. This will fool network scanners by returning random results
  • DELUDE: always reply to a SYN by a SYN-ACK. This will fool TCP half-open discovery
  • DHCPADDR: replace a MAC address from and to a VMware host
  • IPMARK: mark a packet, based on its IP address
  • LOGMARK: log packet and mark to syslog
  • SYSRQ: trigger a sysreq over the network (sending a saK over the network looks like a real funny idea ;)
  • TARPIT: try to slow down (or DoS) remote host by capturing the session and holding it for a long time, using a 0-bytes TCP window. Run that on port 25 if you have no mail server to slow down spammers ;)

Новые совпадения (matches) для iptables:
  • condition: match on boolean value stored in /proc/net/nf_condition/name
  • dhcpaddr: match the DHCP Client Host address in a DHCP message
  • fuzzy: match a rate limit based on a fuzzy logic controller
  • geoip: match a packet by its source or destination country
  • ipp2p: match (certain) p2p protocols
  • portscan: try to match port scanners based on packet contents
  • quota2: named counters

вівторок, 7 грудня 2010 р.

SSH: запретить shell, но разрешить sftp, scp...

Ставим пакет rssh. Редактируем /etc/rssh.conf на предмет разрешения тех или иных сервисов. Меняем у пользователя shell:
usermod -s /usr/bin/rssh user

Jabber сервер Openfire

В связи с полным дебилизмом от ICQ со сменой протокола, с отказом от обслуживания "левых" клиентов пришла таки пора ставить себе jabber-сервер и настроить транспорт в ICQ.
Выбор пал на Openfire.
В репозитории Debian'а Openfire не оказалось, поэтому смело идём на сайт проекта, качаем deb-пакет и устанавливаем его, не забывая про зависимости.
$ sudo dpkg -i openfire_3.6.4_all.deb
Затем создаём базу:
mysql> create database openfire;
Query OK, 1 row affected (0.07 sec)

mysql> create user 'openfire-user'@'localhost' identified by 'your-password';
Query OK, 0 rows affected (0.15 sec)

mysql> grant all on openfire.* to 'openfire-user'@'localhost';
Query OK, 0 rows affected (0.03 sec)
Заходим на http://localhost:9090/ и отвечаем на вопросы по первоначальной настройке. Не забываем указать внешней базой mysql.
После окончания настройки перезапускаем openfire, иначе просто не пустит в админку:
$ sudo invoke-rc.d openfire restart
Идём на http://localhost:9090/login.jsp вводим логин admin и указанный нами пароль.
Наслаждаемся... ;)

пʼятницю, 19 листопада 2010 р.

Фоновая загрузка CPU и renice

Интересное решение для фоновой "загрузки" CPU с наименьшей приоритезацией в renice:
while [ -n "1" ];do echo 1 > /dev/null; done & renice 19 $!
В notes.

пʼятницю, 12 листопада 2010 р.

UUID

Задался вопросом, а откуда можно взять UUID устройств, для fstab'а, grub'а и т.д.
Всё оказалось проще чем думалось:
$ blkid 
/dev/sda9: UUID="34d86afb-97be-46aa-baa7-37ff65926829" LABEL="home" TYPE="reiserfs" 
/dev/sda1: LABEL="/" UUID="6d33b948-9e55-47b6-bfa5-52a1339624a8" TYPE="reiserfs" 
/dev/sda5: LABEL="/usr" UUID="a2b2ce57-fa58-4ca6-a997-3648f9c83e0d" TYPE="reiserfs" 
/dev/sda6: TYPE="swap" 
/dev/sda7: LABEL="/var" UUID="8821d5eb-e545-43e1-8d17-407e1e5e2126" TYPE="reiserfs" 
/dev/sda8: LABEL="/tmp" UUID="02af6195-2841-4ee9-8c0e-7c5b20a4b4e5" TYPE="reiserfs"

понеділок, 6 вересня 2010 р.

Списки управления доступом

Ну, что думаете, что система управления доступом в Linux'е заканчивается chown'ом и chmod'ом? Ошибаетесь - есть ещё ACL!

Итак, файловые системы extN, а так-же reiserfs (относительно других - просто не проверял) поддерживают ACL, но только в том случае когда они смонтированы с опцией acl:
sudo mount -o remount,acl /tmp

Конечно более кошерно это сделать через /etc/fstab:
/dev/cciss/c0d0p6 /tmp reiserfs rw,acl 0 0

Если acl активированы, управлять ими можно при помощи утилит setfacl и getfacl, которые устанавливаются с пакетом acl:
aptitude install acl

Попробуем разобраться что тут да к чему.

Создадит файл foo с правами 0x600:
~$ cd tmp
~/tmp$ touch foo
~/tmp$ chmod 600 foo
~/tmp$ ls -l foo
-rw------- 1 bar bar 0 Сен  6 13:57 foo

Глянем теперь в getfacl, что у нас получилось:
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
group::---
other::---

Видим, что автоматически добавились три раздела, соответствующие обычным правам доступа. В дальнейшем эти разделы автоматически синхронизирутся с обычными правами доступа - chmod, chown - и в то же время обычные права доступа можно обновить через setfacl.
Создадим теперь несколько ACL'ов, добавим право на чтение и запись для пользователя mysql и только для чтения пользователю dovecot:
~/tmp$ setfacl -m u:mysql:rw foo
~/tmp$ setfacl -m u:dovecot:r foo
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
user:dovecot:r--
group::---
mask::rw-
other::---

Станет немного сложнее если захотет задать маску ACL. Маски используется при ограничении доступа явно поименованных пользователей и групп и не затрагивает права файла. Установим маску только для чтения и снова посмотрим на ACL:
~/tmp$ setfacl -m m::r foo
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-            #effective:r--
user:dovecot:r--
group::---
mask::r--
other::---

Обращаем внимание, что права для пользователя mysql были ограничены установленной маской; теперь это только чтение, а не чтение и запись.

Ну и напоследок, ACL можно удалить таким образом:
~/tmp$ setfacl -x u:dovecot: foo 
~/tmp$ getfacl foo 
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---


Кстати, все операции можно проводить не только с пользователями, но и с группами:
~/tmp$ setfacl -x u:dovecot: foo 
~/tmp$ getfacl foo 
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

~/tmp$ setfacl -m g:dovecot:r foo 
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
group:dovecot:r--
mask::rw-
other::---

~/tmp$ setfacl -x g:dovecot: foo 
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

Заметим, что команда ls -l пусть и не пытается отобразить расширенные ACL, но даёт понять, что они есть (знак + после стандартных прав доступа):
~/tmp$ ls -l foo
-rw-rw----+ 1 bar bar 0 Сен  6 13:57 foo

Кстати, getfacl и setfacl могут работать в контейнерной обработке. Например, чтобы скопировать права доступа с foo на foo1 достаточно сделать так:
~/tmp$ touch foo1
~/tmp$ getfacl foo | setfacl --set-file=- foo1
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

~/tmp$ getfacl foo1
# file: foo1
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

Ну и самое интересно. Можно указать унаследуемые от прав каталога ACL:
~/tmp$ mkdir acltest
~/tmp$ setfacl -d -m u:mysql:rw acltest
~/tmp$ getfacl acltest
# file: acltest
# owner: bar
# group: bar
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:mysql:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

~/tmp$ cd acltest
~/tmp/acltest$ touch foo
~/tmp/acltest$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::r-x   #effective:r--
mask::rw-
other::r--

Насколько часто пользоваться acl - дело каждого, тут не может быть универсальных советов.

setfacl -m u:foo:rw файл(ы)
| |  |  |
| |  |  +-- права rwx
| |  |
| |  +----- пользователь (или группа) заданные по имени или uid/gid
| |
| +-------- u = пользователь
|           g = группа
|           o = другие
|           m = маска
+--------- -m = изменить ACL
-x = удалить ACL

суботу, 21 серпня 2010 р.

Назначение пароля и прав в MySQL

Так интенсивно пользуюсь, что забываю чаще чем хотелось бы.

Назначаем права и пароль пользователю на хосте (в данном случае права на все действия):
GRANT ALL ON база.* TO пользователь@хост IDENTIFIED BY 'пароль';
Если приложение старо как мир то может понадобиться вот такая хитрая манипуляция по назначению старого формата пароля:
SET PASSWORD FOR пользователь@хост = OLD_PASSWORD('пароль');
Ну и не забываем о том, что все изменения по назначению прав и паролей надобно применить:
FLUSH PRIVILEGES;

вівторок, 17 серпня 2010 р.

nginx теперь есть в репозитории для Debian'а

Ну коль кое-кто очень скромно упомянул обо мне в своей заметке то теперь настал мой черёд.
Итак, Сергей Петручок скромненько так был анонсировал мне новость, что был добавлен в uploader'ом в Debian.org.ua, после чего, не менее скромно заметил, что nginx теперь имеет свой репозиторий на сервере ftp2.debian.org.ua. Точнее не так, заметил, что благодаря усилиям и стараниям Олега Милаенко (omnix, OLEG-RIPE) был создан неофициальный репозиторий nginx, ну и далее по-тексту...

Что-же требуется для того чтобы обрести счастье и начать получать обновления для nginx "на автомате"? Да, собственно, немного:
# echo "deb http://ftp2.debian.org.ua/debian-dou/ lenny main" >> /etc/apt/sources.list

# gpg --keyserver keys.gnupg.net --recv-keys 0A3D4789
gpg: requesting key 0A3D4789 from hkp server keys.gnupg.net
gpg: key 0A3D4789: public key "Debian.org.ua Custom Repository " imported
gpg: Total number processed: 1
gpg:               imported: 1

# gpg --armor --export 0A3D4789 | apt-key add -
OK
Репозиторий содержит сборки не только для lenny, но и для squeeze, что вдвойне приятно. Конечно же для того чтобы получить репозиторий для squeeze необходимо первую команду поменять на:
# echo "deb http://ftp2.debian.org.ua/debian-dou/ squeeze main" >> /etc/apt/sources.list
Собственно всё. Теперь через aptitude можете установить nginx, а те у кого он раньше был установлен из deb-пакета смогут получить обновления.
Огромное человеческое спасибо Олегу и Сергею ;)

четвер, 24 червня 2010 р.

Выдержка из спецификации базовой станции Airmax MicroMAX

Честно спионерено с сайта Unidata.
Rx Sensitivity (BER 10-6) &SNR @ BW=10MHz Rx Sensitivity, dBm SNR, dB
64QAM3/4
64QAM1/2
16QAM3/4
16QAM1/2
QPSK3/4
QPSK1/2
BPSK
-74
-77
-82
-84
-88
-90
-94
21.0
19.5
15.5
12.0
9.0
6.5
3.0

середу, 16 червня 2010 р.

Познавательный тест "Шпрехен зи руссиш?"

Шпрехен зи руссиш?


Шпрехен зи руссиш?
Шпрехен зи руссиш?Тест на знание заимствованных слов, имён собственных и других хитростей русского языка. Такой небольшой «диктант» , позволяющий проверить вашу грамотность.
Александр прошел этот тест с результатом:
4 ошибки. Отличный результат! Я горжусь вами! Более высокий уровень знаний требуется только профессионалам, работающим с языком.
Пройти тест "Шпрехен зи руссиш?"
Все познавательные тесты на ШколаЖизни.ру

вівторок, 15 червня 2010 р.

Fix: Cyanogen 5.0.x на Dream и акселерометр.

Обновил себе прошивку с KiNgxKxlick 1.9 до Cyanogen 5.0.7, а затем до 5.0.8-test4, но заметил неприятный глюк - перестал нормально работать акселерометр. Вернулся на KiNgxKxlick 1.9 - работает. Т.е. это не физических глюк. Сегодня решил таки его побороть и было найдено простое и элегантное решение проблемы:
su
rm /data/misc/akmd* /data/misc/rild*
reboot
Всё элегантно и просто. :)

середу, 19 травня 2010 р.

Настройка MMS и Internet для платформы Android

Сначала настраиваем точку доступа интернет для каждого оператора:
Life:)
NAME: life:) Internet
APN: internet
Тип APN: default
Киевстар
NAME: Kyivstar
APN: www.kyivstar.net
USERNAME: igprs
PASSWORD: internet
Тип APN: default
Beeline
NAME: BEELINE Internet/GPRS
APN:
Тип APN: default
internet.beeline.ua
МТС
NAME: GPRS Internet
APN: internet
Тип APN: default
*контрактным абонентам, которые подключились до 25.07.2007, необходимо использовать имя точки доступа (APN) www.umc.ua
Djuice
NAME: djuice
APN:
Тип APN: default
www.djuice.com.ua
Екотел
NAME: GPRS Internet
APN: internet
Тип APN: default
Utel
NAME: Utel Internet
APN: 3g.utel.ua
Тип APN: default
Ace&Base
NAME: ace&base
APN: www.ab.kyivstar.net
Server: www.ab.kyivstar.net
Тип APN: default


Теперь создаем еще одну точку доступа для MMS:


Life:)
NAME: life:) mms
APN: mms
MMSC:
Прокси MMS:
Порт MMS: 8080
MCC:255
MCC:06
Тип APN: mms
http://mms.life.com.ua/cmmsc/post 212.58.162.230
Киевстар
NAME: Kyivstar MMS
APN:
USERNAME: mms
PASSWORD: mms
MMSC:
Прокси MMS:
Порт MMS: 8080
MCC:255
MCC:03
Тип APN: mms
mms.kyivstar.net http://mms.kyivstar.net 010.010.010.010
Beeline
NAME: BEELINE Internet/GPRS
APN:
Тип APN: default
internet.beeline.ua
МТС
NAME:MMS GPRS
APN: mms
MMSC:
Прокси MMS:
Порт MMS: 8080
MCC:255
MCC:01
Тип APN: mms
http://mmsc:8002/ 192.168.010.010
Djuice
NAME: DJUICE MMS
APN:
USERNAME: djuice
PASSWORD:
MMSC:
Прокси MMS:
Порт MMS: 8080
MCC:255
MCC:03
Тип APN: mms
mms.djuice.com.ua оставить пустым http://mms.kyivstar.net 010.010.010.010
Екотел
NAME: GPRS Internet
APN: internet
Тип APN: default
Utel
NAME: Utel MMS
APN: 3g.utel.ua
MMSC:
Прокси MMS:
Порт MMS: 8080
MCC:255
MCC:07
Тип APN: mms
http://10.212.1.4/mms/wapenc 10.212.3.148
Ace&Base
NAME: ace&base
APN:
Server:
Тип APN: default
www.ab.kyivstar.net www.ab.kyivstar.net

Взято тут.

понеділок, 17 травня 2010 р.

Общие сведения о DSCP (Differentiated Services Code Point)

Общие сведения о DSCP (Differentiated Services Code Point)

DSCP — поле в IP-пакете, позволяющее назначить сетевому трафику различные уровни обслуживания. Для достижения этого каждый пакет в сети помечается кодом DSCP и соответствующим ему уровнем обслуживания.
DSCP представляет собой объединение полей IP Precedence и Type of Service. Для работы с устаревшими маршрутизаторами, поддерживающими только поля IP Precedence, значения DSCP используются из-за совместимости с полями IP Precedence. Дополнительные сведения см. в документе RFC 2474 на веб-узле RFC Editor.

Как работает DSCP

Программы, поддерживающие QoS, отправляют запрос на конкретный тип службы для трафика через интерфейс прикладного программирования (API) общего качества службы. Возможные типы служб:
  • Guaranteed
    Эта служба предоставляет поддающиеся количественному определению гарантии высокого качества с ограниченной задержкой (гарантированный минимум).
  • Controlled load
    Эта служба обеспечивает поддающиеся количественному определению гарантии высокого качества без ограниченной задержки.
DSCP представляет собой шестиразрядное поле, в котором содержатся значения по умолчанию, указанные в следующей таблице. Равносильные значения IP Precedence и IEEE 802.1p показаны в отдельных столбцах.

Тип службы DSCP IP Precedence IEEE 802.1p
Network control3067
Guaranteed2855
Controlled load1833
Другой трафик000
Примечания
  • Службу сетевого контроля невозможно запросить через интерфейс прикладного программирования общего качества службы. Однако это можно выполнить посредством приложений управления сетями, использующими интерфейс прикладного программирования контроля трафика.
  • Значения DSCP по умолчанию можно изменить удаленно с помощью групповой политики।
Источник technet.microsoft.com

Восстановление software raid после сбоя

Не то, что оно мне надо, просто честно спёр тут.


На днях «выпал» из софтварного raid1 один из разделов.
# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1]
34178176 blocks [2/1] [_U]

md1 : active raid1 sda2[0] sdb2[1]
19534976 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
240832 blocks [2/2] [UU]
По данным smart-а диск в порядке, в логах ничего не замечено.
Пробуем восстановить. Помечаем диск как сбойный:
# mdadm /dev/md2 -f /dev/sda3
Удаляем его из рейда
# mdadm /dev/md2 -r /dev/sda3
И пробуем его добавить обратно
# mdadm /dev/md2 -a /dev/sda3
mdadm: re-added /dev/sda3
Статус раздела после добавления обратно в массив:
# mdadm --detail /dev/md2
/dev/md2:
Version : 00.90
Creation Time : Fri Mar 19 18:53:17 2010
Raid Level : raid1
Array Size : 34178176 (32.59 GiB 35.00 GB)
Used Dev Size : 34178176 (32.59 GiB 35.00 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 2
Persistence : Superblock is persistent

Update Time : Sat May 15 01:42:31 2010
State : active, degraded, recovering
 Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1

Rebuild Status : 7% complete

UUID : d841d3cd:6e2537ed:02c08aff:db0fd513
Events : 0.3905

Number   Major   Minor   RaidDevice State
       2       8        4        0      spare rebuilding   /dev/sda3
1       8       19        1      active sync   /dev/sdb3
Ждем пока завершиться ребилдинг и надеемся, что сбой был не на физическом уровне :)
В противном случае придется менять диск.
Восстановление raid1 после замены физического диска.
Перед тем как менять диск, необходимо исключить все разделы сбойного диска из рейда.
Помечаем все разделы сбойного диска как fail и удаляем их из рейда.
mdadm /dev/md0 -f /dev/sda1
mdadm /dev/md1 -f /dev/sda2
mdadm /dev/md2 -f /dev/sda3

mdadm /dev/md0 -r /dev/sda1
mdadm /dev/md1 -r /dev/sda2
mdadm /dev/md2 -r /dev/sda3
выключаем сервер, меняем диск на новый, стартуем.
Подготавливаем диск для добавления в рейд.
Копируем разметку с живого диска на новый
# sfdisk -d /dev/sdb | sfdisk /dev/sda
Проверим, что оба диска имеют одинаковую разметку
# fdisk -l
Теперь добавим все разделы в массив рейда
# mdadm  /dev/md0 -a /dev/sda1
# mdadm  /dev/md1 -a /dev/sda2
# mdadm  /dev/md2 -a /dev/sda3
Если сервер нагружен, можно указать максимальную скорость синхронизации дисков (указывается в кб/сек), это немного понизит нагрузку:
echo 3000 >/sys/block/md1/md/sync_speed_max
Не забываем установить grub на новый диск:
# grub
grub> root (hd0,1) # hd0 - указываем, что надо использовать диск sda, 1 - номер /boot раздела
grub> setup (hd0) # устанавливаем grub в MBR нового диска
grub> quit
Проверить текущий статус raid-массива можно так:
# cat /proc/mdstat
В принципе все … ну или как-то так :)

вівторок, 13 квітня 2010 р.

Как правильно задавать вопросы

Хронология версий
Версия перевода 2009-11-26 -
backport раздела "Как спрашивать про код"
26 ноября 2009 года netch
Версия 3.128 октября 2004 годаesr
Добавлено: 'Google - ваш друг!'
Версия 3.02 февраля 2004 годаesr
Существенное добавление рассуждений об этикете общения в Web-форумах.

Содержание
Переводы
Отказ от обязательств
Введение
Прежде, чем спрашивать...
Когда спрашиваете...
Правильно выбирайте форум
Web- и IRC-форумы для начинающих часто позволяют получить ответ как можно быстрее
В качестве второго шага, используйте списки рассылки проектов
Задавайте осмысленные, конкретные темы сообщений
Упростите посылку ответа
Пишите понятным языком, соблюдая правила грамматики и лексики
Посылайте вопросы во всем понятных форматах
Точно и детально опишите проблему
Объем еще не значит точность
Не утверждайте, что нашли ошибку
Публичное самоунижение не заменяет выполнение домашних заданий
Описывайте симптомы проблемы, а не свои предположения
Описывайте симптомы проблемы в хронологическом порядке
Описывайте цель, а не отдельный шаг
Не просите отвечать на личный адрес электронной почты
Задавайте ясные и четкие вопросы
Как спрашивать про код
Не задавайте вопросы из домашних заданий
Избегайте бессмысленных просьб
Не помечайте свой вопрос как "Срочный", даже если для вас он именно такой
Вежливость никогда не повредит, и иногда помогает
Пошлите краткое описание решения

Как интерпретировать ответы



RTFM и STFW: как понять, что вы серьезно облажались
Если вы не поняли...
Реакция на грубость

Не реагируйте как неудачник


Вопросы, которые задавать не надо


Хорошие и плохие вопросы


Если ответ не получен


Как давать хорошие ответы


Дополнительные источники информации


Благодарности


Имеются переводы этого документа на китайский, чешский, датский, эстонский, французский, немецкий, иврит, венгерский, итальянский, японский, польский, русский, испанский, шведский и турецкий языки. Если вы хотите копировать, поддерживать зеркало, перевести или процитировать этот документ, прочитайте, пожалуйста, мои правила копирования.

Отказ от обязательств

На сайтах многих проектов в разделах о том, как обращаться за помощью, даны ссылки на этот документ. Это хорошо, именно для этого он и предназначен, но если вы — web-мастер, собирающийся добавить такую ссылку на странице своего проекта, пожалуйста, рядом со ссылкой на видном месте укажите, что мы не являемся службой поддержки для вашего проекта!
Мы на собственном горьком опыте убедились, что, при отсутствии такого предупреждения, нас постоянно будут донимать идиоты, считающие, что публикация этого документа обязывает нас решать все технические проблемы в мире.
Если вы читаете этот документ потому, что нуждаетесь в помощи, и вам в итоге кажется, что вы ее можете получить непосредственно от авторов, то вы - один из этих самых идиотов. Не задавайте вопросы нам. Мы будем их просто игнорировать. Наша цель - показать вам, как получить помощь у тех, кто разбирается в программном или аппаратном обеспечении, с которым вы работаете, но в 99% случаев, этими разбирающимися будем не мы. Если не знаете наверняка, что один из авторов является экспертом в том, с чем вы разбираетесь, - оставьте нас в покое, и от этого всем станет лучше.
В мире хакеров, стиль ответов, которые вы получаете на задаваемые технические вопросы, зависит от способа задания вопросов не меньше, чем от их сложности. Это руководство научит задавать вопросы так, чтобы увеличить вероятность получения удовлетворительного ответа.
Сейчас, когда программное обеспечение с открытыми исходными текстами стало широко распространено, вы часто можете получить ответы от других, более опытных, пользователей, а не от хакеров. Это - Хорошо; пользователи обычно немного терпимее относятся к ошибкам, которые часто делают новички. Но, если обращаться к опытным пользователям как к хакерам, в соответствии с представленными здесь рекомендациями, то это будет самым эффективным способом получить полезные ответы и от них.
Прежде всего, надо понять, что хакерам на самом деле нравятся сложные проблемы и хорошие, способные расшевелить мозги, вопросы об этих проблемах. Если бы нам это не нравилось, мы не были бы хакерами. Если задать нам интересный вопрос, требующий продолжительных размышлений, мы будем за него благодарны; хорошие вопросы - это стимул и подарок. Хорошие вопросы помогают лучше понять предмет и часто вскрывают проблемы, которых ранее не замечали или о которых не задумывались. Из уст хакера: "Хороший вопрос!" - это большой и искренний комплимент.
Несмотря на это, считается, что хакеры относятся к простым вопросам скорее враждебно или высокомерно. Иногда кажется, что мы достаточно грубы к новичкам и игнорируем их. Но, на самом деле, это не так.
Мы, без сомнения, неприязненно относимся к людям, предположительно не желающим подумать или поучиться прежде, чем задавать вопросы. Такие люди убивают время — они берут, ничего не давая взамен, они отнимают время, которое мы могли бы посвятить другому вопросу, более интересному, и другому человеку, более достойному ответа. Таких людей мы называем "неудачниками" ("losers") (по историческим причинам это слово иногда пишется как "lusers" - пользователи-неудачники).
Мы понимаем, что многие люди просто хотят использовать создаваемое нами программное обеспечение, и совершенно не собираются изучать технические детали. Для большинства компьютер - это просто инструмент, средство достижения цели; у них есть и более интересные занятия и другие проблемы в жизни. Мы признаем это и не ожидаем, что каждого будут интересовать технические нюансы, столь привлекательные для нас. Тем не менее, наш стиль ответов на вопросы подходит для людей, действительно интересующихся этим, и желающих быть активными участниками процесса решения проблем. Это не изменится. Да и не должно меняться; в противном случае, мы не сможем эффективно делать то, в чем мы - лучшие.
Мы (в основном) — добровольцы. Мы посвящаем время своей нелегкой жизни ответам на вопросы, и временами мы не справляемся со шквалом вопросов. Поэтому приходится безжалостно "фильтровать базар". В частности, отбрасывать вопросы потенциальных неудачников, чтобы потратить отведенное на ответы время более эффективно, посвящая его победителям.
Если эта позиция кажется вам смешной, высокомерной или заносчивой, вы ошибаетесь. Мы не просим вас на нас молиться — фактически, большинство из нас хотели бы общаться с вами на равных и принять вас в свою культуру, если вы приложите необходимые для этого усилия. Но для нас просто неэффективно пытаться помочь людям, которые не хотят помочь себе сами. Быть грубым - нормально, а вот прикидываться идиотом - нет.
Итак, хотя вовсе не обязательно быть технически компетентным, чтобы удостоиться нашего внимания, надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения. Если вы не можете смириться с подобного рода дискриминацией, имеет смысл заплатить кому-то за коммерческую поддержку, а не просить хакеров помочь даром лично вам.
Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
(Дополнения к этому руководству приветствуются. Предложения можно направлять по адресу esr@thyrsus.com. Учтите, однако, что этот документ не создавался как общее руководство по сетевому этикету, и я обычно игнорирую предложения, не связанные непосредственно с получением полезных ответов в техническом форуме.)
Прежде, чем задавать технический вопрос по электронной почте или в дискуссионную группу, в чате или на форуме, сделайте следующее:
Когда задаете вопрос, укажите с самого начала, что вы все это уже сделали; это поможет понять, что вы не какой-нибудь лентяй, транжирящий чужое время. Еще лучше, покажите, что вы узнали в результате своих поисков. Нам нравится отвечать людям, продемонстрировавшим свою способность воспринимать ответы.
Используйте приемы типа поиска в Google по тексту полученного сообщения об ошибке (поищите также в дискуссионных группах - Google groups, а не только на Web-страницах). Это может привести либо непосредственно к документации, посвященной тому, как эту ошибку устранить, либо к дискуссии в списке рассылки, в которой можно будет найти ответ. Даже если ответ и не найдется, фраза: "Я поискал в Google по следующему запросу, но ничего полезного не нашел" пригодится при обращении за помощью по электронной почте или в дискуссионную группу.
Подготовьте вопрос. Продумайте его. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите. Чем больше вы сделаете, чтобы продемонстрировать свои размышления и усилия по решению проблемы до того, как просить помощи, тем вероятнее, что вы эту помощь получите.
Не задавайте неправильных вопросов. Если вопрос строится на ошибочных предположениях, любой хакер (в оригинале - J. Random Hacker, прим. переводчика), скорее всего, даст бесполезный буквальный ответ, подумав при этом "Глупый вопрос...", и надеясь, что получение того, о чем вы просили, вместо того, что действительно нужно, чему-то вас научит.
Не думайте, что вам должны ответить. Вам никто ничего не должен; вы же, в конечном счете, не платили за эти услуги. Вы получите ответ, если заслужите его, задавая существенный, интересный и наводящий на размышления вопрос — вопрос, неявно дающий сообществу новый опыт, а не просто пассивно требующий от других поделиться знаниями.
С другой стороны, неплохо сразу ясно дать понять, что вы можете и хотите помочь в процессе выработки решения. На вопросы типа "Может ли кто-то подсказать?", "Что не учтено в моем примере?" и "А нет ли сайта, который стоит на эту тему посмотреть?" более вероятно будет получен ответ, чем на требование прислать точную последовательность действий для решения проблемы, поскольку вы явно показали, что решите проблему сами, если кто-то укажет вам правильное направление действий.
Тщательно продумайте, где именно задавать вопрос. Вас с большой вероятностью проигнорируют или спишут как неудачника, если вы:
Хакеры игнорируют вопросы, направленные не по адресу, чтобы не загружать свои каналы связи не относящейся к делу информацией. Не стоит попадать в этот разряд вопросов.
Поэтому сначала надо найти соответствующий форум. В этом вам снова поможет поисковая система Google и другие средства поиска в Web. Используйте их для поиска страницы проекта, наиболее тесно связанного с оборудованием или программным обеспечением, с которым возникли трудности. Обычно на этой странице будут ссылки на список часто задаваемых вопросов (ЧаВО, FAQ - Frequently Asked Questions), списки рассылки проекта и их архивы. Именно там и надо просить помощи, если ваши собственные усилия (включая прочтение этих, обнаруженных вами, ЧаВО) не увенчались успехом. На странице проекта может быть также описана процедура информирования об ошибке или представлена ссылка на нее. В таком случае, воспользуйтесь рекомендованной процедурой.
Посылка же сообщения человеку или в форум, с которым вы не знакомы, - предприятие, как минимум рискованное. Например, не думайте, что автор информативной web-странички хочет стать для вашим бесплатным консультантом. Не делайте оптимистических предположений о том, что вашему вопросу будут рады - если не уверены, пошлите его по другому адресу или откажитесь от его посылки вообще.
При выборе Web-форума, дискуссионной группы или списка рассылки, не принимайте решение только на основе имени; прочитайте список часто задаваемых вопросов (FAQ) или правила, чтобы убедиться, что вопрос соответствует тематике. Почитайте сообщения некоторое время, прежде чем посылать вопросы, чтобы почувствовать, как и что здесь делается. На самом деле, перед посылкой вопроса не помешает поискать по ключевым словам, связанным с вашей проблемой, в архивах дискуссионной группы или списка рассылки. В результате можно найти ответ, а если нет, такой поиск поможет лучше сформулировать вопрос.
Не используйте все доступные каналы помощи одновременно. Это похоже на крик и возмущает людей. Обращайтесь к ним поочередно.
Правильно определите тему! Одна из классических ошибок - задавать вопрос о программном интерфейсе Unix или Windows в форуме, посвященном языку, библиотеке или инструментальному средству, работающему на обеих платформах. Если вы не понимаете, почему это - грубая ошибка, лучше вообще не задавайте вопросов, пока не поймете.
В общем случае, вероятность получить ответы на вопросы в правильно выбранном общедоступном форуме выше, чем в приватном. Причин для этого несколько. Одна из них - количество потенциальных отвечающих. Другая - размер аудитории, которая узнает ответ; хакеры с большим удовольствием отвечают на вопросы, которые могут интересовать многих, чем на вопросы, полезные лишь единицам.
Понятно, что опытные хакеры и создатели популярных программ и так уже получают намного больше не относящихся к делу вопросов, чем хотели бы. Увеличивая этот поток, вы в некоторых случаях можете стать последней каплей - изредка участники популярных проектов прекращают их поддержку, потому что не выносят больше сопутствующих ей проблем в виде потока бесполезных сообщений по электронной почте на их личные адреса.
Ваша местная группа пользователей или ваш дистрибутив Linux может поддерживать Web-форум или канал IRC, предназначенный для помощи начинающим. (В неанглоязычных странах форумы для начинающих, по-прежнему, скорее всего, организованы в виде списков рассылки.) Это - подходящие места для первоначального задания вопросов, особенно если предполагается, что вы столкнулись с относительно несложной или типичной проблемой. Открыто рекламируемый канал IRC - это явное приглашение задавать вопросы, и, зачастую, возможность получать ответы в реальном времени.
Фактически, если программа, с которой у вас возникли проблемы, взята из дистрибутива (что, на сегодня, типично), может оказаться лучше сначала спросить в форуме/списке рассылки по соответствующему дистрибутиву, прежде чем обращаться в форум/список рассылки программы. Хакеры, работающие над проектом, могут просто ответить: "Используйте нашу сборку".
Прежде чем задавать вопрос в любом Web-форуме, проверьте, нет ли на нем возможности поиска. И если она есть, поищите пару раз по ключевым словам обсуждение проблемы, подобной вашей; это может помочь. Если перед этим вы выполнили общий поиск в Web (что надо было сделать), все равно поищите на форуме; возможно, ваша поисковая система давно не индексировала повторно этот форум.
Наблюдается интересная тенденция выполнять поддержку пользователей проектов через Web-форум или канал IRC, оставляя электронную почту для общения между разработчиками. Поэтому, если нужна помощь по проекту, обратитесь сначала к этим его источникам информации.
Если у проекта есть список рассылки для разработчиков, шлите вопросы в этот список рассылки, а не отдельным разработчикам, даже если уверены, что знаете, кто именно лучше всего может ответить на ваш вопрос. Найдите адрес списка рассылки проекта в документации или на сайте проекта, и шлите вопрос по этому адресу. Есть несколько хороших причин поступать именно так:
Если у проекта есть отдельные списки рассылки или Web-форумы для "пользователей" и для "разработчиков" (или "хакеров"), и вы не занимаетесь разбором (hacking) кода, задайте вопрос в списке/форуме для "пользователей". Не рассчитывайте на теплый прием в списке рассылки для разработчиков, где ваш вопрос, вероятно, отнесут к разряду "шума", мешающего обмену информацией о ходе разработки.
Однако, если вы уверены в нетривиальности своего вопроса и не получили ответа в списке рассылки/форуме для "пользователей" в течение нескольких дней, обратитесь к разработчикам. Имеет смысл перед этим последить за соответствующим списком рассылки или форумом несколько дней, чтобы изучить его традиции (на самом деле, это имеет смысл делать перед обращением в любой частный или полузакрытый список рассылки).
Если не удается найти адрес списка рассылки проекта, но известен адрес лица, ведущего проект, пошлите свой вопрос ведущему. Но и в этом случае не думайте, что списка рассылки нет. В своем сообщении укажите, что пытались, но не смогли найти соответствующий список рассылки. Упомяните также, что не против пересылки вашего сообщения другим адресатам. (Многие считают, что личная корреспонденция должна оставаться личной, даже если ничего секретного в ней нет. Разрешая переслать свое сообщение, вы даете людям выбор.)
При посылке сообщения в список рассылки или в дискуссионную группу, тема сообщения - прекрасная возможность привлечь внимание квалифицированных экспертов строкой длиной до 50 символов. Не тратьте их на лепет типа "Помогите мне, пожалуйста" (не говоря уже про темы "PLEASE HELP ME!!!!"; сообщения с такими темами выбрасываются рефлекторно). Не пытайтесь поразить нас глубиной своих страданий; лучше используйте отведенное место для максимально краткого описания проблемы.
Хорошее соглашение по оформлению тем сообщений, используемое многими службами технической поддержки, - применение шаблона "объект - отклонение". Часть "объект" задает, с чем именно возникла проблема, а часть "отклонение" описывает отклонение от ожидаемого поведения.
Процесс написания темы по шаблону "объект-отклонение" поможет более детально осмыслить проблему. Что именно неправильно работает? Только курсор мыши или с другой графикой тоже есть проблемы? Проблема только в XFree86? Только в версии 4.1? Эта проблема возникает только на видеокартах с чипсетом Fooware? Только в модели MV1005? Хакер, получив сообщение с подобной темой, сможет, в общих чертах, понять, с чем именно у вас возникала проблема и что это за проблема.
В общем случае, представьте, что просматриваете список вопросов в архиве, в котором представлены только строки темы. Сделайте так, чтобы строка темы достаточно хорошо отражала суть вопроса и следующий просматривающий архив в поисках ответа на подобный вопрос мог найти обсуждение, приводящее к ответу, а не посылал вопрос заново.
Если вы задаете вопрос в ответ, не забудьте изменить строку темы так, чтобы по ней было понятно - задается вопрос. Строка темы вида "Re: test" или "Re: new bug" не привлечет достаточного внимания. Кроме того, сведите цитирование предыдущих сообщений к минимуму, достаточному, чтобы новые пользователи могли понять, о чем шла речь.
Не посылайте просто ответ на сообщение списка рассылки, если собираетесь обсуждать новую тему (начать нить обсуждения). Это сузит круг отвечающих. Некоторые программы чтения почты, например, mutt, позволяют пользователю сортировать сообщения по темам, а затем прятать сообщения по теме, сворачивая нить обсуждения. Те, кто этой возможностью пользуется, никогда вашего сообщения не увидят.
Поменять тему недостаточно. Mutt и, возможно, другие программы чтения электронной почты, учитывают не только строку темы, но и другую информацию в заголовках сообщений при привязке их к нити обсуждения. Создайте абсолютно новое сообщение.
В Web-форумах правила обсуждения немного отличаются, поскольку сообщения обычно более тесно связаны с конкретными нитями обсуждения и часто невидимы за пределами этих нитей. Изменение темы при задании вопроса в ответ не существенно (не все форумы даже позволяют указывать темы в ответах, а если их и можно задать, практически никто их не читает). Но, задавать встречный вопрос в ответ само по себе - сомнительная практика, поскольку вопрос этот увидят только те, кто следит за соответствующей нитью обсуждения. Поэтому, если вы не уверены, что хотите обратиться именно к тем, кто участвует в обсуждении темы, начните новую тему.
Завершение вопроса фразой "Ответ, пожалуйста, направляйте по адресу... " делает получение ответа весьма маловероятным. Если у вас нет пары секунд на то, чтобы правильно задать заголовок Reply-To в своей почтовой программе, то у нас нет и пары секунд на то, чтобы подумать о вашей проблеме. Если ваша почтовая программа не позволяет это сделать - выкиньте ее. Если ваша операционная система не поддерживает почтовые программы, позволяющие это сделать, поищите операционную систему получше.
Просить отвечать по электронной почте в Web-форумах - крайне невежливо, если только вы не уверены, что информация может оказаться конфиденциальной (и кто-то, по неизвестной причине, захочет сообщить ее вам лично, а не всему форуму). Если вы хотите получить уведомление по почте о том, что кто-то ответил на тему в форуме, запросите это уведомление в интерфейсе Web-форума; эта возможность поддерживается практически везде в виде опций "watch this thread" ("следить за обсуждением"), "send email on answers" ("уведомлять по почте") и т.п.)
Экспериментальным путем установлено, что люди, пишущие невнимательно и небрежно, обычно так же невнимательны и небрежны в мыслях и в коде создаваемых программ (по крайней мере, достаточно часто, чтобы уверенно так утверждать). Отвечать на вопросы людей невнимательных и небрежно мыслящих - занятие неблагодарное; мы свое время лучше потратим на что-то другое.
Поэтому четкость и правильность формулировки вопроса имеет значение. Если вы не хотите морочить себе этим голову, мы не хотим морочить голову себе, уделяя внимание таким вопросам. Постарайтесь сформулировать вопрос правильным языком. Он не должен быть тяжеловесным и формальным — на самом деле, в хакерской культуре ценится неформальный, полный сленга и юмора язык, используемый правильно. Но мысли должны быть выражены четко; необходимо продемонстрировать хоть какие-то признаки вдумчивости и внимания.
Соблюдайте правила синтаксиса, пунктуации и использования прописных букв. Не путайте "its" с "it's", "loose" с "lose" или "discrete" с "discreet". Не ПИШИТЕ ВСЕ В ВЕРХНЕМ РЕГИСТРЕ, - это воспринимается как крик и считается грубостью. (Если все написано в нижнем регистре, - не многим лучше, поскольку так сложно читать. Алану Коксу это прощается, а вам - нет.)
В общем случае, если вы пишете на уровне детского лепета или бреда сумасшедшего, ваш вопрос, скорее всего, проигнорируют. Писанина в стиле малолетних "хацкеров" (в оригинале - l33t script kiddie hax0r - прим. переводчика) - абсолютно безнадежна, и гарантирует в ответ - тишину (или, в лучшем случае, порцию пренебрежения и сарказма).
Если вы задаете вопросы в форуме, где используется не родной для вас язык, то некоторые лексические и грамматические ошибки вам простят — но никакого прощения элементарной лени не ждите (да, мы обычно способны понять разницу). Кроме того, если не знаете точно, какие языки для адресата - родные, пишите по-английски. Занятые хакеры обычно просто пропускают вопросы на языках, которые они не понимают, а английский - рабочий язык Internet. Задав вопрос по-английски, вы уменьшаете вероятность, что его пропустят, не читая.
Если вы искусственно затрудняете чтение вопроса, увеличивается вероятность, что вместо него ответят на вопрос, который прочитать не сложно. Поэтому:
  • Посылайте сообщение в виде обычного текста, а не в формате HTML. (Отключить HTML не так уж сложно.)
  • MIME-приложения обычно вполне допустимы, но только если они имеют реальное содержание (например, прилагается исходный текст или файл исправлений), а не просто автоматически генерируются почтовым клиентом (представляя собой, например, еще одну копию письма, но в формате HTML).
  • Не посылайте сообщения, в которых абзацы представлены одной строкой, визуально переносящейся на следующие строки на клиенте. (Это усложняет ответ на часть сообщения.) Исходите из предположения, что адресаты будут читать сообщения на текстовых терминалах со строками в 80 символов, и настройте соответственно вставку жестких переносов строк, завершая строку до 80 позиции.
  • При этом, однако, не разбивайте на несколько строк по фиксированной позиции данные (например, дампы журналов или записи сеансов). Данные необходимо включать в сообщения как они есть, чтобы адресаты были уверены, что они видят именно то, что видели вы.
  • Не посылайте сообщения в кодировке MIME Quoted-Printable в англоязычный форум. Эта кодировка может понадобиться при посылке сообщения на языке, не покрываемом кодировкой ASCII, но многие пользовательские почтовые агенты ее не поддерживают. Читать сообщения с разбросанными по тексту управляющими символами вида =20 неудобно и неприятно.
  • Даже и не думайте, что хакеры смогут прочитать документы в закрытых, патентованных форматах типа Microsoft Word или Excel. Большинство хакеров реагируют на них примерно так, как реагировали бы вы, если бы вам вымазали входную дверь поросячьим дерьмом. Даже когда они могут их прочитать, необходимость возиться с этими форматами их возмущает.
  • При посылке сообщения с машины под управлением Windows, отключите дебильную Microsoft-овскую поддержку "Smart Quotes". Это позволит избавиться от множества мусорных символов, разбросанных по всему сообщению.
  • В Web-форумах не злоупотребляйте "смайликами" и возможностями вставки "html" (если они предоставляются). Один-два смайлика - это, обычно, нормально, но разноцветный забавный текст наводит людей на мысль, что вы - ламер. Избыточное использование смайликов, цвета и шрифтов представляет вас как смешливую девочку-подростка, что не имеет смысла, если конечно вас интересуют ответы, а не секс.
При использовании почтового клиента с графическим интерфейсом, (например, Netscape Messenger, MS Outlook и им подобных) помните, что он может нарушать эти правила при использовании стандартных установок. В большинстве таких клиентов в меню есть команда типа "View Source". Проверьте с ее помощью по одному из отправленных сообщений, что посылается обычный текст, без лишнего мусора.
Сделайте максимум возможного, чтобы предугадать потенциальные вопросы хакера и заранее на них ответить в своем обращении за помощью.
Саймон Тэтхем (Simon Tatham) написал замечательное эссе, озаглавленное Как эффективно сообщать об ошибках. Я настоятельно рекомендую его прочитать.
При возникновении проблем с тем или иным программным обеспечением не заявляйте, что нашли ошибку, если только абсолютно не уверены в этом. Подсказка: если вы не можете предоставить исправление исходного кода, которое решает проблему или тестовый пример для предыдущей версии, демонстрирующий неправильное поведение, вы, скорее всего, недостаточно уверены в своем заявлении.
Помните, что множество других пользователей с такой проблемой не сталкивались. Иначе вы бы уже узнали об этом при чтении документации или при поиске в Web (вы же сделали это, прежде чем делать подобные утверждения, не так ли?). Это означает, что, скорее всего, именно вы что-то делаете неправильно, а не программное обеспечение.
Создатели программного обеспечения прикладывают огромные усилия для того, чтобы оно работало как можно лучше. Если вы утверждаете, что нашли ошибку, то, тем самым, предполагаете, что они сделали что-то не так, и это почти наверняка им не понравится — даже если вы правы. Особенно недипломатичным будет написать "bug" ("Ошибка") в строке темы сообщения.
Когда задаете вопрос, лучше описывать проблему, исходя из предположения, что вы делаете что-то не так, даже если вы лично абсолютно уверены, что нашли ошибку. Если это действительно ошибка, вы прочитаете об этом в ответе. Старайтесь вести себя так, чтобы занимающиеся поддержкой программы люди захотели извиниться перед вами, если обнаружена реальная ошибка, а не чтобы вам пришлось извиняться за свою бестолковость.
Бесполезно сообщать хакерам свое мнение о причинах проблемы. (Если ваши диагностические теории настолько ценны, надо ли обращаться за помощью к другим?) Поэтому проверьте, что сообщаете фактические симптомы происходящего, а не свои интерпретации и теории. Пусть интерпретацией и диагностикой займутся отвечающие.
Наиболее важная информация для выяснения причин происходящего часто связана с непосредственно предшествующими этой ситуации событиями. Поэтому необходимо точно описать, что вы делали, и что делала машина вплоть до возникновения проблемы. В случае работы с интерфейсом командной строки очень может помочь запись сеанса (например, с помощью утилиты script) и включение в сообщение пары десятков соответствующих строк.
Если программа, в которой произошел сбой, имеет опции диагностики (например, -v - детальное информирование), попытайтесь подобрать опции, добавляющие полезную отладочную информацию в "стенограмму" сеанса.
Если запись получилась достаточно длинной (больше страницы), имеет смысл заранее сформулировать проблему в начале, а потом указать хронологическую последовательность действий, к ней приводящих. В этом случае хакеры будут знать, на что обратить внимание при чтении сеанса.

Описывайте цель, а не отдельный шаг

Если вы пытаетесь разобраться, как что-либо сделать (а не сообщаете об ошибке), начинайте с описания цели. И только потом описывайте конкретный шаг на пути к ней, который вы не смогли выполнить.
Зачастую люди, которым необходима техническая помощь, имеют на уме высокоуровневую цель и привязываются к одному из возможных, по их мнению, путей ее достижения. Они просят помочь выполнить один шаг, не отдавая себе отчета в том, что выбрали неверный путь. Чтобы разобраться в этом, может потребоваться много усилий.

Глупо:
Как заставить диалог выбора цвета в программе FooDraw воспринимать шестнадцатеричное RGB-значение?
Разумно:
Я пытаюсь заменить таблицу цветов в изображении нужными мне значениями. Сейчас я вижу только один способ сделать это - редактируя каждый слот таблицы, но я не могу задать шестнадцатеричное RGB-значение в диалоге выбора цвета программы FooDraw.
Вторая версия вопроса - разумна. Она позволяет получить ответ, в котором будет предложено средство, более подходящее для решения задачи.
Хакеры считают, что решение проблем должно быть общедоступным, прозрачным процессом, в ходе которого первая попытка найти ответ может и должна быть исправлена, если кто-то, более знающий, заметит, что этот ответ - неполный или некорректный. Кроме того, отвечающие отчасти вознаграждаются тем, что их компетентность и знания будут замечены коллегами.
Когда вы просите личного ответа, вы мешаете как процессу выработки решения, так и получению вознаграждения. Не делайте этого. Отвечать лично - это выбор отвечающего, — и если он так и делает, то обычно потому, что считает вопрос слишком неудачно сформулированным или очевидным, чтобы быть интересным другим.
Из этого правила есть одно небольшое исключение. Если вы предполагаете, что на свой вопрос получите множество подобных между собой ответов, не забудьте магические слова "пошлите ответ мне, а я резюмирую полученные ответы в статье для дискуссионной группы". Попытка уберечь дискуссионную группу или список рассылки от потока, по сути, идентичных сообщений - это очень любезно, но вы должны сдержать обещание и послать итоговое резюме.
Неограниченные вопросы требуют обычно неограниченного времени для ответа. Люди, скорее всего способные дать вам полезный ответ, еще и самые занятые люди (еще и потому, что большую часть своей работы делают сами). Такие люди ревностно относятся к своему времени, и поэтому часто не воспринимают неограниченные вопросы.
Вероятность получения полезного ответа повышается, если вы четко даете понять, чего добиваетесь от отвечающих (предоставить ссылки, послать код, проверить ваше решение и т.п.). Это сконцентрирует усилия отвечающих и неявно задаст ограничение по времени и усилиям, которые придется затратить отвечающему, чтобы вам помочь. Это хорошо.
Чтобы понять, в каком мире живут эксперты, надо относиться к знаниям экспертов, как к ресурсу обильному, а к их времени - как к ресурсу весьма ограниченному. Чем меньше времени вы неявно требуете, тем более вероятно получение ответа от действительно хорошего и занятого эксперта.
Поэтому имеет смысл ограничить вопрос, чтобы свести к минимуму время, необходимое эксперту для его решения. Но зачастую это не то же самое, что упростить вопрос. Так, например, вопрос: "Можете ли вы дать мне ссылку на хорошее описание X?" - обычно куда разумнее, чем просьба: "Объясните мне X, пожалуйста". Если у вас проблема с неработающим кодом, разумнее будет попросить объяснить, что в нем не так, а не просить исправить ошибки.
(Внимание: это свежая секция перевода и достаточно сырая. Прошу оповещать о всех проблемах и огрехах данной секции. - Netch.)
Не просите других отлаживать ваш неработающий код без подсказки о проблемах, которые нужно отыскать. Отправляя сотни строк и говоря "не работает", вы будете проигнорированы. Отправив десяток строк кода и сказав "после строки 7 я ожидаю X, но приходит Y" - значительно вероятнее получить ответ.
Наиболее эффективным методом изложения проблемы является показ наименьшего примера, демонстрирующего проблему. Этот наименьший пример должен содержать только код, необходимый для демонстрации проблемы, и ничего сверх того. Как получить этот наименьший пример? Если вы знаете строку или часть кода, которая даёт нежелательный результат, скопируйте её и добавьте столько кода, чтобы получить завершённый пример (т.е. чтобы он мог скомпилироваться и запуститься). Если вы не можете определить ту часть кода, что вызывает проблему - скопируйте исходный код и удаляйте части, не влияющие на возникновение проблемы. Чем меньше кода останется, тем лучше (см. главу " Объем еще не значит точность").
Не всегда возможно получить действительно небольшой пример, но всегда пытаться - хороший принцип. Это может помочь изучить самому, что нужно для решения проблемы - и даже если она не решилась, хакеры любят видеть, что вы пытались сами решить. Это подтолкнёт их помочь.
Если вы хотите получить стороннюю оценку кода (code review), опишите как можно больше до собственно кода, и постарайтесь указать, какие части по-вашему требуют больше всего внимания, и почему.
Это ваша проблема, а не наша. Упоминание о срочности зачастую контрпродуктивно: большинство хакеров просто удаляет такие сообщения как грубые и эгоистичные попытки срочно привлечь к себе особое внимание.
Из этого правила есть одно частичное исключение. Упоминание о срочности может иметь смысл, если вы используете программу в серьезной организации, которая может заинтересовать хакеров; в таком случае, если вам не хватает времени и вы сообщите об этом вежливо, люди могут оказаться достаточно заинтересованными, чтобы ответить быстрее.
Так делать, однако, - крайне рискованно, потому что точка зрения хакера на серьезность и его интересы, вероятно, отличаются от ваших. Вопрос с международной космической станции, например, вызовет интерес, а вот вопрос от имени преуспевающего благотворительного фонда или политической партии, почти наверняка, - нет. Фактически, вопрос с темой "Срочно: Помогите мне спасти пушистых тюленят!" будет проигнорирован или злобно прокомментирован даже теми хакерами, которые считают, что жизнь пушистых тюленят имеет для них значение.
Если это вас удивляет, перечитывайте весь остальной документ до тех пор, пока не поймете, а до того воздержитесь от посылки вопросов вообще.
Будьте вежливы. Используйте фразы "Пожалуйста" и "Заранее благодарен". Дайте понять, что благодарны людям, бесплатно посвящающим вам свое время.
Если честно, это не так важно, как отсутствие ошибок в тексте вопроса, ясность, точность и детальность описания, использование открытых форматов и т.д. (и не заменяет все перечисленное); хакеры, в общем случае, предпочли бы получать грубые, но технически точные сообщения об ошибках, чем вежливое словоблудие. (Если вас это удивляет, вспомните, что мы ценим вопрос за то, чему он нас учит.)
Однако при нормальном техническом уровне вопроса вежливость действительно повышает вероятность получить полезный ответ.
(Необходимо отметить, что единственное серьезное возражение, полученное на этот документ от ветеранов хакерского движения, связано с рекомендацией использовать фразу "Заранее благодарен". Некоторые хакеры усматривают в ней нежелание благодарить кого бы то ни было после того, как проблема будет решена. Мы рекомендуем благодарить и заранее, и после получения ответа, или выразить свою благодарность по-другому, скажем, фразой "Спасибо за внимание" или "Спасибо за рассмотрение".)
После того, как проблема решена, пошлите сообщение всем, кто вам помог; дайте им знать, чем все закончилось, и поблагодарите еще раз за помощь. Если проблема вызвала общий интерес в списке рассылки или дискуссионной группе, имеет смысл такое сообщение послать туда.
Оптимально будет ответить в нити обсуждения, начатой с исходного вопроса, добавив в теме сообщения пометку 'FIXED', 'RESOLVED', 'РЕШЕНИЕ' или другой не менее очевидный признак решения. В списках рассылки с большим количеством сообщений, потенциальный отвечающий при взгляде на нить обсуждения "Проблема X", завершающуюся сообщением "Проблема X - РЕШЕНИЕ" понимает, что ему не нужно тратить время даже на чтение сообщений (если он лично не считает Проблему X интересной), и поэтому может потратить время на решение другой проблемы.
Такое сообщение не обязательно должно быть длинным и подробным; простое: "Привет! Проблема была связана с разрывом в сетевом кабеле! Спасибо всем. Билл", - уже лучше, чем ничего. Фактически, краткое и вежливое резюме лучше, чем длинная диссертация, если только решение не затрагивает серьезные технические аспекты. Напишите, какие действия позволили решить проблему, но всю последовательность поиска решения повторно описывать не надо.
Для достаточно серьезных проблем можно послать резюме с историей поиска их причин. Опишите окончательную постановку проблемы. Опишите, каким оказалось решение, и укажите тупиковые пути, которых стоит избегать. Назовите всех, кто помог вам: так вы найдете себе друзей.
Помимо проявления вежливости и информирования, такого рода резюмирующее сообщение поможет другим при поиске в архиве списка рассылки/дискуссионной группы/форума точно узнать, какое решение помогло вам, и, значит, может помочь и им.
Последнее, но немаловажное, - такого рода сообщение помогает всем участвовавшим в обсуждении получить чувство удовлетворения от того факта, что проблема закрыта. Если вы сами - не технический специалист и не хакер, просто поверьте нам, что это чувство очень важно для гуру и экспертов, к которым вы обращались за помощью. Описания проблем, так в итоге и не решенных - это сплошное разочарование; хакеры жаждут увидеть их решенными. Хорошая карма, возникающая, когда вы удовлетворяете эту жажду, очень поможет вам при задании вопроса в следующий раз.
Подумайте, как вы можете предотвратить возникновение такой же проблемы у других пользователей в будущем. Спросите себя, поможет ли изменение документации или списка ЧаВО, и если да - пошлите соответствующее изменение тем, кто поддерживает эти документы.
Среди хакеров такое поведение, на самом деле, считается важнее обычной вежливости. Именно так зарабатывают репутацию хорошего командного игрока, которая является очень ценным качеством.
Есть древняя и священная традиция: если вы получаете ответ "RTFM", значит, отвечающий думает, что вам стоит почитать руководство (Read The Fucking Manual). Он почти наверняка прав. Читайте.
У ответа RTFM есть более молодой аналог. Если вы получаете ответ "STFW", значит, отвечающий думает, что вам стоит поискать ответ в сети (Search The Fucking Web). Он почти наверняка прав. Ищите.
В Web-форумах вам еще могут предложить поискать в архивах форума. Фактически, отвечающий может оказаться настолько любезен, что даст ссылку на предыдущее обсуждение, в котором эта проблема была решена. Но не надейтесь на это; поищите в архивах сами, прежде чем спрашивать.
Часто тот, кто посылает один из подобных ответов, имеет под рукой руководство или web-страницу с необходимой вам информацией, и смотрит на нее, когда набирает ответ. Эти ответы означают, что, по его мнению, во-первых, необходимую вам информацию легко найти и, во-вторых, вы большему научитесь при поиске информации, чем если вам ее преподнесут под нос на тарелочке.
Вас это не должно возмущать; по хакерским стандартам, он оказал вам достаточное уважение уже тем, что не проигнорировал вопрос. Вы должны поблагодарить ответившего за его отеческую доброту.
Большая часть того, что может показаться грубостью, в хакерских кругах используется не для оскорбления. Это, скорее, следствие непосредственного, без обиняков, стиля общения, естественного для людей, старающихся решать проблемы, а не казаться другим мягкими и пушистыми.
Когда встречаетесь с грубостью, постарайтесь реагировать спокойно. Если кто-то действительно выходит за рамки допустимого, вполне вероятно, что ведущий списка рассылки, дискуссионной группы или форума поставит его на место. Если этого не произошло и вы выйдете из себя, вполне вероятно, что ставшее причиной этого лицо ведет себя в рамках норм хакерского сообщества, и все будут считать, что именно вы не правы. Это существенно снизит шансы получения необходимой информации или помощи.
С другой стороны, иногда можно встретиться с грубостью и вызовом, не имеющими никаких видимых оснований. Обратная сторона этой медали в том, что такая реакция является вполне приемлемой формой постановки на место действительных грубиянов, - мы отсекаем их недостойное поведение остро отточенным словесным скальпелем. Однако вы должны быть очень уверены в своей позиции, прежде чем пытаться этим заняться. Грань между указанием на невежливость и началом бессмысленного "базара" (в оригинале - flamewar - прим. переводчика) настолько тонкая, что и сами хакеры нередко ее переходят. Если вы - новичок или просто случайный читатель, шансов избежать такой грубой ошибки немного. Если вас интересует информация, а не развлечение, лучше уберите руки с клавиатуры и не рискуйте вступать в подобные дискуссии.
(Некоторые настаивают, что многие хакеры страдают мягкой формой аутизма, или синдрома Аспергера, и у них просто не хватает той части мозга, которая отвечает за "нормальное" социальное взаимодействие между людьми. Возможно, это правда, а может и нет. Если вы - не хакер, представление о хакерах как о больных на голову может вам помочь смириться с нашими странностями. Думайте, что хотите. Нас это не волнует; нам нравится быть именно такими, и к клиническим диагнозам мы относимся со здоровым скептицизмом.)
В следующем разделе мы поговорим о другой проблеме; о своего рода "грубости", с которой можно встретиться, когда именно вы не правы.
Вполне вероятно, что вы уже облажались несколько раз в хакерских форумах — так, как описано в этой статье, или аналогично. И вам уже объяснили, как именно вы облажались, возможно, в красках. При всем честном народе.
Когда такое происходит, самая неудачная реакция - жаловаться на случившееся, считать себя оскорбленным словесно, требовать извинений, вопить, задыхаться от гнева, подавать иски в суд, жаловаться работодателям обидчиков, не опускать за собой сидения унитаза и т.п. Вместо всего этого надо сделать следующее:
Смириться. Это - нормально. На самом деле, это хорошо и целесообразно.
Общественные нормы не поддерживают себя сами - их поддерживают люди, активно, в открытую, публично эти нормы применяющие. Не думайте, что критиковать должны только в личной переписке - это не так. Не имеет смысла принимать как личное оскорбление чей-то комментарий, что одно из ваших утверждений - ошибочно, или что у него есть другое мнение. Так действуют неудачники.
Были хакерские форумы, где, исходя из неправильно понятой гипертрофированной вежливости, участникам запрещалось посылать сообщения об ошибках в чужих сообщениях. Им было сказано: "Если не хотите помочь пользователю, молчите". Отток знающих участников в другие форумы привел к их вырождению в бессмысленную болтовню и к полной бесполезности с технической точки зрения.
Выбирайте: преувеличенная "дружественность" (такого рода) или полезность.
Помните: когда этот хакер пишет, что вы облажались, и (не важно, насколько грубо) просит вас больше так не делать, он делает это, заботясь, во-первых, о вас, а во-вторых, о своем сообществе. Ему было бы намного проще вас проигнорировать и вычеркнуть из своей жизни. Если вас не хватает на благодарность, сохраните достоинство, - не жалуйтесь, и не думайте, что с вами будут обращаться как с хрупкой куклой лишь потому, что вы - новичок с театрально гиперчувствительной душой и иллюзиями о собственной значимости.
Иногда люди будут переходить на личности, вступать в грязную полемику без видимой причины и т.д., даже если вы и не облажались (или облажались только в их воображении). Возмущаться в этом случае, - способ действительно облажаться.
Эти "скандалисты" - либо ламеры, которые ничего не понимают, но считают себя экспертами, или потенциальные психологи, проверяющие, облажаетесь вы или нет. Другие читатели их либо проигнорируют, либо найдут способы самостоятельно с ними разобраться. Поведение скандалистов создает проблемы для них самих, что не должно вас беспокоить.
Не позволяйте также втянуть себя в бесполезный "базар". Такие обсуждения лучше игнорировать, разобравшись предварительно, что это действительно бесполезный "базар", а не намеки на то, почему вы действительно облажались, и не тонко зашифрованные ответы на ваши фактические вопросы (так тоже бывает).
Вот ряд классических глупых вопросов и о чем думают хакеры, когда на них не отвечают.
Вопрос: Где можно найти программу или ресурс X?
Ответ: Там же, где и я ее взял, придурок, — найти в Internet. Боже, неужели еще не все знают, как пользоваться Google?
Вопрос: Как можно с помощью X сделать Y?
Ответ: Если вы хотите сделать Y, надо так и спрашивать, не предполагая заранее использование метода, который может вовсе не подходить. Вопросы такого вида часто задают те, кто не просто ничего не знает об X, но сбит с толку решаемой проблемой Y и слишком сконцентрирован на деталях своей конкретной ситуации. Обычно лучше игнорировать таких людей, пока они не сформулируют свою проблему лучше.
Вопрос: Как сконфигурировать приглашение командного интерпретатора?
Ответ: Если вы достаточно умны, чтобы этим заинтересоваться, вам хватит ума и на самостоятельный поиск ответа.
Вопрос: Можно ли преобразовать AcmeCorp-документ в TeX-файл с помощью программы преобразования файлов Bass-o-matic?
Ответ:Попробуйте и узнаете. Так вы, во-первых, узнаете ответ, а, во-вторых, перестанете тратить мое время.
Вопрос: Моя {программа, конфигурация, мой оператор SQL} не работает
Ответ: Это вообще не вопрос, и я не собираюсь задавать еще десяток наводящих вопросов, чтобы выяснить, в чем на самом деле состоит ваша проблема — у меня есть дела и поинтереснее. Когда я вижу подобные вопросы, то обычно посылаю один из следующих ответов:
  • Вам к этому больше нечего добавить?
  • Ой, это очень плохо. Надеюсь, вы уже это исправили.
  • И какое это имеет отношение лично ко мне?
Вопрос: У меня проблемы с Windows-машиной. Не могли бы вы помочь?
Ответ: Да. Выкиньте этот Microsoft-овский мусор и поставьте себе операционную систему с открытым исходным кодом, например, Linux или BSD.
Примечание: вы можете задавать вопросы, связаные с Windows-машинами, если они относятся к программе, имеющей официальную версию для Windows, или взаимодействующей с машинами под Windows (например, Samba). Просто не удивляйтесь ответу, что проблема - в Windows, а не в самой программе, потому что Windows - настолько "крива" в целом, что зачастую именно так и бывает.
Вопрос: Моя программа не работает. Я думаю, проблема в системном компоненте X.
Ответ: Хотя и возможно, что именно вы первым обнаружили очевидную ошибку в системных вызовах и библиотеках, интенсивно используемых сотнями или тысячами разработчиков, но намного вероятнее, что вы просто не разобрались. Серьезные утверждения требуют серьезных доказательств; если вы делаете подобные утверждения, их надо подкреплять ясным и исчерпывающим описанием ситуации, в которой возникает сбой.
Вопрос: У меня возникли проблемы с установкой Linux (или X). Не могли бы вы помочь?
Ответ: Нет. Чтобы решить эту проблему, мне нужен непосредственный доступ к вашей машине. Задайте вопрос местной группе пользователей Linux, которые смогут помочь лично. (Список групп пользователей можно найти здесь.)
Примечание: вопросы об установке Linux могут быть уместными в форуме или списке рассылки, посвященном конкретному дистрибутиву, если проблема связана с этим дистрибутивом, или в форумах локальных групп пользователей. В этом случае, не забудьте точно описать подробности сбоя. Но сначала тщательно поищите в Web, указав ключевые слова "linux" и все подозрительные компоненты оборудования.
Вопрос: Как взломать пароль пользователя root/получить расширенные привилегии/прочитать чужую электронную почту?
Ответ: Да ты просто пошляк, раз хочешь такое сделать, и идиот, раз просишь хакера тебе помочь.
Наконец, я собираюсь показать на примерах, как правильно задавать вопросы. Я представлю пару вопросов об одной и той же проблеме, один - заданный глупо, а второй - правильно.

Глупо: Где мне найти информацию о Foonly Flurbamatic?
Этот вопрос просто напрашивается на ответ "STFW".
Правильно: Я попытался поискать в Web с помощью Google по запросу "Foonly Flurbamatic 2600", но полезных ссылок не получил. Не знает ли кто-нибудь, где найти информацию о программировании этого устройства?
Этот вопрошающий уже поискал в Web и, похоже, у него - реальная проблема.

Глупо: Я не могу скомпилировать код проекта foo. Почему он некорректен?
Он думает, что кто-то другой облажался. Самоуверенный тип.
Правильно: Код проекта foo не компилируется в ОС Nulix версии 6.2. Я прочитал ЧаВО (FAQ), но там нет ничего о проблемах с Nulix. Вот запись сеанса компиляции; что я сделал неправильно?
Он указал среду, прочитал часто задаваемые вопросы, показал сообщение об ошибке, и он не думает, что причина его проблемы в ошибке кого-то другого. Этому парню можно уделить немного внимания.

Глупо: У меня проблемы с материнской платой. Не может ли кто-нибудь помочь?
Любой хакер на такой вопрос в уме ответит, скорее всего так: "Хорошо. Может, тебе еще помочь срыгнуть и пеленку поменять?", и нажмет клавишу Delete.
Правильно: Я попробовал X, Y и Z на материнской плате S2464. Когда это не сработало, я попробовал A, B и C. Обратите внимание на странный симптом при попытке сделать C. Очевидно, что эта фигня не фурычит, но результаты получаются непредсказуемые. Что обычно приводит к тому, что не фурычат многопроцессорные материнские платы с Athlon? Нет ли у кого идей для дополнительных тестов, которые помогут изолировать проблему?
Этот товарищ, напротив, кажется, достоин ответа. Он продемонстрировал способность решать проблемы, а не просто ждет, пока ответ упадет ему с неба.
В последнем вопросе обратите внимание на небольшую, но важную разницу между "Дайте мне ответ" и "Пожалуйста, помогите разобраться, какие дополнительные диагностические действия можно выполнить, чтобы прояснить ситуацию".
Фактически, форма задания последнего вопроса очень похожа на использованную реально в августе 2001 года в списке рассылки linux-kernel. Я (Эрик) задал тогда этот вопрос. Я наблюдал странные зависания на материнской плате Tyan S2464. Участники списка рассылки предоставили ценную информацию, позволившую мне от этих зависаний избавиться.
Задавая вопрос так, как это сделал я, вы даете людям пищу для размышлений; я сделал для них участие в решении проблемы простым и привлекательным. Я продемонстрировал уважение способностей коллег и пригласил их к обсуждению на равных. Я также продемонстрировал, что ценю их время, описав, по каким тупиковым ветвям я уже прошел.
В конечном итоге, когда я поблагодарил всех и подчеркнул, насколько хорошо прошел процесс решения проблемы, один из участников списка рассылки обратил внимание на то, что, по его мнению, все получилось не потому, что я - "известный человек" в этом списке, а из-за правильной формы постановки вопроса.
Хакеры, в определенном отношении, очень жестокая интеллектуальная элита (в оригинале - meritocracy. Прим. переводчика). Я уверен, что он прав, и если бы я облажался, то был бы раскритикован или проигнорирован, независимо от прежних заслуг. Его предложение описать ситуацию в качестве инструкции для всех остальных стало непосредственной причиной составления этого руководства.
Если вы не получили ответа, не принимайте это на свой счет, как наш отказ помочь лично вам. Иногда участники форума просто не знают ответ. Отсутствие ответа не равносильно игнорированию, хотя извне разницу заметить сложно.
В общем случае, повторная посылка вопроса - не лучшая идея. Это будет воспринято как бессмысленная надоедливость.
Есть и другие источники помощи, к которым можно обратиться, причем часто более приспособленные к нуждам начинающих.
Существует множество групп пользователей в сети и на местах, с энтузиазмом занимающихся программным обеспечением, хотя многие их участники в жизни не написали ни одной серьезной программы. Эти группы часто формируются для того, чтобы участники помогали друг другу и новым пользователям.
Есть также масса коммерческих компаний, с которым можно заключить контракт на поддержку, как крупных, так и маленьких (одни из наиболее известных - Red Hat и Linuxcare, но есть и множество других). Пусть вас не пугает идея платить за поддержку! В конечном итоге, если необходим капремонт двигателя автомобиля, вы ведь отдадите его в мастерскую и заплатите за ремонт. Даже если программное обеспечение ничего не стоило, нельзя рассчитывать, что его всегда будут бесплатно поддерживать.
У популярного программного обеспечения, вроде Linux, на одного разработчика приходится, по крайней мере, 10000 пользователей. Один человек просто не может справиться с поддержкой 10000 пользователей. Помните, что даже если за поддержку приходится платить, это все равно обходится намного дешевле, чем когда приходится покупать еще и само программное обеспечение (да и поддержка закрытого программного обеспечения обычно стоит дороже и выполняется менее компетентными специалистами, чем в случае программного обеспечения с открытым исходным кодом).
Будьте великодушны. Связанный с проблемой стресс может делать невежливыми или глупыми людей, которые таковыми не являются.
На первую ошибку укажите в частном порядке. Нет необходимости публично унижать человека, который, возможно, честно ошибается. Начинающий пользователь может не знать, как искать в архивах или где находится или публикуется список часто задаваемых вопросов.
Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа. Не направляйте людей по ложному пути просто потому, что вам приятно побыть в роли эксперта. Будьте скромны и честны; показывайте хороший пример для спрашивающих и коллег.
Если не можете помочь, не мешайте. Не шутите по поводу процедур, которые могут разрушить среду пользователя — этот болван может принять ваши шутки как руководство к действию.
Задавайте дополнительные вопросы, чтобы получить больше информации. Если это делать правильно, спрашивающий кое чему научится, — да и вы тоже. Попытайтесь превратить плохой вопрос в хороший; помните - все мы были начинающими.
Хотя простой ответ RTFM бывает оправдан, когда дается просто лентяю, ссылка на документацию (даже если это набор ключевых слов для поиска в Google) все же лучше.
Если уж вы отвечаете на вопрос, давайте ответ по сути. Не предлагайте наспех придуманные обходные пути, если используется в принципе не то средство или неверный подход. Предлагайте хорошие средства. Переформулируйте вопрос.
Помогите общественности извлечь пользу из вопроса. Когда встречаетесь с хорошим вопросом, спросите себя: "Как надо изменить соответствующую документацию или список ЧаВО, чтобы больше этот вопрос никто не задавал?". Затем пошлите соответствующее дополнение тому, кто поддерживает эти документы.
Если для ответа на вопрос пришлось провести исследование, поделитесь своим опытом, а не пишите так, как будто ответ свалился на вас с неба. Ответить на один хороший вопрос - это как накормить голодного один раз, а вот изложить методику исследования на примере, - значит, научить добывать еду на всю жизнь.
Если вам необходима информация по основам работы персональных компьютеров, ОС Unix и сети Internet, см. руководство The Unix and Internet Fundamentals HOWTO.
При создании программного обеспечения или выпуске исправлений для программ, постарайтесь следовать принципам, изложенным в руководстве Software Release Practice HOWTO.

Примечания переводчика

Оригинал статьи взят отсюда. Ваши замечания и предложения по данному переводу шлите мне.
Обратите внимание, что это - перевод версии 3.1 (от 28 октября 2004 года), существенно изменившейся и дополненной. Если вы вместо ссылок на этот документ размещаете его текст полностью, обновите его, пожалуйста!