Когда вы выполняете какой-нибудь запрос, оптимизатор запросов MySQL пытается придумать оптимальный план выполнения этого запроса. Вы можете посмотреть этот самый план используя запрос с ключевым словом EXPLAIN. EXPLAIN – это один из самых мощных инструментов, предоставленных в ваше распоряжение для понимания MySQL-запросов и их оптимизации, но печальным фактом является то, что многие разработчики редко его используют. В данной статье вы узнаете о том, какие данные предлагает EXPLAIN на выходе и ознакомитесь с примером того, как использовать его для оптимизации запросов.
afi @afi
User
Как сверстать веб-страницу. Часть 2 — Bootstrap
19 min
699KTutorial
Введение
Уважаемый читатель, эта статья является второй частью цикла статей, посвященных вёрстке.
В первой части мы верстали шаблон Corporate Blue от студии Pcklaboratory с помощью стандартных средств на чистом HTML и CSS. В данной статье мы попробуем сверстать этот же шаблон, но с помощью CSS фреймворка Bootstrap 3.
+68
Вероятность в алгоритмах. Лекция Яндекса
4 min
31KTutorial
Многие алгоритмы являются детерминированными – то есть последовательность их действий зависит лишь от входных данных и программы. Но что будет, если разрешить алгоритму по ходу работы использовать случайные числа?
Оказывается, тогда становятся возможны интересные результаты, которых нельзя достигнуть с помощью обычных алгоритмов. Например, можно построить хеш-функцию, для которой противник не сможет легко подобрать коллизии. Или обработать большое множество чисел и сжать его во много раз, сохранив возможность проверять принадлежность чисел исходному множеству. Можно приближенно подсчитать количество различных элементов в потоке данных, располагая лишь небольшим объёмом дополнительной памяти. В этой лекции Максим Бабенко рассказывает школьникам, как именно это происходит.
Оказывается, тогда становятся возможны интересные результаты, которых нельзя достигнуть с помощью обычных алгоритмов. Например, можно построить хеш-функцию, для которой противник не сможет легко подобрать коллизии. Или обработать большое множество чисел и сжать его во много раз, сохранив возможность проверять принадлежность чисел исходному множеству. Можно приближенно подсчитать количество различных элементов в потоке данных, располагая лишь небольшим объёмом дополнительной памяти. В этой лекции Максим Бабенко рассказывает школьникам, как именно это происходит.
+58
Пишем мониторинг наличия билетов на РЖД
3 min
35KНе раз слышал от своих знакомых, что было бы неплохо увидеть сайт который будет мониторить наличие свободных мест на ржд. Про себя я думал — «да неплохо бы» и благополучно забывал, но пост заставил меня вспомнить навыки копи паста, которыми я владею в совершенстве и обернуть это дело в питонячий код. Сразу оговорюсь что именно про мониторинг будет во второй части, а в этой будет про то: как ходить на РЖД из питона, что это за загадочный sleep про который писали в предыдущем посту и как живется на Google App Engine. Итак приступим:


+10
Горизонтальное масштабирование PHP приложений. Часть 1
5 min
32KTranslation

Итак вы сделали сайт. Всегда интересно и волнительно наблюдать как счетчик посещений медленно, но верно ползет вверх, с каждым днем показывая все лучшие результаты. Но однажды, когда вы этого не ждете, кто-то запостит ссылку на ваш ресурс на каком-нибудь Reddit или Hacker News (или на Хабре — прим. пер.), и ваш сервер ляжет.
Вместо того, что бы получить новых постоянных пользователей, вы останетесь с пустой страницей. В этот момент, ничего не поможет вам восстановить работоспособность сервера, и трафик будет утерян навсегда. Как же избежать таких проблем? В этой статье мы поговорим об оптимизации и масштабировании.
+9
Дросселирование ввода на AngularJS с помощью debounce
3 min
15KTutorial
Translation
Существуют различные сценарии для использования дросселирования (throttling) ввода так, что пересчет значений фильтра будет происходить не каждый раз при изменении значения, а реже. Более подходящий термин — это «устранение дребезга» (debounce), так как в сущности вы ожидаете стабилизации значения на каком-либо постоянном уровне перед вызовом функции, чтобы не вызвать «дребезг» постоянных запросов к серверу. Канонический случай такого рода — это пользователь, вводящий текст в поле ввода для фильтрации списка элементов. Если логика вашего фильтра включает некоторый оверхед (например, фильтрация происходит через REST-ресурс, который выполняет запрос на базе данных бекенда), то вы точно не захотите все время перезапускать и перезагружать результаты запроса в то время, как пользователь пишет текст в поле. Более правильным будет вместо этого подождать, пока он закончит, и уже после этого выполнить запрос один раз.
Простое решение этой проблемы находится тут: jsfiddle.net/nZdgm
Представим, что у вас есть список ($scope.list), который вы публикуете как фильтрованный список ($scope.filteredList) на основе чего-либо содержащего текст из поля $scope.searchText. Ваша форма выглядела бы примерно следующим образом (не обращайте внимание на чекбокс throttle пока что):
Простое решение этой проблемы находится тут: jsfiddle.net/nZdgm
Представим, что у вас есть список ($scope.list), который вы публикуете как фильтрованный список ($scope.filteredList) на основе чего-либо содержащего текст из поля $scope.searchText. Ваша форма выглядела бы примерно следующим образом (не обращайте внимание на чекбокс throttle пока что):
+14
Не все комментарии одинаково полезны
7 min
34KВсе животные равны, но некоторые животные равнее других. Скотный Двор, Джордж Оруэлл (оригинал).
Достаточно много статей на хабре набирает существенное количество комментариев, e.g. в статьях "лучшее за месяц" их, как правило, более сотни. За годы чтения хабра, создалось впечатление, что примерно в половине случаев для комментариев первого уровня получается вот такая вот картина

