Как стать автором
Обновить
11
0

Пользователь

Отправить сообщение

Производительность без цикла событий

Время на прочтение10 мин
Количество просмотров16K


Эта статья основана на материалах презентации, которую я представил в этом году на конференции OSCON. Я отредактировал текст, чтобы он был более лаконичным, а заодно учёл ту обратную связь, что я получил после своего выступления.

Про Go часто говорят, что он хорош для серверов: здесь есть статические бинарники (static binaries), развитый concurrency, высокая производительность. В этой статье мы поговорим о двух последних пунктах: о том, как язык и среда выполнения (runtime) ненавязчиво позволяют Go-программистам создавать легко масштабируемые серверы и не беспокоиться из-за управления потоками (thread) или блокирующих операций ввода/вывода.
Читать дальше →
Всего голосов 39: ↑30 и ↓9+21
Комментарии23

Быстрое веб-приложение — трепанация сети

Время на прочтение10 мин
Количество просмотров33K
Психология — интересная и иногда полезная наука. Многочисленные исследования показывают, что задержка в отображении веб-страницы дольше 300 мс заставляет пользователя отвлечься от веб-ресурса и задуматься: «что за хрень?». Поэтому УСКОРИВ веб-проект до психологически невоспринимаемых значений, можно ПРОСТО удерживать пользователей дольше. И именно поэтому бизнес готов тратиться на скорость: $80М — чтобы уменьшить latenсy всего на 1 мс.



Однако, чтобы ускорить современный веб-проект, придется кровушки пустить и основательно покопаться в этой теме — поэтому базовое знание сетевых протоколов приветствуется. Зная принципы, можно без особых усилий ускорить свою веб-систему на сотни миллисекунд всего за несколько подходов. Ну что, готовы сэкономить сотни миллионов? Наливайте кофе.
Читать дальше →
Всего голосов 83: ↑66 и ↓17+49
Комментарии42

Конспект по веб-безопасности

Время на прочтение3 мин
Количество просмотров65K
Простите, но накипело.
Много шишек уже набито на тему безопасности сайтов. Молодые специалисты, окончившие ВУЗы, хоть и умеют программировать, но в вопросе безопасности сайта наступают на одни и те же грабли.

Этот конспект-памятка о том, как добиться относительно высокой безопасности приложений в вебе, а также предостеречь новичков от банальных ошибок. Список составлялся без учета языка программирования, поэтому подходит для всех. А теперь позвольте, я немного побуду КО.


Итак, каким должен быть безопасный сайт?

Читать дальше →
Всего голосов 120: ↑104 и ↓16+88
Комментарии163

Масштабировать просто. Часть вторая — кэширование

Время на прочтение4 мин
Количество просмотров15K
В предыдущей части мы говорили об основных архитектурных принципах построения масштабируемых порталов. Сегодня поговорим об оптимизации правильно построенного портала. Итак: первый вид оптимизации — локальный кэш.

Читать дальше →
Всего голосов 28: ↑23 и ↓5+18
Комментарии8

Вы и ваша работа *

Время на прочтение40 мин
Количество просмотров816K
Длинный материал. Время чтения – около 40 минут.

image

Доктор Ричард Хэмминг, профессор морской школы Монтерея в штате Калифорния и отставной учёный Bell Labs, прочёл 7 марта 1986 года очень интересную и стимулирующую лекцию «Вы и ваши исследования» переполненной аудитории примерно из 200 сотрудников и гостей Bellcore на семинаре в серии коллоквиумов в Bell Communications Research. Эта лекция описывает наблюдения Хэмминга в части вопроса «Почему так мало учёных делают значительный вклад в науку и так многие оказываются в долгосрочной перспективе забыты?». В течение своей более чем сорокалетней карьеры, тридцать лет которой прошли в Bell Laboratories, он сделал ряд прямых наблюдений, задавал учёным очень острые вопросы о том, что, как, откуда, почему они делали и что они делали, изучал жизни великих учёных и великие достижения, и вёл интроспекцию и изучал теории креативности. Эта лекция о том, что он узнал о свойствах отдельных учёных, их способностях, чертах, привычках работы, мироощущении и философии.
Читать дальше →
Всего голосов 239: ↑229 и ↓10+219
Комментарии127

Функциональное программирование для всех

Время на прочтение33 мин
Количество просмотров352K

