Архив

Публикации с меткой ‘Python’

Python: Виртуальное окружение для разработки с помощью virtualenv.

15 марта 2013 2 комментария

Для Python существует отличный инструмент - virtualenv. Если вы являетесь разработчиком, то для вас он должен быть незаменимым. Как вы могли догадаться, он создаёт виртуальное окружения для Python’а. Наверное, вы сталкивались с проблемой когда разные проекты используют разный набор пакетов, но это ещё пол беды, всё гораздо хуже, когда эти множества пересекаются, но требуются разные версии одних и тех же пакетов, которые, к тому же, не полностью совместимы друг с другом. Virtualenv позволяет решить эту проблему достаточно легко. Читать далее...

Django: Настраиваем STATIC_ROOT, STATICFILES_DIRS и MEDIA_ROOT правильно.

5 марта 2013 3 комментария

Для начала определимся с разницей между статикой и медиа-файлами в терминах Django. Первое - это все ваши файлы, которые вы сами создавали: css-стили, js-скрипты, картинки для дизайна и т.п. Медиа-файлы - всё, что загружает пользователь на ваш сервер (автарки, фотки), т.е. пользовательский контент. С пользовательским контентом всё более-менее просто и поэтому мы рассмотрим настройку только в конце поста. Читать далее...

Python: PIP не хочет ставить нужную версию.

Всем привет.

Сегодня столкнулся с проблемой, хотел откатить django-tastypie до пердыдущей версии, т.к. в новой половина тестов начала падать. Но тут меня ждал сюрприз - pip отказался ставить нужную версию пакета, при этом нагло заявляя в лицо: "вы просили версию X, но я поставлю Y". Читать далее...

Python: Сокращаем URL с помощью bit.ly API.

28 февраля 2013 Нет комментариев

bit.ly logo
Для начала стоит ответить на вопрос чего вообще сокращать ссылки. Варианты могут быть разные, но самая суть - это экономия места там, где оно действительно ценно. Т.е. если вы на форуме даёте ссылку на википедию, то, вероятно, лучше не пользоваться подобными сервисами, будет более удобно сразу видеть куда ведёт ссылка. Но в некоторых случаях это оправдано: при передаче через sms или, например, ссылку на ту же википедия иногда проще будет продиктовать голосом если она будет укорочена, при использовании, например, в рекламе, хотя тут уже спорно. Главная мысль - не надо их использовать где попало, это иногда раздражает.

Итак, к сути. На одном из проектов изначально планировалось использовать goo.gl в качестве сервиса по сокращению ссылок, но, случайно нашёл на stackoverflow инфомрацию о том, что некоторые операторы начали фильтровать SMS с такими URL от goo.gl (ответ был в сентябре 2012). Непонятно какие это операторы, скорее всего штатовские, да и было сказано что тех. поддержка twilio (облачный сервис который предоставляет различные услуги, связанные с телефонией, в том числе, отправка и приём SMS сообщений) пытается решить эту проблему, однако, не может предоставить отчёт о статусе, потому как всё зависит от тех самых мобильных операторов. Хотя с другой стороны, может не всё так плохо, я знаю как минимум один сервис который предоставляет коммуникацию с клиентами по SMS с использованием goo.gl, да и Google всё же крупная контора и, может быть, уже уладила данную проблему сама. Читать далее...

Python: PIP download cache.

27 февраля 2013 Нет комментариев

Python PIP Boy
На своих Python-проектах я всё время пользуюсь виртуальным окружением (virtualenv), как для разработки, так и для их деплоя (развёртки, установки). Обычный способ установки новой зависимости в virtualenv это использование пакетного менеджера Python - PIP. Он достаточно прост как по логике работы, так и по использованию. Так, при попытке установить пакет в virtualenv он будет тянуть каждый раз исходники с PyPi-репозитория (или с другого места, если его об этом попросили). Иногда этот процесс может занять достаточно много времени: если надо скачать много пакетов или некоторые из них скачиваются не очень быстро (например, стянуть большой репозиторий с github, помнится, ещё почему-то django скачивалась не очень шустро). Читать далее...