(картинка сделана на основе хабра-статьи «Список скептика»).
Под катом рассказ, какие бывают сортировки комментариев, где они применяются и краткое рассуждение о том, как вообще можно сортировать комментарии (и зачем).
+96
Шпаргалка по шаблонам проектирования
2 min
1.5M
Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.
Под катом — много картинок.
+166
Обещания JavaScript
19 min
205KTranslation
Всем привет, и ещё раз всех с прошедшими праздниками. Трудовые будни набирают обороты и вместе с ними растёт информационный голод мучающий нас. Мир разработки переднего конца не дремлет и готовит нам много сюрпризов в наступившем году, и уж поверьте мне, скучно не будет ни кому. Одна из новых особенностей которые нам готовят разработчики браузеров совместно с группами разработчиков пишущих спецификации — JavaScript Promises(далее в переводе — Обещания, прошу сильно не бить) — полюбившийся многим шаблон написания асинхронного кода обзаводится нативной поддержкой. Что же такое обещания и с чем их едят можно прочесть в нижеследующем переводе(слегка вольном) замечательной статьи Джейка Арчибальда.
+69
Самодельный планшет на Raspberry Pi
1 min
98KPiPad – так назвал Майкл Кастор свой планшет на Raspberry Pi.
«Каждый день производители выпускают новые планшеты – тоньше, легче и быстрее, но все они выглядят одинаково и делают одно и то же», — говорит он. «Когда я решил создать свой планшет на Raspberry Pi, я хотел сделать что-то другое. Удобную портативную систему на Linux».

«Каждый день производители выпускают новые планшеты – тоньше, легче и быстрее, но все они выглядят одинаково и делают одно и то же», — говорит он. «Когда я решил создать свой планшет на Raspberry Pi, я хотел сделать что-то другое. Удобную портативную систему на Linux».

+90
NinjaMock — бесплатное приложение для прототипирования интерфейсов
6 min
179KПривет %username%! У нас отличные новости: вышла официальная версия NinjaMock — онлайн-сервиса для создания прототипов. Теперь ты можешь рисовать отличные прототипы веб- и мобильных приложений совершенно бесплатно!
+147
Удобная работа в консоли, или красим STDERR в красный цвет
7 min
21K
Работа в консоли
Многие из нас пользуются консолью каждый день, и, наверное, каждый задавал себе вопрос: как я могу сделать свою работу в консоли эффективнее? Что я могу сделать, чтобы тратить меньше времени на выполнение рутинных операций? В этой статье я бы хотел вкратце рассказать о нескольких простых, но полезных вещах при работе с bash, о которых вы, возможно, не знали.
+64
Лучшее из мира PHP за 2013 + конкурс от компании JetBrains! Дайджест интересных материалов №32
8 min
31K+43
Что писать в теме письма: подбирайте слова с умом
7 min
22KTranslation
Большинство из нас решает, какие письма стоят прочтения, по результатам беглого просмотра тем писем в почтовом ящике. Мы подумали, что при такой значительной роли темы письма в привлечении потенциального читателя было бы интересно проверить, насколько открываемость сообщений в рассылке может зависеть от одного-единственного слова в теме письма.
Чтобы выяснить это, мы изучили около 24 миллиардов доставленных почтовых сообщений, темы которых были составлены из приблизительно 22 тысяч различных слов. Если для вас это прозвучало как «очень много данных», поверьте, так все и было.
Перевод статьи ребят из MailChimp выполнен компанией-локализатором Alconost.

Чтобы выяснить это, мы изучили около 24 миллиардов доставленных почтовых сообщений, темы которых были составлены из приблизительно 22 тысяч различных слов. Если для вас это прозвучало как «очень много данных», поверьте, так все и было.
Перевод статьи ребят из MailChimp выполнен компанией-локализатором Alconost.

+3
Peewee – лёгкая, гибкая и очень быстрая ORM на Python
5 min
123KTutorial

