Показаны сообщения с ярлыком Tips (советы). Показать все сообщения
Показаны сообщения с ярлыком Tips (советы). Показать все сообщения

вторник, июля 1

"Лишние" зависимости SLF4J

При запуске тестов в лог выходит нечто подобное:

Configuring TestNG with: TestNG652Configurator
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/.../.m2/repository/org/slf4j/slf4j-log4j12/1.7.7/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/.../.m2/repository/org/slf4j/slf4j-jdk14/1.7.5/slf4j-jdk14-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/.../.m2/repository/ch/qos/logback/logback-classic/0.9.9/logback-classic-0.9.9.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See [url]http://www.slf4j.org/codes.html#multiple_bindings[/url] for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]


В этом случае, согласно документации, нужно просто найти и исключить "лишние" зависимости.

У меня ими оказались org.slf4j:slf4j-jdk14 и ch.qos.logback:logback-classic - у обеих библиотек была зависимость уровня runtime.
Удалил так: http://pastebin.com/uDeUnp7m

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

Пишем плагин для Maven

статья на хабре

Spring и обработка событий в Hibernate

Полная статья доступна на habrahabr.ru
Как-то обделена на хабре такая тема, как обработка событий при работе с сущностями с использованием Hibernate - я смог найти только один пост уже почти мохнатого года. Но то аудит, а нам нужна возможность автоматизировать работу с некоторыми атрибутами сущностей и при этом упростить процедуру работы с ними.

четверг, марта 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 рублей автору. Спасибо!

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

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

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

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

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

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


Если вам пригодилась статья, то отправьте 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 рублей автору. Спасибо!

четверг, января 5

менеджер пакетов dpkg и немного awk

Маленькая строчка, но очень полезная в "быту":

sudo dpkg --get-selections | grep %ЧТО_ИЩЕМ% | awk '{print $1}' - | sudo xargs dpkg --[purge|remove]

[purge|remove] - команда на выш выбор.

Для чего нужна? Чтобы удалить большой (более 1-го ;) ) список пакетов из системы по фильтру %ЧТО_ИЩЕМ%.

последний раз столкнулся, когда у меня zend-server не захотел устанавливаться из репозитария. да и удаляться тоже не пожелал - ругался и требовал, чтобы я выполнил "apt-get -f install", в котором он тоже только ругался на зависимости. Пришлось "прибивать" пакеты вручную через dpkg, исправлять зависимости и заново устанавливать zend-server :)


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

с CentOS на Debian. iptables (обновленное)

ранее я уже писал про использование правил iptables в Debian-based операционках. в комментариях неизвестный подсказал удобное и, пожалуй, более правильное решение - прописывание напрямую скрипта загрузки в /etc/network/interfaces.

Итак, что нам понадобится:
1) установленный пакет iptables (проверить можно через "sudo dpkg -s iptables | grep -i status")
2) ваш прежний скрипт-файл правил (у меня он называется iptables.sh)

Проверяем и, если данное правило отсутствует, то добавляем в файл /etc/network/interfaces для нужного сетевого интерфейса (например для eth0):

pre-up iptables-restore < /etc/iptables.up.rules


ЗЫ: у меня оно было прописано для интерфейса eth0 как "post-up ..." - заменил на "pre-up ..."

теперь наш скрипт iptables.sh работает как и прежде - выполняем, проверяем, сохраняем.


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

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

gnome & глюки

Иногда полезно полностью "сносить" настройки какой-либо проги. Это заметил уже давно - ещё со времён "проживания" на винде.

Вот и сейчас, долго думал, отчего у меня глюки:
1) Rhythmbox не желает понимать ленты подкастов
2) Pidgin ругается на подключение к протоколу аськи (при этом, если зайти в кеды, то прекрасно подключается)
3) ещё по мелочи всякого "хлама"

В итоге, снёс полностью каталоги .gconf(d) и все глюки "как рукой сняло" :)

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

воскресенье, января 30

SSH и шифрованный known_hosts

Какое-то время "ругался" на то, что в Ubuntu файл known_hosts по-умолчанию шифрует имена доменов - любил совмещать строчки, когда несколько доменов на одном IP, ибо было удобно (хотя и крайне редко требовалось) обновлять ключ.
А тут наткнулся на такую же "проблему" и на её решение через команду и мои "проблемы" сняло как рукой :)

В общем, что мы вокруг да около.
Для того, чтобы удалить из known_hosts устаревший ключ, выполняем команду "ssh-keygen -R host_name|IP", после чего повторно пробуем зайти на удалённый сервер.

там же, есть ссылка на интересную статью Максима Коновалова с писанием поддержки отпечатков SSH в DNS (RFC-4255).

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

Tomcat и JSESSIONID

Для того, чтобы изменить имя переменной сессии с "JSESSIONID" на, к примеру, "SID", достаточно в файле $CATALINA_HOME/bin/setenv.sh прописать следующую строчку:
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.SESSION_COOKIE_NAME=SID -Dorg.apache.catalina.SESSION_PARAMETER_NAME=sid"

ЗЫ: не забудьте перезапустить Tomcat
ЗЫЫ: в браузерах с залогиненными пользователями кука JSESSIONID не переименуется :) Просто добавится ещё одна с тем же значением

суббота, ноября 13

