Tasks
Перейти к навигации
Перейти к поиску
Сервер
ToDo
- Создание новой базы, пользователя.
- nodejs скрипт. В системной базе берем _design/validation _design/_auth и _design/tasks
- Полнотекстовый поиск Sphinx, Apache Solr, Apache Lucene, ElasticSearch с его CoudhDB river
- Реализация каталога файлов в базе (с доступом по webdav)
- Хранение файлов изображений и других - в другой базе
WEB
Структура пользовательской базы
Поля базы
Имя поля | Тип содержимого | Описание | Примечание |
---|---|---|---|
id | id | ||
completedMax | 2010-08-09T10:57:00.000-08:00 (RFC 3339) | Дата окончания выполнения задачи | |
completedMin | 2010-08-09T10:57:00.000-08:00 (RFC 3339) | Дата начала выполнения задачи | |
parent | id | id родительской задачи | Если нет previos |
previos | id | id предыдущей задачи | Если нет parent |
completed | boolean | Выполнена | |
saved | 2010-08-09T10:57:00.000-08:00 (RFC 3339) | Дата последнего сохранения | В том числе и системного |
type | task | Тип содержимого записи | Пока только одно возможное значение |
title | Plain text (без тегов и запрещенных символов) | Заголовок задачи | |
del | 2010-08-09T10:57:00.000-08:00 (RFC 3339) | Дата удаления | |
Системные документы
В каждой пользовательской базе присутствую документы:
- _design/validation
Функция написанная на Erlang, при каждом изменении базы проверяет ее размер. В случае, если размер базы превышает заданный лимит - запрещает запись.
- _design/_auth
- _design/tasks
Настройка CouchDB
Для сервера
- Оптимальная файловая система: xfs
- Мониторинг CouchDB Monitis M3
- Максимальный размер документа
/etc/couchdb/default.ini
max_document_size = 50000
Для базы
_revs_limit = 100; Количество хранимых ревизий
Функция ограничивающая добавление документов при переполненной базе:
fun(NewDoc, OldDoc, {UserCtx}, SecObj) -> DbName = couch_util:get_value(<<"db">>, UserCtx), {ok, Db} = couch_db:open_int(DbName, [{user_ctx, UserCtx}]), {ok, Info} = couch_db:get_db_info(Db), DiskSize = couch_util:get_value(data_size, Info), case DiskSize < 100000 of %% ~100KB true -> ok; false -> case OldDoc of null -> throw({[{<<"forbidden">>, <<"quota limit reached">>}]}); _ -> 1 end end, 1 end.
WEB интерфейс
http://localhost:5984/_utils/
NodeJS
Установка последней стабильной версии
add-apt-repository ppa:chris-lea/node.js apt-get update apt-get install nodejs
Библиотеки
minimalistic couchdb driver for node.js
npm install nano
Nginx
Чтоб Nginx знал, что такое manifest (правила кэширования для HTML5) в mime.types дописываем:
text/cache.manifest manifest;
Клиент
ToDo
- Иожно избавиться от .root и .rootName (__proto__ теперь стандарт)
- Создавать первую задачу автоматически. (подумать, что если база еще первично не отсинхронена)
- В baseTest перед удалением, проверять - есть задача в списке baseLocalChanges
- Перед началом синхронизации проверять - есть задачи в списке baseLocalChanges и блокировать редактирование задач
- Для группового использования:
- Ввести понятие групп (на уровне авторизации)
- для каждой базы есть группа READ и группа RW.
- В группу могут входить другие участники сервиса
- В клиенте реализовать возможность просмотра/редактирования чужих листов.
- Оповещение о добавлении/удалении/изменении задачи можно реализовать внутри сервиса (поле в базе) или по почте
- Оповещение о добавлении/удалении в/из группы можно реализовать внутри сервиса (поле в базе) или по почте
- Сторонние предложения:
- Привязка ко времени и напоминалка в различных вариантах (емейл, смс, всплывающие окна).
- Возможность указывать процент завершенности, и время затраченное на выполнение
- Архив задач
- Онлайн html редактор:
- Периодические задачи
- Поиск по задачам
- Редактор блок схем
- Версионность (реализуется с помощью хранения предыдущей версии документа - как вложения к актуальной версии(http://stackoverflow.com/questions/8274762/best-practice-for-couchdb-document-versioning))
- Вида репликации - онлайн (в том числе слушать евенты от серверной базы), по расписанию, согласно глобальным параметрам android
- Импорт и экспорт из Google Tasks http://code.google.com/p/google-tasks-porter/source/browse/
- Продумать, в каких случаях и как делать purge
- В базе есть поле purge_seq
- На клиенте проверять - если purge_seq изменилось после последней репликации - удалять локальную базу. Создать заново и синхронизировать.
- Пример скрипта для purge http://bravenewmethod.wordpress.com/2012/05/31/couchdb-cleanup-script-for-purging-old-docs/
Подробности реализации
Создание задачи
При создании задачи находим саму старую удаленную. Если срок удаления превышает 1 месяц - используем ее как новую.
Удаление задачи
При удалении задачи, к ней добавляется поле del и эта задача не участвует в построении дерева задача.
Используемые библиотеки
Cordova(PhoneGap)
svn co http://svn.first-leon.ru/tasks-mobile
Работа с проектом
Создание
npm install cordova ./node_modules/.bin/cordova create ntasks com.ntasks.ntasks NTasks cd ntasks
Добавление платформы
../node_modules/.bin/cordova platform add android
Деплой на смартфон
../node_modules/.bin/cordova run android
Литература, ссылки, инструменты
- Плагин эмулятора для Chrome
- Инструменты, библиотеки
- Документация Cordova
- Дополнение от гугл, для эмуляции экрана мобильного устройства
nw.js
Ссылки
Plasma
Ссылки
Windows 7 gadget
Ссылки
- Создание гаджета для Windows 7 на примере виджета онлайн-радио
- Часть 2 — создаем ресурсы, отлаживаемся, делаем инсталлятор
Расширение Thunderbird
Ссылки
Оптимизация
Запуск chromium с разрешением ручного запуска gc:
chromium-browser --js-flags="--expose-gc"