Правильний спосіб кодування DCI у Ruby

Source page: http://mikepackdev.com/blog_posts/24-the-right-way-to-code-dci-in-ruby

Багато статей, знайдених у співтоваристві Ruby, у значній мірі спрощують використання DCI. Ці статті, у тому числі  моя власна, показують, як DCI наділяє ролями об’єкти під час виконання, тобто суть архітектури DCI. Багато постів стосуються DCI таким чином:

class User; end # Data
module Runner # Role
  def run
    ...
  end
end

user = User.new # Context
user.extend Runner
user.run

Є кілька недоліків у таких надто спрощених прикладах. По-перше, це сприймається як «Ось як зробити DCI». DCI – це набагато більше, ніж просто продовження об’єктів. По-друге, це висуває наперший план #extend як йти до допомоги додавання методів до об’єктів під час виконання. У цій статті я хотів би особливо звернутися до колишнього питання: DCI за тільки що проходять об’єкти. Наступний пост буде містити порівняння методів наділення ролями об’єктів із використанням #extend й іншими способами.

DCI (Data-Context-Interaction, дата-контекст-взаємодія)

Як вже говорилося раніше, DCI це набагато більше, ніж просто розширення об’єктів під час виконання. Йдеться про захоплення ментальної моделі кінцевого користувача і відновлення, що в підтримуваний код. Це зовні → в підході, подібно BDD, де ми розглядаємо взаємодію з користувачем першого і моделі даних другий. Зовні → в підході є однією з причин, чому я люблю архітектуру; він добре вписується в стиль BDD, що додатково сприяє проверяемость.

Важливо знати про DCI, що це більше, ніж просто код. Йдеться про процес і людей. Вона починається з принципами, що лежать в Agile і Lean і розширює ті в коду. Реальна вигода наступного DCI є те, що він грає добре з Agile і Lean. Йдеться про ремонтопридатність коди, реагувати на зміни, і розв’язку, що система  робить  (це функціональність) від того, що система  є  (це модель даних).

Візьму підхід поведінки керованого до реалізації DCI в додатку Rails, починаючи з взаємодією і переходом до моделі даних. Здебільшого, я буду писати код першого потім тест. Звичайно, як тільки у вас є тверде розуміння компонентів за DCI, ви можете писати тести в першу чергу. Я просто не відчуваю, що першочергове написання тестів – це чудовий спосіб пояснення понять.

Історії користувачів

Призначені для користувача історії є важливою особливістю DCI, хоча і не відрізняється від архітектури. Вони відправна точка визначення того, що система робить. Одна з красунь, починаючи з одними історіями в тому, що він добре вписується в Agile процес. Як правило, ми будемо приділяти історію, яка визначає нашу функцію кінцевого користувача. Спрощена історія може виглядати наступним чином:

"As a user, I want to add a book to my cart."

На даний момент ми маємо загальне уявлення про функції ми будемо реалізує.

Відступ: більш формальне впровадження DCI зажадає перетворення історії користувача в прецеденті. Прецедент потім надати нам додаткові пояснення на вхід, вихід, мотивація, ролі і т.д.

Написання певних тестів

Ми повинні мати достатньо на даному етапі, щоб написати приймальне випробування для цієї функції. Давайте використовувати  RSpec  і  Capybara:

spec/integration/add_to_cart_spec.rb

describe 'as a user' do
  it 'has a link to add the book to my cart' do
    @book = Book.new(:title => 'Lean Architecture')
    visit book_path(@book)
    page.should have_link('Add To Cart')
  end
end

У дусі BDD ми почали визначити, яким чином наша модель предметної області (наші дані) буде виглядати. Ми знаємо, що книга буде містити  назву  атрибут. У дусі DCI, ми визначили контекст, для якого цей випадок використання розігрує і актори, які грають ключові ролі. Контекст додавання книги в кошик. Актор ми визначили є користувач.

Насправді, ми могли б додати більше тестів для подальшого покриття цієї функції, але вищезгадані костюми нам добре зараз.

«Ролі»

Актори грають роль. Для цієї конкретної функції, ми на самому справі є тільки один актор, користувач. Користувач грає ролі клієнта шукає, щоб додати елемент в їх кошик. Ролі описують алгоритми, використовувані для визначення того, що система  робить.

Давайте закодуємо його:

app/roles/customer.rb

module Customer
  def add_to_cart(book)
    self.cart << book
  end
end

Створення нашої ролі клієнта допомагає дражнити більше інформації про нашу моделі даних користувача. Тепер ми знаємо, що ми будемо мати потребу в  #cart  методі на будь-яких об’єктах даних, які грають роль клієнта.

Роль клієнта визначено вище не розкриває багато про те, що  #cart  є. Одне рішення, дизайн я зробив завчасно, для простоти, щоб припустити, віз буде зберігатися в базі даних замість sesssion. #cart  метод, визначений в будь-який актор, який грає роль клієнта не повинна бути складною реалізації возі. Я просто припустити просту асоціацію.

Ролі також дружать з поліморфізмом. Роль клієнта може грати  будь-який  об’єкт, що відповідає #cart  методу. Сама роль ніколи не знає, який тип об’єкта буде збільшувати, залишаючи це рішення до контексту.

Написання певних тестів

Давайте стрибати назад в режим тестування і написати кілька тестів навколо нашої недавно створеної ролі.

spec/roles/customer_spec.rb

describe Customer do
  let(:user) { User.new }
  let(:book) { Book.new }

  before do
    user.extend Customer
  end

  describe '#add_to_cart' do
    it 'puts the book in the cart' do
      user.add_to_cart(book)
      user.cart.should include(book)
    end
  end
end

Вище тестовий код висловлює також, як ми будемо використовувати цю роль, клієнт, в даному контексті, додавши книгу в кошик. Це робить скутер справді писати контекстне мертву просто.

«Контекст»

У DCI, контекст середовища, для яких об’єкти даних виконують свої ролі. Існує завжди принаймні один контекст для кожної історії одного користувача. В залежності від складності користувальницької історії, може бути більше, ніж один контекст, можливо, що вимагає розповіді ломка. Метою контексту є підключення ролей (що система  робить) для об’єктів даних (то, що система  є).

На даний момент ми знаємо, роль, яку ми будемо використовувати, клієнт, і ми маємо сильну ідею про об’єкт даних ми будемо примноженням, користувач.

Давайте закодуємо його:

app/contexts/add_to_cart_context.rb

class AddToCartContext
  attr_reader :user, :book

  def self.call(user, book)
    AddToCartContext.new(user, book).call
  end

  def initialize(user, book)
    @user, @book = user, book
    @user.extend Customer
  end

  def call
    @user.add_to_cart(@book)
  end
end

Оновлення: реалізація Джим Коплі по контексти використовує AddToCartContext#execute в якості контексту  тригера. Для підтримки Ruby, ідіоми, пуття і лямбда, приклади були змінені для використання AddToCartContext#call.

Кілька ключових моментів слід відзначити:

• Контекст визначається як клас. Акт екземпляра класу і виклику це  #call  метод відомий як  запуск.

• Маючи метод класу  AddToCartContext.call  просто зручний метод для полегшення запуску.

• Суть DCI в  @user.extend Customer. Об’єкти збільшують даних з ролями спеціальним що дозволяє сильну розв’язку. Там уже мільйон способів ін’єкційні ролей в об’єкти,  #extend  будучи один. В  наступній статті я буду розглядати інші способи, якими це може бути досягнуто.

• Передача призначених для користувача і книжкові об’єктів в контекст може привести до колізії імен методів ролей. Щоб полегшити це, було б прийнятно, щоб пройти user_id і book_id в контексті і дозволяють контексту інстанціювати пов’язані об’єкти.

• Контекст повинен викрити діячів, для яких він є сприятливим. В цьому випадку  attr_reader використовується, щоб виставити @user і @book. @book не діяч в цьому контексті, проте вона схильна до для повноти картини.

Найважливіше: ви повинні рідко доводиться (до незмоги) #unextend ролі з об’єкта. Об’єкт даних, як правило, грають тільки одну роль в той час, в даному контексті. Там повинен бути тільки один контекст в разі використання (акцент: в разі використання, а не користувач історія). Таким чином, ми повинні рідко потрібно видалити функціональні можливості або вводити конфлікти імен. У DCI, це  є  прийнятним для введення декількох ролей в об’єкт в межах даного контексту. Таким чином, проблема конфліктів імен до цих пір живе, але має відбуватися рідко.

Написання певних тестів

Я взагалі не великий прихильник глузливий і гасячи, але я думаю, що це доречно в разі контексти, тому що ми вже перевірили виконання коду в нашій ролі специфікації. На даний момент ми тільки тестування інтеграції.

spec/contexts/add_to_cart_context_spec.rb

describe AddToCartContext do
  let(:user) { User.new }
  let(:book) { Book.new }

  it 'adds the book to the users cart' do
    context = AddToCartContext.new(user, book)
    context.user.should_recieve(:add_to_cart).with(context.book)
    context.call
  end
end

Основна мета коду вище, щоб переконатися, що ми називаємо  #add_to_cart  метод з правильними аргументами. Ми робимо це, встановивши очікування того, що  користувач  діяч в AddToCartContext повинен мати це  #add_to_cart  метод викликається з  книгою в  якості аргументу.

Там не набагато більше DCI. Ми розглянули взаємодію між об’єктами і контекстом, для яких вони взаємодіють. Важливий код вже написаний. Єдине, що залишилося просто дані.

«Дані»

Дані повинні бути стрункими. Гарне емпіричне правило ніколи не визначити методи ваших моделей. Це не завжди так. Краще покласти: «інтерфейси об’єктів даних прості і мінімальні: досить, щоб захопити властивості домену, але без операцій, які є унікальними для будь-якого конкретного сценарію» (архітектура Lean). Дані дійсно має складатися тільки з методів живучості рівня, ніколи, як використовуються збережені дані. Давайте подивимося на модель книги, для якої ми вже дражнили з основних атрибутів.

class Book < ActiveRecord::Base
  validates :title, :presence => true
end

Немає методів. Всі визначення класу рівня стійкості, асоціація і перевірка достовірності даних. Способи, в яких використовується Книга не повинна бути проблемою моделі книги. Ми могли б написати кілька тестів навколо моделі, і ми, ймовірно, слід. Тестування валідацій і асоціації є досить стандартним, і я не буду покривати їх тут.

Тримайте німий ваші дані.

Вбудовується в Rails

Там не багато, щоб сказати про встановлення вище коду в Rails. Простіше кажучи, ми викликаємо наш контекст всередині контролера.

app/controllers/book_controller.rb

class BookController < ApplicationController
  def add_to_cart
    AddToCartContext.call(current_user, Book.find(params[:id]))
  end
end

Ось діаграма, що ілюструє, як DCI компліменти Rails MVC. Контекст стає шлюзом між призначеним для користувача інтерфейсом і моделями даних.

MVC + DCI

Що ми зробили

Наступний може гарантувати свою власну статтю, але я хочу коротко розглянемо деякі з переваг структурування коду з DCI.

• Ми високо розв’язані функціональність системи від того, як дані зберігаються. Це дає нам додаткову перевагу стиснення і легкому поліморфізм.

• Ми створили читається код. Легко міркувати про коді як по іменах файлів і алгоритмами всередині. Це все дуже добре організовано. Див.  Роздратування дядька Боба стосовно можливості читання на рівні файлу.

• Наша модель даних, що система  є, може залишатися стабільною в той час як ми прогресуємо і реорганізувати ролі, що система  робить.

• Ми підійшли ближче до подання кінцевого користувача ментальної моделі. Це основна мета MVC, то, що було спотворено протягом довгого часу.

Так, ми додамо ще один рівень складності. Ми повинні стежити за контексти і ролей на вершині нашого традиційного MVC. Контексти, зокрема, проявляють більше коди. Ми вводимо трохи більше накладні витрати. Однак, з цим накладних витрат йде велика ступінь процвітання. Як розробнику або команді розробників вам судити про те, чи можуть ці переваги вирішити ваші ділові та технічні недуги.

Заключні слова

Проблеми з DCI існують також. По- перше, це вимагає великої зрушення парадигми. Він розроблений, щоб доповнити MVC (Model-View-Controller, модель-вид-контролер), щоб він добре вписується в Rails, але вимагає, щоб перемістити весь код поза контролера і моделі. Як ми всі знаємо, співтовариство Rails є фетиш для введення коду в моделі і контролери. Зрушення парадигми є великим, то, що потребуватиме великої рефакторінга для деяких додатків. Проте DCI, ймовірно, може бути перероблено в на індивідуальній основі випадку, дозволяючи додатки поступово переходити від «ситих моделей, худих контролерів» для DCI. По- друге, вона  потенційно несе зниження продуктивності, через те, що об’єкти розширеної спеціальної.

Основна перевага DCI по відношенню до товариства Ruby, є те, що вона забезпечує структуру для обговорення підтримуваного коду. Там було багато недавньої дискусії в дусі «жиру моделей, змарнілі контролери погано»; не ставте код в контролер або моделі, помістіть його в іншому місці. Проблема полягає в тому, що ми не вистачає вказівки для того, де наш код повинен жити і як вона повинна бути структурована. Ми не хочемо це в моделі, ми не хочемо його в контролері, і ми, звичайно, не хочу його в поданні. Для більшості, дотримуючись цих вимог призводить до плутанини, перебудови, і загальна відсутність узгодженості. DCI дає нам план розірвати рейки форму і створити ремонтопрігодни, перевіряються, розв’язку код.

Відступ: є й інші роботи в цій галузі. Авді Грімм має феноменальну книгу під назвою  Об’єкти Rails  яка пропонує альтернативні рішення.

Щасливого проектування!

Поради щодо Warpzilla – Mozilla для OS/2

Original: http://os2news.warpstock.org/Warpzilla.html 

WarpzillaWarpstock

Стабільні релізи
Тестові версії
Newsbits
  • Firefox 38.8.0 містить помилки, коли під час запуску може викинути Вас з профілю. Ви можете вирішити цю проблему шляхом видалення parent.lock в профілі; якщо це буде повторюватись заново, необхідно знайти причину проблеми.
  • Станом на 11 лютого 2014 року, Mozilla для OS/2 офіційно мертва; все/2 коду підтримки ОС було видалено з вихідного дерева. Однією з головних причин цього була відсутність внесків, і  вони заявили про відсутність бажання зробити так, як було передбачено за кілька місяців до. Тим НЕ менше, була створена вилка з Firefox ESR, і працює над портуванням коду Mozilla/Google IPC.
  • До ESR38, що завантажені шрифти не працюють, і це може привести до сбою, якщо вони не були відключені: user_pref( «gfx.downloadable_fonts.enabled»);
    Це було встановлено за замовчуванням в будує з ESR10 через ESR31.
  • Відсутні функції в OS/2 будує включають: WebGL, iз-за відсутності драйверів апаратного OpenGL; IPC, для захисту від збоїв плагінів (незавершене, але плагіни стають не має значення); і веб-шрифти, для автоматичного завантаження шрифтів і відображення тексту (в даний час працюють в ESR38).
  • Команда IBM кинути роботу на Mozilla для OS/2 багато років назад. Зовнішні розробники заохочені брати участь; один з необхідних інструментів  rc.exe версії 5.00.007.
Схоже
tcpip32.dll Стів Левайн випустив виправлену версію tcpip32.dll, що запобігає дискомфоту, який відчувається при використанні додатків Mozilla; це робить DLL багатопотоковим і робить SMP безпечним.
Exceptq Якщо Warpzilla видає помилку, Exceptq буде видавати звуковий сигнал, а потім створювати звіт про аварію. Дивіться також інформацію NSPR_NO_EXCEPTQ.
Screen Saver Doodle в Якщо ви встановите охоронця екрану Doodle, Warzpilla може визначити, коли ви не взаємодієте з комп’ютером, і виконувати різні фонові і очищаючі завдання під час простою.
RWS З RWS, ви можете відкрити завантаження, використовуючи їх по замовчуванням WPS, а також додаток відображає правильний значок у файлах  і діалогах. Дивіться також інформацію MOZ_NO_RWS.
Lightning Розширення Lightning для Thunderbird і SeaMonkey додає підтримку календаря; на відміну від більшості розширень, версії повинні бути співставлені з конкретними релізами Gecko. Дейв Йео створив основи для  17ESR24ESR,  31ESR і  38ESR Вони вже включені в пакет 45ESR.
Сумісні плагіни Ім’я файлу Примітки
акробат Acrobat 4,05 
Acrobat 5.1
nparos2.dll
nparos25.dll
PDFJS  аддон є життєздатною заміною для плагінів.
Потребує InnoWin Runtime. Щоб цей плагін працював з LIBPATHSTRICT, ви можете використовувати цей патч (для Acrobat 4), слідуйте сказівкам, щоб виправити свою власну версію, або додати\OS2\DLL для BEGINLIBPATH
спалах Flash-11
npflos2.dll Доступні для покупців eComstation Software Subscription; працює тільки на Écs 1.2 і пізніших версіях.
Flashblock дозволяє мати флеш плагін, без збою Flash додфтків (або мають збій браузера через помилку в плагіні, і IPC ще не портовано). Просто натисніть на іконку «Play» для будь-яких флеш об’єктів, які ви хочете відкрити.
спалах Flash 7
npswf2.dll Flash7 пакет виправлений так , що звук працює з LIBPATHSTRICT; Звіти себе як Flash 9
Ява Java 6
npicedt.dll IcedTea-Web плагін працює з OpenJDK 1.6., зі старішими версіями плагіни 1.4.x Java більше не сумісний.
MPlayer MPlayer
npmp.dll Потокове аудіо/відео плагін (MPEG, QuickTime, WMV, ASF, FLV, і т.д.).
DjVu npdjvu.dll DjVu являє собою набір технологій стиснення, формат файлу і програмна платформа для передачі через Інтернет електронних відсканованих документів і зображень з високою роздільною здатністю.
PM Downloader nppmd.dll Захоплює і обробляє завантаження
авто Wget npawgbin.dll
і інші
Захоплює і обробляє завантаження
також має npawgaud.dll і npawgvid.dll для обробки аудіо та відео
GBM npgbm.dll Узагальнений модуль Bitmap може відображати різні формати файлів растрових зображень
META глядач npmeta.dll Дозволяє переглядати * .MET файли
розпакуйте плагін npunzip.dll
Ви можете «встановити» плагіни шляхом простого копіювання їх в директорію плагінів (або ваш каталог плагінів профілю)
Розробники можуть хотіти, щоб перевірити  OS / 2 Plugin Toolkit (від Гоббса), в тому числі це оновлення
ще одне місце , щоб знайти плагін інформація plugindoc
змінні оточення
MOZILLA_HOME Ви можете використовувати змінну оточення MOZILLA_HOME, щоб визначити місце розташування для профілів Warpzilla. За замовчуванням профілі створюються в каталозі додатки. За допомогою цієї змінної, то вони будуть створюватися і використовуватися при% MOZILLA_HOME% \ Mozilla замість цього.
MOZ_ACCELERATED Gecko 2.0 (Firefox 4.x і SeaMonkey 2.1.x) і вище підтримки функцій для прискорення графіки з використанням занурення. Це може бути відключено, відключивши «Використання апаратного прискорення, коли це можливо» в настройках, або ви можете встановити змінні оточення MOZ_ACCELERATED 0. Також відключені при використанні драйвера Panorama, коли тінь буфер включений, оскільки цей драйвер не працює правильно з DIVE. Інші варіанти% MOZ_ACCELERATED% включають в себе по-перше, програмне забезпечення курсору, значення за замовчуванням для інших, SNAP відео драйверів і по-друге, мають апаратний курсор, за замовчуванням для SNAP. Якщо переміщення курсора миші на меню і призводить до закриття відео, встановіть цю змінну в 1. Якщо миша мерехтить при прокручуванні, ви можете спробувати встановити цю змінну в 2, але це може привести до відео з помилками, якщо ваш драйвер не підтримує курсор миші.
MOZ_NO_REMOTE MOZ_NO_REMOTE = 1 зберігає Mozilla від створення вікна повідомлень, так що Warpzilla не може виявити інші. Це корисно лише тоді , якщо ви хочете запускати різні версії ондочасно (з різними профілями).
MOZ_NO_RWS MOZ_NO_RWS = 1 відключає функцію WPS інтеграції , яка надається RWS. З  RWS, ви можете відкрити завантаження, використовуючи їх за замовчуванням WPS асоціації, а також додаток відображає правильний значок в файлі списків і діалогах. Це, як правило, корисні функції, але є принаймні одна помилка, де перетягування за допомогою миші може привести до помилки.
MOZ_PLUGIN_PATH Warpzilla буде шукати Plug-in в. \ Плагінів,% MOZILLA_HOME% \ Mozilla \ Plugins, і в шляху, вказаному в% MOZ_PLUGIN_PATH змінної% навколишнього середовища.
NSPR_NO_EXCEPTQ Якщо Warpzilla аварій, Exceptq буде видавати звуковий сигнал, а потім створить звіт, що містить відомості про помилку. Установка NSPR_NO_EXCEPTQ = 1 відключає це для Warpzilla додатків, але зазвичай ви хочете, щоб інформація була доступна.
NSPR_OS2_NO_HIRES_TIMER Якщо у вас виникли проблеми з мультимедійними додатками, які використовують високий дозвіл таймера OS / 2, ви можете встановити браузери Warpzilla не використовувати його, встановивши змінну Enviroment NSPR_OS2_NO_HIRES_TIMER = 1
KAI_AUTOMODE Починаючи з Firefox 31 (і SeaMonkey 2.28), К Audio Interface використовується для підтримки як DART і Uniaud. Він буде автоматично вибирати на основі того, що ви встановили, але ви можете змінити його, якщо у вас є підстави (наприклад, інтерфейс UniAud не завжди працює, але Uniaud також підтримують DART). Ви можете встановити KAI_AUTOMODE = Uniaud або KAI_AUTOMODE = DART
MOZILLA_USE_EXTENDED_FT2LIB Включена повна підтримка Innotek Font Engine. Цей шрифт насправді може викликати збої в поточних версіях Warpzilla. Mozinst пакет включає в себе «fechg» утиліта для його відключення.
Поради для отримання додаткової функціональності
Профілі SeaMonkey 1.x використовує одні й ті ж дані в профілі, що й Mozilla Suite, в той час як SeaMonkey 2.x, Firefox і Thunderbird мають різні профілі, але можуть змінювати дані профілю,  якщо він знаходиться в %MOZILLA_HOME%. Ви може передавати частини старих профілів в новий профіль; Є поради для SeaMonkeyFirefox і  Thunderbird. Переміщення профілів може бути зроблено, але вимагає ручного зміни шляхів в файлах конфігурації (в першу чергу Prefs.js), а також отримання Registry.dat, щоб вказати правильне розташування профілю. Цей онлайн редактор Registry.dat (для SeaMonkey 1.x) або ці REXX інструменти  можуть допомогти.
Згладжені шрифти Особливості Warpzilla вбудованої підтримки для згладжених шрифтів. Тільки TrueType і Type 1 шрифти можуть бути використані, так що ви можете встановити Sans і замінити WarpSans.
Шрифти MathML Warpzilla підтримує MathML, але ви повинні мати шрифти, які містять необхідні символи, такі як STIX і Asana шрифти. Після установки шрифтів, ви можете перевірити MathML .
Перетягування Warpzilla особливості повного опору і падіння підтримки, як і з браузера. Ви можете утримувати клавішу Ctrl, якщо ви хочете скопіювати зображення і веб-сторінки, а не просто створювати об’єкти URL.

