Spense.app v0.2
Привет! Я закончил работу над очередной версией Spense с кучей улучшений и по традиции делюсь самым интересным.
Страница со счетами и кошельками
В интерфейсе приложения теперь можно управлять своими кошельками и смотреть текущий баланс:
По части добавления и редактирования кошельков всё довольно тривиально: можно редактировать название кошелька, комментарий к нему, валюту и базовый баланс. Но во время разработки я понял, что у меня довольно много счетов, которые я когда-то использовал и которые сейчас закрыты и меня больше не интересуют. Так что я решил добавить кнопку "Close Wallet", которая перемещает кошелек в скрытый блок, чтобы он не маячил перед глазами.
Баланс кошелька
Еще стоит упомянуть о функции, которая была уже давно и которую я в этот раз немного улучшил - это расчет баланса. Забавно, что практически все современные приложения, которые я тестировал, считают его неправильно.
Например:
- я создаю кошелек и пишу, что сейчас в нем лежит 100$;
- записываю в расходы, что вчера я потратил в магазине 20$, потому что я это все еще помню и хочу уже что-нибудь записать;
- приложение показывает, что сейчас в кошельке 80$.
Не знаю, о чем думают разработчики, но это мне точно не подходит. То, что я называю "базовым балансом" (Base balance) - это константа, привязанная к дате, и от нее я могу динамически считать текущий баланс на произвольный момент времени, суммируя транзакции до или после даты базового баланса.
На примере ситуации выше: если после создания кошелька и внесения информации о базовом балансе я больше ничего не тратил и не получал, баланс будет все еще 100$. Но если я захочу узнать, какой баланс был позавчера, приложение прибавит те потраченные 20$ и скажет, что позавчера было 120$. Хоть и на самом деле в Spense еще нет интерфейса, где можно было бы увидеть позавчерашний баланс, под капотом для этого уже все готово.
Доходы
Наконец-то можно записать себе зарплату! Тут самым сложным было придумать приемлемое интерфейсное решение, и я остановился на переключателе рядом с полем ввода суммы.
По умолчанию переключатель находится в режиме ➖, то есть записи расходов. Если на него нажать, он превратится в ➕, и при этом обновится список популярных тегов, соответствующих входящим транзакциям.
Такая транзакция помечается в списке зеленым плюсиком ("+ 123.00€"). Логично было бы тогда добавить остальным транзакциям знак минуса, но я решил, что это избыточно, потому что в моей ситуации (и, полагаю, у большинства людей) 99% транзакций - это траты, и мне не нужно дополнительное визуальное пояснение. А вот подсветить авансик бывает приятно.
Переводы между собственными счетами и кошельками
Пришла зарплата - вывели часть в наличку, а часть отложили на отдельный накопительный счет. Кончились деньги в кошельке - взяли чуток из закромов. Решили куда-то съездить - купили местную валюту.
За этим всем тоже хочется следить, и до сих пор такой функции не было, а теперь есть. За нее отвечает та же самая кнопка, у которой добавился режим перевода между кошельками:
Самое главное в нем то, что можно указывать разные суммы на входе и выходе. Очень полезно в тех случаях, когда валюты разные и/или по дороге теряется какая-нибудь комиссия. А главный минус текущей реализации - обе суммы нужно указывать всегда, даже если они одинаковые. Но это я потом починю :-)
Еще в этом интерфейсе нет тегов, потому что обычно перевод между своими счетами - это по сути и есть отдельная категория транзакций. Если нужно как-то пояснить этот перевод, можно добавить комментарий.
Валюта списания транзакции
Бывает ситуация, когда счет в одной валюте, а транзакция осуществляется в другой. Например, подписка на ChatGPT стоит 24.20$ (20$ + налоги), но так как счет у меня в евро, по дороге происходит какая-то конвертация, по факту списывается 22.41€, и я хотел бы сохранить информацию про обе эти суммы.
Так что я добавил невзрачную подпись "Original currency is different", за которой скрыто поле ввода исходной суммы платежа:
Эти данные пока никак не влияют на расчеты, просто отображаются в истории транзакций.
Редактирование и удаление транзакций
По части редактирования транзакций появилось два небольших, но приятных улучшения:
- теперь можно редактировать старые транзакции со страницы "Transactions";
- в форме редактирования появилась большая кнопка "Delete", перед которой у пользователя дополнительно уточняют, действительно ли он хочет это удалить.
История изменения транзакции
В прошлый раз я сделал так, чтобы ни кошельки, ни транзакции не удалялись по-настоящему, чтобы случайно не потерять важные данные. В этот раз я пошел дальше и решил добавить трекинг изменений в транзакции. Допустим, ситуация: я заказал такси, сразу после этого у меня списалась сумма за поездку, и я ее себе записал; поездка в итоге заняла дольше обычного, сумма оказалась больше, и я ее изменил в приложении. Иногда бывает, что я просто ошибаюсь с суммой и исправляю ее через пару дней. И я решил, что хорошо бы по крайней мере хранить всю историю изменений и иметь к ней доступ. В главном интерфейсе этой функции пока нет, но в админке можно просмотреть историю любой транзакции.
В конечном счете это, конечно, переедет и в само приложение, чтобы пользователи могли восстанавливать случайно удалённые транзакции или откатывать их к состоянию до последнего редактирования.
Планы на следующую версию
На данный момент Spense меня полностью устраивает как ежедневный инструмент для учета расходов, и я готов приступить к обработке накопленных данных и построению прогнозов. В следующей версии я планирую добавить отдельную страницу с отчётами, по крайней мере, с одним, который будет показывать прогноз на ближайшие 3-6 месяцев на основе данных за последний месяц, полгода или год. Скорее всего, этот отчет не будет адаптирован для мобилки, но пока это и не требуется.
Есть еще идея с отчетом по тразакциям за выбранный период, но там загвоздка с группировкой по тегам (категориям расходов). Например, теги "кафе", "обед" и "магазин" можно объединить в одну категорию "Еда", чтобы узнать, сколько денег было "съедено" за прошлый месяц. С другой стороны, "кафе" и "обед" можно объединить в категорию "Еда, приготовленная не дома", а "магазин" - в "Еда, приготовленная дома", и сравнить, насколько одно дороже другого. В общем, здесь предстоит очень много экспериментов.
Ну и хотелось бы уже научиться складывать балансы всех счетов, чтобы отображать общую сумму. Для этого нужно будет подключиться к источникам актуальных данных по курсу валют и научиться приводить все суммы к одной валюте. Так что там тоже немало работы.
Не уверен, что все эти планы удастся реализовать в версии 0.3, но что-то одно точно будет.
Stay tuned!
Безопасность персональных данных
Вчерашнее событие с публикацией слитых с Яндекс.Еды персональных данных напомнило о базовых правилах предоставления информации о...
Абстракции и наследование в Си - стреляем по ногам красиво
TL;DR Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимо...
В болезни будешь рожать детей
Размышлял пару дней назад на тему этого фрагмента из Бытия, когда Бог изгонял людей из рая Жене сказал: умножая умножу скорбь т...
Машина времени и пространства
Возможно, вы не задумывались, но машина времени должна перемещать человека не только во времени, но и в пространстве, учитывая п...
Я написал программу, которая сделала меня здоровее
Периодически из-за тонзиллита мне надо посещать лора примерно два раза в год: осмотреться, подлечиться, и всякое по мелочи. Про...
Go: Отложенная обработка событий файловой системы
Допустим, вам нужно что-то сделать при возникновении какого-то события файловой системы. Например, перезапустить веб-сервер при ...