HTML и BeautifulSoup
venezia
[info]kolloid
BS ломается на сайтах с неправильной вложенностью тегов. Точнее, он применяет какую-то эвристику, которая сильно отличается от эвристики браузеров, и теряет часть контента. Все бы ничего, да таких говносайтов как минимум 50%. Блин, ну HTML — это же не rocket science, че так сложно понять, что за </tr> должен следовать <tr>, а не сразу <td>.

Жаль, что XHTML не прижился. Теперь эти «уеб-мастера» никогда не научатся писать правильный HTML.

Снова возвращаюсь к BeautifulSoup.MARKUP_MASSAGE.

Dear LazyWeb
venezia
[info]kolloid

Не могу сообразить, как передать список id в условие типа IN через метод extra:

frobnicators = Frobnicator.objects.extra(
    where=['foobar.foo_id IN (%s)',
           'foobar.bar_id=%s'],
    params=[[foo.id for foo in foos], bar_id],
    tables=['foobar']
)

Если задать в таком виде, то Django генерирует неверный запрос вида foobar.foo_id IN (ARRAY[1, 3, ...]). Пробовал передавать готовые строки — тоже не работает. Google не помогает, так как ключевые слова слишком простые. Видимо надо настраивать circe и идти на #django.

UPDATE: Некто Honza с #django посоветовал использовать кортеж вместо списка и это сработало. Заодно попробовал circe (раньше испольовал erc), особых отличий пока не заметил.

Метки: ,

Яндекс.Афиша
venezia
[info]kolloid
Оказыается новая Яндекс.Афиша, которой я пользуюсь регулярно, сделана на Django.
Метки: ,

Два вопроса про Django
venezia
[info]kolloid

Как настроить отдачу статики на shared хостинге с mod_python? Сейчас в ~/public_html лежит .htaccess вида:

SetHandler mod_python
PythonHandler django.core.handlers.modpython
PythonPath "['/home/ccc/public_html', '/home/ccc/public_html/python', '/home/ccc/public_html/mysite'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
SetEnv LANG ru_RU.UTF-8
PythonDebug On

Никогда не устанавливал джангосайты на shared хостинг, но выбор не мой в данном случае, к тому же, хостинг оплачен на много месяцев вперед. Может быть перенести .htaccess в подкаталог mysite и использовать mod_rewrite?..

Кто-нибудь использует database migrations с Django? Существует уже что-нибудь работоспособное?

Метки: ,

(без темы)
venezia
[info]kolloid
Все-таки наверное придется оставить Emacs только для org-mode, а программировать начать в какой-нибудь IDE. Испортила меня Idea, которой я был поначалу вынужден пользоваться, а потом привык. Основные причины:
  • Emacs не понимает проекты (точнее понимает для некоторых языков, и то сикось-накось). Для Python, Javascript и многих других языков отсутствует возможность, например, перейти к определению функции из точки ее вызова. При работе с большой базой незнакомого кода (свой тоже становится незнакомым через несколько месяцев) сложно обойтись без этой возможности. grep и ack спасают, но это паллиатив.
  • Отвратительная поддержка смешанных режимов (типа HTML вперемешку с Javascript, или HTML с тегами какого-нибудь шаблонизатора).
  • Иногда Emacs зависает. Например, на некоторых шаблонах Django и на некоторых исходниках написанных на Python (в основном, из кода TurboGears — мне он тоже не нравится, но все же).

Конечно, есть и масса достоинств, которые пока перевешивали недостатки.

Думаю на что перейти. Eclipse монструозный, некрасивый и нергономичный. WingIDE, Komodo и Idea стоят дорого (с учетом того, что мне пожалуй 20 дней на evaluation мало, и уже не раз предпринятые попытки перейти на другую IDE заканчивались возвратом к Emacs), ломать не хочется.

Существует кстати попытка написать современный Emacs на Python — peppy, но ей до Emacs как до луны пешком.

Метки: , ,

strftime в django
venezia
[info]kolloid
В командной строке интерпретатора:
 >>> import datetime
 >>> datetime.date.today().strftime('%B')
'April'
 >>> import locale
 >>> locale.setlocale(locale.LC_ALL, '')
'ru_RU.UTF-8'
 >>> datetime.date.today().strftime('%B')
'\xd0\x90\xd0\xbf\xd1\x80\xd0\xb5\xd0\xbb\xd1\x8c'

В django view datetime.date.today().strftime('%B') возвращает April, хотя, например, calendar.LocaleHTMLCalendar генерирует календарь с русскими названиями, то есть настройки и локаль правильные.

Не могу понять в чем дело. Если с утра не разберусь, придется спамить django-группы.

Update: Разобрался, иногда достаточно только выспаться. :)

Метки: , ,

Exception, Semantic
venezia
[info]kolloid
Кто-нибудь скажет, что случилось с конференцией Exception? Сайт exception.org.ua пуст. Я так и не доехал ни разу, потому что на самолете слишком дорого, а на поезде — слишком долго. Может быть в этом году смог бы вырваться, но похоже, что традиции пришел каюк.

Теперь о главном. Наконец дошли руки поставить распоследнюю версию semantic, по совету [info]alexott. Пощупал поддержку Javascript и Python — это два языка, на которых я сейчас пишу. Поддержка Javascript в semantic вообще никакая, поддержка python — так себе. Короче, до IntelliJ Idea, для которой Javascript ни разу не основной язык, как пешком до луны, к сожалению. А я не настолько хорошо знаю Emacs Lisp, чтобы допилить поддержку в semantic до ума. Поддержка python немного лучше, кажется. Но несильно. Короче, снес semantic — видимо он актуален в основном для программистов на C, C++, Java.

История поддержки Javascript различными средствами в Emacs вообще печальна. До титанического труда «сельского механизатора» Steve Yegge, редактировать Javascript в Emacs было практически невозможно. За js2-mode ему надо поставить памятник. Это наверное лучший emacs mode для языков программирования. Или, хотя бы, один из лучших. Если бы Стив еще реализовал что-нибудь, чтобы можно было работать с проектами на Javascript (например, скакать от вызова функции к ее определению)...

Возможно я что-то не понимаю в том, как надо настраивать/использовать semantic. Есть кто-то, кто использует его при работе с проектами на Javascript или Python?

FirePython
venezia
[info]kolloid
FirePython — поддержка Python в Firebug.

Python autocomplete in Emacs
venezia
[info]kolloid
AutoComplete.el: Python Code Completion in Emacs
Метки: , ,

Блог Медведева
venezia
[info]kolloid
Один из самых посещаемых блогов сделан на Django.
via [info]ravli
Метки: ,

Увидел, исправляя ошибку в чужом коде
venezia
[info]kolloid
    def setCommonTplVars(self, cat, d):
        global sections, css_classes, subnav_links # XXX: Probably not the most elegant solution

Хорошо, что хоть сам это понимает. BTW, весь остальной код в данном файле настолько же «элегантный».

До этого года мне казалось, что на Python нельзя написать нечитаемый код. Но на волне роста популярности Django на Python перешла критическая масса пэхапэшников, по-видимому. :(


Home