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

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


Новый материал в ленте
  lxml - 5.0.2

Мощный и быстрый модуль для обработки XML/HTML. Скачать можно по ссылке: https://pypi.python.org/pypi/lxml/


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

(23.11.2015 - 29.11.2015)

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

Новости

  PythonDigest — выпуск номер 100 и другие замечательные новости

Python жив! С такого громкого заявления хочется начать статью. 

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

В конце 2014 года мы подводили итоги за год. В этот раз мы рассмотрим тенденции за неполные 11 месяцев 2015-года.

Но перед тем как перейдем к тенденциям — расскажем что сделали за (почти) год. 

Статьи

  Старт с Docker, Compose и Django

Это пошаговый туториал о том, как начать использовать docker с django

  Python интерпретатор написанный на Python

Byterun это интерпретатор Python написанный на Python. Статья расскажет о структуре интерпретаторе. Эта статья сможет помочь погрузиться в тему интерпретаторов

  Python 3.5 type hinting в PyCharm 5

Статья рассказывает как PyCharm поддерживает type hinting 

  BDD тестирование REST приложения

Это статья-введение в behaviour-driven development (BDD) на примере REST Python-Flask приложения

  Оптимизация производительности Django REST Framework

Статья описывает один из способов оптимизации модуля Django-rest-framework

  Библиотека Python 3 для подключения к ЕСИА — esia-connector

Все началось с того, что Минкомсвязи разрешило использовать портал госуслуг для идентификации и аутентификации пользователей на негосударственных веб-узлах. Это реализуется с помощью службы ЕСИА (Единая Система Идентификации и Аутентификации — esia.gosuslugi.ru). Заказчик нашего проекта входил в число первых 5-ти участников, которые подали заявки на интеграцию с ЕСИА, что выразилось для нас задачей эту интеграцию поддержать. В свободном доступе мы не нашли открытого бесплатного решения подходящего для своего стека технологий, поэтому после разработки, с благословления заказчика, решили поделиться собственным (BSD license). Итак, представляем вам проект esia-connector, написан на Python 3, использует утилиту openssl, проверялся в работе только в Debian-based системах. Пакет: pypi.python.org/pypi/esia-connector Проект: github.com/saprun/esia-connector

  Нам нужны не столь мощные языки программирования

Сегодня многие системы и языки программирования позиционируются как «мощные». Нельзя сказать, что это плохо. Почти каждый из нас считает это положительным свойством. Но в этом посте я хочу донести такую точку зрения, что во многих случаях нам нужныменее мощные языки программирования и системы. Но прежде чем продолжить, уточню: здесь будет мало оригинальных, моих собственных размышлений. Я буду излагать ход мыслей, возникший по прочтении книги Дугласа Хофштадтера «Гёдель, Эшер, Бах», которая помогла мне собрать воедино разрозненные идеи и мысли, бродившие в голове. Также большое влияние на нижеизложенный материал оказали пост Филипа Вадлера и видеозапись с конференции Scala. Ключевая мысль такова:

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

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

  Asyncio Tarantool Queue, вставай в очередь

В одной из своих статей я рассказывал об асинхронной работе с Tarantool на Python. В данной статье продолжу эту тему, но внимание хочу уделить обработке информации через очереди на Tarantool. Мои коллеги опубликовали несколько статей о пользе очередей (Инфраструктура обработки очередей в социальной сети Мой Мир и Push-уведомления в REST API на примере системы Таргет Mail.Ru). Хочу дополнить информацию об очередях на примере решений наших задач, а также рассказать о работе с Tarantool Queue на Python и asyncio. Почему мы выбираем именно Tarantool, а не Redis или RabbitMQ?

  Хроники лаборатории: как мы молотый кофе считали софтом для анализа клеточных структур

Продолжаю кофейную тематику, которую я начал еще на geektimes: Здравствуйте, я Meklon и я кофеин-зависимый. Сегодня мы будем творить непотребства с софтом для биоинженерных задач — CellProfiler. Нормальные люди им считают клетки, плазмиды, экспрессию белка и прочие нужные вещи. Мы долбанутые, поэтому будем проводить гранулометрический анализ помола по микрофотографии, бить кофе статическим электричеством и думать, как прицепить к этому безобразию фен. Ну и конечно нам потребуется скотч для получения графена картины распределения частиц.

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

  Конвертируем XLSX в PDF

