Pull to refresh
36
0
Михаил Павлов @mktums

User

Send message

Сопрограммы в Python

Reading time3 min
Views77K
Предлагаю обсудить такую интересную, но мало используемую возможность python, как сопрограммы (coroutines).
Сопрограммы в питоне основаны на генераторах (ими, они, собственно и являются).
Поэтому, предлагаю начать именно с генераторов, в общем понимании. А потом разберём как написать свою сопрограмму.
Читать дальше →
Total votes 61: ↑53 and ↓8+45
Comments27

Введение в анализ сложности алгоритмов (часть 4)

Reading time5 min
Views99K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы могут показаться читателю чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он окажется полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Опубликовано ранее:
Часть 1
Часть 2
Часть 3

Оптимальная сортировка


Поздравляю! Теперь вы знаете о том, как анализировать сложность алгоритмов, что такое асимптотическая оценка и нотация «большое-О». Вы также в курсе, как интуитивно выяснить является ли сложностью алгоритма O( 1 ), O( log( n ) ), O( n ), O( n2 ) и так далее. Вы знакомы с символами o, O, ω, Ω, Θ и понятием «наихудшего случая». Если вы добрались до этого места, то моя статья уже выполнила свою задачу.

Этот финальный раздел — опциональный. Он несколько сложнее, так что можете не стесняясь пропустить его, если хотите.От вас потребуется сфокусироваться и потратить некоторое время на решение упражнений. Однако, так же здесь будет продемонстрирован очень полезный и мощный способ анализа сложности алгоритмов, что, безусловно, стоит внимания.
Читать дальше →
Total votes 58: ↑54 and ↓4+50
Comments6

Введение в анализ сложности алгоритмов (часть 3)

Reading time6 min
Views125K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы могут показаться читателю чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он окажется полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Опубликовано ранее:
Часть 1
Часть 2

Логарифмы


image
Если вы знаете, что такое логарифмы, то можете спокойно пропустить этот раздел. Глава предназначается тем, кто незнаком с данным понятием или пользуется им настолько редко, что уже забыл что там к чему. Логарифмы важны, поскольку они очень часто встречаются при анализе сложности. Логарифм — это операция, которая при применении её к числу делает его гораздо меньше (подобно взятию квадратного корня). Итак, первая вещь, которую вы должны запомнить: логарифм возвращает число, меньшее, чем оригинал. На рисунке справа зелёный график — линейная функция f(n) = n, красный — f(n) = sqrt(n), а наименее быстро возрастающий — f(n) = log(n). Далее: подобно тому, как взятие квадратного корня является операцией, обратной возведению в квадрат, логарифм — обратная операция возведению чего-либо в степень.
Читать дальше →
Total votes 74: ↑60 and ↓14+46
Comments4

Введение в анализ сложности алгоритмов (часть 2)

Reading time11 min
Views169K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы могут показаться читателю чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он окажется полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Опубликовано ранее:
Часть 1

Сложность


Из предыдущей части можно сделать вывод, что если мы сможем отбросить все эти декоративные константы, то говорить об асимптотике функции подсчёта инструкций программы будет очень просто. Фактически, любая программа, не содержащая циклы, имеет f( n ) = 1, потому что в этом случае требуется константное число инструкций (конечно, при отсутствии рекурсии — см. далее). Одиночный цикл от 1 до n, даёт асимптотику f( n ) = n, поскольку до и после цикла выполняет неизменное число команд, а постоянное же количество инструкций внутри цикла выполняется n раз.
Читать дальше →
Total votes 55: ↑53 and ↓2+51
Comments16

Введение в анализ сложности алгоритмов (часть 1)

Reading time10 min
Views379K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы покажутся чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он будет полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Введение


Многие современные программисты, пишущие классные и широко распространённые программы, имеют крайне смутное представление о теоретической информатике. Это не мешает им оставаться прекрасными творческими специалистами, и мы благодарны за то, что они создают.

Тем не менее, знание теории тоже имеет свои преимущества и может оказаться весьма полезным. В этой статье, предназначенной для программистов, которые являются хорошими практиками, но имеют слабое представление о теории, я представлю один из наиболее прагматичных программистских инструментов: нотацию «большое О» и анализ сложности алгоритмов. Как человек, который работал как в области академической науки, так и над созданием коммерческого ПО, я считаю эти инструменты по-настоящему полезными на практике. Надеюсь, что после прочтения этой статьи вы сможете применить их к собственному коду, чтобы сделать его ещё лучше. Также этот пост принесёт с собой понимание таких общих терминов, используемых теоретиками информатики, как «большое О», «асимптотическое поведение», «анализ наиболее неблагоприятного случая» и т.п.
Читать дальше →
Total votes 106: ↑98 and ↓8+90
Comments27

Git. Автоматическая проверка сообщения коммита на стороне сервера с помощью Python

Reading time6 min
Views15K

Целевая аудитория, мотивация


