Небольшая памятка для себя. Понадобилось воспользоваться докером в Windows 10. При этом – уже установлена Ubuntu внутри WSL2. То есть – ставить сверху ещё и графический Docker Desktop, поднимающий свои контейнеры в отдельных виртуалках WSL, особой необходимости нет. Управлять контейнерами можно прямо из Idea.
Небольшое неудобство возникло с тем, что Docker плагин в idea (под Win) поддерживает Docker for Windows, но не умеет напрямую работать с докером внутри WSL. Вариантов несколько, среди них – подключение через tcp socket или через ssh.
Против tcp socket возникли два аргумента – сложнее настроить (чтобы просто пара настроек – и заработало – такого не произошло, пришлось повозиться); кроме того – руководство Docker не рекомендует пользоваться им из-за наличия потенциальной уязвимости.
Остановился на ssh – это проще, и в целом удовлетворяет моим потребностям.
Читать далее Idea – подключение к Docker в Windows WSL2
Архив рубрики: Кодинг
Hybris: поиск Solr по составному полю
Понадобилось как-то в SAP Hybris настроить поиск по составному полю (состоящему из нескольких атрибутов продукта). Так, чтобы при запросе вида “желтый ботинок” в листинге товаров сначала выдавались не просто товары желтого цвета, а именно желтые ботинки (а затем – остальные ботинки). Решить это регулировкой коэффициентов усиления поиска по отдельным свойствам (boost) не удалось, пришлось городить огород с созданием и индексацией составного поля.
Модель товара ProductModel
Итак, в предлагаемом примере товар (Product) имеет два атрибута (помимо прочих), по которым надо искать в связке:
- Name – название товара
- Color – его цвет
Ограничение на минимальную цену в Hybris
Понадобилось добавить ограничение цены для товара в SAP Commerce (Hybris) – десятичная цена должна быть больше или равна нулю.
В принципе – это не сложно сделать через Backoffice (Система - Проверка - Ограничения
), но тогда, при переиницаиализации платформы, внесённые изменения будут удалены. Поэтому – лучше создать файл impex, который автоматически накатится при обновлении или инициализации Hybris.
Чтобы не забыть – сохраню себе на память содержимое такого файла. Проверить работоспособность можно вручную – в HAC (Console - ImpEx Import
), после чего надо перезагрузить механизм ограничений в Backoffice.
Что даёт это ограничение – при попытке задать товару нулевую или отрицательную цену – будет выскакивать соответствующее сообщение об ошибке (содержимое message[lang=en]
или message[lang=ru]
, в зависимости от текущей локали).
INSERT_UPDATE DecimalMinConstraint;id[unique=true];severity(code,itemtype(code));active;annotation;descriptor(enclosingType(code),qualifier);message[lang=en];message[lang=ru];value;inclusive
;PriceMustBeGreaterThanZero;ERROR:Severity;true;javax.validation.constraints.DecimalMin;PriceRow:price;Price must be greater than zero;Цена должна быть больше нуля;0,00000000;false
Добавление Inspections Replace Template в idea
В IntelliJ IDEA существует довольно удобный механизм для автоматической проверки (при необходимости – и преобразования) кода, под название Code inspections. Сложилось так, что мне понадобилось добавить к нему собственное поведение, служащее для замены способа преобразования непустого Optional в его значение внутри стрима (из стиля Java 8 в стиль Java 9+).
Не то, чтобы добавление пользовательских инспекций было трудным делом, но для памяти и в качестве небольшого примера решил описать этот процесс чуть подробней.
Bshellz shell autorenew – IRC-perl-скрипт для обновления аккаунта в Bshellz
Как-то я писал про бесплатный linux shell от провайдера Bshellz в заметке Бесплатный Linux-shell с Tmux на борту. Там же был приведён способ автоматического продления аккаунта – путём отправки (по расписанию) служебного сообщения боту Beschbot с помощью имеющегося на самом хостинге IRC-клиента irssi. Время показало, что способ, как и следовало ожидать, не лишён недостатков. А именно – периодически сервер Bshellz перезагружается, после чего настройка расписания в irssi слетает. Также – несколько раз наблюдались проблемы с подключением клиента к сети Freenode IRC. В результате возникло решение зарезервировать автообновление аккаунта в Bshellz путём использования дополнительного внешнего скрипта, также запускающегося по расписанию (раз в день в произвольное время, на домашней машине).
Читать далее Bshellz shell autorenew – IRC-perl-скрипт для обновления аккаунта в Bshellz
Массовое добавление и удаление друзей в LiveJournal через XML-RPC
Так как пользоваться консолью ЖЖ для добавления или удаления друзей стало невозможно (эти команды отключили) – сделал небольшой скрипт lj-edit-friends, который позволяет редактировать список друзей для указанного аккаунта через XML-RPC интерфейс ЖЖ. Пользоваться несложно – получить список друзей для добавления/удаления с помощью LJ Add/Remove Friends, сохранить его в файл и обработать через lj-edit-friends. Подробности – ниже.
Читать далее Массовое добавление и удаление друзей в LiveJournal через XML-RPC
Парсинг Яндекс ТИЦ на примере списка пользователей ЛиРу
В заметке рассмотрено использование многопоточного парсера Яндекс ТИЦ на примере обработки списка пользователей ЛиРу (Liveinternet). Для запуска понадобятся: bash (под Windows можно использовать cygwin), perl, wget и, для большего удобства представления результатов, – sort. Все эти утилиты присутствуют практически в любой *nix-ОС или могут быть установлены в cygwin.
Простой скрипт для увеличения посещаемости блога в Живом Журнале
Около трёх месяцев назад в комментариях к скрипту для добвления друзей в жж Zanzanoza предложил попробовать ещё один способ увеличения количества своих читателей в ЖЖ. Суть способа проста – залогинившись под нужным аккаунтом, заходить на страницы профилей жж-юзеров в расчете на то, что посещение зафиксируется в статистике их журналов и какой-то процент посещённых в ответ заинтересуется нашим журналом.
Эффективность такого способа раскрутки журнала с самого начала вызывала некоторые сомнения, но в силу простоты реализации решил проверить, что из этого получится. В результате сделал простой скриптик (сам он опубликован ниже), скормил ему файлик со списком всех жж-аккаунтов, присутствующих в топе Яндекса, и оставил работать.
Читать далее Простой скрипт для увеличения посещаемости блога в Живом Журнале
О пользе тестирования, блин!
Напоролся на неприятную ошибку в модуле Time::Local (по-моему даже в кукбуке описан) – похоже, что номер месяца подставлялся в индкес элемента массива напрямую, вопреки тому, что нумерация начинается с нулевого элемента и вместо января выдавалось количество дне для февраля и т.д. Соответственно какие-то месяца обрабатывались корректно, а какие-то – вызывали ошибку вида Day ’31’ out of range 1..30, которую в силу редкости трудно было обнаружить.
А ведь что мешало автору проcтейшим образом сгенерировать тестовый календарь и прогнать на нём модуль? Ладно бы – “для себя” делал, так модуль на CPAN лежит, в литературе упомянут – и такие детские баги. Причём сообщение об ошибке на форуме CPAN было еще для версии 1.13, к версии 1.20 ничего не изменилось – так же перебирает с первого элемента…
Mojolicious – знакомство с “вебом из коробки”
Что такое Mojolicious. Введение
Благодаря заметке на Хабре (в кэшэ Google) наконец-то решил познакомиться с набирающим популярность фреймворком для веб-разработки на Perl под названием Mojolicious. В общем-то я взял пример скрипта из этой заметки и сделал его чуть более интересным для себя, чтобы охватить немного больше документации по фреймворку (результат вполне работоспособен, его можно посмотреть здесь, а код и скриншот выложены в конце заметки). Сразу отмечу, что ни пример с Хабра, ни мой практически не отражают возможностей фреймворка, а только лишь иллюстрируют простоту его использования.
Итак, Mojolicious – фреймворк для разработки веб-приложений, основанный на “фреймворке для разработки фреймворков” Mojo, написанный на языке Perl человеком по имени Sebastian Riedel, одним из авторов Perl-веб-фреймворка Catalyst, фактически для его замены.
Чем мне показался особенно интересен Mojolicious? Во-первых тем, что он имеет встроенный веб-сервер, что в перспективе позволяет не только удобно разрабатывать и проверять приложение, но и распространять его для локального использования. При этом приложение получается универсальным и будет одинаково работоспособным как на локальной машине, так и на сервере. Во-вторых – Mojolicious зависит только от Perl, что также говорит в пользу “во-первых”. В-третьих – наличием модуля Mojolicious::Lite, позволяющего создать лёгкие, маленькие, но полноценные приложения. И в-четвёртых – автоматической поддержкой разных режимов запуска (CGI, FastCGI, mod_perl, встроенный сервер и т.д.).
Читать далее Mojolicious – знакомство с “вебом из коробки”