Доброго времени суток. Это статья — перевод заинтересовавшего меня поста в блоге аспиранта Университета штата Нью-Йорк в Стоуни-Брук. Статья в доступной форме описывает основные концепции функционального программирования, их преимущества и недостатки. Думаю она будет полезна широкому кругу читателей, которые сомневаются, нужно ли им углубляться в мир функционального программирования или нет. Пожелания, предложения и замечания по переводу и терминологии принимаются по личной почте.

Мнение переводчика может иногда не совпадать с мнением автора, но переводить статью было крайне занимательно.

UPD: альтернативный вариант перевода вы можете найти на rsdn (спасибо flamingo за ссылку).
Читать дальше →
Всего голосов 188: ↑181 и ↓7+174
Комментарии151

Whiteboarding (пишем код на доске на собеседованиях)

Время на прочтение3 мин
Количество просмотров19K


Почти наверняка, на собеседовании Вам придётся писать код на доске. Несмотря на то, что данный подход часто критикуют, он всё еще популярен у таких технических гигантов, как Google, Facebook, Microsoft, Amazon, а так же, во многих стартапах.

В данной статье я не буду обсуждать жизнеспособность данного приёма (однако, считаю, что он полезен, т.к. позволяет посмотреть на то, как кандидат справляется с проблемами). Вместо этого, давайте рассмотрим типичные ошибки при прохождении интервью.
Читать дальше →
Всего голосов 33: ↑20 и ↓13+7
Комментарии0

Инфраструктура и жизненный цикл разработки веб-проекта

Время на прочтение11 мин
Количество просмотров57K
Когда проект маленький, особых проблем с ним не возникает. Список задач можно вести в текстовом файле (TODO), систему контроля версий, по большому счёту, можно и не использовать, для раскладки файлов на живой сервер их можно просто скопировать (cp/scp/rsync) в нужную директорию, а ошибки всегда можно посмотреть в лог-файле. Глупо было бы, например, для простенького сервиса с двумя скриптами и тремя посетителями в день поднимать полноценную систему управления конфигурациями серверов.

С ростом проекта требования растут. Становится неудобно держать в TODO-файле несколько десятков задач и багов: хочется приоритетов, комментариев, ссылок. Появляется необходимость в системе контроля версий, специальных скриптах/систем для раскладки кода на сервер, системе мониторинга. Ситуация усугубляется, когда над проектом работает несколько человек, а уж когда проект разрастается до нескольких серверов, появляется полноценная инфраструктура («комплекс взаимосвязанных обслуживающих структур или объектов, составляющих и/или обеспечивающих основу функционирования системы», Wikipedia).

На примере нашего сервиса "Календарь Mail.ru" я хочу рассказать о типичной инфраструктуре и жизненном цикле разработки среднего по размерам веб-проекта в крупной интернет-компании.

Срыв покровов
Всего голосов 102: ↑93 и ↓9+84
Комментарии46

Python изнутри. Введение

Время на прочтение7 мин
Количество просмотров99K
Boa constrictor1. Введение
2. Объекты. Голова
3. Объекты. Хвост
4. Структуры процесса

Помимо изучения стандартной библиотеки, всегда интересно, а иногда и полезно, знать, как язык устроен изнутри. Андрей Светлов (svetlov), один из разработчиков Python, советует всем интересующимся серию статей об устройстве CPython. Представляю вам перевод первого эпизода.

Мой друг однажды сказал мне: «Знаешь, для некоторых людей язык C — это просто набор макросов, который разворачивается в ассемблерные инструкции». Это было давно (для всезнаек: да, ещё до появления LLVM), но эти слова хорошо мне запомнились. Может быть, когда Керниган и Ритчи смотрят на C-программу, они на самом деле видят ассемблерный код? А Тим Бёрнерс-Ли? Может он сёрфит интернет по-другому, не так, как мы? И что, в конце концов, Киану Ривз видел в том жутком зелёном месиве? Нет, правда, что, чёрт побери, он там видел?! Эм… вернёмся к программам. Что видит Гвидо ван Россум, когда читает программы на Python?
Узнать ответ
Всего голосов 98: ↑93 и ↓5+88
Комментарии60

Архитектура высоконагруженных приложений. Масштабирование распределенных систем. Часть первая

Время на прочтение18 мин
Количество просмотров101K
Некоторое время назад зам.главы московского офиса разработки Badoo Алексей Рыбак и ведущие IT-Компот записали выпуск подкаста «Архитектура высоконагруженных приложений. Масштабирование распределенных систем".

Сейчас мы сделали расшифровку подкаста, привели ее в удобный для чтения вид и разбили на 2 части.