Надеюсь, что пост окажется полезным для тех, кто на среднем уровне знаком с Git и на начальном — с Python. Кроме того, предполагается наличие базовых знаний об устройстве Unix-систем и регулярных выражениях.

В моей команде разработчиков назрела необходимость организационно повлиять на формат сообщений к коммитам. Практика показала, что для должного соблюдения новых правил странички в корпоративной базе знаний недостаточно, хотелось принудительно запрещать проталкивание (push) на сервер плохо оформленных коммитов. Недавно начав изучать Python, я знал, что этот язык хорошо подходит для написания системных сценариев благодаря своей развитой стандартной библиотеке. Вместе с тем опыт подсказывал, что наличие конкретной цели здорово помогает при изучении чего бы то ни было нового. Поэтому, отбросив страх перед неизвестностью, взялся решать задачу на малознакомом языке. Заранее оговорюсь, что в конце поста приведены ссылки, по которым можно найти подробную информацию по всем затронутым в тексте темам.
Читать дальше →
Total votes 36: ↑32 and ↓4+28
Comments15

Фракталы в простых числах

Reading time3 min
Views154K


Я обнаружил этот фрактал, когда разглядывал интерференцию волн на поверхности речки. Волна движется к берегу, отражается и накладывается сама на себя. Есть ли порядок в тех узорах, которые создаются волнами? Попробуем найти его. Рассмотрим не всю волну, а только вектор ее движения. «Берега» сделаем гладкими, для простоты эксперимента.

Эксперимент можно провести на обычном листке в клеточку из школьной тетради.
Читать дальше →
Total votes 190: ↑183 and ↓7+176
Comments33

Много бесплатных книг по программированию

Reading time7 min
Views345K
Читать дальше →
Total votes 202: ↑192 and ↓10+182
Comments42

Теория цвета в цифрах

Reading time3 min
Views199K
Разные люди могут по-разному представлять один и тот же цвет по его названию. Например голубой цвет может на самом деле быть цветом морской волны или небесным. Гораздо точнее цвет определяется шестнадцатеричным кодом, всего существует 16777216 комбинаций. Поэтому дизайнеру может быть полезно распознавать цвет, просто взглянув на его hex-код.

Основы


Начнем с простого: рассмотрим обычный hex-код, где каждая из трех пар цифр контролирует один из цветов RGB — красный, зеленый, синий. Числа могут принимать значения цифр от 0 до 9 и букв от A до F.

Читать дальше →
Total votes 161: ↑127 and ↓34+93
Comments25

Договор на разработку сайта: так, а не иначе

Reading time29 min
Views152K
Присылает нам заказчик (Газпром) свою версию договора.
Понимаем — нашу они не подпишут,
вносим реквизиты и отправляем обратно.
Пропадают на две недели… возвращают протокол разногласий к договору.


Последняя неделя выдалась жаркой на переговоры с юристами заказчиков. Проекты я не веду, но так уж получилось, что все договора проходят через меня. Соответственно, я участвую в их согласовании.
Читать дальше →
Total votes 135: ↑129 and ↓6+123
Comments78

Отказоустойчивый кластер Master-Slave на PostgreSQL

Reading time9 min
Views120K
Приветствую, хаброжители!
В этой статье я хочу поделиться опытом развертывания кластера Master-slave на СУБД PostgreSQL. Отказоустойчивость достигается с помощью возможностей pgpool-II (failover, online recovery).
pgpool — это прекрасное средство для масштабирования и распределения нагрузки между серверами и, думаю, немногие знают о возможностях автоматического создания failover на ведомом сервере при отказе ведущего и как добавить новые мощности в уже работающий кластер без отключения всего кластера.
Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments18

Фабрика картинок — как оно работает? Часть 2

Reading time2 min
Views5.7K
Наконец собрался написать вторую часть как и обещал в первой. В этой части хочется рассказать о клиентской стороне проекта.

Что используется:


