Pull to refresh
0
0
Давид Мзареулян @david_mz

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

Send message

Несколько интересных особенностей MySQL

Reading time8 min
Views63K
В не очень далеком прошлом мне пришлось покопаться немного в исходном коде MySQL, и разобраться в некоторых аспектах его работы. В ходе работы лопаткой, и эксперимeнтов, я наткнулся на несколько очень интересных особенностей, часть из которых просто забавна, а в случае некоторых бывает очень интересно понять, чем руководствовался программист, который принимал решение сделать именно так.

Начнем с такого интересного типа, как ENUM.

mysql> CREATE TABLE enums(a ENUM('c', 'a', 'b'), b INT, KEY(a));
Query OK, 0 rows affected (0.36 sec)

mysql> INSERT INTO enums VALUES('a', 1), ('b', 1), ('c', 1);
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0


Итак, у нас есть таблица, в ней есть два столбца. У первого, a, тип ENUM, у второго, b, INT. В таблице три строки, у всех трех значение b равно 1. Интересно, чему равны минимальный и максимальный элементы в столбце a?

mysql> SELECT MIN(a), MAX(a) FROM enums;
+--------+--------+
| MIN(a) | MAX(a) |
+--------+--------+
| c      | b      |
+--------+--------+
1 row in set (0.00 sec)


Кажется странным, было бы разумно, если бы самым маленьким был 'a', а самым большим — 'c'.
А что если выбрать минимум и максимум только среди тех строк, где b = 1? То есть, среди всех строк?

mysql> SELECT MIN(a), MAX(a) FROM enums WHERE b = 1;
+--------+--------+
| MIN(a) | MAX(a) |
+--------+--------+
| a      | c      |
+--------+--------+
1 row in set (0.00 sec)


Вот так мы заставили MySQL поменять свое мнение о том, как сравнивать поля в ENUM, просто добавив предикат.
Разгадка такого поведения заключается в том, что в первом случае MySQL использует индекс, а во втором нет. Это, конечно, не объясняет, почему MySQL сравнивает ENUMы по разному для сортировки в индексе, и при обычном сравнении.

Второй пример проще и лаконичнее:

mysql> (SELECT * FROM moo LIMIT 1) LIMIT 2;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)


Когда я показал этот запрос своему коллеге, который занимается разработкой парсера SQL, его вопрос был не «почему этот запрос возвращает две строки», а «как надо написать SQL парсер так, чтобы такой запрос был валидным, без того, чтобы написать правило, специально разрешающее такой запрос».

Интересно, что далеко не любой SELECT в скобках сработает, в частности, UNION в скобках — это синтаксическая ошибка:

mysql> (SELECT * FROM moo UNION ALL SELECT * FROM hru) LIMIT 2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION ALL SELECT * FROM hru) LIMIT 2' at line 1


Еще несколько интересных примеров под катом
Читать дальше →

W for Wikipedia

Reading time11 min
Views14K
Что такое «BigData»? Это те данные, которые нельзя просто так переварить. Или нельзя просто так приготовить. Или это вы думаете что нельзя.
Особо сильный «перекос», в этом понимании бигдаты спрятался в web-картографии, в картах на различных сайтах.
И так уж получилось — на протяжении нескольких лет я катался по различным конференциям, и рассказывал про организацию передачи данных с сервера на Карту. Иногда меня спрашивали — «а где же взять эти ваши много данных».
Это не правильные вопросы, правильные вопросы это:
— как данные хранить
— какие данные, когда и почему передавать на клиент
— что такое серверная кластеризация, как она выглядит и почему она нужна
— что с данными делать
— и зачем это все нужно %username%

А насчет откуда взять данные… Есть один такой детский стишок

Весь покрытый метками
Абсолютно весь
Остров Википедии
В океане есть


И на этом острове растет примерно десять миллионов геотегированных статей, которыми мы и воспользуемся.
Но с флорой и фауной там не все так просто — статьи растут на разных языках, в разных местах, и их на само деле много…
Поэтому мы, как настоящие герои, немного усложним задачу и добавим немного агрегатных функций, Левенштайна, Мorton кодов, esosedi и немного здравого смысла.

Поехали!

PHPStamp — честная генерация DOCX документов из шаблона

Reading time2 min
Views27K
Это еще одна попытка реализовать стабильный, полноценный шаблонизатор офисных документов, основанных на XML, пользуясь стандартными для PHP средствами DOMDocument и XSL.

Задача состояла именно в генерации шаблона для многократного использования, который не придется править вручную или прибегать к сторонним программам для его доработки.
Читать дальше →

«Never say never» или Работаем с таймзонами правильно

