Search
Write a publication
Pull to refresh
75
0
Дмитрий Копытин @dm9

User

Send message

Clustered index в InnoDB и оптимизация запросов

Reading time7 min
Views19K
В последнее время в сети часто пишут про clustered index в InnoDB и таблицах MySQL, но, несмотря на это, на практике используют довольно редко.
В данной статье мы покажем на двух реальных примерах, как мы оптимизировали достаточно сложные системы Badoo, основываясь на понимании принципов работы clustered index.

Clustered index – форма организации таблицы в файле. В InnoDB данные хранятся в дереве, в таком же, в котором лежат обычные B-TREE ключи. Таблица InnoDB сама по себе уже является большим B-TREE. В качестве значений ключа используется clustered index. Согласно документации, в качестве clustered index выбирается PRIMARY KEY. Если PRIMARY KEY отсутствует – выбирается первый UNIQUE KEY. Если и такого нет, то используется внутренний 6-тибайтный код.

Что же вытекает из такой организации данных на диске?
Читать дальше →

Свежие бесплатные шрифты с кириллицею: PT Mono, ROSA Arion, ROSA Verde, Oxygen

Reading time3 min
Views9.3K
Девятое января 2012 года — последний день январских праздников в России. Позади не только западная, но и русская православная дата Рождества Христова, а также и Новый год между ними. (Впереди остаётся только возможность отметить Новый год по старому стилю — реликт павшей Империи, бережно сохраняемый православной церковью и народной традицией со дня его отмены в 1918 году.) Декада праздников стремительно уступает место суровым будням, и ужé сегодня многие из нас лягут спать с учётом завтрашней необходимости раннего бодрствования. И с каким же радостным, увесистым грузом бесплатных подарков мы вступаем в начинающуюся середину января? Насчёт шрифтов своими ответами на этот вопрос всех нас стремились порадовать сразу три словолитни.



PT Mono


Производитель «ПараТайп» 30 декабря 2011 года объявил в LiveJournal о выходе в свет PT Mono моноширинного шрифта, естественным образом дополняющего шрифтовую систему ПТ Проект, состоящую из семейств PT Sans и PT Serif, появившихся в 2009 и в 2010 году соответственно. Новый шрифт, что небезынтересно, разработан при финансовом участии компании Google и, вероятно, займёт вскорости своё место в её коллекции Google Web Fonts. Как и прежние работы ПТ Проект, новый шрифт включает буквы не только русской кириллицы, но и кириллических систем письменности десятков других народов современной России и ряда соседствующих народов и стран. Он также может считаться свободным, потому что одна из его версий распространяется по лицензии OFL (SIL Open Font License). И вот опубликованная на сайте у «ПараТайп» картинка внешнего вида шрифта:

[PT Mono]
Нетрудно видеть, что у новинки почти нет недостатков, кроме, быть может, строчной буквы «г», нижняя засечка у которой неимоверно длинна, да и верхняя также увесиста настолько, что отличие от «т» становится, мне кажется, менее значительным, чем могло бы быть.

Этот шрифт доступен в единственном (прямом нежирном) начертании.



ROSA Arion и ROSA Verde


Читать дальше →

Уязвимости серверов к медленному чтению

Reading time2 min
Views28K
Приветствую.
Хочу рассказать, чем я баловался в свободное от работы в Qualys время. Так как в англоязычном интернете на удивление много шума про Slow Read DoS attack, и уверен что получу здесь много полезной критики и дельных предложений.

В августе 2011 года написал програмку slowhttptest, которая тестирует веб-серверы на наличие уязвимостей, связанных с обработкой медленных HTTP запросов, таких как slowloris и slow HTTP Post. Цель — создать конфигурируемый инструмент, облегчающий работу разработчиков и позволить им концентрироваться на создании эффективных защит, а не ковырянии в питоне, на котором написаны большинство proof-of-concept эксплоитов.

А потом решил попробовать, как реагируют серверы на медленное чтение клиентами HTTP респонсов. На удивление плохо реагируют. Дефолтные apache, nginx, lightpd, IIS отказывают в обслуживании на ура.

А суть такова:
Читать дальше →

Четыре зловещие шестнадцатеричные цифры на страницах ошибок — и как преодолеть их

