Использование javacc для разбора SQL

Пришло время затронуть тему создания парсеров на java. Для этого воспользуемся утилитой javacc.

Update. Плагин Вордпресса для подсвечивания кода стал безнадежно портить исходники — добавлять закрывающие теги там, где они не нужны, дефолтные значения у того, что он считает атрибутами тегов. Неискаженные исходники, адаптированные к javaCC версии 7.0.9 доступны тут: исходники

За основу взята эта статья с примерами: источник моего вдохновения. В коде примеров исправлены ошибки и теперь они даже собираются 😉
Код доработан и теперь, к примеру, правильно обрабатывает запятую в перечислении: она допустима тогда и только тогда, когда за текущим элементом перечисления есть еще один или несколько элементов. Если для типа данных в скобках указана длина (опциональный параметр), то она тоже будет сохранена в результирующей структуре для описания типа.
Read more »

Простые SCTP клиент и сервер на java

Как только вы начинаете искать работающий java код для этих классов, то получаете в выдаче устаревшие примеры (сомневаюсь, что они работали уже на момент публикации).
В этой заметке я разберу пример простых клиента и сервера для протокола SCTP и типовые ошибки при сборке и запуске.

Исключение вида java.lang.UnsupportedOperationException: libsctp.so.1: cannot open shared object file: No such file or directory лечится установкой библиотеки:
Read more »

Практическое использование yacc и lex

В данной заметке я рассмотрю использование связки lex + yacc (с небольшими доработками указания справедливы и для flex + Bizon).
В свое время я перелопатил много статей по синтаксическому разбору, но большинство из них (самые частые — переводные статьи про установку температуры нагревателя) не объясняют как расправиться с рекурсией или сделать чтение из файла вместо используемых по умолчанию стандартных потоков ввода/вывода. Как только встает задача разбора какого-то языка со своими правилами, а не простого конфигурационного файла, то возникает множество вопросов.
Read more »

Как обнаружить прозрачный прокси (transparent proxy)

Иногда бывает нужно определить наличие такого прокси, допустим, при тестировании вэб-приложений. Непрозрачный прокси обнаруживается достаточно легко по source/dest IP и заголовкам, которые добавляет прокси. Оговорюсь, что мы будем слушать трафик на стороне клиента и сервера OS для анализа.

Итак, обнаружение прозрачного прокси. Для этого надо сделать запрос на заведомо несуществующий IP, к примеру, на 192.168.100.100. Прокси перехватит соединение (connection) и попытается обслужить его. Когда он определит, что не доступен сервер назначения, он, возможно, вернет статус ошибки или просто закроет соединение с клиентом. Большинство браузеров сгенерируют страницу с ошибкой, если они могут соединиться с сервером. В случае, если соединение было принято, но потом закрыто, страница с ошибкой будет отличаться.
Read more »

Пособие по JNI

В принципе java является самодостаточным языком. Но иногда требуется задействовать код, который на низком уровне общается со специфичным аппаратным обеспечением или имеется только на языке C/C++ и его портирование в java проблематично.
В данной заметке я рассмотрю использование JNI (Java Native Interface): мы вызовем в java классе методы, написанный на C, C++ и даже на ассемблере. А из собранной SO библиотеки (работа будет происходить в линукс) мы вызовем методы java класса.
Read more »

И снова про docker

И снова про docker

Вы хотите иметь возможность развернуть свое программное обеспечение в любой системе? В данной заметке я приведу шаги для установки в системе на RedHat 6.4. Для прочих систем указания можно найти тут: Полезная ссылка:

Устанавливаем net-namespaces

Если у вас ядро RHEL/CentOS 6.4 kernel, то нужно будет проапдейтить его. Системы вроде RHEL 7.0, ubuntu 12.04 LTS уже поддерживают эту фичу, так что патчить ядро не придется. net-namespaces обеспечивает работу контейнеров.
Read more »

Здравствуй HTTP/2, прощай SPDY

Http является фундаментальным протоколом в современном интернете. Большинство сайтов используют HTTP 1.1, который был стандартизован еще в 1999 году. С тех пор многое изменилось и сейчас на финишной прямой находится HTTP/2. Команда Chromium собирается обеспечить поддержку HTTP/2 в Chrome 40.

Основные изменения направлены на улучшение производительности. Некоторые ключевые возможности : мультиплексирование, сжатие заголовков, приоретизация и согласование протокола были разработаны ранее в открытом, но не стандартизованном протоколе SPDY.
Read more »

HTTPS прокси на netty

Продолжаем знакомиться с netty. Представим себе такую задачу. Есть компонент системы, которые гоняется в облаке Amazon. Он может принимать HTTPS соединения, и мы хотим этим воспользоваться для шифрования передаваемого трафика. Но другой компонент системы умеет посылать только HTTP запросы и по независящим от нас причинам (к примеру, нет исходников) мы не можем научить его работать с HTTPS. Что тут можно сделать?
Я решил написать на netty своего рода прокси (или mapper), который возьмет на себя шифрование HTTP запросов и расшифровывание HTTPS ответов. Его можно запустить в своей собственной сети и тем самым добиться того, что в публичной сети трафик будет шифрованный.
Read more »

Использование Netty под высокой нагрузкой

Попалась на глаза отличная презентация по Netty: Слайды (для перехода на следующую страницу нажимайте пробел)
Это выжимки/затравка из книги Netty in Action, которая должна выйти в 2015 году.
Read more »

Chromium хочет помечать HTTP сайты как небезопасные особой иконкой

Предложение команды Chrome Security можно прочитать тут: marking-http-as-non-secure
Иконка с навесным замком для https сайтов уже стала привычной. И теперь для http сайтов предлагается новая иконка (я бы сказал, с дискриминационным оттенком). Причем речь идет о том, чтоб сделать это стандартом во всех браузерах. За и против такого подода можно посмотреть здесь: Обсуждение
Read more »