Как я произвожу синхронизацию данных

14 апреля 2011

Дано: три компьютера (две штуки — под управлением FreeBSD и еще на одном стоит Windows), смартфон, планшет, а также парочка виртуальных машин. Задача: синхронизировать между ними почту, RSS-ленту, закладки, файлы и тд. Желательно использовать для этого поменьше программ и сервисов.

1. Почта и RSS

Тут все довольно просто — храним почту на GMail, а RSS читаем через Google Reader. Лично я делаю именно так. Не нравится Гугл, пожалуйста — почта на Яндексе, RSS читаем через Яндекс.Ленту. Только нужно учесть, что в последнем случае не гарантируется удобство чтения почты/rss с планшета под управлением Android. Google как-то хитро оптимизирует свои веб-страницы для андроид-планшетов, чтобы эти страницы было удобно разглядывать на экране с маленькой диагональю.

Как альтернативный вариант, можно использовать браузер Opera. В нем есть встроенная rss-читалка, почтовый клиент и синхронизация всего этого хозяйства. Только я не уверен, что все перечисленное есть в Opera Mobile и Opera Mini. Также для синхронизации почты годится протокол IMAP.

2. Закладки и заметки

В свое время я пробовал и БобрДобр, и Delicious, и Google Bookmarks, и всякие браузерные плагины для этих сервисов. Ничто из перечисленного не пришлось мне по душе.

Теперь я синхронизирую закладки через Opera. Вообще в последнее время у меня сильно изменилось отношение к этому браузеру. Помимо синхронизации закладок, он также производит синхронизацию истории веб-серфинга, заметок и экспресс-панели. Последняя, если кто не в курсе, представляет собой начальную страницу с превьюшками избранных сайтов. Очень удобно!

Правда, в силу привычки, заметки я продолжаю накапливать на GMail с тем, чтобы позже выложить их в этом блоге. Кстати, блог — прекрасное место для хранения заметок и полезных ссылок, инфа 100%.

Если нравится Firefox — в четвертой версии появился Firefox Sync. Не знаю, поддерживает ли он заметки, так что на всякий случай имейте в виду notebook.google.com. Почему-то об этом сервисе мало кто знает.

3. Синхронизация файлов

Первое, что приходит на ум — использовать очень небезопасный Dropbox. Не знаю, радоваться этому или нет, но в настоящее время не существует версии Dropbox под FreeBSD (хотя у сервиса имеется неплохой веб-интерфейс, а на ГитХабе был найден соответствующий форк). Несмотря даже на то, что на офсайте есть голосование по поводу его портирования под Фряху с 2647 голосами «за» (на момент написания этих строк). Проголосуйте, может когда-нибудь сделают.

А пока можно производить синхронизацию файлов с помощью sshfs. Это модуль для FUSE, позволяющий получить доступ к удаленной файловой системе по SSH. Его установка и настройка довольно тривиальны.

pkg_add -r fusefs-kmod fusefs-sshfs

Если FUSE раньше не был установлен, дописываем в /etc/rc.conf:

fusefs_enable="YES"

… и запускаем FUSE:

/usr/local/etc/rc.d/fusefs start

Самое главное при использовании sshfs — это монтировать файловую систему с правильными флагами:

# кусок /root/.cshrc
alias mntssh    sshfs -o uid=1001,gid=1001,allow_other,follow_symlinks,reconnect,intr, IdentityFile=/home/eax/.ssh/id_rsa user@example.ru:example.ru/htdocs/secret-place/ /home/eax/sshfs/

Обратите особое внимание на использование identity file и флага «intr». Без этих настроек у вас могут возникнуть проблемы в случае падения сети или недоступности example.ru. На самом деле, они возникнут по-любому (файлы будут временно недоступны), но хотя бы никакие приложения при этом не повиснут. Если вдруг по вине sshfs все-таки что-то повисло, а у меня такое однажды было, попробуйте прибить все процессы с именем «sshfs».

Примечание: См также заметку про резервное копирование с помощью SSH. Там рассказано про создание identity file и утилиту rsync. Последняя, возможно, подойдет вам больше, чем sshfs.

К нашей великой радости, sshfs портирован под Windows. Сначала качаем и устанавливаем «Dokan Library». На самом деле, это никакая не библиотека, а служба. Затем качаем с той же страницы «Dokan SSHFS». Это GUI приложение, так что с ним все просто.

Как вы понимаете, example.ru/htdocs/secret-place/ не плохо бы сделать доступным по HTTP, включив автоиндекс, а также ограничив доступ паролем. В первую очередь нужно залезть в панель управления хостингом (или как вы там управляете сервером) и убедиться, что autoindex_module включен. Затем создаем в каталоге secret-place файл .htaccess следующего содержания:

Options Indexes FollowSymLinks

AuthUserFile /home/user/example.ru/htdocs/secret-place/.htpasswd
AuthType Basic
AuthName "Password Required"
Require valid-user

В том же каталоге создаем файл .htpasswd с помощью соответствующей утилиты или скрипта. Вбиваем адрес в браузере, проверяем.

Возможно, вам захочется выкладывать некоторые файлы на всеобщее обозрение. Сделать это можно, создав символьную ссылку на нужный каталог (по понятным причинам, лучше разместить его выше, чем secret-place) и, опционально, положив в него .htaccess, содержащий следующее:

# отдавать файлы, но не показывать содержимое каталога
Options -Indexes

Также с помощью символьных ссылок можно управлять по sshfs содержимым каких-то специальных каталогов. Например, можно создать симлинк на каталог с картинками, приатаченными к постам в блоге. См также мою памятку по .htaccess (пункт 6).

4. Свое онлайн-радио?

У меня на хостинге недостаточно места для хранения музыки, но в теории можно сделать свой онлайн-плейлист, используя jPlayer. Это jQuery плагин для проигрывания аудио и видео. Удобен в первую очередь тем, что в зависимости от возможностей браузера, он предлагает использовать либо Flash (лучи ненависти!), либо HTML5. Наброски проигрывателя: http://hpaste.org/79987.

Содержимое плейлиста (строка 140) можно генерировать динамически. Самая большая подстава в том, что Opera 11 и Firefox (проверял на версиях 3.6 и 4) не умеют воспроизводить mp3 по сети. Во всяком случае, без флеш-плагина. В свою очередь, формат ogg не поддерживают IE 8/9 и Safari 5. Надо отдать должное Chrome — он понимает и mp3 и ogg.

Таким образом, нам предстоит непростой выбор — обязать пользователей устанавливать Flash или хранить на сервере музыку в двух форматах. Как альтернативный вариант, можно использовать один формат, который при необходимости динамически перекодировался бы в другой (возможно, с кэшированием):

# перекодируем mp3 в ogg
ffmpeg -i in.mp3 -acodec libvorbis out.ogg
# перекодируем ogg в mp3 с cbr 128 kbps
ffmpeg -i in.ogg -acodec libmp3lame -ab 128k out.mp3
# перекодируем ogg в mp3 с vbr (чем больше aq, тем хуже качество)
ffmpeg -i in.ogg -acodec libmp3lame -aq 0 out.mp3

Представьте, как круто — приходите в гости к друзьям, запускаете браузер и вся ваша музыка — как на ладони. Правда, я должен признать, что зарегаться Вконтакте и замутить там плейлист намного проще. А для прослушивания плейлиста без Flash можно скриптик небольшой набросать.

5. Ссылки по теме

Эти материалы могут вам пригодиться:

Как всегда, я буду рад любым вашим комментариям по теме синхронизации данных.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.