Reading time2 min
Views3K
С этим загадочным глюком вы столкнётесь только при сочетании сразу нескольких условий.

Ваш сайт обслуживается Apache Server. (Это условие выполнить нетрудно: сейчас Apache — один из наиболее популярных вебосерверов.)

Ваш сайт также снабжён кэширующим сервером nginx. (Закупая shared-хостинг для небольшого сайта, вы можете до последней минуты ничего и не знать о том, что хостинговый провайдер, заботясь об экономии ресурсов, навесил nginx. Если, конечно, не полезете читать заголовки HTTP-отклика.)

Вы ставите какой-нибудь движок, работающий на PHP. (Например, CMS Drupal. Или, например, вики MediaWiki.)

После этого вам хочется посмотреть, как выглядят страницы ошибок №404, создаваемые движком. Вы скармливаете в вики адрес несуществующей статьи, или скармливаете в Drupal адрес несуществующей страницы.

И тогда приходят они. Четыре шестнадцатеричные цифры. Они появляются в коде страницы с описанием ошибки 404 (а также и 403), они стоят в этом коде перед «<!DOCTYPE», и поэтому многие браузеры (например, Firefox) стремятся отобразить их выше всего остального текста страницы — а значит, заметно разламывают дизайн, задуманный создателями CMS или вики:

3340
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
    <head>
          <title> … … …

В чём же дело?

Читать дальше →

Обзор языка программирования Rust

Reading time10 min
Views104K
Rust — новый экспериментальный язык программирования, разрабатываемый Mozilla. Язык компилируемый и мультипарадигмальный, позиционируется как альтернатива С/С++, что уже само по себе интересно, так как даже претендентов на конкуренцию не так уж и много. Можно вспомнить D Вальтера Брайта или Go от Google.
В Rust поддерживаются функицональное, параллельное, процедурное и объектно-ориентированное программирование, т.е. почти весь спектр реально используемых в прикладном программировании парадигм.

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

Читать дальше →

Уникальный ключ в условиях распределенной БД

Reading time3 min
Views34K
В случае если вы разделяете данные по нескольким физическим базам данных,
поддержка глобально-уникальных идентификаторов становится не такой уж тривиальной задачей.
Я попытался собрать вместе возможные варианты и рассмотреть их плюсы и минусы.
Читать дальше →

Джон Кармак о статическом анализе кода

Reading time4 min
Views14K
«Самой важной вещью, которую я сделал как программист за последние годы — это начал агрессивно применять статический анализ кода. — пишет Джон Кармак в статье, опубликованной на AltDevBlogADay. — Не так важны сотни серьёзных багов, которые удалось предотвратить, сколько смена ментальности и моего отношения к надёжности ПО и качеству кода».

Джон Кармак рассказывает о различных инструментах, которые пытался использовать в течение своей карьеры и о тех выводах, к которым пришёл в итоге.
Читать дальше →

Продление жизни аккумуляторам электроинструмента

Reading time3 min
Views91K
image
Я думаю все любители DIY имеющие аккумуляторный инструмент знают, что аккумуляторы штука недолговечная.
А купить замену бывает не так просто. И дело зачастую не в цене (хотя и цена аккумуляторы для профессионального инструмента может быть совсем не детской), а в том, что нереально найти нужную модель.
Я сам столкнулся с этой проблемой после двух лет эксплуатации профессионального шуруповерта с 18V аккумуляторами на 1,5А*ч.
Несмотря на то, что я предусмотрительно докупил 2 дополнительных батареи в комплект к двум шедшим в комплекте в последнее время все 4 стали работать неприлично мало и вопрос встал ребром. Дело осложнялось тем, что итальянский производитель, увы, разорился пару лет назад. Торговая марка была продана китайцам, а сама линейка профессионального инструмента снята с производства. Так что простое решение «выкинуть и купить новые» не проходило.
Осторожно — много фото.
Пришлось браться за отвертку и включать голову

Анонс самой большой и интересной рекламной статьи (70 листов) про статический анализ кода

Reading time2 min
Views762

