К основному контенту

Сообщения

Use @SpringBootTest for validator's unit test and be fast enough

This a continuation of the post: https://live-scripts.blogspot.com/2020/02/unit-testing-object-validation-with-di-in-validator.html#more . Last time we talked about testing a validator, which has a dependency. Using pure @SpringBootTest turned out to be too slow. So I showed a "trick" to override the validator's factory in order to inject the dependant object. This reduced test run time. I promised to show a way to use @SpringBootTest , autowiring, and still be quick enough.

Unit-testing object validation when validator has DI

Summary Unit test object validation when validator(s) has a dependency. For instance, we have some custom field and cross-field validators. Want to test their combination. Additionally some of validators have dependencies, injected through constructor or setters. You're not using property injection, right? Shortcut If you are just searching for an answer, here's the fast way: Declare CustomConstraintValidatorFactory that implements javax.validation.ConstraintValidatorFactory Override getInstance method and on facing your constraint validator class instantiate it Otherwise delegate validator construction to org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl Build validator factory and provide it your CustomConstraintValidatorFactory Build validator, using that factory... Go to demo project on GitHub for details:  https://github.com/MrArtemAA/blog-demos/blob/master/test-validator-with-injection/src/test/java/ru/artemaa/...

Модульное тестирование для LotusScript, статья на Хабре и прочее

Ох, давно не брал я в руки шашку! По крайней мере в блоге. Пора немного наверстать упущенное. Модульное тестирование, DUnit Несколько раз мне приходила в голову мысль, что было бы не плохо иметь покрытие модульными (unit) тестами систем под IBM Notes/Domino, написанных на LotusScript. Код некоторых становится достаточно сложным, а количество вариантов прохождения неподъемным для прогона после каждого изменения. Т.к. готового инструмента вообще говоря нет, пришлось его создать самому. Так появился DUnit . Это фреймворк для написания и выполнения unit тестов для кода на языке LotusScript. Сам он тоже написан на нем же. Фреймворк свободный, с открытым кодом. Доступен на GitHub . Там же подробная документация о том, как писать и запускать тесты. Проект был так же размещен на OpenNTF.org Статья на Хабре Написание DUnit стало для меня некоторым вызовом. Нет, не в плане кода, а в плане подхода к реализации. Я изначально планировал реализовать как отдельный самостоятельный продук...

XPages. Как сделать тур (Feature Tour) по приложению

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

OpenNTF Domino API (ODA). Тест производительности

Сто лет назад анонсированный тест производительности ODA. Обзорно что такое ODA, как ее использовать, какие возможности и преимущества можно почерпнуть из презентации . Основное. на чем я бы хотел остановиться, это обращение с View (слайды 25, 26), а именно - не только удобства написания кода, но сравнение производительности разных подходов к обходу view.

Итоги второго лучного сезона

Лук Стреляя из Samik Polaris думал о том, куда же двигаться дальше в плане снаряжения. Есть проблема еще в том, что я левша и попробовать какой-то лук у другого стрелка является несколько проблематичным. В магизине потягал те же Hoyt - не понравилось. На одном из летних 3D турниров увидел лук компании Border - Black Douglas. Попробовав, понял что хочу! Но...вот незадача - никто не возит, да и цена кусается. Прокручивая как-то форум, хорошо известный лучникам - Лукомания , заглянул в раздел Витрина мастров, а именно к Евгению Ревину (на форуме Ksavr). Моим первым удивлением было - не сколько одна из его моделей похожа на тот самый Border. Списались, сказал, что и правда похож, подсказал, где можно посмотреть его лук, оказалось у знакомых - в " 10 ярдах ". Лук понравился, заказал. Очередь не маленькая - 3 месяца. Получил лук в декабре. Что сказать - лук сразу притягивает взгляд своим внешним видом: красивое исполнение, большая рекурсия. Лук скоростной - гораздо быстр...

FAQ. Domino Designer. Поиск строки с ошибкой

