вторник, 10 октября 2017 г.

Обновление Money Tracker 1.23

Пришлось "прыгнуть" через версию из-за нелепых ошибок, вызванных обфускацией приложения перед публикацией. Цель обфускации в моем случае - уменьшение размеров установочного файла и удаление неиспользуемых методов, ресурсов и т. п. Как оказалось, приложение нужно тщательно тестировать после каждого применения обфускации, иначе то одно в нем перстает работать, то другое.
Я настроил Android Studio таким образом, чтобы обфускации подвергался не только релиз, но и отладочная версия, чтобы уже на этапе отладки получить полный комплект ошибок и устранить причину до выпуска ошибочного релиза (поиск причин ошибок и донастройка правил обфускации - отдельная полная страданий процедура).
Как бы то ни было, данный релиз - один из самых масштабных, и решение о его выпуске далось непросто, т. к. полностью переделан внешний вид Money Tracker. Это так называемый Material Design со своими достоинствами и недостатками.
Основное меню теперь спрятано в выдвижной боковой панели.
Работать с курсами валют теперь удобнее.

понедельник, 1 мая 2017 г.

Обновление Money Tracker 1.21

Для меня это очень важный релиз Money Tracker, потому что в нем наконец-то реализована настоящая синхронизация данных между устройствами. К сожалению, пока синхронизируются только проводки (доходы, расходы, переносы средств между счетами), а счет (счета), контрагентов, валюты и категории нужно обязательно привести в соответствие. Это очень важно! Причем не просто названия, а и внутренние идентификаторы тоже. Сложность в том, что без ручной правки JSON-файлов или без перетаскивания файлов из папки в папку этого пока что не сделать. Есть, чем заняться при подготовке следующего обновления.
Самый интересный момент в синхронизации - синхронизация проводок, относящихся к переносу со счета на счет. Эти проводки - парные (одна является расходом для одного счета, другая - доходом для другого), обе ссылаются друг на друга. Поскольку при синхронизации изменяются идентификаторы соответствующих строк в таблице, ссылки друг на друга становятся недействительными, и их приходится заменять в конце процесса синхронизации.
Еще один скользкий момент, для синхронизации нужно выбрать идентификатор устройства, если оно уже участвовало в синхронизации, либо ввести вручную. Но если ввести идентификатор "от балды", то в процессе синхронизации сервер "виснет", поскольку такая ситуация в нем не обрабатывается. Надо подправить и код сервера, благо у меня он выложен на GitHub.
Проводки, загруженные с другого устройства, отображаются светло-серым в списке проводок.

воскресенье, 30 апреля 2017 г.

Синхронизация в Money Tracker

Сегодня полдня помогал жене монтировать ее видеоролики, и в перерывах ковырялся со своим Money Tracker'ом. Поскольку моя половинка тоже ведет финансовый учет в Money Tracker, то задача синхронизации данных между нашими устройствами встала с первого дня.
До сегодняшнего дня синхронизацию я делал окольным путем почти вручную (комбинировал файл с моей резервной копией данными из ее резервной копии). Это довольно нудно, особенно если на втором устройстве накапливается много записей. Поэтому сегодня я слегка доработал экран резервного копирования.
  
Здесь у меня добавился пункт "Синхронизация данных", если выбрать его, станет доступным ввод ID синхронизируемого устройства, либо выбор из ID из списка ранее синхронизированных устройств.
ID устройства теперь можно  посмотреть в окне информации о программе. На картинке ниже виден ID устройства 4475.
Сам алгоритм примитивен. Каждая запись о доходах и расходах в текущей версии Money Tracker уже содержит ID устройства, на котором она создана. Поэтому при каждой синхронизации с первого устройства удаляются все записи, созданные вторым устройством, и загружаются вновь из его резервной копии. Плата за простоту - замедление процесса по мере увеличения количества записей. Сейчас синхронизирует по этому алгоритму пренебрежимо быстро.
Обновление выложу позднее, т. к. тестирование и все дела.