Из всех видов рекламы довольно небольшое ее количество приходится на инструменты для программистов. Медийная реклама (телевидение, радио, популярные печатные издания) – очень дорого (так как оплата идет за потенциально большую аудиторию) и сильно мимо (так как программистов из них очень мало). Реклама на специализированных сайтах часто тоже не столь эффективна, так как, во-первых, глаз у программистов «отметает» рекламу автоматически, а, во-вторых, программисты знают про AdBlock. Делать видео по работе с программой – не все программы выглядят красочно и ярко, чтобы можно было их интересно снять. Таким образом, чуть ли не единственный способ сообщить о своем продукте миру – это честно и объективно показывать, чем он хорош на реальных примерах.

Читать дальше →

Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

Reading time5 min
Views177K
К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

Читать дальше →

Userscripts. Кроссдоменные запросы

Reading time5 min
Views51K
Доброго времени суток.
Сегодня мы рассмотрим варианты организации кроссдоменных запросов в юзерскриптах.
В подробности реализации того или иного механизма я вдаваться не буду, но приведу пример кроссбраузерной оболочки для кроссдоменных запросов.
Приступим

Traits в php 5.4. Разбираем детали реализации

Reading time8 min
Views53K
Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

Простой пример типажа, чтобы не заглядывать в Википедею:
//определение типажа
trait Pprint 
{
    public function whoAmI()
    {
        return get_class($this) . ': ' . (string) $this;
    }
}

class Human 
{
    use Pprint; //подключаем типаж, ключевое слово use

    protected $_name = 'unknown';
    
    public function __construct($name)
    {
        $this->_name = $name;
    }

    public function __toString()
    {
        return (string) $this->_name;
    }   
}

$a = new Human('Nikita');
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita

Как видно, к классу Human было добавлено поведение из типажа Pprint.

Но во всём есть свои детали.
О них далее

Поиск, сортировка и фильтры для списков в HTML

Reading time2 min
Views31K
Простой мини-скрипт List.js размером 7 КБ добавляет интерактивности маркированным спискам в HTML. С помощью скрипта можно сделать удобный поиск, сортировку, редактирование списка с добавлением или удалением новых элементов (например, адресная книга на странице) и т.д. Чем-то напоминает Chosen, только там модифицировались выпадающие списки.

List.js — обычный JavaScript, который не требует jQuery, работает без проблем во всех браузерах. Пару примеров см. здесь и здесь.

List.js опубликован под открытой лицензией MIT.
Читать дальше →

Дозаправка в дороге — мобильная USB зарядка

Reading time2 min
Views70K
Почти все современные гаджеты могут заряжаться от USB порта компьютера или зарядки с таким портом.
Мода на компактные устройства привела к тому, что аккумуляторы в них не слишком емкие. Например мой HTC HD2 едва выдерживает рабочий день при активном использовании, а в режиме GPS навигатора и того меньше. В итоге приходится бегать от зарядки до зарядки или носить с собой запасные аккумуляторы к каждому устройству. Но комплект разных аккумуляторов обойдется недешево да и замена аккумулятора на прогулке — это минут 5: выключить, сменить аккумулятор, включить, запустить софтинку, дождаться пока снова найдет спутники. Неприятно.

Я покажу как сделать USB зарядку, которую можно взять с собой.
RMPS
«RMPS»
Она позволяет зарядить через стандартный USB порт все, что ест не больше 3А, а сама питается постоянным напряжением примерно от 7.2В до 22В. (авиамодельные, автомобильные аккумуляторы, все, что есть под рукой).
Себестоимость порядка 280-300 рублей. Времени на изготовление примерно 1 час. Размер — чуть больше батарейки АА.
Читать дальше →

Краткий список WYSIWYG редакторов от Марка Андреева

Reading time4 min
Views361K

Однажды мне потребовался WYSIWYG редактор, я помнил как он выглядит, его функции, но не помнил названия. Через 45 минут я все же его нашел… Тогда я поставил перед собой задачу помочь многим, в том числе и себе: сделать сводный список всех чуть более известных WYSIWYG редакторов.
Читать дальше →

Настройка резервного копирования в Ubuntu

Reading time4 min
Views99K

Настройка резервного копирования в Ubuntu за 20 минут.