Думаю, все, кто работает с Eclipse-версией редактора LotusScript, который появился с 8-ой версии сталкивался с проблемой, что номер строки в сообщении об ошибке ну никак не совпадает с тем, что есть на самом деле. Речь идет о коде, который написан в разделе Declarations таких элементов, как скриптовые библиотеки, агенты, Database Script. Т.е. по сути - о классах. В версиях 7 и ниже была проблема найти метод или класс, а теперь (когда дизайнер научился отображать классы и методы в дереве элементов) проблема найти строку с ошибкой :) Полагаю, так же не секрет формула вывода нужной строки: берем количество строк в Options, складываем с тем, что выдала ошибка и получаем строку, которую нужно искать перейдя в просмотр кода всей библиотеке. Та-да-м! Недавно, зачем-то рылся в пунктах меню и наткнулся на...кнопку спасения! - Go to Erl Line.... До чего же было мое удивление. Давно ее добавили, я много проспал? :) В общем, чтобы ей воспользоваться, нужно перейти в Declarations (просто ...

Oracle Lib - библиотека для работы с Oracle для LotusScript

LS_Oracle_Lib - свободно распространяемая библиотека на языке LotusScript с открытым исходным кодом для работы с базами данных Oracle. Библиотека поставляется "как есть". Вы можете использовать ее на свой страх и риск. Автор не несет ответственности за последствия использования библиотеки. При использовании библиотеки автор не ограничивает изменение кода библиотеки под свои нужды. Тем не менее, рекомендуется переопределение классов и методов в соответствии с принципами ООП. Библиотека использует OLE-объект OracleInProcServer.XOraSession для работы с Oracle. Это объект из OLE Objects For Oracle (OO4O). Используется родные Oracle OLE-объекты, поскольку дают больше возможностей, чем стандартные LC классы LotusScript. Например, стандартные классы не дают возможности вернуть результат выполнения хранимой процедуры. Механизм несколько устаревший, поскольку на серверах х64 dll регистрируется не корректно и объект OracleInProcServer.XOraSession не удается создать. В дальнейшем пл...

LS_ActiveDirectory_Lib. Документация и примеры использования. Часть 2. ADObject

Продолжении документации по открытой библиотеке LS_ActiveDirectory_Lib . Первая часть доступна здесь . Часть 3

LS_ActiveDirectory_Lib. Документация и примеры использования. Часть 1. ADConnector

LS_ActiveDirectory_Lib - свободно распространяемая библиотека на языке LotusScript с открытым исходным кодом. Библиотека поставляется "как есть". Вы можете использовать ее на свой страх и риск. Автор не несет ответственности за последствия использования библиотеки. При использовании библиотеки автор не ограничивает изменение кода библиотеки под свои нужды. Тем не менее, рекомендуется переопределение классов и методов в соответствии с принципами ООП. Библиотека  LS_ActiveDirectory_Lib предоставляет интерфейс взаимодействия с Microsoft Active Directory (MS AD) для IBM Notes/Domino. Взаимодействия происходит по протоколу LDAP. Для подключения используется OLE-объект ADODB.Connection. Часть 2 и Часть 3 документации.

Перезапуск Active Directory Lib

Выпустил новую версию Active Directory Lib - библиотеку для Notes/Domino на LotusScript для работы с Active Directory. Кардинально отличается от предыдущего публичного варианта. Можно сказать это полный перезапуск библиотеки. Распространять будут через BitBucket. Ссылка:  https://bitbucket.org/livescripts/active-directory/overview В репозитории будет лежать DXL, который можно импортировать, и просто текстовое представление в формате *.lss Оставляйте свои комментарии, bug-репорты, пожелания здесь или на BitBucket. Можете так же присоединиться к разработке.

Опыт общения с АСВ

Таки пришлось воспользоваться услугами АСВ в связи с закрытием одного банка. Сумма была не под потолок, потому решил забрать наликом. На все ушло минут 15 с момента входа в отделение и выхода из кассы с нужной суммой. И это при том, что выплаты производил Сбербанк. Справедливости ради, надо сказать, что очереди не было. При этом мне предложили открыть вклад и получив ответ "Не хочу открывать просто потому что не хочу", кажется, обиделись :) Выплаты были полностью, с учетом набежавших процентов по вкладу вплоть до отзыва у банка лицензии.

Детская математика. Задачке все возрасты покорны

Задачек подобной этой - множество, так случилось, что мне прислали именно эту. Взята из учебника для 6-го класса: Мне теперь вдвое больше лет, чем было тогда, когда мой брат был в моем возрасте. Когда мне будет столько лет, сколь теперь брату, то нам вместе будет 98 лет. Сколько лет каждому? Задачка трудна только тем, что несколько путает наличие сложных взаимосвязей в условии. Но это не беда. Начнем аккуратно анализировать условия. Итак, мы понимаем, что речь идет о том, что было раньше (момент времени "Тогда"), о том, что есть сейчас и о том, что будет. Запишем возраста в каждый временной промежуток и свяжем их между собой на основании условий. 1. Тогда (в прошлом) Пусть мне было: m лет, брату было n лет. 2. Теперь (в настоящем) Мне в 2 раза больше лет, чем в момент времени "тогда". Это мы берем из условия "Мне теперь вдвое больше лет, чем было тогда", а значит мне 2*m лет. Сколько брату? Очевидно, что прошло с момента времени ...

