Архив

Архив раздела ‘Программирование’

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 скачивалась не очень шустро). Читать далее...

Встраиваем плеер в WordPress.

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

Небольшой урок велосипедостроения от zetblog. Задача: дать возможность встроить аудио-плеер в посты WordPress с помощью плагина. Вообще, какие-то готовые плагины-плееры под wordpress уже существуют, но мне они, по разным причинам, мне не очень приглянулись. Тем более, хотелось заглянуть и узнать как это всё реализовано "под капотом". В качестве самого плеера была выбрана JS-библиотека audiojs. Читать далее...

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

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

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

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

Code Review. Анонс новой рубрики.

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

Новая рубрика: code review. Хотел назвать "антиговнокод", но подумал, что это слишком жёстко, да и нет никакой гарантии что через год или два я не изменю своего мнения о выданных советах или не придумаю чего лучше. Пока в планах постить только review python кода, думаю 3,5 года боевого опыта работы с ним (а если приплюсовать беспечное студенчество, то раза в 2 больше) позволят дать хоть на толику полезные советы, как себе в прошлом, так и ещё кому-нибудь, даже если они об этом не просят. Всем добра! Подробности ниже. Читать далее...

Delphi: Пишем шаблон клиент-серверного приложения.

2 апреля 2010 12 комментариев

Продолжая тему разработки собственной утилиты администрирования, в данной статье я рассмотрю типовой шаблон программы клиент-сервер, на базе которой можно разрабатывать собственные клиент-серверные приложения. Данный типовой шаблон для простоты понимания и удобства применения будет рассмотрен на примере компонентов ClientSocket и ServerSocket. Читать далее...

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), но это спорно. В общем использую там, где считаю нужным.

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

WordPress: Модернизация плагина statpress.

21 февраля 2010 1 комментарий

Статистика — вещь не только интересная, но иногда и полезная. WordPress — один из популярнейших движков php для блогов, для него существует огромное количество плагинов, в том числе и плагины для просмотра статистики по посещаемости. Один из таких плагинов — statpress. Но есть в нём некоторые недостатки, автор плагина добавил распознавание некоторых русских поисковых движков, но так же некоторые упустил из виду. Хотя даже тот же Яндекс обрабатывается не очень хорошо, не учитываются переходы с yandex.ua, yandex.kz и т.п. Но opensource тем и хорош, что всегда можно поправить исходники, если что-то тебя не устраивает. Далее пойдёт речь об оптимизации плагина statpress под Российские поисковики. Читать далее...

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. И тут столкнулся с небольшой проблемой – при нажатии кнопки запускаются довольно долгие и объёмные вычисления, из-за которых виснет весь интерфейс программы. Читать далее...