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

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

     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
        },
    },
}

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

История одной оптимизации: передача и обработка результатов боя

Сегодня я расскажу вам о небольшой части большого проекта — World of Tanks. Многие из вас, наверное, знают World of Tanks со стороны пользователя, я же предлагаю взглянуть на него с точки зрения разработчика. В этой статье речь пойдет об эволюции одного из технических решений проекта, а именно — передаче и обработке результатов боя.

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Колонка автора

API всему голова: gitter api - пишем в чат от своего лица

Gitter - это система для создания чатов для пользователей Github. Чаты бесплатны, есть интеграция с Github, есть API - что еще для небольшого чата надо?

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

     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)       Колонка автора

Python на службе народа: добавляем водяной знак на изображение

PIL - мощная библиотека для работы с изображениями. С помощью этой библиотеки можно выделять необходимые части картинок, конвертировать между форматами, рисовать, накладывать слои.

В качестве наложения слоев хочется привести удачно позаимствованный пример наложения водяного знака на изображение

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Колонка автора

Интересные концепции: опциональная статическая типизация

Не секрет, что Python (CPython) - динамически типизируемый язык (все типы выясняются во время выполнения программы). Это как дар так и проклятие. С одной стороны - можно быстрее писать программы, с другой - тяжелее найти ошибки. При этом, если была бы статическая типизация - уже на этапе компиляции мы знали бы где мы затупили с типами.

В русскоязычном Python Андрей Власовских из Jetbrains наиболее часто говорит об этой концепции. Представляю сборку материалов от этого докладчика:

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Колонка автора

Пишем web-проекты: django сигналы

Хочется поделиться ссылкой на статью - https://zxmd.wordpress.com/2013/05/23/django_signals/

Что такое сигнал в Django Framework ?

На бытовом уровне это система (диспетчер сигналов) которая обрабатывает некоторые виды событий которые генерирует система. По сути система сигналов разделяется на два компонента:

sender — компонент посылающий сигнал;

receiver — компонент отвечающий за обработку сигнала. ...

     03.12.2015       Выпуск 102 (30.11.2015 - 06.12.2015)       Видео

Пишем web-проекты: Гексагональная архитектура в приложениях Django

Видео со свежего Moscow Python митапа. Как не превратить свой проект в груду урлов? Как не потерять расширяемость с ростом кодовой базы? Как писать поддерживаемый код? Об этих проблемах и их возможных решениях на примере Django расскажет и покажет Малышев Артем.

     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)       Конференции, события, встречи разработчиков

PyNSK #5 — пятая встреча Новосибирского Python сообщества

Питонисты Новосибирска, приглашаем вас на встречу сообщества Python сообщества — PyNSK. 

12-го декабря (суббота) состоится пятая встреча. Она пройдет в новом для нас месте — Культурный Центр «Этаж» и начнется 13-00.
На встрече вас ждет море общения и 2 доклада

     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)