Dic: быстрая память

от автора

image

Как часто вы не могли вспомнить ту или иную команду в Git, Vim, Linux, C++? Сколько времени вы тратите на поиск ответа в man или в интернете? Пробовали ли вы когда-нибудь писать свои собственные справочники и чем это заканчивалось? Хотели бы вы немного помочь вашей памяти?
Разрешите вам помочь. Под катом небольшая история эволюции моих справочников и утилита Dic.

Вспомнить все

После прочтения своей первой IT книги, я взял за правило писать подробные конспекты всего того, что узнал «понятным языком», дабы в будущем можно было вернуться к конспектам и напомнить себе забытое. Вскоре заметил, что чаще всего забываются мелочи, такие как названия нужных утилит или команд, а перечитывать конспект слишком долго. Тогда я решил действовать иначе и писать небольшие справочники, содержащие уже не основные мысли прочитанной книги, а описание основных команд и примеры их использования. Такой подход оказался намного эффективнее предыдущего, так как мое первое предположение оказалось ошибочным: если вы прочитали книгу, то ваш мозг без проблем вспомнит ее содержание, но ему будет сложно вспомнить мелкие детали, именно их и нужно конспектировать.

Сначала все шло хорошо, если я не мог чего-то вспомнить, то обращался к справочникам и (благодаря иерархической структуре) быстро находил нужную информацию, но иногда я охотнее откладывал решение задачи «на потом» потому, что мне было просто лень открывать нужный справочник и искать в нем (хоть и быстро) информацию. Сначала я не обращал на это внимание, сводя все к собственной лени, но с того самого времени, как я перешел на Xmonad, понял — дело вовсе не во мне. Проблема в том, что для нахождения очень небольшой порции информации я заставляю себя совершать слишком сложные действия: переходить в каталог со словарем, открывать словарь нужным редактором, используя мышь находить нужную информацию — все это слишком сложно для решения крошечной задачи, от того и лень ее решать. Для меня, как программиста любящего «велотренажеры» в программировании, это был вызов невиданной дерзости и я нашел решение!

Dic

За час я набросал «на коленке» небольшой Bash-скрипт, который предоставлял мне всю необходимую информацию оперируя короткими запросами. Весь алгоритм работы скрипта можно описать одним предложением: зная имя словаря и раздела, скрипт должен возвращать содержимое файла, описывающего данный раздел.

На практике это выглядит следующим образом. Предположим мне нужно узнать, что делает команда git init, я набираю в терминале:

dic git init 

и получаю краткое (в одно предложение) описание команды:

ЛОКАЛЬНЫЙ РЕПОЗИТОРИЙ   git init - создание репозитория в текущем каталоге  КЛОН   git clone <url> [<dir>] - клонирование репозитория по указанному адресу в текущий каталог (или в каталог dir) Используйте dic имяСловаря имяРаздела 

«Как быть, если я не помню имя команды, но знаю что она делает?» — спросите вы. Выход столь же прост:

dic git | grep ''инициализация нового репозитория'' 

на экране появится запись:

init — инициализация нового репозитория (init,clone) 

говоря нам что нужно читать раздел dic git init.

Прирост в скорости поиска информации был очевиден. Если раньше мне нужно было минимум минута-две для поиска в справочниках или в интернете, то сейчас хватает десяти секунд (я даже засекал!).

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

Конечно, предлагаемое мной решение подойдет не всем. Во-первых — вам нужен Bash, во-вторых — под рукой всегда должен быть терминал и вы должны уметь быстро с ним работать, в-третьих — вы должны уметь правильно составлять справочники (т.к. Dic этого делать не умеет). Если вас это не пугает, то давайте «сядем за штурвал» и посмотрим на «приборную панель»:
image

  • Dic использует содержимое каталога .dic/library/ для получения доступных словарей и управления ими;
  • Каталог .dic/library/ содержит подкаталоги (словари). Имя каждого словаря должно быть максимально коротким и информативным (например, словарь по Vim у меня называется vim). При этом вызов dic vim заставит dic работать с каталогом .dic/library/vim;
  • Каждый словарь должен содержать файлы без расширения (разделы), имена которых должны быть максимально короткими и информативными. Эти файлы и содержат всю информацию, необходимую нам в будущем. Например, файл, содержащий информацию о командах индексации Git, у меня называется .dic/library/git/index;
  • Каждый раздел содержит краткое описание команд (утилит, других важных данных), относящихся к этому разделу. Все команды записываются в отдельной строке и часто (необязательно) группируются в параграфы. Команда должна быть записана следующим образом: команда — описание. Вот небольшой пример раздела словаря:
    ИНИЦИАЛИЗАЦИЯ 	   git init — инициализация нового репозитория 
  • Помимо разделов, каждый справочник содержит два системных файла: desctiption — файл содержит описание справочника, contents — файл содержит описание всех разделов с указанием в скобках всех команд, описанных в каждом из разделов.

Вот, собственно, и все, что нужно Dic для работы со словарем, все максимально просто.

Теперь пару слов о доступных командах:

  1. dic — инициализация Dic, если это еще не было сделано и вывод списка доступных словарей, если инициализация уже проводилась;
  2. dic имяСловаря — вывод списка разделов, относящихся к данному словарю;
  3. dic имяСловаря имяРаздела — вывод содержимого раздела;
  4. dic имяСловаря имяРаздела команда — вывод описания команды;
  5. dic -h — помощь по Dic;
  6. dic -u — update словарей из Github.com

Всем миром

Иметь под рукой удобный словарь хорошо, а если он будет заполняться сразу несколькими людьми — еще лучше! Именно поэтому Dic может использовать репозиторий на Github.com для обновления своих словарей. Конечно вы можете обойтись и без git, просто скопировав нужные вам словари в каталог .git/library, и даже создавать собственные словари, но стала бы Wikipedia.org 6-м по посещаемости сайтом в Интернете, если бы не командная работа всех пользователей?!
Если у вас еще нет Git, обязательно установите его. После первого запуска Dic, он сам создаст каталог .dic/library у вас в домашнем каталоге и скачает в него все доступные на сегодняшний день справочники. Если же вы хорошо знакомы с Git, то сможете вести собственную ветку справочников, которая, возможно, будет добавлена в основную и вашими справочниками смогут пользоваться другие. Если вы почувствовали, что ваши справочники устарели, просто выполните dic -u и он сам обновит их из репозитория.

С чего начать

  1. Установите Git (опционально).
  2. В конце поста вы найдете ссылку на скрипт Dic. Скачайте его и положите в удобное место. Лично я создал символическую ссылку d на Dic, чтобы еще быстрее обращаться к справочникам.
  3. Выполните скрипт dic.sh (для этого не нужны права root), он создаст каталог .dic/library/ в вашем домашнем каталоге и попытается создать в нем Git репозиторий используя git clone.
  4. Если вы не хотите использовать Git, так же внизу поста вы найдете ссылку на репозиторий Github.com. Скачайте оттуда интересующие вас справочники и поместите их в каталог .dic/library/ и Dic готов к работе.

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

Полезные ссылки

  1. Скрипт Dic
  2. Репозиторий справочников на Github.com

ссылка на оригинал статьи http://habrahabr.ru/post/211082/