Предлагаю всем джангистам/алхимистам немного отвечься и почитать вольную интерпретацию вводного туториала и частично документации по Peewee – stand-alone ORM, обязательной к ознакомлению любому питонщику и, в особенности, фласкеру. Пишут о ней мало, а зря. С Peewee очень просто подружиться, особенно если вы уже знакомы с какой-нибудь ORM на ActiveRecord. Что более важно – с ней приятно дружить :) Ну, начнём.
Установка
С pip:
Из репозитория:
Тесты:
Есть обвязка для flask:
pip install peewee
Из репозитория:
git clone https://github.com/coleifer/peewee.git cd peewee python setup.py install
Тесты:
python setup.py test
Есть обвязка для flask:
pip install flask-peewee
Определение моделей или «попахивает джангой»
Весь нижеследующий код можно повторить один к одному в интерактивном интерпретаторе или отдельном скрипте.
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
birthday = DateField()
is_relative = BooleanField()
class Meta:
database = db # модель будет использовать базу данных 'people.db'
Типов полей много, на все случаи жизни. Peewee берёт на себя преобразование питоновских объектов в значения, подходящие для базы данных, и наоборот.
+46
Python-digest #7. Новости, интересные проекты, статьи и интервью [13 декабря 2013 — 20 декабря 2013]
3 min
8.3K
Присылайте ссылки на статьи мне в скайп (он совпадает с ником на хабре), пишите сами больше о Python. Не жалейте плюсиков (или минусиков) для дайджеста и активно высказывайте ваше мнение в коментариях — именно это служит стимулом для того, чтобы перед каждыми выходными у вас было свеженькое чтиво.
Прошу, также, принять участие в опросе по поводу первого выпуска дайджеста 2014 года. По результатам опроса в прошлом выпуске оформление рускоязычные статьи vs англоязычные возвращено к начальному варианту. Традиции это хорошо, пусть они еще и краткосрочные.
+25
Как добавить дополнительные поля в свойствах системы
9 min
20KTutorial

Некоторые изменяемые параметры можно достаточно просто локализовать при помощи того же Process Monitor-а или утилиты RegMon (об этих утилитах я уже успел кое-что рассказать в статье «Примеры мониторинга системного реестра»), а с некоторыми параметрами, в свою очередь, придется немного повозиться, так как их локализация может оказаться намного сложнее, чем это кажется на первый взгляд. Со значениями искомых параметров иногда получается все очень просто (например, если это параметр типа DWORD, вы не столкнетесь с какими-либо сложностями при определении значения), а иногда задача, связанная с генерацией собственных значений, может оказаться весьма сложной (например, это может быть значение параметра, отвечающего за расположение каталога, из которого следует брать картинки для экрана блокировки операционной системы Windows 8.1). Примеров как с самими параметрами, так и с их значениями можно приводить бесконечно много.
Сегодня же, в этой небольшой статье, вы узнаете о некоторых параметрах системного реестра, позволяющих добавлять дополнительную пользовательскую информацию в окно свойств системы. Причем, чтобы было интереснее, параметры будут добавляться централизованно, т.е. с использованием функциональных возможностей предпочтений групповой политики. Полагаю, можно приступать, и начинать мы будем с
+13
Highly Available кластер RabbitMQ
6 min
76KTutorial
Знакомимся с RabbitMQ
Переводы на хабре:
RabbitMQ tutorial 1 — Hello World
RabbitMQ tutorial 2 — Очередь задач
RabbitMQ tutorial 3 — Публикация/Подписка
Сразу дополню некоторые недочеты. И кратко повторю основные термины.
Принцип работы архитектуры использующей rabbitMq

+16
Нечеткий динамический текстовый поиск? Не так уж и страшно
19 min
13K
Существует устойчивое мнение, что нечеткий поиск в динамике (онлайн)
малодоступен в силу своей невероятной сложности.
Далее мы будем развеивать это досадное заблуждение и покажем,
что построить свою собственную поисковую систему со сносной производительностью
на не таких уж и маленьких данных доступно каждому.
+16
Запускаем Ubuntu и смотрим Torrent и Torrent-TV прямиком на Samsung SmartTV
6 min
168K
После прочтения комментария от awoland во вчерашней статье Как SmartTV забыли о главном, я сразу полез пробовать получить root-права и telnet/ssh на своем телевизоре. Оказывается, все уже готово для этого, и это проще простого!
Достаточно установить Виджет SamyGo, и он все сделает за вас!
Что дает нам SamyGO?
- Root-доступ на ТВ через Telnet
- Виртуальную флешку, монтирование NFS, Samba, FTP на нее
- Samba, FTP-серверы
- Apache2 с PHP
- rtorrent
- Уйму веселья!
# -*- DISCLAIMER -*-
Все, что вы делаете со своим ТВ, вы делаете на свой страх и риск. Автор этой статьи не несет никакой ответственности за ваш анал.
Для моего ТВ (E-серия), мне необходимо было:
- Установить Skype на ТВ и запустить его 1 раз
- Скачать инсталлятор виджета SamyGo на флешку
- Запустить его с флешки
- ???
- PROFIT!
Как они это сделали, демоны?
Вот как выглядит скрипт инсталлятора
+96
Information
- Rating
- Does not participate
- Location
- Россия
- Date of birth
- Registered
- Activity