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

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

     15.12.2015       Выпуск 104 (14.12.2015 - 20.12.2015)       Статьи

PyLOO — Библиотека для генерации отчетов, счетов Libre/Open Office на Python

 

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

Проекты, в которых возникала данная задача:
 

  • складской учет
  • учет объектов недвижимости
  • документооборот

     14.12.2015       Выпуск 104 (14.12.2015 - 20.12.2015)       Статьи

Selenium для Python. Глава 5. Ожидания

В наши дни большинство веб-приложений используют AJAX технологии. Когда страница загружена в браузере, элементы на этой странице могут подгружаться с различными временными интервалами. Это затрудняет поиск элементов, если элемент не присутствует в DOM, возникает исключение ElementNotVisibleException. Используя ожидания, мы можем решить эту проблему. Ожидание дает некий временной интервал между произведенными действиями — поиске элемента или любой другой операции с элементом.

Selenium WebDriver предоставляет два типа ожиданий — неявное (implicit) и явное (explicit). Явное ожидание заставляет WebDriver ожидать возникновение определенного условия до произведения действий. Неявное ожидание заставляет WebDriver опрашивать DOM определенное количество времени, когда пытается найти элемент.

     14.12.2015       Выпуск 104 (14.12.2015 - 20.12.2015)       Статьи

Внутреннее устройство Python list

Предлагаю вашему вниманию перевод публикации Laurent Luce о реализации работы со списками в CPython. Она может быть полезна начинающим программистам на Python, либо готовящимся к собеседованию.

Эта статья описывает реализацию объекта списка в CPython, наиболее популярной реализации Python. Списки в Python — это мощный инструмент, и интересно узнать, как они устроены внутри. Взгляните на простой скрипт, который добавляет несколько целых значений в список и выводит их:

     14.12.2015       Выпуск 104 (14.12.2015 - 20.12.2015)       Статьи

Как я отлаживал python httplib и httplib2

Понадобилось мне однажды у себя в проекте реализовать работу с файловым хранилищем с использованием HTTP REST API. Проект разрабатывается на python, к тому же уже был реализован http-клиент с использованием библиотеки httplib2, поэтому было решено расширить функциональность http-клиента и работать с файловым хранилищем через туже библиотеку. Проблема возникла при загрузке файлов на сервер. Первый PUT запрос выполняется, далее все последующие запросы отказываются выполняться — 500Internal Server Error.

     10.12.2015       Выпуск 103 (07.12.2015 - 13.12.2015)       Статьи

Поднимаем сложный проект на Django с использованием Docker

Сегодня я расскажу о не совсем простой концепции быстрого (до часа после нескольких тренировок) развёртывания проекта для работы команды, состоящей как минимум из отдельных фронтенд и бэкенд разработчиков.

Исходные данные у нас такие: начинается разработка проекта, в которой планируется «тонкий бэкенд». Т.е. бэк у нас состоит из закешированных страниц (рендерятся любым шаблонизатором), объёмных моделей с сопутствующей логикой (ORM) и REST API, выполняющего роль контроллера. Фактически, View в такой системе редуцировано и вынесено в JS, благо есть разные реакты, ангуляры и прочие вещи, которые позволяют фронтендщикам считать себя «белыми людьми».

     09.12.2015       Выпуск 103 (07.12.2015 - 13.12.2015)       Статьи

Простой метапоисковый алгоритм на Python

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

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

     08.12.2015       Выпуск 103 (07.12.2015 - 13.12.2015)       Статьи

Нейросеть на Python, часть 2: градиентный спуск

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

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

     08.12.2015       Выпуск 103 (07.12.2015 - 13.12.2015)       Статьи

Калибровка Kinect v2 с помощью OpenCV на Python

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

