May 2011
1 post
4 tags
Передернуть экран
Обнаружили случайно стремный забавный глюк в Firefox 4. Если добавлять флешку динамически на страницу - при помощи js - используя тот же SWFObject, то она не сразу начинает отрисовываться. Причем иногда, а не всегда - очень мило с его стороны :)
Это не ошибка верстки. Это, видимо, оптимизация рендера в броузере.
Нашли workaround.
После добавления флешки:
/* seems a bug in FF4 with...
November 2010
1 post
2 tags
Django: Private File Upload and Serving →
July 2010
1 post
2 tags
Python Spawning →
Ещё один способ запуска веб-приложений на Python. Очень элегантно и, как утверждается, не уступает по скорости связке Apache + mod_wsgi.
Spawning is a fast, easy to use, and flexible HTTP server for hosting python web applications which conform to the WSGI interface.
June 2010
3 posts
2 tags
NIH-синдром
Каждый раз, приступая к нетривиальной задаче, я ощущаю приступ NIH-синдрома. Во-первых, иногда хочется попробовать сделать какой-то механизм самому. Во-вторых, очень часто меня не устраивает scope готовых решений - то есть, они берут на себя слишком много, или слишком мало.
То, что это называется них-синдром, я узнал сегодня, случайно. Вот что пишет про это Джоел Спольски в 2001, а вот Джеймс...
2 tags
Zachary Voase, крутой парень, python, ruby, web... →
Прекрасно структурированный блог у него :) И вообще :) Ещё, он убрал комментарии из блога вообще - говорит, базар не любит разводить - пишите в почту :) За наводку - спасибо Ворушину.
3 tags
RSS/Blogs и Wiki
Похоже на то, что RSS и блоги обесценивают ценную информацию. То есть, она “проходит” в них на том же уровне, что и не очень ценная информация. Часто приходится нажимать “mark all as read”.
Блог больше подходит для “анонсов” - чтобы поставить “якорь” - что такая информация есть и что найти её можно там-то. Либо, для коротких отчетов об...
May 2010
7 posts
2 tags
Я поражен
Elance.com для подтверждения номера сотового телефона звонит на сотовый и просит сказать код подтверждения голосом. Он его распознает и говорит ‘Thank you! Good Bye!’
5 tags
iКуча, анонс итерации номер 2 →
3 tags
Преобразование строк из/в Unicode
В дополнение к посту о funny characters.
Преобразование utf-8 в cp866 (в ASCII кодировку)
>>> u'ы'.encode('cp866')
'\xeb'
Преобразование cp866 в utf-8
>>> 'ы'.decode('cp866')
u'\u044b'
decode - декодирует последовательность байтов в юникод, encode - кодирует юникод в последовательность байтов. Последовательность байтов всегда должна интерпретироваться...
2 tags
Опасаться funny characters
Предыстория
Во время написания iКучи я столкнулся с несовершенством мира. У меня появилась такая задача: по ссылке узнать title страницы. Теоретически, задача не сложная, но проявились нюансы, связанные с кодировками.
Чтобы сразу проверять работу парсера, я тестировал все в консоли. И иногда print вылетал с UnicodeEncodeError. Это явление известно как funny characters.
Пример
символ...
1 tag
=> rudi-src.05bit.com →
Все-таки, сменил адрес блога на тот, который хотел сделать с самого начала, но почему-то передумал :)
2 tags
Kodoblog in English
Разные знания и премудрости отныне буду писать на английском здесь: http://kodoblog.05bit.com.
А на русском буду писать всякое разное о программинге и просто так :)
Хостинг. Вопрос жизни →
Итоги прошедших 2-х лет в поиске хостинга написал в ЖЖ. Пока не настроил кросспостинг, да будет так.
April 2010
1 post
3 tags
Контрибьюшн
В библиотеке django-treebeard есть теперь мой небольшой кусочек кода :) Я доволен :)
Кстати, я сначала прицепил к своему сниппету лицензию BSD, но когда Густаво посмотрел код и решил его внедрить к себе, то попросил поменять лицензию на Apache2 чтобы prevent a headaches. Я был конечно не против, но я думал, что эти лицензии разрешают все и совместимы поэтому. Оказывается, не совсем.
March 2010
4 posts
4 tags
Nicedit wysiwyg
Обычно, wysiwyg - это какая-то боль. Зачем-то нужно качать 1 мегабайтовую библиотеку и получить 100 кнопок, а потом методично отключать 90% ненужного функционала. И все равно будет тормозить и глючить. Не люблю wysiwyg. :)
Nicedit мне понравился, по первому впечатлению. Весит 35 кб, кнопочек всего 16 и все компактно лежат в gif-ке размером 3 кб. Можно конфигурировать. Синтаксис для подключения -...
2 tags
Python money formatting # Форматирование вывода... →
Поиском находится плохо. Чтобы лучше искалось, решил запостить ссылку :)
(thanks to Vorushin)
4 tags
django-bricks # Generic Django application for... →
3 tags
Python Goodies
Это специальный пост для тех, кто не попробовал ещё Python в деле :) И особенно специально для Хаафа.
Вот такие плюсы есть у Python по сравнению с чем-нибудь ещё.
0. Painless.
В общем - главное :))) Лаконично и работает.
1. Интерактивный интерпретатор.
То есть, ставишь себе Python, запускаешь в командной строке python - и можно уже играться.
>>> a,b,c = 1,3,4
>>>...
February 2010
17 posts
Mercurial # Руководство # Manual # Tutorial # How... →
4 tags
Django # Грабли с отловом exceptions в...
Нашел грабли :) Надо будет сделать баг-репорт, но пока - просто workaround.
Грабли - если view задекорирован и в нем возникает ошибка, то джанга не всегда правильно обрабатывает traceback - дебажный вывод не показывает, точнее слетает в самом дебажном выводе :)
Пример:
from decorators import render_to
@render_to('main.html')
def main_view(request):
# тут что-то пошло не так
raise...
2 tags
Python # Преобразование строки или чего-то в число...
def safe_int(val):
try:
return int(val)
except (TypeError, ValueError):
return 0
Пожалуй, алмазный сниппет :)
Нужен, если на входе ожидается непредсказуемое значение, но на выходе требуется получить значение в виде int во что бы то ни стало, так, чтобы программа не ломалась. Если требуется, чтобы ломалась и громко сообщала о неладном - сниппет тогда не нужен, конечно.
4 tags
Python # Таймаут на выполнение функции # Function...
Иногда функция может выполняться дольше чем хочется, и нужно установить таймаут на выполнение функции - чтобы выполнение просто оборвалось, если время вышло.
Я нашел такое решение:
http://code.activestate.com/recipes/473878/
Там - написана такая функция:
def timeout(func, args=(), kwargs={}, timeout_duration=1, default=None)
# ...
Которую легко использовать, например, так:
def...
3 tags
HTML / CSS, круглые углы, round corners
Для круглых углов в HTML нужно просто использовать свойство “border-radius” :) Кто не поддерживает - сам виноват, зато будет простой, красивый и легкий CSS.
.round-corner {
border:1px solid #a00;
border-radius: 15px;
}
Хохо! У меня круглые углы.
Синтаксис предложен W3C для CSS3: http://www.w3.org/TR/2005/WD-css3-background-20050216/#the-border-radius
4 tags
Django treebeard # Хранение иерархической... →
Одна из моих любимых библиотек - “django-treebeard”. В ней есть набор реализаций основных алгоритмов для хранения древовидной структуры в базе данных. Автор живет в Перу :)
5 tags
Django # Декоратор render_html # Decorator
Ещё один декоратор по мотивам… :)
Вот “декоратор”:
def render_html(template_name):
def wrapper(func):
@wraps(func)
def inner(request, *args, **kwargs):
result = func(request, *args, **kwargs)
if result.has_key('_redirect'):
return HttpResponseRedirect(result['_redirect'])
else:
return...
4 tags
Bitbucket покорил меня # Bitbucket is so fun!
Завел репозиторий для всех подряд сниппетов:
https://bitbucket.org/rudi/rudi/src/
Так приятно сделан битбакет, прямо большой плюс в сторону mercurial :)
4 tags
Django # Приложение для определения макросов #...
Выложил аппликейшн django_autotext:
http://github.com/rudyryk/django_autotext
Оно делает следующее: дает возможность определить произвольный “макрос”, который можно использовать в тексте - вместо макроса будет подставлен текст, сгенерированный функцией.
Как оно задумано и как работает?
Например - хочется чтобы можно было в тексте использовать имя текущего пользователя. Текст...
3 tags
Javascript # jsMath # Библиотека для вставки... →
Не совсем питон, конечно :) Но полезная штука для веба, а питон с вебом близко дружат :)
4 tags
Markdown # Автоматический перенос строк # Auto...
Мне нравится Markdown, но не нравится, что он не переносит строки автоматически.
В этом, наверняка, есть смысл :) Но это поведение анти-интуитивно, мне удалось это проверить на неискушенных знаниями пользователях.
Сделал расширение “autobr”, которое включает авто-перенос, выложил здесь: http://github.com/rudyryk/markdown-flavours/
Кстати, такую модификацию я встречал на...
5 tags
Django # Декоратор для confirm # View decorator...
Inspired by http://vorushin.ru/blog/26-decorators-python :)
Например, если у меня есть view для удаления чего-нибудь - скажем, файла:
def remove_file(request, id):
#...
И мне нужно показать страницу с подтверждением удаления - простую “да / нет”. Я написал декоратор, который может работать вот так:
def confirm_context(request, id):
context = {}
# ...
return...
4 tags
Django # Полезные темплейтные фильтры # Useful... →
По ссылке - расширения стандартного набора темплейтных фильтров. Придуманы не мной.
Хотя, однажды, я собственноручно “изобрел” фильтр is_equal. Точно такой же как в сниппетах по ссылке :))) Когда это, например, удобно?
Есть 2 способа написать одно и то же. Первый - стандартный, второй - с использованием нашего “хитрого” фильтра.
{% ifequal node.id current_id %}...{%...
4 tags
"Красивые" цены # Nice price formatting #...
Классика жанра - отформатировать вывод цены: “1000” вывести как “1 000”. Наверное, после ещё пары-тройки лет программирования на питоне у меня получится написать это покороче :))
Пока же - вот:
def nice_price(price, delimiter=','):
"""
Красиво отформатировать цену - через каждые 3 знака
ставится разделитель, копейки не учитываются.
Примеры
...
4 tags
Кусок списка с центрированием # Get center slice...
Иногда нужно сделать хитрую “вырезку” из списка: определенной длинны, плюс так, чтобы выбранный элемент оказался бы в центре “вырезки”. Чтобы это работало всегда и безотказно, нужно учесть случаи, когда элемент близко к началу или к концу списка. А так же, требуемая длина вырезки может быть больше длины списка.
Типичный пример использования - красивый такой paginator, у...
1 tag
Hi, man!
Привет всем :) Тестирую, как работает подсветка. Прикрутил SyntaxHihglighter.
def hello():
print "Hi, man!"
2 tags