Обновить
578.53

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Хостинг картинок за полчаса

Время на прочтение5 мин
Количество просмотров40K
Сегодня проекты, особенно на начальном этапе, строятся из готовых блоков. Например, умный хостинг или сервис быстрой отправки сообщений в браузер пользователю. Складывая такие блоки по-разному, можно получить совершенно неожиданный результат. И чем больше разных блоков вам доступно, тем разнообразнее могут получаться проекты. Иногда появляются блоки, которыми можно заменить сразу несколько других блоков. И сами эти блоки — такие же проекты, состоящие из других блоков.

imageНасколько просто сейчас сделать такой сервис, как хостинг изображений? В принципе, его и раньше было несложно сделать. Но прогресс не стоит на месте, и за то же самое время теперь можно учесть больше нюансов. Я уже рассказывал о проекте Uploadcare. Это сервис, позволяющий облегчить работу с файлами: загрузку, хранение, обработку и раздачу конечному пользователю. Его и будем использовать в качестве основного блока.

Пример будет написан на Питоне. Во-первых, потому что Питон я знаю лучше всего, во-вторых библиотека pyuploadcare обновляется в первую очередь. На самом деле, для Uploadcare есть библиотеки под разные языки, и все они в open source. Если в нужном вам модуле отсутствует какая-то функциональность, можно дождаться, когда она появится, или дописать самому.
Читать дальше →

Добавляем чуть больше рефлексии: декораторы

Время на прочтение3 мин
Количество просмотров9.4K
Последнее время приходится довольно много работать с Python. Решая одну из текущих задач, возникла необходимость внутри функции-декоратора проверить задекорирован ли декорируемый метод другим декоратором. К сожалению, стандартные средства рефлексии языка не позволяют это сделать. Точнее, используя, например, модуль inspect из стандартной библиотеки это сделать можно, но уж больно не нравился такой подход.

Под катом свой метод решения задачи, вылившийся в небольшую библиотеку, доступную для общего пользования.
Читать дальше →

Поле множественного выбора с автодополнением в Django

Время на прочтение7 мин
Количество просмотров23K
Привет, хабр.
В прошлой своей статье я описал технологию создания кастомного поля для ввода тегов в Django. Сейчас я бы хотел поделиться готовым и более-менее универсальным решением, реализующим поле множественного выбора с автодополнением по AJAX. Отличие этого поля от описанного в предыдущей статье в том, что оно позволяет только выбирать элементы из справочника, но не создавать новые. За front-end часть будет отвечать замечательный jQuery-плагин Select2. Решение будет оформлено в виде отдельного приложения Django.
Всех заинтересованных прошу под кат

Простой способ управления удалёнными устройствами

Время на прочтение4 мин
Количество просмотров23K
Что хотелось:

  • при завершении задачи в jenkins выводить уведомление на компьютере и как дополнение — вывести его на физический дисплей, подключенный к arduino;
  • интерфейс, который можно открыть на телефоне или планшете, для управления проигрывателем музыки на компьютере и видеоплеером на raspberry pi;
  • интерфейс, доступный снаружи локальной сети, для вывода значения с датчиков, установленных на arduino.

Что получилось:

  • клиент, запускаемый на устройстве, с декларацией методов на python;
  • RESTful api для запуска «методов»(картинка справа выведена через него);
  • «панели управления» с web-интерфейсом;
  • сервис для управления устройствами, методами и панелями.

Читать дальше →

Сервер отчетов на django

Время на прочтение18 мин
Количество просмотров20K
Доброго времени суток.

Так случилось, что моя работа связана с написанием отчетов.
Этому я посвятил около 8 лет. Отчеты — это глаза бизнес-процесса и информация,
необходимая для принятия оперативных решений.

Вначале наш отдел делал отчеты,
— Принимая задачи по outlook
— Составляя sql-запрос
— Отправляя результаты заказчику в xls
— В лучшем случае, сохраняя sql-код куда-то в папку (а иногда и не сохраняя)

Но это было скучно и неинтересно. Так появилось простейшее приложение на PHP,
в котором каждый отчет был представлен в виде php-файла с одним классом, имеющим единственный (помимо конструктора) метод show()

В таком виде, система прожила 5,5 лет, за которые мной и еще одним человеком было написано более 500 различных отчетов.
В процессе появился опыт и стало понятно, что многое (если не все) сделано не так, да и PHP уже не устраивал.

