Как часто вы не могли вспомнить ту или иную команду в 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 этого делать не умеет). Если вас это не пугает, то давайте «сядем за штурвал» и посмотрим на «приборную панель»:
- Dic использует содержимое каталога .dic/library/ для получения доступных словарей и управления ими;
- Каталог .dic/library/ содержит подкаталоги (словари). Имя каждого словаря должно быть максимально коротким и информативным (например, словарь по Vim у меня называется vim). При этом вызов dic vim заставит dic работать с каталогом .dic/library/vim;
- Каждый словарь должен содержать файлы без расширения (разделы), имена которых должны быть максимально короткими и информативными. Эти файлы и содержат всю информацию, необходимую нам в будущем. Например, файл, содержащий информацию о командах индексации Git, у меня называется .dic/library/git/index;
- Каждый раздел содержит краткое описание команд (утилит, других важных данных), относящихся к этому разделу. Все команды записываются в отдельной строке и часто (необязательно) группируются в параграфы. Команда должна быть записана следующим образом: команда — описание. Вот небольшой пример раздела словаря:
ИНИЦИАЛИЗАЦИЯ git init — инициализация нового репозитория
- Помимо разделов, каждый справочник содержит два системных файла: desctiption — файл содержит описание справочника, contents — файл содержит описание всех разделов с указанием в скобках всех команд, описанных в каждом из разделов.
Вот, собственно, и все, что нужно Dic для работы со словарем, все максимально просто.
Теперь пару слов о доступных командах:
- dic — инициализация Dic, если это еще не было сделано и вывод списка доступных словарей, если инициализация уже проводилась;
- dic имяСловаря — вывод списка разделов, относящихся к данному словарю;
- dic имяСловаря имяРаздела — вывод содержимого раздела;
- dic имяСловаря имяРаздела команда — вывод описания команды;
- dic -h — помощь по Dic;
- dic -u — update словарей из Github.com
Всем миром
Иметь под рукой удобный словарь хорошо, а если он будет заполняться сразу несколькими людьми — еще лучше! Именно поэтому Dic может использовать репозиторий на Github.com для обновления своих словарей. Конечно вы можете обойтись и без git, просто скопировав нужные вам словари в каталог .git/library, и даже создавать собственные словари, но стала бы Wikipedia.org 6-м по посещаемости сайтом в Интернете, если бы не командная работа всех пользователей?!
Если у вас еще нет Git, обязательно установите его. После первого запуска Dic, он сам создаст каталог .dic/library у вас в домашнем каталоге и скачает в него все доступные на сегодняшний день справочники. Если же вы хорошо знакомы с Git, то сможете вести собственную ветку справочников, которая, возможно, будет добавлена в основную и вашими справочниками смогут пользоваться другие. Если вы почувствовали, что ваши справочники устарели, просто выполните dic -u и он сам обновит их из репозитория.
С чего начать
- Установите Git (опционально).
- В конце поста вы найдете ссылку на скрипт Dic. Скачайте его и положите в удобное место. Лично я создал символическую ссылку d на Dic, чтобы еще быстрее обращаться к справочникам.
- Выполните скрипт dic.sh (для этого не нужны права root), он создаст каталог .dic/library/ в вашем домашнем каталоге и попытается создать в нем Git репозиторий используя git clone.
- Если вы не хотите использовать Git, так же внизу поста вы найдете ссылку на репозиторий Github.com. Скачайте оттуда интересующие вас справочники и поместите их в каталог .dic/library/ и Dic готов к работе.
Создавайте свои справочники и добавляйте команды в существующие по мере необходимости. Старайтесь писать максимально коротко и информативно, чтобы тратить меньше времени на поиск информации, но не забывайте, что вашими справочниками возможно будут пользоваться другие люди.
Полезные ссылки
Автор: Delphinum