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

Сообщения

Перезапуск 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# подошли эти же стрелы. так что использ...

XPages. Диалог с пользователем. Собственные уведомления

Итогом полученных ограничений, которые получились в итоге  стало появление "собственной" системы сообщений. Итак, по-порядку: 1. FlashScope Сегодняшняя работа будет очень тесна связана в возможностью показать сообщение после редиректа страницы. Поэтому с механизма, который позволит это сделать и начнем. Метод, позволяющий отображать сообщения (речь идет о FacesMessage) после смены страницы описан тут . Но будем использовать, в некотором смысле, более универсальный механизм, который позволит передавать параметры между запросами и не занимать sessionScope или applicationScope - это  FlashScope . Я использую немного не эту реализацию, а реализацию от  Jesse Gallagher . Еще нужно в faces-config.xml прописать: <managed-bean>   <managed-bean-name>flashScope</managed-bean-name>   <managed-bean-class>java.util.HashMap</managed-bean-class>   <managed-bean-scope>session</managed-bean-scope> </mana...

XPages. Диалог с пользователем. Уведомления с помощью FacesMassage. Часть 2

В прошлой части я дал некоторую теоретическую подоснову о том, что такое FacesMessage в JSF и показал, как можно добавить и отобразить сообщение для пользователя, используя FacesContext.addMessage и компонент xp:messages. Сегодня продолжим: поработаем над отображением сообщений.

XPages. Применяем Bootstrap

Ранее я уже описывал некоторые аспекты, касательно добавления и применения Bootstrap в отношении xPages. Речь идет о Extension Library и Bootstrap  и Bootstrap для XPages в действии . Хотел бы еще раз вернутся к теме применения Bootstrap в проектах и уточнить кое-какие моменты. Как я писал, начиная с ExtLib 9.0.1 (build v00_10.20141105-0922) , уже непосредственно в состав ExtLib включена поддержка Bootstrap для xPages. Это значит, что никаких дополнительных плагинов (как я ошибочно указал тут , в настройках) ставить не нужно. Достаточно несколько простых шагов, чтобы сменить тему: 1. В настройках Xsp Properties , на вкладке General , Application Theme выбрать из доступных Bootstrap3.2.0 или Bootstrap3.2.0_flat . 2. Там же на закладке Page Generation выставить HTML doctype: HTML5 и галку Force content type to application/xhtml+xml 3. Единственная библиотека, которая должна (достаточно для работы bootstrap) быть подключена - com.ibm.xsp.extlib.library . Я проде...

XPages. Диалог с пользователем. Уведомления с помощью FacesMassage. Часть 1

Для улучшения восприятия пользователем приложения, с которым он общается было бы не плохо взаимодействовать с ним через отправку ему уведомлений (например, "Документ успешно сохранен". В цикле XPages. Диалог с пользователем буду рассматривать различные варианты отправки и отображения сообщений/уведомлений пользователю, двигаясь последовательно от простейших и не самых симпатичных до вполне радующих глаз. В определенный момент планирую перейти от OneUI темы (как в скриншотах, так и в демо-приложении) к Bootstrap, вероятно, описав нюансы подключения и перехода отдельным постом. В конце будет получен Java-класс (Bean), отвечающий за отправку сообщений и 1-2 Custom Control для их корректных отображений.

Синхронизация фоток пользователей в Учетные записи Active Directory

Занимательные взаимоотношения получились с задачей обновления фотографий пользователей в учетные записи Active Directory. Все оказалось несколько "необычнее", чем смотрелось на первый взгляд.

Web-сервисы - наше все.

Обнаружил и изучил несколько неплохих статьей из цикла Practical Web services in IBM Lotus Domino 7 (Практическое использование Web-сервисов в IBM Lotus Domino 7), последовательно раскрывающих суть Web-сервисов и их создание в среде Notes/Domino. 1.  What are Web services and why are they important?  Статья доступна на русском . 2.  Writing and testing simple Web services . Статья  доступна на русском . 3.  Writing complex Web services . Статья доступна на русском .

Widget Container. Базовые компоненты Extension Library

На повестке дня довольно простой, но очень симпатичный компонент: Widget Container 1.  Application Layout 2.  Navigator 3.  Data View 4.  Form Table (+Form Layout Column, Form Layout Row) 5.  Dialog (+ Dialog Content, Dialog Button Bar) 6. Tooltip Dialog --- Дополнительно --- 7. Widget Container 8. Bread Crumbs

Bootstrap для XPages в действии

Не стал откладывать возможность опробовать Bootstrap для XPages в долгий ящик и применил его для своего приложения " Личный баланс ". Итог меня очень вдохновил: приложение отлично изменяет размер и расположение своих элементов в зависимости от разрешения устройства. Один дизайн и код для всего! :) Кое-какие моменты в отображении формы (полей) мне не нравятся, но т.к. решение из коробки, то в целом более чем отлично! Вот так теперь выглядит приложение при коннекте с телефона: Основной вид Занесение данных Немного о настройках: 1. Используется тема bootstrapv3.2.0, поставляемая в составе последней сборки ExtLib (в доступных есть так же версия bootstrapv2.3.1, при установленном плагине Bootstrap4XPages) 2. Компонент Application Layout построен по конфигурации для Boostrap. Об этой  новой возможности упоминал в этом посте. 3. Для корректной работы всех элементов, на закладке Page Generation (в настройках приложения XspProperties), в разделе HTML Generatio...

