Обновить
835.34

Python *

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

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

Асинхронный удар

Время на прочтение5 мин
Охват и читатели16K
imageКак уже наверное кто-то догадался, в этой статье речь пойдет о сокетах, и фреймфорках облегчающих работу с ними. Недавно я начал работу надо новым проектом, онлайн игрой. Для таких проектов довольно критично время ответа от сервера, если это конечно не пошаговая стратегия, хотя и в этом случае пожалуй тоже. Так как же этого добиться при суровой ограниченности ресурсов?
  • Облегчить сервер от ненужной работы, например отрисовки самой странички, используя вместо этого javascript шаблонизатор.
  • Использовать хороший front-end, например nginx, учитывая пункт первый, динамики у нас нет, и это нам вполне подходит.
  • Распределяя нагрузку на frontend, например используя Tornado.

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

Создание py2exe сборок с модулями Python, содержащими сторонние файлы

Время на прочтение6 мин
Охват и читатели11K
Для краткости, введем обозначение «нестандартные» — под этим термином будем далее подразумевать такие модули, которые содержат в себе файлы, отличные от *.py. К примеру это могут быть библиотеки (*.pyd), картинки, иконки, и т.д.

Первая проблема состоит в том, что практически все сборщики бинарных «дистрибутивов» python-приложений, такие как py2exe, bbfreeze, cx_Freeze, и другие, забирают из таких модулей только *.py файлы. Вторая проблема возникает со сложными namespace-модулями, такими как ETS — часто сборщик не может правильно разобрать все их внутренние зависимости.

Конкретно в моем случае камнями преткновения оказались все модули ETS (mayavi, chaco, и т.д.), m2crypto, vtk, h5py, matplotlib и несколько других (вообще, как выяснилось, таких модулей очень много).

Я попробовал протестировать разные сборщики и поначалу остановился на cx_Freeze, т.к. он единственный умеет более-менее правильно импортировать ETS «из коробки». Однако, его оказалось недостаточно: он не смог справиться с другими нестандартными модулями, а также по ряду других причин (к примеру, мне так и не удалось скрыть окно консоли, поставить кастомную иконку, и пр.). Конечно, там есть механизм «рецептов» (совсем не документированный), который даже работает, к примеру, для matplotlib, но хотелось более универсального и простого решения, чем писать подобный рецепт под каждый модуль.

В итоге я остановился на py2exe, т.к. с ним удалось решить все вышеназванные проблемы. Поскольку на это ушло довольно-таки значительное время, то хочу с вами поделиться — может кому тоже понадобится.
Читать дальше →

Пайпы, the pythonic way

Время на прочтение3 мин
Охват и читатели20K
Одни питонисты любят код читаемый, другие предпочитают лаконичный. К сожалению, баланс между первым и вторым — решения по-настоящему изящные — редко случается встретить на практике. Чаще стречаются строки вроде
my_function(sum(filter(lambda x: x % 3 == 1, [x for x in range(100)])))
Или четверостишья а ля
xs = [x for x in range(100)]
xs_filtered = filter(lambda x: x % 3 == 1, xs)
xs_sum = sum(xs_filtered)
result = my_function(xs_sum)
Идеалистам же хотелось бы писать как-то так
result = [x for x in range(100)] \
    | where(lambda x: x % 3 == 1)) \
    | sum \
    | my_function

Не в Питоне?
Зря так думаете...

IPython advanced usage

Время на прочтение4 мин
Охват и читатели14K
Данный инструмент знаком большинству разработчиков на Python.
В тоже время, не так много людей подозревают о раширенных возможностях предоставляемых данной интерактивной оболочкой, пользуясь в основном автодополнением.

Terminal 2014 python 2014 125ճ0image

Статья построенна на выдержках из обширной, понятной и красивой документации ipython.github.com/ipython-doc/dev/interactive/index.html
Пропустим такие явные вещи, как автодополнение и история команд, сохраняемая мыжду вызовами.
Читать дальше →

PDF-принтер Хабра с подсветкой кода на Python

Время на прочтение6 мин
Охват и читатели2K
На написание данной программы (а в последствии и статьи) меня сподвиг вот этот пост. Так уж вышло, что я имею привычку по-возможности сохранять прочитанные статьи, поскольку все помнить невозможно, и неизвестно когда что может пригодиться. Так что, прочитав вышеупомянутый пост и вспомнив про столь дорогую мне возможность печатать в PDF страницы из Википедии, закономерно появилась мыслишка сделать такой же «принтер» для Хабра, чтоб иметь возможность заполучить в личный архив вызвавшие у меня интерес статьи.

Первой попыткой было использование столь любезно предоставленной автором поста-вдохновителя программы. И практически сразу нашлись грабли, которые игнорировать было выше моих сил. Грабли эти — подсветка кода.

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

Возникла идея — надо что-то придумать.
Читать дальше →

CityHash для Python

Время на прочтение1 мин
Охват и читатели3K
Буквально вчера компанией Google была выложена библиотека CityHash с набором хеш-функций для строк.
Мне захотелось попробовать поиспользовать CityHash в своих проектах на Python, а так как сейчас начал заниматься Cython'ом, решил быстренько сделать обертку для CityHash на Cython.
Читать дальше →

Как я боролся с кодировками в консоли

Время на прочтение6 мин
Охват и читатели175K
В очередной раз запустив в Windows свой скрипт-информер для СамИздат-а и увидев в консоли «загадочные символы» я сказал себе: «Да уже сделай, наконец, себе нормальный кросс-платформенный логгинг!»

Об этом, и о том, как раскрасить вывод лога наподобие Django-вского в Win32 я попробую рассказать под хабра-катом (Всё ниженаписанное применимо к Python 2.x ветке)
Читать дальше →

Генератор звуковых ландшафтов Boodler

Время на прочтение1 мин
Охват и читатели3.5K
На Хабре уже обсуждался Nature Sounds — флэш-микшер, на котором можно сгенерировать для себя оптимальное сочетание звуков природы. Выбираете от одного до четырёх звуковых потока, для каждого указываете громкость и распределение по каналам, а также паттерн проявления.

Если вы подобрали на редкость удачное сочетание, можно его сохранить в виде уникального URL или в WAV-файл. Но у этого сервиса есть один крупный недостаток — он требует Flash.
Читать дальше →

Использование XmlRPC через прокси-сервер для хоста с авторизацией

Время на прочтение7 мин
Охват и читатели2.8K
Сразу оговоримся, что речь идет о Python 2.X.

Задача: заставить xmlrpclib в Python работать через прокси-сервер с авторизацией Basic и NTLM, а также с хостом, требующим авторизацию и Cookies.

Мне это было нужно для системы багрепортов в нашем приложении, где при отправки сообщения об ошибке в TRAC должен создаваться тикет с описанием, логами, и прочим. Общение с TRAC'ом идет как раз через xmlRPC (используя XmlRpcPlugin). Пользователи приложения в основном работают за прокси-сервером внутри корпоративной сети.

Реализуется это через создание транспорта на основе urllib, который перенаправляет XML-запросы через прокси-сервер.

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

Данный вариант транспорта поддерживает также работу без прокси-сервера (если прямое соединение доступно, а указанный прокси-сервер — нет, то соединение произойдет напрямую — это особенность urllib2).

Для поддержки NTLM-авторизации используется python-ntlm.

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

Пример использования:

Copy Source | Copy HTML
  1. serverURL = "http://some.server.com/xmlrpc"
  2.  
  3. xmlTransport= UrllibTransport()
  4. server = xmlrpclib.ServerProxy(serverURL, transport = xmlTransport)


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

PyUNO — быстрое незначительное редактирование xls-отчета из Python

Время на прочтение3 мин
Охват и читатели15K

Просто и быстро


Не так давно я столкнулся с необходимостью запротоколировать список изменений в нашем ПО. Заказчик прислал мне формуляр, который я должен был заполнить в соответствии с их внутренними требованиями к документации. Я открыл прилагавшийся к письму файл «Изменения 1.xls» и немного приуныл. Точнее, мне в голову последовательно пришли мысли об увольнении, а затем — о самоубийстве. Формуляр состоял из 14 колонок. Быстро перемножив в уме количество колонок с числом внесенных нами атомарных изменений (около пятисот), я пошел курить.
Сделать такую работу руками мне не под силу. Большинство данных (номера новых версий, описания изменений и т. п.) у меня, конечно, имелись в наличии, но в разных местах и самых причудливых форматах. Но семьсот копипастов — увольте. Поэтому мне пришлось немного освоить PyUNO. На всякий случай — опишу вкратце процесс управления документом OOo из питоновского биндинга, вдруг кому пригодится.
Поехали!

Unladen Swallow — всё…

Время на прочтение5 мин
Охват и читатели4.1K
От переводчика: пару часов назад Гвидо в своём твиттере упомянул блог-пост своего коллеги, одного из (бывших) разработчиков Unladen Swallow, в котором тот рассказывает грустную историю яркой, но короткой жизни Unladen Swallow в Google.

