вчера в 14:54
Началось все с того, что я оптимизировал отдачу ошибки
HTTP 408 Request Timeout в сервере приложений
Impress, работающем на
Node.js. Как известно, у нодовского
http.Server есть событие timeout, которое должно вызываться для каждого открытого сокета, если тот не закрылся за указанное время. Хочу уточнить, что не для каждого запроса т.е. не для каждого события request, функция которого имеет два аргумента (req, res), а именно для каждого сокета. Через один сокет может последовательно поступить много запросов в режиме
keep-alive. Если мы задаем это событие, через server.setTimeout(2 * 60 * 1000, function(socket) {...}) то должны сами уничтожать сокет socket.destroy(). Но если не установить свой обработчик, то http.Server имеет встроенный, который уничтожит сокет через 2 минуты автоматически. На этом самом таймауте можно отдать ошибку 408 и считать инцидент исчерпанным. Если бы не одно но… С удивлением я обнаружил, что событие timeout вызывается и для тех сокетов, которые подвисли и для уже получивших ответ и для закрытых клиентской стороной, вообще для всех, находящихся в режиме keep-alive. Это странное поведение оказалось достаточно сложным, и я расскажу об этом ниже. Можно было бы вставить одну проверку в событие timeout, но со своим идеализмом я не удержался и полез исправлять баг на уровень глубже. Оказалось, что в http.Server режим keep-alive реализован не то что не по RFC, а откровенно не дописан. Вместо отдельного timeout для соединения и отдельного keep-alive timeout, там все на одном таймауте, который реализован на быстрых псевдо-таймерах (enroll/unenroll), но задан по умолчанию в 2 минуты. Это было бы не так страшно, если бы браузеры хорошо работали с keep-alive и переиспользовали его эффективно или закрывали бы неиспользуемые соединения.
сегодня в 00:11
Поскольку никаких публичных заявлений касательно взлома PS4 не поступало уже давно, настало время нарушить тишину и рассказать немного о том, как далеко зашел прогресс в отношении взлома PS4, а так же о причинах, которые мешают продвинуться дальше.
В данной статье я затрону некоторые принципы безопасности, касающиеся всех современных систем, а также поделюсь своими находками, сделанными благодаря выполнению
ROP-тестов на моей PS4.
Если вы плохо знакомы с применением эксплойтов, вам cледует сначала прочитать
мою прошлую статью про взлом игр DS с помощью уязвимости целостности стека (
stack smash) в файлах сохранений.
Загрузить всё необходимое для собственных экспериментов можно
здесь, на данный момент поддерживается исключительно прошивка 1.76.
вчера в 13:46
Сегодня на MS Windows 7 и 8.1 прилетели обновления
KB3080149 и
KB3075249. Телеметрическая информация передаётся на следующие сервера:
vortex-win.data.microsoft.com
settings-win.data.microsoft.com
Передача осуществляется через TCP по порту 443 с использованием SSL.
Для
параноиков людей, беспокоящихся о несанкционированной передаче информации Microsoft (далее возможно и третьим лицам) предлагаю добавить следующие строчки в файл
hosts (
%windir%\System32\drivers\etc\hosts):
127.0.0.1 vortex-win.data.microsoft.com
127.0.0.1 settings-win.data.microsoft.com
сегодня в 03:42
Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
вчера в 23:36
Предлагаем вашему вниманию подборку с ссылками на полезные ресурсы, интересные материалы и IT-новости
вчера в 14:25
Иногда (редко, но все-же) возникает потребность что-то дописать или переделать в ядре всеми нами любимого линукса. И тогда возникает вопрос: А как все эти изменения запустить и проверить быстро и без перекуров?
Одно дело, если мы можем организовать нашу новую функциональность в виде модуля, тогда нам довольно просто можно тестировать его без перезагрузки самого ядра, простым включением и выключением через insmod. Но что делать, если концепция модульности неприменима? Например, как в моем случае, когда потребовалось добавить новую подсистему контрольных групп (cgroups) для
Jet9 и нужно было перезапускать ядро каждый раз, чтобы проверить внесенные изменения?
вчера в 15:05
На этой неделе получился большой дайджест – более 50 материалов про виртуальную реальность, про новый Android, который теперь маршмэллоу, про Sailfish OS, про борьбу с Google Play и поиск в магазине, про нестандартные способы монетизации приложений и 19 метрик, о которых вы, возможно, не знали.
вчера в 17:59
Выбор языка программирования для начинающего разработчика – достаточно стрессовое занятие. Не факт, что популярный сейчас язык останется таковым через год. Еще менее вероятно, что его знание поможет вам получить более престижную работу.
Однако довольно интересно наблюдать за тем, какие языки и технологии разработчики выбирают в ситуации, когда им предоставляют для этого полную свободу – когда они пишут не то, что требует от них начальник, а работают над собственным проектом без какой-либо конкретной цели.
Как, например, на хакатоне.
сегодня в 09:15
Всего десять лет назад значительная часть frontend-разработки представляла собой верстку макетов в Photoshop и борьбу с кроссбраузерной несовместимостью. Кажется, что это было вчера. А сегодня frontend — одно из самых динамично развивающихся направлений, в котором инструменты и практики меняются каждые полгода, а разработчикам еще есть куда привносить удачные подходы и решения из других областей. Как я уже неоднократно
писал, конференции — это не способ узнать что-то новое. Это способ поговорить с интересными людьми на интересные темы. В ближайшую субботу организаторы FUNC предоставляют поистине уникальную возможность пообщаться с лидерами frontend-сообществ из разных стран. Конференция пройдет в стенах крупной ивент-площадки в офисе Mail.Ru, с огромными залами и вкусным кофе. План мероприятия под катом, участие бесплатное, но регистраций осталось не так много. Присоединяйтесь!
сегодня в 10:04
* от переводчика: я долго думал над тем, как перевести на русский язык глагол «to grok». С одной стороны, это слово переводится как «понять» или «осознать», а с другой стороны, при переводе романа Роберта Хайнлайна «Чужак в чужой стране» (в котором это слово впервые и появилось на свет), переводчики сделали из него русское «грокать». Роман я не читал, поэтому счёл, что есть у этого слова какие-то смысловые оттенки, которые русскими аналогами не передавались, а посему в своём переводе использовал ту же самую кальку с английского.
RxJava — это, сейчас, одна из самых горячих тем для обсуждения у Android-программистов. Единственная проблема состоит в том, что понять самые её основы, если вы не сталкивались ни с чем подобным, может быть довольно затруднительно. Функциональное реактивное программирование довольно сложно понять, если вы пришли из императивного мира, но, как только вы разберётесь с ним, вы поймёте, насколько же это круто!
Я постараюсь дать вам некое общее представление об RxJava. Задача этого цикла статей состоит не в том, чтобы объяснить всё вплоть до последней запятой (вряд ли я смог бы это сделать), но, скорее в том, чтобы заинтересовать вас RxJava, и тем, как она работает.