Обновить
512K+

Python *

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

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

Прогресбар и нити в PyGTK

Время на прочтение10 мин
Охват и читатели2.5K
Недавно появилась необходимость и желание ознакомится с PyGTK. Литературы на русском по данному вопросу практически нет, а то, что находит гугл в разных блогах — бывает немного устаревшим. Также с удивлением обнаружил, что и на хабре тема PyGTK не особо популярна.

Итак, не буду рассказывать про компоновку элементов интерфейса, ибо такие статьи уже есть. Расскажу про следующий шаг: создание приложения, которое выполняет некую работу, в процессе отображая свой прогресс.
Читать дальше →

Исправляем Python Imaging (PIL) в Snow Leopard'е

Время на прочтение1 мин
Охват и читатели1.2K
После перехода на Snow Leopard в Django перестали работать ImageField'ы. Причина оказалась в неработоспособном PIL'е, а точней в его привязке к libjpeg.
(типичное сообщение об ошибке:ImportError: dlopen(/Library/Python/2.6/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart)

Решение проблемы частично описано здесь (english)
качаем отсюда:
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config/config.sub .
cp /usr/share/libtool/config/config.guess .
./configure --enable-shared --enable-static
make
sudo make install


Однако мне «повезло» и я оказался в числе тех, у кого это сразу не заработало — причина была в «зоопарке» установленных libjpeg'ов.
Итак, делаем следующее:
1. Смотрим все зависимости _imaging:
otool -L /Library/Python/2.6/site-packages/PIL/_imaging.so
2. Получаем что-то вроде:/Library/Python/2.6/site-packages/PIL/_imaging.so:
/sw/lib/libjpeg.62.dylib (compatibility version 63.0.0, current version 63.0.0)

Дальше можно решить двумя способами:
а) удалить «зоопарковую» библиотеку (в моем случае — из /sw/lib и пересобрать все заново)
б) если удалять — не вариант, то можно перелинковать питоновский _imaging на правильную, свежесобраную библиотеку:install_name_tool -change /sw/lib/libjpeg.62.dylib /usr/local/lib/libjpeg.62.dylib _imaging.so

После этого все должно работать :)

Async Hearts

Время на прочтение7 мин
Охват и читатели10K
Некоторое время назад случилось несколько событий, изменивших привычный вид ландшафта веб-разработки на Питоне: Facebook приобрела сервис Friendfeed и сразу же открыла исходный код технологии проекта — http-сервер и микрофреймворк Tornado. Одновременно разработчик Friendfeed опубликовал в своем блоге заметку, в которой привел причины, по которым было решено с нуля разрабатывать собственный асинхронный веб-сервер.

Статья — экскурсия в самое сердце этого и конкурирующего (Twisted.web) проектов, их циклы асинхронной обработки поступающих данных.

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

Несколько занимательных Python-проектов

Время на прочтение2 мин
Охват и читатели11K
Вступление.

Я долго думал, создавать ли этот топик.
Аргумент против: творения не мои, поэтому инвайта ожидать не стоит, а в силу отсутствия исходников полезность статьи не велика.
Аргумент за: я был сильно впечатлен увиденным, а искать что-то касающееся Python-а и программирования в целом на просторах youtube-a вряд ли кто-то станет.

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

Об авторе (но не от автора).

Автором всех шести приложений является Badmephisto — студент из Словакии, живущий в настоящее время в Канаде. Он весьма известен как спидкубер, но, как мне кажется, не менее талантлив в программировании. Еще он замечательный математик, увлекающийся фракталами.
Ссылки: Cubing site, Youtube account, Fractalmath channel.

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

Хабраподсветка или эксперименты в изолированном окружении Python

Время на прочтение4 мин
Охват и читатели5.3K
Протестировать свежую версию любимого фреймоврка. Запустить приложение со специфичным набором библиотек. Установить необходимые библиотеки по списку зависимостей. Как решить все эти задачи не затронув системные файлы? В этой статье речь пойдет об утилитах virutalenv и pip.
Читать дальше →

