Архив рубрики: Кодинг

Idea — подключение к Docker в Windows WSL2

Небольшая памятка для себя. Понадобилось воспользоваться докером в 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: поиск Solr по составному полю

Ограничение на минимальную цену в 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+).

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

Читать далее Добавление Inspections Replace Template в idea

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 - веб из коробки

Что такое Mojolicious. Введение

Благодаря заметке на Хабре (в кэшэ Google) наконец-то решил познакомиться с набирающим популярность фреймворком для веб-разработки на Perl под названием Mojolicious. В общем-то я взял пример скрипта из этой заметки и сделал его чуть более интересным для себя, чтобы охватить немного больше документации по фреймворку (результат вполне работоспособен, его можно посмотреть здесь, а код и скриншот выложены в конце заметки). Сразу отмечу, что ни пример с Хабра, ни мой практически не отражают возможностей фреймворка, а только лишь иллюстрируют простоту его использования.

Итак, Mojolicious — фреймворк для разработки веб-приложений, основанный на «фреймворке для разработки фреймворков» Mojo, написанный на языке Perl человеком по имени Sebastian Riedel, одним из авторов Perl-веб-фреймворка Catalyst, фактически для его замены.

Чем мне показался особенно интересен Mojolicious? Во-первых тем, что он имеет встроенный веб-сервер, что в перспективе позволяет не только удобно разрабатывать и проверять приложение, но и распространять его для локального использования. При этом приложение получается универсальным и будет одинаково работоспособным как на локальной машине, так и на сервере. Во-вторых — Mojolicious зависит только от Perl, что также говорит в пользу «во-первых». В-третьих — наличием модуля Mojolicious::Lite, позволяющего создать лёгкие, маленькие, но полноценные приложения. И в-четвёртых — автоматической поддержкой разных режимов запуска (CGI, FastCGI, mod_perl, встроенный сервер и т.д.).
Читать далее Mojolicious — знакомство с «вебом из коробки»