Началось все с того, что я оптимизировал отдачу ошибки 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 и переиспользовали его эффективно или закрывали бы неиспользуемые соединения.
Павел @nod
Пользователь
Практическое применение DNSSEC
10 мин
65KТуториал
В статье описываются недостатки существующей структуры DNS, полный процесс внедрения DNSSEC на примере доменов .com и .org, процедура создания валидного самоподписанного SSL-сертификата подписанного с помощью DNSSEC.
+74
Сервис для удобного встраивания контента 200+ сервисов в свой сайт/блог
2 мин
2.5KСегодня утром наткнулся на информацию об интересном сервисе Embedly (забегая наперед, скажу, что протестировал этот сервис на своем блоге на Wordpress, все работает), который позволяет легко встраивать контент большинства известных сервисов (включая Tumblr, Twitter и прочие). Этот сервис работает с технологией oEmbed, которая существует уже несколько лет. Вероятно, этот сервис первым начал масштабное внедрение данной технологии. К слову, большинство известных сервисов и CMS имеют поддержку oEmbed, так что команде сервиса Embedly оставалось лишь наладить «мостик» между источником контента и площадкой, которая желает разместить контент у себя. Что и было сделано.
+27
Делаем Desire HD из Desire
5 мин
17KБуквально пару дней назад я прочитал пост Вторая жизнь HTC HD2 и задумался, а можно ли сделать Desire HD из моего Desire? Как оказалось, можно, и даже не очень сложно. В общем, поразмыслив некоторое время о плюсах и минусах перехода на HD, я приступил к превращению. После всех действий я получил все возможности Desire HD в корпусе Desire. Никаких проблем и ошибок не возникло.
+83
OAuth: описание протокола простым и понятным языком
16 мин
190K OAuth — популярный протокол, который позволяет социальным сервисам интегрироваться между собой и дает безопасный способ обмена персональной информацией. OAuth может связать между собой 2 сервиса, каждый из которых имеет свою пользовательскую базу — именно их я в данном случае называю «социальными». Когда начинаешь работать с OAuth, первое ощущение — что протокол весьма сложен и избыточен. В этой статье я попытаюсь объяснить основы OAuth человеческим языком.
Вернемся в 2005-й год и представим, что мы пишем социальную сеть. В ней имеется форма импорта контактов из адресной книги GMail. Что нужно для доступа к контактам GMail? Конечно, логин и пароль от ящика. Но если мы попросим ввести их на нашем сайте, пользователь заподозрит неладное. Где гарантия, что мы не сохраняем на сервере введенные пароли? Поэтому нам хочется, чтобы пароль вводился только на сайте GMail, и после этого доступ к контактам через API GMail предоставлялся нашей социальной сети (возможно, на время).
Пример кросс-авторизации
Вернемся в 2005-й год и представим, что мы пишем социальную сеть. В ней имеется форма импорта контактов из адресной книги GMail. Что нужно для доступа к контактам GMail? Конечно, логин и пароль от ящика. Но если мы попросим ввести их на нашем сайте, пользователь заподозрит неладное. Где гарантия, что мы не сохраняем на сервере введенные пароли? Поэтому нам хочется, чтобы пароль вводился только на сайте GMail, и после этого доступ к контактам через API GMail предоставлялся нашей социальной сети (возможно, на время).
+114
Вебдванольные сайты и рейтинги на них. Попытка переосмысления
3 мин
729Всегда считал себя ретроградом. Не успеваешь продифференцировать рост свечек на торте, а мониторы из чёрно-зелёных стали цветными, затем цветными и плоскими, килобайты сменились теми же числами в мегабайтах, гигабайтах, терабайтах… Где-то вдалеке крах доткомов, и вот уже начали желтеть семейные фотографии первых вебдванольных сайтов. Молодой стандарт вебдванольности, не успев вырасти и остепениться, был признан классикой, незаметно переходя в категорию устаревающего ретро. Самое время остановиться и полистать фотоальбом, вернее, ту его часть, где фигурируют рейтинги.
+46
Яндекс.Склонятор
2 мин
25KЯндекс выпустил XML-склонятор русских имен. Сервис по адресу
Склонятор стал 17-м мини-проектом сборника Яндекс.Нано.
P. S. Обнаружил на Хабре единственную девушку-участницу разработки проекта :)
export.yandex.ru/inflect.xml?name=Вася%20Пупкин
берет имя и выдает его склонения в такой форме:
- <?xml version="1.0" encoding="utf-8"?>
- <inflections>
- <original>Вася Пупкин</original>
- <inflection case="1">Вася Пупкин</inflection>
- <inflection case="2">Васи Пупкина</inflection>
- <inflection case="3">Васе Пупкину</inflection>
- <inflection case="4">Васю Пупкина</inflection>
- <inflection case="5">Васей Пупкиным</inflection>
- <inflection case="6">Васе Пупкине</inflection>
- </inflections>
Пользуйтесь на здоровье :)Склонятор стал 17-м мини-проектом сборника Яндекс.Нано.
P. S. Обнаружил на Хабре единственную девушку-участницу разработки проекта :)
+110
Краткий обзор лучших средств для построения графиков и диаграмм.
1 мин
3.7KИз всех наведенных примеров мне больше всего понравился Open Flash Chart. Который я заслужено поставил на первое место. Все остальные, мне показались тоже не плохими но для работы я выбрал именно Open Flash Chart.
Open Flash Chart – FLASH компонент для построения диаграмм. Он имеет много настроек и легко взаемодействует с PHP, Perl, Python, Java, Ruby on Rails, and .Net. Также может читать данные с .txt файлов.
Open Flash Chart – FLASH компонент для построения диаграмм. Он имеет много настроек и легко взаемодействует с PHP, Perl, Python, Java, Ruby on Rails, and .Net. Также может читать данные с .txt файлов.
+21
Open Flash Chart — построение «чартов» или бесплатное решение «Активного графика» на PHP+ActionScript3
3 мин
2.5KНа статью натолкнула соседний топик про pChart — pChart — строим графики и диаграммы на PHP
Сразу опишу со своей стороны минусы:
Минусы ActionScript3 графика:
Вот пример не «кликабельного» графика на примере pChart:
А вот пример Open Flash Chart'a:
Живой пример — Индексация WMZ кошелька (для тех кому интересен как это было реализовано, будет описано если этот топик прокатит. У меня в написании статьей почти 0-лвл :) )
Сразу опишу со своей стороны минусы:
1) Он не активный — тоесть не кликабельный
2) У некоторых как говорится «дизайн желает лучшего»
3) Меньше нагрузка на сервер (график строится на клиентской части)
4) Так как индексации нету, график всегда в РеалТайме
Минусы ActionScript3 графика:
1) Нельзя сделать snapshot (грубо говоря состояние графика, 2-3-4 часа назад или чтоб уменьшить нагрузку на сервере сделать импорт графика в image)
Вот пример не «кликабельного» графика на примере pChart:
А вот пример Open Flash Chart'a:
Живой пример — Индексация WMZ кошелька (для тех кому интересен как это было реализовано, будет описано если этот топик прокатит. У меня в написании статьей почти 0-лвл :) )
+6
11 порталов для выбора Иконок
1 мин
5.4KКоллекция ссылок больших порталов и поисковиков, для выбора всевозможных Иконок(Icons) разного типа. Практически на всех есть широкий выбор размеров.
В этой коллекции я уверен что вы найдете что вам нужно ;)
Ну интересное так точно!!!
1. http://www.iconspedia.com
В этой коллекции я уверен что вы найдете что вам нужно ;)
Ну интересное так точно!!!
1. http://www.iconspedia.com
+98
PHP класс для сборки инклюдов в один файл
2 мин
1.1Kпо мотивам коммента mocksoul из темы PHP: Введение в Zend Framework
В кратце, речь шла о том, что одним из недостатков фреймворка является его концепция «один класс – один файл». И хотя, с моей точки зрения, это не является недостатком архитектуры ZF, это является недостатком PHP. Проблемы начинаются когда PHP начинает инклюдить десятки и сотни файлов, да еще проверять их на once.
Предложенное решение – сборка всех инклюдов в один файл.
Проблема
В кратце, речь шла о том, что одним из недостатков фреймворка является его концепция «один класс – один файл». И хотя, с моей точки зрения, это не является недостатком архитектуры ZF, это является недостатком PHP. Проблемы начинаются когда PHP начинает инклюдить десятки и сотни файлов, да еще проверять их на once.
Предложенное решение – сборка всех инклюдов в один файл.
+5
Китайцы создали собственный картографический сервис
2 мин
1.2KИ вновь китайцы отличились — руководство страны решило, что Поднебесной нужен собственный картографический сервис, по какой-то причине Google Earth китайцам не подходит, и этот сервис на днях был анонсирован. Он получил нехитрое название Map World. Создавали его, в отличии от большинства картографических сервисов, не частные компании, а Государственное бюро геодезии и картографии Китая. Как детище Google, Map World позволяет видеть мир в 2D и 3D, конечно, в данном случае гораздо больше внимания уделялось картографированию Китая, и потом уже других стран.
+13
Как не стать спамером со своей уютной рассылочкой
1 мин
67KПользователь когда-то подписался на рассылку, но уже забыл когда, и главное зачем. Теперь ежедневно к нему падает спам, а по собственному опыту он знает, для того чтобы отписаться нужно зайти по ссылке свой профиль, найти и снять там какую-то галку а главное, помнить свой логин и пароль на давно забытом им сайте.
Его действия? «В спам!»
А по другую сторону баррикад находитесь Вы с вашей уютненькой подписочкой, полезной информацией и очень удобной системой отписки, о которой пользователь так никогда и не узнает.
И вот, с десяток таких «отписок» и гугл будет удобно отсортировывать ваши рассылки в папочку Спам (584), у ВСЕХ ваших подписчиков.
Однако многие из нас уже успели заметить: некоторые письма в Gmail при попытке отметить их «В спам!» САМИ предлагают отписаться от рассылки в один клик.
Эта фича была введена google более года назад, но лишь единицы рассылок научились ей пользоваться. И не удивительно. В рекомендациях по осуществлению массовых рассылок, лишь косвенно упоминается о том, что Вам нужно сделать.
А сделать нужно не многое.
+222
Старые карты по новому
9 мин
4KПорядка 4х месяцев назад мы решили немного обновить карты. Это, вроде бы как, один из разделов на который мы сильно обращаем внимание пользователей.
Это случилось 4 месяца назад, но только сегодня мы, Евгений johnny_palec Емельянов и Антон kashey Корзунов хотели бы рассказать историю создания сервиса «На карте» портала gdeetotdom.ru. В чем-то мы были первопроходцами, в чем-то догоняющими, но в любом случае граблей было собрано немало, а в конечном итоге получился уникальный в своем роде сервис (не слишком заметно, что мы им гордимся?).
Своими изысканиями, ошибками и находками мы и хотели бы поделиться с сообществом хабра-веб-разработчиков. Но, обо всем по порядку.
+5
Ускорение загрузки JavaScript и CSS
3 мин
962Незнаю знаете вы или не знаете, но
1.Пока не загрузятся стили — страница отображаться не будет
2.Пока не загрузиться(и не выполниться) скрипт который вы инклюдите — дальше страница отображаться не будет
3.Из пункта 2 следует что в один момент времени грузиться( и исполняется) только один скрипт.
*Но в зависимости от написания второй скрипт тоже может грузиться(но не исполняться) одновременно с первым… но
4.Один браузер в один момент времени держит только два(или четыре?) соединения с одним хостом.
Тоесть в среднем за загрузку 6ти скриптом браузер сделает 6 запросов к серверу один за другим.
К картинкам это в общем плане не относиться, мозила вроде 4 картинки одновременно тащит.
НО НЕ БОЛЕЕ!
Что же делать?
1.Пока не загрузятся стили — страница отображаться не будет
2.Пока не загрузиться(и не выполниться) скрипт который вы инклюдите — дальше страница отображаться не будет
3.Из пункта 2 следует что в один момент времени грузиться( и исполняется) только один скрипт.
*Но в зависимости от написания второй скрипт тоже может грузиться(но не исполняться) одновременно с первым… но
4.Один браузер в один момент времени держит только два(или четыре?) соединения с одним хостом.
Тоесть в среднем за загрузку 6ти скриптом браузер сделает 6 запросов к серверу один за другим.
К картинкам это в общем плане не относиться, мозила вроде 4 картинки одновременно тащит.
НО НЕ БОЛЕЕ!
Что же делать?
+3
Получаем уведомления от Zabbix в WhatsApp
5 мин
63KТуториал
В сети можно найти множество способов получения уведомлений от Zabbix. Мне показалось удобным получать алерты в WhatsApp — это дешевле, чем sms и, в моем случае, удобнее, чем почта — для получения уведомлений у нас используется корпоративный почтовый аккаунт, доступ к которому извне ограничен, к тому же, алерт может затеряться среди остальных писем.
+24
OAuth на практике. Аутентификация и авторизация пользователей сайта через популярные социалки
14 мин
345KДумаю, не мне одному чрезвычайно надоели ресурсы, требующие регистрации по каждому поводу и без. С обязательной капчей, которая правильно введется только с пятого раза, с подтверждением по е-мейлу, которое обязательно свалится в спам и то — только через сутки. Придумывать каждый раз новую пару логин-пароль — забудется, вводить одно и то же на всех сайтах — небезопасно. Местами прокатывают пары вида «qwerty:qwerty» или «login:password», но, увы, далеко не везде. Надоело. Не счесть, сколько раз я, увидев надпись «только зарегистрированный пользователь может ****», просто кривился и закрывал вкладку, чтобы больше ни разу на этот сайт не заходить. Неужели администраторы ресурсов сами этого не понимают?
+106
Vzmem: визуальное непротиворечивое распределение памяти для OpenVZ
3 мин
2.1KВ какой-то момент мне надоело высчитывать с калькулятором значения VMGUARPAGES и PRIVVMPAGES для OpenVZ и следить, чтобы они были согласованы для разных виртуальных машин (например, чтобы физическая память распределялась между машинами непротиворечивым образом, и одна машина не могла «отъесть» физическую память у другой и увести ее в своп, например). И я написал небольшую, но очень удобную «псевдографическую» утилитку, — vzmem, — которой сейчас и хочу поделиться. Надеюсь, она кому-нибудь пригодится.
Vzmem — это утилита командной строки, которая позволяет «визуально» распределять физическую память между несколькими виртуальными машинами OpenVZ так, чтобы одна машина «не залезала» на другую. Т.е. если нужно увеличить память для какой-то из машин, всегда видно, откуда эту память требуется «откусить»: от одной из существующих машин или от пула свободных блоков.
Как использовать dklab_vzmem
Vzmem — это утилита командной строки, которая позволяет «визуально» распределять физическую память между несколькими виртуальными машинами OpenVZ так, чтобы одна машина «не залезала» на другую. Т.е. если нужно увеличить память для какой-то из машин, всегда видно, откуда эту память требуется «откусить»: от одной из существующих машин или от пула свободных блоков.
+23
Сумбурные заметки про python и django
5 мин
47KНакопилось несколько маленьких заметок/советов про python и django, которые на отдельные топики не тянут, поэтому публикую все сразу.
Под катом:
Под катом:
- как упростить код вьюх ровно в 2 раза
- легкий способ рисования графиков
- почему Ian Bicking воскликнул «Cool!»
- приложения для ВКонтакте на django за 5 минут
- хорош ли pymorphy?
- пара фишек насчет выкладки пакетов на pypi
- что общего между декораторами и with-контекст-менеджерами
- принимаем оплату на django-сайтах
- показываем Яндекс.Карту для заданного адреса
+147
Веб-консоль на PHP
1 мин
37KКак-то я уже писал о веб-консоли через которую можно управлять Git-ом. Теперь же я решил развить её и сделать универсальную консоль.
+23
Информация
- В рейтинге
- Не участвует
- Откуда
- Казахстан
- Дата рождения
- Зарегистрирован
- Активность