По ссылке вы найдете готовый код для конвертирования XLSX в PDF

  Raspberry Pi 2 + цветок == интересная задача

Статья описывает как воспользоваться датчиком влажности и получить с него данные через Интернет. 

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

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

  Нейросеть в 11 строчек на Python: часть 1

Лично я лучше всего обучаюсь при помощи небольшого работающего кода, с которым могу поиграться. В этом пособии мы научимся алгоритму обратного распространения ошибок на примере небольшой нейронной сети, реализованной на Python.
 

Дайте код!

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)

Слишком сжато? Давайте разобьём его на более простые части.

Видео

  Синтаксис Python: применение генераторов

Генераторы Python уже давно используются для решения всевозможных проблем связанных с итерациями и потоками данных. В этом уроке мы рассмотрим некоторые экзотические виды использования генераторов, таких как написание контекста менеджеры, функций обратного вызова (callbacks), устранение рекурсии, workers и много другого. Внимание - видео очень длинное, но ЖЖУТКО интересное

  PyCon Ireland 2015 видео

Видео с конференции PyCon Ireland 2015, целый play-list

Учебные материалы

  Книга: Как делать ошибки в Python

Все программисты делают ошибки, даже опытный программист Майк Пирната (Mike Pirnat),который занимается Python течение 15+ лет. Некоторые ошибки - простые и глупые, а некоторые слишком сложные и дорогие для исправление. Эта книга расскажет его наиболее запоминающиие ляпы.

Колонка автора

  Таинство стандартной библиотеки: sys.platform - определяем операционную систему

При написании софта для кого-то, а не только для себя, необходимо учитывать специфику рабочего окружения.

Например, у разработчика стоит Linux, а у пользователя Windows. Или даже если у обоих стоит одна ОС, то на одном ПК может стоять необходимый модуль, а на другом нет. Все это накладывает отпечаток. Python со стандартной библиотекой предоставляет необходимый инструментарий для разрешения многих проблем.

  Пишем web-проекты: jinja2 - шаблонизатор

Jinja — это шаблонизатор для языка программирования Python. Он подобен шаблонизатору Django, но предоставляет Python-ические выражения, обеспечивая исполнение шаблонов в песочнице. Это текстовый язык шаблонов и, таким образом, может быть использован для создания какой-либо разметки, а также исходного кода. Шаблонизатор Jinja позволяет настраивать теги, фильтры, тесты и глобальные переменные. Также, в отличие от шаблонизатора Django, Jinja позволяет конструктору шаблонов вызывать функции с аргументами на объектах.

  Практические задачи: Задача #001 - генерация псевдо-настоящих данных о пользователе

Задача #001 - псевдо-настоящих данных о пользователе.
Описание:

Запускается сайт знакомств - http://super-dating-site.com/ и чтобы повысить привлекательность среди новых пользователей необходимо заполнить сайт пользователями.....

  API всему голова: ВКонтакте - от начала до отправки сообщения другу

Работа с API сервисов это всегда история по типу "Ожидание...реальность". Ибо даже простое API может скушать день, а то и 2 дня рабочего времени.

API Вконтакте не исключение. Уже есть очень много материалов на тему использования этого интерфейса

И из раз в раз гугл мучается от запросов "Vk.com api". Пользователи ищут примеры авторизация, документацию, примеры использования. Поэтому я приведу один из вариантов старта в API Вконтакте, а именно. Мы отправим hello world другу.

  Полезные библиотеки: swig - запускаем C-код из Python

Для работы с С-библиотеками есть несколько способов:
- Писать программу на С/C++ и подключать DLL (.so) файлы
- Попытаться напрямую запустить C код из нужного языка. 

Перед тем как продолжить - зачем нужно запускать C/C++ код?
Все просто - например, работаем с железом, а значит и с драйверами (а их пишут на C). Вот здесь и появляется необходимость взаимодействовать с С кодом.

  Полезные библиотеки: boher - библиотека визуализации данных