понедельник, 24 апреля 2017 г.

Обновление Money Tracker 1.20

Весеннее настроение дало повод перерисовать все иконки в моем личном финансовом менеджере Money Tracker и попутно исправить несколько небольших ошибок.
Рисовал все в бесплатном векторном редакторе LibreOffice Draw. Пока делал иконки, много раз вспомнил CorelDraw, и как все было удобно в нем. LibreOffice Draw это как "Москвич" среди автомобилей - простой, крепкий, вроде едет, а удобства - в "Мерседесе" :).
Но не это главное. Главное, как я все в итоге автоматизировал.
На каждой странице в моем графическом файле ровно одна векторная иконка.
Макрос, находящийся в том же файле, обрабатывает каждую страницу и сохраняет ее в отдельную растровую картинку и присваивает ей такое же имя, какое присвоено странице. Таким образом, через секунду после запуска макроса я получаю набор иконок заданного размера. Остается только закинуть их в ресурсы проекта Money Tracker и пересобрать приложение.
Вот мой исходник иконок:
Что касается ошибок. Краш приложения происходил на Android 6 при попытке бэкапа на карту памяти, т. к. Android 6 и выше мало разрешений при установке, ему нужно дополнительно дать разрешения и после установки. Это разумно, поскольку позволяет как дать разрешения, так и в любую секунду отозвать их. Мне нравится.
От краша я избавился, написав обработчик ситуации. Теперь Money Tracker на старших Android сделает запрос на доступ к карте памяти при необходимости. Если разрешение ему не дадут, функция бэкапа на карту памяти заблокируется, и все будут довольны.
Вторая ошибка это даже не ошибка. На экране, где вводят курс валюты (если делать это вручную), поле масштабировалось как попало, и могло "поехать" на некоторых разрешениях и при повороте экрана. Теперь масштабируется хорошо.
Третья ошибка - черный цвет текста на экране плановых проводок. Вообще, в используемой мной теме оформления обычный текст слегка серый, и смотрится лучше. Теперь и на экране с плановыми проводками такой же серый.
Текст макроса на LibreOffice Basic, если интересно (очень трудно на нем писать, почти нет документации):

Sub ExportPNG

REM Задайте размер иконки
size = 128

sLocation = StarDesktop.CurrentComponent.getLocation()
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
sDirectory = Tools.Strings.DirectoryNameoutofPath(sLocation, "/")    + "/"

Dim Page As Object

dim args2(6) as new com.sun.star.beans.PropertyValue
args2(0).Name  = "PixelWidth"        '
args2(0).Value = size
args2(1).Name  = "PixelHeight"
args2(1).Value = size
args2(2).Name  = "Compression"
args2(2).Value = 9
args2(3).Name  = "Interlaced"
args2(3).Value = 0
logicalSize = int(2540 * size / 96)
args2(4).Name  ="LogicalWidth"
args2(4).Value = logicalSize
args2(5).Name  ="LogicalHeight"
args2(5).Value = logicalSize
args2(6).Name  ="Translucent"
args2(6).Value = true

dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(1).Name = "MediaType"
args1(1).Value = "image/png"
args1(2).Name = "FilterData"
args1(2).Value = args2()
args1(3).Name = "SelectionOnly"
args1(3).Value = false

xExporter = createUnoService("com.sun.star.drawing.GraphicExportFilter")

For i = 1 To StarDesktop.CurrentComponent.drawPages.Count()
    Page = StarDesktop.CurrentComponent.drawPages(i - 1)
    args1(0).Value = sDirectory + size + "/" + Page.Name + ".png"
    xExporter.setSourceDocument(Page)
    xExporter.filter(args1())
Next

MsgBox "Экспорт успешно завершен"

End Sub

суббота, 22 апреля 2017 г.

Обновление English Club 1.28

Новые 30 слов (на самом деле 28) в разделе "File 7. House":
  • Балкон - balcony
  • Подвал, цокольный этаж - basement
  • Мы покрасили потолок белым. - We painted the ceiling white.
  • Нам нужно прочистить дымоход перед тем, как зажжем огонь. - We need to clean the chimney before we light the fire.
  • Город - city
  • Уютный - cosy
  • Страна, загородная местность, деревня - country
  • Восточное побережье - east coast
  • Камин - fireplace
  • Мы покрасили ворота в наш сад темно-зеленым. - We painted the gate to our garden dark green.
  • Первый, нижний, цокольный этаж - ground floor
  • Светлый - light
  • Наш дом делается из камня. - Our house is made of stone.
  • Современный - modern
  • Я люблю сидеть у открытого огня. - I like sitting by the open fire.
  • Я живу на окраине Бирмингема. - I live on the outskirts of Birmingham.
  • Путь, дорожка - path
  • Внутренний дворик - patio
  • Крыша - roof
  • Второй этаж - second floor
  • Просторный, вместительный - spacious
  • Ступеньки, шаги - steps
  • Терраса, веранда - terrace
  • Верхний этаж - top floor
  • Город, городок (но не “city”) - town
  • Я вырос в деревне в Уэльсе. - I grew up in a village in Wales.
  • Стена - wall
  • Деревянные полы - wooden floors

Изучайте английский язык с English Club и Oxford Team, и сможете рассказать любому иностранцу про дом или квартиру вашей мечты!

четверг, 16 марта 2017 г.

Обновление Money Tracker 1.19

Наконец добрался до своего приложения для управления личными финансами Money Tracker. Исправлений и доработок немного, самое сложное буду делать позже.
1) Самое грустное. В связи с выходом Android 7.1 обновилось ПО Android Studio, и я смог лично познакомиться с новым багом. Теперь контекстное меню стало выглядеть просто ужасно, полностью отличаясь от "выпадашек" комбо-боксов, и на его вид практически невозможно повлиять (даже цвет заголовка не изменить). Google, исправьте это, пожалуйста.
2) Исправлен код встроенного калькулятора. Раньше если два раза подряд нажать кнопку операции (например, "+"), то экран обнулялся. Теперь можно жать кнопки операций неограниченное количество раз. Кнопка, нажатая последней, определяет операцию, которая будет выполнена, если следом ввести число и нажать "=".
3) Куча информации теперь загружается в базу данных при первом запуске приложения. Например, категории, которые я вывел из собственного опыта эксплуатации приложения. Жаль, что я не догадался сделать это раньше, т. к. нормальные люди пугаются пустых экранов, где ничего не понятно.
В планах улучшение для повышения удобства совместного ведения доходов и расходов разными людьми (т. е. это и сейчас возможно, но дико неудобно потом вручную данные объединять).

понедельник, 13 февраля 2017 г.

Мое знакомство с GitHub

Ранее я делал простенький сервер на Java под названием MoneyTrackerServer. Задача сервера - принимать соединения Wi-Fi от устройств, на которых запущен мой Money Tracker, и обмениваться с ним данными. Проще говоря, делать резервные копии.
Кроме того, MoneyTrackerServer при должной сноровке и ручном редактировании дал мне возможность объединять расходы членов семьи, которые они ведут на своих устройствах, с моими расходами и доходами :).
Поскольку MoneyTrackerServer в версии 1 не имел окон, я реализовал взаимодействие с ним через иконку в системном трее. Но хочется большего, хочется нормального оконного интерфейса. Поэтому моя вторая версия MoneyTrackerServer использует библиотеку JavaFx. И вторую версию я решил опубликовать на GitHub, чтобы получить опыт работы с этой системой контроля версий.
Ссылка на исходники MoneyTrackerServer 2.0 - https://github.com/rgeta/MoneyTrackerServer.
Компилирую с помощью Eclipse (не обошлось без сложностей при импорте проекта с GitHub), но хочу попробовать ручную сборку, если будет время.