Archive for the ‘Программирование’ Category

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

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

Простые 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. Будет использован небольшой […]