Debian. mysql server

статья устарела. обновленная версия тут

Сразу после установки настраиваемся на utf8 и удаляем ошибку при запуске демона:

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

2) удаляем ошибку "Access denied for user ‘debian-sys-maint’@'localhost" (решение найдено тут)
открываем файл /etc/mysql/debian.cnf и находим строчку password:
password = bla-bla-bla

в клиенте mysql выполняем команду
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION; # вставляем вместо %password% "подсмотренный" пароль.

3) устанавливаем кодировку utf8 по умолчанию
в файле /etc/mysql/my.cnf добавляем строки для каждого блока []:

[client]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = "set names utf8;"
[mysqldump]
default-character-set = utf8

4) перезапускаем сервер MySQL

5) заходим клиентом и на команду "mysql> show variables like "%character%";show variables like "%collation%";" видим нечто подобное:
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+


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

четверг, ноября 11

Debian. timezone

Для настройки временной зоны и синхронизации,
  • "apt-get install ntp ntpdate" - ставим NTP демона для синхронизации
  • "ntpdate -bs ru.pool.ntp.org" - синхронизируем часы
  • "dpkg-reconfigure tzdata" - выставляем нужную нам временную зону, например Europe/Moscow

подсмотрено тут


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

понедельник, сентября 6

Zend Studio и поддержка Ant-скриптов. Продолжение

Как выясняется, мало включить поддержку Ant, так надо ещё и JVM поменять для выполнения Ant-скриптов, чтобы не получать UnsupportedClassVersionError.

По-умолчанию Zend Studio (проверял на 7.2.1) использует JRE 1.5.0_08 и при при запуске Ant-скриптов на задачах, связанных с SSH, получаем UnsupportedClassVersionError
Решается очень просто:

1) Включается поддержка Java
1.1) Открываем диалог создания нового проекта "File > New > Other..."
1.2) В диалоге ставим галочку на "Show All Wizards", если она не стоит (у меня так её и вовсе уже почему-то нет) и жмём Next
1.3) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Java
1.4) Закрываем диалог создания проекта
2) В настройках в разделе "Java > Installed JREs" добавляем путь до нужной нам версии JRE и ставим возле неё галочку

ЗЫ: перезагружать Zend Studio не обязательно
ЗЫЫ: пробовал поменять VM для Zend Studio на 1.6, но IDE начала зависать на некоторых диалогах, да и для ant-скриптов всё равно использовала свою JRE, а не указанную через ZendStudio.ini





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

Zend Studio и поддержка Ant-скриптов

Собственно, в интернете достаточно (если покопаться) написано про то, как включить поддержку Ant в Zend Studio.

Мною найден ещё один способ - использование ant БЕЗ включения :) извращение, но имеет право на жизнь. подкатом описаны оба способа.

1-й способ: "без включения" поддержки Ant.
Особенность заключается в том, что ant-скрипты всё равно РАБОТАЮТ даже при выключенной поддержке :) и, если вам не понадобится расширять ant своими или сторонними библиотеками (такими например, как поддержка ssh), то этого вполне достаточно.

Открываем справку через "Help > Help contents" и открываем раздел "Ant view" как указано на картинке ниже. В открывшемся разделе кликаем по ссылке выделенной на картинке красной линией. вуаля - мы имеем представления, в которое можно добавлять ant-скрипты и выполнять их.
Да, чтобы представление полностью заработало (появились кнопки), потребуется перезапустить Zend Studio.



Способ рабочий, но из категории "так делать не надо" - правильнее будет включить полноценную поддержку ant-разработки, о чём я напишу во-втором способе:

2-й способ: с включением поддержки Ant (знания подчерпнуты на просторах интернета)
1) Меню "File > New > Other..."
2) Кликаем по "Show All Wizards", чтобы увидеть скрытые мастера, а в частности, раздел Java
3) Выбираем "Java Project from Existing Ant buildfile" и жмём "Next"
4) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Ant
5) Закрываем диалог создания нового проекта
6) Перезапускаем Zend Studio







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

суббота, августа 14

плюшки Windows 7: список "программы и компоненты"

В показываемом списке работает комбинация Ctrl+R, обновляющая список. удобно - не нужно закрывать и заново открывать, чтобы увидеть свежеустановленное ПО
Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

воскресенье, августа 1

показ страницы ошибки с использованием Spring MVC

При разработке под веб, на "боевых" серверах требуется прятать сообщения об ошибках (ну или хотя бы их как-то "облагораживать").
Стандартный путь - описание обрабатываемых ошибок в web.xml. например такой:
<error-page>
 <error-code>404</error-code>
 <location>/error.jsp</location>
</error-page>
<error-page>
 <exception-type>java.lang.Exception</exception-type>
 <location>/error.jsp</location>
</error-page>

А что делать, если в проекте используется Springframework и хотелось бы использовать его возможности?
Всё достаточно просто. Требуется написать контроллер, который будет обрабатывать урл например вида "/error.htm" и в web.xml вместо "/error.jsp" указать "/error.htm" - код и сообщение об ошибке по прежнему будут нам доступны в объекте request.

Зачем это нужно, спросите вы? Например это позволит автоматически сформировать сообщение администратору системы о возникшем сбое, или добавить логику для обработки возникшей ошибки.