До этого я никогда не имел дела ни с компьютерным зрением, ни с OpenCV, ни с Kinect. Исчерпывающую инструкцию, как со всем этим хозяйством работать, мне найти тоже не удалось, так что в итоге пришлось порядком повозиться. И я решил, что будет не лишним систематизировать полученный опыт в этой статье. Быть может, она окажется небесполезной для какого-нибудь страждущего, а еще нам нужна популярная статья для галочки в отчетности.

     07.12.2015       Выпуск 103 (07.12.2015 - 13.12.2015)       Статьи

Django: Как быстро получить ненужные дубликаты в простом QuerySet

Только что обнаружил интересный баг (баг с точки зрения человеческой логики, но не машины), и решил им поделиться с сообществом. Программирую на django уже довольно долго, но с таким поведением столкнулся впервые, так что, думаю, кому-нибудь да пригодится. Что ж, к делу!

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

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

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

     28.11.2015       Выпуск 101 (23.11.2015 - 29.11.2015)       Статьи

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

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

     27.11.2015       Выпуск 101 (23.11.2015 - 29.11.2015)       Статьи

Библиотека 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

     25.11.2015       Выпуск 101 (23.11.2015 - 29.11.2015)       Статьи

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

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

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

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

     24.11.2015       Выпуск 101 (23.11.2015 - 29.11.2015)       Статьи

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

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

     24.11.2015       Выпуск 101 (23.11.2015 - 29.11.2015)       Статьи

Нейросеть в 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)

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

     24.11.2015       Выпуск 101 (23.11.2015 - 29.11.2015)       Статьи

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

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

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

     19.11.2015       Выпуск 100 (16.11.2015 - 22.11.2015)       Статьи

Скачивание треков с Autotravel.ru

Как и многие любители путешествовать, я нахожу координаты достопримечательностей городов на сайте autotravel.ru (далее — сайт). Под свои нужды написал небольшую утилиту для скачивания файлов с достопримечательностями для последующей заливки в навигатор. Программа предельно простая, но работает именно так, как мне было нужно. Кроме того реализовано простейшее средство экономии времени загрузки и траффика — кэширование.

Программа, которую я назвал AtTrackDownloader, написана на Python 3 с использованием Beautiful Soup — библиотеки для синтаксического разбора файлов HTML. Для графического интерфейса используется PyQt — просто потому, что я знаком с Qt.

     17.11.2015       Выпуск 100 (16.11.2015 - 22.11.2015)       Статьи

HighLoad++ 2015 глазами иностранного докладчика

Всем привет! Когда-то давно, еще года 4 назад, сидя в Бишкеке, я смотрел видео с конференции и думал, какие же докладчики крутые спецы и даже не думал, что сам попаду на эту конференцию, как докладчик. В этой статье я расскажу вам о том. как я подавал заявку, как готовился и как проходила сама конференция. Заявку подавал я 19 января этого года, а 5го октября ее одобрили. Радости, конечно же было много и пришла пора готовиться к докладу. 

     17.11.2015       Выпуск 100 (16.11.2015 - 22.11.2015)       Статьи

Семантические технологии на практике на примере родословных

Программа, способная к логическим выводам в рамках поставленной задачи, может казаться техническим чудом и воплощением Скайнета. Но, как можно убедиться ниже, на сегодняшний день создать такую программу на языке Python не составит труда, если использовать семантические технологии. Мы остановимся на наглядном примере онтологий — родословных — и для любого члена семьи в родословной сможем выводить его родственные отношения произвольной сложности (она ограничена вычислительными ресурсами). К примеру, на фамильном древе семьи Романовых ниже показан внучатый двоюродный племянник (first cousin twice removed) российского императора Петра II.

     15.11.2015       Выпуск 99 (09.11.2015 - 15.11.2015)       Статьи

Асинхронный Python 3.5 и Mongodb

Это достаточно вольный перевод статьи об основных новшествах асинхронного драйвера для mongodb используемого в tornado. Основной мотив, который послужил для написания этого перевода — новшества, появившиеся в этой версии, такие как поддержкаasyncio, async, await и Python 3.5. Сама статья не сколько перечисление новшеств, сколько лаконичные примеры асинхронной работы с MongoDB.