Содержание статьи
Простые графики
Большинство средств для построения графиков чересчур серьезны для казуального использования: достаточно сказать, что в кратком списке команд gnuplot целых четырнадцать страниц, полная же инструкция занимает 254 страницы. Когда нужен единственный график, и быстро, gnuplot со всеми его тонкостями — это перебор. Для такого случая лучше подойдет сервис datafart, к которому можно обратиться из командной строки. Он не обладает даже малой долей возможностей gnuplot и умеет лишь одно: строить простейшие линейные графики временных серий.
info
Программы, предназначенные для использования из командной строки, как правило, разрабатывают для платформ, совместимых с UNIX. Но при помощи Cygwin похожую среду все же можно воссоздать и в Windows.
Линуксоиды и маководы могут добавить в .bashrc (на Маке — .bash_profile) строку «alias datafart="curl --data-binary @- datafart.com"». Она позволит отправлять данные в сервис по команде datafart. На входе команда принимает списки чисел, разделенных пробелом. Каждое число в строке определяет вертикальную координату соответствующей кривой, строки означают их позицию по горизонтальной оси. В простейшем случае можно указать по одному числу в строке, соответствующему значению какого‑либо параметра в нужный момент времени.
Для скармливания данных утилите служит стандартный механизм UNIX — pipes. Команда datafart < data.txt передает ей данные, сохраненные в файле data.txt. Можно обойтись и без промежуточных файлов. Это делается примерно так:
echo '56.8919 70.528958.3461 72.664261.1512 76.151667.7851 84.589' | datafart
Разумеется, никто не ждет, что пользователь примется составлять столбики цифр вручную. Смысл в другом: данные в таком формате очень просто генерировать автоматически. Например, следующая строка строит при помощи datafart график колебания курса доллара в течение года; информация извлекается с сайта РБК:
python -c 'import urllib2; print "\n".join([i.split("\t")[5] for i in urllib2.urlopen("http://export.rbc.ru/free/cb.0/free.fcgi?period=DAILY&tickers=USD&lastdays=365&separator=TAB&data_format=BROWSER&header=0").readlines()])' | datafart
В ответ datafart выдаст короткий адрес в интернете, по которому расположен готовый график. Это удобно — ссылку можно тут же показать другим. Бояться за сохранность данных нет смысла: через десять минут график будет автоматически удален.
Похожего результата можно добиться и с помощь утилиты hist (установка: pip install bashplotlib, требуется Python). Она строит гистограммы прямо в текстовом режиме. Формат данных, используемых утилитой, похож на формат datafart. Есть, впрочем, небольшое отличие: гистограмма будет лишь одна, поэтому передавать hist более одного числа в строке не стоит.
Борьба с прокрастинацией
Интернет отвлекает. На людей, которым он нужен для работы, за сутки обрушивается больше искушений, чем святой Антоний стерпел за всю жизнь. Программисты знают об этой беде не понаслышке, поэтому обилие утилит, предназначенных для борьбы с прокрастинацией, совершенно не удивляет.
Самый простой способ — завести в компьютере свой собственный Роскомнадзор карманного калибра и блокировать все, что мешает работать. Небольшая программа под названием workmode служит именно для этого. С ее помощью можно создать и поддерживать черный список отвлекающих сайтов, доступ к которым во время рабочего дня лучше запретить.
Workmode написан на JavaScript и нуждается в Node.js. Установка выполняется при помощи команды npm install workmode -g. После этого можно перейти к заполнению черного списка. Команда workmode add адрес сайта позволяет дополнять его новыми сайтами (здесь и далее курсив означает, что текст можно и нужно менять). Когда все готово, достаточно ввести workmode start, и доступ к сайтам в списке окажется закрыт. Открыть его снова можно при помощи команды workmode stop.
info
Chocolatey — пакетный менеджер для Windows. С его помощью легко установить и Node.js (choco install nodejs), и Ruby (choco install ruby), и Python (choco install python), которые необходимы для работы упомянутых в статье программ.
Другая похожая утилита называется letsplay (установка: npm install -g letswork). Она строже, чем workmode, и по умолчанию блокирует все сайты разом, делая исключение лишь для тех, которые пользователь явно указал. Разрешенные сайты нужно перечислить после команды letswork. Например, команда, блокирующая все сайты, кроме GitHub, Stack Overflow и developer.apple.com, выглядит так:
letswork github.com stackoverflow.com developer.apple.com
Чтобы разблокировать закрытые сайты, предусмотрена команда letsplay. Она тоже позволяет перечислить домены‑исключения, но смысл исключения другой: после ввода команды они окажутся заблокированы.
И блокировать, и разблокировать сайты при помощи workmode или letswork/letsplay можно вручную, но проще переложить эту задачу на автозапуск по расписанию, чтобы блокировка включалась в начале рабочего дня и снималась в конце. В Windows для этого есть команда schtasks, в OS X — launchd (им можно пользоваться вручную или установить Lingon), в Linux — cron.
Letswork и letsplay прекрасно работают и обладают только одним недостатком: блокировку слишком просто снять. Требуется огромная сила воли, чтобы не сделать этого при первой же возможности.
Скрипт pom атакует прокрастинацию с другого угла. Он представляет собой консольную реализацию помидорного метода управления временем. Суть метода сводится к разделению рабочего дня на получасовые отрезки. Предполагается, что уж 25 минут даже самые безвольные субъекты могут перетерпеть, не отвлекаясь от дела. Затем следует пятиминутный перерыв, после чего таймер заводят еще на полчаса.
Обычно получасовые отрезки отмеряют при помощи кухонного таймера в виде помидора (отсюда и название). Pom помогает обойтись без тикающего овоща из пластмассы. Чтобы запустить таймер, нужно ввести команду pom сообщение. Pom запишет сообщение в файл ~/pom.log и начнет отсчет времени. Когда 25 минут истекут, он сообщит об этом страшным электронным голосом и посоветует немного отдохнуть. Затем эта последовательность действий повторяется — и так до победного конца. Установить pom можно командой npm install -g pom, для чего опять же потребуется Node.js.
Списки задач
Главный герой фильма «Помни» страдал редкой формой амнезии: он разучился формировать новые воспоминания. Чтобы не забыть, что происходит, он записывал самые важные факты в виде татуировок на своей коже. Если бы он был программистом, то мог бы заменить свои записки утилитой doing (установка: gem install doing, требуется Ruby). Она понадобится тем, кто боится потерять нить мысли из‑за информационной перегрузки.
По сути дела, doing — это список задач наоборот. Он нужен не для того, чтобы записывать свои планы (хотя и это возможно), а для того, чтобы не забыть, чем ты занят прямо сейчас. К примеру, я бы мог сообщить doing, что пишу статью, при помощи команды «doing now пишу статью». По команде doing last утилита напомнит мне об этом, а команда doing finish уведомит утилиту о том, что задача выполнена (до этого, увы, еще далеко). Наконец, добавить задачу на будущее можно при помощи doing later описание плана.
Обзор более традиционных списков задач для командной строки следует начать с Todo.txt. Эта почтенная утилита развивается с 2006 года и за без малого десятилетний срок обросла фантастическим количеством возможностей и аддонов. Чтобы установить ее, нужно скачать с сайта todotxt.com шелл‑скрипт todo.sh и сделать его исполняемым файлом. Кроме того, авторы утилиты рекомендуют прописать для todo.sh алиас попроще — например, t. Предположим, что мы сделали это.
Любой список задач должен уметь три вещи: добавлять новые планы, показывать запланированное и отмечать выполненные. Для добавления планов в Todo.txt служит команда t add "описание задачи", а список выводит t list. Каждый пункт списка снабжен порядковым номером. Это нужно для того, чтобы оперировать отдельными задачами. Например, команда «t do 1» сообщает утилите о выполнении первой задачи, а «t pri 3 a» поднимает приоритет третьей задачи до уровня а. Повторный ввод t list позволяет оценить эффект, который произвели эти операции.
Следующий уровень сложности — проекты. Чтобы отнести одну из задач в Todo.txt к определенному проекту, достаточно добавить в ее описание название проекта, предваренное знаком +. Например, добавить задачу «протестировать Taskwarrior» в проект «Статья», можно так:
t add "протестировать Taskwarrior" +статья
Эта задача будет выводиться и в общем списке, и в списке задач, относящихся к проекту «Статья», который можно увидеть по команде «t list +статья».
info
Для Windows существует порт Todo.txt на .NET github.com/benrhughes/todotxt.net. Правда, он не ориентирован на командную строку, а имеет собственный интерфейс, широко использующий горячие клавиши.
Taskwarrior — еще одно мощное средство ведения списка задач для командной строки. Это, в отличие от Todo.txt, уже не просто шелл‑скрипт. В большинстве дистрибутивов Linux программу можно установить командой sudo apt-get install task; под OS X поможет brew install task, для Windows сборка Taskwarrior есть в репозитории Cygwin (как и в Linux, она называется просто task). Командный интерфейс Taskwarrior имеет несколько тонких отличий от Todo.txt: например, при добавлении задачи не требуются кавычки. Мелочь, а приятно:
task add *название задачи*
Если начать описание задачи со строки priority:H, то ее приоритет увеличится до максимума. Строка project:название добавляет задачу в проект с указанным названием, а recur:частота делает ее повторяющейся; частота может иметь значение daily (ежедневно), weekly (еженедельно) и monthly (ежемесячно). Список задач выводит команда task, и она тоже, как и ее аналог в Todo.txt, поддерживает фильтрацию по проектам, приоритету и прочим параметрам.
Интересное начинается, если обратить внимание на богатые настройки отображения списка, а также на статистическую функциональность Taskwarrior. Команда task stat расскажет о списке задач больше, чем хотелось бы знать, а task burndown представит ту же информацию в виде псевдографической гистограммы, где по горизонтали отложены дни, а по вертикали — суммарное число добавленных и завершенных задач. Под графиком Taskwarrior выводит собственную оценку сроков выполнения всех планов, подсчитанную на основании накопленной им статистики использования программы.
Заметки на память
Утилиты для ведения заметок, отдаленно напоминающие Evernote, встречаются на GitHub не реже, чем списки задач. И понятно почему: они решают еще одну проблему, с которой хорошо знакомы их потенциальные авторы. Принцип использования этих утилит, как правило, похож, но сфера применения немного различается.
info
При использовании Windows для того, чтобы устанавливать RubyGems, требуется несколько больше усилий, чем в Linux или OS X. Самый простой способ получить нужную среду — RubyInstaller для Windows.
Начнем с простого. Утилита под названием boom предназначена для хранения коротеньких однострочных записей‑сниппетов — например, ссылок, телефонов и другой подобной информации. Ее можно установить при помощи команды gem install boom, для чего требуется Ruby. После установки нужно первым делом завести список сниппетов (списков может быть несколько, но для начала хватит и одного). Это делается при помощи команды boom название списка. Чтобы добавить сниппет в список, служит команда boom список название_сниппета текст. Извлечь введенный текст можно при помощи команды boom название_сниппета.
$ boom gifs
$ boom gifs wtf http://i.imgur.com/xjFLxXf.gif
$ boom wtf
Boom! Just copied http://i.imgur.com/xjFLxXf.gif to your clipboard.
Программу jrnl хочется сравнить не с Evernote, а, скорее, с Day One — популярным приложением для ведения дневника. После установки (pip install jrnl, требуется Python) создать новую дневниковую запись можно, введя строку jrnl today: текст записи. Вместо today можно написать yesterday или любую другую дату; в этом случае запись будет датирована задним числом. Первое предложение записи становится заголовком, а слова, начинающиеся с символа @, считаются тегами. Введенная информация будет зашифрована алгоритмом AES-256. Если же ввести jrnl без параметров, программа откроет текстовый редактор, и созданный в нем текст станет новой записью.
Утилита ajour (установка: npm install -g ajour, требуется Node.js) похожа на jrnl, но в отличие от него датирует записи автоматически. Это упрощает дело: новая запись добавляется командой ajour текст и не требует англоязычных добавок, обозначающих дату. Чтобы не создавать новую запись, а дописать пару строк к последней, служит ключ -t, который нужно приписать после текста. Дневник сохраняется в файле ajour.md в формате Markdown.
Вершина консольного эвернотостроения — программа Stash, которая хранит заметки в собственном облачном сервисе (trystash.com). Ее интерфейс не особенно отличается от интерфейса соперников. Строка stash название текст создает новую запись с указанным названием; теги можно перечислить в конце текста после ключа -t. Команда stash all выдает полный список записей, а stash tags список тегов позволяет отыскать запись по ее тегам. Наконец, для того, чтобы извлечь и просмотреть запись по названию, служит команда stash название.
Поиск информации
Сбор информации — еще одно популярное направление, привлекающее создателей таких программ. В сущности, речь идет о консольном аналоге виджетов‑информеров, которые встречаются в современных операционных системах и мобильных платформах.
Вот насущный пример: шелл‑скрипт currency-convert.sh, который можно скачать по адресу goo.gl/QF4cXX. Он предназначен для того, чтобы конвертировать денежные суммы из одной валюты в другую. Свежие курсы программа извлекает из Google Finance. Требуются ли объяснения, для чего это нужно? Открой ~/.bashrc в текстовом редакторе и добавь туда строку
alias zenrus="./currency-convert.sh RUB USD 1"
Теперь тебе не нужно покидать командную строку, чтобы следить за тем, как растущий курс доллара превращает твою зарплату в пыль.
Есть и более эскапистские развлечения: например, биткоин. Его прыжки и падения можно отслеживать при помощи приложения btc (установка: npm install btc -g от рута; требуется Node.js). После запуска она отображает курсы биткоина в нескольких популярных сервисах.
Другая волнующая тема — это, разумеется, погода. Существует множество утилит, позволяющих узнавать ее из командной строки. Различия чаще всего сводятся к используемым источникам информации. Программа weather-cli (установка: pip install weathercli, требуется Python) добывает сведения о погоде с сервиса openweathermap.org. Способ применения прост: weather название города --units celsius. Его, впрочем, можно упростить еще сильнее, если задать переменные окружения WEATHER и WEATHER_UNITS. Первая должна содержать название интересующего города, а вторая — нужную единицу измерения (в нашем случае — celsius, то есть градусы Цельсия). После этого для того, чтобы узнать погоду, хватит команды weather без всяких аргументов.
Утилита howdoi помогает программистам быстро находить образцы кода (установка: pip install howdoi, требуется Python). Запрос на английском языке вводится прямо после команды, после чего она без лишних предисловий выдает код из самого подходящего ответа с сайта Stack Overflow. Ключ -а позволяет увидеть не только код, но и весь ответ целиком. Как и с любым поисковиком, случаются промахи. Порой приходится уточнять формулировку запроса, но чаще howdoi находит именно то, что нужно.
Программа Reddit command line app придумана для тех, кто не только не боится прокрастинации, а наоборот, стремится к ней. При запуске это приложение выводит заголовки десяти последних постов на сайте Reddit. Ключ -r позволяет отфильтровать посты, относящиеся к определенному субреддиту (разделу): например, команда reddit -r hearthstone покажет десять постов про игру Hearthstone. Прочитать интересующий пост можно при помощи команды reddit номер поста, а чтобы открыть ссылку в браузере, надо добавить в конце строки -url. Да, это не самый простой способ читать Reddit, но, однажды начав пользоваться командной строкой для всего, уже сложно остановиться.