Я работаю в довольно интенсивно развивающемся проекте. Мы много эксперементируем с разными инструментами. Иногда приходится инструменты разрабатывать самим. Последний инструментарий, который мне пришлось реализовать самому — это удаленный groovy shell. Если вы незнакомы с ...| Posts on bazhenov.me
Начиная с 70-х годов прошлого века производители микропроцессоров осуществляли экспоненциальный рост производительности, описанный законом Мура. Но достигнув физических ограничений, связанных с резким скачком тока утечки транзисторов и, как следствие, рассеивания теп...| Posts on bazhenov.me
В последнее время начали сравнивать terracotta и memcache. Мне это сравнение кажется некорректным. Бытует мнение что terracotta — это distributed cache1. Это все равно что называть автомобиль “четырехколесным мопедом”, только потому, что он может ездить и у него четыре колеса. Terracotta часто опр...| Posts on bazhenov.me
Задача. Есть биллинг, который аккумулирует данные по операциям. Нужно предоставить интерфейс (программный) для получения отчетов. Каждый отчет может быть параметризирован. Например, получить определенный отчет (скажем начисления за месяц) для какого-то конкретного клие...| www.bazhenov.me
Недавно на работе произошла следующая ситуация, потребовавшая не совсем тривиальной диагностики. Есть Java-приложение, выполняющее пакетную обработку информации. Обработка выполняется последовательно в несколько стадий. Каждая стадия выполняется в нескольких потоках. ...| www.bazhenov.me
Линейный счётчик — это очень простой алгоритм оценки мощности множества. Тем не менее, у него есть одна не очевидная и очень полезная особенность. Побитовая сумма (логическое ИЛИ) двух линейных счётчиков позволяет оценить мощность объединения двух множеств. Например, у ...| www.bazhenov.me
Иногда по долгу службы приходится проводить деструктивные эксперименты. Делаем мы это лишь для того чтобы сделать нашу систему более стабильной и надёжной. Недавно мы провели такой эксперимент, связанный с проверкой алгоритма балансировки внутри поисковой системы. Сут...| www.bazhenov.me
Работая над более менее сложным проектом, приходится поддерживать окружение необходимое для корректного функционирования системы. Нередко это выливается в ситуацию, когда на машине установлено такое количество пакетов и зависимостей, что возникает масса проблем: окру...| www.bazhenov.me
О новых фичах Java 8 было сказано уже довольно много. В основном обсуждают замыкания, Stream’ы, новое API для работы со временем, default-методы в интерфейсах, класс Optional и отсутствие Permanent Generation. Но помимо жирных фич, в Java 8 сильно изменилась стандартная библиотека по перифирии. В час...| www.bazhenov.me
Наивный байесовский классификатор, о котором я уже писал, один из самых простых классификационных алгоритмов. В этой заметке я опишу более сложный алгоритм — метод максимальной энтропии, который, в ряде случаев, может оказаться существенно более точным. К своему удивлен...| www.bazhenov.me
Для использования линейного счетчика необходимо заранее знать приблизительное количество уникальных элементов в потоке. На основании этого количества, а также необходимого вам уровня точности, вычисляется длина битовой маски счетчика. Допустим, вы хотите создать лине...| www.bazhenov.me
Так уж получилось, что последние несколько лет я занимаюсь вопросами, связанными с поиском. Один из проектов, завершенных в прошлом году, был связан с модифицированием архитектуры нашей поисковой системы. В итоге мы получили результаты, которыми, как я считаю, имеет смысл...| www.bazhenov.me
Допустим, вам необходимо рассчитать количество уникальных строк в файле. Причем, файл большой – миллионы или десятки миллионов строк. Типичный shell’овский однострочник который позволяет решить эту задачу выглядит следующим образом: sort | uniq | wc -l И все бы хорошо, но есть од...| www.bazhenov.me
Существует один очень простой и эффективный способ улучшения алгоритмов классификации, который называется feature selection (выбор классификационных признаков). Этот метод позволяет при построении модели выбрать только самые показательные признаки (например, слова) и отсеять ...| www.bazhenov.me
Автокомплит вещь удобная. Он позволяет экономить время на наборе текста, когда множество значений поля закрыто. Хороший автокомплит отличается следующими качествами: он должен быть быстрый. Если мы хотим экономить силы пользователя, то мы должны ему предложить вариант ...| www.bazhenov.me
Продолжая тему реализации автоматической классификации необходимо обсудить следующий очень важный вопрос. Как оценивать качество алгоритма? Допустим, вы хотите внести изменения в алгоритм. Откуда вы знаете что эти изменения сделают алгоритм лучше? Конечно же надо пров...| www.bazhenov.me
В прошлой заметке я в общих чертах описал задачу классификации, а также традиционные подходы используемые для классификации текстовых документов. В этой заметке я более детально расскажу о том как работает самый простой, но вместе с тем один из самых часто используемых ...| www.bazhenov.me
В этом и следующих постах, я хочу на пальцах описать процесс создания простого классификатора текстовых документов, а также рассказать о некоторых нетипичных с обывательской точки зрения подходах используемых при классификации документов. Классификатор – это алгорит...| www.bazhenov.me
Некоторое время назад мне довелось участвовать в одном из подпроектов целью которого было извлечение упоминаний об автомобилях из произвольного текста с использованием экспертной информации. Это задачу в простонародье называют парсингом :). Так или иначе, этот класс за...| www.bazhenov.me
Сегодня я хочу обсудить следующую проблему. Как мониторить CPU usage на многопроцессорной машине? Конечно же мониторить метрики выдываемые mpstat. Эта программа выдает процент времени который процессор проводит в различных состояниях (user, system, iowait, idle и т.д.). $ mpstat 1 Linux 2.6.32-200.13.1.el5...| www.bazhenov.me
Вам наверное приходилось слышать что-то вроде: “Этого не может быть. Вероятность этого менее одной миллионной”. В бытовом понимании одна миллионная это некая несвершимая вероятность. Другими словами, этого просто не может произойти. Но насколько это вeрятное событие, ес...| www.bazhenov.me
В последнее время все чаще говорят о высоконагруженных приложениях. Нельзя не заметить что это теперь очень популярная, можно даже сказать модная, область знаний. Сам же термин “высоконагруженная система” при этом не имеет в нашей отрасли четкого определения. В этой за...| www.bazhenov.me
В продолжение предыдущего поста хочу немного рассказать о том как у нас происходит deploy. В прошлый раз мы закончили на том что артефакт доставлен на production и готов к развертыванию. Начинается самое интересное, процесс деплоя. Но для начала надо немного описать платформу на ...| www.bazhenov.me
Не так давно у нас на собеседовании был кандидат, который произвел довольно хорошее впечатление, поэтому было решено предложить ему более сложную задачу, которую обычно мы не спрашиваем. Вот ее немного видоизмененный вариант. Переделайте следующий код оставив его много...| www.bazhenov.me
Помните фильм “Пятый элемент”? Там была сцена, когда Зорг опрокидывает стакан на пол и роботы тут же начинают уборку помещения. Всего лишь одно маленькое действие привело в жизнь десяток машин, которые сразу же начали подметать и мыть полы, а в конце еще и налили воды хоз...| www.bazhenov.me
Коллеги давно просили меня описать процесс сборки и настройки своего NAS-сервера. Этим постом я искупаю свою вину. К тому же тема действительно актуальная и, мне кажется, многим будет интересно с какими проблемами я столкнулся, какое железо и софт использовал. NAS у меня испо...| www.bazhenov.me
В этом году я побывал на HighLoad++. Event довольно интересный, поэтому я попытаюсь вкратце описать свои впечатления, а так же основные тенденции наблюдаемые на конференции. Во-первых, стоит отметить, что тезисы докладов и презентации доступны на официальном сайте конференции. Я...| www.bazhenov.me
Простота. Краеугольный камень нашей профессии. Наверняка вам приходилось слышать от своих коллег: “это можно сделать гораздо проще”. Или вы говорили это вашим коллегам: “смотри, можно сделать так. Это ведь гораздо проще”, а в ответ получали взгляд полный непонимания, ка...| www.bazhenov.me
Представьте себе типичную задачу, есть поток событий и этот поток событий надо разделить между несколькими пользователями системы. Типичный пример: модерация. Скажем, есть три модератора, которые просматривают добавляемый пользователями контент (допустим рекламные ка...| www.bazhenov.me
Does anybody know why we do what we do? Why do we wake up everyday and go to our workplaces? It seems that the most obvious reason is money. We need money to function in the society. We need some funds to make some plans, if you wish. It turns out that not only money motivate people to do their job. OSS is the proof. Well, yes, we can make money from open source projects.| www.bazhenov.me
И снова про инструменты разработки. Часто бывает необходимо сравнить производительность/пропускную способность того или иного участка кода, а писать тестирующий код ой как не хочется. А ведь надо всего-то, запустить нужный метод N раз и померять время выполнения. Вот сег...| www.bazhenov.me
Не так давно у нас на работе (Виктор, Игорь, Олег привет вам) состоялась дискуссия на тему: должны ли программисты знать как работает железо на котором выполняются их программы? И я еще раз убедился в том, что большинство программистов придерживаются мнения: “железо само п...| www.bazhenov.me
Как вы думаете во сколько раз может быть быстрее ваша программа, если вам дадут в два раза более “крутое” железо: в два раза более быстрый процессор, в два раза больше памяти и т.д. Интуитивный ответ — в два раза. Раньше я уже писал о том, что не все так безоблачно. Взвесив в...| www.bazhenov.me
Сегодня в разговоре с одним знакомым всплыл следующий вопрос. В случае, если для дистрибуции ключей по нодам кластера используется типичная схема остатка от деления на количество серверов, какая доля ключей осуществляют миграцию, если один из серверов выводится из схем...| www.bazhenov.me
Раньше я уже писал о том, что нам приходится разрабатывать дополнительный инструментарий для себя. Еще одна сфера которую над которой мы плодотворно поработали — это логгирование. Здесь я не буду говорить о пользе логгирования и о том как надо логгировать. В интернете по...| www.bazhenov.me
В последнее время в web-программировании появился очередной тренд — Key-Value базы данных. Существует просто великое множество KV-решений, — одно лучше другого. Но так ли они важны и какая от них польза? Разрешите мне немного порассуждать о происхождении KV-хранилищ. Нет дыма бе...| www.bazhenov.me
Если вы пишете на объектно-ориентированном языке, то вы должны быть знакомы с “джентльменским набором” принципов, которые очень полезны при написании кода. К таким принципам относятся: single responsibility principle, open-closed principle, interface segregation principle и другие. Общий эффект их использова...| www.bazhenov.me
Один мой коллега является адептом философии “дефолтных настроек”. Эта философия пропагандирует следующий подход: не пытайтесь менять environment под свои нужды, — просто научитесь пользоваться стандартным environment’ом. Несмотря на то что сам по себе этот подход довольно спор...| www.bazhenov.me
В прошлой заметке, я затронул тему порядка доставки сообщений MQ-системами. Отсутствие гарантий в отношении этого порядка вызвало некоторое возмущение со стороны читателей, поэтому я решил раскрыть эту тему более полно. Почему же многие очереди сообщений не гарантирую п...| www.bazhenov.me
В прошлый раз я писал про оптимистическую блокировку. Сегодня я хочу описать одну разновидность прикладного применения оптимистической блокировки. Это прикладное применение относится к области систем асинхронного обмена сообщений (таких как ActiveMQ, RabbitMQ, OpenMQ, memcacheQ и дру...| www.bazhenov.me
Shared state, как известно необходимо защищать. Иначе параллельные потоки могут его “поломать”. Это относится и к web-приложениям. Несмотря на отсутствие вменяемой поддержки параллелизма в большинстве web-ориентированных языков (PHP, Python, Ruby), concurrency в web-приложениях хватает. Запро...| www.bazhenov.me
Недавно еще раз встретился с некорректной обработкой InterruptedException в java. InterruptedException — это checked exception генерируемый многими методами стандартной библиотеки, которые блокируют поток исполнения. К таким относятся: interruptible версии lock’ов, метод Thread.sleep(), некоторые операции над бл...| www.bazhenov.me
Существует одна очень старая и эффективная техника — конвейерная обработка данных (pipelining). Ее смысл заключается в том, что разные физические исполнители, которые могут работать не блокируя друг друга (хвала DMA), такие как: процессоры, жесткие диски, сетевые карты, — должны...| www.bazhenov.me
Если вы не знаете, то с PHP/5.3 поставляется новый mysql драйвер — mysqlnd. У него есть несколько особенностей и воможностей, которые отличают его от libmysql. Первое не очень интерестно. Теперь при fetch’e результата не происходит копирования из памяти libmysql в память, находящуюся под упр...| www.bazhenov.me
Все таки интернет индустрия развивается. Теперь на каждом углу высоконагруженные проекты, миллионы пользователей, требования к high-availability, масштабиремости. Причем вот ведь странно. К масштабиремости всегда относятся как-то однобоко. Иногда ее путают с производительност...| www.bazhenov.me
Сегодня со мной произошел форс-мажор. Я приехал на работу на велосипеде так что, когда рабочий день закончился, я сел на вел и сопровождаемый прохладным ветерком покатил в центр города. Далеко уехать не получилось. Буквально через 40-50 метров я услышал хруст и педаль под но...| www.bazhenov.me
Вчера моя девушка купила себе Sims 3. Ну вы знаете… Маленькие человечки, которые постоянно требуют спать и есть. Эдакие тамагочи, которым хватает вычислительной мощности чтобы обсчитывать нравятся ли им их соседи, босс и прическа того волосатого парня, который косится на н...| www.bazhenov.me
$data = file_get_contents($location); Что не так с этим кодом? На первый взгяд все хорошо. Вряд ли он может нам чем-нибудь навредить. Хорошо, предположим, что у вас есть 3 web frontend’а, каждый из которых может обслуживать 60 параллельных запросов (итого 180 конкурентных запросов). На минутку предпо...| www.bazhenov.me
Иногда встречаюсь c непониманием того, что такое производительность, а что такое масштабируемость. Почему-то некоторые люди считают, что это одно и то же. С производительностью все более менее понятно. Это мера скорости работы системы. Запрос поступает в систему и через н...| www.bazhenov.me
На просторах сети нашел довольно интерестное видео о тенденциях развития микропроцессоров. Norm Jouppi из Hewlett-Packard рассказывает о текущих проблемах и о том, что из себя будут представлять микропроцессоры лет эдак через 5-10. Было много сказано, про power wall и про то, как растущее э...| www.bazhenov.me
Это скриншот с Windows 2008 R2 с запущенным на нем SQLServer. Примечательна сама загрузка. Загрузить 256 ядер почти на полную одним приложением не так-то просто. У MySQL, например, проблемы начинаются уже с 8 ядрами1. У нас в проекте мы это испытали на собственной шкуре. Как заметил Doug Holland, ...| www.bazhenov.me
Как показало голосование по вопросу java 7 language changes1, null-handling в java - это самый большой “pain in the ass” из всех, через которые Java заставляет проходить программистов. С другой стороны то-же голосование на devoxxx по вопросу самого популярного языка под JVM, показало, что это Groovy. Видимо, ...| www.bazhenov.me
Случайно наткнулся на свой давешний пост основной идеей которого, было то, что все программные модели являются суть упрощением обьектов реального мира. И задача программиста упростить модель настолько насколько это возможно, но не больше. Как жаль, что я сам порой об это...| www.bazhenov.me
Случайно нашел интерестное программное решение. Q4M — иммитация сервера очереди сообщений посредством MySQL сервера (начиная с версии 5.1). Написано что fast, robust и flexible (интерестно, бывает что-нибудь одно?). Однако, дозволяются условные выборки из очереди, несмотря на то, что в limi...| www.bazhenov.me