Думаю, каждый второй разработчик писал свою собственную систему учёта личных финансов. Теперь к ним присоединился и я. Ранее я обходился возможностями Excel
, они широки и полностью меня устраивали, пока мне не понадобилось достать и проанализировать только те данные о доходе, в описании к которых содержались некоторые ключевые слова. Делать это на excel — та ещё морока. Задачу я решил в итоге на Java, прочитав все данные из Excel, но идея появилась, что нужно как-то иначе хранить данные, чтобы к ним можно было самому легко дописать временную разовую логику. Да и в целом, хотелось получить новый опыт, поэтому я взялся за разработку собственной системы учёта личных финансов.
Приложение хотелось небольшое, не требующее установки, чтобы можно было положить его в папку dropbox, там же хранить данные и спокойно запускать с любого устройства.
Для нетерпеливых: вот ссылка на релиз, а тут исходники.
Разработка
Первый вопрос — выбор технологий. Можно было писать на Java, использовав SWT
или JavaFX
, но я и так уже на работе писал на Java. Можно было взять Qt, но возвращаться к плюсам не хотелось. Какие-то старые технологии, типа делфи? Нет смысла. В целом я слабо представлял на чём сейчас пишут под десктоп т.к. работа всегда была связана с вебом.
В итоге я наткнулся на Electron.js
, которые представляет из себя минимальную версию Chromium
, в которой будет работать ваше приложение. Писать на JavaScript под десктоп? Звучит ужасно, но я решил попробовать. Тем более что я больше бекенд разработчик, а значит поработать с фронтенд стеком было бы полезно.
Выбор базы данных для хранения информации был невелик — нужно было что-то кроссплатформенное, лёгкое, не требующее новых зависимостей. Поэтому я нашёл проект NeDB и он оказался достаточно удобен для моих нужд.
Ещё хотелось уведомлений каждый месяц, т.к. я, бывало, забывал заполнять баланс. Уведомления из программы оказались проблемой — нужно было её тогда держать включенной в трее, чтобы раз в месяц вывести уведомление. Засовывать программу, которая нужна 2 раза в месяц, в трей было слишком дико. Думаю, возможно это сделать через планировщик, но сильно муторно, да и различия есть между ОС. Поэтому решил написать небольшой сервис на PHP
, который будет получать почты для уведомлений из программы и в нужное время высылать письма. Соответственно разработал механизмы подписки/отписки из приложения и отписка прямо из письма.
Для графиков использовал Google Charts
, они крутые, но, к сожалению, их нельзя использовать в офлайн режиме. Поэтому для отрисовки графиков нужен интернет при запуске.
Функционал
Учёт дохода
- Запись о поступлении средств (поля дата, месяц, сумма, тип, контакт, описание)
- Графики дохода (по месяцам, по годам, среднее по годам)
- Минимум/максимум
Учёт баланса
- Запись баланса на конец каждого месяца по разным статьям хранения средств (банк/наличные/электронные деньги/…)
- График баланса
- График расходов (на основе дохода и баланса)
Прочее
- Возможность подписаться на напоминания по почте в последний день каждого месяца
- Бекап данных в выбранную папку при каждом запуске (но не чаще раза в день)
Название
Что означает Cromberg? Я не знал как назвать проект на github и попросил коллегу сказать случайное слово, им и оказался Cromberg. Оказывается, в Калифорнии есть такая административная единица. На 2010 год там проживает 261 человек.
Релиз
Вот наконец я и выпускаю релиз v0.1
, который поддерживает все вышеописанные функции, но пока сборка работает только под Windows. Скачать последнюю актуальную версию можно тут. Там же не трудно найти исходный код. Буду рад комментариям, предложениям и информации о багах.
UPD: с момента написания этого текста, прошло много времени и вышло несколько новых версий с дополнительным функционалом и разными фиксами. Так что за актуальными данными идите на страницу проекта в github.
P.S. Спасибо Яну за участие в разработке. Его контакты можно найти в списке участников проекта на github.