Для работы над проектами использую svn, который находится на удаленном виртуальном выделенном хосте, под управлением ubuntu 8.04. Со временем объемы данных выросли, как и критичность этих данных. Потеря чего-то снилась в кошмарах. Время от времени копировал репозитории на локальный компьютер. Недавно мне это надоело. И я стал искать возможности автоматизировать это дело. Не буду говорить о поисках и вариантах, расскажу о результатах.

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

Итак, приступим

Маленькие да удаленькие — 3 библиотеки JavaScript на всякий случай

Reading time2 min
Views4.1K
Прочитал пост про Kerning.js — небольшую js-библиотеку, можно даже сказать утилиту, для реализации чудес типографики на веб-страницах. И вспомнил, что пользовал не так давно нечто подобное — библиотеку Lettering.js.

Но поскольку приводить детальную инструкцию по использованию достаточно утилитарной вещи не буду (а дам лишь ссылки где эта инструкция есть — каждый разработчик разберется), добавлю в заметку упоминание о еще двух небольших библиотеках, функционалом которых в той или иной мере я пользовался в своих проектах, а упоминания на Хабре не встречал.

Итак, Lettering.js — помощник «радикального» веб-типографа, Cryptico.js — помощник Штирлица и Rasta.js — такой простой ajax get/set помощник. Далее ссылки на сайты разработчиков этих библиотек и инструкций по их использованию.
Читать дальше →

Естественная сортировка строк на JavaScript

Reading time14 min
Views47K
Задача сортировки является едва ли не наиболее часто решаемой программистами проблемой. Несмотря на то, что распространённых алгоритмов не так много и все они давно написаны и оптимизированы для любых языков и платформ, в исходниках то и дело мелькают методы SortList() и им подобные. Наверное, каждый из нас не раз писал сортировку пузырьком и удивлялся, почему же она не работает с первого раза.

Однако речь сейчас не об алгоритме сортировки, а о способе сравнения строк. Казалось бы, здесь всё тривиально — достаточно сравнить первые с начала различающиеся символы. А если в строках есть числа? Тогда такая сортировка (лексикографическая) преобразует последовательность [ 'file2', 'file10', 'file1' ] в [ 'file1', 'file10', 'file2' ]. Но человек при чтении текста воспринимает числа отдельно, и эта же последовательность, упорядоченная интуитивно, выглядит так: [ 'file1', 'file2', 'file10' ]. Такая сортировка и называется естественной (natural sort).

Под катом — велосипед подробный алгоритм на JavaScript. На оптимальность и красоту он не претендует, но всё же лучше, чем многопроходная реализация «в лоб».

Читать дальше →

Автоматическое определение языка произвольного текста на РНР — библиотека PHPLangautodetect

Reading time15 min
Views20K
Знаете, работа с стартапе, который пытается создать что-то новое и уникальное на рынке очень захватывает. И не только открывающимися возможностями, но и часто нетривиальными задачами и вопросами, которые ставятся перед создателями и которые раньше никто не решал. Вот один из таких вопросов как раз вчера появился передо мной: дано нам произвольную строку текста, заведомо известно, что она может быть двух, а в некоторых случаях и трехъязычной, то есть там смешанный текст из нескольких языков. Необходимо прозрачно для пользователя определить язык, на котором написан текст.

На самом деле задача не такая и редкая — подобная функциональность есть и в текстовых редакторах, и в переключателе клавиатуры PuntoSwitcher, да и в системах машинного перевода такой функционал востребован, не говоря уже про системы поиска информации. Кстати, именно в контексте создания специализированного поисковика и классификатора текстов и появилась такая проблема. Необходимо было получить такую возможность в собственной программе на платформе РНР и при этом не задействовать сторонние сервисы — подобная возможность в виде веб-сервиса присутствует в Google Language API (в своём блоге я уже исследовал этот сервис), однако она выполняется удалённо и имеет некоторые существенные для нас ограничения, в частности, процедура опознания языка выполняется с существенной задержкой и асинхронна по своей природе. Кроме этого очень хотелось иметь полный контроль над процессом и иметь возможность его гибко настраивать, чего, увы, нет в сторонних сервисах. Поэтому пришлось подумать и попробовать реализовать собственными силами, результат же представляем вашему вниманию.
Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity