Обновить
256K+

Python *

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

364,95
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности
Формат публикации

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

Время на прочтение6 мин
Охват и читатели2.1K
На написание данной программы (а в последствии и статьи) меня сподвиг вот этот пост. Так уж вышло, что я имею привычку по-возможности сохранять прочитанные статьи, поскольку все помнить невозможно, и неизвестно когда что может пригодиться. Так что, прочитав вышеупомянутый пост и вспомнив про столь дорогую мне возможность печатать в 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 мин
Охват и читатели668


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

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

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


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

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

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

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

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

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

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

Регулярные выражения, пособие для новичков. Часть 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 мин
Охват и читатели842
Друзья питоноводы, в это воскресенье, 13 марта, в 11.00, совместно с компанией Ciklum по адресу г. Киев, ул. Амосова 12, мы проведем вторую открытую встречу Kyiv.py — ua.pycon.org/news/25

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

Простая библиотека для парсинга HTML

Время на прочтение2 мин
Охват и читатели11K
Недавно зарелизил Leaf, это небольшая библиотека для парсинга HTML на Python.
Она уже довольно долгое время покрывает все мои нужды в парсинге, но еще есть идеи для развития.
Эта библиотека по сути обертка над lxml, которая делает работу с ней гораздо приятней.
далее...

Простой конвертер текста в речь с использованием Google Translate

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

Недавно Гугль обновил русский язык в Google Translate, сильно улучшив произношение.
Я решил сделать конвертер текста в речь на базе их переводчика.
Читать дальше →

Запуск Chaco и Mayavi на PySide

Время на прочтение4 мин
Охват и читатели1.9K
Ну вот и появился долгожданный релиз PySide. Некоторые хабравчане начнут им пользоваться в первый раз, некоторые уже имели с ним дело.

В своей работе приходится пользоваться кроссплатформенными визуализатором Mayavi и построителем графиков Chaco (кому интересно — читаем code.enthought.com/chaco и code.enthought.com/projects/mayavi). Моей задачей было встроить их фрэймы в свое приложение HPGL-GUI. Изначально я писал все на PyQt4 и в меня устраивало все, кроме одной вещи. Проблемой стала лицензия. PySide выпускается под LGPL v2.1, что как раз подходит под коммерческие нужды.

На помощь пришел PySide, который уже начали активно использовать в качестве бэкэнда к продуктам Enthought. Тут-то меня и ждали первые подводные камни.

Отсутствие документации как именно использовать PySide для встраивания.
Немного проблуждав по исходникам, выяснил, что достаточно указать переменную окружения 'QT_API' в значение 'pyside':

import os
os.environ['QT_API'] = 'pyside'

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

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

Непрерывное тестирование питонопроекта

Время на прочтение7 мин
Охват и читатели24K
Программист зверь ленивый, поэтому всё, что будет делаться больше одного раза надо непременно заскриптовать.

Я уже некоторое время ковыряю TDD и задача постоянного контроля качества для меня становится всё актуальней. Особенно при пополнении команды новыми разработчиками.

Сначала я запускал тесты руками: save, switch, $ nosetests. Потом к тестам добавились проверялки качества кода и пришлось всё засунуть в скрипт:
pyflakes *.py
pep8 *.py
pylint *.py
nosetests


Скрипт запускать каждый раз ужасно лениво, поэтому небольшая оболочка на inotifywait стала запускать тесты и проверки после каждого сохранения:
while true; do
inotifywait -e modify project/*.py -qq; clear
./do_tests
done


Тут я стал более-менее доволен происходящим и даже на некоторое время расслабился. Но ведь программист кроме того, что ленив ещё и горд, поэтому результаты хочется кому-нибудь показать. Чтобы вести историю происходящего (которая очень помогает когда заходит начальник начальника и спрашивает: «ну-с, чем вы занимались последний месяц?») уже есть система контроля версий. Но она показывает только, что сделано и не даёт обзора успешности каждой ревизии. Получается что код лежит, но непонятно в каком он состоянии и что где ещё надо сделать.

Кроме того довольно тяжело следить за коллегами, которые тоже могут что-то сделать и забыть прогнать тесты, в результате в репозитории лежит битый код, не прошедший code review и при очередном pull может внезапно начаться clusterfuck.

И тут очень вовремя kmmbvnr@lj выпустил скринкаст, в котором он демонстрировал интеграцию тестирования для django-проектов с сабжем Jenkins (бывш. Hudson). Посмотрел я на все эти красоты, графики и отчёты и тоже захотел чтобы всё само пело и играло. Но у него django-jenkins, как и следует из названия, встраивается в джангу и генерит отчёты используя хитрую систему. Мой проект до джанги не дорос и скорее всего не дорастёт — это достаточно тривиальное WSGI-приложение, которое правда стремительно разрастается. Пришлось поднимать всё с нуля.

Воскресенье я на это убил, но в целом всё довольно прямолинейно и теперь у меня есть симпатичные отчёты:



Что внутри?
Читать дальше →