Сервер отчетов был переписан на django, где была «админка» и код приложения уже не правился.
В процессе работы снова накопилось несколько мыслей,
в итоге сервер был снова переписан.

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

Это рабочий инструмент, который вы можете (если захотите) использовать в работе,
который нам использовать просто нравится.

Итак, поехали

Взламываем шифры с Python

Время на прочтение1 мин
Количество просмотров52K
Опубликованное неделю назад издание «Взламываем секретные шифры с Python» (Hacking Secret Ciphers with Python) — это учебник по Python для новичков. Авторы разумно рассудили, что учиться программированию нужно на конкретных практических задачах. А что может быть интереснее, чем взлом зашифрованных сообщений?

Книга включает в себя исходный код нескольких шифров и программы для взлома этих шифров. В числе программ на Python — шифр Цезаря, шифр перестановки, шифр простой замены, мультипликативный и аффинный шифры, шифр Виженера и программы для взлома каждого из них. В последней главе рассматривается современный шифр RSA и криптография с открытым ключом.

Книга лежит в открытом доступе, её можно бесплатно скачать в формате pdf (зеркало).
Читать дальше →

DevConf::Python() 14 июня в Москве — приезжает автор книги «Porting to Python 3»

Время на прочтение1 мин
Количество просмотров3.8K
Не пропустите «питонячью» секцию Devconf 2013

imagePrehistoric Python: Patterns Past their Prime
Lennart Regebro — created his first website in 1994, and has been
working full time with open source web development since 2001. He is
the author of the book «Porting to Python 3».

Tulip — новый стандарт на асинхронный код
Андрей Светлов — использует Python с 2000 года.
Занимается разработкой языка и стандартной библиотеки как Python Core Developer.
Участвует в создании tulip.

UI нового поколения с Leap Motion и Python'ом
Павел Коломиец. Занимается разработкой веб-проектов с 2003-го года.
С 2010-го руководит разработкой игр в компании Insollo.
Любит Python3 (!), zeromq, redis и другие прогрессивные технологии.
Читать дальше →

Собственное поле формы в Django

Время на прочтение4 мин
Количество просмотров11K

Привет, хабр!
Я очень большой фанат фреймворка Django и все свои проекты пишу исключительно на нем. Сегодня я расскажу о том, как расширить стандартную библиотеку полей формы собственным оригинальным решением. Задача статьи не в том чтобы предложить готовое решение, а в том, чтобы осветить технологию создания кастомных полей.
Небольшое отступление. Однажды я корпел над созданием базы знаний для компании, в которой в то время работал. База представляла собой набор статей, помеченных тегами. К элементу ввода тегов предъявлялись следующие требования:
  • Множественный ввод
  • Автодополнение вводимого тега
  • Теги могут содержать пробелы (состоять из нескольких слов)
  • Возможность создать новый тег, а не выбрать из списка

После недолгих поисков, я нашел jQuery-плагин Tag-It!, который полностью удовлетворял требованиям к виджету. Осталось только прикрутить это поле к Django.
Что из этого получилось, можно увидеть под катом

pymorphy2

Время на прочтение16 мин
Количество просмотров86K
В далеком 2009 году на хабре уже была статья "Кузявые ли бутявки.." про pymorphy — морфологический анализатор для русского языка на Python (штуковину, которая умеет склонять слова, сообщать информацию о части речи, падеже и т.д.)

В 2012м я начал потихоньку делать pymorphy2 (github, bitbucket) — думаю, самое время представить эту библиотеку тут: pymorphy2 может работать в сотни раз быстрее, чем pymorphy (втч без использования C/C++ расширений) и при этом требовать меньше памяти; там лучше словари, лучше качество разбора, лучше поддержка буквы ё, проще установка и более «честный» API. Из негатива — не все возможности pymorphy сейчас реализованы в pymorphy2.

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

Читать дальше →

AppFog и Django. С чего начать?

Время на прочтение4 мин
Количество просмотров20K
Доброго времени суток, уважаемые хабровчане! Недавно я заинтересовался Python и, в частности, веб-фреймворком Django. После ознакомления с основными возможностями захотелось найти бесплатный хостинг с поддержкой Django. Каюсь, в тот момент напрочь забыл про GAE, но, почитав вчера про оный, понял, что выбор получился ничуть не хуже. Итак, встречайте, AppFog! (осторожно, под катом картинки!)
Читать дальше →

Кросспостинг из Twitter в ВКонтакте с помощью роутера

Время на прочтение9 мин
Количество просмотров21K
Здравствуйте, меня зовут Евгений, и я алкоголик люблю социальные сети. В силу отсутствия каких-либо намеков на писательский талант я предпочитаю Twitter — его ограничение на 140 символов избавляет от необходимости придумывать что-то длинное. К тому же, только для твиттера есть нормальный java-клиент, которым я раньше пользовался на мобильном телефоне.
С другой стороны, бóльшая часть моя знакомых использует ВКонтакте, да и мне, честно говоря, нравится слушать там музыку и читать новости. Очевидно, что писать самому в две разных соцсети неудобно, нужно это автоматизировать — использовать кросспостинг (перенос постов).
Далее небольшое описание моего не совсем обычного способа кросспостинга.
Читать дальше →

Легко настраиваемый python daemon

Время на прочтение2 мин
Количество просмотров60K
В какой-то момент мне потребовалось демонизировать некоторое действие на python. В сети валялась куча примеров подобной деятельности разной степени собранности. Так как в дальнейшем предполагалось использовать код демонизации в дальнейшей деятельности я решил разнести на разные части настройки и собственно демона.
В итоге файлов получилось три:
  • Родительские классы — с небольшим изменением классы взятые из интернет статей
  • Классы настройки — реакция на сигналы, реакция на команды и набор статических настроек для запуска
  • Скрипт запуска — собирает первые два в собственно демона


Дальше я попробую описать логику работы всех трех.
Читать дальше →

Заметки для построения эффективных Django-ORM запросов в нагруженных проектах

Время на прочтение11 мин
Количество просмотров61K
Написано, т.к. возник очередной холивар в комментариях на тему SQL vs ORM в High-Load Project (HL)

Преамбула


В заметке Вы сможете найти, местами, банальные вещи. Большая часть из них доступна в документации, но человек современный часто любит хватать все поверхностно. Да и у многих просто не было возможности опробовать себя в HL проектах.
Читая статью, помните:
  • Никогда нельзя реализовать HL-проект на основе только одной манипуляции с ORM
  • Никогда не складывайте сложные вещи на плечи БД. Она нужна Вам чтобы хранить инфу, а не считать факториалы!
  • Если вы не можете реализовать интересующую Вас идею простыми средствами ORM — не используйте ORM для прямого решения задачи. И тем более не лезте в более низкий уровень, костыли сломаете. Найдите более элегантное решение.
  • Извините за издевательски-юмористический тон статьи. По другому скучно :)
  • Вся информация взята по мотивам Django версии 1.3.4
  • Будьте проще!

И-и-и да, в статье будут показаны ошибки понимания ORM, с которыми я столкнулся за три с лишним года работы с Django.
Читать дальше →

Ближайшие события

Как прикрутить BitTorrent трекер к Python-сайту: интеграция с XBT Tracker

Время на прочтение5 мин
Количество просмотров8K
Допустим, у Вас есть некий сайт, написанный на языке Python и Вы хотите прикрутить к нему BitTorrent tracker, наподобие rutracker.org.

Разделение задачи


Задачу можно разделить на две большие функциональности:
  1. Каталог torrent-раздач на сайте (исторически обычно реализуется в виде форума),
  2. Сам Трекер, непосредственно участвующий в процессе раздач.

Трекер представляет собой http-приложение, согласно спецификации протокола BitTorrent сообщающее клиенту по запросу обо всех участниках раздачи. Поскольку клиенты шлют запросы постоянно периодически, то Трекер должен быть производительным: время ответа должно быть минимальным.

В мире PHP Каталог и Трекер зачастую не разделяются на два выделенных приложения. Например, популярный TBDev Tracker существует в виде приложения, объединяющего Каталог-форум и Трекер. (Автор видимо так устал от популярности своего приложения, что сайт давно не обновляется и скачать приложение с него нереально. Однако в Сети можно найти множество клонов.)

Некоторые реализации Трекера изначально были написаны на Python, но затем переписаны на C++ из соображений производительности. Так что в наши дни Python-трекеров не существует (по крайней мере мне найти не удалось). Поэтому единственное, что остается — установить отдельное приложение Трекера и интегрировать его с Python-Каталогом.