О чем говорили в первой части:
  • Общая информация о проекте Badoo: стек технологий, характер и объем нагрузки, посещаемость.
  • Горизонтальное масштабирование проекта:

— веб-сервера, кеширование, мониторинг etc;
— подводные камни при масштабировании проекта;
— масштабирование баз данных, как правильно делать шардинг.

Читать расшифровку подкаста
Всего голосов 82: ↑80 и ↓2+78
Комментарии40

Устранение утечек памяти в приложении на Питоне

Время на прочтение7 мин
Количество просмотров37K
imageНедавно мне довелось разобраться и устранить несколько утечек памяти в популярном фреймворке Торнадо. Не беда, если вы никогда его не использовали, потому что описанное будет мало связано с ним. Рассказать я хочу о методах, которые я использовал для поиска и устранения утечек.

Все сказанное будет по большей части справедливо только для самой популярной реализации Питона — CPython. Как известно, в нем есть два механизма освобождения памяти. Первый из них — подсчет ссылок. Каждый раз, когда вы явно или не явно создаете новый объект, его счетчик ссылок равен единице. Если вы присваиваете этот объект новой переменной или передаете в качестве аргумента, его счетчик ссылок увеличивается. При выходе из функции количество ссылок на объекты, которые были в локальных переменных и аргументах, уменьшается. Если для какого-то объекта количество ссылок становится равным нулю, он немедленно уничтожается.

Это схема отлично работает до тех пор, пока не появляются объекты, ссылающиеся друг на друга. Самый простой пример — узлы какого-то дерева, хранящие ссылки на свои дочерние и родительский узлы. Узлы продолжат ссылаться друг на друга, даже когда не останется других внешних ссылок ни на один из них. Самое неприятное, что такие узлы могут ссылаться на какие-то другие данные и не давать их освободить. Чтобы устранить такие циклические ссылки, в Питоне существует второй механизм освобождения памяти — сборщик мусора. Он запускается время от времени, ставя выполнение остального кода на паузу, и анализирует все неосвобожденные объекты.

Формально, циклические ссылки нельзя назвать утечками: сборка мусора рано или поздно уничтожит такие объекты. Беда только в том, что Питон не может сам определить, когда еще рано, а когда уже поздно. В моем случае система просто прибивала процесс с Питоном, если сборка мусора не начиналась вовремя.
Читать дальше →
Всего голосов 98: ↑95 и ↓3+92
Комментарии8

Простое написание тестов — это не TDD!

Время на прочтение4 мин
Количество просмотров61K
Эта статья представляет собой хороший теоретический материал о TDD для тех, кто об этом ещё ничего не знает.


Читать дальше →
Всего голосов 88: ↑74 и ↓14+60
Комментарии121

Комфортное освещение для работы и отдыха

Время на прочтение5 мин
Количество просмотров347K
Мне редко встречались пространства с продуманным искусственным освещением, часто лампы светят в глаза, помещение недостаточно освещено и цвета предметов выглядят тусклыми или искажаются. Кроме того, освещение часто дает страшные тени на лицах. Я постарался разобраться в причинах и сделать приятное освещение.

Эта заметка содержит описание общих принципов создания комфортного освещения и фактическую реализацию бюджетного освещения жилой мастерской.



Читать дальше →
Всего голосов 67: ↑57 и ↓10+47
Комментарии95

Курс лекций «Стартап». Питер Тиль. Стенфорд 2012. Занятие 5

Время на прочтение21 мин
Количество просмотров113K

Этой весной, Питер Тиль (Peter Thiel), один из основателей PayPal и первый инвестор FaceBook, провел курс в Стенфорде — «Стартап». Перед началом Тиль заявил: «Если я сделаю свою работу правильно, это будет последний предмет, который вам придется изучать».

Один из студентов лекции записывал и выложил транскипт. В данном хабратопике 9e9names переводит пятое занятие. Редактор Astropilot)

Занятие 1: Вызов будущего
Занятие 2: Снова как в 1999?
Занятие 3: Системы ценностей
Занятие 4: Преимущество последнего хода
Занятие 5: Механика мафии
Занятие 6: Закон Тиля
Занятие 7: Следуйте за деньгами
Занятие 8: Презентация идеи (питч)
Занятие 9: Все готово, а придут ли они?
Занятие 10: После Web 2.0
Занятие 11: Секреты
Занятие 12: Война и мир
Занятие 13: Вы — не лотерейный билет
Занятие 14: Экология как мировоззрение
Занятие 15: Назад в будущее
Занятие 16: Разбираясь в себе
Занятие 17: Глубокие мысли
Занятие 18: Основатель — жертва или бог
Занятие 19: Стагнация или сингулярность?
Под катом подбор команды для стартапа
Всего голосов 39: ↑38 и ↓1+37
Комментарии9

