Выпуск 109

(18.01.2016 - 24.01.2016)

pythondigest.ru: Выпуск 109

Новости

      Грант на разработку Django для участников DjangoCon Europe 2016

DSF объявил грант для привлечения разработчиков. Круглые суммы.

Статьи

      Linux в кармане — на службе у фотографа

Это рассказ, о том, как мне удалось сделать для себя инструмент, который с минимальным моим участием и минимальным дополнительным весом в рюкзаке, помогает сделать красивые слайдшоу. И конечно же рассказ о python, ffmpeg и linux на android.

      Примеры использования Walrus - легковесный Redis Toolkit

walrus это легковесная Python библиотека для Redis. В этой статье вы найдете экскурсию по библиотеки. Также показаны примеры использования.

      Давайте напишем простой интерпретатор. Часть 8

В этот раз автор расскажет о реализации унарных операций

      Разработка и разветывание Cookiecutter-Django на Fedora

Cookiecutter - это шаблоны проектов. В статье рассмотрен шаблон Django проекта

      FlyElephant как инструмент для вычислений на C++, R, Python или Octave

FlyElephant — это платформа, которая предоставляет ученым готовую вычислительную инфраструктуру для проведения расчетов, автоматизирует рутинные задачи и позволяет сосредоточиться на основных вопросах исследований. 

      Использование Bokeh в NIST

Статья описывает использование Python и Bokeh для построения графиков в National Institute of Standards and Technology (NIST) 

      Полно-текстовый поиск на Django используя базу данных (PostgreSQL, MySQL)

Статья показывает как реализовать полно-текстовый поиск на PostgreSQL и MySQL

      contextlib — Context Manager Utilities — PyMOTW 3

В contextlib модуль содержит утилиты для работы с контекстом и оператор with

      Зачем и как мы бэкапим github

Вообще лирическое вступление было навеяно вполне конкретной историей про сломанный гитхаб. Сделанная на заре одного из проектов синхронизация домашнего репо в гитхаб решила проблему переезда. Потом про костыль забыли. Древнее зло уснуло и терпеливо ждало своего часа. В один прекрасный день скайнет новый сотрудник решил привести в порядок тот самый домашний репозиторий. И самым популярным вопросом среди программистов в тот день было «коллега, а вы не видели мою ветку 0022? ну такая, с багфиксами». Руководство опс-тим было спокойно как никогда: гит — это распределенная система, версия кода хранится на персональном компьютере каждого разработчика. Давайте уже как-нибудь разберитесь между собой и не отвлекайте нас от сборки наших ядер и тюнингов сетевых стеков.

      Несколько камер на Raspberry Pi с OpenCV

Автор статьи продемострирует, как подключить несколько камер к вашей Raspberry Pi...и получить доступ ко всем из них, используя один скрипт на Python. 

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

      Пишем простые проекты. Проект #1. Часть #1

Замечено, что новичкам трудно перейти от теории к практике - заставить себя писать, а не только читать. Чтобы помочь мы постоянно публикуем различный материал и указываем как применить эти знания на практике.

В этот раз решили написать 2 небольших проекта:

  • Первый - страница со статистикой отжимания. Будет показано, как с помощью flask + google chart's сделать проект для сохранения и визуализации количества отжиманий.
  • Второй - vk2rss - сервис для преобразования стен групп ВКонтакте в RSS. Будет рассмотрен парсинг, работа с VK API, создание простого GUI.

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

      tcconfig - утилита для контроля трафика

Утилита позволяет установить программную задержку, процент потерь

      Torrelque - асинхронные надежные очереди на основе Tornado и Redis

#!/usr/bin/env python3


import random
import logging

import tornadoredis
from tornado import gen, ioloop
from torrelque import Torrelque


logger = logging.getLogger(__name__)


@gen.coroutine
def produce():
    redis = tornadoredis.Client()
    queue = Torrelque(redis, ioloop.IOLoop.current())
    while True:
        for _ in range(5):
            task = {'value': random.randint(0, 99)}
            logger.debug('Produced task %s', task)
            yield queue.enqueue(task)
        yield gen.sleep(10)


@gen.coroutine
def process(task_data):
    logger.debug('Consmed task %s', task_data)
    yield gen.sleep(1)

@gen.coroutine
def consume():
    redis = tornadoredis.Client()
    queue = Torrelque(redis, ioloop.IOLoop.current())
    while True:
        task_id, task_data = yield queue.dequeue()
        if not task_id:
            continue
        try:
            yield process(task_data)
            yield queue.release(task_id)
        except Exception:
            logger.exception('Job processing has failed')
            queue.requeue(task_id, delay = 30)

@gen.coroutine
def main():
    for _ in range(4):
        ioloop.IOLoop.current().spawn_callback(consume)

    yield produce()


if __name__ == '__main__':
    logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s %(message)s')
    ioloop.IOLoop.instance().run_sync(lambda: main())

      zini - парсер INI-файлов с поддержкой схем и типов

