← All posts tagged Python

Очередной фейл в твистеде: искал, почему же у j2j всё ещё течёт память. Оказалось, проблема в Twisted: его функция internJID (http://twistedmatrix.com/documents/current/api/twisted.words.protocols.jabber.jid.html#internJID) не имеет нормального описания, но нужна, судя по всему, для кеширования JIDов, чтобы не делать им каждый раз stringprep, экономя таким образом процессорное время. (Иного объяснения я не нашёл.) Так вот, эта функция никогда не очищает кеш. А так как JIDов через j2j проходит достаточно много, через три дня работы их собирается порядка 40К, на ещё более нагруженных сервисах ситуация будет ещё плачевнее (особенно, если сервис будет без регистрации, а пользоваться им будут люди с огромного к-ва разных серверов.) Поэтому, для теста, сваял патчик, который очищает JIDы, не использовавшиеся в течение 10 минут. Теперь, вроде бы, ситуация стабилизировалась. По-хорошему, там бы использовать memcached и не выпендриваться. Если у кого-то есть такая же проблема и желание протестировать, это ли её причина, обратитесь ко мне за патчем.

Тикет писать буду, но, если честно, даже не знаю, как бы описать проблему так, чтобы на неё обратили внимание, т.к. они вообще ни на что не обращают внимания.

Тихо и незаметно вышел новый Twisted. Где посмотреть Changelog я не нашёл, кто-нибудь знает?
Надо затестить, реально ли хоть на этом запускать эти ваши жабьи транспорты...

хоть и устаревшая, но вполне годная либа (работает без заморочек) для отправки SMS по протоколу SMPP. Если кто-то решит реализовывать велосипеды, работающие по HTTP, которые пихают сервисы рассылок SMS, лучше юзайте вот это, не будете привязаны к одному вендору и не надо лишнего геморроя.

Цитата из учебника по pylons:
request.params
This is a dictionary-like object with a combination of everything in request.GET and request.POST. You will generally use request.params rather than request.GET or request.POST, although they all share the same API. I’ll cover request.params more closely in a minute because it is the main object you will use to deal with form submissions.
pylonsbook.com

я, видимо, что-то не так понимаю. зачем при обработке форм юзать сразу и GET, и POST? Привет грабли, на которые не так давно наступал жуйк?

сегодня произошел интересный случай: тег ifnotequal в шаблоне django валился с исключением, мол тегу нужно 2 параматра, при этом внешне он выглядел вполне нормально. после долгих разбирательств выяснилось, что вместо пробела, разделяющего параметры, был символ \xa0, который является символом nbsp в cp1251. Внимание вопрос: как туда попал этот символ?)