Этот файл llms.txt, созданный в результате сравнения All in One SEO и5.0.1.1, используется LLM-системами для индексации сайта. # IT блог Современные методики разработки и тестирования ПО. ## Sitemaps - [XML Sitemap](https://outofrange.ru/sitemap.xml): Contains all public & indexable URLs for this website. ## Записи - [Ссылки на потоки вещания радиостанций](https://outofrange.ru/2025/01/links-radio-cast/) - В моем устройстве интернет радио нет предустановленных данных для некоторых радиостанций. Их я добавлял сам. Может быть, сберегу кому-то время, вот они: Говорит Москва http://audio.govoritmoskva.ru/rufm.mp3Радио Спутник http://icecast-rian.cdnvideo.ru/voicerusРадио Россия http://icecast-vgtrk.cdnvideo.ru/rrzonam_mp3_192kbpsРадио РБК http://rbcreg.hostingradio.ru/rbc32.aacp - [Как передать сложную команду в kubectl](https://outofrange.ru/2025/02/sophisticated-command-for-kubectl/) - Рубрика "ненормальное программирование". Мне понадобилось передать сложную команду для выполнения на поде. Оболочка shell дробила ее там, где не должна и я решил воспользоваться утилитой expect. После выполнения этого короткого сценария происходит выход в первоначальный сеанс. #!/usr/bin/expect -f spawn kubectl exec -it asb-0 -- /bin/sh expect "Defaulted container \"app\" out of: app, tools" send -- - [Как в реальной жизни используется хеширование](https://outofrange.ru/2024/12/real-life-hashing/) - Я заметил, что в Пунктах Выдачи Заказов (ПВЗ) на полках есть номера от 0 до 99. Это значит, что сотрудники, возможно того не зная, используют хеширование: взятие остатка от деления номера заказа на 100 (простейшая хеш функция). Таким образом каждый заказ легко найти и можно добиться примерно равномерного распределения заказов по стеллажам. Такого примера мне - ["Неприличное" предложение от Мегафона](https://outofrange.ru/2024/12/inapp-offer-megafon/) - Возможно, я испорчен, но сокращение inapp. offer (см. ссылку на скриншоте) я воспринимаю как inappropriate offer :) - [Програмная имитация отжига для начинающих](https://outofrange.ru/2015/04/annealing-for-beginners/) - Данная заметка является переводом этой статьи: источник Поиск лучшего решения для определенных задач оптимизации может быть необычайно тяжелым, часто даже практически невозможным. Это происходит из-за того, что при усложнении задачи возрастает число возможных решений из которых нужно выбрать оптимальное. Даже при использовании возможностей современных компьютеров перебор всех вариантов представляется тяжелой задачей. В этом случае мы - [Уязвимость Venom опаснее, чем Heartbleed, и угрожает большинству датацентров](https://outofrange.ru/2015/05/venom-to-beat-heartbleed/) - Одним абзацем: Эксперты безопасности считают, что уязвимости нулевого дня подвержены миллионы компьютеров в датацентрах по всему миру. Источник: ссылка Heartbleed, подвинься! На подходе новая катастрофическая уязвимость. Компания, занимающая безопасностью, предупреждает о том, что новый баг может позволить хакеру получить контроль над значительными ресурсами датацентров, причем сделано это будет «изнутри». Уязвимость нулевого дня содержится в распространенном - [Самодельные пазлы на деревянной подложке](https://outofrange.ru/2015/05/diy-jigsaw-puzzles/) - Некоторое время назад у меня возникла идея соединить возможности лазерной резки и ультрафиолетовой печати. Если с лазером я был знаком достаточно хорошо, то с УФ печатью имел дело в первый раз. В качестве материала я выбрал неламинированную фанеру толщиной 6 мм и акриловое стекло такой же толщины. Сразу после резки детальки пазлов выглядят не очень - [Продвинутые SCTP клиент и сервер](https://outofrange.ru/2015/04/advanced-sctp-client-server/) - Описание шагов для компиляции SCTP клиента и сервера из примеров netty. - [Ошибки сборки от commons-math3 и commons-pool2](https://outofrange.ru/2015/04/build-failure-commons-math3-commons-pool2/) - Как побороть ошибку "Missing artifact commons-math3:commons-math3:jar:3.4.1" при сборке мавеном проекта с использованием джмитерных классов. - [Использование именованных каналов и замены процессов](https://outofrange.ru/2015/03/named-pipes-and-process-substitute/) - Использование именованных каналов и замены процессов Данная заметка является вольным переводом этой статьи http://vincebuffalo.com/2013/08/08/the-mighty-named-pipe.html Трудно не влюбиться в Unix, если вы биоинформатик. В прошлой заметке я упоминал о том, что каналы в Unix представляют собой элегантный способ взаимодействия биоинформационных программ (и вообще осуществляют взаимодействие между процессами). Исследуя другие способы сопряжения программ в Unix я открыл - [Простые SCTP клиент и сервер на java](https://outofrange.ru/2015/03/simple-sctp-client-server/) - Минимальный исходный код на java для работы с SCTP. - [И снова про docker](https://outofrange.ru/2015/02/docker-again/) - Как поставить docker в старые версии линукс. - [Пособие по JNI](https://outofrange.ru/2015/02/jni-tutorial/) - Пример исходного кода для обработки различных вызовов JNI API. - [Как обнаружить прозрачный прокси (transparent proxy)](https://outofrange.ru/2015/02/how-to-detect-transparent-proxy/) - Обнаружение прозрачного прокси с помощью анализа перехваченного трафика. - [Здравствуй HTTP/2, прощай SPDY](https://outofrange.ru/2015/02/goodbye-spdy-hello-http2/) - Http является фундаментальным протоколом в современном интернете. Большинство сайтов используют HTTP 1.1, который был стандартизован еще в 1999 году. С тех пор многое изменилось и сейчас на финишной прямой находится HTTP/2. Команда Chromium собирается обеспечить поддержку HTTP/2 в Chrome 40. Основные изменения направлены на улучшение производительности. Некоторые ключевые возможности : мультиплексирование, сжатие заголовков, приоретизация и - [Использование Netty под высокой нагрузкой](https://outofrange.ru/2015/02/netty-under-high-load/) - Презентация будущей книги с примерами. - [Chromium хочет помечать HTTP сайты как небезопасные особой иконкой](https://outofrange.ru/2015/01/chromium-pushes-new-icon-for-http/) - Предложение команды Chrome Security можно прочитать тут: marking-http-as-non-secure Иконка с навесным замком для https сайтов уже стала привычной. И теперь для http сайтов предлагается новая иконка (я бы сказал, с дискриминационным оттенком). Причем речь идет о том, чтоб сделать это стандартом во всех браузерах. За и против такого подода можно посмотреть здесь: Обсуждение В частности, - [HTTPS прокси на netty](https://outofrange.ru/2015/02/https-proxy-with-netty/) - Пошаговое объяснение работы netty на примере реально используемого приложения. - [Docker Hub и автоматизация](https://outofrange.ru/2015/01/docker-hub-and-automation/) - Как автоматизировать сборку образов и сделать их доступными для других членов команды разработчиков - [Опыт использования Fabric для удаленного управления серверами](https://outofrange.ru/2015/01/fabric-for-remote-administration/) - Практические советы по использованию Fabric для удаленного управления серверами. - [Списание сразу двух поездок с многократной карточки на электричку](https://outofrange.ru/2015/01/multiple-withdrawal-with-single-swipe/) - А у вас было такое, что с карты на электричку турникет списывал две поездки за раз? - [Java 7: особенности обработки даты при использовании Y в последнюю неделю года](https://outofrange.ru/2015/01/java-7-y-for-the-last-week-of-a-year/) - Использование заглавной буквы "Y" для отображения даты было представлено в java 7. И, как оказывается, тут есть подводный камень: этот способ отображения может вывести дату в январе не 2014, а 2015 года. К примеру, для даты 2014/29/12 формат "YYYY/MM/dd" выдаст 2015/12/29. Ошибка происходит при выполнении двух условий: - строка формата содержит Y - для форматирования - [Знакомство с Docker в RedHat 7](https://outofrange.ru/2014/12/introducing-docker-in-redhat7/) - Настройка контейнеров docker для прозрачного проксирования - [Использование SOCKS для прозрачного проксирования (transparent proxy)](https://outofrange.ru/2014/12/socks-for-transparent-proxy/) - Как обойтись одним компьютером при настройке прозрачного проксирования. - [Увеличение сетевого трафика в связи с появлением игровых видеохостингов](https://outofrange.ru/2014/12/growth-of-network-traffic/) - Заметка посвящена трендам в игровом видеохостинге: всё больше компаний спешат занять место в новой IT-нише - [Тенденция использования сайтами протокола SPDY](https://outofrange.ru/2014/12/spdy-usage-trend/) - Судя по последним данным произошел увеличение числа сайтов, использующих SPDY. Пока нельзя сказать что это: скачок или график пойдет дальше вверх с таким же наклоном. источник: w3techs.com - [Как сделать CSV файл совместимым с Excel](https://outofrange.ru/2014/12/how-to-make-csv-excel-compatible/) - В большинстве случаев CSV файлы совместимы с Excel. Но есть требования к ним, которые иногда нарушаются. Это может привести к ошибкам при импорте. - [Использование структурной распечатки (pretty-printing) в GDB](https://outofrange.ru/2014/12/gdb-pretty-printing/) - Использование pretty printing для получения сжатой информации при отладке в GDB. - [Эмулирование задержек и потерь пакетов с помощью dummynet](https://outofrange.ru/2014/11/network-congestion-with-dummynet/) - Как средствами командной строки эмулировать условия сетей 3G и 4G - [Статический анализ java кода с помощью maven плагина Findbug](https://outofrange.ru/2014/10/static-analysis-for-java-with-findbugs/) - Поиск ошибок в java коде с помощью статического анализатора. Использован maven plugin FindBug. - [PHP скрипт, генерирующий страницу с заданным размером](https://outofrange.ru/2014/11/php-script-page-generation/) - Использование страницы с заданным размером при тестировании списания ресурсов биллингом - [Использование кода httpd (апача) в своей программе](https://outofrange.ru/2014/11/borrowing-httpd-code/) - Представим ситуацию, когда вам надо использовать в своей программе кусок кода из опенсорсного проекта. В отдельных случаях удастся этот кусок локализовать и просто скопировать не заботясь о зависимости от других библиотек того самого опенсорсного проекта. Я рассмотрю более общий случай, когда зависимости (типы данных или функции) приходится тащить с собой. В качестве примера будет функционал - [Компактный веб сервер для тестирования](https://outofrange.ru/2014/11/lightweight-webserver-for-testing/) - Пример использования и исходник легковесного и гибкого в настройке веб сервера - [Пример использования Navigation Timing API](https://outofrange.ru/2014/11/sample-usage-of-navigation-timing-api/) - Как собрать статистику о времени загрузки (отображения) страниц сайта у пользователя используя Navigation Timing API. Пример на javascript. - [Запуск тестового веб сервера с помощью netcat](https://outofrange.ru/2014/10/netcat-based-webserver/) - Команда для запуска веб сервера с использованием netcat - [Как Мегамаркет сам создал себе проблемы в логистике](https://outofrange.ru/2023/12/logistics-issue-by-megamarket/) - Рецепт такой. Мегамаркет раздает направо и налево промокоды на крупные суммы (на 7000 рублей и даже больше). Покупатели заказывают крупные по размерам вещи, которые не входят в ячейку постамата - клиент будет вынужден выбрать доставку курьером. А остаток суммы до указанной в промокоде клиент набирает мелкими вещами (как по цене, так и размеру - они - [Про рукодельные браки монет](https://outofrange.ru/2020/09/handmade-defects-of-coins/) - Чем более редка монета, тем больше она стоит. Доходы у населения снижаются. Эти два факта заставляют нечистоплотных людей мудрить с монетами, чтоб продать подороже. - [Как сконфигуровать ссылку для скачивания файла в Vaadin Flow](https://outofrange.ru/2023/11/howto-expose-download-link-vaadin-flow/) - Vaadin Flow предоставляет удобный механизм для скачивания файлов. Этот API работает с классом com.vaadin.flow.server.StreamResource, который пришел на смену классу com.vaadin.server.StreamResource. И если вы раньше работали с vaadin, то не ищите в vaadin flow класс StreamResource.StreamSource. Этот механизм позволяет инкапсулировать отдачу файла с бэкенда, который находится в защищенной сети - Vaadin flow назначит динамическую ссылку, которая - [Как исправить ошибки докера с упоминанием EOF](https://outofrange.ru/2023/10/how-to-fix-eof-error-in-docker/) - Как исправить в докере ошибку с упоминанием EOF - [Настройка обработчика SNMP trap в RedHat](https://outofrange.ru/2015/01/snmp-trap-receiver-in-redhat/) - Настройка приемника smnp ловушек - [Изготовление блочной рогатки](https://outofrange.ru/2018/08/making-a-compound-slingshot/) - Заметка про изготовление блочной рогатки своими руками. Рассказ о тонкостях с приложением чертежа. - [Уже почти прошедшей осени посвящается](https://outofrange.ru/2014/10/autumn-2014-photo/) - Фотографии осеннего Обнинска - [Работайте, братья!](https://outofrange.ru/2022/04/rabotajte-bratya/) - [Развертка для трех-позиционного соединения](https://outofrange.ru/2015/11/development-view-for-3-way-joint/) - Когда я посмотрел видео Маттиаса Ванделя видео о трех-позиционном соединении, я сразу решил, что попробую сделать макет. Однако, у меня нет в распоряжении лобзика. И заказывать с ходу 3d печать тоже лениво (3d модель доступна тут 3d модель ). В результате я решил сделать макет из картона. При вдумчивом просмотре можно заметить, что каждая из - [Как перекодировать заглавную букву И в юникод](https://outofrange.ru/2021/09/how-to-encode-capital-cyrillic-letter-i/) - При перекодировании текста с кириллицей из кодировки WIN1251 в UTF-8 буква И становится нечитаемой последовательностью символов, которая начинается ромбиком со знаком вопроса. Это проблема не джавы, насколько я понимаю, а именно совместимости кодировок. Т.к. остальные кириллические символы перекодируются нормально. Далее будет показан workaround. Решение заключается в том, что в исходной строке в кодировке WIN-1251 надо - [Failsafe Apache Camel route](https://outofrange.ru/2021/09/failsafe-apache-camel-route/) - First of all I need to warn about the limitations. I'm going to tell how to prevent particular type of exceptions related to unreachable host:port. The approach allows for application to start up in case of this exception without the problematic route(s). Without the described below approach the entire application fails. It's up to you - [Как выбрать в гриде vaadin строчки с помощью фильтра](https://outofrange.ru/2020/02/grid-vaadin-set-filter-programatically/) - Сразу оговорюсь, что с помощью строкового фильтра (TextFilter), который я рассмотрю, не всегда можно подсветить несколько строк. В зависимости от параметров конструктора фильтра будет проверка на равенство строк или проверка с помощью beginsWith(). В случая, когда этих средств недостаточно, придется фильтровать коллекцию объектов как-то еще до того, как заполняется ContainerDataSource грида. Есть еще фильтры с - [Cannot resolve org.olap4j:olap4j:0.9.7.309-JS-3](https://outofrange.ru/2021/07/cannot-resolve-org-olap4j0-9-7-309-js-3/) - Cannot resolve org.olap4j:olap4j:0.9.7.309-JS-3 Cannot resolve org.olap4j:olap4j:0.9.7.309-JS-3 - [Как настроить беспарольный доступ в Jenkins](https://outofrange.ru/2015/06/passwordless-ssh-for-jenkins/) - Такой функционал может понадобиться для выкладывания результатов сборки на удаленной сервер с помощью команды scp или запуска команд на удаленном сервере с помощью ssh. Даже если вы решите использовать плагин дженкинса вроде Publish Over SSH, то вам придется делать эту же настройку. Будем считать, что надо выполнить команду: ssh user_name@remote_host ls -l /tmp Действия на - [Как работает рекомендация друзей в социальных сетях](https://outofrange.ru/2021/01/recommended-friends-social-networks/) - Как известно, связи между людьми хранятся в виде графа. С помощью обхода этого графа можно находить интересные закономерности. В этой заметке я расскажу, как работает упрощенный поиск людей, которых вам рекомендуют в качестве друзей. Что нужно знать про формат описания графа в текстовом файле. Там записаны пары имен, которые описывают однонаправленную связь. К примеру: Ann - [Калькулятор комплексных чисел на lex и yacc](https://outofrange.ru/2020/11/complex-numbers-with-flex-and-bison/) - Готовый исходный код калькулятора комплексных чисел: сложение, вычитание, умножение, деление. - [Find 7-letter word for a telephone number](https://outofrange.ru/2020/11/7letter-word-for-telephone-number/) - Applying binary search for lookup of words like 400-WOODMAN in a telephone number 400-9663626 - [Разбор алгоритмической задачи про курьера](https://outofrange.ru/2020/11/delivery-guy-minimal-stops/) - Разбирается алгоритм поиска минимального (оптимального) количества остановок машины курьера для доставки покупок по списку адресов. - [Как с помощью линуксовой команды find найти файлы, которые никогда не менялись](https://outofrange.ru/2021/01/how-to-find-files-never-changed/) - Т.е. дата создания совпадает с датой последнего изменения. Но надо учитывать, что не все файловые системы хранят дату создания файла. Если ваша файловая система все-таки хранит дату создания файла, то можно использовать такую команду: find /home -type f -exec bash -c 'if [ $(date -r {} +%s) == $(stat --printf='%W' {} ) ]; then echo - [Полиморфизм применительно к json](https://outofrange.ru/2019/11/polymorphism-applied-to-json/) - Из-за весьма неудобных особенностей одной из внешних служб мне пришлось городить огород на своей стороне. А именно: поле с одним и тем же именем с двух разных ссылок передается в json в виде списка и в виде ассоциативного массива (LinkedHashMap). Вот как это выглядит: "services":["SERVICE3", "SERVICE_EXT"] "services":{"SERVICE3":"1234", "SERVICE_EXT":"434"} Мне очень не хотелось делать две разные - [Проблема с типом signed int при хранении unix timestamp](https://outofrange.ru/2020/02/signed-int-issue-timestamp-2038/) - В 2038 году будет такой момент, когда в типе данных int уже не получится хранить число секунд эпохи - с момента 1 января 1970 года. - [Как в Диадоке изобрели эпоху :)](https://outofrange.ru/2020/08/diadoc-reinvented-epoch/) - Об особенностях вычисления timestamp в Диадоке (она отсчитывается не от 1970 года). - [Как в цепочке документооборота Диадок найти неподписанные контрагентом документы](https://outofrange.ru/2020/07/diadoc-message-chain-find-unsigned-files/) - После того, как вы инициировали цепочку документооборота, вам нужно сохранить возвращенный messageId. С помощью него можно запросить статус документов. - [Переводчик Ebay путает денежную единицу фунт с единицей веса](https://outofrange.ru/2020/11/ebay-confused-with-pound/) - Или как купить 2.3 кг серебра за 2300 рублей (без стоимости доставки) :) - [Проблема при записи в BAT знака равенства](https://outofrange.ru/2020/11/bat-file-equal-mark/) - Мне понадобилось вывести из BAT файла несколько строк в файл без перевода на новую строку. Все было нормально до тех пор, пока одна из строк не оказалось знаком равенства. Для демонстрации будут использованы два набора файлов, в каждом скрипт на питоне и bat файл, который его вызывает. Первый скрипт выводит единичку. Второй - знак равенства. - [Сделай сам: брелок для ключей из старого процессора Pentium 4](https://outofrange.ru/2014/12/pentium-four-as-a-keyfob/) - Даем вторую жизнь старым процессорам: брелок из Pentium 4 - [Кофейный столик своими руками](https://outofrange.ru/2020/09/selfmade-coffee-table/) - Сегодня мы делаем оригинальный кофейный столик. Он будет разборным. Уже во время проектирования я понял, что у меня останется неиспользованной внутренняя область от бортика-галереи (такой бортик я в первый раз увидел в Греции). Как-то обидно: сейчас при производстве мебели есть тенденция к многофункциональности и экономии места в квартире. И применение для внутренней области все-таки нашлось, - [Про поездку в Дублин. Часть 3](https://outofrange.ru/2020/09/travel-dublin-part-3/) - Предыдущие части: https://outofrange.ru/2020/09/travel-dublin-part-1/https://outofrange.ru/2020/09/travel-dublin-part-2/ Поездка была в апреле 2014 года. Про сувениры.Оказалось, что цены на сувениры с маркировкой Made in Ireland в самой республике несколько дешевле, чем в Северной Ирландии. При этом можно оформить Tax Back (он есть и в Северной Ирландии). В специализированных магазинах при покупке сувениров на сумму больше 100 Евро (в Белфасте — - [Про поездку в Дублин. Часть 2](https://outofrange.ru/2020/09/travel-dublin-part-2/) - Первая часть: https://outofrange.ru/2020/09/travel-dublin-part-1/ Реальный голодомор в Ирландии Подпись к фигурам матери и ребенка на предыдущей фотографии Весьма похоже на пулемет Максим(а) Eamonn De Valera (читается Эймонн), табличка с пояснением Папы всех благословляют. Анатомический экспонат. Писюн манекена как раз на уровне глаз ребенка — родителям не избежать неудобных вопросов. Кризис перепроизводства восковых пальцев :) Эти отломленные - [Про поездку в Дублин. Часть 1](https://outofrange.ru/2020/09/travel-dublin-part-1/) - Поездка была в апреле 2014. Начинать надо, наверно, с того, что командировали меня в Белфаст, Северная Ирландия. Оказалось, что моя UK Business C виза позволяет посетить республику Ирландия. Единственное условие — въехать я должен был через UK, т. е. должен быть штамп UK Border Agency. Насколько я понял, это односторонняя уступка со стороны Республики Ирландия - http://www.embassyofireland.ru/home/index.aspx?id=86864 Суть - [Про поездку в Северную Ирландию. Часть 3](https://outofrange.ru/2020/09/travel-belfast-part3/) - Первая часть: СсылкаВторая часть: Ссылка Возвращаясь к вопросу о дружелюбности ирландцев. Их драчливость — этот один из стереотипов (что-то вроде штампов про русских — ходят в шапках-ушанках, на цепи водят медведя, который играет на балалайке): Еще про стереотипы: - Мы не пьем зеленое пиво.- Веснушки есть не у всех.- Shamrock и четырехлистный клевер — это не одно - [Изготовление формы для литья восковых свечей](https://outofrange.ru/2019/02/casting-form-for-candles/) - В этой заметке я расскажу про опыт изготовления металлической цилиндрической формы для литья восковых свечей. - [Про поездку в Северную Ирландию. Часть 2](https://outofrange.ru/2020/09/travel-belfast-part2/) - Поездка состоялась в феврале-марте 2014 года. Предыдущая часть: https://outofrange.ru/2020/09/travel-belfast-part1/ Рекомендованная музыка при чтении: Поездка к Giant's Causeway Автобусный тур занимает целый день. Отъезд примерно в 10 утра, возвращение — в 18-00. Билет лучше купить заранее. Мне он обошелся в 16 фунтов (агентство Allen's Tour). Экскурсоводом (и водителем) был шотландец Том с отличным чувством - [Про поездку в Северную Ирландию. Часть 1](https://outofrange.ru/2020/09/travel-belfast-part1/) - Поездка состоялась в феврале-марте 2014 года.Читать предлагаю под ирландскую музыку: Оба рейса - Москва-Хитроу и Хитроу-Белфаст — обслуживались одной и той же авиакомпанией — British Airways. Этоудобно в плане пересадок (не слишком долго надо ждать в Хитроу) и в плане багажа: в Хитроу его забирать не надо, доставляют сразу в Белфаст. Герб Белфаста. Снято у - [Примеры использования API Диадок SDK](https://outofrange.ru/2020/06/usage-of-diadoc-sdk-java/) - В связи с тем, что для языка java Диадок не предоставляет примеров кода, привожу свои наработки. В заметке можно найти код для отправки неформализованного сообщения, поиска организации, поиска последнего события в ящике, листинг всех организаций и их сотрудников для своей учетки, создание департамента. Для сборки проекта с предоставленным исходником вам нужно будет добавить в локальный - [Белорусские орнаменты как QR коды](https://outofrange.ru/2016/08/belarussian-pattern-as-qr/) - Новый дизайн самолетов авиакомпании Белавия натолкнул меня на идею попробовать прочитать традиционный белорусский узор как QR код. В этой заметке я расскажу, что из этого получилось. Из всех узоров android приложение смогло найти код только на двух узорах, да и то только обычный штрих код. Первый узор: Результат распознавания: Второй узор: Результат распознавания: А вообще, - [Как сравнить строки не алфавитно в JPA Specification, преобразовав их в числа](https://outofrange.ru/2017/07/jpa-specification-compare-strings-not-alphabetically/) - Как привести строковое представление числа из postgres к числу для использования при сравнении в JPA Specification средствами СУБД. - [Использование javacc для разбора SQL](https://outofrange.ru/2015/03/usage-of-javacc-for-sql/) - Пришло время затронуть тему создания парсеров на java. Для этого воспользуемся утилитой javacc. Update. Плагин Вордпресса для подсвечивания кода стал безнадежно портить исходники - добавлять закрывающие теги там, где они не нужны, дефолтные значения у того, что он считает атрибутами тегов. Неискаженные исходники, адаптированные к javaCC версии 7.0.9 доступны тут: исходники За основу взята эта - [Разбор рекурсивной грамматики с помощью javacc](https://outofrange.ru/2015/04/recursion-with-javacc/) - Продолжаем создавать парсеры на java с помощью javacc. В этот раз рассмотрим разбор грамматики, которую уже разбирали с помощью lex+yacc тут: ссылка. В той статье есть BNF для данного языка в понятном для yacc виде. Для простоты я опять закомментировал название пакета — если надо, раскоментируйте и ставьте свой. Я собирал с помощью make: JAVACC_JAR - [Практическое использование yacc и lex](https://outofrange.ru/2015/03/practical-usage-of-lex-and-yacc/) - Разбор исходного кода на С для анализатора пользовательской грамматики. - [Рингтон на звонки русских, но не совсем.](https://outofrange.ru/2018/01/ringtone-for-not-quite-russian/) - В названии заметки использована цитата о себе кандидата в президенты П.Н. Грудинина :) Рингтон на звонки евреев. версия 1 версия 2 - [Анализ core-dump многопоточного приложения с помощью GDB](https://outofrange.ru/2019/09/core-dump-for-multithreading-app/) - Команды для разбора корки многопоточного приложения в linux - [Creating jpa repo for a temp view](https://outofrange.ru/2019/06/jpa-repo-for-temp-view/) - In this post I will tell how to compose a repository accessing entities without actual mapping to a table in the database. This allows to move data aggregation from several entities/tables into a database function. As a result, you can use all the postgres functions and your own functions. And the number of SQL requests - [Опыт подключения Яндекс.Метрики в vaadin](https://outofrange.ru/2019/04/opyt-podklyucheniya-yandeks-metriki-v-vaadin/) - Входные данные такие. Есть приложения на vaadin, в него нужно вставить джаваскриптовый код и кусочек HTML разметки. Вставить в приложение на vaadin нужно такой код: Не забудьте заменить YOUR_ID в двух местах на свой собственный идентификатор. В итоге я составил такой файл на джаваскрипте: window.addEventListener("DOMContentLoaded", function (event) { (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a); var div = e.createElement('div'); - [How to get sockJS sessionId in Spring's WebSocketStompClient?](https://outofrange.ru/2018/12/how-to-get-sockjs-sessionid-in-websocketstompclient/) - The default sessionId retrieved from the Session doesn't match the one assigned by sock.js. How to workaround. - [Mouse drag event support for SwipeBox](https://outofrange.ru/2018/11/mouse-drag-event-support-for-swipebox/) - More precisely, I will tell how to add support of mousedown and mouseup events and how to use the difference of X coordinates to switch to the previous or to the next image in the gallery. This handling might be more of academic interest. I added two functions. The first one handles mouse down event - [Mouse scroll event support for Swipebox](https://outofrange.ru/2018/10/mouse-scroll-event-support-for-swipebox/) - Javascript library Swipebox is commonly used in different galleries in spite of lack of support - last commit was several years ago. Nevertheless we can add mouse scroll support. Here is a patch, created against the version of Swipebox used in "Responsive Gallery with lightbox" plugin for Wordpress (differs from vanilla Swipebox): --- D:/user/Documents/responsive-gallery-with-lightbox/lightbox/swipebox/jquery.swipebox.js Sat - [How to avoid double url encoding in HATEOAS](https://outofrange.ru/2018/08/how-to-avoid-double-url-encoding-in-hateoas/) - The point is that HTTP params get encoded in HATEOAS firstly and then in spring when it requests the composed link. I will tell you a workaround in this post. - [Создание jar-расширений со шрифтами](https://outofrange.ru/2019/09/jar-font-extension-for-jasperreports/) - Руководство по созданию jar расширений со шрифтами для вывода кириллических символов в печатной форме JasperReports - [Настройка json сериализации сущностей для приема на стороне spring data rest](https://outofrange.ru/2016/10/json-for-spring-data-rest/) - Итак, вам удалось настроить свой сервер со spring data rest и hibernate. Теперь надо понять, какие запросы и какие JSON сервер ждет для создания и изменения сущностей в БД. Для примера возьмем сущности абстрактного форума: тема Topic, ее статус Status, пользователь User, список поисковых тегов List. У каждой темы есть связь one-to-many к Post, т.е. - [How to get a value from lambda in Java?](https://outofrange.ru/2017/07/how-to-get-value-from-lambda-in-java/) - If you reached this article, you most likely face one of these errors, and trying to get rid of one, get another: "variable used in lambda expression should be final or effectively final", "variable may be not initialized", "cannot assign a value to final variable". For my explanation I will use vaadin's Window. public class - [Как в PostgreSQL привести дату TIMESTAMP WITH TIME ZONE к часовому поясу](https://outofrange.ru/2018/04/postgresql-timestamp-convert-using-timezone/) - Заметка о приведении даты в постгресе к нужному часовому поясу - [Kaspersky Secure Connection расщедрился](https://outofrange.ru/2018/06/kaspersky-secure-feels-charitable/) - [Динамический прокси на java и Ruby](https://outofrange.ru/2017/08/dynamic-proxy-java-ruby/) - Примеры кода для создания динамического прокси с использованием InvocationHandler и method missing. - [Избавление от повторяющихся (boilerplate) методов в Enum в Java](https://outofrange.ru/2018/05/getting-rid-of-boilerplate-methods-in-enum/) - В данной заметке будет рассказано про удаление из исходников повторяющихся кусков кода с помощью Reflection/Generics. Пусть в проекте содержится несколько перечислений для описания действий, в каждом из которых реализован метод, возвращающий список значений: import lombok.AllArgsConstructor; import lombok.Getter; import java.util.AbstractMap; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Getter @AllArgsConstructor public enum TestAction { UP("up", "вверх"), - [How to pass a ZonedDateTime into native SQL query in JPA](https://outofrange.ru/2018/02/how-to-pass-a-zoneddatetime-into-native-sql-query-in-jpa/) - Sometimes you have to use native SQL instead of JPQL or JPA specification, say, when you deal with non-portable key words like WITH RECURSIVE. That means, you need an explicit type conversation. - [Снова о динамическом программировании](https://outofrange.ru/2018/02/dynamic-programming-again/) - В этот раз задача звучит так. Имеем представление городских кварталов виде матрицы. Число в каждой клетке - это число пассажиров, которые хотят уехать (в каждом квартале только одна остановка). Автобус начинает двигаться в верхнем левом углу и заканчивает в правом. Он может двигаться только вправо или вниз. Нужно проложить маршрут так, чтобы автобус подобрал максимальное - [Скрипт для тестирования отправки СМС через smstraffic.ru](https://outofrange.ru/2016/11/script-for-testing-smstraffic/) - Данный скрипт был написан в целях тестирования. Как и ожидалось, отправителя русскими буквами указать нельзя, urlencode не помогает. Подставляйте свои логин и пароль вместо [removed] и наслаждайтесь. HTML-форма для отправки (верстка на базе bootstrap): Отправка СМС Отправка СМС Номер получателя (в формате +79... , можно несколько через запятую): Количество частей: Текст сообщения: Кем подписать (только - [Поиск прямоугольника с максимальной площадью в массиве единиц и нулей](https://outofrange.ru/2017/12/largest-rectangle-in-a-matrix/) - Задача звучит так. На вход подается матрица из нулей и единиц. Нужно найти в ней прямоугольник максимальной площади, состоящий из единиц и вывести его координаты. За основу я взял алгоритм. Я доработал его для того, чтоб он выдавал в качестве результата координаты левого верхнего и правого нижнего угла найденной прямоугольной области с единицами. Сложность алгоритма - [What is wrong about vaadin's Breadcrumb?](https://outofrange.ru/2017/12/what-is-wrong-about-vaadin-breadcrumb/) - I'm going to tell about my experience with add-on page. First of all, this page contains outdated code examples, but that's only the start of the list. The point is that this component provides only the styles for active/inactive buttons. (Maybe I expected too much after using WordPress breadcrumb plugin.) The rest of responsibilities is - [Работа с ZonedDateTime в связке postgres + hibernate + spring data](https://outofrange.ru/2017/02/zoneddatetime-postgres-hibernate-spring-data/) - ZonedDateTime - это класс восьмой джавы для представления даты/времени в определенной временнОй зоне. Это может быть запуск ракеты или выход нового релиза программы ZonedDateTime является immutable, т.е. при операциях с объектами класса создается новый объект. Postgres предоставляет все средства для работы с такими данными. Для полей ZonedDateTime в БД будем использовать тип TIMESTAMP WITH TIME - [How to implement seamless switching between multiple nextgen galleries on the same page](https://outofrange.ru/2017/05/how-to-implement-seamless-switching-between-multiple-nextgen-galleries/) - Let's assume you have a wordpress page with multiple nextgen galleries. In my case I wanted to keep the sorting order of photos and maintainability and interleave the photos with some text. So, placing all the images into a single gallery wasn't an option. And I couldn't find a setting in the plugin to control - [О негативном опыте иcпользования NanoCAD](https://outofrange.ru/2017/12/nanocad-spline-failure/) - НаноКАД удовлетворяет практически все мои запросы по проектированию. Но с масштабированием сплайнов там всё печально. Для демонстрации проблемы берем файл из архива fragment. Исходный файл. Масштабируем в 10 раз. Файл увеличен в 10 раз. Берем исходный файл и масштабируем в 50 раз. Файл увеличен в 50 раз. Туши свет. Хорошо, что есть знакомый с AutoCAD, - [Почему отличается пропускная способность физического и виртуального сетевого интерфейса?](https://outofrange.ru/2017/08/rate-difference-real-virtual-nic/) - Заметка про настройки сегментирования пакетов, которые влияют на измерение пропускной способности. - [Интеграционные тесты с помощью dbunit и h2](https://outofrange.ru/2017/08/integration-tests-dbunit-h2/) - В качестве основной СУБД в моем проекте используется postgres, но в тестах мы будем использовать in-memory БД h2. В этом случае нам не потребуется отдельной БД и все данные будут в оперативной памяти. После тестов не надо что-то подчищать. Необходимые зависимости: org.assertj assertj-core 3.2.0 test org.springframework spring-test 4.3.5.RELEASE org.dbunit dbunit 2.5.3 test junit junit com.github.springtestdbunit - [How to check if a row is present in vaadin's grid after filtering](https://outofrange.ru/2017/07/how-to-check-if-a-row-is-present-in-vaadin-s-grid-after-filtering/) - You probably have already tried out filtering feature in your vaadin project if you reached this article. Let's understand how to get the list of items left in grid after filtering got applied. We have access to grid's dataSource and we can perform: List filteredTopics = new ArrayList(); topics.forEach(topic -> { if (topicGrid.getContainerDataSource().containsId(topic)) { filteredTopics.add(topic); - [Как передать из spring контроллера hateoas-совместимый список сущностей](https://outofrange.ru/2017/07/how-to-send-hateoas-compatible-list-of-entities/) - Рассмотрим случай передачи из spring контроллера списка сущностей, когда использование создаваемых на лету методов интерфейса spring data почему-то не подходит. Использовать будем hateoas. В данном примере мы будем передавать на вход методу сущность с параметрами поиска в виде JSON, на основе этой сущности потом будет формироваться JPA спецификация для передачи в метод репозитория. Метод контроллера: - [Переосмысляем виртуализацию java приложений при использовании Docker. Часть 3](https://outofrange.ru/2016/06/redefine-java-virtualization-with-docker-part-3/) - Рассмотрим более эффективный процесс, в котором мы собираем (и, опционально, запускаем) образ Docker в maven используя плагин Docker. - [Переосмысляем виртуализацию java приложений при использовании Docker. Часть 2](https://outofrange.ru/2016/06/redefine-java-virtualization-with-docker-part-2/) - Первая часть: часть 1 Теперь вернемся к изучению образов. Dockerfile Докерфайлы — это инструкции для создания образа. Инструкции определяют точку старта и действия по конфигурированию образа. Рассмотрим пример: Листинг 1. CentOS Dockerfile FROM scratch MAINTAINER The CentOS Project - ami_creator ADD centos-7-20150616_1752-docker.tar.xz / # Volumes for systemd # VOLUME ["/run", "/tmp"] # Environment for systemd - [Объемный паззл "Грузовик Mack"](https://outofrange.ru/2016/11/3d-puzzle-mack-truck/) - В этот раз я расскажу про модель грузовика, которая собирается без клея. Запутаться сложно, потому что детали содержат в себе подсказки. Сборка развивает у ребенка пространственное мышление и мелкую моторику, а где-то надо и силу приложить. Вид модели в сборе, детали еще не отшлифованы. Как и любой детский конструктор, данный набор интересен тем, что готовый - [How to override save method of CrudRepository REST wise](https://outofrange.ru/2016/11/how-to-override-save-method-of-crudrepository-rest-wise/) - If you have to implement sophisticated business logic, then you most likely will face a necessity to extend some CRUD operations. Some practices can be found here: . But what if you deal with REST? Assume we create a multi user system, so the right place to check the state the updated/created entity is the - [Что может пойти не так при использовании hashCode() класса java.lang.String?](https://outofrange.ru/2017/06/pits-of-hashcode-for-java-lang-string/) - В заметке будет рассказано о том, как работает метод hashCode(), как происходят коллизии и об опасности некорректного использования строк в качестве ключей. - [Объемный пазл "Лягушка"](https://outofrange.ru/2017/04/3d-puzzle-frog/) - В данной заметке я расскажу, как резал, дорабатывал и собирал этот 3d пазл. В качестве материала я выбрал фанеру 6 мм. Для этой толщины и будет прикреплен файл для лазерной резки. Если вы захотите резать на другой толщине, то используйте масштабирование с учетом толщины луча. Я всегда проектирую шиповые соединения так, чтобы ход был тугой: - [How to pass params into vaadin's ui and control the view to be loaded](https://outofrange.ru/2016/10/how-to-pass-params-into-vaadin-s-ui-and-control-the-view-to-be-loaded/) - So, you want to enable in your vaadin app automated authentification based on request params. The right location for this functionality is your instance of com.vaadin.ui.UI class - here the decision is made which view to show. If the provided for authentification data is incorrect or incomplete, then we will show login view. If the - [Выставление идентификатора в сериализованном json при использовании spring data rest](https://outofrange.ru/2017/03/id-in-json-with-spring-data-rest/) - Spring data rest является сравнительно новым проектом, одной из задач которого было избавить разработчика от необходимости писать во многих местах повторяющийся код. По какой-то причине авторы решили, что по умолчанию идентификатор (поле с аннотацией @Id) сущности из БД при сериализации выводить не надо, достаточно выводить его в пути. В данной заметке я расскажу, как это - [How to get user's ZoneId in Vaadin](https://outofrange.ru/2017/01/how-to-get-user-zoneid-in-vaadin/) - Actually, the task can be split in two subtasks: - retrieving offset in the form which Vaadin can provide (integer number of milliseconds); - formatting it so that we could construct ZoneId. The first part can be handled with: int offsetInt = getUI().getPage().getWebBrowser().getTimezoneOffset(); The second part can be handled this way: private static final int - [How to workaround out of sync values retrieved in the selection listener of a vaadin's grid](https://outofrange.ru/2017/01/how-to-workaround-out-of-sync-values-in-grid/) - If you compose a sophisticated application with vaadin, you may face an interesting issue: values in the grid got updated (say, via HTTP) and you can see them in the corresponding rows and columns, but you can't read the actual values when selection listener gets triggered. I will tell how to workaround this issue. I - [How to encode cyrillic (non-ASCII) filename in the header Content-Disposition for different browsers](https://outofrange.ru/2016/11/encode-non-ascii-filename-content-disposition/) - After spending several hours aggregating data from numerous sources, I decided to compose this article. The code has been tested in IE, Chrome and Firefox. I want to save a file with name "мале нький.txt" - I added a white space intentionally to test this case. Please follow the link for details. I will stick - [Скрипт для проверки наличия использованных i18n сообщений](https://outofrange.ru/2016/12/script-to-check-presence-of-i18n-messages/) - При использовании интернационализации в своем проекте на spring через MessageSource вы можете столкнуться с неприятной ситуацией: в коде используется какое-то сообщение, но в property файле его нет. К примеру, удалили, забыли закоммитить или допустили опечатку (как намеренно сделал я в примере далее). В этом случае сборка не завалится и только после запуска вы получите блокирующий - [Интеграция Платрона с Play framework](https://outofrange.ru/2016/06/integrating-platron-with-play-framework/) - Заметка расскажет о тонкостях передачи данных об оплате заказа с вашего сайта в Платрон и получении из Платрона уведомлений о результате транзакции. - [Использование JAMon для мониторинга](https://outofrange.ru/2015/10/usage-of-jamon/) - Java Application Monitor (JAMon) является бесплатной, высокопроизводительной и потокобезопасной библиотекой для сбора статистики о работе приложения и поиска узких мест, анализа возможностей масштабирования. Можно считать количество брошенных исключений определенного типа, количество SQL запросов, количество запросов JSP страницы. В отчете выдается число вызовов, время выполнения (общее, среднее, минимальное, максимальное, среднеквадратичное отклонение), а также сведения, относящиеся к - [Посвящается грибному сезону 2016](https://outofrange.ru/2016/10/dedicatioon-to-mushroom-season-2016/) - Продолжение по ссылке. - [Настройка json-сериализации в spring data rest (hateoas) с помощью BeanPostProcessor](https://outofrange.ru/2016/10/nastrojka-json-serializatsii-v-spring-data-rest-hateoas-s-pomoshhyu-beanpostprocessor/) - В данной заметке я расскажу, как в spring data rest сериализовать в json сложный объект в виде строки. Советы справедливы для spring-data-rest версии 2.5.4. Пусть есть класс Topic с коллекцией сущностей Record, а у класса Record есть поле: java.time.LocalDate releaseDate; При обслуживании HTTP запросов к единичному объекту (например, http://localhost:8080/server/records/5 ) сериализации можно добиться аннотациями: @JsonDeserialize(using - [Развертывание веб-приложения с помощью плагина tomcat7-maven-plugin](https://outofrange.ru/2016/09/deploy-with-tomcat7-maven-plugin/) - Итак, вам понадобилось развернуть приложение на сервере приложений Tomcat в конце сборки мавеном. Для этого есть плагин tomcat7-maven-plugin, я использовал его для Tomcat 8, бегающего на java 8. Подробности далее. Для развертывания нужно выполнить несколько действий руками: 1. В Tomcat8 прописываем пользователя admin/password с ролями "manager-gui,manager-script" в файле tomcat-users.xml (это минимальный набор для поставленной задачи, - [Приложения с маленькими задержками на java. Часть 1.](https://outofrange.ru/2016/07/java-for-low-latency-applications-part1/) - Перевод статьи: оригинал Вопрос 1. Что мы понимаем под терминами приложение реального времени, задержка и пропускная способность? Ответ 1. Приложения реального времени (Real-time application, RTA) – это приложения, через которые данные проходят сразу по поступлении в течении заданного промежутка времени. Эти промежутки называются SLA - Service Level Agreements. К примеру, при реализации Straight-Through Processing (STP) - [Приложения с маленькими задержками на java. Часть 2.](https://outofrange.ru/2016/07/java-for-low-latency-applications-part2/) - Часть 1: часть 1 Вопрос 7. На какую задержку нацеливать приложение? Ответ 7. Зависит от сферы использования приложения. К примеру, торговая система для размещения валютных ордеров должна быть нацелена на задержку менее 20 миллисекунд; типичное веб приложение — на задержку в интервале 200-800 миллисекунд; игровое приложение или просто продвинутое веб приложение — на задержку от - [Online разбор строки crontab](https://outofrange.ru/2016/07/online-parsing-for-crontab/) - Отличный ресурс для распарсивания строки crontab: http://crontab.guru/ - [Playframework: Хак для подстановки переменной в route на этапе выполнения javascript](https://outofrange.ru/2016/06/passing-variable-from-js-into-scala-view/) - Как использовать подстановку URL из маршрута в play framework не зная на этапе компиляции scala, какое численное значение передать в метод контроллера. - [Переосмысляем виртуализацию java приложений при использовании Docker. Часть 1](https://outofrange.ru/2016/06/redefine-java-virtualization-with-docker-part-1/) - Первая часть из трех статьи об использовании Docker: получение образа с DockerHub, создание кастомных образов, интеграция сборки образа в сборку maven - [Как достать sessionId из вебсокета SockJS?](https://outofrange.ru/2016/06/how-to-get-sessionid-from-sockjs-instance/) - Заметка расскажет, как достать идентификатор сессии из SockJS и как задать свою функцию для генерации этого идентификатора. - [Тестовая система с использованием Docker в RH7](https://outofrange.ru/2016/05/test-system-with-docker-in-rh7/) - Как развернуть с помощью Docker тестовую систему клиент/сервер/прокси на одной единственной машине с RedHat7 - [Обрабатываем multipart POST запрос в framework Play 2.5](https://outofrange.ru/2016/05/multipart-post-request-with-play/) - В этой заметке я расскажу про то, какие изменения нужны в одном из шаблонных проектов Play framework 2.5 для принятия мультипарт данных (ключевой элемент — файл с картинкой) в POST запросе и сохранения их в MySQL. В форме будет выпадающий список для перечисления. Потом сделаем вывод загруженных сущностей с картинками в табличке. Исходники живут тут: - [Делаем правильные отступы в java коде](https://outofrange.ru/2016/04/correct-indentation-in-java/) - Допустим вы написали какой-то код без любимой IDE под рукой или решили изучить java исходники другого автора. В первом случае вы можете захотеть исправить отступы перед тем, как отослать работу в репозиторий. Во втором случае вы можете захотеть читать исходники в привычном глазу форматировании. И тут вам поможет однострочная команда. Первым делом качаем JAR c - [Отслеживаем изменения в файле на GitHub](https://outofrange.ru/2016/01/watching-file-level-changes-on-github/) - С вами уже было так, что надо было отслеживать изменения в каком-то файле в GitHub (правки в какой-то структуре данных или API)? Теперь это можно автоматизировать с помощью сервиса http://github-file-watcher.com. Прописываете адрес почты, репозиторий и файл(ы), и все. Очень полезный ресурс. - [Упаковываем UserTiming. Часть 2](https://outofrange.ru/2016/01/compressing-usertiming-part-2/) - Первая часть статьи: ссылка Тест кейсы Итак, как эти техники сжатия покажут себя в реальном мире? Я посетил сайты из списка Alexa top 50 (по трафику), чтоб посмотреть, какие из них используют UserTiming (как оказалось, немногие). Я собрал все доступные данные и создал тест кейсы. Набралось 20 реальных и придуманных примеров использования UserTiming. Давайте сначала - [Упаковываем UserTiming. Часть 1](https://outofrange.ru/2016/01/compressing-usertiming/) - UserTiming - это современный API, который позволяет разработчикам отмечать наступление важных событий (timestamps — моменты времени) и засекать их длительность (как разность указанных моментов времени). Для получения представления о работе API рекомендуется прочитать статью или заметку с несколькими примерами использования. UserTiming прост в использовании. Если вы хотите пометить событие, просто вызовите window.performance.mark(markName): // логгируем начало - [Исключения при работе с числами с плавающей запятой](https://outofrange.ru/2015/12/floating-point-exceptions/) - Допустим, вы решили обрабатывать у себя в программе исключения, которые могут генерироваться при операциях с плавающей запятой. Это можно сделать в обычном C коде и механизм исключений из С++ не нужен. В данной заметке я приведу код для воспроизведения пяти ошибок и их обработки в ОС linux. #define PRINTF (void)printf #include #include #include #pragma STDC - [Рингтон на звонки жадных и эгоистичных людей](https://outofrange.ru/2015/10/ringtone-for-calls-of-selfish-people/) - Я глубоко симпатизирую Петру Мамонову, как талантливому и искреннему человеку. На Эхе Москвы он ведет передачу "Золотая полка", которую сам и анонсирует. Делает он это так органично, что я решил вырезать часть анонса для установки в качестве рингтона. С таким звуковым сопровождением перед разговором вы никогда не забудете, с кем имеете дело :) Выкладываю результат - [Прокачиваем плагин NextGEN Gallery](https://outofrange.ru/2015/09/pimping-plugin-nextgen-gallery/) - В этой заметке я расскажу, как мне удалось научить галереи NextGen обрабатывать скроллинг мыши и переключать фотографии. - [Проделки Мегафона](https://outofrange.ru/2015/05/tricks-of-megafon/) - На днях мне позвонил старый знакомый-пенсионер. Возраст в данном случае важен: человек далек от разных новомодних услуг мобильной связи. Тем не менее, номер его не определился (и мой, и его номер на Мегафоне). Как и следовало ожидать, он не подключал себе антиопределитель номера или как там это называется. Зато через пару минут после окончания звонка - [True friend](https://outofrange.ru/2015/08/true-friend/) - На днях решил для разминки перевести вот этот рассказ: История о настоящем и самом преданном друге. Довести до ума помогла знакомая. Gillian, thanks for polishing this text! ======== A man with a German shepherd dog named Weiss often visited our animal clinic. The dog was heavenly beautiful and very intelligent. He had been trained as - [В поисках производительности](https://outofrange.ru/2015/08/in-search-of-performance/) - В поисках производительности — как мы сократили время каждого POST запроса на 200 мс Перевод статьи. Во время работы в нашей инструментальной панели Pro мы заметили, что поисковые запросы обслуживаются 300 мс. У нас в команде есть сотрудники, которые использовали Elasticsearch для обработки гораздо больших наборов данных, и они были удивлены тем, как медленно обрабатываются - [Пример использования antlr 4](https://outofrange.ru/2015/06/antlr4-for-preprocessing/) - В этой заметке я рассмотрю использование antlr версии 4. Разбирать будем определения макросов для языка С/С++ и сделаем упрощенный препроцессинг — замену в теле макросов параметров на их значения. Упрощения касаются обработки пробелов — пробелы не пропускаются инструкцией skip. В первую очередь из-за того, что пробелы могут быть в теле/описании макроса: «(X) * (X)». Тело - [Там, где нас нет - Северная Ирландия](https://outofrange.ru/2015/05/northern-ireland/) - Рассказ о трехнедельной поездке в Северную Ирландию с полным погружением в язык и культуру этой страны. - [Особенности использования плагина jasperreports-maven-plugin в CentOS](https://outofrange.ru/2015/05/jasperreports-maven-plugin-in-centos/) - Третьего дня понадобилось под CentOS мавеном собрать проект, в котором задействован плагин jasperreports-maven-plugin. Собирал как положено — мавен 3.3.3 и jdk 1.8.0. Сборка начала валиться с ошибкой: [ERROR] class file has wrong version 52.0, should be 50.0 Это навело на мысль, что плагин ищет джаву вовсе не в переменной окружения JAVA_HOME. Для начала выставил еще - [Привет, мир!](https://outofrange.ru/2014/10/hello-world/) - День рождения сайта. ## Страницы - [Об авторе](https://outofrange.ru/about-the-author/) - Меня зовут Дмитрий Крюков. Профиль Stackoverflow Профиль GitHub Сайт, посвященный DYI и лазерной резке Профиль в Instagram Профиль Twitter Профиль Вконтакте Контактный адрес почты | Contact email - [Ссылки/Resources](https://outofrange.ru/useful-links/) - https://career.guru99.com/ ## Рубрики - [Без рубрики](https://outofrange.ru/category/without-category/) - [Программирование](https://outofrange.ru/category/programming/) - [Linux](https://outofrange.ru/category/linux/) - [Тестирование](https://outofrange.ru/category/testing/) - [Обнинск](https://outofrange.ru/category/obninsk/) - [Администрирование](https://outofrange.ru/category/administration/) - [Тенденции в IT](https://outofrange.ru/category/it-trends/) - [Сделай сам](https://outofrange.ru/category/do-it-yourself/) - [Путешествия](https://outofrange.ru/category/travels/) - [Юмор](https://outofrange.ru/category/yumor/) ## Метки - [java](https://outofrange.ru/tag/java/) - [C++](https://outofrange.ru/tag/cpp/) - [opensource](https://outofrange.ru/tag/opensource/) - [shell](https://outofrange.ru/tag/shell/) - [maven](https://outofrange.ru/tag/maven/) - [linux](https://outofrange.ru/tag/linux-2/) - [php](https://outofrange.ru/tag/php/) - [javascript](https://outofrange.ru/tag/javascript/) - [python](https://outofrange.ru/tag/python/) - [perl](https://outofrange.ru/tag/perl/) - [с](https://outofrange.ru/tag/s/) - [gdb](https://outofrange.ru/tag/gdb/) - [video](https://outofrange.ru/tag/video/) - [git](https://outofrange.ru/tag/git/) - [automation](https://outofrange.ru/tag/automation/) - [http](https://outofrange.ru/tag/http/) - [https](https://outofrange.ru/tag/https/) - [netty](https://outofrange.ru/tag/netty/) - [high load](https://outofrange.ru/tag/high-load/) - [spdy](https://outofrange.ru/tag/spdy/) - [docker](https://outofrange.ru/tag/docker/) - [sctp](https://outofrange.ru/tag/sctp/) - [javacc](https://outofrange.ru/tag/javacc/) - [jenkins](https://outofrange.ru/tag/jenkins/) - [antlr](https://outofrange.ru/tag/antlr/) - [english](https://outofrange.ru/tag/english/) - [ruby](https://outofrange.ru/tag/ruby/) - [wordpress](https://outofrange.ru/tag/wordpress/) - [c](https://outofrange.ru/tag/c/) - [jpa](https://outofrange.ru/tag/jpa/) - [scala](https://outofrange.ru/tag/scala/) - [play](https://outofrange.ru/tag/play/) - [devops](https://outofrange.ru/tag/devops/) - [websocket](https://outofrange.ru/tag/websocket/) - [tomcat](https://outofrange.ru/tag/tomcat/) - [spring](https://outofrange.ru/tag/spring/) - [rest](https://outofrange.ru/tag/rest/) - [hateoas](https://outofrange.ru/tag/hateoas/) - [vaadin](https://outofrange.ru/tag/vaadin/) - [json](https://outofrange.ru/tag/json/) - [laser](https://outofrange.ru/tag/laser/) - [bootstrap](https://outofrange.ru/tag/bootstrap/) - [cnc](https://outofrange.ru/tag/cnc/) - [integration](https://outofrange.ru/tag/integration/) - [postgres](https://outofrange.ru/tag/postgres/) - [sql](https://outofrange.ru/tag/sql/) - [messaging](https://outofrange.ru/tag/messaging/) - [hibernate](https://outofrange.ru/tag/hibernate/) - [ui](https://outofrange.ru/tag/ui/) - [diadoc](https://outofrange.ru/tag/diadoc/) - [diadok](https://outofrange.ru/tag/diadok-2/) - [yacc](https://outofrange.ru/tag/yacc/) - [lex](https://outofrange.ru/tag/lex/) - [bat](https://outofrange.ru/tag/bat/) - [bash](https://outofrange.ru/tag/bash/) - [camel](https://outofrange.ru/tag/camel/) - [vaadin flow](https://outofrange.ru/tag/vaadin-flow/) - [kubectl](https://outofrange.ru/tag/kubectl/) - [kubernetes](https://outofrange.ru/tag/kubernetes/) - [gcp](https://outofrange.ru/tag/gcp/)