Tornado Web Server

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


Команда friendfeed.com, недавно присоединившаяся к Facebook, выложила в открытый доступ собственный неблокирующий веб-сервер на Python. Из-за своей неблокирующей природы (используется epoll) сервер легко выдерживает тысячи одновременных подключений. У Tornado есть все шансы стать лучшим выбором для реализации технологии Comet средствами языка Python.

Производительность впечатляет:


Документация (на англ.) — www.tornadoweb.org/documentation

Релиз PyDev 1.5 или PyDev Extensions теперь с открытым кодом

Время на прочтение1 мин
Охват и читатели1.7K
imageВышла новая версия PyDev, плагина к Eclipse, позволяющего разрабатывать проекты на Питоне. В новой версии разработчик Fabio Zadrozny решил интегрировать в бесплатную открытую версию всю функциональность платного дополнения PyDev Extensions.

В новой версии:
  • Продвинутая интерактивная консоль с авто-импортом,
  • Анализ качества кода в реальном времени,
  • Контекстно-независимое code-completion с авто-импортом,
  • Иерархическая диаграмма классов,
  • Консоль отладки с возможностью запуска удаленного дебаг-сервера.

Подробную информацию можно узнать на официальном сайте PyDev.org, а также в блоге Fabio Zadrozny.

Ссылки для скачивания

Анализ рынка ноутбуков с помощью Python

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

Введение



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

Начнём



diy-03-425[1] Для анализа нам необходим набор данных, к сожалению я не смог обнаружить веб-сервисы у российских он-лайн магазинов ноутбуков, поэтому мне пришлось скачать прайс-лист одного из них (я не стану называть его) и вытащить из него цены и основные параметры (по-моему мнению таковыми являются: частота процессора, диагональ монитора, объем оперативной памяти, размер жесткого диска и объем памяти на видео-карточке). Далее я провёл некоторый анализ по следующим вопросам:
Читать дальше →

Офисный муз.проигрыватель с элементами демократии своими руками

Время на прочтение1 мин
Охват и читатели1.5K
В нашем офисе в одной комнате сидят 4 программиста со схожими музыкальными взглядами и жуткими нежеланием сидеть в наушниках. Поэтому один из компов в офисе выбран в качестве музыкального сервера, и по большими колонкам вещает музыку вокруг.
Признаюсь, это крайне не удобно, изначально это выливалось в фразы по офису, типа: «Поставь, пожалуйста, эту песенку!», «Убавь громкость», «Выключи ..» и т.д. Поэтому для локальных нужд написали небольшой плагин к музыкальному плееру который позволяет всем управлять музыкой со своих компов. Решил выложить, потому как наверняка найдутся люди которым он понадобится.


В качестве музыкального плейера выбран AIMP, к нему был написан плугин на Delphi, задача которого управлять плейером, получая команды по простейшему протоколу. Сам клиент написан на Python (и работал на win32-2.5), фактически он эмулирует окошка любимого в детстве Winamp, да по дизайну там беда, можете мне об этом не напоминать.
Что я могу сказать — удобно. Уже пользуемся больше года нареканий и скандалов из-за музыки не возникает.

Да, нужно сказать, что сидим исключительно по Windows по этому работоспособность проверена только под этой платформой, хотя теоритечески все должно запускаться и под другими платформами.

Итак, что надо для установки:

на клиента:

После распаковки, нужно изменить файлы stg.py где прописан ip-адрес хоста с AIMPом, и порт соединения.

Простой скрипт для рассылки СМС

Время на прочтение1 мин
Охват и читатели9.2K
Я продолжаю изучать Питон. Язык красивый, меня радует что когда мой коллега — непрограммист, садится за мой код он его может прочитать и понять. Встала задача сделать СМС оповещение клиентов (ну о просрочке, новых услугах итд). Мы купили GSM модем Teleofis. Для работы с ним пошукали проги, не особо нашли, а уж бесплатного и тем более. Пришлось открыть мануалы и написать простенькую прогу под Винду, которая открывает COM порт, на котором сидит модем и пишет в него AT команды.