Reading time9 min
Views78K
Эта статья рассказывает о проблемах, которые поджидают программиста, работающего с часовыми поясами. В теории, вроде, всё хорошо, просто и понятно, но жизнь — штука сложная, и на практике, порой, возникают совершенно неожиданные ситуации.

TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!

Итак, все кругом твердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?

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

12 отличных примеров email-рассылок для брошенных корзин

Reading time6 min
Views24K



Ваш интернет-магазин работает хорошо: у вас есть трафик на сайте, покупатели довольны продукцией. У вас всё отлично и повысить продажи без дополнительного бюджета на интернет-маркетинг невозможно? А как насчет брошенных корзин?



Очередное исследование, проведенное американскими специалистами показало, что 67,45% посетителей бросают оформление заказа. А это значит, что вы получаете только ⅓ потенциальных продаж интернет-магазина.


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

Практическое применение FlexBox

Reading time10 min
Views368K
Привет, хабр!

Одним прекрасным вечером, не предвещающим ничего интересного, в наш чатик поступило предложение от автора публикации «Переводим в код 5 действительно полезных шаблонов адаптивной разметки», написанной им весной 2012 года, написать статью-ремейк, но с применением FlexBox и сопутствующим пояснением что и как работает. После некоторой доли сомнений, интерес глубже разобраться в спецификации все таки победил и я благополучно сел верстать те самые примеры. В ходе погружения в эту область стало выясняться множество нюансов, что переросло в нечто большее чем просто переверстать макетики. В общем в данной статье хочу рассказать о такой чудесной спецификации, под названием «CSS Flexible Box Layout Module» и показать некоторые ее интересные особенности и примеры применения. Всех кому интересно, любезно приглашаю под хабракат.
Читать дальше →

markdown-it — парсер markdown / CommonMark на стероидах

Reading time2 min
Views14K
Не так давно было много шума об инициатике CommonMark по унификации маркдауна. Казалось бы, наконец-то в этой замечательной разметке наступит порядок. Но на практике не все так просто. Сейчас ведется работа над базовым синтаксисом, и до расширений дело дойдет не скоро. Ждать год с лишним могут не все. Но разработки спецификаций — это скорее научная работа. Нас же интересует практика — как приворачивать маркдаун к конкретным проектам.

Что же может потребоваться программисту от хорошего парсера маркдауна? Ну конечно же не скорость :). А нужна на самом деле возможность добавлять свои расширения синтаксиса. К сожалению, во всех реализациях парсеров, что я до этого встречал, логика разбора разметки приколочена намертво. Все что остается — ковырять гвоздиком конечный результат и надеяться что конфликтов не случится. Конечно, гарантировать при этом надежный выхлоп невозможно. Можно пойти другим путем — попробовать заслать патч в апстрим. Но тут нет ни каких гарантий, что синтаксис вашего расширения будет нужен кому-то еще кроме вас, и что ваш код будет принят.

Как же быть? К счастью, теперь у нас есть markdown-it!

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

Quip: текстовый процессор от основателя Google Maps и FriendFeed

Reading time2 min
Views22K
image

Сегодня был запущен Quip — современный текстовый процессор, позволяющий создавать документы на любом устройстве. Редактор будет работать на iPhone, iPad, Android и десктопах, и его уже можно скачать (версия для Android станет доступна чуть позже).

Проект выглядит потенциальным Google Docs для мобильных устройств, и на фоне регулярных закрытий продуктов от Google может как минимум оказаться неплохим «запасным» вариантом. Один из авторов проекта — Брет Тейлор, основатель Google Maps и FriendFeed, работавший потом CTO в Facebook; с Кевином Гиббсом они вместе работали в Google. В проект вложено инвестиций на $15 млн.
Читать дальше →

Новый Notepad++ 6.0

Reading time1 min
Views46K
Вышла новая версия редактора. Доступна по ссылке.

Из нового:
  • Добавлена поддержка PCRE (Perl Compatible Regular Expressions).
  • Функция «Карта документа» (через Menu View->Document Map): Скриншот 1, Скриншот 2
  • Ускорена загрузка больших файлов.

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

Как достучаться до службы поддержки Google

Reading time1 min
Views66K
imageОтсутствие поддержки Google — давно известная проблема, вся поддержка осуществляется через форум, где, в лучшем случае, вы получите ответ недели через 3, а большинство вопросов и вовсе остаются без ответа.

Но если у вас есть Google Apps, то можно получить персонального индуса enterprise поддержку бесплатно.
Читать дальше →

О «нетарифицируемых» звонках с мобильных на номера 8-800-xxxxxxx в России

