среда, 28 декабря 2016 г.

Обновление Wappo 2 1.11

Спасибо анонимному пользователю, оставившему мне комментарий: "Как пройти 96 уровень? Не сплю день и ночь!".
Кинулся проходить 96-й уровень заново, и с ужасом обнаружил, что он стал непроходимым. А я был уверен, что алгоритм движения персонажей идеален! Увы, это оказалось не так.
Прохожу 96 уровень в оригинальной игре.
Первый правильный ход Wappo - наверх, жму двойку. Монстры телепортировались одновременно.
В моей же версии игры телепортировался только один монстр, и сразу же слился со вторым, не дав ему походить! Почему так происходит? Потому что у меня проверка слияния монстров производится сразу после хода одного монстра. Переношу проверку за цикл поочередного движения монстров. Теперь все встало на свои места.

воскресенье, 20 ноября 2016 г.

Обновление EnglishClub 1.21

Мой English Club наконец обзавелся стартовой страницей с возможностью выбора уровня. Узоры напоминают аналогичные с учебников, по которым я в данное время занимаюсь, и в подспорье к которым и создавал данное приложение.
Кнопки сделал белыми на черном фоне то же из соображений близости к бумажным учебникам.
Пока не реализовал отдельный фон для горизонтального расположения устройства, займусь этим позже.

В Pre-Intermediate спрятан 31 раздел, там преимущественно отдельные слова, за фразами лучше идти в Intermediate. В режиме "Random" в случайном порядке выводятся слова и фразы из всей базы независимо от уровня.

суббота, 12 ноября 2016 г.

Обновление EnglishClub 1.19

Добавил в English Club новый раздел "File 3. Useful phrases", состоящий из 39 фраз, и совсем чуть-чуть подправил код главного экрана. На эмуляторе работает, как часы, а на реальном устройстве предыдущая версия сделала непонятный crash сразу после обновления. Посмотрим, как поведет себя эта.
Смешная фраза из раздела:
  • Women talk about lots of subjects whereas men usually stick to one subject for longer.
  • Женщины говорят о многих темах, в то время как мужчины обычно прилипают к одной теме на дольше.
 Так что заканчиваю залипать на этой теме :)

четверг, 10 ноября 2016 г.

Обновление EnglishClub 1.17

Полностью переделал в English Club загрузчик слов и фраз из файлов в Assets в базу данных. Ранее этот загрузчик вызывался всякий раз, когда с обновлением приложения обновлялись и слова, и фразы. Если в момент обновления экран устройства поворачивался на 90 градусов, процесс загрузки прерывался с ошибкой, а новые слова и фразы в БД не попадали.
В новой версии эта ошибка исключена и добавлен диалог процесса загрузки.
Кроме этого, в меню добавлен специальный пункт "Загрузить данные в БД", чтобы базу данных можно было в любую секунду обновить из файлов в Assets.
Теперь главный экран приложения выглядит так:
А экран ввода слова/фразы так:

воскресенье, 6 ноября 2016 г.

Обновление EnglishClub 1.16

В этом обновлении приложения для заучивания английских слов, словосочетаний и (теперь уже) целых фраз English Club я добавил 32 фразы из File 3 оксфордского учебника для уровня изучающих Intermediate. Все добавлять пока не стал, т. к. одновременно внес изменения в тело приложения:
  • Сильно изменился загрузчик записей в базу данных из JSON-файлов, в которые я и добавляю, собственно слова, словосочетания и фразы. Теперь первый запуск после обновления приложения будет дольше, т. к. независимо от версии файлы считываются в память целиком, но зато теперь сильно упростился код, отвечающий за смену версий базы данных, а значит, мне проще и быстрее будет пополнять словарь. Больше слов и фраз!
  • Немного облагородил экран ввода перевода:
 
  • По мере правильного ввода перевода пробелы и знаки препинания добавляются автоматически, например, если в переводе предполагается "I've", после набора "I" апостроф добавится автоматически. Это, конечно, облегчает перевод.
Вскрылась проблема, которая может проявиться на некоторых из Android-устройств. Поскольку вместо EditText используется TextView и опрос клавиатуры для определения нажимаемых пользователем клавиш, на "навороченных" клавиатурах, как, например, на планшете Asus PhonePad 7 c Android 5 на борту, ввод не работает. Если зайти в настройки устройства и поотключать "навороты", то ввод начинает работать нормально!

вторник, 1 ноября 2016 г.

Обновление EnglishClub 1.15

Добавил 32 новые фразы для перевода и исправил 2 ошибки в предыдущих. В одной из фраз оказалось длинное тире, у которого нет аналогов на клавиатуре, т. е. фразу нельзя набрать и завершить раздел. Теперь все ОК.
Также небольшое изменение в отображении набираемых фраз - пробелы больше не выделяются серым фоном. Может быть, это еще не окончательная раскраска.

суббота, 29 октября 2016 г.

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

Преподаватель Oxford Team Маргарита Чуркина подсказала идею включить в программу English Club задания на перевод с русского на английский целых предложений, а не только отдельных слов. Предложения она мне дала на английском и без перевода, поэтому переводил самостоятельно, но некоторые предложения выглядят, будто переведены Google Translate не поэтому, а потому, что я стремился их построить так, чтобы было легко переводить "подстрочно".
Вот пример смешной фразы, но я не знаю, как ее иначе построить, чтобы перевод напрашивался сам:
  • Я слушал мощные баллады, чтобы воодушевить меня.
  • I've been listening to power ballads to inspire me.
Кстати, любопытно, что в разных версиях оксфордского учебника эта фраза выглядит по-разному. В более старом героя воодушевляет просто музыка, а не баллады. Тем более, какие-то "мощные".
А следующая фраза содержит сильное прилагательное от "смешной" ("hilarious"). Маргарита, сославшись на студентов параллельной группы, сообщила, что они предложили в качестве русского аналога слово "ржачный".
  • Фильм был ржачным - мы смеялись так много.
  • The film was hilarious - we laughed so much.
Пойду, потестирую новую версию на себе.

понедельник, 24 октября 2016 г.

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

В этом обновлении я не добавлял в приложение новые слова, с ними чуть позже, поскольку грядет небольшое усложнение, чтобы добавить интереса процессу обучения. Что же изменено?
Во-первых, я слегка изменил цветовую окраску кнопок в сторону смягчения:

Во-вторых, существенной переделке подвергся механизм ввода слов. Теперь это не стандартное поле ввода, а имитация. Сделал я это для того, чтобы иметь возможности:
  • Выделять часть введенного слова цветом (правильные буквы окрашиваются синим);
  • Вводить слова, добавляя букву за буквой;
  • Запретить стирать буквы, введенные правильно;
  • Запретить буфер обмена.
Вот так теперь выглядит ввод перевода:
Надеюсь, что вводить перевод на маленьких смартфонах теперь будет приятнее.

суббота, 8 октября 2016 г.

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

Сегодня подготовил обновление для помощника по запоминанию английских слов English Club.
Были включены слова из Unit 2A оксфордского учебника для Intermediate:
  1. Банковский счет - bank account
  2. Счёт (к оплате) - bill
  3. Банкомат - cash machine
  4. Кредит - loan
  5. Ипотека - mortgage
  6. Дененжная купюра
  7. Заработная плата - salary
  8. Налог - tax
  9. Позволить себе - afford
  10. Наследовать - inherit
  11. Задолжать - owe
  12. Стоимость (ценность), стоящий - worth
  13. Экономить, копить - save
  14. Зарабатывать - earn
  15. Собирать (речь о деньгах) - raise
  16. Цена (например, free of ... - бесплатно) - charge
  17. Фондовый рынок (рынок акций) - stock market
  18. Эпоха, эра - era
  19. Срок годности (продукта) - sell-by date
  20. Выбрасывать, списывать - discard
  21. Жадный (синоним mean) - greedy
  22. Нищий - broken
Также произвел "перелицовку" программы, и теперь главный экран выглядит иначе:
За счет того, что "Progress Bar" совмещен с кнопкой перехода к словам, удалось немного уменьшить размер списка. Эффекта шкалы прогресса удалось достичь, рисуя прямоугольники прямо на кнопке.

суббота, 1 октября 2016 г.

Обновление MoneyTracker 1.18

В очередном обновлении Money Tracker имеются незначительные улучшения:
1) Самое главное - ускорено сохранение резервной копии за счет того, что диалог прогресса выполнения копирования обновляется не с каждой строкой копируемой таблицы, а только при изменении процента выполнения на единицу. Объективно ускорение в несколько раз, мои реальные данные в 6443 строки на слабеньком смартфоне копируются по сети на компьютер около 13 секунд.
Думаю, что увеличить скорость копирования я больше не смогу. Во всяком случае, без радикального отказа от универсальности (сейчас у меня красивый код, который копирует все поля всех таблиц, причем изменение структуры любой из таблиц не требует корректировки процедуры копирования).
2) Часть так называемых "тостов" - коротких уведомлений в программе заменены на полноценные диалоговые окна, чтобы их можно было прочитать ("тосты" слишком быстро исчезают). Изменение коснулось резервного копирования и загрузки курсов валют, а также уведомления о добавленных плановых проводках при старте приложения.
3) Слегка изменил внешний вид основного экрана и экрана проводок. Мне кажется, получилось красивее, чем было (с учетом достаточно аскетичного вида приложения). Кроме того, теперь отображается горизонтальный индикатор прокрутки у панели инструментов, чтобы стало понятно, что панель инструментов прокручиваемая.

воскресенье, 25 сентября 2016 г.

Обновление Wappo 2 1.10

Обновление пришлось выпустить из-за ошибки в созданном мной уровне 108, из-за которой он стал непроходимым. Добавил одну разрушаемую стену в правом нижнем углу:
На всякий случай прошел все уровни от 101 до 125 до конца, два-три из них точно вышли отличные.
Наконец нашел, куда в движке вставить проверку прав приложения, а то в Android 6 если вручную не предоставить игре право доступа к памяти, информация о пройденных уровнях не сможет быть записана или прочитана, и игра при каждом запуске будет начинаться с самого начала. Вот это сообщение:

понедельник, 19 сентября 2016 г.

Неразрешимый уровень в Wappo 2

К сожалению, вчерашний релиз Wappo 2 содержит ошибку в 108 уровне (это дополнительный уровень, разработанный мною). Его можно пройти только в том случае, если не считать поражением ситуацию, когда Wappo и Xarduc попадают на клетку с выходом одновременно.
Придется выпускать внеплановое обновление.

воскресенье, 18 сентября 2016 г.

Обновление Wappo 2 1.9

Свершилось! Сегодня опубликовал обновление с 25 новыми уровнями! Все 25 созданы разработанным мною ранее генератором уровней, о чем я писал в предыдущем сообщении. Часть я вычистил от неиспользуемых стен, у части оставил, т. к. это может усложнить жизнь игроку.
Попутно нашел два небольших бага. В одном случае телепортировавшиеся друг за другом Xarducs сливались в сильного монстра не на текущем ходу, а на следующем (хотя это было неизбежно, но могло дать Wappo шанс убежать и при неправильных ходах игрока.
Второй баг еще веселее. Из за него пришлось выкинуть красивый 126 уровень, т. к. он был разрешим лишь при наличии бага. Суть в том, что Wappo мог наступить на телепорт с уже стоящим в нем монстром, и не умереть, а спокойно телепортироваться.
Ссылка на игру в Play Market.

пятница, 16 сентября 2016 г.

О новых уровнях Wappo 2

В оригинальной игре Wappo 2 было ровно 100 уровней разной сложности, и при определенной сноровке ее можно пройти за неделю-другую в обеденный перерыв. А что дальше? Спасибо Елене Волчек, которая неделю назад поинтересовалась, когда будут новые уровни. Елена также рассказала мне про игру про Минотавра (похожую на Wappo 2), в которую она играла на Nokia.
Я нашел описание той игры, и нашел генератор уровней к ней. И хотя игра в Минотавра проще, чем Wappo 2, она позволила мне понять, что генератор уровней для подобных игр возможен.
Первым делом мне пришлось сделать приложение на Java, которое находит решение на стандартных уровнях Wappo 2. За основу я взял свою игру, выкинув из нее все, относящееся к графике и звуку.
Этому приложению я "скормил" прекрасные 86 и 87 уровни, решения по которым он нашел. Правда, решения не оптимальные, но иного и не ждешь от последовательного перебора. Можно, конечно, усовершенствовать алгоритм, чтобы он искал все возможные решения и выбирал кратчайшее, но я этого делать пока не стал.
Затем я добавил генератор карт на основе случайных чисел и заставил его работать с решателем в тандеме, генератор генерирует случайные карты, производится поиск решения. Если оно не найдено, карта отбрасывается, если решение найдено, и оно короткое, то тоже отбрасывается. Из пары сотен сгенерированных карт порой подходящей кажется лишь одна.
Результат я вывожу в консоль, которую впоследствии перенаправил в файл.
Вот пример карты, созданной моим генератором:
┌─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │
├─┼─┼─┼─┼─┼─┤
│ │█│ │ │X│ │
├─┼─┼─┼─┼─┼─┤
│ │ │ │ │█│W│
├─┼═┼═┼═┼─┼─┤
│ │ │ │ │ ║ │
├─┼═┼─┼═┼─┼─┤
│ │ │ │ │ │ │
├─┼═┼─┼─┼─┼─┤
│░║ ║ │ │ ║ │
└─┴─┴─┴─┴─┴─┘

Здесь в левом нижнем углу дверь выхода, W - главный герой, X - монстр, черные прямоугольники - телепортеры, одиночные линии на сетке обозначают клетки игрового поля, двойные линии играют роль неразрушимых стен.
Завтра потестирую карты на игре, и если они заставят меня поломать голову, добавлю их в игру сверх стандартных уровней!

среда, 7 сентября 2016 г.

Обновление Wappo 2 1.8

Опубликовал обновление Wappo 2 1.8, и почти сразу же обнаружил небольшой недостаток, связанный с тем, что при телепортации монстр теряет оставшиеся ходы. Если монстр зайдет вслед за Wappo в один телепорт, то они оба остаются в одной клетке во втором телепорте, и игра не заканчивается, поскольку оба отходили. Эта ситуация легко воспроизводится на уровне 86, для чего надо походить три раза: ←, ↓, ↑. Ситуация показана на картинках.



Первое же решение, которое пришло мне на ум, - проверять, догнал ли монстр главного героя как до телепортации, так и после нее. Шесть строчек кода, и все работает. Обновление опубликую а Play Market позднее.

понедельник, 5 сентября 2016 г.

Доработка Wappo 2

Началось с того, что в игре Wappo 2, которую я портировал на Android (ну как портировал, полностью написал свой код), обнаружился баг в 86 уровне. Баг забавный в том плане, что уровень можно пройти двумя способами. В оригинале на телефоне Benq-Siemens AX72 этого бага не было, и способ прохождения уровня 86 только один!
Два вечера я искал причину бага у себя в алгоритме, и по мере поисков код сократился раза в два! На сегодня баг устранен, и все персонажи теперь ведут себя, как в оригинале. В Play Market обновление пока не выкладывал, потому что занялся переделкой игровых персонажей. Они у меня теперь объемные, как в оригинале. Создавал персонажи с помощью программы для трехмерного моделирования Blender, рендерил их в разных позах, сохраняя спрайты. На Wappo потребовалось сделать 12 картинок, на Xarducs (игровых монстров) тоже 12 на простых, и 24 на супермонстра, который может ходить диагонально.
Ниже представлен прототип Xarducs:

Скоро обновление.

суббота, 27 августа 2016 г.

Обновление MoneyTracker 1.17

Внес небольшие изменения в личный финансовый менеджер MoneyTracker.
Самое существенное - алгоритмы сохранения и восстановления резервных копий теперь сжимают данные (GZIP). Например, копия всех моих данных MoneyTracker без сжатия сейчас занимает 1727 Кб, с сжатием - 105 Кб. Это раз в 18! Это не сильно сказалось на скорости сохранения резервной копии (ускорилась процентов на 20), но вот скорость восстановления - пара секунд на моем не самом быстром смартфоне!
К тому же у меня есть идея по поводу оптимизации сохранения (там самое узкое место- формирование JSON-файла). Погнавшись за универсальностью алгоритма, я принес в жертву производительность.
Другое изменение - скорее косметическое. Во время загрузки курсов валют кнопка загрузки блокируется. Ранее кнопка не блокировалась, хотя ее повторные нажатия и игнорировались.
Наконец, третье изменение, о котором я написал в предыдущем сообщении, касается параметра "Лимит списка проводок" в настройках программы. Теперь можно его делать пустым, и вместо вылета из приложения получать полный список доходов и расходов по счету без ограничений.
На картинке ниже показан экран с доходами и расходами при значении параметра "Лимит списка проводок" равном трем.
Зададим его пустым.
Теперь список проводок ничем не ограничен (кроме ресурсов вашего устройства).


пятница, 19 августа 2016 г.

Проблема в Money Tracker

Обнаружил небольшую проблему в моем финансовом менеджере Money Tracker. Если в настройках сделать параметр "Лимит списка проводок" пустым, то приложение выпадает в ошибку при просмотре любого счета. Это и понятно, в запросе к БД получается операнд "LIMIT" без указания количества записей, а это не допускается синтаксисом.
После недолгого обдумывания решил сделать в следующем обновлении, что если задать лимит на количество проводок в списке пустым, то должны выводиться все проводки без ограничений.

вторник, 16 августа 2016 г.

Обновление MoneyTracker 1.16

В этом обновлении две доработки, касающиеся курсов валют:
1) Изменено сообщение об окончании загрузки на "Загрузка курсов валют завершена".
2) Устранена ошибка, возникающая, если не дождаться окончания загрузки курсов и нажать кнопку Back.
3) Теперь для загрузки курсов не требуется, чтобы они были предварительно заданы вручную. Достаточно вручную добавить новую валюту и нажать кнопку загрузки курсов.
На скриншотах ниже показано состояние курсов валют "до" и "после" загрузки:
Очень важно, чтобы краткие названия валют соответствовали общепринятым. например, для рубля это RUB, для доллара США это USD. В противном случае сервис валютных курсов не найдет валюту и курс не будет определен.

