суббота, 27 апреля 2019 г.

Boost Test Adapter не показывает в Visual Studio тесты для QT проекта - проверьте положение QTDIR в файле .vcxproj.users.

Встретился с неприятной проблемой. В QT-проекте использую Boost.Tests. На одном из компьютеров Boost Test Adapter в VS2017 наотрез отказывался показывать тесты. Оказалось, что виноват был файл ProjectName.vcxproj.user. Выглядел он так:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerEnvironment>PATH=$(QTDIR)bin%3b$(PATH)</LocalDebuggerEnvironment>
<QTDIR>C:libsQt5.12.0msvc2017</QTDIR>
</PropertyGroup>
Т.е. QTDIR объявлена после того, как используется в LocalDebuggerEnvironment. Все компилировалось и работало, а юнит-тесты видны не были. Переставил QTDIR в начало:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<QTDIR>C:libsQt5.12.0msvc2017</QTDIR>
<LocalDebuggerEnvironment>PATH=$(QTDIR)bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
и наконец-то увидел тесты в VS2017.

воскресенье, 21 апреля 2019 г.

Запуск Firebird 2.5 и Firebird 1.5 на одном сервере

Порядок запуска двух сервисов Firebird на одном сервере подробно рассмотрен в руководстве Установка InterBase и Firebird вручную. Но есть одна тонкость - как изменить имя сервиса Firebird 1.5.

воскресенье, 10 декабря 2017 г.

Удалить файл из git

Бывает, из истории git-репозитория необходимо удалить какой-нибудь файл. Чаще всего это либо файл с паролем, либо файл большого размера.

Возможность такая есть и описана в книге Pro Git. Требуется использовать filter-branch, что на практике довольно не просто.

К счастью, существует альтернатива - утилита BFG.

Пользоваться довольно просто:

; Клонируем репозиторий 
$ git clone --mirror git://example.com/my-repo.git

; Удаляем файл
$ java -jar bfg.jar --delete-files FILE_NAME_TO_REMOVE my-repo.git

; Заходим в репозиторий и проводим в нем чистку
$ cd my-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

; Заливаем измененеия
$ git push
В случае, если возникает ошибка
Protected commits
-----------------

These are your protected commits, and so their contents will NOT be altered:

 * commit ******* (protected by 'HEAD')
помогает опция --no-blob-protection.

суббота, 17 октября 2015 г.

Подключение Nexus 5 к PC после обновления до Android 6

Мой Nexus 5 недавно обновился до Android 6. Неожиданно обнаружил, что при подключении Nexus к компьютеру проводник перестал отображать список файлов на девайсе.. Проверил настройки. В настройках Developers Options -> Select USB Configuration выбран режим MTP (Media Transfer Protocol). Ну и что за дела?

Ответ нашелся на форуме Nexus. Оказывается, при подключении Nexus к компьютеру на девайсе отображалось уведомление USB for charging. Touch for more options. Открыл его, вывались меню Use USB for. Выбрал Transfer files (MTP) и все заработало.

Виновата, конечно, моя невнимательность. Ведь все на экране написано :) И все же: почему в настройках указан один режим, а по факту девайс подключился в другом? Баг это или "фича"?

Update Похоже, все же "фича". Опцию USB for charging. Touch for more options приходиться менять каждый раз при подключении девайса к компьютеру. И, кстати, появляется она на экране залоканного девайса ни сразу, а с небольшой задержкой.

среда, 14 октября 2015 г.

Ссылка на рисунки и таблицы в Microsoft Word - показывать только номер

Недавно вышел новый Microsoft Office 2016 и в нем по-прежнему существует проблема создания перекрестных ссылок для рисунков и таблиц - интерфейс не дает возможность создать ссылку в виде номера. Максимум чего можно добиться - выбрать при создании ссылки "Постоянная часть и номер" и получить ссылку в виде "Рисунок 1". Возникает вопрос, как выкинуть слово "Рисунок" и получить просто "1"?

В интернете полно статей на эту тему. Обычно предлагают два варианта: пометить "Рисунок" как скрытый текст или воспользоваться закладками. Однако существует еще один способ, на мой взгляд, более быстрый и удобный.

Щелкаем по вставленной перекрестной ссылке правой клавишей мыши и выбираем команду Коды/значения полей. На месте перекрестной ссылки в документе появится ее код, например вот такой {REF _Ref432583060 \h} . Дописываем к коду поля вот такой постфикс

\# "0"