Reading time10 min
Views59K


Новогодние каникулы для гика — отличное время, чтобы заняться делами, до которых в обычное время не доходят руки. Вот и я, пока на всех домашних компьютерах идут дефрагментации и годовые мега-бекапы, раскопал свой список дел, «до которых в 2011 руки не дошли».

Итак, сегодняшний мой вопрос — а правда ли, что звонки с мобильного телефона на любые номера, начинающиеся на 8-800-xxxxxxx, в России являются для звонящего бесплатными? Такой вопрос на секунду нет-нет, да и возникал у многих пользователей колл-центров да горячих линий банков, курьерских служб, страховых агентств и прочих организаций, куда нужно подолгу дозваниваться, слушая зацикленную пережатую mp3-шку десятки раз подряд. Ведь если звонок бесплатный — можно начать дозваниваться стоя в пробке, или просто по дороге на работу — ежели ходите пешком. Но случись, что ответят вам неожиданно-БЫСТРО — в шуме улицы важные сведения и расслышать тяжело, и диктовать не слишком сподручно. А вдруг звонок окажется платным? Тогда лучше уделить ему побольше внимания, звонить из тихого спокойного места, и постараться подгадать для него время суток, когда очередь звонящих-ожидающих будет покороче.

Я живу в Санкт-Петербурге и проверяю ситуацию только с местными операторами сотовой связи, но информация, скорее всего, окажется интересной и для хабравчан из других городов РФ. Под хабракатом — СЕНСАЦИИ, ИНТРИГИ, РАССЛЕДОВАНИЯ^W неожиданно много букв и неоднозначная пища для размышлений.
Читать дальше →

Вероятностный морфологический анализатор русского и украинского языков на PHP

Reading time3 min
Views3.7K
Перед каждым разработчиком сайтов рано или поздно становится вопрос о реализации поиска по сайту. Желательно чтобы поиск был по основе слова, т.е. не учитывал окончания слов. Для этой цели используются программы стеммеры, которые и выделяют из слова основу. Многие стеммеры работают на основе словаря, и вот чтобы не использовать огромные словари в небольших и средних проектах можно использовать вероятностный морфологический анализатор. Его отличительная особенность в относительно малом размере базы данных и соответственно в отсутствии нагрузки на базу. Без больших потерь в качестве выделения основы.

Стемминг — это процесс нахождения основы слова для заданного исходного слова. Основа слова необязательно совпадает с морфологическим корнем слова. Алгоритм стемминга представляет собой давнюю проблему в области компьютерных наук. Данный процесс применяется в поиcковых системах для обобщения поискового запроса пользователя.
Конкретные реализации стемминга называются алгоритм стемминга или просто стеммер.

Заинтриговал?

Работаем с EMS по нарушению сроков доставки посылок — инструкция

Reading time4 min
Views214K
Недавний пост в «Я негодую» о работе EMS в нашей стране и полном пофигизме почтовых работников выявил потребность в инструкции о том, что можно сделать, чтобы когда-нибудь проблемы с посылками у EMS прекратились.

Сходу расстрою — посылкой управлять никак нельзя. Если она долго не «прилетает» в Россию (т.е. статус Экспорт стоит, а Импорт — нет) — тут вряд ли что-то поможет. Однако страхуемся, делаем по шагам, описанным ниже.
Порадовать тоже могу: процентов 95 посылок все-таки доходят. Объем для сравнений — порядка 10 посылок в месяц из США и Европы.
Обращаю внимание, что многие посылки (процентов 60 всех отправлений) я получаю «от себя», используя сервисе вроде Шипито. В некоторых случаях это означает, что почта не может отказать в претензиях по причине того, что они представляются «не отправителем». Однако во многих случаях рекомендую идти и биться за свою посылку при помощи процессов и документов, представленных ниже.
Читать дальше →

Google + и приватность. 5 полезных опций

Reading time2 min
Views24K
yet another topic about G+

В данной статье приводится список настроек приватности аккаунта Google+.

Большая часть хабрасообщества, скорее всего, уже разобралась, что к чему, остальных же прошу под кат.

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

Вкратце о лицензиях Open Source

Reading time6 min
Views15K
Многие разработчики и дизайнеры хотят опубликовать свои работы в виде открытых проектов. Они хотят иметь возможность делиться своим кодом. Сообщество open-source с каждым днём всё прочнее стоит на ногах. Открытые программы существуют для любых видов задач, каких вы только можете себе вообразить. А многие веб-разработчики используют свободное ПО как фундамент для своей работы (WordPress, Drupal и многие другие CMS открыты, свободны и бесплатны).

Но ситуация такова, что лицензий open-source существует великое множество, и подчас нелегко понять что на самом деле они означают. Какие права получают разработчики, когда выбирают ту или иную открытую лицензию? Попробуем хотя бы в общих чертах разобраться.
Читать дальше →

Акинатор и математика

Reading time6 min
Views115K
На Хабре уже несколько раз всплывала тема Акинатора, в том числе и с тегом не знаю как оно работает. Я на него наткнулся недавно и, разумеется, был восхищен. Затем, как вероятно и многим другим, мне в голову пришла мысль: «А как же это работает?» Ответа на этот вопрос я нигде не нашел, а потому задался целью написать аналогичную по функциональности программу, разобравшись по ходу дела что к чему.
Читать дальше →

22 вещи, которые вы не знали о своих покупателях

Reading time6 min
Views1.7K
Это перевод статьи с англоязычного блога. Я, как переводчик, не могу безоговорочно согласиться со всеми утверждениями автора, но счел необходимым перевести эту статью для того, чтобы мы могли задуматься обо всех этих штуках при тестировании. Только тестирование скажет, насколько эти утверждения справедливы в каждом конкретном случае.

Также довольно забавно наблюдать отличие технических данных по российской и американской аудитории. Так что читайте.


Вы не знаете кое-чего о ваших потребителях. Дело не в вас, а в них. Но вам необходимо узнать это. Вот некоторые тяжелые уроки, которые я выучил за много лет — они относятся к юзабилити, любимым мозолям и другим забавным штукам. Выучите эти уроки и получите больше довольных потребителей, посетителей, читателей и поклонников:
Читать дальше →

Электронная подпись физического лица (часть 1)

Reading time6 min
Views59K
Я расскажу о Федеральном законе от 6 апреля 2011 г. N63-ФЗ «Об электронной подписи»: что он, зачем он, а главное, как обывателю его использовать. Рассмотрю проблемы, с которыми я столкнулся, и их решения. Этот пост направлен больше в сторону социума, поэтому для технарей будет присутствовать некая избыточная информация.
Читать дальше →

Как я создавал методику изучения C#

Reading time11 min
Views72K
Я с детства люблю не только программировать, но и делиться своими навыками, знаниями, рассказывать про свои программки, объяснять, как они работают, как их создавать.

В этом я нашёл своё призвание — мотивировать к изучению программирования.

Я не ставлю своей целью «научить писать программы», потому что этому нельзя научить, этому можно только научиться самостоятельно. Моя цель — сделать этот процесс максимально интересным, увлекательным, захватывающим, организовать «тусовку», сообщество, в котором можно и хочется решать задачи, развивать свои навыки программирования. Общество, в котором можно видеть успехи коллег, чтобы было к чему стремиться, кого обгонять.
Читать дальше →

Где регистрировать домен. Сравнение цен

Reading time5 min
Views58K
До недавнего времени у меня было три проблемы с регистрацией доменов:

  • Выбрать домен и быстро проверить его занятость.
    Любой регистратор доменных имен предлагает вам форму, в которую вы вводите желаемое слово, просит ее отправить, подождать несколько секунд, узнать свободно ли имя. Затем повторить. Если вы в высококонкурентной нише, где все словарные имена заняты, то провести за этим увлекательным занятием можно несколько часов. Эту проблему для меня несколько лет подряд решал domainr, который проверяет домены как только ты вводишь их названия.

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

  • Купить домен там, где его продают и где он дешевле.
    Проблема аккредитации регистраторов касается в первую очередь newTLD-доменов (.bike, .restaurant, .tools и прочие). У вашего любимого регистратора легко может быть .travel, но отсуствовать .work. Узнать, кто может зарегистрировать для вас уже привычный домен .io нетривиальная задача, не говоря уже о том, чтобы найти место, где сделать это дешевле.

    Задача регистратора в том, чтобы внести запись о домене в единую базу данных и предоставить набор сервисных услуг, связанных с адресом (DNS, SSL и прочие). Текущие реалии таковы, что почти все регистраторы предлагают одинаковые услуги, но берут за это совершенно разные деньги. И если разница в 300 рублей на покупку .ru-домена у разных регистраторов не особенно принципиальна, то зарегистрировать десяток typo-доменов в зоне .net может стоить от 3 000 до 13 000 рублей в зависимости от регистратора ($8.99 / 650 р / $34.99).

Три недели назад была закончена работа над очередным проектом и я оказался в свободном плавании. Думая над тем, чем заниматься дальше, я просматривал накопившийся список идей. Хотелось сделать что-то простое, освоить пару новых технологий и решить насущную проблему. Внезапно, пазл сложился.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity