May 2011
1 post
4 tags
Передернуть экран
Обнаружили случайно стремный забавный глюк в Firefox 4. Если добавлять флешку динамически на страницу - при помощи js - используя тот же SWFObject, то она не сразу начинает отрисовываться. Причем иногда, а не всегда - очень мило с его стороны :) Это не ошибка верстки. Это, видимо, оптимизация рендера в броузере. Нашли workaround. После добавления флешки: /* seems a bug in FF4 with...
May 30th
3 notes
November 2010
1 post
2 tags
Django: Private File Upload and Serving →
Nov 30th
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.
Jul 15th
June 2010
3 posts
2 tags
NIH-синдром
Каждый раз, приступая к нетривиальной задаче, я ощущаю приступ NIH-синдрома. Во-первых, иногда хочется попробовать сделать какой-то механизм самому. Во-вторых, очень часто меня не устраивает scope готовых решений - то есть, они берут на себя слишком много, или слишком мало. То, что это называется них-синдром, я узнал сегодня, случайно. Вот что пишет про это Джоел Спольски в 2001, а вот Джеймс...
Jun 17th
1 note
2 tags
Zachary Voase, крутой парень, python, ruby, web... →
Прекрасно структурированный блог у него :) И вообще :) Ещё, он убрал комментарии из блога вообще - говорит, базар не любит разводить - пишите в почту :) За наводку - спасибо Ворушину.
Jun 2nd
3 tags
RSS/Blogs и Wiki
Похоже на то, что RSS и блоги обесценивают ценную информацию. То есть, она “проходит” в них на том же уровне, что и не очень ценная информация. Часто приходится нажимать “mark all as read”. Блог больше подходит для “анонсов” - чтобы поставить “якорь” - что такая информация есть и что найти её можно там-то. Либо, для коротких отчетов об...
Jun 2nd
May 2010
7 posts
2 tags
Я поражен
Elance.com для подтверждения номера сотового телефона звонит на сотовый и просит сказать код подтверждения голосом. Он его распознает и говорит ‘Thank you! Good Bye!’
May 31st
5 tags
iКуча, анонс итерации номер 2 →
May 24th
3 tags
Преобразование строк из/в Unicode
В дополнение к посту о funny characters. Преобразование utf-8 в cp866 (в ASCII кодировку) >>> u'ы'.encode('cp866') '\xeb' Преобразование cp866 в utf-8 >>> 'ы'.decode('cp866') u'\u044b' decode - декодирует последовательность байтов в юникод, encode - кодирует юникод в последовательность байтов. Последовательность байтов всегда должна интерпретироваться...
May 22nd
6 notes
2 tags
Опасаться funny characters
Предыстория Во время написания iКучи я столкнулся с несовершенством мира. У меня появилась такая задача: по ссылке узнать title страницы. Теоретически, задача не сложная, но проявились нюансы, связанные с кодировками. Чтобы сразу проверять работу парсера, я тестировал все в консоли. И иногда print вылетал с UnicodeEncodeError. Это явление известно как funny characters. Пример символ...
May 22nd
1 tag
=> rudi-src.05bit.com →
Все-таки, сменил адрес блога на тот, который хотел сделать с самого начала, но почему-то передумал :)
May 18th
3 notes
2 tags
Kodoblog in English
Разные знания и премудрости отныне буду писать на английском здесь: http://kodoblog.05bit.com. А на русском буду писать всякое разное о программинге и просто так :)
May 9th
Хостинг. Вопрос жизни →
Итоги прошедших 2-х лет в поиске хостинга написал в ЖЖ. Пока не настроил кросспостинг, да будет так.
May 9th
April 2010
1 post
3 tags
Контрибьюшн
В библиотеке django-treebeard есть теперь мой небольшой кусочек кода :) Я доволен :) Кстати, я сначала прицепил к своему сниппету лицензию BSD, но когда Густаво посмотрел код и решил его внедрить к себе, то попросил поменять лицензию на Apache2 чтобы prevent a headaches. Я был конечно не против, но я думал, что эти лицензии разрешают все и совместимы поэтому. Оказывается, не совсем.
Apr 6th
1 note
March 2010
4 posts
4 tags
Nicedit wysiwyg
Обычно, wysiwyg - это какая-то боль. Зачем-то нужно качать 1 мегабайтовую библиотеку и получить 100 кнопок, а потом методично отключать 90% ненужного функционала. И все равно будет тормозить и глючить. Не люблю wysiwyg. :) Nicedit мне понравился, по первому впечатлению. Весит 35 кб, кнопочек всего 16 и все компактно лежат в gif-ке размером 3 кб. Можно конфигурировать. Синтаксис для подключения -...
Mar 31st
2 tags
Python money formatting # Форматирование вывода... →
Поиском находится плохо. Чтобы лучше искалось, решил запостить ссылку :) (thanks to Vorushin)
Mar 28th
3 notes
4 tags
django-bricks # Generic Django application for... →
Mar 8th
6 notes
3 tags
Python Goodies
Это специальный пост для тех, кто не попробовал ещё Python в деле :) И особенно специально для Хаафа. Вот такие плюсы есть у Python по сравнению с чем-нибудь ещё. 0. Painless. В общем - главное :))) Лаконично и работает. 1. Интерактивный интерпретатор. То есть, ставишь себе Python, запускаешь в командной строке python - и можно уже играться. >>> a,b,c = 1,3,4 >>>...
Mar 5th
5 notes
February 2010
17 posts
Mercurial # Руководство # Manual # Tutorial # How... →
Feb 28th
3 notes
4 tags
Django # Грабли с отловом exceptions в...
Нашел грабли :) Надо будет сделать баг-репорт, но пока - просто workaround. Грабли - если view задекорирован и в нем возникает ошибка, то джанга не всегда правильно обрабатывает traceback - дебажный вывод не показывает, точнее слетает в самом дебажном выводе :) Пример: from decorators import render_to @render_to('main.html') def main_view(request): # тут что-то пошло не так raise...
Feb 27th
2 tags
Python # Преобразование строки или чего-то в число...
def safe_int(val): try: return int(val) except (TypeError, ValueError): return 0 Пожалуй, алмазный сниппет :) Нужен, если на входе ожидается непредсказуемое значение, но на выходе требуется получить значение в виде int во что бы то ни стало, так, чтобы программа не ломалась. Если требуется, чтобы ломалась и громко сообщала о неладном - сниппет тогда не нужен, конечно.
Feb 25th
2 notes
4 tags
Python # Таймаут на выполнение функции # Function...
Иногда функция может выполняться дольше чем хочется, и нужно установить таймаут на выполнение функции - чтобы выполнение просто оборвалось, если время вышло. Я нашел такое решение: http://code.activestate.com/recipes/473878/ Там - написана такая функция: def timeout(func, args=(), kwargs={}, timeout_duration=1, default=None) # ... Которую легко использовать, например, так: def...
Feb 22nd
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
Feb 20th
1 note
4 tags
Django treebeard # Хранение иерархической... →
Одна из моих любимых библиотек - “django-treebeard”. В ней есть набор реализаций основных алгоритмов для хранения древовидной структуры в базе данных. Автор живет в Перу :)
Feb 17th
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...
Feb 16th
1 note
4 tags
Bitbucket покорил меня # Bitbucket is so fun!
Завел репозиторий для всех подряд сниппетов: https://bitbucket.org/rudi/rudi/src/ Так приятно сделан битбакет, прямо большой плюс в сторону mercurial :)
Feb 16th
4 tags
Django # Приложение для определения макросов #...
Выложил аппликейшн django_autotext: http://github.com/rudyryk/django_autotext Оно делает следующее: дает возможность определить произвольный “макрос”, который можно использовать в тексте - вместо макроса будет подставлен текст, сгенерированный функцией. Как оно задумано и как работает? Например - хочется чтобы можно было в тексте использовать имя текущего пользователя. Текст...
Feb 14th
1 note
3 tags
Javascript # jsMath # Библиотека для вставки... →
Не совсем питон, конечно :) Но полезная штука для веба, а питон с вебом близко дружат :)
Feb 14th
4 tags
Markdown # Автоматический перенос строк # Auto...
Мне нравится Markdown, но не нравится, что он не переносит строки автоматически. В этом, наверняка, есть смысл :) Но это поведение анти-интуитивно, мне удалось это проверить на неискушенных знаниями пользователях. Сделал расширение “autobr”, которое включает авто-перенос, выложил здесь: http://github.com/rudyryk/markdown-flavours/ Кстати, такую модификацию я встречал на...
Feb 13th
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...
Feb 12th
1 note
4 tags
Django # Полезные темплейтные фильтры # Useful... →
По ссылке - расширения стандартного набора темплейтных фильтров. Придуманы не мной. Хотя, однажды, я собственноручно “изобрел” фильтр is_equal. Точно такой же как в сниппетах по ссылке :))) Когда это, например, удобно? Есть 2 способа написать одно и то же. Первый - стандартный, второй - с использованием нашего “хитрого” фильтра. {% ifequal node.id current_id %}...{%...
Feb 11th
2 notes
4 tags
"Красивые" цены # Nice price formatting #...
Классика жанра - отформатировать вывод цены: “1000” вывести как “1 000”. Наверное, после ещё пары-тройки лет программирования на питоне у меня получится написать это покороче :)) Пока же - вот: def nice_price(price, delimiter=','): """ Красиво отформатировать цену - через каждые 3 знака ставится разделитель, копейки не учитываются. Примеры ...
Feb 11th
4 tags
Кусок списка с центрированием # Get center slice...
Иногда нужно сделать хитрую “вырезку” из списка: определенной длинны, плюс так, чтобы выбранный элемент оказался бы в центре “вырезки”. Чтобы это работало всегда и безотказно, нужно учесть случаи, когда элемент близко к началу или к концу списка. А так же, требуемая длина вырезки может быть больше длины списка. Типичный пример использования - красивый такой paginator, у...
Feb 11th
1 note
1 tag
Hi, man!
Привет всем :) Тестирую, как работает подсветка. Прикрутил SyntaxHihglighter. def hello(): print "Hi, man!"
Feb 11th
2 tags
Feb 9th
1 note