Как говорил раньше проект полностью написан на Python (со вставками Cython'а). Вся информация о изображениях, пользователях, статистики — хранится в БД MySQL.

Для поиска (основного) и фильтра используется Sphinx-сервер. Клиент написанный для twisted txsphinx.

Для «лайков», кол-во просмотров изображения и кол-во скачиваний используется Redis. Так-же в Redis-е хранится топ-изображений (главная страница) и «похожие изображения» (страница самого изображения). Для twisted клиент txredis, найденный на просторах и немного доработанный под себя (пока не в паблике).

Веб: TwistedWeb с шаблонизатором Jinja2, рисуется все Bootsrap'ом и Jquery. Конец цепочки это Nginx.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments2

Фабрика картинок — как оно работает? Часть 1

Reading time5 min
Views3.5K
Хочется рассказать немного о технической части своего проекта, возможно для критики а может кто-то почерпнет что-то для себя.
Читать дальше →
Total votes 22: ↑17 and ↓5+12
Comments21

Руководство по магическим методам в Питоне

Reading time28 min
Views574K
Это перевод 1.17 версии руководства от Rafe Kettler.


Содержание


  1. Вступление
  2. Конструирование и инициализация
  3. Переопределение операторов на произвольных классах
  4. Представление своих классов
  5. Контроль доступа к атрибутам
  6. Создание произвольных последовательностей
  7. Отражение
  8. Вызываемые объекты
  9. Менеджеры контекста
  10. Абстрактные базовые классы
  11. Построение дескрипторов
  12. Копирование
  13. Использование модуля pickle на своих объектах
  14. Заключение
  15. Приложение 1: Как вызывать магические методы
  16. Приложение 2: Изменения в Питоне 3


Вступление


Что такое магические методы? Они всё в объектно-ориентированном Питоне. Это специальные методы, с помощью которых вы можете добавить в ваши классы «магию». Они всегда обрамлены двумя нижними подчеркиваниями (например, __init__ или __lt__). Ещё, они не так хорошо документированны, как хотелось бы. Все магические методы описаны в документации, но весьма беспорядочно и почти безо всякой организации. Поэтому, чтобы исправить то, что я воспринимаю как недостаток документации Питона, я собираюсь предоставить больше информации о магических методах, написанной на понятном языке и обильно снабжённой примерами. Надеюсь, это руководство вам понравится. Используйте его как обучающий материал, памятку или полное описание. Я просто постарался как можно понятнее описать магические методы.
Читать дальше
Total votes 143: ↑139 and ↓4+135
Comments59

Nginx boilerplate: Быстрая и изящная настройка nginx

Reading time1 min
Views38K
Хочу поделиться своими наработками по настройке nginx, которые, возможно, помогут кому-то при старте нового проекта или избавят от необходимости копипастить очередной vhost.

Я отметил две проблемы подавляющего числа конфигов nginx'а, попадавших мне на глаза:
  • «Всё в одном файле»
  • Дублирование настроек

С помощью моего подхода, надеюсь, эти и многие другие проблемы будут устранены.
Читать дальше →
Total votes 87: ↑77 and ↓10+67
Comments31

Эллиптический спирограф

Reading time6 min
Views27K
В детстве у меня была игрушка под названием спирограф. Это такой пластмассовый лист с круглой дырой внутри, а к нему прилагались зубчатые шестеренки, тоже с дырочками, но маленькими. Ставишь ручку в дырочку, шестеренку в круг и катаешь. В результате получаются красивые кружевные узоры, которые руками ну никак не нарисуешь.

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

Однако взятые крепости уже не манят. Естественно теперь задачу обобщить — например, сделать, чтобы маленький круг ездил внутри не окружности, а фигуры посложнее, допустим, эллипса.
Читать дальше →
Total votes 60: ↑60 and ↓0+60
Comments18

Опубликованы исходные коды платформы онлайн-обучения edX

Reading time1 min
Views24K


1 июня был открыт доступ к репозиториям с исходными кодами платформы онлайн-обучения edX, основанной Массачусетским технологическим институтом и Гарвардским университетом. Теперь можно не только изучать огромное количество курсов на таких сайтах, как edx.org или coursera.org, но и создать свой собственный портал для дистанционного образования. Похоже, у Moodle появился конкурент.
Читать дальше →
Total votes 43: ↑42 and ↓1+41
Comments8

Необыкновенный способ генерации лабиринтов

Reading time6 min
Views87K
В этой статье я расскажу об одном необычном подходе к генерации лабиринтов. Он основан на модели Амари́ нейронной активности коры головного мозга, являющейся непрерывным аналогом нейронных сетей. При определенных условиях она позволяет создавать красивые лабиринты очень сложной формы, подобные тому, что приведен на картинке.

Вас ждет много анализа и немного частных производных. Код прилагается.
Прошу под кат!

Читать дальше →
Total votes 265: ↑264 and ↓1+263
Comments53

Вычисление N-го знака числа Пи без вычисления предыдущих

Reading time4 min
Views133K
С недавних пор существует элегантная формула для вычисления числа Пи, которую в 1995 году впервые опубликовали Дэвид Бэйли, Питер Борвайн и Саймон Плафф:
image

Казалось бы: что в ней особенного — формул для вычисления Пи великое множество: от школьного метода Монте-Карло до труднопостижимого интеграла Пуассона и формулы Франсуа Виета из позднего Средневековья. Но именно на эту формулу стоит обратить особое внимание — она позволяет вычислить n-й знак числа пи без нахождения предыдущих. За информацией о том, как это работает, а также за готовым кодом на языке C, вычисляющим 1 000 000-й знак, прошу под хабракат.
Читать дальше →
Total votes 118: ↑111 and ↓7+104
Comments95

Серьезное проектирование серьезных сайтов. Часть 2. Визуализация

Reading time8 min
Views85K

7. Карта ума.



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



Для создания карты ума (её чаще называют английским термином «Mind map»), мы можем использовать специальное ПО, я рекомендую Xmind.


Читать дальше →
Total votes 55: ↑48 and ↓7+41
Comments58

Information

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