Киньте їх на Mozilla прес Mozilla отримає цей відформатовані як
об’єкт WPSUrl вміст об’єкта Url, HTML, і текст
будь-який файл шлях об’єкта Url, HTML, і текст
будь-який файл Alt вміст файлу текст
DragText Url Url текст Url, HTML, і текст
DragText Текст  текст текст
Текст витягав з сумісного
додатка (наприклад , EPM, GCJava)
  текст текст
SYS2070 Якщо ви отримуєте SYS2070 збій при спробі запустити Mozilla, це означає, що неправильна версія DLL була знайдена. Одним з таких рішень може допомогти:

  • Видалити веб-браузер IBM з LIBPATH
  • Ви неправильно встановити (розпаковані в старий каталог)
  • У вас є інша версія працює без використання LIBPATHSTRICT
Зміна Prefs Найпростіший спосіб змінити переваги приблизно такий: на сторінках конфігурації є налаштування для багатьох із них. Якщо ви вирішили внести зміни безпосередньо в файл настройок (prefs.js), вони повинні бути зроблені, коли Warpzilla закрита, або вони не будуть збережені; він перезаписує файл, коли він виходить! Ви повинні також уникати використання редактора, який приєднує EOF характер (наприклад, e.exe).
В якості альтернативи модифікують prefs.js, ви можете створити файл user.js. Цей файл ніколи не модифікується Mozilla і перекриває будь-які налаштування в prefs.js
Використання вкладок Ви можете переміщатися між вкладками за допомогою клавіатури, використовуючи Ctrl-PgUp і Ctrl-PgDn або Ctrl-Tab.
Ви можете зберегти закладку, яка буде знову відкрита коли відкриті всі вкладки в даний момент браузера, вибравши закладку цієї сторінки. Ви навіть можете додати або видалити URL-адресу з цієї вкладки, так як вона розглядається як folder. У Firefox 2.0, кожна вкладка має кнопку закриття. Якщо ви хочете відновити старе поведінка, встановити «browser.tabs.closeButtons» до 3.
Сценарій таймаут Якщо у вас виникають проблеми з деякими Javascript, ви можете скоротити кількість часу, який витрачається на «скасування сценарію» і з’явиться діалогове вікно. Ви можете змінити «dom.max_script_run_time» і «dom.max_chrome_script_run_timeзначення» на кількість секунд, які вважаєте за потрібне, щоб перш ніж з’явиться діалогове вікно, в якому перший варіант для скриптів на веб – сторінках, а другий варіант для сценаріїв в призначений для користувача інтерфейс (включаючи розширення!).
Закладки Warpzilla перейшли до використання SQLite бази даних для закладок, а не стандартний файл bookmarks.html. Можна автоматично імпортувати і експортувати файл bookmarks.html при запуску і зупинці, хоча і з деякими незначними застереженнями.
SQLite SQLite база даних, що використовуються в Warpzilla, можуть мати тенденцію до зростання надмірно великим. Ви можете використовувати SQLite браузер для «вакууму» (компактного) з * .sqlite файлів бази даних у вашому профілі, в той час як браузер закритий; це буде поліпшити продуктивність у час виконання. База даних «місць» також може бути ущільнений в Warpzilla, використовуючи  консоль помилок. Іншим варіантом є UPSSV пакет.
Іконки Якщо вам не подобаються іконки в Mozilla 1.1 і вище, ви можете змінити їх, замінивши файли в каталозі\хрому іконки. Є деякі пакети значків доступні, але люди повідомляли про проблеми, щоб змушувати їх працювати в OS/2. Клаус Стаедтлер створила пакет значка, який використовує стандартні значки, але правильно масштабується для OS/2.
Ви можете отримати іконки для більш вікон, помістивши іконки з цими іменами: commonDialog.ico, profileWindow.ico і default.icoPhil Паркер створив кілька Firebird значки, засновані на конструкції полум’я, знайденої на веб-сайті Firebird. З невеликим кількістю підштовхування, він також зробив ще дві іконки для нас; один з Firebird значок на бета Mozilla веб-сайту, а один знаходиться на скріншоті Stardock. Зверніть увагу, що OS/2 іконки не можуть бути переглянуті в Mozilla, необхідно зберегти їх на диск щоб побачити їх! Є деякі Firefox іконки також на Гоббса.
FavIcons Mozilla має GUI-конфігуруються опції для «іконки веб – сайту», але є і прихована опція для підтримки Favicon (нестандартні IE стиль), який по замовчуванням виключений. Щоб включити підтримку Favicon, використовуйте цю опцію:
user_pref («browser.chrome.favicons», правда); Ви також можете включити іконки сайту в меню закладок, встановивши цей параметр:
user_pref («browser.chrome.load_toolbar_icons», 2);
Курсори Ви можете перевірити підтримку стилів CSS курсору на цій сторінці зразка
Throbbers Ви можете змінити Throbber в Mozilla, створивши хром\userChrome.css файл у вашому профілі. Він повинен містити наступне:

# Штурман-Throbber
{
список-стиль-зображення: URL ( "animthrob_single.gif") важливо ;!
}
# Штурман-Throbber [зайнятий = "істина"]
{
список-стиль-зображення: URL ( "animthrob.gif") важливо ;!
}

Існує хороший Throbber ви можете використовувати Netscape. Просто помістіть файли зображень в каталозі вашого профілю, поряд з userChrome.css

URL Throbber Ви також можете змінити URL, що Throbber йде, коли натиснув на:
user_pref («browser.throbber.url», »http://www.google.com/»);
user_pref («messenger.throbber.url», »http://www.google.com/»);
user_pref («compose.throbber.url», »http://www.google.com/»);
user_pref («addressbook.throbber.url», »http://www.google.com/»);
Поле введення URL Якщо ви хочете, щоб поле введення URL, щоб правильно працювало (не виділяючи все при натисканні на нього), ви можете використовувати цю установку:
user_pref («browser.urlbar.clickSelectsAll»);
Агент користувача Якщо ви хочете змінити агент користувача, зазначений в браузері, ви можете використовувати цю установку:
user_pref («general.useragent.override», «Mozilla / 4,61 [о] (OS / 2, U)»); Ви також можете подивитися на prefbar, який має меню з декількох варіантів.
Меню Якщо вам не подобається переміщення курсора, ви можете додати затримку, щоб уповільнити його:
user_pref («ui.submenuDelay», 7000);
або зупинити його від того, що відбувається:
user_pref («ui.submenuDelay», -1);
Пружинні папки Пружинні папки були в Mozilla Mail & Newsgroups в протягом деякого часу. Наведіть курсор миші на видиму папку і виберіть потрібну папку для подачі повідомлення. «Нормальна» поведінка для системи папок, щоб потім залишається відкритим, але можна легко ввімкнути автоматичне закриття таких «вигнутих» папок з наступним доповненням до prefs.js:
user_pref («ui.treeCloseDelay» 1000) ; Інші аспекти подпружиненной папки також можуть бути змінені; значення за замовчуванням:
user_pref («ui.treeOpenDelay» 1000);
user_pref («ui.treeLazyScrollDelay», 150);
user_pref («ui.treeScrollDelay», 100);
user_pref («ui.treeScrollLinesMax», 3);

 

Заголовок відповіді Ви можете легко змінити заголовок відповідного по замовчуванням для поштових і новинних повідомлень включають дату вихідного повідомлення, або що-небудь що ви хотіли б отримувати. user_pref («mailnews.reply_header_type», 2); це краще за замовчуванням; см MozillaZine більше варіантів.
Цитата Thunderbird 3.x і 2.x SeaMonkey процитують тільки обрану частину повідомлення при відповіді на нього. Ви можете відключити цю функцію:
user_pref («mailnews.reply_quoting_selection», False);
Максимальна кількість підключень Ви можете спробувати збільшити максимальні постійні з’єднання на сервер; Як повідомляється, це може значно прискорити завантаження сторінок на деяких сайтах.
user_pref ( «network.http.max-стійкі-з’єднання-на-сервер», 8);
Протоколи Тепер можна визначити свої власні протоколи, так що ви можете запустити все, що ви хочете від Warpzilla. Наприклад, для редагування файлу CONFIG.SYS в редакторі EPM з URL «ЕПМ:C:\CONFIG.SYS» необхідно додати наступні параметри:
user_pref («applications.epm», «C:\\OS2\\додатки\\epm.exe »);
user_pref («applications.epm.parameters», «% URL%»); Warpzilla тепер має «telnet:”протокол вбудований в os2pref.js, який працює telnetpm.
Mailcap Ви можете налаштувати інформацію MIME, який використовується в Mozilla. Файл mime.types відображає типи MIME для розширення файлів, в той час як файл mailcap визначає допоміжні програми для запуску для даного типу MIME. Додайте ці рядки:
user_pref («helpers.global_mailcap_file», «X:\\HOME\\mailcap»);
user_pref («helpers.global_mime_types_file», «X:\\HOME\\ mime.types»);
user_pref («helpers.private_mailcap_file», «X:\\ПОЧАТОК\\ mailcap.»);
user_pref ( «helpers.private_mime_types_file», «X:\\HOME\\ mime.types.»);Потім створіть відповідні файли. Ви можете побачити приклад файлу mailcap, який повинен дати вам ідею. Ви можете знайти комплексний mime.types файл з веб-сервера (Apache) або дистрибутивів.
Cookies Firefox 2.0 видалена можливість тільки дозволяючи куки з ініціації веб – сайту. Ви можете відновити цю поведінку з допомогою цього параметра:
user_pref («network.cookie.cookieBehavior», 1);
Повідомлення поштою Існує недокументований спосіб отримати новий індикатор пошти на WarpCenter, який тепер підключили до Mozilla, починаючи з версії 1.1. Ви можете налаштувати його таким чином: 1. Створити значок на робочому столі з ВД об’єкта <CCINBOX>, використовуючи цей REXX код:

/ * * /
називають RxFuncAdd 'SysCreateObject', 'RexxUtil', 'SysCreateObject'
Результат = SysCreateObject ( 'WPProgram', 'Mozilla Mail', '<WP_DESKTOP>', 'OBJECTID = <CCINBOX>');

Налаштувати цей об’єкт, щоб відкрити «Mozilla-Mail» з відповідним шляхом info.

2. Додати іконки пошти в вашому WarpCenter; вам потрібен менеджер ресурсів  і  NewMail.Zip. Розпакуйте обидва цих файлів в тимчасовий каталог, і зробити копію \ OS2 \ DLL \ SCENTER.DLL там. Щоб додати значки, виконайте наступну команду:

resmgr -a scenter.dll scenter.res

Тепер замініть \OS2\DLL\SCENTER.DLL з щойно створеного (я пропоную використовувати утиліту для розблокування).

3. Після перезавантаження, ваш Warpcenter повинен мати значок пошти. Існує mailtest.exe застосування в NewMail.Zip, яка може бути використана для перевірки працездатності за межами Mozilla.

Якщо ви хочете налаштувати іконки, редагувати mail.bmp або newmail.bmp, а потім запустити компілятор ресурсів відтворювати scenter.res.


Якщо ви хочете, щоб видалити новий індикатор пошти в Warpcenter, видаліть значок пошти в папці Mozilla (або один створені вами, дотримуючись інструкції вище). Після перезавантаження, пропаде додаткова кнопка.

За замовчуванням додатка Існує підтримка для використання зовнішніх додатків, налаштованих по замовчуванням для браузера та електронної пошти. Ви можете використовувати або ConfigApps утиліту або  Інтернет інтеграції додатків, який також включає в себе Run! утиліта і налаштувати його для вас.
Зовнішні програми електронної пошти Можна також вказати поштову програму вручну через ці переваги:
user_pref («applications.mailto», «X:\\шлях\\до\\mail_prog.cmd»);
user_pref («applications.mailto.parameters», «\»% URL% \ »»);
user_pref («network.protocol-handler.external.mailto», правда);
Існує REXX скрипт для інтеграції PMMail з Mozilla і виконуваної версією аналогічної функції. Щоб Firefox Thunderbird відкривався при натисканні на електронну пошту: посилання з допомогою Run! утиліти, ви можете використовувати ці налаштування:
user_pref («applications.mailto», «X:\\шлях\\до\\буревісника\\ буревісника l.exe»);
user_pref («applications.mailto.parameters», «-compose»);
Запуск декількох версій одночасно Ви можете тільки запустити Firefox і Thunderbird одночасно, якщо вони однієї версії (або точніше, побудованих з однакових кодів), в зв’язку з тим, що OS/2 ядра завантажують DLL бібліотеки. Якщо ви хочете запустити з різних кодових рівнів, використовуйте Internet Application Integration для налаштування Run!. Ви можете запускати кілька версій SeaMonkey (тобто налагодження і випуску версій)одночасно, до тих пір, як ви це робите обережно. Ви повинні використовувати різні профілі для кожної версії, і використовувати Run! або невеликий скрипт, аби запустити його (наприклад, seaMonkey.cmd):

  SET MOZ_NO_REMOTE = 1
  SET LIBPATHSTRICT = Т
  SET MOZILLA_HOME = <profile_path>
  SET PATH = <mozilla_directory>;% PATH%
  SET BEGINLIBPATH = <mozilla_directory>
  seamonkey.exe% 1% 2% 3% 4% 5

MOZ_NO_REMOTE = 1 тримає Mozilla створювати вікно повідомлень батьківського, тому два Mozilla, більше не може виявити, що один друг працює. LIBPATHSTRICT = T змушує бібліотеки DLL, які будуть завантажені з правильного місця, замість того, щоб використовувати те, що вже знаходиться в пам’яті (ця функція вимагає сучасного ядра OS/2). Ці попередньо виготовлений mozcall скрипти можуть бути корисні.

Пошук підказки Ви можете використовувати функцію ключових слів закладки, щоб створити ярлик для вашої улюбленої пошукової системи, наприклад, ви можете просто набрати «зоряні війни IMDB» в адресному рядку, щоб подивитися «Зоряні війни» на сайті Internet Movie Database. Щоб зробити це:

  1. Виконайте пошук у вашій улюбленої пошукової системи (в даному прикладі, IMDB).
  2. Коли з’являються результати, зробіть закладку сторінки.
  3. Перейдіть до Bookmark Manager. Виберіть закладку і натисніть Властивості
  4. У текстовому полі Місцезнаходження знайдіть терміни, які ви набрали для пошуку і замініть їх (для IMDB це буде виглядати http://www.imdb.com/find?q=%s).
  5. Встановіть ключове слово за вашим бажанням (наприклад, «IMDB», без лапок)
  6. Тепер ви можете зробити пошук з адресного рядка, ввівши ключове слово!
Addons addons.mozilla.org є відмінним ресурсом для пошуку теми і розширення. Проект xSidebar має налагоджений багато розширень Firefox і розширення Thunderbird для установки і запуску правильно в SeaMonkey. Налаштування панелі інструментів додає панель інструментів для швидкого зміни налаштувань для призначених для користувача шрифтів і квітів, зображень і JavaScript. Майкрофта список пошукових плагінів для Mozilla, а також інструкції для написання власних (як хороший пошук Гоббс). Там також деякі пошукові плагіни FireFox для використання з Google (зображення, групи новин і новини), архів commTalk програмного забезпечення, словник Лео німецький/англійська і Гоббса.

Букмарклет деякі милі Javascript утиліти для роботи з дратівливими веб-сторінок

Форма History Control дає хороший інтерфейс для управління збережених даних порожнистої форми.

Проблемні розширення Ви можете почати використовувати Warpzilla з відключеними розширеннями  (і використовується тему за замовчуванням) за допомогою «-safe режиму» параметра командного рядка. Після цього ви можете видалити будь-які проблемні розширення і/або тему.
пошкоджений інтерфейс Якщо  щось не так з вашим інтерфейсом користувача, є кілька речей, які ви можете спробувати.

  • Переконайтеся, що ви використовуєте тему, яка входить до складу Warpzilla, або ту, яка була роззроблена спеціально для версії, яку ви використовуєте.
  • У той час як браузер закритий, видаліть xul.mfl файл в папці профілю; він буде відтворений, і ви нічого не втратите.
  • Якщо він як і раніше не працює, хром\chrome.rdf (обидва додаток і версія профілю) можуть бути пошкоджені. Ви можете видалити ці файли, і нехай Mozilla відновити їх. Зверніть увагу, що вам потрібно буде перевстановити всі теми і розширення.
  • Якщо у вас є пошкоджений інтерфейс, ви, ймовірно, намагалися вручну видалити аддон без очищення файлів в overlays.rdf. Можна звернутись до ручного редагування, або почати видалення файлів RDF. Знову ж таки, вам, можливо, буде потрібно перевстановити розширення.
Командний рядок Існують деякі рекомендації щодо параметрів командного рядка.

.

Mejorar la Seguridad del Correo Electrónico con Procmail

E-mail Sanitizer

Source page: www.impsec.org/email-tools/procmail-security.html

Casa

Bienvenido a la página de inicio del Email Sanitizer. El Sanitizer es una herramienta para la prevención de  ataques a la seguridad de su ordenador a través de mensajes de correo electrónico. Ha demostrado ser muy eficaz contra los gusanos de correo electrónico de Microsoft Outlook que han recibido mucha atención en la prensa popular y que han causado tantos problemas.

El público objetivo de Sanitizer es administradores de sistemas de correo. No es la intención general para los usuarios finales, a menos que administran sus propios sistemas de correo en lugar de simplemente contar su programa de correo para recuperar mensajes de un servidor de correo administrada por otra persona.

Si no está aquí porque usted ha llegado un mensaje que dice que una pieza de correo que envió ha sido rechazada, o porque la dirección de esta página web aparece en una pieza de correo que haya recibido, o porque usted se pregunta por qué su correo electrónico adjuntos se nombran repente  DEFANGED, por favor, lea esta  introducción al Sanitizer  – debe responder a sus preguntas. Que me haga saber si no lo hace.

Tenga en cuenta que el Sanitizer es  NO  un antivirus tradicional. No se basa en “firmas” para detectar ataques y no tiene la “ventana de vulnerabilidad” problemas que la seguridad basada en firmas siempre tiene; sino que permite ejecutar políticas como “correo electrónico no debe ser escrito”, y “macros en documentos adjuntos de Microsoft Office no deben tener acceso al registro de Windows”, y “correo electrónico no debe tener Windows los archivos adjuntos ejecutables”, y pone en cuarentena los mensajes que violan las políticas.


Site Index:

Últimas noticias

Introducción

Amenazas basadas en correo electrónico para la seguridad informática

Obtención e instalación del Sanitizer

Configuración de la Sanitizer

Instalación del Sanitizer en un relé de correo entrante

Instalación del Sanitizer en un relé de correo saliente (versión I)

Sanitizer registro de cambios

Desmantelar los archivos adjuntos destrozados

Comentarios del usuario

La lista de correo

Los archivos de la lista de correothe Mailing List archives

• Descargar corriente Sanitizer (versión 1.151)

• Descargar versión de desarrollo del Sanitizer (versión 1.152pre8)

• Descargar corriente Sanitizer bola de alquitrán

• Descargar corriente escaneo no macro Sanitizer

• Descargar corriente lista de archivos envenenados recomendada

• Descargar corriente recomendado lista de archivos encriptados envenenados

• Descargar corriente ejemplo de script de reglas locales (identificación de gusano basada en firmas)

• Examine  el área de desarrollo

• Descargar conjunto de reglas de exploración postal de Yves Agostini. Ejecutarlo antes de pre-1.141 desinfectantes para escanear archivos adjuntos ejecutables para .ZIP.

• Descargar un parche para SpamAssassin 2.63  que permite  SpamAssassin reconocer y marcar adecuadamente HTML quitado los colmillos – utilizar si se está ejecutando SpamAssasin  después de  que el desinfectante.

• Descargar un parche para SpamBouncer 1.9  que permite  SpamBouncer reconocer y marcar adecuadamente HTML quitado los colmillos – utilizar si se está ejecutando SpamBouncer  después de  que el desinfectante. (Gracias a Joe Steele!)


Filtrado de correo electrónico para la seguridad

Procmail es un programa que procesa los mensajes de correo electrónico en busca de información particular en las cabeceras o el cuerpo de cada mensaje, y toma acciones sobre la base de lo que encuentra. Si está familiarizado con el concepto de “reglas” según se dispone en muchos de los principales clientes de correo del usuario (como el cc:cliente de correo), entonces ya está familiarizado con el concepto de procesamiento de mensajes de correo electrónico de forma automática en función de su contenido.

Este conjunto de reglas de combinación y procmail script de Perl está diseñado específicamente para “sanear” su correo electrónico en el servidor de correo, antes de que sus usuarios incluso intentan recuperar sus mensajes. Se  no  destinado a los usuarios finales a instalar en sus sistemas de escritorio de Windows para la protección personal.


Noticias y notas

La versión actual de la html-trap.procmail conjunto de reglas es: 1.151

Se recomienda que actualice su copia si su versión es anterior, como se habrán añadido correcciones y filtrado para nuevas hazañas. Ver  el historial de cambios  para obtener más detalles.

He estado continuar utilizando el desinfectante en la producción a pesar de que el desarrollo se ha tranquilizado mucho en los últimos años y está impulsada principalmente por ahora mis necesidades en lugar de las peticiones del usuario. Todavía es útil, y sigue impidiendo intento de entrega de malware, incluso de exploits que los escáneres de virus todavía no detectan. Tengo, sin embargo, no sido mantener el sitio actualizado, por lo que estoy haciendo ahora. Sugiero que si usted todavía está utilizando el desinfectante se echa un vistazo a  la versión de desarrollo  (1.152pre8) para los cambios y mejoras en curso, lo más notablemente posible la actualización del escáner macro oficina en busca de malware descargado.


Existe  una vulnerabilidad de desbordamiento de búfer en la biblioteca archivo zip DUNZIP32.dll  utilizado por muchos programas comerciales, incluyendo Lotus Notes y Real Audio Player. Exploits para esta vulnerabilidad son EN LA NATURALEZA. Si usa Notes o algún otro software que se encarga de archivos ZIP, en contacto con su proveedor para ver si hay una actualización disponible.
En un intento de mitigar esta vulnerabilidad, la versión de desarrollo del sanitizer  ha implementado controles de longitud de nombre de archivo en los nombres de los archivos archivados. Si no desea probar la instantánea de desarrollo,  un parche que añade las pruebas de longitud-de nombre de archivo comprimido al barrido ZIP existente  está disponible. Es contra 1.151 pero  debería  funcionar en cualquier versión que tiene el escaneo ZIP.

Hay un pequeño parche para las versiones 1.151 y anteriores que defangs un método de ofuscar javascript incrustado. Para aplicar el parche, almacenar el parche en el directorio donde se guarda el desinfectante (normalmente /etc/procmail) y ejecute el siguiente comando:

patch –backup <obfuscated_javascript.patch

Esto será en la próxima versión estable.

Las listas de correo de la esa-l y la esd-l se han restaurado y ahora son dirigidas por una impsec.org. Gracias a Michael Ghens por su generosa acogida de las listas durante cinco años!

Hay una  anuncios de la lista de correo  para los problemas de seguridad de correo electrónico. Se realizará principalmente información sobre las nuevas vulnerabilidades y actualizaciones del desinfectante. Para suscribirse, envíe un mensaje con el asunto “suscribirse” a  esa-l-request@impsec.org. Esta es una lista muy moderado para anuncios solamente, no discusión general.

Si desea unirse a la  lista de discusión desinfectante,  enviar un mensaje con el asunto “suscribirse” a  esd-l-request@impsec.org. Esta es una lista de los miembros de sólo; para publicar a ella que  debe  unirse. También hay  un archivo de mensajes disponibles.

1.142 corrige un error menor en 1.141 que hace que el nombre de archivo zip juego demasiado codicioso.

1.141 permite ahora escanear el contenido del archivo ZIP. AVISO: si no especifica explícitamente un ZIPPED_EXECUTABLES el archivo de políticas, el sanitizer predeterminado a su POISONED_EXECUTABLES archivo de política para el procesamiento de contenido de archivo ZIP. Esto es probablemente más paranoico de lo que desea ser. Vea el Configuración de la Sanitizer página para más detalles.


NOTICIA IMPORTANTE:

Si ha descargado y está utilizando el 1.139 sanitizer, aquí hay un parche para hacerla ignorar la parte forjada de NovArg/MyDoom Recibido: encabezados y dejar de notificar las direcciones inexistentes del remitente sobre el ataque. Por favor, aplique este parche a su desinfectante usando las siguientes instrucciones y ayude a reducir la cantidad insana de tráfico que este monstruo está generando…

HTTP Mirror 1 (US: WA) | HTTP Mirror 2 (US: FL) | HTTP Mirror 3 (EU: NO) | HTTP Mirror 4 (EU: NL) | HTTP Mirror 5 (AU) | HTTP Mirror 6 (AU) | HTTP Mirror 7 (US: WA) ]

Instrucciones de instalación:

Copie el archivo .diff en el directorio donde reside su sanitizer y ejecute los siguientes comandos:

cp html-trap.procmail html-trap.procmail.old patch < smarter-reply.diff


El 1.139 Sanitizer incluye la detección de Microsoft Office VBE ataques de desbordamiento de búfer. Ver  la alerta EEye para más detalles.

Sobig.F reglas para los ataques directos y rebota están en  el archivo-reglas locales muestra  ahora.

Por favor, vea  el archivo-reglas locales de la muestra  para una regla que se debe detectar y cuarentena los mensajes diseñados para atacar a la  cabecera Sendmail análisis de errores a distancia de la raízIMPORTANTE:  Esta regla  NO proteger la máquina en la que está instalado. No obstante, debe actualizar su Sendmail. Puede, sin embargo, proteger las máquinas vulnerables detrás de la máquina que se está ejecutando, dándole tiempo para actualizarlos.

Si usted está recibiendo errores como “sendmail: illegal option -- U” ver  la página de configuración de cómo solucionarlo.

Si usted está experimentando el problema “Nos dejó F” (donde en el mensaje que se está borrando la “F” en el principal “From”), tenga en cuenta: se trata de un problema conocido en procmail. Se podrá fijar en la versión actual, es posible que desee actualizar. El problema se produce cuando una acción de filtrado devuelve un error. En esa situación procmail puede perder el primer byte del mensaje. Asegúrese de que su archivo de registro tiene 622 permisos. Además,  aquí es una regla corta que ayudará a limpiarlo, añadirlo al final de su /etc/procmailrc archivo.

(Planificación de)  el desarrollo del desinfectante 2.0  ha comenzado. La lista de características planeado es como la siguiente:

• Manejo de archivos adjuntos basado en políticas ($MANGLE_EXTENSIONS desaparece)

• Soporte de internacionalización vía GNU gettext o algo similar

• Manejo adecuado de los nombres de archivo codificados

• Doblar el código de longitud de encabezado y HTML-defang en el script perl principal, para minimizar las inicializaciones del proceso perl

• El script perl se separará (ya no en línea)

• Pasando de mimencode y mktemp a MIME::Base64 y File::MkTemp

• Iniciar sesión en el propio mensaje (agregar un nuevo adjunto de texto MIME que muestra lo que sucedió durante la desinfección) con la capacidad de agregar archivos de nota específicos del sitio

• Mirando en los accesorios de MS-TNEF. Espero tener la política completa y el apoyo de escaneo de macro, pero la política probablemente tendrá que ser aplicado a la conexión de MS-TNEF entero (por ejemplo, si una parte de ella se va a despojar, todo se despoja).

• Opcional de-BASE64 archivos adjuntos de texto y HTML, por lo que puede ser objeto de filtrado de correo basura después de que el sanitizer.

Anuncios beta se harán a la lista de correo.


<jhardin@impsec.org>

Página principal

Contents Copyright (C) 1998-2017 by John D. Hardin – All Rights Reserved.

Използване на Rsync и SSH

Source page: http://troy.jdmz.net/rsync/index.html

www.jdmz.net troy.jdmz.net

Ключове, Валидиране и Автоматизация

Този документ обхваща използване cron, ssh, и rsync да архивни файлове в локална мрежа или Интернет. Част от моята цел е да се гарантира, не се налага намесата на потребителя, когато компютърът се рестартира (за пароли, ключове или ключови мениджъри).

Харесва ми да се резервно копие на някои сеч, поща, както и информация за конфигурацията понякога на домакините в мрежата и интернет, и тук е така, аз не съм намерил да го направя. Ще имате нужда от тези пакети, инсталирани:

• rsync

• openssh

• сron (или vixie-cron)

Моля, обърнете внимание на тези инструкции може да са специфични за Red Hat Linux версии 7.3, 9 и Fedora Core 3, но се надявам, че няма да бъде твърде трудно да се адаптират към почти всеки тип *NIX операционна система. Страниците на човека за “ssh” и “rsync” трябва да бъдат от полза за вас, ако искате да промените някои неща (използвайте “man ssh” и “man rsync” команди).

На първо място, аз ще се определят някои променливи. По мое обяснение, аз ще се синхронизира файлове (копиране само нови или променени файлове) по един начин, а аз ще се започне този процес от приемащата искам да копирате неща. С други думи, аз ще се синхронизира файлове от /remote/dir/ на remotehost, като remoteuser, до /this/dir/ на thishost, като thisuser.

Искам да се уверите, че “Rsync” над “SSH” работи на всички, преди да започне да се автоматизира процеса, така че аз го тестват първо като  thisuser:

$ rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/

и въведете remoteuser@remotehost парола при подкана. Трябва да се уверя remoteuser има права за четене /remote/dir/ на remotehost, и това thisuser има разрешения за писане /this/dir/ на thishost. Също, “rsync” и “ssh” трябва да бъде в пътя на thisuser (използвайте “които ssh” и “които rsync”), “rsync” трябва да бъде в пътя remoteuser, и “sshd” трябва да работи на remotehost.

Конфигуриране  thishost

Ако това всичко се нареди, или в крайна сметка го направи да работи, аз съм готов за следващата стъпка. Имам нужда да се генерира частен/публичен двойка ключове, за да се даде възможност на връзка “SSH” без да иска парола. Това може да звучи опасно, и то е, но е по-добре от съхраняване на потребителска парола (или ключ парола) като чист текст в сценария [0]Също така мога да поставя ограничения върху която връзките, направени с този ключ могат да идват от, и за това какво могат да направят, когато е свързан. Както и да е, аз се генерира ключа ще използвам по  thishost (както  thisuser):

$ ssh-keygen -t rsa -b 2048 -f /home/thisuser/cron/thishost-rsync-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): [press enter here] 
Enter same passphrase again: [press enter here] 
Your identification has been saved in /home/thisuser/cron/thishost-rsync-key. 
Your public key has been saved in /home/thisuser/cron/thishost-rsync-key.pub. 
The key fingerprint is: 
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 thisuser@thishost
и сега имаме ключова, без парола в двата файла споменати по-горе [1]. Уверете се, че никой друг неоторизиран потребител може да чете файла с частния ключ (този, без разширението “.pub”).
Този ключ е безпредметно, докато ние поставяме общодостъпната част на файла “authorized_keys” [2] на  remotehost, по-специално тази за  remoteuser:
/home/remoteuser/.ssh/authorized_keys
Аз използвам scp за зареждане на файла към  remotehost:
$ scp /home/thisuser/cron/thishost-rsync-key.pub remoteuser@remotehost:/home/remoteuser/
и след това мога да се подготвят нещата на  remotehost.
Конфигуриране  remotehost

Аз “ssh” към  remotehost:

$ ssh remoteuser@remotehost
remoteuser@remotehost's password: [type correct password here]
$ echo I am now $USER at $HOSTNAME
I am now remoteuser at remotehost
да се направят някои работи.
Трябва да се уверете, че имам директорията и файловете, което трябва да се разреши връзки с този ключ  [3]:
$ if [ ! -d .ssh ]; then mkdir .ssh ; chmod 700 .ssh ; fi 
$ mv thishost-rsync-key.pub .ssh/ 
$ cd .ssh/ 
$ if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi 
$ cat thishost-rsync-key.pub >> authorized_keys
Сега ключът може да се използва за направата на връзки към този хост, но тези връзки могат да бъдат от всяка точка (че SSH демона на  remotehost  позволява връзки от) и те могат да направят нищо (че  remoteuser  може да направи), а аз не искам това, аз редактирате файла “authorized_keys” (с vi) и промяна на линията с “thishost-rsync-key.pub” информация за него. Аз ще се добавят само няколко неща, в предната част на това, което вече е там, промяна на линията (и това, което следва, е само една линия с лошо симулиран пренасянето на нов ред) от това:
ssh-dss AAAAB3NzaC1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap+fG8wjlaY/9t4u
A+2qx9JNorgdrWKhHSKHokFFlWRj+qk3q+lGHS+hsXuvta44W0yD0y0sW62wrEVegz+JVmntxeYc0nDz
5tVGfZe6ydlgomzj1bhfdpYe+BAwop8L+EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP
5IaCuYBhuTKQGa+oyH3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh
4oyX/aXEf8+HZBrO5vQjDBCfTFQA+35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55
Kk2rAAABAE/bA402VuCsOLg9YS0NKxugT+o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK
1/ZIvtl92DLlMhci5c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/+m6ZOLHN28mV
5KLUl7FTL2KZ583KrcWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ+QtEa0V2IwUDWS097p3SlLvozw
46+ucWxwTJttCHLzUmNN7w1cIv0w/OHh5IGh+wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp+NIKr
Y+aJz7myu4Unn9de4cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r+xrg5pZ5
GjfBCRvHNo2DF4YW9MKdUQiv+ILMY8OISduTeu32nyA7dwx7z5M8b+DtasRAa1U03EfpvRQps6ovu79m
bt1OE8LS9ql8trx8qyIpYmJxmzIdBQ+kzkY+9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn
75Cfzhv65hJkCjbiF7FZxosCRIuYbhEEKu2Z9Dgh+ZbsZ+9FETZVzKBs4fySA6dIw6zmGINd+KY6umMW
yJNej2Sia70fu3XLHj2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost
за тази [4]:
from="10.1.1.1",command="/home/remoteuser/cron/validate-rsync" ssh-dss AAAAB3Nza
C1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap+fG8wjlaY/9t4uA+2qx9JNorgdrWKhH
SKHokFFlWRj+qk3q+lGHS+hsXuvta44W0yD0y0sW62wrEVegz+JVmntxeYc0nDz5tVGfZe6ydlgomzj1
bhfdpYe+BAwop8L+EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP5IaCuYBhuTKQGa+oy
H3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh4oyX/aXEf8+HZBrO5
vQjDBCfTFQA+35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55Kk2rAAABAE/bA402V
uCsOLg9YS0NKxugT+o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK1/ZIvtl92DLlMhci5
c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/+m6ZOLHN28mV5KLUl7FTL2KZ583Kr
cWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ+QtEa0V2IwUDWS097p3SlLvozw46+ucWxwTJttCHLzU
mNN7w1cIv0w/OHh5IGh+wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp+NIKrY+aJz7myu4Unn9de4
cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r+xrg5pZ5GjfBCRvHNo2DF4YW9
MKdUQiv+ILMY8OISduTeu32nyA7dwx7z5M8b+DtasRAa1U03EfpvRQps6ovu79mbt1OE8LS9ql8trx8q
yIpYmJxmzIdBQ+kzkY+9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn75Cfzhv65hJkCjbiF
7FZxosCRIuYbhEEKu2Z9Dgh+ZbsZ+9FETZVzKBs4fySA6dIw6zmGINd+KY6umMWyJNej2Sia70fu3XLH
j2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost
където “10.1.1.1” е IР (версия 4 [5]) адрес на  thishost и “/home/remoteuser/cron/validate-rsync” (която е само една от няколко възможности,  [6], включително и персонализиране [7]  за подобряване на сигурността) е скрипт, който изглежда по следния начин:
#!/bin/sh 

case "$SSH_ORIGINAL_COMMAND" in 
*\&*) 
echo "Rejected" 
;; 
*\(*) 
echo "Rejected" 
;; 
*\{*) 
echo "Rejected" 
;; 
*\;*) 
echo "Rejected" 
;; 
*\<*) 
echo "Rejected" 
;; 
*\>*) 
echo "Rejected" 
;; 
*\`*) 
echo "Rejected" 
;; 
*\|*) 
echo "Rejected" 
;; 
rsync\ --server*) 
$SSH_ORIGINAL_COMMAND 
;; 
*) 
echo "Rejected" 
;; 
esac
Ако  thishost  има променлива адрес или споделя неговия адрес (чрез NAT или нещо подобно) с домакини нямате доверие, пропуснете “from=”10.1.1.1″,” част от линията (включително запетаята), но оставете частта “command”. По този начин само “rsync” ще бъде възможно от свързвания с помощта на този бутон. Направи  някои, че скриптът “validate-rsync” е изпълнима от  remoteuser  на remotehost  и да го тестваме.
ВНИМАНИЕ:  частният ключ, въпреки че сега донякъде ограничени в това, което той може да направи (и се надяваме, където тя може да бъде направено от), позволява на притежателя да копирате  всеки  файл от  remotehost  че  remoteuser  има достъп. Това е опасно, а аз трябва да предприеме всички предпазни мерки, аз смятат за необходими за поддържането на сигурността и поверителността на този ключ. Някои от възможностите би било осигуряването на правилните разрешения файлове са възложени  [8], помислете за използване на ключ за кеширане демон, и считат, ако наистина имам нужда автоматизирате този процес стихове на риска.
СЪЩО ТАКА ИМАЙТЕ ПРЕДВИД:  друг детайл сигурност е да се помисли конфигурацията на SSH демон на  remotehost. Този пример се фокусира върху един потребител (remoteuser), който не е  root. Не препоръчваме използването на  root като отдалечен потребител, тъй като  root, има достъп до всеки файл на  remotehost. Това сам способност е много опасно, както и санкциите за грешка или неправилно конфигуриране може да бъде далеч по-стръмни от тези за “нормална” употреба. Ако не използвате  root като отдалечен потребител (някога) и да вземете решения за сигурност за  remotehost, препоръчвам или:
PermitRootLogin no
 или:
PermitRootLogin forced-commands-only
да бъдат включени в “/etc/ssh/sshd_config” файл на remotehost. Това са глобални настройки, а не само свързани с тази връзка, затова не забравяйте, че не се нуждаете от възможността за забрана на тези опции за конфигуриране [9].
“AllowUsers”, “AllowGroups”, “DenyUsers”, и “DenyGroups” ключовите думи могат да се използват за ограничаване на достъпа до SSH до определени потребители и групи. Те са документирани в страницата на човека за “sshd_config”, но ще спомена, че всички те могат да използват “*” and “?” като заместващи клавиши за разрешаване и отказване на достъп до потребители и групи, които съответстват на моделите. “AllowUsers” и “DenyUsers” може също да се ограничи от хоста, когато моделът е в USER@HOST форма.
Отстраняване на проблеми

Сега, когато имам ключ, без парола на място и е конфигурирана, че трябва да го тествате, преди да я сложите в работа Cron (която има свой собствен малък набор от багаж). Аз излизане от сесията на SSH за  remotehost  и се опитват  [10]:

$ rsync -avz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Ако това не се случи, ще извадя ограничението “команда” на ключа и ще опитам отново. Ако той поиска парола, ще проверя разрешенията на файла с частен ключ (на thishost, трябва да е 600), на “authorized_keys” и (на remotehost, трябва да е), на “~/.ssh/” директорията (и на двата хоста, трябва да бъде 700), както и в домашната директория (“~/”) (и на двата хоста, не трябва да се записва от никой освен от потребителя). Ако възникне някаква криптична протоколна грешка “rsync”, в която се споменава “validate-rsync” скрипт, ще се уверя, че разрешенията са “validate-rsync” (на remotehost, може да бъде 755, ако всеки remotehost потребителят има доверие) да позволи на remoteuser да го чете и изпълнява.
Ако нещата все още не работят, може да се намери полезна информация в дневниците. Журналните файлове обикновено се намират в /var/log/ директория на повечето linux хостове и в /var/log/secure файл на журнала на linux хостове Red Hat. Най-полезните регистрационни файлове в този случай ще бъдат намерени на remotehost, но localhostможе да предоставя някои от страна на клиента информация в своите дневници  [11]Ако не можете да стигнете до трупи, или са просто нетърпелив, можете да кажете на “ssh” изпълнимия да се дадат някои сеч с  “verbose” команди: “-v”, “-vv”, “-vvv”. Колкото по v, толкова по-многословно изход. Един от тях е в командата по-горе, но този по-долу трябва да предостави много по-изход:
$ rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Надяваме се, че тя винаги ще работи безотказно просто така че никога не трябва да се разшири информацията за отстраняване на изброените тук  [12].
Настройване на заданието за Cron

Последната стъпка е Cron скрипт. Аз използвам нещо като това:

#!/bin/sh 

RSYNC=/usr/bin/rsync 
SSH=/usr/bin/ssh 
KEY=/home/thisuser/cron/thishost-rsync-key 
RUSER=remoteuser 
RHOST=remotehost 
RPATH=/remote/dir 
LPATH=/this/dir/ 

$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH

защото е лесно да се променят бита и парчета от командния ред за различните хостове и пътеки. Аз обикновено го наричат, подобно на “rsync-remotehost-backups”, ако той съдържа архиви. Тествам сценария също, само в случай, че внимателно поставена грешка някъде.

Когато отида на скрипта работи успешно, аз използвам “crontab -e”, за да вмъкнете ред за тази нова cron работни места:
0 5 * * * /home/thisuser/cron/rsync-remotehost-backups
за ежедневно синхрон 5 AM, или:
0 5 * * 5 /home/thisuser/cron/rsync-remotehost-backups
за всяка седмица (5 AM в петък). Месечни и годишни от тях са по-редки за мен, така че гледат на “man crontab” или тук  за съвет относно тези.

Добре! С изключение на ежедневието “в крак с кръпки” нещо, коварните “скрити недостатъци конфигурация” страна, и незабравимо “пълния провал на човешката логика” набор от проблеми, моята работа тук е свършена. Наслади се!

Забележки:
[0] Причината за избора на ключ SSH, без парола, с течение на опции като  SSH-агент  или  ключодържател, е, че автоматизиран процес ще оцелее рестартиране на хост машината и изпълнение на следващото планирано време без намеса от моя страна (не всички машини така автоматизирано винаги достъпен). Ако не разполагате с тези изисквания, тези и други възможности могат да подкрепят внедряването на по-голяма сигурност.
[1] Ако  remotehost  само е инсталирал SSH1, може да се наложи да използвате друг ключов тип. Вместо “rsa” ще трябва да използвате “rsa1”. Можете да използвате “dsa” dvtcnj “rsa”, но тя все още ще бъде само от полза за връзка SSH2 (и дължина на ключа може да е проблем, както е отбелязано тук  – благодаря ви @avenjamin). SSH2 връзки са по-сигурни, отколкото SSH1 връзки, но ще трябва да се търсят другаде за подробности за това (“man ssh-keygen” и Google). Също така, ключов създаването може да се направи с помощта на командата (ssh-keygen -b 2048 -f keyfile -t rsa -N ”) за да се автоматизира” без ключ парола част”, или (ssh-keygen -b 2048 -f keyfile -q -t rsa -N ”) за да се елиминира всякакъв изход от командата.
[2] Някои конфигурации използват “authorized_keys2” вместо “authorized_keys”. Потърсете “AuthorizedKeysFile” в “/etc/ssh/sshd_config”.
[3] Ако използвате черупка, различни от “bash” (или друг съвместим борн черупка), като “csh” или “tcsh”, командите, изброени може да не работят. Преди да ги изпълнява, стартиране на “bash” (или “sh”, “ksh”, или “zsh”) обвивка с помощта на “bash” (или “sh”, “ksh”, или “zsh”) команда.След завършване на командите, ще трябва да излезе от черупката “bash” а след това да излезете от черупката си домакин хайвера нормално.
[4] Не забравяйте да не въвежда никакви нови редове в “authorized_keys” файла. Основната информация, както и въведените команди, свързани с този ключ, всички трябва да са на един ред. Ключът генерирате (безсмисленото неща по линията на ключа), ще бъде различен от този тук. Избор на редактора, че не автоматично “обвивка” (вписват новите редове) текстът може да бъде изключително важен тук.
[5] Виждал съм един хост игнорира правилно представени IPv4 адрес, а вместо това видя входящия връзката като IPv6 вид адрес (“::fff:10.1.1.1”). Намерих адреса в “/var/log/messages” за домакен Fedora Core 3 Linux, и това не позволява връзки от този хост с IPv6 версия във файла “authorized_keys”.
[6] Друг вариант за проверка (и повече) е Perl скрипт намира тук: http://www.inwap.com/mybin/miscunix/?rrsync, макар че е по-сложно. А версия на тази Perl скрипт сега е част от пакета с източника на rsync тук: http://www.samba.org/ftp/unpacked/rsync/support/rrsync (с подобрения). Ако пишете специален скрипт който какъвто и език по Ваш избор, погледнете вътре в този един за предложения.
[7] По времето, когато “validate-rsync” сценария работи, връзка SSH е направено с клавиша SSH ви свързва с тази команда във файла “authorized_keys”. Този пример скрипт основно опитва да се върне “Rejected” за нищо друго, освен една команда, която започва с “rsync –server”, което е това, което rsync над ssh прави на другия край на връзката.Открих това като пуснете “ps auxw | grep rsync” на отдалечения край на връзката след инициализиране на дълго тичане rsync работа, но rsync pro каза, че може да се добави “-v -v -n” на вашите опции за командния ред за rsync и той ще покаже на командата ще използва на края на сървъра, така че да използва това, за да си скрипт команда по-конкретен, ако желаете. Първите шест “Rejected” линии се опитват да елиминиране черупки символи, които ще позволят на човек да изпълнява повече от една команда в рамките на една сесия (например, кратък rsync и някои палав команда не искате работи от разстояние). Можете също така да принуди трансферът да се четат само чрез промяна на команда, за да “rsync –server –sender*” (благодарение на Дейвид Фред).
[8] Чрез подходящи файловите права, искам да кажа сигурни файла разрешения. В това, което по същество защитава remotehost от remoteuser, така че remoteuser не би била в състояние да променят тази настройка по никакъв начин.Това означава, че remoteuser няма да притежава, или е в състояние да пиша, скрипта за валидиране или дори remoteusers authorized_keys файла. В този момент, обаче, може да искате да обмисли възможността за използване “Match User” в /etc/ssh/sshd_config и използвайте ChrootDirectory и/или ForceCommand да ги съдържат, ако сигурността е много важно за вас. Отиди толкова далеч, колкото вижда нужда да отида. (Благодаря ви Янек Мартинсън).
[9] “PermitRootLogin no” прави това, което той казва: на root потребителят няма право да влезете чрез SSH. “PermitRootLogin forced-commands-only” изисква всички връзки, чрез SSH като root, трябва да се използва публичен ключ (с ключ, като “thishost-rsync-key.pub”) и че команда да се асоциира с този ключ (като “validate-rsync”). За повече обяснения, използвайте “man sshd_config” команда. Ако използвате Ubuntu, моля уверете се, че пакетът “openssh-server” е инсталирана (не се инсталира по подразбиране).
[10] Могат да бъдат включени всички видове ключове линия SSH командни (цитирано) в рамките на Rsync “-e” линия превключвател команда, като нестандартни SSH сървъра пристанищни връзки (например: “-p 2222”, ако SSH връзки на порт 2222), в освен частния ключ (“-i identity_file”) ключа. (Пер Функе предложи това и съотнесени http://mike-hostetler.com/blog/2007/12/rsync-non-standard-ssh-port).
[11] Можете да разберете какво лог файл SSH ще се пише за, като погледнете в два файла: “/etc/ssh/sshd_config” и “/etc/syslog.conf”. “sshd_config” съдържа параметър  “SyslogFacility”, която по подразбиране е настроен на “AUTH”, но Red Hat обикновено тя определя за “AUTHPRIV”. Който и да е, не забравяйте, настройката и ще я търсим във файла  “syslog.conf”. Обикновено ще намерите линия с “authpriv.*” последвана от някои раздели и след това лог файл, който търсите. Не обръщайте внимание на линии “сauthpriv.none” в тях, тъй като те са вероятно вземе в рамките на много видове съобщения, но забраняващ на тези от “authpriv” системен съоръжението.
[12] Едва ли.

Звена:

© 2003-2015 Troy Johnson

 

 

Progetto ircII

Source page: http://www.eterna.com.au/ircii/


Che cosa è ircII?

ircII è un client IRC e ICB che gira sotto la maggior parte delle piattaforme UNIX. Si presenta in forma sorgente ed è completamente privo di spese o delle tasse. Il progetto ircII è un gruppo di persone che mantengono il codice sorgente, correzioni e nuove funzionalità che incorporano.

La versione attuale è ircII 20.170.704 che è disponibile presso il sito ftp ircII (vedi sotto).

Un’istantanea quotidiano aggiornato dell’albero ircII è disponibile anche  ircII-current.tar.bz2  o l’albero espansa a  ircII-current. Vedere la sezione Notizia di seguito per maggiori dettagli.

È possibile sottoscrivere le ircII mailing list ospitate dal progetto ircII inviando un messaggio e-mail con la parola “subscribe” in esso agli indirizzi qui sotto. L’elenco ircII-announce è per gli annunci su aggiornamenti ircII e altre notizie. Si tratta di una lista di volume molto basso moderato. L’elenco ircII-users è per gli utenti ircII di inviare e discutere i problemi e le idee. Attualmente non è moderata e non ha quasi nessun traffico.

• ircII-annuncio:  ircII annunciano richiesta

• ircII-utenti:  gli utenti chiedono ircII

È possibile recuperare ircII dalle seguenti località:

L’America [sito principale] (San Jose, California)  http://ircii.warped.com/

Potete trovare notizie su ircII da  qui.

Potete trovare su segnalazione bug e la visualizzazione di bug attuali ircII da  qui

Questo è il  Copyright e licenza  che viene fornito con ircII.


Contattare il  progetto di ircII

¿Qué es IrfanView?

Original: http://www.irfanview.net/main_what_is_engl.htm


Está diseñado para ser simple para los principiantes y poderoso para los profesionales.IrfanView es un programa gratuito muy rápido, pequeño, compacto e innovador (para uso no comercial) visor gráfico para Windows 9x, ME, NT, 2000, XP, 2003, 2008, Vista, Windows 7, Windows 8, Windows 10. 
(clic aquí para IrfanView EULA)

IrfanView busca crear características únicas, nuevas e interesantes, a diferencia de algunos otros espectadores gráficos, cuyo conjunto “creatividad” se basa en la clonación característica, el robo de ideas y diálogos enteros de ACDSee y/o IrfanView! (Por ejemplo: XnView ha estado robando / clonación características y diálogos enteros de IrfanView, más de 10 años).

IrfanView fue el primer visor gráfico de Windows a nivel mundial con el apoyo GIF múltiple (animado).
Uno de los primeros espectadores gráficas a nivel mundial con el apoyo de varias páginas TIF.
El primer visor gráfico de todo el mundo con el apoyo de la OIC múltiple.

Algunas de las características de IrfanView :

  • Versión de 32 y 64 bits
  • Muchos formatos de archivo compatibles (haga clic aquí la lista de formatos)
  • Soporte multi-lenguaje
  • Miniatura opción/vista previa
  • Opción de pintar-para dibujar líneas, círculos, flechas, enderezar la imagen, etc.
  • Opción de la barra de herramientas pieles
  • Presentación (guardar presentación como EXE/SCR o grabarlo en un CD)
  • Mostrar EXIF/IPTC/Comentario de texto en diapositivas / pantalla completa, etc.
  • Soporte para Adobe Photoshop Filtros
  • Vista de directorio rápido (que se mueve a través del directorio)
  • La conversión por lotes (con procesamiento de imágenes avanzado)
  • Edición de TIF multipágina
  • Búsqueda de archivos
  • Opción de correo electrónico
  • Reproductor multimedia
  • Opción de impresión
  • Soporte para perfiles de color incrustados en formato JPG/TIF
  • Cambiar la profundidad de color
  • Scan (exploración por lotes) de soporte
  • Cortar/cultivos
  • Añadir superposición de texto/imagen (marca de agua)
  • Edición IPTC
  • Efectos (nitidez, blur, Adobe 8BF, fábrica de filtros, filtros ilimitado, etc.)
  • Captura de pantalla
  • Extraer iconos de EXE / DLL / ICL
  • Sin pérdida de rotación JPG
  • Plugin de extensión de Shell
  • El soporte Unicode
  • Muchas teclas de acceso rápido
  • Muchas opciones de línea de comandos
  • Muchos plugins
  • Sólo un archivo EXE, DLL, no hay ningún mensaje de Shareware como “Estoy de acuerdo” o “de evaluación caducada”
  • Sin cambios en el registro sin intervención del usuario/permiso!
  • Y mucho, mucho más

Haga clic aquí para ver varias imágenes de IrfanView.

Acuerdo de utilización

IrfanView se proporciona como freeware, pero sólo para uso privado y no comercial (que significa en casa).IrfanView es gratuito para uso educativo (escuelas, universidades, museos y bibliotecas) y para su uso en la caridad o las organizaciones humanitarias.

Si se va a utilizar IrfanView en su lugar de trabajo o con fines comerciales, registre y comprarlo. Quiero seguir trabajando en este programa, por lo tanto, su registro será un incentivo para que añada nuevas funciones y aumentar la calidad del programa.

Cualquier sugerencias, comentarios y observaciones son bienvenidos y no serán ignorados.

Si usted es un usuario comercial y te gusta este programa (o un usuario doméstico que quiere apoyar / donar un mayor desarrollo), registre/donar mediante el envío de US $ 12.00 o 10 euros, – (este es el precio de una (sola) licencia) a la siguiente dirección.
Por favor envíe sólo en efectivo. (No puedo aceptar tasas de cambio de cheques de alta cheque en el banco)


Dirección:

Irfan Skiljan
Postfach 48
2700 Wiener Neustadt, Austria, Europa

Los usuarios comerciales:  por favor, póngase en contacto conmigo por correo electrónico para los precios y descuentos. Nota: Si lo desea, puede comprar las licencias utilizando PayPal o tarjeta de crédito.

 

¡Muchas gracias!


Su apoyo contribuirá al desarrollo y dará derecho a futuras versiones de IrfanView. Su versión registrada incluirá su nombre en el cuadro Acerca de.


En caso de errores y problemas con cualquiera de los formatos soportados, por favor envíe un mensaje de correo electrónico.

Mi bandera para su uso en otras páginas web: logo IrfanView por Gismo

GNU Bornas-Vėlgi SHell

Original: http://cnswww.cns.cwru.edu/php/chet/bash/bashtop.html

 [image of the Head of a GNU]

Turinys


Įvadas

Bash yra GNU Projekto Bornas Vėlgi Shell, visiškai iš įgyvendinimas IEEE POSIX ir Open Group lukštais specifikacijos su interaktyviu komandinės eilutės redagavimo, darbo valdymo ant architektūroms, kad jį palaiko, CSH-kaip funkcijų, tokių kaip istorija keitimą ir petnešomis plėtrą, o nužudė kitų funkcijų. Čia yra trumpas sąrašas kai kurios funkcijos prieinamos bash.

Daugiau informacijos apie Bash funkcijų, kurios yra nauja šio apvalkalo tipą, žr Reference Manual. Taip pat yra didelis Unix stiliaus vyras puslapis. Žmogus puslapis yra galutinis aprašymas Shell funkcijų.

Bash yra nemokama programinė įranga, platinama pagal iš sąlygomis GNU General Public License, 3 versija.

A dažnai užduodamus klausimus skaičius būtų atsakyta DUK, nors tai nebėra išlaikomas.

Dabartinis statusas

Dabartinė versija bash yra Bash-4.4. (VVG parašas).

Atsisiuntimui deguto failą dabartinę versiją su visomis oficialiosiomis pleistrai taikomų galima iš GNU git saugykloje .

Iš dabartinių plėtros šaltinių (paprastai atnaujinami kas savaitę) fotografiją, taip pat galima GNU git Bash devel filiale.

Matyti README failą daugiau informacijos.

NAUJIENOS failą glaustai išvardijamos naujų funkcijų bash-4.4.

Šaltinis Kodas Prieinamumas

Dabartinė versija bash yra nuo ftp.cwru.edu ir iš magistro GNU ftp svetainėje ir daugybe veidrodžių. Šis paskirstymas faile yra suformatuoti dokumentų kopijas.

Šie failai yra pasirašytos su mano GPG raktą .

Yra keli failai prieinami FTP iš ftp.cwru.edu .

Bet lopai dabartinę versiją galima gauti iš CWRU ir ftp.gnu.org .

Atsisiuntimui deguto failą dabartinę versiją su visomis oficialiosiomis pleistrai taikomų galima iš GNU git saugykloje , ir dabartinių plėtros šaltinių (paprastai atnaujinami kas savaitę) fotografiją, taip pat galima GNU bash Git devel filiale.

Ankstesnės Bash versijos yra prieinama ftp://ftp.gnu.org/gnu/bash .

Skirstiniai

Bash yra standartinis apvalkalas ant GNU/Linux sistemų, kurių dauguma yra naudojant bash-4.3. Bash-4.3 yra įtraukiamos į FreeBSD uostų surinkimo, OpenBSD  pakuočių surinkimo bei NetBSD pakuočių surinkimo.

OpenPKG projektas daro kodo RPM apie bash-4.3 galima už Unix ir Linux sistemų, kaip veislės pagrindinę dalį dabartinės spaudai.

Dabartiniai versijos Mac OS X (datuojamas Jaguar/Mac OS X 10.2) laivo su bash-3.2 kaip / bin / sh. Taip pat yra sukompiliuota OS X paketai bash-4.3 turimą iš daugelio svetainių, nors kodo paketai paprastai yra up-to-data. Bash už Darvinas (už MacOS X bazė) yra prieinama iš DarwinPortsHomebrew, arba Fink .

“Solaris 2.x ir” Solaris 7/8/9/10/11 vartotojai gali gauti skompilowanymi versiją bash-4.3 iš Unixpackages svetainėje (prenumerata) arba iš OpenCSW. Orakulas laivai, bash-3,2 kaip palaikoma dalis Solaris 10 ir bash-4.1 kaip dalis Solaris 11. Iš Solaris/Illumos versija platinama taip OpenIndiana apima Bash-4.3 nuo 2016 rugsėjo.

AIX vartotojai gali gauti skompilowane binaria iš bash-4.3 ir vyresnio amžiaus spaudai įvairių versijų AIX iš  Groupe Bull ir šaltinius ir dvejetainius iš bash-4.3 įvairioms AIX teršalus iš perzl.org. “IBM daro Bash-4.2 ir Bash-4.3 galima AIX 5L, AIX 6.1 ir AIX 7.1 kaip dalis AIX Toolbox [GNU / Linux] paraiškas. Jie naudoja RPM formatą; Jūs galite gauti aps./min AIX iš ten pat.

“HP-UX vartotojai gali gauti bash-4.3 dvejetainius ir kodą iš programinės įrangos perkėlimą ir archyvuoti centras” HP-UX. (Dabartinė versija nuo šios datos yra Bash-4.3.46).

Tai net galima Minix. Jei dirbate Windows, aš rekomenduoju, kad jūs naudojate Cygwin, kuris šiuo metu laivas bash-4.3.42 ir bash-4.3.46 , ar MinGW, kuris šiuo metu turi Bash-3.1.23, kaip dalį savo MSYS bazinę sistemą.

“Microsoft” siūlo “Bash apie Ubuntu Windows”, kaip diegiama add-on, skirtas Windows 10 Tai iš esmės atskiras supakuoti versija Ubuntu, kuri veikia kaip Windows 10 paraiškos, ir siūlo Bash-4.3 toje aplinkoje.

Kiti ištekliai

A sąrašas dažnai užduodamus-Klausimų su atsakymais, nors šis dokumentas nebėra išlaikomas.

Diskusija sąrašas bug-bash@gnu.org dažnai pateikiama informacija apie naujų uostų Bash, ar diskusijų naujų funkcijų ar elgesio pokyčiai, kad žmonės norėtų. Pašto sąrašas, kur riktai bash būtų pranešami ir pataisymai yra skelbiami. Šiame sąraše taip pat galima kaip Usenet, gnu.bash.bug .

Archyvas klaidą-bash Pažintys nuo gruodžio, 1999 galima gauti iš lists.gnu.org. “Google Groups” turi archyvo gnu.bash.bug .

Bendrieji klausimai apie bash ir “Shell programavimas turėtų būti siunčiami į help-bash@gnu.org pašto adresų sąrašą. Jos archyvai taip pat galima gauti iš lists.gnu.org.

Kai kurie failai iš dabartinio paskirstymo, taip pat gali būti naudinga.

  • README: failas aprašant Bash
  • NAUJIENOS: byla glaustai išvardijami Žymūs pokyčiai tarp dabartinių ir ankstesnių versijų
  • POKYČIAI: Užbaigti Bash Pakeisti istorija
  • INSTALL: diegimo instrukcijas
  • PASTABOS: platforma konkrečių konfigūracijos ir veikimo pastabos
  • Suderinamumą,: suderinamumo problemų tarp bash4 ir ankstesnių versijų
  • POSIX: ką keičia kai Bash yra Posix režimu?

Čia yra laikraščiuose aš parašiau apie bash pora.

Kaip pranešti apie klaidas

Re ataskaitos bash turi būti siunčiami  bug-bash@gnu.org naudojant bashbug programą, kuri yra pastatyti ir įrengti, tuo pačiu metu, kaip ir bash.

Diskusija sąrašas bug-bash@gnu.org dažnai pateikiama informacija apie naujų uostų Bash, ar diskusijų naujų funkcijų ar elgesio pokyčiai, kad žmonės norėtų. Šiame sąraše taip pat galima “Usenet” naujienų, gnu.bash.bug. Jūs galite užsiprenumeruoti pašto sąrašo adresu lists.gnu.org.

Kai siunčiate pranešimą apie ydą, prašome naudoti bashbug programą, kuri yra pastatytas tuo pačiu metu kaip ir bash. Jei Bash nepavyksta sukurti, pabandykite statyti bashbug tiesiogiai su makiažo bashbug. Jei negalite kurti bashbug, prašome siųsti laiškus į bug-bash@gnu.org su šia informacija:

  • Versijos numeris ir išleidimo statusas Bash (pvz, 2.05 atpalaidavimo)
  • Mašina ir OS, kad ji veikia (galite paleisti bashversion -L iš Bash kompiliavimo katalogą arba pažvelgti į `.made” failą tame kataloge už šią informaciją)
  • Iš jos rengimo vėliavų ar iš `config.h turinį sąrašas”, prireikus
  • A Bug aprašymas
  • Receptas atkurti klaidą patikimai
  • Fix už klaidą, jei turite vieną!Bashbug programa apima daug tai automatiškai.

Jei norite susisiekti tiesiogiai su bash lydi, siųsti laiškus į bash-maintainers@gnu.org.

Lydi

 esu dabartinis bash lydi ir gali būti pasiektas, kaip bash-maintainers@gnu.org. Prašome siųsti papildymus ir pataisymus į šį puslapį chet.ramey@case.edu.

Eric Raymond: “Como Fazer Perguntas de Maneira Inteligente”

Original: http://www.osadl.org/Eric-Raymond-How-to-ask-questions-the-s.questions-the-smart-way.0.html 

Eric Steven Raymond                                                                           Thyrsus Empresas
Histórico de Revisão
Revisão 3.10 21 de maio de 2014 esr
Nova seção sobre estouro de pilha.
Revisão 3.9 23 abril de 2013 esr
correções de URL.
Revisão 3.8 19 de junho de 2012 esr
correção URL.
Revisão 3.7 06 de dezembro de 2010 esr
dicas úteis para falantes de ESL.
Revisão 3.7 2 de novembro de 2010 esr
Várias traduções desapareceram.
Revisão 3.6 19 mar 2008 esr
pequena atualização e novas ligações.
Revisão 3.5 02 de janeiro de 2008 esr
correção de erros e alguns links de tradução.
Revisão 3.4 24 de março de 2007 esr
Nova seção, “Quando perguntando sobre o código”.
Revisão 3.3 29 de setembro de 2006 esr
Dobrado em uma boa sugestão de Kai Niggemann.
Revisão 3.2 10 jan 2006 esr
Dobrado em edições de Rick Moen.
Revisão 3.1 28 de outubro de 2004 esr
Documento ‘Google é seu amigo!’
Revisão 3.0 02 de fevereiro de 2004 esr
Além grande de coisas sobre etiqueta apropriada em fóruns na Web.

Aviso Legal

Muitos sites projecto de ligação a este documento em suas seções sobre como obter ajuda. Isso é bom, é o uso que destina? Mas se você é um webmaster criar essa ligação para sua página do projeto, por favor exibir de forma destacada perto do aviso link que não somos um help desk para o seu projeto!

Aprendemos da maneira mais difícil que sem uma tal notificação, vamos repetidamente ser importunado por idiotas que pensam ter publicado este documento torna o nosso trabalho para resolver todos os problemas técnicos do mundo.

Se você está lendo este documento porque você precisa de ajuda, e você ficar com a impressão que você pode obtê-lo diretamente dos autores deste documento, você é um dos idiotas que estamos a falar. Não pedir  -nos perguntas. Nós vamos apenas ignorá-lo. Estamos aqui para mostrar-lhe como obter ajuda de pessoas que realmente sabem sobre o software ou hardware que você está lidando, mas 99,9% do tempo que não vai ser nós. Se você não sabe por certo que um dos autores é um especialista sobre o que você está lidando, nos deixe em paz e todos serão mais felizes.

Introdução

No mundo dos hackers, o tipo de respostas que você começa às suas perguntas técnicas depende tanto a maneira como você fazer as perguntas como na dificuldade de desenvolver a resposta. Este guia vai te ensinar como fazer perguntas de uma forma mais provável que você obtenha uma resposta satisfatória.

Agora que o uso de código aberto tornou-se generalizada, muitas vezes você pode ficar tão boas respostas de outros usuários, mais experientes como de hackers. Isto é uma coisa boa; usuários tendem a ser um pouco mais tolerante com o tipo de falhas iniciantes muitas vezes têm. Ainda assim, o tratamento de usuários experientes como hackers nas maneiras que recomendamos aqui será geralmente a maneira mais eficaz para obter respostas úteis fora deles também.

A primeira coisa a entender é que hackers realmente como problemas difíceis e bons, instigantes perguntas sobre eles. Se não o fizéssemos, não estaríamos aqui. Se você dar-nos uma pergunta interessante para mastigar seremos gratos a você; boas perguntas são um estímulo e um presente. Boas perguntas nos ajudar a desenvolver o nosso entendimento, e muitas vezes revelam problemas que podem não ter percebido ou pensado de outra forma. Entre hackers, ‘Boa pergunta!’ é um elogio forte e sincero.

Apesar disso, os hackers têm uma reputação para atender perguntas simples com o que se parece com hostilidade ou arrogância. Às vezes parece que estamos reflexivamente rude para novatos e ignorantes. Mas isso não é realmente verdade.

O que somos, assumidamente, é hostil a pessoas que parecem não estar dispostos a pensar ou fazer a sua própria lição de casa antes de fazer perguntas. Pessoas assim são os dissipadores de tempo? Eles tomam sem dar de volta, e eles perdem tempo que poderia ter passado em outra questão mais interessante e uma outra pessoa mais digna de uma resposta. Nós chamamos pessoas como este ‘perdedores’ (e por razões históricas, por vezes, soletrá-lo  ‘lusers’).

Nós percebemos que há muitas pessoas que só querem usar o software que escrevemos, e que não têm interesse em aprender detalhes técnicos. Para a maioria das pessoas, um computador é apenas uma ferramenta, um meio para um fim; eles têm coisas mais importantes para fazer e vive para viver. Nós reconhecemos que, e não esperar que todos a ter um interesse nas questões técnicas que nos fascinam. No entanto, o nosso estilo de responder perguntas é ajustado para as pessoas que fazem tomar tal interesse e estão dispostos a ser participantes ativos na resolução de problemas. Isso não vai mudar. Nem deve; se o fizesse, que se tornaria menos eficaz nas coisas que fazemos melhor.

Estamos (em grande parte) voluntários. Nós tirar um tempo de vida ocupada para responder a perguntas, e às vezes estamos sobrecarregados com eles. Então, nós filtrar impiedosamente. Em particular, nós jogamos fora perguntas de pessoas que parecem ser os perdedores, a fim de gastar o nosso tempo respondendo a pergunta de forma mais eficiente, em vencedores.

Se você encontrar esta atitude desagradável, condescendente, ou arrogante, verificar os seus pressupostos. Nós não estamos pedindo para você genuflect para nós? Na verdade, a maioria de nós adoraria nada mais do que para lidar com você como um igual e recebê-lo em nossa cultura, se você colocar no esforço necessário para tornar isso possível. Mas não é simplesmente eficiente para nós para tentar ajudar as pessoas que não estão dispostos a ajudar a si mesmos. É OK ser ignorante; não é OK para jogar estúpido.

Assim, enquanto não é necessário já ser tecnicamente competente para chamar a atenção de nós, que é necessária para demonstrar o tipo de atitude que leva a competência? Alerta, pensativo, atento, disposto a ser um parceiro activo no desenvolvimento de uma solução. Se você não pode viver com este tipo de discriminação, sugerimos que você pagar alguém para um contrato de suporte comercial ao invés de pedir hackers para doar pessoalmente ajuda para você.

Se você decidir vir nos pedir ajuda, você não quer ser um dos perdedores. Você não quer parecer um, qualquer um. A melhor maneira de obter uma resposta rápida e ágil é perguntar-lo como uma pessoa com inteligência, confiança e pistas que só acontece de precisar de ajuda em um problema particular.

(Melhorias para este guia são bem-vindos. Você pode enviar sugestões para esrªthyrsus.com ou responder-autoªlinuxmafia.com. Note, porém, que este documento não se destina a ser um guia geral para netiqueta, e nós geralmente rejeitam sugestões que não são especificamente relacionados para suscitar respostas úteis em um fórum técnico.)

Antes que você pergunte

Antes de fazer uma pergunta técnica por e-mail, ou em um grupo de notícias ou em uma placa de site de bate-papo, faça o seguinte:

  1. Tente encontrar uma resposta, pesquisando os arquivos do fórum ou lista que você pretende publicar a discussão.
  2. Tente encontrar uma resposta através de pesquisa na Web.
  3. Tente encontrar uma resposta lendo o manual.
  4. Tente achar uma resposta lendo um FAQ.
  5. Tente encontrar uma resposta por inspeção ou experimentação.
  6. Tente encontrar uma resposta perguntando a um amigo qualificado.
  7. Se você é um programador, tentar encontrar uma resposta lendo o código fonte.

Quando você fazer sua pergunta, exibir o fato de você ter feito essas coisas em primeiro lugar; Isso ajudará a estabelecer que você não está sendo uma esponja preguiçosa e desperdiçar o tempo das pessoas. Melhor ainda, mostrar o que você aprendeu de fazer estas coisas. Nós gostamos de responder a perguntas para as pessoas que demonstraram que podem aprender com as respostas.

Use táticas como fazer uma pesquisa no Google sobre o texto de qualquer mensagem de erro que você começa (busca Google grupos, bem como páginas da Web). Este poderia muito bem levá-lo direto para corrigir documentação ou um fio lista de discussão respondendo à sua pergunta. Mesmo se isso não acontecer, dizendo ‘Eu pesquisei sobre a seguinte frase, mas não obteve qualquer coisa que parecia promissor’ é uma boa coisa para fazer em e-mail ou de notícias postagens pedir ajuda, mesmo porque ele registra o que procura won’ t ajuda. Ele também irá ajudar a dirigir outras pessoas com problemas semelhantes aos seu segmento ligando os termos de pesquisa para o que venha a ser o seu problema e linha resolução.

Não tenha pressa. Não espere para ser capaz de resolver um problema complicado com alguns segundos de googling. Leia e entenda as FAQs, sentar, relaxar e dar o problema algum pensamento antes de se aproximar especialistas. Confie em nós, eles serão capazes de dizer de suas perguntas quanto a leitura e pensar que você fez, e será mais dispostos a ajudar se você venha preparado. Não dispare imediatamente todo o seu arsenal de perguntas só porque sua primeira pesquisa apareceu nenhuma resposta (ou muitos).

Prepare a sua pergunta. Pensar sobre isso. Perguntas Hasty sonoridade obter respostas precipitadas, ou mesmo nenhum. Quanto mais você faz para demonstrar que ter colocado pensamento e esforço para resolver o seu problema antes de procurar ajuda, mais provável que você possa realmente obter ajuda.

Cuidado com a pergunta errada. Se você perguntar a um que é baseado em suposições equivocadas, J. Random Hacker é bastante provável para responder com uma resposta inutilmente literal ao pensar ‘Pergunta estúpida …’, e esperando que a experiência de obter o que você pediu e não o que você precisava vai ensinar -lhe uma lição.

Nunca assuma que você está intitulado a uma resposta. Você não é; você não está, afinal, a pagar pelo serviço. Você vai ganhar uma resposta, se você ganhar, fazendo uma interessante, e pergunta substancial, instigante? aquele que contribui de forma implícita à experiência da comunidade ao invés de meramente passiva exigindo conhecimento de outros.

Por outro lado, deixando claro que você é capaz e disposto a ajudar no processo de desenvolvimento da solução é um começo muito bom. ‘Será que alguém poderia fornecer um ponteiro?‘O que é meu exemplo faltando?’ ‘O site deve Tenho verificado? são mais propensos a ser respondida do que ‘Por favor, poste o procedimento exato que eu deveria usar.’ Porque você está deixando claro que você está realmente disposto a concluir o processo se alguém pode apenas apontar na direção certa.

Quando você pergunta

Escolha o seu fórum com cuidado

Seja sensível em escolher onde fazer sua pergunta. Que são susceptíveis de ser ignorado, ou baixados como um perdedor, se você:

  • envie sua pergunta para um fórum onde é tema
  • postar uma pergunta muito elementar para um fórum onde são esperados questões técnicas avançadas, ou vice-versa
  • cross-post para muitos grupos de notícias diferentes
  • postar um e-mail pessoal para alguém que não é nem um conhecido seu, nem pessoalmente responsável por resolver o seu problema

Hackers explodir a perguntas que são inadequadamente alvo, a fim de tentar proteger os seus canais de comunicação de ser afogado na irrelevância. Você não quer que isso aconteça com você.

O primeiro passo, portanto, é encontrar o fórum certo. Mais uma vez, outros métodos busca da Web Google e são seu amigo. Use-os para encontrar a página da Web projeto mais intimamente associado com o hardware ou software dando-lhe dificuldades. Normalmente, ele terá links para um FAQ (Frequently Asked Questions) lista, e projetar listas e seus arquivos. Estas listas de discussão são os lugares finais para ir para a ajuda, se os seus próprios esforços (incluindo lendo essas FAQs que você encontrou) não encontrar uma solução. A página do projeto podem também descrevem um procedimento de relatório de erro, ou tem um link para um; em caso afirmativo, segui-lo.

Disparando um e-mail para uma pessoa ou fórum que você não está familiarizado com é arriscado na melhor das hipóteses. Por exemplo, não assuma que o autor de uma página informativa quer ser seu consultor livre. Não faça suposições otimistas sobre se a sua pergunta será bem-vinda? Se não tiver certeza, enviá-lo em outro lugar, ou abster-se de enviá-lo em tudo.

Ao selecionar uma lista fórum Web, grupo de notícias ou de correio, não confie o nome por si só muito longe; procurar um FAQ ou charter para verificar a sua pergunta é sobre o tema. Leia parte do tráfego para trás antes de postar assim que você vai ter uma idéia de como as coisas são feitas lá. Na verdade, é uma idéia muito boa para fazer uma pesquisa de palavra-chave para palavras relacionadas ao seu problema no newsgroup ou lista de discussão arquivos antes de postar. Pode encontrar uma resposta, e se não ele vai ajudá-lo a formular uma pergunta melhor.

Não espingarda-blast todos os canais de ajuda disponíveis de uma só vez, isso é como gritar e irrita as pessoas. Passo através deles suavemente.

Saiba o que seu tópico é! Um dos erros clássicos está fazendo perguntas sobre a interface de programação Unix ou Windows em um fórum dedicado a um idioma ou biblioteca ou portátil ferramenta em ambos. Se você não entender por que isso é um erro, você seria melhor fora de não fazer quaisquer perguntas em tudo até que você obtê-lo.

Em geral, perguntas para um fórum público bem selecionado são mais propensos a obter respostas úteis do que questões equivalentes a um privado. Existem várias razões para isso. Uma delas é simplesmente o tamanho do pool de potenciais entrevistados. Outro é o tamanho da audiência; hackers preferem responder a perguntas que educar muitas pessoas do que perguntas que servem apenas alguns.

Compreensivelmente, os hackers qualificados e autores de software populares já estão recebendo mais do que seu quinhão de mensagens segmentadas mis. Ao acrescentar à inundação, você poderia, em casos extremos, até mesmo ser a palha que quebra o camelo para trás? Algumas vezes, contribuintes para projetos populares retiraram o seu apoio, porque os danos colaterais na forma de tráfego de e-mail inútil para suas contas pessoais tornou-se insuportável.

Estouro de Pilha

Search, em seguida, pedir na pilha de câmbio.

Nos últimos anos, a comunidade Pilha Troca de locais emergiu como um recurso importante para responder a questões técnicas e outras e é ainda o fórum preferencial para muitos projetos de código aberto.

Comece com uma pesquisa no Google antes de olhar para Pilha de Valores; Google indexa-lo em tempo real. Há uma boa chance de que alguém já fez uma pergunta semelhante, e os sites Pilha Exchange são muitas vezes perto do topo dos resultados de busca. Se você não encontrar nada através do Google, procurar novamente no site específico mais relevante para a sua pergunta (veja abaixo). Pesquisa com tags podem ajudar a diminuir os resultados.

Se você ainda não encontrou nada, colocar a sua pergunta sobre a um local onde é mais sobre o tema. Use as ferramentas de formatação, especialmente para código e adicionar tags que estão relacionados com a substância da sua pergunta (especialmente o nome da linguagem de programação, sistema operacional, ou biblioteca que você está tendo problemas com). Se um comentarista pede-lhe para obter mais informações, editar a sua mensagem principal para incluí-lo. Se nenhuma resposta é útil, clique na seta para cima para upvote-lo; se uma resposta dá uma solução para o seu problema, clique no cheque sob as setas de voto a aceitá-la como correta.

Pilha de câmbio cresceu para mais de 100 sites, mas aqui são os candidatos mais prováveis:

  • Super User é para perguntas sobre computação de propósito geral. Se sua pergunta não é sobre o código ou programas que você fala somente sobre uma conexão de rede, ele provavelmente vai aqui.
  • Pilha Overflow é para perguntas sobre programação.
  • Falha do servidor é para perguntas sobre servidor e administração de rede.

Vários projetos têm seus próprios sites específicos, incluindo Android, Ubuntu, TeX / LaTeX, e SharePoint. Confira o site Pilha troca de uma lista up-to-date.

Fóruns na Web e IRC

Seu grupo de usuários local, ou sua distribuição Linux, pode anunciar um fórum Web ou canal de IRC onde iniciantes podem obter ajuda. (Em países que não falam Inglês fóruns novatos são ainda mais susceptíveis de serem listas de discussão.) Estes são bons primeiros lugares a fazer, especialmente se você acha que pode ter tropeçou em um problema relativamente simples ou comum. Um canal de IRC anunciada é um convite aberto para fazer perguntas lá e muitas vezes obter respostas em tempo real.

Na verdade, se você tem o programa que está lhe dando problemas de uma distribuição Linux (como é comum hoje em dia), pode ser melhor perguntar no forum / lista da distro antes de tentar fórum projeto/list do programa. Hackers do projeto pode apenas dizer, ‘usar  o nosso build’.

Antes de postar a qualquer fórum Web, verifique se ele tem um recurso de pesquisa. Se isso acontecer, tente um par de palavras-chave pesquisas para algo como seu problema; ele só poderia ajudar. Se você fez uma pesquisa Web geral antes (como você deve ter), procurar o fórum de qualquer maneira; seu motor de busca em toda a Web pode não ter todos deste fórum indexado recentemente.

Há uma tendência crescente para os projetos de fazer suporte ao usuário durante um fórum Web ou canal de IRC, com o e-mail reservados mais para o tráfego de desenvolvimento. Portanto, procure os canais primeiro quando procuram ajuda específica do projeto.

No IRC, provavelmente é melhor não para despejar uma descrição do problema longa sobre a primeira coisa canal; algumas pessoas interpretam isso como canal de alagamento. Melhor para proferir uma linha com uma descrição do problema de uma forma armou para iniciar uma conversa no canal.

Como segundo passo, utilizar listas de discussão do projeto

Quando um projeto tem uma lista de discussão de desenvolvimento, escreva para a lista de discussão, e não para desenvolvedores individuais, mesmo se você acha que sabe quem pode melhor responder a sua pergunta. Verifique a documentação do projeto e sua homepage para o endereço de uma lista de discussão do projeto, e usá-lo. Existem várias boas razões para essa política:

  • Qualquer dúvida bom o suficiente para ser convidado de um desenvolvedor também será de valor para todo o grupo. Pelo contrário, se você suspeitar que sua pergunta é burro demais para uma lista de discussão, não é uma desculpa para hostilizar os desenvolvedores individuais.
  • Fazer perguntas na lista distribui a carga entre os desenvolvedores. O desenvolvedor individual (especialmente se ele é o líder de projeto) pode estar muito ocupado para responder suas perguntas.
  • A maioria das listas de discussão são arquivados e os arquivos são indexados pelos motores de busca. Se você fazer sua pergunta on-lista e ele for atendida, a consulente futuro poderia encontrar a sua pergunta ea resposta na Web em vez de pedir-lo novamente.
  • Se certas questões são vistos para ser perguntado muitas vezes, os desenvolvedores podem usar essa informação para melhorar a documentação ou o próprio software a ser menos confuso. Mas se essas perguntas são feitas em privado, ninguém tem o quadro completo do que perguntas são feitas na maioria das vezes.

Se um projeto tem tanto um ‘usuário’ e uma ‘developer’ (ou ‘hacker’) lista de discussão ou fórum Web, e você não está hackeando no código, pergunte no ‘user’ lista/fórum. Não assuma que você será bem-vinda na lista de desenvolvedores, onde eles estão propensos a experimentar a sua pergunta como ruído perturbar o tráfego desenvolvedor.

No entanto, se você estiver certo de sua pergunta é não-trivial, e você não recebe resposta no ‘user’ lista/fórum para vários dias, tente o ‘developer’ um. Você faria bem para se escondem lá por alguns daysor pelo menos rever os últimos dias de mensagens arquivadas, para aprender os costumes locais antes de postar (na verdade, este é um bom conselho em qualquer lista privada ou semi-privada).

Se não for possível encontrar o endereço de lista de discussão de um projeto, mas apenas ver o endereço do mantenedor do projeto, vá em frente e escrever para o mantenedor. Mas mesmo nesse caso, não assuma que a lista de discussão não existe. Mencionar em seu e-mail que você tentou e não conseguiu encontrar a lista de discussão apropriada. Também mencionar que você não me oponho a ter sua mensagem encaminhada para outras pessoas. (Muitas pessoas acreditam que privado e-mail deve permanecer privado, mesmo se não há nada de secreto nele. Ao permitir que sua mensagem seja encaminhada você dá o seu correspondente uma escolha sobre como lidar com seu e-mail.)

Usar significativas, cabeçalhos assuntos específicos

Em listas de discussão, newsgroups ou fóruns Web, o cabeçalho de assunto é a sua oportunidade de ouro para atrair a atenção dos peritos qualificados em cerca de 50 caracteres ou menos. Não desperdiçá-la em murmúrio como ‘Por favor, me ajude’ (muito menos ‘POR FAVOR ME AJUDE !!!!’; mensagens com assuntos como esse descartadas por reflexo). Não tente nos impressionar com a profundidade de sua angústia; usar o espaço para uma descrição do problema super-concisa em seu lugar.

Uma boa convenção para cabeçalhos de assunto, usado por muitas organizações de suporte técnico, é ‘objeto – desvio’. O ‘objeto’ parte especifica que coisa ou grupo de coisas está tendo um problema, eo ‘desvio’ parte descreve o desvio do comportamento esperado.

Estúpido:
SOCORRO! O vídeo não funciona corretamente no meu laptop!
Inteligente:
X.org 6.8.1 cursor do mouse disforme, Fooware MV1005 vid. chipset
Mais esperto:
X.org 6.8.1 cursor do mouse sobre Fooware MV1005 vid. chipset – é disforme

O processo de escrever um ‘objeto-desvio’ descrição irá ajudá-lo a organizar o seu pensamento sobre o problema em mais detalhes. O que é afetado? Apenas o cursor do mouse ou outros elementos gráficos também? É este específicas para a versão X.org de X? Para a versão 6.8.1? É este específico para Fooware chipsets de vídeo? Para modelar MV1005? Um hacker que vê o resultado pode entender imediatamente o que é que você está tendo um problema com  e  o problema que você está tendo, num ápice.

De modo mais geral, imagine olhando para o índice de um arquivo de perguntas, apenas com as linhas de assunto mostrando. Faça sua linha de assunto refletir sua pergunta bem o suficiente para que a próxima pessoa busca o arquivo com uma pergunta semelhante ao seu será capaz de seguir o fio para uma resposta em vez de postar a pergunta novamente.

Se você faz uma pergunta em uma resposta, certifique-se de mudar a linha de assunto para indicar que você está fazendo uma pergunta. A linha de assunto que se parece com ‘Re: test’ ou ‘Re: novo erro’ é menos provável para atrair quantidades úteis de atenção. Além disso, pare cotação das mensagens anteriores ao mínimo compatível com cluing em novos leitores.

Não basta clicar em responder a uma mensagem da lista, a fim de iniciar um segmento inteiramente novo. Isso irá limitar o seu público. Alguns leitores de email, como o vira-lata, permitir que o usuário para ordenar por fio e, em seguida, ocultar mensagens em um fio dobrando o fio. As pessoas que fazem isso nunca vai ver a sua mensagem.

Mudando de assunto não é suficiente. Mutt, e provavelmente outros leitores de email, olha para outras informações nos cabeçalhos do e-mail para atribuí-la a um fio, não a linha de assunto. Em vez disso começar um inteiramente novo e-mail.

Em fóruns na Web as regras de boas práticas são um pouco diferentes, porque as mensagens são geralmente muito mais ligado a linhas de discussão específicos e muitas vezes invisível fora desses tópicos. Mudando de assunto ao fazer uma pergunta em resposta não é essencial. Nem todos os fóruns permitem mesmo assunto linhas separadas em respostas, e quase ninguém lê-los quando eles fazem. No entanto, fazendo uma pergunta em uma resposta é uma prática duvidosa em si, porque ela só vai ser visto por aqueles que estão assistindo esta discussão. Então, a menos que você tem certeza de que quer pedir Somente as pessoas atualmente ativos no segmento, começar um novo.

Tornar mais fácil para responder

Terminando sua consulta com ‘Por favor, envie a sua resposta a …’ torna bastante improvável que você vai obter uma resposta. Se você não pode ser incomodado para tomar mesmo os poucos segundos necessários para configurar uma correta cabeçalho Reply-To no seu agente de correio, que não pode ser incomodado para demorar ainda alguns segundos para pensar sobre o seu problema. Se o seu programa de correio não permite isso, obter um melhor programa de correio. Se seu sistema operacional não suporta todos os programas de e-mail que permitem isso, obter um sistema operacional melhor.

Em fóruns na Web, pedindo uma resposta por e-mail é liminarmente rude, a menos que você acredita que as informações podem ser sensíveis (e alguém vai, por alguma razão desconhecida, deixá-lo, mas não o fórum inteiro sabe disso). Se você quiser uma cópia de e-mail quando alguém responde em fio, solicitar que o fórum Web enviá-lo; este recurso é suportado em quase toda parte sob opções como ‘assistir esta discussão’‘enviar e-mails em respostas’, etc.

Escrever, gramatical, linguagem clara corretamente soletrado

Encontramos pela experiência que as pessoas que são escritores descuidados e negligentes são geralmente também descuidada e desleixada no pensamento e codificação (muitas vezes o suficiente para apostar em, pelo menos). Respondendo a perguntas de pensadores descuidados e negligentes não é gratificante; nós preferimos gastar nosso tempo em outro lugar.

Portanto, expressar a sua pergunta de forma clara e bem é importante. Se você não pode ser incomodado para fazer isso, não pode ser incomodado para prestar atenção. Passe o esforço extra para polir seu idioma. Ele não tem que ser rígida ou formal? De fato, cultura hacker valoriza a linguagem informal, slangy e bem-humorado usado com precisão. Mas tem que ser precisa; tem que haver alguma indicação de que você está pensando e prestando atenção.

Soletrar, pontuar, e capitalizar corretamente. Não confunda ‘seu’ com ‘é’‘solto’ com ‘perder’, ou ‘discreta’ com ‘discreta’. Não digitar tudo em maiúsculas; este é lido como gritos e considerado rude. (All-Smalls é apenas ligeiramente menos irritante, já que é difícil de ler. Alan Cox pode fugir com ele, mas você não pode.)

De modo mais geral, se você escreve como um peito semi-alfabetizados você vai muito provavelmente ser ignorado. Portanto, não use atalhos de mensagens instantâneas. Ortografia “você” como “u” faz você olhar como um peito semi-alfabetizados para salvar duas teclas digitadas inteiras. Pior: a escrita como um hax0r script kiddie l33t é o beijo absoluto de morte e garante que você vai receber nada além do silêncio de pedra (ou, na melhor das hipóteses, uma baciada ajuda de desprezo e sarcasmo) em troca.

Se você está fazendo perguntas em um fórum que não usa a sua língua nativa, você terá uma quantidade limitada de folga para erros de ortografia e gramática? Mas nenhuma folga extra em tudo para a preguiça (e sim, nós geralmente pode detectar essa diferença). Além disso, se você não sabe o que são línguas do seu entrevistado, escrever em Inglês. Hackers ocupados tendem a perguntas simplesmente lavar em línguas que eles não entendem, e Inglês é a língua de trabalho da Internet. Ao escrever em Inglês-lo a minimizar suas chances de que sua pergunta será descartado não lida.

Se você estiver escrevendo em Inglês, mas é uma segunda língua para você, é boa forma para alertar potenciais entrevistados dificuldades de linguagem potenciais e opções para se locomover-los. Exemplos:

  • Inglês não é minha língua nativa; por favor, desculpe erros de digitação.
  • Se você falar $ LÍNGUA, por favor enviar e-mail / PM-me; I pode precisar de ajuda traduzir a minha pergunta.
  • Estou familiarizado com os termos técnicos, mas algumas gírias e expressões idiomáticas são difíceis para mim.
  • Eu afixei minha pergunta em $ LÍNGUA e Inglês. Eu vou ser feliz para traduzir as respostas, se você usar apenas um ou o outro.

Envie perguntas, formatos padrão acessíveis

Se você fizer a sua pergunta artificialmente difícil de ler, é mais provável a ser preterido em favor de um que não é. Assim:

  • Enviar e-mail de texto simples, não HTML. (Não é difícil desligar HTML.)
  • Anexos MIME são geralmente OK, mas somente se eles são conteúdo real (como um arquivo de origem anexado ou patch), e não apenas clichê gerado pelo seu cliente de email (como uma outra cópia da sua mensagem).
  • Não envie e-mail no qual parágrafos inteiros são linhas simples envolveu-se multiplicam. (Isso torna muito difícil de responder apenas parte da mensagem.) Suponha que seus respondentes será ler e-mails em displays de texto de 80 caracteres de largura e definir a sua quebra de linha em conformidade, para algo inferior a 80.
  • No entanto, não não envolva dados (como arquivo de log lixeiras ou transcrições de sessão) em qualquer largura de coluna fixa. Os dados devem ser incluídos como-é, então entrevistados podem ter confiança de que eles estão vendo o que viu.
  • Não envie MIME codificação Citado de Impressão para um fórum em língua Inglês. Esta codificação pode ser necessário quando você está postando em um ASCII linguagem não cobre, mas muitos agentes de e-mail não apoiá-lo. Quando eles quebram, todas aquelas = 20 glifos espalhadas ao longo do texto são feios e distrair? Ou pode sabotar ativamente a semântica do seu texto.
  • Nunca, nunca esperar hackers para ser capaz de ler formatos de documentos proprietários fechados, como o Microsoft Word ou Excel. A maioria dos hackers reagir a estes tão bem quanto você faria para ter uma pilha fumegante de estrume de porco despejado à sua porta. Mesmo quando eles podem lidar, eles se ressentem de ter que fazê-lo.
  • Se você está enviando e-mail de uma máquina Windows, desligue problemática da Microsoft ‘aspas inglesas’ recurso (De Ferramentas> Opções de AutoCorreção, desmarque a caixa de seleção citações inteligentes sob Formatar ao escrever.). Isto é assim que você vai evitar aspersão caracteres de lixo através de seu e-mail.
  • Em fóruns na Web, não abuse ‘sorridentes’ e ‘html’ características (quando eles estão presentes). Um smiley ou dois é geralmente OK, mas colorido texto extravagante tende a tornar as pessoas pensam que você é coxo. Sério uso excessivo de smileys e cores e fontes vai fazer você sair como uma menina risonha adolescente, que não é geralmente uma boa idéia a menos que você está mais interessado em sexo do que respostas.

Se você estiver usando um cliente de email de interface gráfica como o Netscape Messenger, MS Outlook, ou sua laia, cuidado que ele pode violar essas regras quando usado com suas configurações padrão. A maioria desses clientes têm um menu-based ‘View Source’ comando. Use isso em algo em sua pasta enviado, verificando envio de texto simples sem crud anexado desnecessário.

Seja preciso e informativo sobre o seu problema

  • Descrever os sintomas de seu problema ou erro com cuidado e de forma clara.
  • Descreva o ambiente em que ele ocorre (máquina, sistema operacional, aplicativos, qualquer que seja). Fornecer distribuição do fornecedor e solte nível (por exemplo: ‘Fedora Core 7’,‘Slackware 9.1’ , etc.).
  • Descreva a pesquisa que você fez para tentar entender o problema antes de fazer a pergunta.
  • Descrever as etapas de diagnóstico que você tomou para tentar fixar para baixo o problema si mesmo antes de fazer a pergunta.
  • Descreva todas as alterações recentes, possivelmente relevantes na sua configuração de computador ou software.
  • Se possível, fornecer uma maneira de reproduzir o problema em um ambiente controlado.

Faça o melhor que puder para antecipar as perguntas que um hacker irá pedir, e respondê-las com antecedência, a seu pedido de ajuda.

Dando hackers a capacidade de reproduzir o problema em um ambiente controlado é especialmente importante se você está relatando algo que você acha que é um erro no código. Quando você fizer isso, suas chances de conseguir uma resposta útil e a velocidade com que você são susceptíveis de obter essa resposta tanto melhorar tremendamente.

Simon Tatham escreveu um excelente ensaio intitulado Como relatar erros de forma eficaz. Eu recomendo fortemente que você lê-lo.

O volume não é precisão

Você precisa ser preciso e informativo. Este final não é servido por simplesmente despejar grandes volumes de código ou dados em um pedido de ajuda. Se você tem um caso de teste grande, complicada que está quebrando um programa, tente prepará-la e torná-la tão pequena quanto possível.

Isso é útil para, pelo menos, três razões. Um: ser visto a investir esforço para simplificar a questão torna-se mais provável que você vai obter uma resposta, Dois: simplificando a questão torna mais provável que você vai ter uma útil resposta. Três: No processo de refinar seu relatório de erro, você pode desenvolver uma correção ou solução alternativa si mesmo.

Não se apresse para reivindicar que você encontrou um erro

Quando você está tendo problemas com um pedaço de software, não reivindicamos ter encontrado um erro, a menos que você é muito, muito certo de sua terra. Dica: a menos que você pode fornecer um patch de código-fonte que corrige o problema, ou um teste de regressão contra uma versão anterior que demonstra um comportamento incorreto, você provavelmente não tem certeza suficiente. Isso se aplica a páginas da Web e documentação, também; se você encontrou uma documentação ‘erro’, você deve fornecer texto de substituição e que páginas ele deve ir em frente.

Lembre-se, há muitos outros usuários que não estão experimentando o seu problema. Caso contrário, você teria aprendido sobre isso ao ler a documentação e pesquisa na Web (você fez isso antes de se queixar, não é mesmo?). Isto significa que, muito provavelmente, é você que está fazendo algo errado, não o software.

As pessoas que escreveram o software trabalhar muito duro para fazê-lo funcionar tão bem quanto possível. Se você afirmar ter encontrado um erro, você será impugnando sua competência, o que pode ofender alguns deles até mesmo se você está correto. É especialmente undiplomatic a gritar ‘erro’ na linha Assunto.

Ao fazer sua pergunta, o melhor é escrever como se você assumir que você está fazendo algo errado, mesmo se você estiver em privado certeza de ter encontrado um erro real. Se realmente existe um erro, você vai ouvir sobre isso na resposta. Jogá-lo para que os mantenedores vai querer pedir desculpas a você se o erro é real, ao invés de modo que você deve a eles um pedido de desculpas se você desarrumada.

 

Rastejante não é um substituto para fazer sua lição de casa

Algumas pessoas que recebem que eles não deveriam se comportar grosseiramente ou arrogantemente, exigindo uma resposta, retirar-se para o extremo oposto de rastejar. ‘Eu sei que eu sou apenas um perdedor novato patético, mas …’. Isso é perturbador e inútil. É especialmente irritante quando ele é combinado com indefinição sobre o problema real.

Não desperdice o seu tempo, ou o nosso, sobre a política de primatas bruto. Em vez disso, apresentar os fatos de fundo e a sua pergunta tão claramente quanto possível. Essa é a melhor maneira de posicionar-se que por rastejante.

Às vezes, fóruns na Web têm lugares separados para perguntas novatos. Se você acha que tenho uma pergunta novato, basta ir lá. Mas não se rastejar lá.

Descreva os sintomas do problema, e não seus palpites

Não é útil para dizer hackers que você acha que está causando o problema. (Se suas teorias de diagnóstico era tal coisa quente, você seria consultar outras pessoas para ajudar?) Então, certifique-se que você está dizendo-lhes os sintomas matérias de que corre mal, ao invés de suas interpretações e teorias. Deixe-os fazer a interpretação e diagnóstico. Se você sente que é importante afirmar o seu palpite, rotulá-la claramente como tal e descrever por que a resposta não está funcionando para você.

Estúpido:
Estou ficando back-to-back erros Sig11 em compilações do kernel, e suspeitar de uma rachadura em um dos traços da placa-mãe. Qual é a melhor maneira de verificar para quem?
Inteligente:
Minha casa construída K6/233 em uma placa-mãe FIC-PA2007 (VIA Apollo VP2 chipset) com 256MB Corsair PC133 SDRAM começa a ficar erros Sig11 frequente cerca de 20 minutos depois de power-on durante o curso do kernel compila, mas nunca nos primeiros 20 minutos. Que a reinicialização não reiniciar o relógio, mas desligar durante a noite faz. Trocar toda a RAM não ajudou. A parte relevante de um log típica sessão de compilação segue.

Desde o ponto anterior parece ser uma pergunta difícil para muitas pessoas a entender, aqui está uma frase para lembrá-lo: “Todos os diagnosticadores são de Missouri.” Esse lema oficial do estado norte-americano é “Mostre-me” (ganhou em 1899, quando o congressista Willard D . Vandiver disse “Eu venho de um país que levanta milho e algodão e carrapichos e democratas, e eloqüência espumoso não convence nem me satisfaz. Eu sou de Missouri. Você tem que me mostrar.”) No caso de diagnosticadores, é não uma questão de ceticismo, mas sim um literal, necessidade funcional para ver o que está mais próximo possível para a mesma evidência crua que você vê, ao invés de suas suposições e resumos. Mostre-nos.

Descreva os sintomas do seu problema em ordem cronológica

As pistas mais úteis em descobrir algo que deu errado se encontram frequentemente nos eventos imediatamente anteriores. Então, sua conta deve descrever exatamente o que você fez, e o que a máquina e software fez, levando até a explosão. No caso de processos de linha de comando, tendo um registo de sessão (por exemplo, utilizando o utilitário de script) e citando os relevantes vinte ou mais linhas é muito útil.

Se o programa que explodiu em você tem opções de diagnóstico (como -v para verbose), tente selecionar opções que irá adicionar informações de depuração útil para a transcrição. Lembre-se que mais não é necessariamente melhor; tente escolher um nível de depuração que irá informar, em vez de se afogar o leitor no lixo.

Se a sua conta acaba sendo longa (mais de cerca de quatro parágrafos), pode ser útil para indicar sucintamente o principal problema, então siga com o conto cronológica. Dessa forma, os hackers vão saber o que observar na leitura de sua conta.

Descrever o objetivo, e não o passo

Se você está tentando descobrir como fazer algo (ao contrário de relatar um bug), começar por descrever a meta. Só então descrever a etapa especial para ele que você está bloqueado em.

Muitas vezes, as pessoas que precisam de ajuda técnica tem um objetivo de alto nível em mente e ficar preso em que eles acham que é um caminho particular para a meta. Eles vêm para ajudar com o passo, mas não percebem que o caminho é errado. Pode demorar esforço substancial para superar isso.

Estúpido:
Como faço para obter a cor-picker no programa FooDraw para tomar um valor RGB hexadecimal?
Inteligente:
Eu estou tentando substituir a tabela de cores em uma imagem com valores de minha escolha. Neste momento, a única maneira que eu posso ver de fazer isso é através da edição cada slot mesa, mas eu não posso começar seletor de cores do FooDraw para tomar um valor RGB hexadecimal.

A segunda versão da pergunta é inteligente. Ele permite que uma resposta que sugere uma ferramenta mais adequada para a tarefa.

Não pedir às pessoas para responder por e-mail privado

Hackers acreditam que a solução de problemas deve ser um processo público, transparente durante o qual uma primeira tentativa de uma resposta pode e deve ser corrigida, se alguém percebe mais experientes que esteja incompleta ou incorreta. Além disso, ajudantes obter algum do seu recompensa por ser entrevistados de ser visto para ser competente e conhecedor por seus pares.

Quando você pedir uma resposta privada, você está interrompendo o processo e a recompensa. Não faça isso. É o entrevistado escolha se deseja responder em particular? E se ele ou ela faz, geralmente é porque ele ou ela pensa que a questão é muito mal-formado ou óbvia a ser interessante para os outros.

Há uma exceção limitada a esta regra. Se você acha que a questão é de tal forma que é provável que você obter muitas respostas que são todos muito semelhantes, então as palavras mágicas são ‘e-mail me e vou resumir as respostas para o grupo’. É cortês para tentar salvar a lista de discussão ou newsgroups uma inundação de postagens substancialmente idênticas? Mas você tem que manter a promessa de resumir.

Seja explícito sobre sua pergunta

perguntas abertas tendem a ser percebidos como sumidouros de tempo abertas. Aquelas pessoas com maior probabilidade de ser capaz de dar-lhe uma resposta útil também são as pessoas mais ocupadas (se só porque eles assumem a maior parte-se trabalhar). Pessoas assim são alérgicas a abrir-ended pias de tempo, portanto, eles tendem a ser alérgico a open-ended perguntas.

Você é mais provável conseguir uma resposta útil se você é explícito sobre o que você quer entrevistados para fazer (fornecer indicações, enviar o código, verificar a sua correção, o que for). Isto irá concentrar seus esforços e colocar implicitamente um limite superior sobre o tempo ea energia um entrevistado deve alocar a ajudá-lo. Isso é bom.

Para compreender o mundo os especialistas viver, pensar de especialização como um recurso e tempo para responder como um escasso um abundante. A menos de um compromisso vez que você perguntar implicitamente, o mais provável que você para obter uma resposta de alguém realmente bom e muito ocupado.

Por isso, é útil para enquadrar sua pergunta para minimizar o compromisso do tempo necessário para um especialista para área de TI? mas isso muitas vezes não é a mesma coisa que simplificar a questão. Assim, por exemplo,‘Você me dar um ponteiro para uma boa explicação de X?’ é geralmente uma questão mais esperto do que ‘Poderia explicar X, por favor? Se você tem algum código de mau funcionamento, geralmente é mais inteligente para pedir a alguém para explicar o que está errado com ele do que está a pedir a alguém para consertá-lo.

Quando perguntando sobre o código

Não pedir a outros para depurar seu código quebrado sem dar uma dica que tipo de problema eles devem estar procurando. Publicação de algumas centenas de linhas de código, dizendo que “não funciona”, você vai ter ignorado. Publicação de uma dúzia de linhas de código, dizendo que “após a linha 7 Eu estava esperando para ver <x>, e <y> ocorreu em vez” é muito mais provável que você obtenha uma resposta.

A maneira mais eficaz para ser mais preciso sobre um problema de código é fornecer um caso de teste mínimo-demonstrando bug. O que é um caso de teste mínimo? É uma ilustração do problema; apenas o código suficiente para apresentar o comportamento indesejável e não mais. Como você faz um caso de teste mínimo? Se você sabe que linha ou seção de código está produzindo o comportamento problemático, faça uma cópia do mesmo e adicionar apenas o suficiente apoio código para produzir um exemplo completo (ou seja, o suficiente para que a fonte é aceitável para o compilador/intérprete/whatever aplicação processa-lo). Se você não pode reduzi-lo a uma determinada seção, faça uma cópia da fonte e começar a remover pedaços que não afetam o comportamento problemático. Quanto menor for o seu caso de teste mínimo é, o melhor (veja  a seção chamada ‘O volume não é precisão’).

Gerando um caso de teste mínimo muito pequeno não será sempre possível, mas tentando é boa disciplina. Pode ajudá-lo a aprender o que você precisa para resolver o problema em seu próprio país? E mesmo quando isso não acontece, os hackers gostam de ver que você já tentou. Ele irá torná-los mais cooperativa.

Se você simplesmente quer uma revisão de código, dizem tanto na frente, e não se esqueça de mencionar que áreas você acha que pode particularmente precisa de revisão e porquê.

Não poste perguntas de casa

Hackers são bons em detectar questões de casa; a maioria de nós fizeram-los nós mesmos. Estas questões são para você trabalhar para fora, de modo que você vai aprender com a experiência. É OK para pedir sugestões, mas não para soluções inteiras.

Se suspeitar que você tenha sido aprovada uma pergunta lição de casa, mas não pode resolvê-lo de qualquer maneira, tente perguntar em um fórum usuário ou grupo (como último recurso) em um ‘user’ lista/fórum de um projeto. Enquanto os hackers vai detectá-lo, alguns dos usuários avançados podem, pelo menos, dar uma dica.

Podar consultas inúteis

Resista à tentação de fechar seu pedido de ajuda com perguntas semanticamente nulas como ‘Alguém pode me ajudar?’ ou ‘Existe uma resposta? Primeiro: se você escrever sua descrição do problema no meio do caminho com competência, tais alinhavar-em questões são, na melhor supérfluo. Segundo: porque eles são supérfluos, hackers encontrá-los chato? e é provável que retornar respostas logicamente impecável, mas desdenhosos como ‘Sim, você pode ser ajudado’ e ‘Não, não há nenhuma ajuda para você.’

Em geral, pedindo sim-ou-não perguntas é uma coisa boa para evitar a menos que você quer um  sim ou nenhuma resposta.

Não sinalize a sua pergunta como  ‘urgente’, mesmo que seja para você

Isso é problema seu, não nosso. Alegando urgência é muito provável que seja contra-producente: a maioria dos hackers simplesmente excluir essas mensagens como tentativas rudes e egoístas que provocam atenção imediata e especial. Além disso, a palavra ‘urgente’ (e outras tentativas semelhantes para agarrar a atenção na linha de assunto), muitas vezes desencadeia filtros de spam – seus destinatários pode nunca vê-lo em tudo!

Há um semi-excepção. Pode valer a pena mencionar se você estiver usando o programa em algum lugar de alto perfil, que os hackers vão receber cerca animado; em tal caso, se você estiver sob pressão de tempo, e você dizer isso educadamente, as pessoas podem se interessar o suficiente para responder mais rápido.

Isso é uma coisa muito arriscado de fazer, no entanto, porque métrica dos hackers para o que é excitante provavelmente difere da sua. Publicação da Estação Espacial Internacional se qualificar, por exemplo, mas a postar em nome de uma causa de caridade ou política de bem-estar quase certamente não. Na verdade, postando ‘Urgente: me ajudar a salvar as focas bebés distorcido!’ terá confiável você evitado ou inflamado mesmo por hackers que pensam focas bebés difusos são importantes.

Se você encontrar este misterioso, voltar a ler o resto deste how-to repetidamente até entendê-lo antes de postar alguma coisa.

Cortesia nunca é demais, e às vezes ajuda

Seja gentil. Use ‘por favor’ e ‘Obrigado por sua atenção’ ou ‘Obrigado por sua consideração’. Deixe claro que você apreciar o tempo que as pessoas passam a ajudar de graça.

Para ser honesto, isto não é tão importante como (e não pode substituir) sendo gramatical, claro, preciso e descritivo, evitando formatos proprietários etc.; hackers em geral preferem obter relatórios de bugs pouco bruscas mas tecnicamente afiados do que imprecisão educado. (Se isto confunde você, lembre-se que valorizamos uma pergunta por que ela nos ensina.)

No entanto, se você tem seus patos técnicos em uma fileira, polidez faz aumentar suas chances de obter uma resposta útil.

(Devemos notar que a única objeção séria que recebemos de hackers veteranos para este COMO FAZER é com relação a nossa recomendação anterior para usar  ‘Obrigado antecipadamente’. Alguns hackers sentir essa conota a intenção de não agradecer a alguém depois. Nossa recomendação é que quer dizer  ‘Obrigado antecipadamente’ primeiro e agradecer entrevistados depois, ou expressar a cortesia de uma forma diferente, como dizendo ‘Obrigado por sua atenção’ ou ‘Obrigado por sua consideração’.)

Seguir-se com uma breve nota sobre a solução

Enviar uma nota depois que o problema foi resolvido a todos os que o ajudaram; que eles saibam como ele saiu e agradecê-los novamente por sua ajuda. Se o problema atraiu o interesse geral em uma lista de discussão ou newsgroup, é apropriado para postar o acompanhamento lá.

Idealmente, a resposta deve ser para o segmento iniciado pela postagem pergunta original, e deveria ter ?FIXO ?, ?Resolvido? ou um tag igualmente óbvio na linha de assunto. Em listas de discussão com retorno rápido, um entrevistado potencial que vê uma discussão sobre ‘Problema X’ terminando com ‘Problema X – FIXO’ não sabe a perder sua/seu tempo, mesmo lendo o fio (a menos que ele (a) pessoalmente encontra Problema X interessante) e, portanto, pode usar esse tempo resolvendo um problema diferente.

O seu acompanhamento não tem que ser longo e complicado; um simples ‘Olá? era um cabo de rede falhou! Obrigado, todos. – Bill’ seria melhor do que nada. Na verdade, um resumo curto e doce é melhor do que uma longa dissertação, a menos que a solução tem verdadeira profundidade técnica. Diga o que ação resolveu o problema, mas você não precisa repetir a seqüência de resolução de problemas todo.

Para problemas com alguma profundidade, é adequado para deixar um resumo da história solução de problemas. Descreva a sua declaração final problema. Descreva o que funcionou como uma solução, e indicar becos sem saída evitáveis depois disso. Os becos sem saída deve vir depois a solução correta e outro material resumo, em vez de virar o acompanhamento em uma história de detetive. Nomear os nomes das pessoas que o ajudaram; você vai fazer amigos assim.

Além de ser cortês e informativo, este tipo de acompanhamento irá ajudar os outros em busca do arquivo da lista de discussão/grupo de notícias/ fórum para saber exatamente qual a solução que você ajudou e, portanto, também pode ajudá-los.

Por último, e não menos importante, este tipo de acompanhamento ajuda a todos que ajudaram sentir uma sensação satisfatória de encerramento sobre o problema. Se você não é um techie ou um hacker mesmo, confiar em nós que este sentimento é muito importante para os gurus e especialistas que tocou para obter ajuda. narrativas problema que paro em nada por resolver são coisas frustrantes; hackers coçar para vê-los resolvido. O ágio que coçar que coceira você ganha vai ser muito, muito útil para você na próxima vez que você precisa para fazer uma pergunta.

Pense em como você pode ser capaz de evitar que outras pessoas com o mesmo problema no futuro. Pergunte-se se a documentação ou FAQ remendo iria ajudar, e se a resposta for sim enviar esse patch para o mantenedor.

Entre hackers, este tipo de comportamento bom acompanhamento é realmente mais importante do que a educação convencional. É como você ter uma reputação de jogar bem com os outros, que podem ser um recurso muito valioso.

Como interpretar Respostas

RTFM e STFW: Como saber Você Sério estragado

Há uma tradição antiga e sagrada: se você receber uma resposta que lê  ‘RTFM’ , a pessoa que o enviou acha que você deve ter lido o manual do caralho. Ele ou ela é quase certamente certo. Vá ler.

RTFM tem um parente mais jovem. Se você receber uma resposta que lê ‘STFW’, a pessoa que o enviou acha que você deveria ter Procurado a porra Web. Ele ou ela é quase certamente certo. Vá procurá-la. (A versão mais suave deste é quando você disse ‘Google é seu amigo!’).

Em fóruns na Web, você também pode ser dito para procurar nos arquivos do fórum. De fato, alguém pode até ser tão amável para fornecer um ponteiro para o segmento anterior, onde este problema foi resolvido. Mas não contar com esta consideração; fazer o seu arquivo-searching antes de pedir.

Muitas vezes, a pessoa dizendo-lhe para fazer uma pesquisa tem o manual ou a página da web com a informação que você precisa aberto, e está olhando para ele como ele ou ela tipos. Estas respostas significam que o respondedor pensa (a) a informação que você precisa é fácil de encontrar, e (b) você vai aprender mais se você procurar a informação do que se você tem isso de mão beijada para você.

Você não deve ser ofendido por isso; pelos padrões de hackers, o entrevistado está mostrando um tipo áspero de respeito simplesmente por não ignorá-lo. Em vez disso você deve ser grato por esta bondade de avó.

Se você não entende…

Se você não entender a resposta, não saltam imediatamente de volta uma demanda por esclarecimentos. Usar as mesmas ferramentas que você usou para tentar responder à sua pergunta original (manuais, FAQs, Web, amigos qualificados) para entender a resposta. Então, se você ainda precisa de pedir esclarecimentos, exibem o que você aprendeu.

Por exemplo, suponha que eu lhe digo: ‘Parece que você tem uma zentry preso; você precisa limpá-la.’ Então: aqui está uma  pergunta acompanhamento: ‘O que é um zentry? Aqui está uma boa pergunta acompanhamento: ‘OK, eu li a página man e zentries são apenas mencionados sob o -z e -p. Nenhum deles diz nada sobre o cancelamento zentries. É um destes ou estou faltando alguma coisa aqui?

Lidar com grosseria

Muito do que se parece com grosseria em círculos hacker não tem a intenção de ofender. Pelo contrário, é o produto do estilo de comunicação, cut-through-the-besteira direta que é natural para as pessoas que estão mais preocupados sobre como resolver problemas do que fazer os outros sentir morno e distorcido.

Quando você percebe grosseria, tente reagir com calma. Se alguém está realmente agindo fora, é muito provável que uma pessoa idosa na lista ou grupo de notícias ou fórum irá chamar-lhe sobre ele. Se isso não acontecer e você perder o seu temperamento, é provável que a pessoa que você perdê-lo no estava se comportando dentro das normas da comunidade de hackers e você será considerado em falta. Isso vai prejudicar suas chances de obter as informações ou ajuda que você deseja.

Por outro lado, você irá ocasionalmente executar toda grosseria e postura que é completamente desnecessário. O outro lado da moeda do acima é que é forma aceitável para bater criminosos reais bastante difícil, dissecando seu mau comportamento com um bisturi verbal afiada. Seja muito, muito certo do seu solo antes de você tentar fazer isso, no entanto. A linha entre a correção de uma incivilidade e iniciar uma flamewar inútil é fina o suficiente para que os próprios hackers não raramente errar através dela; se você é um novato ou um estranho, suas chances de evitar tal erro são baixos. Se você é após a informação em vez de entretenimento, é melhor manter seus dedos do teclado do que arriscar isso.

(Algumas pessoas afirmam que muitos hackers têm uma forma leve de autismo ou Síndrome de Asperger, e são realmente faltando alguns dos circuitos cerebrais que lubrifica ‘normal’ interação social humana. Isso pode ou não ser verdade. Se você não é um hacker-se, pode ajudá-lo a lidar com as nossas excentricidades, se você pensa de nós como sendo uma lesão cerebral Vá em frente Nós não vai se importar;.. que gostaria de ser tudo o que é que somos, e geralmente têm um saudável ceticismo sobre rótulos clínicos).

As observações de Jeff Bigler sobre filtros tato também são relevantes e vale a pena ler.

Na próxima seção, vamos falar sobre uma questão diferente; o tipo de ‘grosseria’ você vai ver quando você se comportar mal.

Por não reagindo como um perdedor

As probabilidades são que você vai estragar algumas vezes em fóruns da comunidade de hackers? Em formas detalhadas neste artigo, ou similar. E você vai ser dito exatamente como você asneira, possivelmente com apartes coloridos. Em público.

Quando isso acontece, a pior coisa que você pode fazer é lamentar sobre a experiência, afirmam ter sido verbalmente agredido, desculpas demanda, gritar, prender a respiração, ameaçar processos, reclamar aos empregadores das pessoas, deixar o assento da sanita para cima, etc. Em vez disso, aqui está o que você faz:

Deixe isso para trás. É normal. Na verdade, é saudável e adequada.

Normas comunitárias não mantêm-se: Eles estão mantidos por pessoas aplicá-las ativamente, visivelmente, em público. Não se queixem de que todas as críticas deveriam ter sido transmitida via e-mail privado: Isso não é assim que funciona. Nem é útil insistir que você foi pessoalmente insultado quando alguém comenta que uma das suas reivindicações estava errado, ou que seus pontos de vista diferentes. Essas são atitudes perdedor.

Houve fóruns de hackers, onde, por algum senso equivocado de hiper-cortesia, os participantes são proibidos de publicar qualquer busca de falhas com mensagens dos outros, e disse ‘Não diga nada se você estiver disposto a ajudar o usuário.’ A partida resultante de participantes clueful para outro lugar faz com que eles descem para balbuciar sem sentido e se tornam inúteis como fóruns técnicos.

Exageradamente ‘friendly’ (em que a moda) ou útil: escolha um.

Lembre-se: quando aquele hacker diz que você asneira, e (não importa o quão rudemente) diz-lhe para não fazê-lo novamente, ele está agindo por preocupação com (1) você e (2) sua comunidade. Seria muito mais fácil para ele ignorá-lo e filtrar você fora de sua vida. Se você não consegue ser grato, pelo menos, ter um pouco de dignidade, não lamente, e não esperar ser tratado como uma boneca frágil só porque você é um recém-chegado com uma alma teatralmente hipersensível e delírios de direito .

Às vezes as pessoas vão atacá-lo pessoalmente, chama sem uma razão aparente, etc., mesmo se você não estragar (ou só asneira em sua imaginação). Neste caso, reclamando é o caminho para realmente estragar.

Estes flamers são ou lamers que não têm uma pista, mas se julgam especialistas, ou pretensos psicólogos testar se você vai estragar. Os outros leitores ignorá-los, ou encontrar maneiras de lidar com eles por conta própria. O comportamento dos flamers’ cria problemas para si mesmos, que não tem que lhe dizem respeito.

Não se deixe ser arrastado para uma flamewar, tampouco. A maioria das chamas são mais ignorados? depois de ter verificado se eles são realmente chamas, não ponteiros para as maneiras pelas quais você asneira, e não habilmente cifrados respostas para sua pergunta reais (isto acontece também).

Perguntas a não perguntar

Aqui estão algumas perguntas estúpidas clássicas, eo que hackers estão pensando quando não respondê-las.

Q:  Onde posso encontrar o programa ou recurso X?
Q:  Como posso usar X para fazer Y?
Q:  Como posso configurar meu janela de comandos?
Q:  Posso converter um documento acmecorp em um arquivo TeX usando o conversor de arquivo do Baixo-o-matic?
Q:  Meu {programa, configuração, instrução SQL} não funciona
Q:  Eu estou tendo problemas com a minha máquina Windows. Você pode ajudar?
Q:  Meu programa não funciona. Acho instalação do sistema X está quebrado.
Q:  Eu estou tendo problemas ao instalar o Linux ou X. Pode me ajudar?
Q:  Como posso quebrar / roubar-ops do canal de privilégios de root / ler de alguém e-mail?
Q: Onde posso encontrar o programa ou recurso X?
UMA: O mesmo lugar que eu encontrá-lo, tolo? Na outra extremidade de uma pesquisa na web. Ghod, que todo mundo não sabe como usar o Google ainda?
Q: Como posso usar X para fazer Y?
UMA: Se o que você quer é fazer Y, você deve fazer essa pergunta, sem pré-supondo o uso de um método que pode não ser apropriado. Perguntas deste formulário, muitas vezes indicar uma pessoa que não é meramente ignorante sobre X, mas confuso sobre o problema Y estão resolvendo e demasiado obcecado com os detalhes de sua situação particular. Em geral, é melhor para ignorar essas pessoas até que elas definem o seu problema melhor.
Q: Como posso configurar a minha janela de comandos?
UMA: Se você é inteligente o suficiente para fazer esta pergunta, você é inteligente o suficiente para RTFM e descobrir a si mesmo.
Q: Posso converter um documento acmecorp em um arquivo TeX usando o conversor de arquivo-Bass-o-matic?
UMA: Experimente e veja. Se você fizer isso, você (a) aprender a resposta, e (b) parar de desperdiçar meu tempo.
Q: Meu {programa, configuração, instrução SQL} não funciona
UMA: Esta não é uma pergunta, e eu não estou interessado em jogar Vinte Perguntas para erguer sua pergunta real fora de você? Eu tenho coisas melhores para fazer. Ao ver algo como isso, a minha reacção é normalmente de um dos seguintes procedimentos:

  • você tem mais alguma coisa a acrescentar?
  • oh, isso é muito ruim, espero que você obtê-lo fixo.
  • e isso tem exatamente o que fazer comigo?
Q: Estou tendo problemas com minha máquina Windows. Você pode ajudar?
UMA: Sim. Jogue fora que a Microsoft lixo e instalar um sistema operacional de código aberto como o Linux ou BSD.Nota: você pode fazer perguntas relacionadas com máquinas Windows se eles são cerca de um programa que tem um do Windows oficiais construir, ou interage com máquinas Windows (ou seja, Samba). Basta não ser surpreendido com a resposta que o problema é com o Windows e não o programa, porque o Windows é tão quebrado em geral que este é muitas vezes o caso.
Q: Meu programa não funciona. Acho instalação do sistema X está quebrado.
UMA: Embora seja possível que você é a primeira pessoa a notar uma deficiência óbvia em chamadas e bibliotecas muito utilizadas por centenas ou milhares de pessoas do sistema, é bastante mais provável que você está completamente à nora. Afirmações extraordinárias exigem provas extraordinárias; quando você faz um pedido como este, você deve guardá-lo com documentação clara e exaustiva do caso de falha.
Q: Estou tendo problemas para instalar o Linux ou X. Pode me ajudar?
UMA: Não. Eu precisaria de hands-on acesso à sua máquina para solucionar isto. Vá perguntar a seu grupo de usuários Linux local para obter ajuda hands-on. (Você pode encontrar uma lista de grupos de usuários aqui.)Nota: perguntas sobre a instalação do Linux pode ser apropriado se você estiver em uma lista fórum ou discussão sobre uma distribuição particular, e o problema é com que distro; ou em fóruns de grupos de usuários locais. Neste caso, certifique-se de descrever os detalhes exatos do fracasso. Mas fazer cuidadosa busca em primeiro lugar, com “linux” e todas as peças suspeitas de hardware.
Q: Como posso quebrar/roubar-ops do canal de privilégios de root/ ler de alguém e-mail?
UMA: Você é um canalha por querer fazer tais coisas e um idiota por perguntar um hacker para ajudá-lo.

Perguntas bons e maus

Finalmente, eu estou indo para ilustrar como fazer perguntas em uma maneira inteligente por exemplo; pares de perguntas sobre o mesmo problema, um deles perguntou de um jeito estúpido e um em uma maneira inteligente.

Estúpido: Onde posso descobrir coisas sobre o Foonly Flurbamatic?
Esta questão apenas implora para “STFW” como resposta.
Inteligente: Usei o Google para tentar encontrar  ‘Foonly Flurbamatic 2600’  na web, mas eu não tenho sucessos úteis. Posso obter um ponteiro para programar informações sobre este dispositivo?
Este já STFWed, e soa como pode haver um problema real.
Estúpida: Eu não posso obter o código do projeto foo compilar. Por que é quebrado?
O consulente assume que alguém asneira. Git arrogante …
Inteligente: O código do projeto foo não compila sob Nulix versão 6.2. Eu li o FAQ, mas não tem nada nele sobre os problemas relacionados com o Nulix. Aqui está uma transcrição da minha tentativa de compilação; é algo que eu fiz?
O consulente especificou o ambiente, leia o FAQ, está mostrando o erro, e não está a assumir seus problemas são culpa de outra pessoa. Este pode valer a pena alguma atenção.
Estúpido: Eu estou tendo problemas com a minha mãe. Alguém pode ajudar?
A resposta de J. Random Hacker para isso é provável que seja ‘Certo. Você precisa de arrotos e fraldas também?’ seguido de um soco da tecla delete.
Inteligente: Eu tentou X, Y, e Z na placa-mãe S2464. Quando isso não funciona, eu tentei A, B, e C. Note o sintoma curioso quando tentei C. Obviamente o florbish é grommicking, mas os resultados não são o que se poderia esperar. Quais são as causas usuais de grommicking em placas-mãe Athlon MP? Qualquer idéias para mais testes eu posso correr de definir o problema tem?
Esta pessoa, por outro lado, parece digno de uma resposta. Ele/ela exibiu inteligência para resolver problemas em vez de passivamente à espera de uma resposta a cair do alto.

Na última pergunta, notar a diferença sutil, mas importante entre exigir ‘Me dê uma resposta’ e ‘Por favor, me ajudar a descobrir o que diagnósticos adicionais eu posso correr para alcançar a iluminação.’

Na verdade, a forma de esta última pergunta é fortemente baseado em um incidente real que aconteceu em agosto de 2001, sobre a lista de discussão linux-kernel (lkml). I (Eric) foi o único a fazer a pergunta nesse momento. Eu estava vendo travamentos misteriosos em uma placa-mãe Tyan S2462. Os membros da lista fornecida a informação crítica que eu precisava para resolvê-los.

Fazendo a pergunta da maneira que eu fiz, eu deu às pessoas algo para mastigar; I tornou fácil e atraente para eles se envolverem. Eu demonstrei respeito pela habilidade dos meus colegas e convidou-os a consultar-me como um par. Eu também demonstrou respeito pelo valor do seu tempo, dizendo-lhes os becos sem saída. Eu já tinha degradado.

Depois, quando eu agradeceu a todos e disse o quão bem o processo tinha trabalhado, um membro lkml observou que ele pensou que tinha trabalhado não porque eu sou um ‘nome’ nessa lista, mas porque eu fiz a pergunta na forma adequada.

Hackers são de certa forma uma meritocracia muito cruel; Estou certo de que ele estava certo, e que se eu tivesse comportado como uma esponja eu teria sido inflamado ou ignorado não importa quem eu era. Sua sugestão que eu escrever todo o incidente como instrução para os outros levou diretamente para a composição deste guia.

Se você não pode dar uma resposta

Se você não pode obter uma resposta, por favor, não levá-la pessoalmente que nós não sentimos que podemos ajudá-lo. Às vezes, os membros do grupo perguntou simplesmente não pode saber a resposta. Nenhum de resposta não é o mesmo que ser ignorado, embora reconhecidamente, é difícil detectar a diferença de fora.

Em geral, simplesmente re-publicar a sua pergunta é uma má idéia. Isso será visto como inutilmente irritante. Tenha paciência: a pessoa com a sua resposta pode estar em um fuso horário diferente e dormindo. Ou pode ser que sua pergunta não foi bem-formado, para começar.

Existem outras fontes de ajuda que você pode ir, muitas vezes fontes melhor adaptada às necessidades de um principiante.

Há muitos grupos de usuários online e locais que são entusiastas sobre o software, mesmo que nunca tenha escrito qualquer software próprios. Estes grupos geralmente formam para que as pessoas podem ajudar uns aos outros e ajudar novos usuários.

Há também uma abundância de empresas comerciais que você pode contratar para ajudar, grandes e pequenos. Não desanime com a idéia de ter que pagar por um pouco de ajuda! Afinal, se o motor do carro sopra uma junta da cabeça, as chances são que você iria levá-la a uma oficina e pagar para obtê-lo fixo. Mesmo que o software não custa nada, você não pode esperar que o apoio sempre vem de graça.

Para softwares populares como o Linux, existem pelo menos 10.000 usuários por desenvolvedor. Não é apenas possível para uma pessoa para lidar com as chamadas de suporte de mais de 10.000 usuários. Lembre-se que mesmo se você tem que pagar para a sustentação, você ainda está pagando muito menos do que se você tivesse que comprar o software, bem como (e suporte para software de código fechado é geralmente mais caro e menos competente do que o suporte para software de código aberto).

Como responder a perguntas de uma maneira útil

Seja gentil. Stress relacionado com o problema pode tornar as pessoas parecer rude ou estúpido, mesmo quando eles não são.

Responder a um réu primário off-line. Não há necessidade de humilhação pública para alguém que pode ter cometido um erro honesto. Um verdadeiro novato pode não saber como procurar arquivos ou onde o FAQ é armazenado ou postadas.

Se você não sabe com certeza, que o diga! A resposta errada, mas autoritária-som é pior do que nenhum. Não aponte qualquer um por um caminho errado, simplesmente porque é divertido para soar como um especialista. Seja humilde e honesto; dar um bom exemplo, tanto para o consulente e seus pares.

Se você não pode ajudar, não impedemNão faça piadas sobre procedimentos que podem trash configuração do usuário? O pobre coitado pode interpretar estes como instruções.

Faça perguntas para extrair mais detalhes. Se você é bom nisso, o consulente vai aprender alguma coisa? e assim pode você. Tente virar a pergunta ruim em um bom; lembre-se que éramos todos novatos uma vez.

Enquanto murmurava RTFM às vezes é justificada quando responder a alguém que é apenas um pateta preguiçoso, um ponteiro para a documentação (mesmo que seja apenas uma sugestão para o Google para uma frase-chave) é melhor.

Se você estiver indo para responder à pergunta em tudo, dá um bom valorNão sugira soluções kludgy quando alguém está usando a ferramenta errada ou abordagem. Sugerir boas ferramentas. Reformular a pergunta.

Responda a pergunta real! Se o consulente tem sido tão completo como fazer sua pesquisa e foi incluído na consulta que X, Y, Z, A, B, e C já foram julgados sem um bom resultado, é extremamente inútil para responder com  ‘Experimente a ou B ‘, ou com um link para algo que só diz, ‘Tente X, Y, Z, a, B, ou C.’ .

Ajudar a sua comunidade aprender com a questão.  Quando você campo uma boa pergunta, pergunte a si mesmo ‘Como a documentação ou FAQ relevante teria que mudar para que ninguém tem que responder isso de novo?’ Em seguida, enviar um patch para o mantenedor do documento.

Se você fez uma pesquisa para responder à pergunta, demonstrar suas habilidades em vez de escrever como se você puxou a resposta fora do seu bumbum. Respondendo a uma boa pergunta é como alimentar um faminto pessoa uma refeição, mas ensinando-lhes habilidades de pesquisa por exemplo está mostrando-lhes como produzir alimentos para toda a vida.

Recursos relacionados

Se precisar de instruções sobre os conceitos básicos de computadores como pessoais, Unix, eo trabalho Internet, consulte O Unix e Fundamentos da Internet HOWTO.

Quando você soltar software ou escrever patches para software, tente seguir as orientações do HOWTO Software Release Practice.

Agradecimentos

Evelyn Mitchell contribuiu alguns exemplos de perguntas estúpidas e inspirado o ‘Como dar uma boa resposta’ seção. Mikhail Ramendik contribuiu algumas sugestões particularmente valiosas para melhorias.

Fundamentos de Delphi

Original: http://www.delphibasics.co.uk/Hints.html

Consejos Delphi Conceptos básicos y consejos

La idea de esta página es recoger en un solo lugar pequeño, pero ayudas eminentemente útiles a la programación eficiente y productivo en la lista Delphi. This comenzará pequeña, y crecer con sólo los mejores consejos y sugerencias. Como alternativa, puede buscar ayuda en Delphi – por ejemplo, el tipo de accesos directos en la ficha Buscar.

Se sienten libres para ponerse en contacto con el autor para añadir a la lista aquí – sus sugerencias son más que bienvenidos.

Atajos Editor

Teclas de acceso                 Directo resultantes acciones

Alt + BlockSelect          Permite columna restringida selección de un texto                                         block. Normally, cuando se selecciona más de una                                         línea con el ratón (arrastrando con el botón                                                     izquierdo del ratón) o las teclas de flecha (con                                                 SHIFT pulsado), la texto en las líneas medias es                                             siempre toda la línea.

                                      Manteniendo pulsada la tecla Alt antes de hacerlo a                                       partir de la selección, se marca sólo un bloque                                                 vertical de texto. (Puede soltar la tecla Alt tan                                                 pronto como se haya iniciado marcado).

                                      Al insertar el bloque de copiado, se insertará el                                               texto donde se encuentra el cursor, pero no va a                                             crear nuevas líneas. Es efectivamente inserta                                                 horizontalmente, pero no verticalmente. La mejor                                         manera de ver el efecto es que probarlo!

Ctrl + Shift + i                Bloquear sangría. Guiones un bloque de texto                                                 (líneas o Alt-selección) por la cantidad de pestañas.

Ctrl + Shit + u                Bloquear Unindent. UnIndents un bloque de texto                                           (líneas o Alt-selección) por la cantidad de pestañas.

Ctrl + Shift + UpArrow  Cambia entre definición de la rutina y                                                               implementation.Position el cursor en la línea de                                             una función o procedimiento en la parte de                                                     interfaz de la unidad, y esta combinación de teclas                                         se moverá a la aplicación. Y viceversa.

Ctrl + Shift + c                 Código completionPosition el cursor en una nueva                                         función o procedimiento de definición, y esta                                                 combinación de teclas va a crear el esqueleto de                                             código, y mover el cursor en el bloque begin listo                                           para escribir.

Ctrl + Shift + r                Record Macro el ratón subsiguiente y acciones                                                clave como una macro. Terminar con la misma                                              combinación de teclas.

Ctrl + Shift + P               Play Macro la última macro grabada.

Ctrl + E                            Búsqueda incremental. Las letras que escriba                                                  posteriormente forman una cadena de búsqueda. A                                        medida que escribe, se mueve a la primera parte                                            del archivo actual que coincide con el string.It no                                            distingue entre mayúsculas y minúsculas. Pulse                                               Escape para detener la búsqueda.

Varios consejos

Acceso directo en el navegador Mozilla

El navegador Mozilla proporciona marcadores con una característica interesante – se puede acceder a un sitio con marcador escribiendo el nombre del acceso directo para el marcador. La característica definitoria de estos marcadores es que proporcionan parámetro passing.You puede establecer un marcador que le permite escribir en el siguiente:

d Array le llevará a http://www.delphibasics.co.uk/RTL.asp?Name=Array

d Inc le llevará a http://www.delphibasics.co.uk/RTL.asp?Name=Inc

Para configurar un marcador tal, hacer lo siguiente:

  1. Navegue hasta http://www.delphibasics.co.uk/RTL.asp?Name=Arrayin el navegador.
  2. Marca esta página
  3. Ir a Bookmarks|Manage Bookmarks and Properties menú
  4. Propiedades de este marcador
  5. Cambiar la ubicación para http://www.delphibasics.co.uk/RTL.asp?Name=%s (tenga en cuenta el% s)
    Tipo D en el campo de palabras clave
  6. Terminado!

Acceso directo en Internet Explorer

Gracias a  Stuart Eggerton  para el siguiente consejo (que a su vez gracias  http://www.kellys-korner-xp.com  para el ejemplo de Google utilizado como base para la idea) .Whilst decir, no tiene los buenos marcadores de Mozilla cuentan, mediante la adición de entradas de registro para IE, se puede proporcionar el mismo functionailty.

Copia el siguiente texto en un archivo con  VBS  extensión. Haga doble clic para ejecutarlo y por lo tanto agregar entradas del registro para IE:

Option Explicit

Set ws = WScript.CreateObject(“WScript.Shell”)
Dim ws, n, p, itemtype, MyBox, Title, vbdefaultbutton

p = “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\d\”
itemtype = “REG_SZ”
n = “http://www.delphibasics.co.uk/RTL.asp?Name=%s” 

Ws.RegWrite p, n, itemtype

p = “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\d\ “
itemtype = “REG_SZ”
n = “+”

Ws.RegWrite p, n, itemtype

p = “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\d\%”
itemtype = “REG_SZ”
n = “%25” 

Ws.RegWrite p, n, itemtype

p = “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\d\&”
itemtype = “REG_SZ”
n = “%26” 

Ws.RegWrite p, n, itemtype

p = “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\d\+”
itemtype = “REG_SZ”
n = “%2B” 

Ws.RegWrite p, n, itemtype

Title = “To use, type in: d followed by a space then the search term.”
MyBox = MsgBox(Title,4096,”Quick access to Delphi Basics from the Address Bar”

d Array le llevará a http://www.delphibasics.co.uk/RTL.asp?Name=Array

d Inc le llevará a http://www.delphibasics.co.uk/RTL.asp?Name=Inc

El uso de marcos al hacer un montón de formas

Para crear un marco, debe utilizar el  Archivo | Nuevo marco  opción de menú (el componente de Marcos en la ficha Estándar simplemente le da acceso a la lista de los marcos definidos en el proyecto actual) .Un marco es como una forma – puede agregar componentes a ella de la misma manera. El poder viene cuando se empieza a crear las formas de su aplicación – que puede caer en un marco en una forma, y todos los componentes de la forma está allí a medida que los definió en el marco. Salvo  que se puede mover y cambiar éstos para adaptarse a cada cuadro (pero no puede agregar componentes). El marco proporciona un esqueleto.

Si cambia un componente en el marco, todas las formas utilizando el marco tendrán el componente cambiado para adaptarse – el esqueleto de la estructura afecta de forma dinámica las formas basadas en ella.

Контролен лист за добро програмиране

Original: http://www.cs.uky.edu/~raphael/checklist.html 

Този списък трябва да ви помогне да напишете висококачествени програми.
Рафаел Финкел, 17.08.2005

  • Идентификатори: Уверете се, че всички идентификатори са смислени.
    1. Една писмо идентификатори са почти никога смислено.
    2. Имена като flag и temp рядко са смислени. Вместо flag, помислете за именуване на Булева състоянието го проверява за, като valueFound.
    3. Помислете няколко думи идентификатори, като nameIndex. Дълги идентификатори (в рамките причина) са склонни да бъдат много за четене.
  • Голи литерали: Избягвайте номера, различни от 0 и 1 и струни, различни от “” в програмата си, освен когато определяте константи.
    1. Да не се използва буквално число като масив обвързани.
    2. Да не се използва буквално число като параметър силен, като номер на изчакване или порт.
    3. Да не се използва буквални числа, за да изберете записи в менюто.
    4. Да не се използва буквално число за измерване на размера на низ или някои данни; използва sizeof () и strlen () в C и C ++ и .length () и .size в Java.
    5. Да не се използва буквално низ за името на файла. Вие може изходните буквални струни, все пак.
    6. Да не се използва буквално число на индекс в масив, съдържащ хетерогенни данни.
    7. Не декларира идентификатор с име означаващ буквално, като “тридесет”.
  • Модуларизация: Програма, е изградена от взаимодействащи си компоненти.
    1. Не поставяйте всичките си код в main() рутина.
    2. В действителност, не правят рутинни направи твърде много работа. Ако е по-дълго от около 50 линии, това е може би прекалено дълго.
    3. Ако дублира код няколко пъти, помислете дали една линия ще работи по-добре, или може би подпрограма.
    4. Ако откриете, че са редовете на много дълбоко, най-вероятно не използвате подпрограми, когато трябва.
    5. Не преосмисли библиотечни практики (освен ако не си задача изисква). Погледнете в наръчниците, за да научите за sprintf () и  atoi () , например.
    6. Използвайте заглавни файлове в C и C ++ (заглавни файлове имат имена, завършващи  .h ) да определи всички константи, необходими на множество файлове и да декларират всички подпрограми, изнесени между файлове. Но не се постави тялото на подпрограми в заглавните файлове (с редки изключение на вградените подпрограми).
  • Форматирането: Вашата програма трябва да бъде лесен за четене.
    1. Погледнете  http://geosoft.no/development/javastyle.html  за ясни предложения за форматиране и други проблеми с показването. Тази справка е специално насочена към Java, но той има стойност за други езици, също.
    2. Опитайте се да ограничите всички ваши линии до 80 знака; Много хора гледат код в 80-колона прозорци по исторически причини.
    3. Не използвайте разделите, така и пространства за отстъп, защото не всички текстови редактори лечение разделите като точно 8 места.
    4. Изпълнявайте последователен отстъп модел, който отразява контролна структура на програмата.
    5. Не слагайте много празни редове в програмата си. Един празен ред между подпрограми е достатъчно.
    6. Различни операционни системи да прекратят линии различни начини. Ако преместите между Win32 (което използва\R\Н), Unix (което използва\Н) и MacOS (което използва\R), преформатират файла си да използва последователен метод прекратяване.
    7. Не настройвайте изпълнимия бит (Unix) от вашите изходни файлове.
  • Кодиране: Искате вашата кодиране, за да бъде ясно, за поддържане и ефективно, в този ред. Някои от правилата тук са много специфични; други са по-общи.
    1. Да не се използва поредица от  ако  изявления, които нямат  друго, ако само един може да съвпадат; използвате  друго, ако .
    2. Когато искате да се категоризират въвеждане на текст, не се изброят възможните първите букви.
    3. Използвайте оперативния си персонал вместо умножение за изграждане на модели на битове.
    4. В превключвател изявление, винаги проверявайте за случая по подразбиране. По същия начин, в последователност от ако-тогава друг отчети, използването на крайния друг.
    5. Всички системни функции могат да се провалят. Винаги проверявайте кода на връщане, и да използвате perror () за да съобщите за повредата.
    6. Булеви трябва винаги да използват  булева  тип в Java,  BOOL  в C ++, и 0/1 числа в С не се използва символа т и F, и не използват -1 и 1.
    7. Използвайте примки за инициализиране на структури от данни, ако е възможно.
    8. Използвайте всяка променлива и всяко поле на структура за точно една цел. Не ги претовари, освен ако не е една отлична причина да го направят.
    9. Да не се използва един и същ идентификатор за двата типа, променлива, както и името на файла, дори ако промените капитализация. Това е твърде объркваща.
    10. Ако променяте данни с htonl () или подобна рутина преди преносната мрежа, не се променя данните на мястото си. Изграждане на втората структура на данните.
    11. Опитайте се да не се използва в световен мащаб или нелокални променливи. Декларирам всяка променлива в най-малкия обхват можете. Има законосъобразно използване на нелокални променливи, но се уверете, че наистина имате нужда от тях.
    12. Shell, Perl и Python програми следва да имат свои  #!  линия, както на първия ред на файла; в противен случай, линията е просто коментар.
    13. Опитайте се да избегнете кодиране специални случаи. Често можете да използвате псевдо-данни или други методи на данни за структурата, които ви позволяват да се прибират в специални случаи редовните случаи.
  • Съставители: Нека им помогнем да намерите грешки
    1. Винаги се позове компилатори с всички предупреждения скрипт. За C и C ++, използвайте  -Wall флаг. За Java, използвайте -Xlint: all -deprecation и използвайте PMD програмата, за да получите предложения за по-добро стил. За Python, използвайте  -t-W all.
    2. Всички програми на Perl би трябвало да работи с  -w флаг и трябва да имат употреба строг. Всички Perl CGI-скриптове бин трябва да имат -T флаг, също.
  • В грим помощната програма: Използвайте го, и да я използват добре.
    1. Направете файл винаги трябва да има “чисти” рецепта, която трябва да се премахнат всички файлове, които могат да бъдат възстановени от други рецепти в направете файл, включително обект и изпълними файлове.
    2. Ако вашият проект има множество изходни файлове, на Направете файл трябва да създава обект ( .o ) файлове, ако е необходимо и да ги свържете заедно.
    3. В Направете файл трябва да е написан така, че ако я пускате направи два пъти подред, на втория опит не прави прекомпилиране.
    4. Всяка рецепта трябва да се създаде определен в целта си файла.
    5. Всяка рецепта трябва да използвате всеки файл, посочен в списъка предпоставка.
    6. Научете се да използвате правила за цели като  .co  да се избегнат повторения Направете файлове.
    7. Ако имате само един C или C ++ източник файл, изпълним файл трябва да имат едно и също име (без разширение .c или .cpp ).
    8. Уверете се, че се изброят всички .h файлове като предпоставки, където те са необходими. Помислете за използване  makedepend да генерира списък предпоставка за вас.
  • Документация: Това не е просто само за грейдер. Това ще ви помогне по време на писането на програмата, също!
    1. Добави документация по време на писането на програмата. Винаги можете да го промените като Вашият проект се променя.
    2. Включи външна документация: Как човек компилирате и стартирате програмата, и какво е това означаваше да се направи? Външният документация може да бъде в отделен файл; за малки проекти, може да е коментар във файла-единствен източник.
    3. Включи вътрешна документация: Какво алгоритми и структури от данни, който използвате? Преглед може да бъде в отделен файл, но обикновено вътрешна документация се поставя върху специфичните съчетания, декларациите и стъпките, които го описва.
    4. Проверете целия си програма и документацията за правописни грешки. Това е неучтиво да се превърне в сгрешена работа, и то ангажирам невнимание към детайлите.
    5. Проверете всичките си документация (и изходни съобщения), за граматични грешки.
    6. Програми са много по-разбираеми, ако поставите кратък коментар относно крайните скоби. Например, презрамки затваряне условно може да има коментар, като “ако стойността изглежда добре”. А скоба затваряне на верига може да има коментар, като “за всяка входна линия”. А скоба затваряне на процедура може да има коментар просто именуване на процедурата. А скоба затваряне клас може да има коментар казва “клас” и след това името на класа.