Читать дальше →

Django ORM, gevent и грабли в зелени

Время на прочтение6 мин
Количество просмотров16K
Очень многие выбирают Django за его простоту. Код на Django прост и лаконичен, мы меньше думаем о костылях и больше о бизнес-логике.

Gevent тоже выбирают из-за того, что он простой, очень шустрый и не несёт за собой callback hell.

В голове возникает великолепная идея совместить две простые и удобные вещи вместе. Мы патчим Django и радуемся простоте, лаконичности и производительности, делаем множество запросов на другие сайты, создаём подпроцессы, в общем используем наш новый асинхронный Django по максимуму.
Но совместив их, мы незаметно для себя поставили несколько граблей на нашем пути.
Читать дальше →

Не ещё одна статья о функциональном программировании

Время на прочтение6 мин
Количество просмотров19K
Вот уже несколько лет функциональное программирование набирает популярность. Это, конечно, не значит, что люди забрасывают свои старые языки и ООП и массово переходят на Haskell, Lisp или Erlang. Нет. Функциональная парадигма проникает в наш код через лазейки мультипарадигменных языков, а вышеупомянутые языки чаще служат флагами в этом наступлении, чем используются непосредственно.

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

Запускаем OpenGL на python3 (ubuntu)

Время на прочтение3 мин
Количество просмотров8K

Лирическое отступление


Пару месяцев назад решил я таки изучить Python. Но… только сунувшись во всю эту среду, передо мной встал выбор: учить относительно новый python3 или же python2.7. Выбор пал в сторону python 3, пусть на нём работает лишь малое количество того, что уже есть под python2.7, да и просто интересно было поучаствовать в развитии языка.
Недавно встала потребность визуализации некоторых данных (именно в openGL), поэтому было решено разобраться, что и как, собрать всё воедино и рассказать об этом хабражителям.
Статья ориентирована в первую очередь на новичков в python (таких как я), и написана в стиле «установи то-то и то-то», поэтому просьба старожилам не кидаться тапками и отнестись с пониманием.
Читать дальше →

История оптимизации alpha_composite в Pillow 2.0

Время на прочтение7 мин
Количество просмотров6.1K
Недавно вышла вторая версия питоновской библиотеки для работы с изображениями Pillow. Как многие знают, это форк хорошо известной библиотеки PIL, которая, несмотря на свой солидный возраст, до недавнего времени оставалась самым вменяемым способом работы с изображениями в Питоне. Авторы Pillow наконец-то решили не только поддерживать старый код, но и добавлять новые возможности. И одной из этих возможностей стала функция alpha_composite().

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

С тех пор я уже смог написать для своих нужд более оптимальную реализацию, чем приведена в конце той статьи. И оказалось, что эта реализация быстрее alpha_composite() из новой версии Pillow, написанной на Си. Конечно, мне это польстило, но я все-таки решил попытаться улучшить реализацию из Pillow.
Читать дальше →

Выпущена новая версия Python Tools for Visual Studio 2.0

Время на прочтение1 мин
Количество просмотров18K
Для загрузки доступна новая версия инструментов разработки на языке Python в среде Visual Studio. Инструменты Python Tools for Visual Studio распространяются с открытым кодом и предлагают следующие возможности: поддержка CPython, IronPython, функциональный редактор кода, Intellisense, отладка, профилирование, HPC-кластеры, IPython, Django и облачные решения с клиентскими библиотеками для Windows, Linux и MacOS.



Python Tools for Visual Studio 2.0 Alpha содержит важные нововведения, такие как: усовершенствованные анализ кода и intellisense для Python, virtualEnviroment for Python, удаленная отладка из Linux/OSX, функция Debug as a Script (для быстрой отладки).
ниже эти функции описаны в виде коротких видео

Новый дизайн Python.org

Время на прочтение1 мин
Количество просмотров14K
На проходящем в Санта Кларе(США) PyCon 2013 была представлена бета версия нового сайта Python.orgpreview.python.org.
Новая адаптивная версия сайта выглядит приятней и современней, навигация по сайту стала более удобной и понятной.

Последний раз дизайн сайта был обновлен в 2006 году. Хотя если смотреть глубже, структура сайта не менялась с конца 90-х.

Новый сайт сделан на платформе Django 1.5 (Python 3.3)

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

Вклад авторов