WebSockets в Windows 8 Consumer Preview

Время на прочтение8 мин
Количество просмотров4.7K
В Windows 8 CP и Server Beta все клиенты и сервера Microsoft WebSocket, включая IE10, сейчас поддерживают финальную версию протокола IETF WebSocket. Кроме того, IE10 реализует предварительную рекомендацию W3C WebSockets API.

WebSockets стабильны и готовы к тому, чтобы разработчики начали создавать инновационные приложения и сервисы. Эта статья представляет собой простое введение в W3C WebSockets API и ниже расположенный протокол WebSocket. Обновленная демонстрация Flipbook использует последние версии API и протокола.

В моей предыдущей статье я описал сценарии использования WebSockets:
WebSockets позволяют Web-приложениям выполнять доставку нотификаций и обновлений в реальном времени, прямо в браузер. Разработчики столкнулись с проблемами, связанными с необходимостью обходить ограничения персоначальной модели взаимодействия HTTP вида запрос-ответ, чей дизайн не предназначен для сценариев реального времени. WebSockets позволяют браузерам открывать двухсторонний, полнодуплексный канал коммуникаций с сервисами на стороне сервера. Каждая из сторон может использовать этот канал для немедленной доставки данных другой стороне. Сегодня сайты, начиная с социальных сетей и игр, заканчивая финансовыми сайтами, могут предоставить лучшие сценарии реального времени, чем ранее, в идеале используя одну и ту же разметку в различных браузерах.

Со времени публикации той статьи в сентябре 2011 года рабочие группы достигли важного прогресса. Протокол WebSocket теперь стал стандартным протоколом, предложенным IETF. К тому же W3C WebSockets API теперь является кандидатом-рекомендацией W3C.
Читать дальше →
Всего голосов 18: ↑11 и ↓7+4
Комментарии8

Динамическое отображение логов в броузере на Node.js & WebSocket

Время на прочтение3 мин
Количество просмотров4.4K
Динамическое отображение логов в броузере на Node.js & WebSocket

Иногда возникает потребность динамически отслеживать появление новых файлов в определенных папках, а также выводить содеримое лог файлов в окно броузера. Данным упрощенным примером я хочу показать как это можно сделать.

Инструменты и модули для решения

Для серверной части был выбран Node.js. Но похожий пример можно аналогично реализовать и с использованием EM на руби. В данном случае подкупила библиотека Socket.IO, а также несколько простых модулей для работы с файлами.

Читать дальше →
Всего голосов 12: ↑9 и ↓3+6
Комментарии7

Intel Architecture Code Analyzer 2.0.1

Время на прочтение2 мин
Количество просмотров4.7K
Мои потребности в анализе производительности софта на x86 покрывают три тула. Один из них — Vtune XE знаком, наверное, всем, кто сталкивался с оптимизацией.

Второй тул, к сожалению, не столь широко известнен. Он уже упоминался на Хабре в контексте оптимизации AVX кода, но область его применения несколько шире.

Иногда после того, как Vtune нашел самый главный хотспот (а зачастую, разработчик и так его знает), возникает потребность приложить некоторые усилия для уменьшения числа тактов, которые тратятся на его исполнение. Уже почти три года я использую для анализа производительности таких небольших, но критичных участков кода Intel Architecture Code Analyzer.

Пользоваться им просто, вот рекурсивный алгоритм всего лишь из 6 шагов:
1. В соответствующем .c/.cpp файле включается
#include «iacaMarks.h»,
2. dll/so библиотеки IACA кладутся в доступное системе место,
3. в исходник добавляются макросы
IACA_START, IACA_END
соответственно, перед началом и после окончания оптимизируемого кода. Например,
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии6

Записи с летней школы по Metro-дизайну

Время на прочтение1 мин
Количество просмотров15K


Друзья, как вы, наверняка, знаете, буквально в прошедшие выходные (13-14 июля) мы проводили летнюю школу по Metro-дизайну для Windows Phone и Windows 8. Рады сообщить, что записи лекций уже доступны на TechDays!
Под катом ссылки на отдельные лекции
Всего голосов 54: ↑39 и ↓15+24
Комментарии8

Информация

В рейтинге
Не участвует
Откуда
San Jose, California, США
Дата рождения
Зарегистрирован
Активность