Детская математика. Волшебные преобразования

Недавно на просторах соц. сетей увидел вот такую забавную картинку: Понятно, что никакой магии тут нет, поэтому давайте разберемся. Возраст не имеет значения Ну действительно, можем взять любой возраст (любое двузначное число) и получим после указанных преобразований предполагаемый результат. Это значит, что нужно обратить внимание на сами манипуляции. Они простые - умножить исходной число сначала на одно, затем на другое. Как известно, a * b * c = a * (b * c), вычислим b * c и посмотрим на него: 7 * 1443 = 10101. Тут можно было бы и закончить, но доведем до конца, чтобы стало совсем очевидно. Столбики Умножим, скажем 39 на 10101, но не при помощи калькулятора, а столбиком, который даст на визуальное понимание происходящего:    10101 х     39 --------    90909 + 303030 --------   393939 При умножении первой цифры (9) на 1 - получаем себя же, а при умножении на 0 - 0. Умножая 2ую цифру получаем аналогичный резул...

XPages. Диалог с пользователем. dGrowl уведомления. Часть 2

В первой части , посвященной dGrowl сообщениям, рассмотрели как подключать и вызвать dGrowl-уведомления из клиентского скрипта. Сегодня рассмотрим, как это сделать со стороны сервера, например из Java-кода.

XPages. Диалог с пользователем. dGrowl уведомления. Часть 1

Продолжаю тему диалога с пользователем. И снова уведомления. Ведь правда хочется, чтобы приложение реагировал на действия пользователя красивыми всплывающими уведомлениями? Почему бы и нет! Интересно? Тогда поехали!

Замена текста в NotesRichTextItem и сохранение стиля

Задача: заменить текст в RichTextItem. Например, есть какой-то шаблон с тегами, в котором динамически происходит подстановка значений. Поиск и замену всех тегов указанного значения можно выполнить вот в таком цикле: Dim rtRange As NotesRichTextRange Dim rtNav As NotesRichTextNavigator Set rtRange = rtItem.Createrange() Set rtNav = rtItem.Createnavigator() While rtNav.Findfirststring(TAGKEY) //Замена значения Set rtRange = rtItem.Createrange() Set rtNav = rtItem.Createnavigator() Wend , где rtItem - переданный NotesRichTextItem. Саму замену можно произвести вот так: Call rtRange.Setbegin(rtNav) Call rtRange.Setend(rtNav) Call rtRange.Remove() Call rtItem.Begininsert(rtNav) Call rtItem.Appendtext(VALUE) //Добавляем текстовое значение. Call rtItem.Endinsert() НО . В таком случае при выполнении rtRange.Remove() мы теряем стилевую информацию и вставка происходит со значениями по-умолчанию. Перенос rtRange.Remove() не помогает. Нужно вместе с этим сохранить стиль....

Записки начинающего лучника. Краткие итоги первого сезона

1. Лук и стрелы Пока что пользуюсь луком (рукоять), который купил еще в самом начале - SF Optimo+ . Сменил на ней 2 пары плечей, сейчас на постоянной основе использую 3и. 1 и 2 пары были родные от SF на 26# и 34#. Нынешние плечи на 40# от лука-близнеца -  Samik Polaris . Что могу сказать? - по мне  так отличный лук для начала. Неприхотлив, прост, достаточно качественен. Тем более я стреляю интуитивно и обвеса на нем нет. Сейчас уже хочется чего-то по-интереснее, поэтому нахожусь в поиске. Начинал стрелять самыми дешевым дубовым карбоном. На 26# хватало. Как перешел на более сильные плечи, сменил стрелы на алюминий: Easton Jazz 1916 . Стрелы я немного апгрейдил под свой стиль стрельбы. Немного писал об этом тут . На самом деле через некоторое время я пошел еще дальше в этом плане и сменил 3 пера на 4, взяв перья несколько по-меньше. Все хотел, но как-то не собрался описать свой опыт. Может чуть позже. При смене плечей на 40# подошли эти же стрелы. так что использ...