Практическое использование 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 »

Опыт использования Fabric для удаленного управления серверами

Представим себе ситуацию, когда при тестировании или администрировании нужно выполнить однотипные действия на нескольких удаленных серверах. Можно использовать для этого shell команду вида:

for hostDN in host1 host2 host3; do ssh "root@$hostDN" 'ls -l /home'; done

Но это не самое удачное решение хотя бы потому, что выполнение команды для разных серверов происходит последовательно. Для асинхронного выполнения можно использовать команду pee, но это тоже не совсем красиво. Я решил попробовать для этих целей Fabric (fabfile.org).
Read more »

Списание сразу двух поездок с многократной карточки на электричку

Тема на первый взгляд не очень близка к IT, но все-таки имеет к ней отношение. В Калужской области обслуживанием электричек занимается Центральная ППК. С 2014 года (если не ошибаюсь) стали доступны карты на 20 и более поездок.

В последний месяц-два было несколько случаев, когда турникет списывал за одно касание две поездки (зимняя одежда иногда мешает двигаться настолько проворно, как требуют понятия турникета).

Тут в любом случае есть ошибка в программном обеспечении турникетов — как можно списать вторую поездку, если никто не прошел? А вот случайна ли эта ошибка — большой вопрос. Может так компенсируется потеря в деньгах — в пересчете на одну поездку карточки везде рекламируются как более выгодные для пассажиров, чем простые билеты?

Дополнение. Судя по всему, надо дождаться пока предыдущий пассажир пройдет через турникет, створки закроются и световая индикация просигнализирует о том, что можно поднести карту.
Если вы попали в такую ситуацию, то передайте в обслуживающую компанию (у нас это Центральная ППК) максимум информации: дата/время списания, станция и с какой стороны стоит турникет, и, возможно, номер карты.