Пришло время затронуть тему создания парсеров на java. Для этого воспользуемся утилитой javacc. Update. Плагин Вордпресса для подсвечивания кода стал безнадежно портить исходники — добавлять закрывающие теги там, где они не нужны, дефолтные значения у того, что он считает атрибутами тегов. Неискаженные исходники, адаптированные к javaCC версии 7.0.9 доступны тут: исходники За основу взята эта […]
Archive for the ‘Программирование’ Category
Простые SCTP клиент и сервер на java


Как только вы начинаете искать работающий java код для этих классов, то получаете в выдаче устаревшие примеры (сомневаюсь, что они работали уже на момент публикации). В этой заметке я разберу пример простых клиента и сервера для протокола SCTP и типовые ошибки при сборке и запуске. Исключение вида java.lang.UnsupportedOperationException: libsctp.so.1: cannot open shared object file: No […]

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


В данной заметке я рассмотрю использование связки lex + yacc (с небольшими доработками указания справедливы и для flex + Bizon). В свое время я перелопатил много статей по синтаксическому разбору, но большинство из них (самые частые — переводные статьи про установку температуры нагревателя) не объясняют как расправиться с рекурсией или сделать чтение из файла вместо […]
Как обнаружить прозрачный прокси (transparent proxy)


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


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

HTTPS прокси на netty


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

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


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

Docker Hub и автоматизация


Затрагивая тему использования Docker невозможно не коснуться использования Docker Hub и Dockerfiles. В этой заметке я расскажу как их можно использовать для автоматизации. Ознакомительная статья тут: Знакомство с Docker в RedHat 7 Docker Hub Если вы использовали Docker, то скорее всего использовали не зная того и Docker Hub. Он используется для хранения образов. Если вы […]
Java 7: особенности обработки даты при использовании Y в последнюю неделю года


Использование заглавной буквы «Y» для отображения даты было представлено в java 7. И, как оказывается, тут есть подводный камень: этот способ отображения может вывести дату в январе не 2014, а 2015 года. К примеру, для даты 2014/29/12 формат «YYYY/MM/dd» выдаст 2015/12/29. Ошибка происходит при выполнении двух условий: — строка формата содержит Y — для форматирования […]
Как сделать CSV файл совместимым с Excel


Для обмена данными многие приложения используют формат CSV. Этот формат стал своего рода стандартом и к нему выработаны требования. Перечень требований на английском (CSV well formedness): Требования к CSV В данной заметке я расскажу, как исправить нарушение требования к экранированию двойных кавычек, которое может повлечь лишние колонки при импорте данных в Excel. Будет использован небольшой […]