Блог Олега Сердюкова

Если Day One под iPhone 4 немыслимо тормозит, то наступает время автоматизации

Заметки я веду уже давно. Ничего особенного - краткие мысли и краткое описание событий. Порой бывает полезно почитать записи, сделанные “по горячим следам”.

Это одна из основных функций, которые я возлагаю на мобильное устройство (кроме чтения, учёта финансов и организации дел). Удобство процесса и надёжность хранения информации и определяет доверие к устройству. Так, например, после того, как год моих заметок был потерян в DayNotez на Palm m515 из-за “особенностей” кондуита, который не бекапил данные на компьютер, я мгновенно продал устройство и долго пользовался обычным блокнотом.

На iPhone я долго не мог найти нормальную программу для заметок (SimpleNote не в счёт, я его применяю для других заметок). Одно время использовал Momento, это хороший агрегатор RSS/Twitter/Instapaper/etc, но программа мне не нравилась по меньшей мере из-за неудобства ввода, а по большей - из-за отсутствия десктопной части. Наконец-то вышел Day One и я полностью на него переключился.

В iOS-версии появились фото, а недавно и теги, Mac-версия хороша. Однако у меня было много заметок в разных системах и архивах, начиная от давних текстовых, потом PocketPC TreNotes и Tombo, заканчивая Momento и архивами избранных сообщений в Twitter (воспользуюсь случаем и повторюсь, что социальные сети - это зло и я с радостью прекратил ими пользоваться). Я нашёл время и экспортировал их в Day One, написав несколько скриптов. Получилось около 3 тысяч заметок. И тут удобство Day One перестало быть удобоваримым.

При большом количестве заметок Day One на iPhone 4 работает ужасно медленно. Запуск за 10-30 секунд порой выходит за лимит iOS и программа принудительно закрывается. Создание заметки превращается в лотерею - написать-то напишешь, но вот сохранится ли она? Конечно, так работать невозможно.

Сначала я выкрутился с помощью Drafts. Я на него вышел, когда мне понадобилось очень быстро фиксировать небольшие кусочки текста. Например, чтобы записать показания счётчика электричества, я не хочу создавать новую заметку с именем “household - 2012-11-27 - показания счётчика электричества”, а потом вводить несколько цифр - это непродуктивно. Я хочу открыть программу, ввести эти цифры, а потом через некоторое время увидеть эти данные. Штатный Notes.app мне не нравится, а вот Drafts пришёлся очень кстати.

Он поддерживает TextExpander, позволяет отсылать текст в разные программы (Dropbox, Omnifocus, тот же Day One и т.д.), синхронизирует записи с Simperium (данные не будут потеряны, если придётся заменить устройство). А самое главное - он быстр. Drafts заслуженно занял место в панели быстрого запуска.

“Выкручивания” меня быстро достали. Теперь я мог рано или поздно занести заметку в Day One, набранную в Drafts, но редактирование в большинстве случаев приводило к зависанию (да, автоматическое определение локации я давно отключил, потому что из-за него Day One зависал ещё чаще, это известная разработчикам проблема).

Подумал и решил пойти на компромисс - читать заметки на iPhone мне не обязательно, мне важнее их просто внести. А дальше - дело техники.

В Drafts есть экспорт в Dropbox, заметки помещаются в каталог Apps/Drafts с именем по времени и дате создания, например, 2012-11-27-14-01-19.txt. Пишу заметку, записываю её:

01

Заметка помещается в каталог Dropbox, синхронизируется, попадает на десктоп. За дело принимается Hazel, $25. Любители бесплатного вряд ли дочитают до этого абзаца, так как Day One тоже стоит денег. Есть бесплатные Folder Actions, можно использовать и их.

В Hazel на каталоге ~/Dropbox/Apps/Drafts стоит правило

02

такого вида

03

В первом действии запускается shell-скрипт ~/bin/drafts2dayone.sh (стоит ли упоминать про “chmod +x drafts2dayone.sh”?):

#!/bin/bash
__doc__="#
# SYNOPSIS
#    drafts2dayone.sh FILE
#
# DESCRIPTION
#    Создаёт заметку в Day One из файла, создаваемого Drafts в Dropbox вида
#
# EXAMPLES
#    drafts2dayone.sh /Users/ctrld/Dropbox/Apps/Drafts/2012-11-26-18-24-51.txt
#
# EXIT STATUS
#
#    TODO: List exit codes
#
# AUTHOR
#
#    Oleg Serdyukov <oserdyukov@gmail.com>
#
# LICENSE
#
#    This script is in the public domain, free from copyrights or restrictions.
#
# REQUIREMENTS
#    Установить Day One CLI из пакета, доступного по адресу
#    http://dayoneapp.com/tools/
#
"

# Если не указан единственный параметр, то выдать документацию (немного криво)
if [ $# -ne 1 ]; then
    echo $__doc__ | while read -r -d "#" doc;
    do
        echo "$doc"
    done
    exit 1
fi

file="$1"

if [ ! -f "$file" ];
then
    echo "Исходный файл отсутствует"
    exit 1
fi

# Обработка имени файла
name=$(basename "$file")
datetime=$(echo "$name" | sed 's/.txt//')

# Преобразование даты и времени
# Часть 1: имя файла ко входному формату date
# 2012-11-27-07-33-34 -> 112707332012.34 (mmddHHMMccyy)
# Часть 2: во входной вормат Day One
# 11/26/2012 06:24PM
# Форматы для Date: http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
dayone_daytime=$(date -j $(echo "$datetime" | awk -F '-' '{printf "%02i%02i%02i%02i%04i.%02i\n", $2, $3, $4, $5, $1, $6}') "+%m/%d/%Y %I:%M%p")

# Создать заметку
cat "$file" | /usr/local/bin/dayone --date="$dayone_daytime" new
return_code=$?

# Выход. Я не тестировал коды возврата dayone, поэтому передаю их "прозрачно"
exit $return_code

Для работы скрипта нужен Day One CLI, он устанавливает программу /usr/local/bin/dayone.

После обработки скриптом файлы заметок переносятся в архив по дате, чтобы ничего не потерялось:

04

Всё. Создал заметку в Drafts на iPhone - через короткое время она появилась в Day One:

05

Если вы хотите заносить социальную активность, то воспользуйтесь slogger‘ом, который написал Brett Terpstra (автор форка Notational Velocity под именем nvAlt). Также посмотрите на другие скрипты, приведённые на странице Day One CLI.

Comments