
Python *
Высокоуровневый язык программирования
Вычисление 1000000 знаков числа Пи. На iPhone

Можно сказать сразу — миллион не предел. Можно и больше. Подробности и реализация под катом.
Приглашаем на Python-Meetup 22 сентября

Продолжая традицию собирать в стенах московского офиса ведущих специалистов, мы хотели бы пригласить вас на Moscow Python Meetup, который пройдет у нас в сентябре. На встрече выступят:
Как я создавал убийцу HTML

Script-server. WebUI для удалённого запуска ваших скриптов

Пишем изящный парсер на Питоне
if, позволяющий объявлять переменные прямо в заголовке блока. Это довольно удобно, поскольку конструкции видаFoo foo = make_foo();
if(foo.is_nice()) {
// do work with foo
}
// never use foo again
// foo gets deleted
довольно общеупотребительны. Код выше лёгким движением руки программиста (и тяжёлым движением руки комитета по стандартизации) превращается в:
if(Foo foo = make_foo(); foo.is_nice()) {
// do work with foo
} // foo gets deleted
// never use foo again (well, you can't anyway)Стало чуть-чуть лучше, хотя всё ещё не выглядит идеально. В Python нет и такого, но если вы ненавидите
if в Python-коде так же сильно, как я, и хотите научиться быстро писать простые парсеры, то добро пожаловать под кат. В этой статье мы попытаемся написать короткий и изящный парсер для JSON на Python 2 (без каких-либо дополнительных модулей, конечно же). Интервью с Артёмом Малышевым, который выступит на Moscow Python в октябре
Айтишных конференций в Москве проходит много. Если ходить на каждую — то можно только этим и заниматься. Разработчики-интроверты ходить на конференции не очень любят: кто все эти люди, почему доклады либо неинтересны либо для полутора узких спецов, все равно ничего нового не узнаю и так далее. Но ходят. Потому что конференция — это уникальная возможность пообщаться с такими же разработчиками, которые собрались в одно месте специально для этого. А чтобы не промахнуться, мы ориентируемся на доклады. Если доклад затрагивает интересную нам тему, то можно будет пообщаться и со спикером, и с другими гостями, которые на этот доклад пришли. Велики шансы, что пришли они не просто так, и тема их тоже интересует. Ну а чтобы совсем не промахнуться, организаторы некоторых конференций за месяц до начала делают ряд интервью со спикерами, где задают им разные каверзные вопросы. Чтобы интересующиеся заявленными темами могли оценить: хотят ли они пообщаться со спикером и другими слушателями.
На прошлой неделе я проинтервьюировал Ивана из Positive Technologies, который чуть больше чем через месяц расскажет нам, почему 100% покрытие тестами это плохо. А сегодня я предлагаю вам почитать ответы его коллеги Артёма Малышева, который расскажет нам про Django Channels. Штуку, благодаря которой больше не нужно будет каждый второй проект начинать с развертывания и настройки Celery.
ML boot camp 2016 новичок в ТОП 10

Интервью с первым спикером Moscow Python
Scrapy: собираем данные и сохраняем в базу данных
Введение
Меня заинтересовал данный фреймворк для сбора информации с сайтов. Здесь были публикации по Scrapy, но поскольку детальной информации на русском языке мало, то я хотел бы рассказать о своем опыте.
Математика для искусственных нейронных сетей для новичков, часть 3 — градиентный спуск продолжение
В предыдущей части я начал разбор алгоритма оптимизации под названием градиентный спуск. Предыдущая статья оборвалась на писании варианта алгоритма под названием пакетный градиентный спуск.
Существует и другая версия алгоритма — стохастический градиентный спуск. Стохастический = случайный.
Статическая и динамическая типизация
Эта статья рассказывает о разнице между статически типизированными и динамически типизированными языками, рассматривает понятия "сильной" и "слабой" типизации, и сравнивает мощность систем типизации в разных языках. В последнее время наблюдается четкое движение в сторону более строгих и мощных систем типизации в программировании, поэтому важно понимать о чем идет речь когда говорят о типах и типизации.

Тип — это коллекция возможных значений. Целое число может обладать значениями 0, 1, 2, 3 и так далее. Булево может быть истиной или ложью. Можно придумать свой тип, например, тип "ДайПять", в котором возможны значения "дай" и "5", и больше ничего. Это не строка и не число, это новый, отдельный тип.
Статически типизированные языки ограничивают типы переменных: язык программирования может знать, например, что x — это Integer. В этом случае программисту запрещается делать x = true, это будет некорректный код. Компилятор откажется компилировать его, так что мы не сможем даже запустить такой код. Другой статически типизированный язык может обладать другими выразительными возможностями, и никакая из популярных систем типов не способна выразить наш тип ДайПять (но многие могут выразить другие, более изощренные идеи).
Динамически типизированные языки помечают значения типами: язык знает, что 1 это integer, 2 это integer, но он не может знать, что переменная x всегда содержит integer.
Среда выполнения языка проверяет эти метки в разные моменты времени. Если мы попробуем сложить два значения, то она может проверить, являются ли они числами, строками или массивами. Потом она сложит эти значения, склеит их или выдаст ошибку, в зависимости от типа.
Как мы написали чат для приложения банка «Открытие»

Ближайшие события
Немного про кино или как делать интерактивные визуализации в python

