IT-новости про Python, которые стоит знать

Собрали в одном месте самые важные ссылки
читайте авторский блог


Новый материал в ленте
  tornado - 6.4.2

Масштабируемый, не блокирующий web-сервер. Скачать можно по ссылке: https://pypi.python.org/pypi/tornado/


Python Дайджест. Выпуск 108

(11.01.2016 - 17.01.2016)

поделиться выпуском 
pythondigest.ru: Выпуск 108

Новости

  PEP 0510 -- Specialize functions with guards

В Python много изменяемого состояния: встроенные функции, код функций, глобальные переменные, локаьные переменные... Для оптимизации программ необходимо знать где какой-то объект изменился.

PEP добавляет в Python функции на C API, чтобы специализировать чисто Python-функции: добавить возможность писать функции с "охраннимиками" (guards), которые следят за объектами (делают версионирование объектов). Это позволит реализовать статические оптимизаторы соблюдая семантику Python

  PEP 0509 -- Скрытая версия для словарей

В Python много изменяемого состояния: встроенные функции, код функций, глобальные переменные, локальные переменные... Для оптимизации программ необходимо знать где какой-то объект изменился.  

Этот PEP добавляет "охранников" (guards), которые следят за объектами словарей. При изменении словаря версия словаря увеличивается.

Статьи

  Мой подход к Class Based Views

Когда-то я писал о своей неприязни к Class Based Views (CBV) в Django. Их использование заметно усложняет код и увеличивает его объём, при этом CBV мешают применять некоторые достаточно распространённые шаблоны (скажем, когда две формы представлены в одном view). И судя по всему, я не единственный из разработчиков Django, придерживающийся такой точки зрения.

Но в этом посте я хочу рассказать об ином подходе, который я применил в одном из проектов. Этот подход можно охарактеризовать одной фразой: «Создавайте свой собственный базовый класс». 

  Проектирование сложных приложений в Flask

Данная статья, размещенная в репозитории Flask на GitHub, является плодом коллективного творчества небезразличных программистов, а изначальный её автор — Brice Leroy. Она представляет собой достаточно полезный для начинающих материал по Flask. Лично для меня он стал ответом на многие простые вопросы, основным из которых был «как структурировать проект».

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

Описанный пример протестирован на Python 3.5, Flask 0.10, Flask-SQLAlchemy 2.1, Flask-WTF 0.9.

  Сравнение средств контроля доступа в Django

В статье сравниваются родная Джанговская система (уровень доступа к моделям), системы контроля доступа к отдельным объектам: Django guardian, Django role permissions, и Rules - контроль доступа, основанный не на хранимых в БД записях, а на функциях.

  История перезда Python на Github

Брет Кеннон расказал о том что стояло за решением разработчиков CPython перевести его разработку на Github

  NLP: "Как делать вещи со словами и счетчиками" на Python

Статья описывает основы NLP(Natural Language Processing). Например, Bag of words

  Использование LSM-движка из SQLite 4 в качестве отдельной NoSQL базы данных с использованием Python

На сегодняшний день две мои самые любимые темы — SQLite и key-value базы данных. И в этот раз я пишу сразу про обе: этот пост посвящён Python-обёртке для используемого в SQLite 4 key-value хранилища на основе LSM.

Разобравшись с исходным кодом SQLite 4 и крохотным заголовочным файлом LSM, я написал python-lsm-db (документация).

  Приступая к работе с научными данными в Python

Статья описывает основы использования популярных инструментов для научных вычислений

  CPython для самых маленьких: объекты и их атрибуты

Продолжение обсуждения бекенда CPython - всего того, что стоит за транслятором текста в байткод

  hasattr() - вредная конструкция

Статья описывает почему не стоит использовать hasattr() в своем коде. 

  График счастья с python, pandas и matplotlib

Зима — это по истине прекрасное время года. Но именно зимой я всегда задумываюсь о том, что встаю и ухожу на работу, а затем и возвращаюсь с работы, не видя солнечного света. Сегодня мне захотелось визуализировать данные о восходе и заходе солнца и соотнести их со столь привычным для многих распорядком дня (рабочие часы и время бодрствования). Для работы мы будем использовать Python (pandas + matplotlib). Посмотрим, что из этого получилось. 

  Распознавание и локализация исчезающих китов с помощью сверхглубоких нейронных сетей

В статье автор описывает свое решение этой проблемы. Решение этой Kaggle задачи заняло 2ое-место.

  Изолированная мемоизация (@memoize)

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

Однако, в простом случае кеш мемоизации глобален. В данной статье рассмотрен способ изоляции кешей.

  Рекурентная нейронная сеть в 10 строчек кода оценила отзывы зрителей нового эпизода “Звездных войн”