Python: генератор списка паролей для перебора (brute-force). Code Review.

23 февраля 2013 3 комментария

Оригинальная статья тут:
Python: генератор списка паролей для перебора (brute-force).

Эта поделка умудрилась даже попасть в одну из статей журнала "Хакер" - что-то там было про brute forcing для VoIP-серверов. Автор обращался за разрешением, которое я ему и дал, предупредив что скорее всего можно лучше. Читать далее...

Python: Маленькая хитрость. if-else vs and-or.

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

Наверное любому программисту приходится часто писать конструкции такого вида:

if a == b:
c = d
else:
c = e

Как-то разбирая исходники какого-то проекта (скорее всего, это была Django) наткнулся на весьма компактную замену. Вот для сравнения два аналогичных блока кода с использованием логических операций python’а и с использованием конструкции if-else:

# if-else:
if random.random() > 0.5:
a = 1
else:
a = 0

# and-or style:
a = random.random() > 0.5 and 1 or 0

На мой взгляд выглядит гораздо лучше и компактнее (да-да, if-else можно записать в 2 строчки вместо 4, но мне так не нравится). Другое дело, что некоторым это может показаться противоречиво с некоторыми пунктами дзена python’а (import this), но это спорно. В общем использую там, где считаю нужным.

Кстати, если кого-то интересует производительность, то она примерно одинакова, далее выложу тесты и объяснение логики для тех, кому интересно. Читать далее...

Hibernate: Удаление объектов из БД.

10 февраля 2010 Нет комментариев

По работе пришлось изучать работу Java’вского ORM’а, пока что знаком только бегло, но некоторые полезные штуки для новичка решил записать. Может кому пригодится, может нет, но хотя бы самому гуглить придётся меньше. Кстати, примеры будут не на Java, а на Jython’е, т.к. с первым я тоже не очень знаком.

Итак, опустим настройку и подключение Hibernate, предположим, что вы это уже сделали. Быть может, напишу об этом позже. Требуется удалить из таблицы player (которая маппится с классом Player, естественно… или наоборот) некоторые записи. Если мы знаем id игрока, тогда всё элементарно (как и в других случаях):

player = session.load(Player, player_id)
session.delete(player)

Теперь рассмотрим случай, когда надо удалить много записей. Читать далее...

Python: Реализация простого web-сервера.

Не для собственных нужд, но как-то понадобилось написать простой web-сервер для обработки на нём загруженных данных. В общем-то должен был получиться простой вёб-интерфейс к программе. Он и получился, местами даже слишком простой. В общем суть такова – необходимо получить от пользователя экзешник, на сервере его обработать нужными программами и выдать результат, т.е. обработанный файл для скачивания. Можно было бы написать скрипт на php, что было бы проще, но тогда необходимо с собой таскать какой-нибудь вёб-сервер (apache, denwer и т.п.). На питоне можно его реализовать достаточно просто в самом скрипте используя стандартные заготовки и библиотеки, такие как BaseHTTPServer. Ниже следует листинг с краткими комментариями. Читать далее...

Python: Проблема с подвисанием GUI на TkInter.

21 октября 2009 2 комментария

Встала задача написания небольшой графической оболочки для программы с минимальным интерфейсом (одна кнопка и одно поле вывода). Много нам не надо, поэтому решил обойтись идущей вместе с python’ом в поставке библиотекой TkInter. И тут столкнулся с небольшой проблемой – при нажатии кнопки запускаются довольно долгие и объёмные вычисления, из-за которых виснет весь интерфейс программы. Читать далее...

Python: генератор списка паролей для перебора (brute-force).

13 октября 2009 11 комментариев

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

Python: файловый интерпретатор.

Очередной бестолковый велосипед от СГУ. Требуется написать "интерпретатор", который умел бы работать с файлами. Так же умел бы исполнять сторонние скрипты. Работа с файлами заключается в следующих функциях - открыть на запись, открыть на чтение, закрыть файл, читать из файла, читать n байт, записать в файл, читать в буфер, записать из буфера в файл, сместиться на определённую позицию.
Читать далее...