суббота, 13 августа 2016 г.

Обновление MoneyTracker 1.15

Добавил загрузку курсов валют с сервиса Yahoo Finance. Кнопка загрузки обменных курсов логично размещена на экране со списком валют. Загружаются только те валюты, которые есть в списке, причем по коротким названиям. Если для валюты будет использовано "свое" сокращение, отличное от общепринятого, курс данной валюты загружен не будет.
Также курс загружаться не будет, если ранее не задавался вручную!

воскресенье, 27 марта 2016 г.

Обновление MoneyTracker 1.11

Доработал MoneyTracker, теперь можно фильтровать проводки по дате, функционал работает изумительно. В этой версии для фильтрации можно использовать функции:
  • Дата проводки = заданной дате.
  • Дата проводки < заданной даты.
  • Дата проводки > заданной даты.
  • Все проводки за сегодня.
  • Все проводки за вчера.
  • Все проводки за последние 30 дней.
Разумеется, все это в произвольных сочетаниях.
Пришлось спешно выпускать обновление 1.11, т. к. 1.10 оказалось с двумя ошибками, которые были выявлены при тестировании на реальном устройстве. Обе при работе с фильтром по дате.

четверг, 17 марта 2016 г.

Обновление MoneyTracker 1.9

Закончил работу над серьезным обновлением для моего финансового менеджера MoneyTracker.
Во-первых переделал часть кода по отображению данных из базы данных в соответствии с рекомендациями Google (раньше данные в списки грузились в основном потоке, теперь грузятся в отдельном). Правда, изменения затронули не все приложение, буду править по ходу развития функционала.
Во-вторых, наконец-то реализовал давнюю идею фильтрации и сортировки списка проводок. Для чего это нужно? Ну, к примеру, нужно вывести все покупки в категории "Одежда" для контрагента "Марина". Раньше для этого пришлось бы сделать выгрузку в CSV-формате на сервер, открыть файл в Microsoft Excel или LibreOffice Calc и поиграть с фильтрами. Теперь это можно сделать прямо в MoneyTracker.
Фильтр строится на принципе "обратной польской записи", или, как ее еще называют, "бесскобочной записи". Например, если мне нужно отфильтровать всю одежду, купленную Марине, мне понадобится последовательно добавить в фильтр два условия и операцию "И":
- Категория РАВНО "Одежда";
- Контрагент РАВНО "Марина";
- Операция "И".
Итак, запускаю MoneyTracker и захожу в проводки.
Теперь к трем кнопкам в предыдущей версии приложения добавлена еще одна в виде воронки, нажимаю ее. В списке фильтров присутствует стартовый фильтр с именем "Без фильтрации", он соответствует прежнему отображению списка проводок.

