Как только вы начинаете искать работающий java код для этих классов, то получаете в выдаче устаревшие примеры (сомневаюсь, что они работали уже на момент публикации). В этой заметке я разберу пример простых клиента и сервера для протокола SCTP и типовые ошибки при сборке и запуске. Исключение вида java.lang.UnsupportedOperationException: libsctp.so.1: cannot open shared object file: No […]
Archive for the ‘Программирование’ Category
Практическое использование 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. Будет использован небольшой […]
Использование структурной распечатки (pretty-printing) в GDB
Данный механизм в частности позволяет получить содержимое STL классов в удобочитаемой форме. Для примера возьмем такой код: std::string fred(“abc”);std::string fred(“abc”); Если вы попытаетесь распечатаь содержимое переменной fred в GDB, вы увидите кучу недружелюбной и не всегда нужной информации. (gdb) print fred $1 = { static npos = <optimized out="">, _M_dataplus = { <std::allocator<char>> = { […]