Т.е. превращаем код ссылки в {REF _Ref432583060 \h \# "0"}

Еще раз даем команду Коды/значения полей - перекрестная ссылка на рисунок отображается в виде "1". То что нужно.

среда, 2 апреля 2014 г.

Отключение junit.framework.Assert в релизе Android-приложения

Как я уже писал, стандартные директивы assert по умолчанию отключены на Android-девайсах. Их необходимо включать (например командой adb shell setprop debug.assert 1, после чего assert будет работать до перезагрузки девайса). Альтернатива - junit.framework.Assert. И по функционалу побогаче, и работает на девайсах сразу, без дополнительных включений. При Null-анализе компилятор eclipse учитывает junit.framework.Assert точно так же, как обычный assert. Вроде бы, одни плюсы. Но: в релизе ассерты следует отключить. И вот тут требуются дополнительные телодвижения.

воскресенье, 2 февраля 2014 г.

REST под Android. Часть 3: библиотеки Square

В процессе работы над первой и второй частью статьи, я неоднократно натыкался на упоминание разнообразных библиотек компании Square, которые народ активно использует при реализации REST-клиентов. Приглядимся к этим библиотекам поближе.

пятница, 24 января 2014 г.

REST под Android. Часть 2: разрабатываем API

Первая часть статьи была посвящена вопросу реализации клиентского REST-приложения под Android. Корректная реализация требует использования одного из паттернов, предложенных Virgil Dobjanschi. Существует ряд подходящих библиотек, способных облегчить эту задачу. Наиболее интересной из них мне показалась RoboSpice.

Прежде чем переходить к разработке тестового проекта на RoboSpice, необходимо определиться с API для тестового проекта. Разумеется, можно взять одно из готовых API - благо их сейчас сотни. Однако гораздо интереснее написать свое, тем более, что это нетривиальный процесс. Рассмотрим, как пишутся REST API, какие инструменты для этого существуют, и попробуем реализовать простейшее тестовое API.

пятница, 17 января 2014 г.

REST под Android. Часть 1: паттерны Virgil Dobjanschi

В одном из проектов появилась необходимость написать REST-приложение под Android. Каким путем пойти, какие Android-особенности учесть, на какие библиотеки опереться в работе? Пришлось провести исследование. Результатами хочу поделиться.

суббота, 11 января 2014 г.

Сдача налоговой отчетности ИП (УСН 6%) за 2013 год

Год закончился, до 30 апреля нужно подать декларацию по ИП. Как всегда, в этом году в отчетности есть кое-какие изменения:
  • ОКАТО заменили на ОКТМО,
  • отменили необходимость подачи "сведений о среднесписочной численности работников" для ИП-шников, у которых в течении года не было работников.
В остальном, похоже, все как в прошлые годы.
P.s. Не забудьте скачать свежую версию программы Налогоплательщик ЮЛ.

пятница, 3 января 2014 г.

Контрактное программирование под Android

О пользе и преимуществах методики контрактного программирования (Design by Contracts, DBC) написано много. Вот несколько хороших статей: Основная идея методики: улучшить надежность программного обеспечения за счет определения контрактов между взаимодействующими программными компонентами. Для метода задается контракт, который описывает:
  • пред-условия, которым должен соответствовать вызывающий код;
  • пост-условия, которые гарантируются методом.
Некоторые преимущества, которые обеспечивает DBC:
  • Повышение надежности программы за счет систематической и гарантированной проверки входных данных.
  • Исключение лишних проверок в коде. Корректность данных проверяется в методе, а не в вызывающем коде.
  • Автоматическое документирование кода, создание спецификации API программного модуля.
  • Косвенно: повышение эффективности статического анализа кода.
Вариантов реализации DBC для Java достаточно много. Обзорные статьи на эту тему: Однако, Java - это Java, а Android - это Android. Как всегда, под Android есть своя специфика. В данной статье я хочу рассмотреть практические подходы для реализации технологии DBC при программировании на Android.

четверг, 29 августа 2013 г.

Релиз Named Folders 4.x для FAR 3 (Beta)

Портировал плагин Named Folders под FAR 3. Версионность у плагина получилась такой:
  • 2.x - FAR 1.X
  • 3.x - FAR 2.X
  • 4.x - FAR 3.x

Изменений в код пришлось внести много - API сильно поменялось. Ключевое изменение новой версии - все шоткаты теперь хранятся в sqlite, а не в реестре. В остальном функциональность осталась практически прежней.

Сообщения о багах приветствуются.

четверг, 20 декабря 2012 г.

Автоинкремент версии в QT / С++ приложениях

Задачу инкремента номера версии при сборке релиза QT-шного проекта, естественно, хочется автоматизировать. Но есть несколько тонкостей.

пятница, 23 ноября 2012 г.

Получение доходов с Google Play на расчетный счет ИП

В октябре 2012 вступили в силу новые правила получения платежей от продаж на Google Play и, одновременно, новая инструкция ЦБ РФ О порядке предоставления документов, связанных с проведением валютных операций (Инструкция Банка России от 04.06.2012 № 138-И - PDF). В результате, платежи с Google Checkout теперь можно получать напрямую на расчетный счет индивидуального предпринимателя. Это позволяет избавиться от работы с AdSense и связанных с ней морем вопросов. Многие разработчики уже опробовали новую схему. Попробовал и я - на днях пришел первый платеж. Хочу поделиться подробностями организации работы с банком.

вторник, 13 ноября 2012 г.

Ошибка "unexpected at this time" при установке boost 1.52

Взялся устанавливать свежий boost 1.52. При попытке собрать bjam и b2 командой "...boost_1_52_0\tools\build\v2\engine\build.bat" вылетела ошибка
C:\>D:\libs\boost_1_52_0\tools\build\v2\engine\build.bat
\Git\bin";"C:\utils\PuTTY";C:\Program Files (x86)\MiKTeX 2.9\miktex\
bin\;C:\Program Files (x86)\Git\cmd;C:\Program Files\TortoiseSVN\bin" was unexpected at this time.
Что за "was unexpected at this time"?

Решение нашлось здесь. Проблема была в том, что некоторые пути, перечисленные в переменной среды %PATH%, содержали кавычки. При подстановке таких путей в "vcvars32.bat" местами возникало двоековычье :) и батник вылетал. Убрал кавычки во всех путях в %PATH% - boost нормально установился.

Вызов функций Android из Unity3d

Unity3D - мощная система разработки 3D приложений, - поддерживает Android. Документация, к сожалению, очень скудная, да и сам процесс разработки - не сахар... Тем не менее, возможность создать Android-приложение есть.

В целом процесс разработки выглядит так. Вы создаете Android-проект, экспортируете его в jar-файл. Далее, помещаете этот jar файл в директорию проекта Unity: Assets\Plugins\Android\xxx.jar. В эту же директорию кладете AndroidManifest.xml, jar-файлы сторонних библиотек, которые задействованы в вашем проекте и ресурсы (папка res с той же структурой, что в обычном Android-проекте).

Следующий шаг - вызов функций, реализованных на стороне Android, из Unity. Вот на этом вопросе я и хочу остановиться поподробнее, т.к. здесь не все тривиально и есть подводные камни.

воскресенье, 12 августа 2012 г.

Квест: как под Android выдрать кадр из видеофайла средствами FFMpeg и передать его на сторону Java.

Программирование под Android очень часто напоминает настоящий квест. Шаг влево, шаг вправо - и ты попадаешь на минное поле, полное багов, особенностей реализации, девайсо-зависимых проблем и т.п. И так происходит каждый раз, как только начинаешь реализовывать что-нибудь более менее нетривиальное. Вот свежий пример. Потребовалось мне извлекать кадры из видеофайла и показывать их на экране. Казалось бы - что может быть проще?

среда, 14 марта 2012 г.

Идентификаторы Android-контакта: ContactID и LookupKey. Нюансы и баги.

Согласно документации, контакт в Android характеризуется двумя идентификаторами: contactId и lookupKey. Предположим, мы создаем приложение, работающее с определенным контактом. Пример - мое приложение Animated Widget Contact Launcher, которое позволяет создавать для контактов виджеты быстрого доступа. Какой идентификатор контакта нужно хранить в настройках такого виджета - contactId или lookupKey? Или оба? Как правильно создавать ссылку на контакт? Практика показала, что вопрос не тривиален.

среда, 1 февраля 2012 г.

Тестирование Android приложений

Тестирование - тема очень многообразная. Разновидностей тестов масса, методик тестирования тоже, количество разнообразных инструментов просто огромно. Начинающему разобраться не просто. Но за что бороться есть, поскольку грамотная стратегия тестирования существенно улучшает качество приложения.

Данная статья - это каталогизированный набор ссылок по теме тестирования Android приложений, с краткими аннотациями. Я создал его для того, чтобы самому было удобнее разбираться во всем этом материале и выбирать оптимальную стратегию тестирования собственных Android приложений. Надеюсь, этот набор ссылок пригодится и вам.

воскресенье, 29 января 2012 г.

Список языков с переводом названий (ISO 639-1).

Занимаюсь локализацией своего Android приложения Animated Widget Contact. Потребовалось найти список языков, поддерживаемых Android, с переводом названий. Т.е. в виде Ru-Russian-Русский, da-Danish-Dansk и т.д. Как ни странно, готовый список найти не удалось. Поэтому составил такой список самостоятельно, взяв за основу следующие источники: 1, 2, 3, 4. В список включил только языки имеющие двухбуквенный код по стандарту ISO 639-1, т.к. именно они актуальны для Android приложений. Вот что в итоге получилось.