четверг, марта 7

"местная" альтернатива killnotes.exe

С давним пор привык для "прибития" Lotus Notes использовать утилитку killnotes.exe

Но как-то наткнулся на прекрасную альтернативу внутри самого клиента - утилита NSD, которая служит для диагностики сбоев клиента.

просто запускаем её как "nsd.exe -kill" и готово - клиент прибит, библиотеки выгружены, в общем всё согласно документации:
"Runs NSD in a special mode that kills all Notes/Domino processes in the current "partition" (i.e. all processes that are accessing Notes shared memory and that are running from the same location as NSD). Output is limited to process lists (OS Process Table, and Notes Process Summary) and to status messages about the processes NSD forcefully terminated. The output log file follows the naming convention of kill_os_hostname_yyyy_mm_dd@hh_mm_ss.log and is saved to the data\IBM_TECHNICAL_SUPPORT directory."

ЗЫ: Если на рабочей станции запущен не только клиент Lotus Notes, но и сервер Lotus Domino, то сервер остаётся нетронутым.
ЗЫЫ: документация по NSD получается через "nsd.exe -help" :)

пятница, февраля 15

переход от Oracle к DB2. таблица DUAL

При переносе запросов все обращения к таблице "dual" требуется заменить на обращения к таблице "SYSIBM.SYSDUMMY1".

Например, у нас есть запрос:
SELECT mySchema.myFunction id FROM dual;

его требуется написать как
SELECT mySchema.myFunction id FROM SYSIBM.SYSDUMMY1;

Есть небольшое отступление. Если у вас логин пользователя совпадает с названием схемы, то подобное преобразование делать не обязательно. но это "грабли" в будущем :)

четверг, декабря 27

maven dependency. include scope

в документации к maven-dependency-plugin для copy-dependencies описан параметр includeScope, позволяющий указать какие зависимости копировать. но параметр принимает только одно указание scope. А что делать, если требуется указать несколько?
Всё просто - указывает несколько раз параметр includeScope.

например так:
<plugin>
 <artifactId>maven-dependency-plugin</artifactId>
 <executions>
  <execution>
   <id>copy-dependencies</id>
   <goals><goal>copy-dependencies</goal></goals>
   <configuration>
    <includeScope>system</includeScope>
    <includeScope>compile</includeScope>
   </configuration>
  </execution>
 </executions>
</plugin>

Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

суббота, декабря 22

Lotus. Динамический импорт RT-поля в открытый UI-документ

Для вставки внешних файлов в UI есть @-формула "@Command( [EditInsertFileAttachment])". Но бывает потребность вставить в UI через LotusScript вложения из RT-поля другого документа без сохранения и переоткрытия документа.

Вот для этого нам и пригодится недокументированный метод includeItem у класса NotesUiDocument.
Синтаксис метода: NotesUiDocument.includeItem(doc as NotesDocument, FieldName As String) *
* Применяется к текущему полю

Два варианта применения:
1) импорт файлов в уже открытом документе из другого документа
2) импорт файлов в новый документ без его предварительного сохранения.

Во вложенном файле приведены оба примера.
Первый пример в виде кнопки "Insert other document" на форме
Второй пример в виде кнопки "Create & Import" в представлении

файл-пример БД: скачать

UPD:
метод доступен начиная с версии 8.5. Если нужна поддержка версии ниже, то пример тут

Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

среда, сентября 26

Безопасность Firefox для локальных JS-скриптов

Периодически приходится открывать локально демо-страницы с JS-фреймворками типа Ext.JS или Dojo. При этом, кажется, что код на странице почему-то не хочет работать:


Но всё дело в параметре security.fileuri.strict_origin_policy, который запрещает подгрузку сторонних файлов на HTML-странице.
выставим значение параметра в false на странице настроек и обновим закладку с открытым локально HTML-файлом:


четверг, сентября 6

быстрая вставка угловых кавычек в Firefox

Тут у друга возник вопрос, как в Firefox можно делать быструю вставку угловых кавычек в текст.

«В лоб» решения не подходят - слишком много клавиш нажимать надо, потому пойдём обходным путём - через «сторонние» плагины. В частности, через плагин BBCodeExtra, который я уже достаточно давно использую для быстрого форматирования текста на различных сайтах.

В данном плагине есть возможность добавления собственных команд, чем мы и воспользуемся.

  1. Заходим в настройки BBCodeExtra через контекстное меню
  2. Нажимаем кнопку «Добавить» и заполняем диалоговую форму так, как показано скриншоте ниже (Название пункта на ваше усмотрение ;) )
  3. сохраняем пользовательский тег
  4. Как воспользоваться. Выбираем слово, которое требуется обрамить в кавычки, и в контекстном меню кликаем нашу кнопку.
  5. В результате, выделенный текст обрамляется угловыми кавычками
  6. PROFIT


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

вторник, августа 21

[UPDATE] Debian. установка mysql server

Решил чуток обновить пост

1) устанавливаем сервер MySQL
#apt-get install mysql-client mysql-server

2) Выполняем bash-скрипт (исходник) с правами root. При выполнении запросится пароль от root-пользователя MySQL.
Скрипт избавляет нас от ошибки "Access denied for user ‘debian-sys-maint’@'localhost" и устанавливает кодировку UTF-8 по умолчанию


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

понедельник, мая 21

Linux tips. консолька и mkdir

Вот за что я люблю линуха, так это за то, что тут можно вытворять вот такие вот штуки:

# mkdir -p domain/{tmp,vhosts/{www,fish}/{public,php}}


результатом данной команды будут созданы директории:
domain/tmp
domain/vhosts/www/public
domain/vhosts/www/php
domain/vhosts/fish/public
domain/vhosts/fish/php


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

четверг, апреля 19

Lotus Script. фичи

Обнаружился довольно интересный глюк в скрипте - метод Getdocumentbykey у NotesView "изменяет" значение передаваемого ключа, если ключ типа Variant (при строгой типизации такого не происходит).

пример:

Dim ses As New NotesSession
Dim view As NotesView
Dim doc As notesdocument
Dim num As Variant

Set view = ses.currentdatabase.Getview("XXX")
num = "50000001"
Print "1: " & num ' Выведет 50000001
num = clng(num)
Print "2: " & num ' Выведет 50000001
Set doc = view.Getdocumentbykey(num, True)
Print "3: " & num ' Выведет 134217728


Теперь немного видоизменим программный код, приведя к Long переменную:


Dim ses As New NotesSession
Dim view As NotesView
Dim doc As notesdocument
Dim num As Long

Set view = ses.currentdatabase.Getview("XXX")
num = 50000001
Print "1: " & num ' Выведет 50000001
num = clng(num)
Print "2: " & num ' Выведет 50000001
Set doc = view.Getdocumentbykey(num, True)
Print "3: " & num ' Выведет 50000001

А теперь изменим тип только в вызове метода getDocumentByKey:

Dim ses As New NotesSession
Dim view As NotesView
Dim doc As notesdocument
Dim num As Variant

Set view = ses.currentdatabase.Getview("XXX")
num = 50000001
Print "1: " & num ' Выведет 50000001
num = clng(num)
Print "2: " & num ' Выведет 50000001
Set doc = view.Getdocumentbykey(CLng(num), True)
Print "3: " & num ' Выведет 50000001

отсюда вывод: использовать тип Variant конечно удобно, но это как хождение по минному полю - путь короче, но не знаешь где рванёт ;)

ЗЫ: клиент Standard 8.5.3FP1



Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!