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

Собрали в одном месте самые важные ссылки
консультируем про IT, Python

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Конференции, события, встречи разработчиков

Открылось Slack-сообщество Python.ru

В преддверии открытия python.ru появилось сообщество в Slack, где любой русскоговорящий python-разработчик может пообщаться в тематической обстановке

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Полезные инструменты: clonedigger - поиск дубликатов кода

Количество кода - это некоторый критерий для ПО. Практика показывает, что чем больше кода - тем сложнее поддерживать и развивать продукт. А если в этом коде много copy-past'ы, то совсем плохо.

Для выявления повторяющихся кусков кода существуют различные инструменты. Один из них CloneDigger. Это старая разработка (еще в 2008 году автор выступал на EuroPython), однако, работает хорошо и на данный момент.

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Синтаксис Python: all и any

Коротко: all и any - встроенные методы, которые позволяют проверять все элементов списка на выполнение условия.

При валидации данных часто возникает задача проверить структуру на корректность. Например, пускай есть список словарей:

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Синтаксис Python: __slots__

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

Но что если хочется максимально уменьшить размер объектов (а в python все объекты) и при этом не потерять в функциональности? Для примера возьмем плоскость. На плоскости, пускай, надо разместить миллион точек (что не так много). При этом надо иметь возможность красить точку в разные цвета, расстояния подсчитывать и прочие действия.

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Практические задачи: Задача #003 - система генерации описаний

Продолжаем предлагать различные задачи для практики. Кто заинтересуется решением этих задач, просим помогать друг-другу. Но при этом в течении недели не кидать ссылок на полностью готовое решение. А также, чтобы читать код было удобно - публикуйте его на https://gist.github.com/ или какой-то подобный сервис.

Описание задачи:

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Пишем web-проекты: исправляем битый HTML с помощью Tidy

При парсинге возникают совсем странные ошибки - одна из них - не валидный HTML. Т.е. с ошибками. Верстальщик забыл закрыть таблицу или body. Еще бывает что вставляют HTML из Word, а там тааккккооооой код.

Чтобы очистить HTML от мусора можно применять инструмент Tidy.

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Полезные инструменты: virtualenv + pip

Опыт показывает, что каждый проект обладает своими зависимостями (библиотеками), а если и одинаковыми, то версии не совпадают. Чтобы упростить запуск и настройку проекта разработчики пишутINSTALL.md, README.md, make-файлы и что более важно - requirements.txt.

Файл requirements.txt - это правило хорошего тона для Python проектов. Файл содержит список необходимых библиотек для запуска с указанием версий:

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Колонка автора

Таинство стандартной библиотеки: пути до файлов

Python прикладывает множество усилий чтобы скрыть все различия операционных систем. Если смотреть на файлы, а точнее на пути файлов, то легко можно заметить различия между Linux и Windows:

C:\Program Files (x86)

/home/user/documents

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Учебные материалы

Python Anti-Patterns

Небольшая книга про Anti-Patterns и плохие практики

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Статьи
     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Статьи
     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Статьи

Как попасть в deadlock с getaddrinfo() 

Что случится, если запустить этот код?

import os
import socket
import threading


def lookup():
    socket.getaddrinfo('python.org', 80)

t = threading.Thread(target=lookup)
t.start()
if os.fork():
    # Parent waits for child.
    os.wait()
else:
    # Child hangs here.
    socket.getaddrinfo('mongodb.org', 80)

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Интересные проекты, инструменты, библиотеки

sophy - быстрый биндинг для Sophia Database

Sophia - встраемая KV-база данных.

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Видео

Строим оптимизированные модели и запускаем с помощью Gurobi и Anaconda

В этом докладе мы рассмотрим: зачем выбирать Gurobi, почему выбрали Python в качестве языка программирования, зачем выбирать Anaconda в качестве аналитической платформы, как Gurobi и Python может быть использован вместе, чтобы построить модели и приложения.

     25.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Статьи

Дилемма новогодних подарков

Этот пост дает теоретико-игровое объяснение традиции дарить подарки на Новый Год

     24.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Интересные проекты, инструменты, библиотеки

Marshmallow - де/сериализация для сложных объектов

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

from datetime import date
from marshmallow import Schema, fields, pprint

class ArtistSchema(Schema):
    name = fields.Str()

class AlbumSchema(Schema):
    title = fields.Str()
    release_date = fields.Date()
    artist = fields.Nested(ArtistSchema)

bowie = dict(name='David Bowie')
album = dict(artist=bowie, title='Hunky Dory', release_date=date(1971, 12, 17))

schema = AlbumSchema()
result = schema.dump(album)
pprint(result.data, indent=2)
# { 'artist': {'name': 'David Bowie'},
#   'release_date': '1971-12-17',
#   'title': 'Hunky Dory'}

     24.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Интересные проекты, инструменты, библиотеки

DeepLearningVideoGames - deep learning на видео-играх

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

     24.12.2015       Выпуск 105 (21.12.2015 - 27.12.2015)       Интересные проекты, инструменты, библиотеки

schema - валидация данных с помощью Schema

>>> from schema import Schema, And, Use, Optional

>>> schema = Schema([{'name': And(str, len),
...                   'age':  And(Use(int), lambda n: 18 <= n <= 99),
...                   Optional('sex'): And(str, Use(str.lower),
...                                        lambda s: s in ('male', 'female'))}])

>>> data = [{'name': 'Sue', 'age': '28', 'sex': 'FEMALE'},
...         {'name': 'Sam', 'age': '42'},
...         {'name': 'Sacha', 'age': '20', 'sex': 'Male'}]

>>> validated = schema.validate(data)

>>> assert validated == [{'name': 'Sue', 'age': 28, 'sex': 'female'},
...                      {'name': 'Sam', 'age': 42},
...                      {'name': 'Sacha', 'age' : 20, 'sex': 'male'}]