Сам скрипт требует pySerial для работы под виндоус.

Чтобы запустить скрипт, надо воткнуть в комп модем, установить дрова, открыть файлик sms_sender.py и отредактировать там строку 90:

a = Sender(('790864x0807',),u"Признанный критикой всего мира величайшим эпическим произведением новой европейской литературы, «Война и мир» поражает уже с чисто технической точки зрения размерами своего беллетристического полотна. Только в живописи можно найти некоторую параллель в огромных картинах Паоло Веронезе в венецианском Дворце дожей, где тоже сотни лиц выписаны с удивительною отчётливостью и индивидуальным выражением[источник не указан 91 день].",1,115200,2)

* This source code was highlighted with Source Code Highlighter.

Первый параметр — кортеж адресатов, второй — текст сообщения. Третий — номер порта. Остальные нам не нужны — это скорость и таймаут ожидания ответа.
А потом сделать из Командной строки вызов команды
python sms_sender.py

Вы увидите:
more PDU to go…
more PDU to go…


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

Пишем апплет-переводчик для Gnome [python]

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

Предисловие



Сидел я как-то тихим вечером, читал англоязычные сайты. Когда понадобилось перевести пару фраз, я как обычно открыл новую вкладку, набрал translate.google.ru, скопировал, вставил текст, нажал перевести, прочитал. И ведь такую длинную последовательность действий приходится проделывать каждый раз, когда есть необходимость перевести текст, пару фраз или целый абзац. Да, можно использовать какой-либо клиент для перевода, но окно программы придется открывать или доставать из-под других окон. Да, последовательность короче, но все равно длинная. Было бы здорово сократить последовательность действий до скопировать, нажать кнопку. Так появилась идея для апплета. Его логика такая:
  • На панели появляется кнопка «GTranslate»
  • Если вам надо перевести текст, то копируете его и нажимаете на кнопку
  • Автоопределение языка

Поехали

Сравнение эффективности способов запуска веб-приложений на языке Python

Время на прочтение8 мин
Охват и читатели17K
Последнее время в области веб-разработок стал набирать популярность язык программирования Python. Однако, массовому распространение Python мешает проблема эффективного запуска приложений на этом языке. Пока, в большинстве случаев, это удел выделенных или виртуальных серверов. Модульные языки в отличии от монолитного в базовой функциональности php на каждый запрос подгружают как минимум runtime-библиотеку, а как максимум — ещё несколько десятков запрашиваемых пользователем модулей. Поэтому классический подход наподобие mod_php для Python и Perl не очень уместен, а держать приложение постоянно в памяти было дороговато. Но время движется, техника стала мощнее и дешевле, и уже достаточно давно можно спокойно говорить о постоянно запущенных процессах с приложением в рамках массового хостинга.

О чём тут

Время от времени, в сети появляются различные предложения как запустить приложение на Python. Например, недавно хостинг Джино уникально поправил mod_python и предложил хостинг именно с его помощью. Следом за ним, некий хостинг Locum вообще отринул mod_python с его безопасностью (создаётся впечатление, что суть самобытная безопасность — это единственная проблема АйТи на пути к нирване) и провёл победоносное тестирование modwsgi против fastcgi. Комьюнити же, судя по проведённому мною поиску, разрывается между mod_python и FastCGI. Причём, FastCGI обычно имеется ввиду тот, что идёт в поставке Django — flup. Являясь популярным хостингом Python-приложений, мы не смогли пройти мимо и решили внести свою лепту в эту священную войну.
Читать дальше →

Использование метаклассов в Python

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

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

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

Сортировка миллиона 32-битных int'ов в 2 мегабайтах памяти на Питоне

Время на прочтение4 мин
Охват и читатели8.7K
Мой перевод статьи Гвидо ван Россума:

Меня тут в шутку спросили: смогу ли я отсортировать миллион 32-битных int'ов в 2 мегабайтах памяти на Питоне. Во время размышления, мне пришло в голову задействовать механизм ввода-вывода с использованием буферной памяти.