Жму кнопку с плюсом, чтобы добавить новый фильтр. Назову его "Марина одежда". Внимание, фильтр можно сохранить только если будет что-то в поле "Примечания" (такая вот ошибка получилась).
На вкладке "Сортировка" выбираю режим сортировки, там все просто и понятно. Если поставить сортировку по дате, то чтобы сверху шли самые свежие проводки, нужно поставить флажок "Обратный порядок". Затем перехожу к самой важной вкладке "Условия".
Здесь всего две кнопки с плюсом и минусом. Первая добавляет условие или операнд И, ИЛИ, НЕ, вторая - удаляет условие, добавленное последним. Как обычно для MoneyTracker, для редактирования условия нужно сделать долгое прикосновение к соответствующей записи в списке. Добавлю выбранные мною условия (надо помнить, что в MoneyTracker база данных чувствительная к регистру, и вводить категории и контрагентов нужно точно так, как они записаны в соответствующих справочниках).
Вроде все сделал как надо, жму "Сохранить изменения". Позже можно вернуться и внести в фильтр какие-либо изменения. Окно редактирования фильтра закроется и я возвращаюсь к списку фильтров. Созданный мной фильтр добавился в список (сортировка списка - алфавитная). Итак, долгое нажатие на фильтр в списке позволяет его удалить или отредактировать, короткое нажатие его применяет. Применяю фильтр, получаю ровно то, что задумал.
Из идей на будущее - добавить возможность фильтрации по датам и функциям от дат, отдельно выводить сумму по отфильтрованным проводкам.
В качестве упражнения - фильтр, позволяющий отобрать категорию "Еда" для контрагентов "Марина" или "Ростислав".