Библиотека поддерживает несколько базовый типов данных. Ниша библиотеки - хранение сложных структур данных

      django-vimeo - приложение для вставки vimeo видео

{% load django_vimeo_tags %}

The video tag:
{% vimeo instance.video width=600 as video %}
   <video width="600" loop="loop" autoplay="autoplay" poster="{{ video.optimal_picture.link }}">
       <source src="{{ video.optimal_file.link_secure }}" type='{{ video.optimal_file.type }}'>
       {% trans 'tag "video" not supported by your browser' %}
       <a href="{{ video.optimal_download.link }}">{% trans 'download video' %}</a>.
   </video>
{% endvimeo %}

Or embed shortcut:
{% vimeo instance.video width=600 %}

      easy-class - модуль для создание классов с проверкой типов

from easy_class import EasyClass, StringVariable, IntegerVariable


class MyClass(EasyClass):
    attr1 = IntegerVariable()
    attr2 = StringVariable()

      streamexpect - кроссплатформенная библиотека для потоков и сокетов

import serial
import streamexpect

# timeout=0 is essential, as streams are required to be non-blocking
ser = serial.Serial('COM1', baudrate=115200, timeout=0)

with streamexpect.wrap(ser) as stream:
  stream.write('\r\nuname -a\r\n')
  match = stream.expect_bytes('Linux', timeout=1.0)
  print(u'Found Linux at index {}'.format(match.start))

      pyStopWatch - модуль реализации нескольких таймеров с одним секундомером

Модуль позволяет использовать несколько таймеров с одним секундомером, указывать времена срабатывания, текст сообщений, перезапускать таймеры.

      pickleshare - небольшая 'shelve'-like БД с поддержкой параллельных запросов

from pickleshare import *
db = PickleShareDB('~/testpickleshare')
db.clear()
print "Should be empty:",db.items()
db['hello'] = 15
db['aku ankka'] = [1,2,313]
db['paths/are/ok/key'] = [1,(5,46)]
print db.keys()

      simiki - простой wiki framework

Демо по ссылке http://demo.simiki.org/

      tweet-preprocessor - модуль для очистки, парсинга, токенизации твиттов

Модуль подходит для препроцессинга твиттер данных для машинного обучения

      timeoutcontext - timeout context manager

Модуль реализован на основе модуля signal

from timeoutcontext import timeout, TimeoutException
from time import sleep

try:
    with timeout(1):
        sleep(2)
except TimeoutException:
    print('timeout')

      classifier - утилита, классифицируем файлы и раскладываем по папкам

До:

Downloads
│   ├── project.docx
│   ├── 21 Guns.mp3
│   ├── Sultans of Swing.mp3
│   ├── report.pdf
│   ├── charts.pdf
│   ├── VacationPic.png
│   ├── CKEditor.zip
│   ├── Cats.jpg
│   ├── archive.7z

После:

Downloads
│   ├── Music
│   │   └── 21 Guns.mp3
│   │   ├── Sultans of Swing.mp3
|   |
│   ├── Documents
│   │   └── project.docx
│   │   └── report.pdf
│   │   ├── charts.pdf
│   ├── Archives
│   │   └── CKEditor.zip
│   │   └── archive.7z
│   ├── Pictures
│   │   └── VacationPic.png
│   │   └── Cats.jpg

Релизы

      virtualenv - 14.0.1

Инструмент создания виртуального рабочего окружения. Изменения описаны по ссылке https://allmychanges.com/p/python/virtualenv/#14.0.1. Скачать можно по ссылке: http://pypi.python.org/pypi/virtualenv/

      coverage - 4.1b2

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

      Файловый менеджер Sunflower 0.3

Sunflower — двухпанельный файловый менеджер, написанный на python с использованием тулкита GTK. Программа изначально спроектирована вокруг плагинной архитектуры и поддерживает пользовательские плагины. Разработка Sunflower нацелена на сочетание мощности и простоты использования, а также интеграцию в Gnome и другие рабочие окружения.

      robobrowser - 0.5.3

Простая библиотека для просмотра веб-страниц без веб-браузера.. Изменения описаны по ссылке https://allmychanges.com/p/python/robobrowser/#0.5.3. Скачать можно по ссылке: http://badge.fury.io/py/robobrowser

      pip - 8.0.2

Утилита для управления модулями в Python. Изменения описаны по ссылке https://allmychanges.com/p/python/pip/#8.0.2. Скачать можно по ссылке: http://pypi.python.org/pypi/pip/

      django-taggit - 0.18.0

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

      celery - 3.1

Распределенная очередь задач. Изменения описаны по ссылке https://allmychanges.com/p/python/celery/#3.1. Скачать можно по ссылке: http://pypi.python.org/pypi/celery/

      numpy - 1.12.0

Модуль для работы с многомерными массивами. Изменения описаны по ссылке https://allmychanges.com/p/python/numpy/#1.12.0. Скачать можно по ссылке: http://pypi.python.org/pypi/numpy/