Bokeh- это библиотека для интерактивной визуализации адаптированная под отображение в браузере. В этом и суть этой библиотеки.

boher имеет биндинги к самым различным языкам - R, Lua, Python, Julia. Вы пишите код визуализации на своем языке, а затем с помощью BokehJS отображаете в браузере. Возможности у инструмента огромные, прям как D3.js

  Интересные концепции: webhook

Webhook — механизм получения уведомлений об определённых событиях (в основном о действиях пользователей) на свой собственный сайт. В момент срабатывания события - бросается запрос (чаще всего POST) на указанный URL.

Например, разновидность Webhook - GitHook - отслеживает статус Git-репозитория на предмет изменений - пришел коммит на определенную ветку, проставили тэг и другое. 

  Пишем web-проекты: django-braces - набор миксин на все случаи жизни

При разработке сколько-либо сложного django-проекта необходимо из раза в раз писать одинаковые куски кода - разграничивать доступ к контенту.

Например. чтобы только администратор в меню сайта видел ссылку на "админку", или чтобы модератор имел какую-то внутреннюю страницу, которая не доступна простому пользователю.

В случае с уровнем доступа, с авторизацией и прочими типовыми задачами есть набор готовых миксин - django-braces.
Django-braces позволяет в пару copy-paste сделать авторизацию, регистрацию пользователя, вернуть ответ view'хи в виде JSON, работать с SSL- эти и многие другие куски кода можно взять в этом модуле.

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

  AppImageKit - покуем desktop приложение в виде AppImages

AppImages позволяет запустить приложение на самых различных Linux'ах -  RHEL, CentOS, Ubuntu, Fedora, Debian и подобных

  ButterflyNet – framework для работы с сетью на asyncio

Фреймворк был разработан чтобы упростить работу с сокетами (ибо они не так просты), Twisted сложная для обучения, да и в нем много мусора, а asyncio хорошо подходит для сетевых взаимодействий.

  hacker-scripts - скрипты из истории http://bash.im/quote/436725

xxx: У нас тут YYY (билд инженера) сманили. Чел принципиально жил только в консоли и vim, диаграммы рисовал скриптами в dot, доки писал в wiki маркдауном, если что-либо требовало больше чем 1.5 минуты писал скрипт. Сидим разбираем его наследие.
xxx: Из прекрасного
xxx: smack-my-bitch-up.sh - шлет видимо его жене "Задержался на работе" и генерит отмазки из списка. Поставлено в cron, стреляет после 9 вечера если на рабочей станции висят интерактивные сессии по ssh с его логином.
xxx: kumar-mudak.sh - сканит почту, ищет письма от Кумара (заграничный ДБА с говорящей фамилией) с ключевыми словами (sorry, help и т.д.) откатывает упомянутую базу стейджинга на последний бэкап и отписывается типа не вопрос будь аккуратнее в следующий раз. Зело заколебал его Кумар вестимо.
xxx: badun.sh - поставлен на cron на определенные даты, шлет письма "плохо себя чувствую, поработаю из дома" опять же если к 8-45 утра не обнаружилось интерактивных сессий на рабочей станции.
xxx: И наконец первый приз: coffe-blyat.sh - ждет 17 сек (!!!) логинится по ssh в кофе-машину (епрст, мы и понятия не имели что она в сетке да и еще что на ней sshd поднят) и засылает туда какую-то абракадабру. Экспериментальным путем выяснили что ЭТО запускает процесс варения half-caf chai latte среднего размера, которое начинает выливаться в чашку как раз к тому моменту когда неспеша идущий человек добирается от его офиса до автомата.

  neobunch - словарь с доступом через точку (как в JS)

>>> b = NeoBunch()
>>> b.hello = 'world'
>>> b.hello
'world'
>>> b['hello'] += "!"
>>> b.hello
'world!'
>>> b.foo = NeoBunch(lol=True)
>>> b.foo.lol
True
>>> b.foo is b['foo']
True

  NetRNG - распределенная сеть для генерации случайных значений

NetRNG - проект призванный объединить самые различные устройства в сеть для генерации случайных чисел.