Я решил что сайт слишком уныл, поэтому попросил нарисовать мне всяких животных, которых вы видите

Cromberg — система учёта личных финансов

Cromberg — система учёта личных финансов

Думаю, каждый второй разработчик писал свою собственную систему учёта личных финансов. Теперь к ним присоединился и я. Ранее я обходился возможностями 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.