Публикации

вчера в 14:54

Как исправить ошибку в Node.js и нечаянно поднять производительность в 2 раза

Началось все с того, что я оптимизировал отдачу ошибки 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 и переиспользовали его эффективно или закрывали бы неиспользуемые соединения.
16155
180
сегодня в 00:11

Анализ защиты Sony PlayStation 4 перевод

image

Поскольку никаких публичных заявлений касательно взлома PS4 не поступало уже давно, настало время нарушить тишину и рассказать немного о том, как далеко зашел прогресс в отношении взлома PS4, а так же о причинах, которые мешают продвинуться дальше.

В данной статье я затрону некоторые принципы безопасности, касающиеся всех современных систем, а также поделюсь своими находками, сделанными благодаря выполнению ROP-тестов на моей PS4.

Если вы плохо знакомы с применением эксплойтов, вам cледует сначала прочитать мою прошлую статью про взлом игр DS с помощью уязвимости целостности стека (stack smash) в файлах сохранений.

Загрузить всё необходимое для собственных экспериментов можно здесь, на данный момент поддерживается исключительно прошивка 1.76.
16598
99
вчера в 13:46

Microsoft добавил средство сбора телеметрии в Windows 7/8/8.1

Сегодня на 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
56098
361
8xandr 45,6
сегодня в 03:42

PHP-Дайджест № 68 – интересные новости, материалы и инструменты (27 июля – 24 августа 2015)



Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
5241
63
pronskiy 55,2
вчера в 23:36

Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №173 (16 — 23 августа 2015)

Предлагаем вашему вниманию подборку с ссылками на полезные ресурсы, интересные материалы и IT-новости


вчера в 14:25

Настройка окружения для тестирования изменений в ядре Linux

image

Иногда (редко, но все-же) возникает потребность что-то дописать или переделать в ядре всеми нами любимого линукса. И тогда возникает вопрос: А как все эти изменения запустить и проверить быстро и без перекуров?

Одно дело, если мы можем организовать нашу новую функциональность в виде модуля, тогда нам довольно просто можно тестировать его без перезагрузки самого ядра, простым включением и выключением через insmod. Но что делать, если концепция модульности неприменима? Например, как в моем случае, когда потребовалось добавить новую подсистему контрольных групп (cgroups) для Jet9 и нужно было перезапускать ядро каждый раз, чтобы проверить внесенные изменения?
7032
82
dimcha 11,2
вчера в 15:05

Дайджест интересных материалов для мобильного разработчика #117 (17-23 августа)

На этой неделе получился большой дайджест – более 50 материалов про виртуальную реальность, про новый Android, который теперь маршмэллоу, про Sailfish OS, про борьбу с Google Play и поиск в магазине, про нестандартные способы монетизации приложений и 19 метрик, о которых вы, возможно, не знали.

6082
43
RoboForm 30,4
вчера в 17:59

Какие технологии чаще всего используются на хакатонах перевод



Выбор языка программирования для начинающего разработчика – достаточно стрессовое занятие. Не факт, что популярный сейчас язык останется таковым через год. Еще менее вероятно, что его знание поможет вам получить более престижную работу.

Однако довольно интересно наблюдать за тем, какие языки и технологии разработчики выбирают в ситуации, когда им предоставляют для этого полную свободу – когда они пишут не то, что требует от них начальник, а работают над собственным проектом без какой-либо конкретной цели.

Как, например, на хакатоне.
13480
101
frii_fond 31,2
сегодня в 09:15

Конференция Frontend Union Conf в эту субботу

Всего десять лет назад значительная часть frontend-разработки представляла собой верстку макетов в Photoshop и борьбу с кроссбраузерной несовместимостью. Кажется, что это было вчера. А сегодня frontend — одно из самых динамично развивающихся направлений, в котором инструменты и практики меняются каждые полгода, а разработчикам еще есть куда привносить удачные подходы и решения из других областей. Как я уже неоднократно писал, конференции — это не способ узнать что-то новое. Это способ поговорить с интересными людьми на интересные темы. В ближайшую субботу организаторы FUNC предоставляют поистине уникальную возможность пообщаться с лидерами frontend-сообществ из разных стран. Конференция пройдет в стенах крупной ивент-площадки в офисе Mail.Ru, с огромными залами и вкусным кофе. План мероприятия под катом, участие бесплатное, но регистраций осталось не так много. Присоединяйтесь!

1554
7
eyeofhell 22,5
сегодня в 10:04

Грокаем* RxJava, часть первая: основы перевод

* от переводчика: я долго думал над тем, как перевести на русский язык глагол «to grok». С одной стороны, это слово переводится как «понять» или «осознать», а с другой стороны, при переводе романа Роберта Хайнлайна «Чужак в чужой стране» (в котором это слово впервые и появилось на свет), переводчики сделали из него русское «грокать». Роман я не читал, поэтому счёл, что есть у этого слова какие-то смысловые оттенки, которые русскими аналогами не передавались, а посему в своём переводе использовал ту же самую кальку с английского.

RxJava — это, сейчас, одна из самых горячих тем для обсуждения у Android-программистов. Единственная проблема состоит в том, что понять самые её основы, если вы не сталкивались ни с чем подобным, может быть довольно затруднительно. Функциональное реактивное программирование довольно сложно понять, если вы пришли из императивного мира, но, как только вы разберётесь с ним, вы поймёте, насколько же это круто!
Я постараюсь дать вам некое общее представление об RxJava. Задача этого цикла статей состоит не в том, чтобы объяснить всё вплоть до последней запятой (вряд ли я смог бы это сделать), но, скорее в том, чтобы заинтересовать вас RxJava, и тем, как она работает.
945
18