В данной заметке я рассмотрю использование связки lex + yacc (с небольшими доработками указания справедливы и для flex + Bizon).
В свое время я перелопатил много статей по синтаксическому разбору, но большинство из них (самые частые — переводные статьи про установку температуры нагревателя) не объясняют как расправиться с рекурсией или сделать чтение из файла вместо используемых по умолчанию стандартных потоков ввода/вывода. Как только встает задача разбора какого-то языка со своими правилами, а не простого конфигурационного файла, то возникает множество вопросов.
Read more »
Практическое использование yacc и lex
Как обнаружить прозрачный прокси (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 и более поездок.
В последний месяц-два было несколько случаев, когда турникет списывал за одно касание две поездки (зимняя одежда иногда мешает двигаться настолько проворно, как требуют понятия турникета).
Тут в любом случае есть ошибка в программном обеспечении турникетов — как можно списать вторую поездку, если никто не прошел? А вот случайна ли эта ошибка — большой вопрос. Может так компенсируется потеря в деньгах — в пересчете на одну поездку карточки везде рекламируются как более выгодные для пассажиров, чем простые билеты?
Дополнение. Судя по всему, надо дождаться пока предыдущий пассажир пройдет через турникет, створки закроются и световая индикация просигнализирует о том, что можно поднести карту.
Если вы попали в такую ситуацию, то передайте в обслуживающую компанию (у нас это Центральная ППК) максимум информации: дата/время списания, станция и с какой стороны стоит турникет, и, возможно, номер карты.