Hello, Habr! Недавно мы получили от “Известий” заказ на проведение исследования общественного мнения по поводу фильма «Звёздные войны: Пробуждение Силы», премьера которого состоялась 17 декабря. Для этого мы решили провести анализ тональности российского сегмента Twitter по нескольким релевантным хэштегам. Результата от нас ждали всего через 3 дня (и это в самом конце года!), поэтому нам нужен был очень быстрый способ. В интернете мы нашли несколько подобных онлайн-сервисов (среди которых sentiment140 и tweet_viz), но оказалось, что они не работают с русским языком и по каким-то причинам анализируют только маленький процент твитов. Нам помог бы сервис AlchemyAPI, но ограничение в 1000 запросов в сутки нас также не устраивало. Тогда мы решили сделать свой анализатор тональности с блэк-джеком и всем остальным, создав простенькую рекурентную нейронную сеть с памятью. Результаты нашего исследования были использованы в статье “Известий”, опубликованной 3 января.

  Стандарты симметричного шифрования стран СНГ на Python

Первые недели нового года самое подходящее время для того, чтобы уютно устроившись у окошка, вспомнить что же нам принес год ушедший. 
А принес он нам два новых стандарта шифрования. Российский стандарт ГОСТ Р 34.12-2015 (блочный шифр Кузнечик). И украинский ДСТУ 7624:2014 (блочный шифр Калина). Холодными, зимними вечерами нельзя упускать такой удачный повод покодить. Под катом краткое описание алгоритмов и их реализация на Python. А чтобы новым шифрам было веселее, разбавим их общество белорусским СТБ 34.101.31-2007.

  Django Single Sign-On и Microsoft Active Directory

Однажды мне пришлось заняться разработкой Web-приложения для корпоративного использования на Python+Django. И самым первым вопросом, который пришлось решать — это прозрачная авторизация на сайте или Single Sign-On (SSO).

Хотя о вопросе реализации SSO для Django написано немало статей, однако для того, чтобы реализовать то, что мне было необходимо, пришлось затратить относительно много времени. Поэтому, чтобы избавить некоторых из вас от возможных долгих поисков информации и ее сборки в работающую схему, предлагаю вам свой мануал, как сделать прозрачную авторизацию в приложении Django с использованием учетных записей Active Directory.

Интересные проекты, инструменты, библиотеки

  jug - фреймворк для распределенных вычислений

Jug позволяет писать код, который будет разбит на задачи, задачи будут выполнены на различных процессорах. Вы можете думать об этом как о легковесном map-reduce.

  Собственный pypi сервер

Pypi это бекенд для pip. Сервер, позволяет проксировать запросы с pypi.python.org, а также заливать собственные с авторизацией.

  pddb - PandasDatabase - база данных поверх Pandas

pddb - база данных для небольших проектов, которая поддерживает CRUDL операции. 

С помощью bottle добавляется REST API

  mwclient - MediaWiki API client

# Initialize Site object
import mwclient
site = mwclient.Site('commons.wikimedia.org')
site.login(username, password)

# Edit page
page = site.Pages['Commons:Sandbox']
text = page.text()
print 'Text in sandbox:', text.encode('utf-8')
page.save(text + u'\nExtra data', summary = 'Test edit')

# Printing imageusage
image = site.Images['Example.jpg']
print 'Image', image.name.encode('utf-8'), 'usage:'
for page in image.imageusage():
        print 'Used:', page.name.encode('utf-8'), '; namespace', page.namespace
        print 'Image info:', image.imageinfo

# Uploading a file
site.upload(open('file.jpg'), 'destination.jpg', 'Image description')

# Listing all categories (don't do this in reality)
for category in site.allcategories():
        print category

  beaker-es-plot - Рисование графиков из ElasticSearch

Позволяет автоматически вытаскивать и группировать данные метрик и агрегаций из ElasticSearch, выводит данные в формате JSON Plot API для отображения графиков в Beaker Notebook.

  django-eventtools - модуль для создания и отображения событий на сайте

Пакет добавляет модели события(Event) и времени появления(Occurrence) с помощью которых можно создавать повторяющиеся/одноразовые события, а затем отображать их на сайте.

  python-sinklog - передаем логи через интернет

Модуль состоит из CLI программы и сервера, который умеет принимать/отдавать логи. 

Запуская лог в своей программе, вы передаете данные на сервер, и одновременно с этим можете начать читать их с другого источника.

  django-classic-theme - классическая тема (из django 1.8-)

Модуль содержит набор css/js, которые возвращают старую админку для django 1.9+

Релизы

  coverage - 4.1b1

Утилита позволяющая измерить процент покрытия тестами. Изменения описаны по ссылке https://allmychanges.com/p/python/coverage/#4.1b1. Скачать можно по ссылке: http://pypi.python.org/pypi/coverage/

  Вышел Ansible 2.0

Этот релиз в первую очередь является масштабным рефакторингом, направленным на устранение technical debt, накопившегося за три года бурного роста до 1000 участников. Обещают обратную совместимость на уровне плейбуков, но API плагинов претерпел значительные изменения. Инструкция по портированию прилагается.

  cffi - 1.5.0

Интерфейс для вызова C-кода. Изменения описаны по ссылке https://allmychanges.com/p/python/cffi/#1.5.0. Скачать можно по ссылке: http://pypi.python.org/pypi/cffi/