Вообще, это именно шуточный вопрос — одни только данные займут 4 мегабайта, при условии бинарного представления! Правда, можно пойти на хитрость — взять файл, содержащий миллион 32-битных int'ов. Как же отсортировать их, используя минимальное количество памяти? Это должна быть какая-то разновидность сортировки слиянием, в которой небольшие куски данных сортируются и записываются во временный файл, после чего происходит слияние временных файлов для получения окончательного результата.

Вот мое решение:
Читать дальше →

Заметки о метапрограммировании в Python

Время на прочтение2 мин
Охват и читатели7.2K
По мере накопления опыта программирования на одном языке, все мы нарабатываем стандартные для себя приемы программирования. Чем выше наш опыт, тем больше количество, более разносторонни методы их работы. При переходе на другой язык, мы стараемся их воспроизвести. Иногда, такое бывает что часть из них неактуальна или неэффективна. Большую часть времени от изучения языка отнимают новые несвойственные прежним нам, приемы. Я хотел бы отметить некоторые особенности Python, которые для меня были не очевидны поначалу освоения.
Читать дальше →

Пишем апплет для GNOME на Python

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

Апплет — это маленькое приложение, встраиваемое непосредственно в панель GNOME. Обычно апплет выполняет какой-то опеределенный узкий функционал (изменение громкости, монтирование устройств), что выгодно отличает его от громоздкого оконного приложения. На самом деле знающему Python кодеру не составит труда написать собственный апплет, но и для незнающих есть выход: большое количество полезных (и не очень) апплетов лежит на сайте gnomefiles.org, помимо этого, на официальном сайте есть примеры написания апплетов на C.
Поехали!

Реализация небольшого асинхронного сервера

Время на прочтение9 мин
Охват и читатели21K
Целью публикации данного топика является представление аудитории Хабрахабра кода небольшого асинхронного сервера, написанного на Питоне с использованием практически «голых» сокетов.

Мне приходилось писать достаточно много приложений, работающих в качестве сетевых сервисов. Эти сервисы были написаны на разных языках, под разную нагрузку и каждый раз реализация нового сервиса чем-то отличалась от предыдущей. Под хабракатом я привожу пример довольно удачной, на мой вгляд, реализации «учебного» сервера, сопровождая код своими комментариями по мере необходимости.
Читать дальше →

Jabber-to-Evernote Gateway изнутри

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

Код — в конце статьи, а для начала я расскажу о некоторых особенностях работы с Evernote.
Читать дальше →

6 способов слияния списка списков

Время на прочтение4 мин
Охват и читатели129K
Зашел тут у нас в офисе разговор как наиболее «красиво» и быстро склеить список списков в Питоне. Действительно как?

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

ВАРИАНТ1
Все знают, что элементы списка можно перебирать в цикле и, то что можно добавлять элементы в конец. Это приводит нас к первому варианту решения:
def listmerge1(lstlst):
    all=[]
    for lst in lstlst:
        for el in lst:
            all.append(el)
    return all

Мало того, что функция растянулось аж на 6 строк, так вдобавок она еще и не эффективная.
Попробуем её улучшить в обоих смыслах: скорости и красоты («pythonic way»).
Читать дальше →

Полиглоты в продакшн Питона

Время на прочтение15 мин
Охват и читатели8K
Сразу, в порядке завлекалочки. Нашей целью будет научиться писать программы-полиглоты, способные интерпретироваться сразу на нескольких языках программирования (одним, «базовым» из которых является Python). При этом, в случае интерпретации на одном из них, программа будет генерировать другую программу, функционально схожую (или даже эквивалентную) той, которая выполняется в случае интерпретации на другом языке.

И самое интересное: подходы, используемые при написании этой программы, будут интересны не столько академически, сколько практически — при разработке программы с использованием этих подходов разработка будет проще и удобнее (хоть поначалу и чуточку непривычно), а программа будет эффективнее, чем без них.

Впрочем, это звучит страшнее, чем является.

Поехали?