Введение
В этой заметке я хочу рассказать о том, как можно достаточно легко строить интерактивные графики в Jupyter Notebook'e с помощью библиотеки plotly. Более того, для их построения не нужно поднимать свой сервер и писать код на javascript. Еще один большой плюс предлагаемого подхода — визуализации будут работать и в NBViewer'e, т.е. можно будет легко поделиться своими результатами с коллегами. Вот, например, мой код для этой заметки.
Для примеров я взяла скаченные в апреле данные о фильмах (год выпуска, оценки на КиноПоиске и IMDb, жанры и т.д.). Я выгрузила данные по всем фильмам, у которых было хотя бы 100 оценок — всего 36417 фильмов. Про то, как скачать и распарсить данные КиноПоиска, я рассказывала в предыдущем посте.
Обучение с подкреплением для самых маленьких
Обучение с подкреплением — это метод машинного обучения, при котором происходит обучение модели, которая не имеет сведений о системе, но имеет возможность производить какие-либо действия в ней. Действия переводят систему в новое состояние и модель получает от системы некоторое вознаграждение. Рассмотрим работу метода на примере, показанном в видео. В описании к видео находится код для Arduino, который реализуем на Python.
Задача
С помощью метода «обучение с подкреплением» необходимо научить тележку отъезжать от стены на максимальное расстояние. Награда представлена в виде значения изменения расстояния от стены до тележки при движении. Измерение расстояния D от стены производится дальномером. Движение в данном примере возможно только при определенном смещении «привода», состоящего из двух стрел S1 и S2. Стрелы представляют собой два сервопривода с направляющими, соединенными в виде «колена». Каждый сервопривод в данном примере может поворачиваться на 6 одинаковых углов. Модель имеет возможность совершить 4 действия, которые представляют собой управление двумя сервоприводами, действие 0 и 1 поворачивают первый сервопривод на определенный угол по часовой и против часовой стрелке, действие 2 и 3 поворачивают второй сервопривод на определенный угол по часовой и против часовой стрелке. На рисунке 1 показан рабочий прототип тележки.

Рис. 1. Прототип тележки для экспериментов с машинным обучением
Индивидуальный дневной лимит на исходящие звонки (ограничение платных направлений)
Предыстория
Есть группа сотрудников, которая занимается обзвоном клиентов. Дабы экономить на исходящих звонках, для разных направлений используются разные номера телефонов. Это спокойно решается с помощью шаблонов (масок) номеров в Outbound Routes. Но часть направлений, например, звонки на мобильные, остается платным. Чтобы в конце месяца счет компании за телефонные услуги не перевалил XXX$, необходимо жестко контролировать и, при необходимости, ограничивать соответствующие направления звонков.
Задача
Установить индивидуальный дневной лимит для группы менедежеров. Запретить исходящие звонки на определенные направления при исчерпании лимита. При достижении пороговых значение: >50%, >90% и >100% отправлять соответствующее уведомление на email сотрудника. Если сотрудник в течении дня полностью не исчерпал свой дневной лимит, остаток должен перейти на следующий день.
Управление зависимостями в Python: похоже, уже можно пользоваться
В большинстве популярных языков программирования и экосистем с зависимостями все плохо. Как правило, создатели нового языка программирования уделяют этому не очень много внимания: просто потому, что в новом языке еще нет сотен тысяч библиотек для разных архитектур и версий, нетривиальным образом зависящих друг от друга. А когда эти сотни тысяч библиотек появляются – уже поздно что-нибудь менять.Единственным на моей памяти исключением является node.js, авторы которой разработали «с чистого листа» на удивление удачную систему управления зависимостями. Ну, как удачную? Проблем там тоже много, начиная автовыполняемыми скриптами и заканчивая переходом от древовидной к flat структуре в 3-й версии. Но по сравнению с тем, что на тот момент было в других языках, нода — это прорыв.
Совсем недавно экосистема пополнилась новой утилитой rnpm, которая позволяет одной командой устанавливать React Native зависимости. В которых, на секундочку, может быть бинарный код для android и ios. Для разных архитектур. И все это работает из коробки. Мы в Voximplant хорошо знакомы с этой штукой: с ее помощью ставится наш собственный React Native SDK.
Вашему вниманию предлагаем интересную статью, опубликованную всего два дня назад, в которой очень подробно рассказывается про управление зависимостями в Python. Про историю развития. Про проблемы. И, что самое ценное — про то, как сообщество их решает. Под катом адаптированный для Хабра перевод и возможность обсудить печальную тему зависимостей. И не только для Python.
Книга «Простой Python. Современный стиль программирования»
Привет, Хаброжители! Наконец-то у нас вышла книга Билла Любановича:Эта книга идеально подходит как для начинающих программистов, так и для тех, кто только собирается осваивать Python, но уже имеет опыт программирования на других языках. В ней подробно рассматриваются самые современные пакеты и библиотеки Python.
Стилистически издание напоминает руководство с вкраплениями кода, подробно объясняя различные концепции Python 3. Под обложкой вы найдете обширный материал от самых основ языка до сравнительно сложных и узких тем.
Прочитав эту книгу, вы не только убедитесь, что Python — это вкусно, но и освоите искусство тестирования, отладки, многократного использования кода, а также научитесь применять Python в различных предметных областях.
Бот-кассир на pywinauto, или GUI automation для платежного шлюза
Генерируем красивую Google-таблицу из своей программы (используя Google Sheets API v4)
Постановка задачи
Пусть нам нужно создать программой на языке Python вот такую таблицу:

Особенности этой таблицы:
- задана ширина столбцов;
- верхняя ячейка является объединением A1:E1;
- в некоторых ячейках настроены: формат отображения, размер шрифта, жирность, выравнивание текста и цвет фона;
- значения в последнем столбике вычислены формулой (например, в E4 написано =D4-C4);
- нарисована граница под ячейками A3:E3;
- присутствует Пикачу (но это останется как домашнее задание для энтузиастов).
Интересно? Тогда добро пожаловать под кат.