Оригинал: Reid Kleckner — Unladen Swallow Retrospective


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

Распознавание некоторых современных CAPTCHA

Время на прочтение15 мин
Охват и читатели80K
Именно так называлась работа, представленная мной на Балтийском научно-инженерном конкурсе, и принёсшая мне очаровательную бумажку с римской единичкой, а также новенький ноутбук.

Работа заключалась в распознавании CAPTCHA, используемых крупными операторами сотовой связи в формах отправки SMS, и демонстрации недостаточной эффективности применяемого ими подхода. Чтобы не задевать ничью гордость, будем называть этих операторов иносказательно: красный, жёлтый, зелёный и синий.

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

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

Как работает glow.mozilla.org

Время на прочтение1 мин
Охват и читатели658


В блоге Mozilla объясняется, как SQLStream обрабатывает статистику загрузок Firefox 4.0 с каждого сервера и выдаёт почти в реальном времени карту скачиваний на сайте glow.mozilla.org. Там же выложены исходники бэкенда на Python.
Читать дальше →

Антипаттерн settings.py

Время на прочтение4 мин
Охват и читатели20K


Хабрапитонерам привет!

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

Сейчас я хочу понегодовать на паттерн «все настройки — в settings.py». Понятно, что популярность он набрал благодаря Django. Я то и дело встречаю в проектах, никак не завязанных на этот фреймворк ту же самую историю: большая кодовая база, маленькие, хорошенькие никак не связанные друг с другом компоненты, и нате вам: все дружно из произвольных мест лезут в волшебный недомодуль settings за своими константами.

Итак, почему же такой подход на мой взгляд отвратителен.

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

Регулярные выражения, пособие для новичков. Часть 2

Время на прочтение18 мин
Охват и читатели269K
В первой половине этого пособия мы раскрыли лишь малую часть возможностей регулярных выражений. Во второй, большей, половине мы рассмотрим некоторые новые метасимволы, то, как использовать группы для получения частей совпавшего текста, разбивать строки, находить и замещать части текста. В конце немного поговорим о распространенных ошибках.
Читать дальше →

Регулярные выражения, пособие для новичков. Часть 1

Время на прочтение14 мин
Охват и читатели929K
Регулярные выражения (РВ) это, по существу, крошечный язык программирования, встроенный в Python и доступный при помощи модуля re. Используя его, вы указывается правила для множества возможных строк, которые вы хотите проверить; это множество может содержать английские фразы, или адреса электронной почты, или TeX команды, или все что угодно. С помощью РВ вы можете задавать вопросы, такие как «Соответствует ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с этой строкой?». Вы можете также использовать регулярные выражения, чтобы изменить строку или разбить ее на части различными способами.
Читать дальше →

Собираем данные с помощью Scrapy

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

scrapy

  • создать паука, выполняющего GET запросы,
  • извлекать данные из HTML документа,
  • обрабатывать и экспортировать данные.





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

Рисуем цветной кубик в Mayavi

Время на прочтение10 мин
Охват и читатели6.7K
Приветствую, хабравчане!

Сегодня хочу вам рассказать о том, что такое Mayavi и с чем его запивают его едят.

Mayavi — это кроссплатформенное приложение для визуализации научных данных (и не только). Распространяется по лицензии BSD, что позволяет использовать его в коммерческих приложениях.
image

Что умеет?
  • Строить 2D и 3D модели на основе скалярных/векторных данных
  • Открывать файлы VTK, PLOT3D
  • Сохранять результаты рендера в различных графических форматах
  • Может даже рендерить результаты MRI(Магнитно-резонансная томография)


Работать с ним можно тремя способами:
1) Работать непосредственно в интерфейсе Mayavi.
2) Подгружать/передавать в Mayavi уже готовые данные.
3) Написать питоновский скрипт, в котором можно задать для Mayavi все желаемые возможности.

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

Kyiv.py #2

Время на прочтение1 мин
Охват и читатели828
Друзья питоноводы, в это воскресенье, 13 марта, в 11.00, совместно с компанией Ciklum по адресу г. Киев, ул. Амосова 12, мы проведем вторую открытую встречу Kyiv.py — ua.pycon.org/news/25

В программе встречи:
  • Андрей Светлов — взаимодействие формы с представлением и модели, олицетворяющей предметную область
  • Андрей Хаврюченко — создание UI мокапов
  • + open-space общение
Присоединятесь, будем рады всех видеть!
Читать дальше →