Extension Library и Bootstrap

На просторах OpenNTF.org развивается проект Bootstrap4XPages. Bootstrap - фреймворк для Web-приложений. Суть проекта - дать человеческую возможность разработчикам на xPages пользоваться благами Bootstrap. В последнем релизе ExtLib 9.0.1 (build v00_10.20141105-0922) была включена поддержка Bootstarp (версия темы 3.2.0) и jQuery (версия темы 2.1.1) в виде нового плагина: XPages Responsive Bootstrap (XRB). Плагин, в том числе, дает возможность использовать компонент Application Layout с новой конфигурацией: Bootstrap Responsive Application Configuration. Данная конфигурация обладает дополнительными возможностями, описанными в Readme к ExtLib. Вот так вот меняется диалог настройки компонента при его перетаскивании с палитры: Одно из исходных преимуществ Bootstrap - автоматическое изменение своего отображения в зависимости от разрешения дисплея, т.е. ничего не меняется при использовании как мобильных устройствах, так и на больших устройствах. Использование Bootstarp для XPag...

Не делайте папку xsp в каталоге Data на сервере Domino

И з названия поста основная мысль, на мой взгляд, более чем понятно. Не надо делать папку xsp в каталоге Data на сервере. Приложения, лежащие там (и во вложенных каталогах) будут не доступны через Web. Почему? - Не знаю. Они отлично открываются через клиент, но по http не видны, как будто базы нет там. Вероятно, это как-то связано там, что в основном каталоге сервера есть папка xsp, но утверждать не буду.

Какой инструментарий должен быть в арсенале у XPages-разработчика

D avid Leedy в своем блоге NotesIn9 начал цикл постов о разработке Web-приложений под IBM Domino на XPages, что называется, с основ. Особенностью его блога является то, что это в основном-видео блог. 2-ой пост из этого цикла рассказывает о том, какие плагины он будет использовать в дальнейшем. Пост полезен тем, что все самое необходимое собрано в одном месте и Девид показывает, как происходит установка плагинов на сервер и клиент. С пособ установки плагинов перекликается с тем, что описывал я в посте по установке Extension Library с одной интересной особенностью, что каждый новый плагин он добавляет не в одну и ту же базу UpdateSite, а под каждый организует свою базу. В общем к просмотру этот пост и последующие рекомендую!

IBM Notes. Личный баланс

Х очу поделиться приложением, которое я делал и делаю по-сути для себя. Одна из первых идей для личного удобства, которую я начал делать, когда еще только познакомился с IBM Lotus Notes/Domino. Это приложение пережило несколько итераций и было одно из первых, на которых я опробовал попытки создания движков для приложений. Это приложение не самое сложное, которое я когда-либо делал. Это приложение не обладает невообразимыми функциональными возможностями. Но. Это приложение, которым я горжусь. Это приложение, позволяющее вести личный баланс...