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

Собрали в одном месте самые важные ссылки
и сделали Тренажер IT-инцидентов для DevOps/SRE

     05.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Статьи
     05.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

Confit - система конфигурации на YAML

Confit - предоставляет общий API для конфигов. Конфиги можно комбинировать из нескольких файлов. 

     05.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Видео
     05.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Статьи

Анализ данных: волны для серфинга на восточном побережье Ирландии

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

     05.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Статьи

Emacs - лучший Python редактор?

Статья описывает применение Emacs в качестве редактора для Python

     04.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

wavio - чтение, запись 24-битный WAV файлов с помощью numpy arrays

import numpy as np
import wavio

rate = 22050  # samples per second
T = 3         # sample duration (seconds)
f = 440.0     # sound frequency (Hz)
t = np.linspace(0, T, T*rate, endpoint=False)
x = np.sin(2*np.pi * f * t)
wavio.write("sine24.wav", x, rate, sampwidth=3)

     04.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Статьи

Если бы я проектировал механизм импорта с нуля

Статья описывает соображения про систему импорта. 

Автор рассматривает возможность избавиться глобального состояния, расширение возможностей импорта и другие идеи.

     04.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

django-mongolog - логгер в mongo

LOGGING = {
    'handler': {
        'mongolog': {
            'level': 'WARN',
            'class': 'mongolog.MongoLogHandler',
            'connection': 'mongodb://localhost:27017/'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'mongolog'],
            'level': 'DEBUG',
            'propagate': True
        },
    },
}

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

prwlock - многопоточный reader-writer lock

from prwlock.prwlock import RWLock

rwlock = RWLock()
from __future__ import print_function

import os
import time

from multiprocessing import Pool
from prwlock.prwlock import RWLock
def f(rwlock):
    for i in range(2):
        print(os.getpid(), 'Acquiring read lock')
        rwlock.acquire_read()
        print(os.getpid(), 'Sleeping for a while')
        time.sleep(1)
        print(os.getpid(), 'Releasing lock')
        rwlock.release()
        time.sleep(.1)

r = RWLock()
children = 20
pool = Pool(processes=children)
for child in range(children):
    pool.apply_async(f, [r])

     04.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Релизы

django-rosetta - 0.7.8

Django-приложение, которое облегчает перевод Django-проектов. Изменения описаны по ссылке https://allmychanges.com/p/python/django-rosetta/#0.7.8. Скачать можно по ссылке: https://pypi.python.org/pypi/django-rosetta

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

auditok - модуль для Audio/Acoustic Activity Detection

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

     02.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

Движок интернет магазина на django

Первое впечатление намного лучше чем от django-oscar

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Статьи

Визуальное объяснение List Comprehensions

Статья описывает конструкцию list comprehensions в Python

     02.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Интересные проекты, инструменты, библиотеки

numpngw - экспортируем массив numpy в виде PNG файлов

import numpy as np
from numpngw import write_png


# Example 1
#
# Create an 8-bit RGB image.

img = np.zeros((80, 128, 3), dtype=np.uint8)

grad = np.linspace(0, 255, img.shape[1])

img[:16, :, :] = 127
img[16:32, :, 0] = grad
img[32:48, :, 1] = grad[::-1]
img[48:64, :, 2] = grad
img[64:, :, :] = 127

write_png('example1.png', img)