slav0nic's blog

Заметки о python, linux и других занимательных вещах

Мои пять копеек про Google App Engine

Где-то с месяц назад приспичило попробовать портировать простенький сайт URIs (даа, с фантазией у меня туго :] ) на GAE, дабы поближе познакомится с данной платформой.

Итак, что мы имеем (на все вызовы распространяются лимиты при превышении которых включают счётчик :] ):

  • 1GB datastore под данные
  • Mail API
  • Image Manipulation API
  • Кеш на базе memcached
  • URLFetch
  • Сервис авторизации через Google

more...

Пару хаков для запуска hgweb и Trac на lighttpd

Есть в lighttpd одна проблемка с переменной PATH_INFO. От параметра "broken-scriptfilename" почему-то толку 0 :.

Вот пару скриптов для запуска Trac и HGweb через fcgi:

  • для запуска Trac в корневом каталоге сайта (нашёл в сети, хотя там была одна ошибка):

more...

Бесполезность async серверов в Веб

В предыдущем посте поигрался с асинхронным способом запуска Django через cogen. Как оказал - совершил ошибку :) /me не спец в async-программировании Ниже выскажу своё мнение.

more...

Альтернативные WSGI сервера для Django

Столкнулся с проблемой, после обновления джанги перестал корректно работать сервер scgi-flup + lighttpd. Причина банально проста, при POST-запросе на / получаем /, то есть вылазит SCRIPT_NAME :|. По совету на pythonua@c.j.r вылечил установкой параметра FORCE_SCRIPT_NAME = ''. Но flatpages отвалились, тк они по прежнему искали /about %) Желание откатываться на django 0.97 оставил, поэтому стал искать альтернативный метод решения проблемы. Как показали тесты, python-scgi (набор библиотек от автора протокола) оказался быстрее чем flup (процентов на 30-40%, проверял на хеллоуворлде) к тому же последний неплохо течёт при большой нагрузке, но прикрутить его к django нет возможности (ибо не WSGI, а всякие гейты scgi-WSGI типа SWAP и тп являются мёртвыми проектами и неактуальными, да и врядли положительно скажутся на скорости).

WSGI решения

more...

Первый "блин" на Django

Давно ничего не писал в блог, т.к. сдавал диплом и писал футбольный портал (пока не презентабельно) Вот захотелось поделиться впечатлениями и имхами по ряду вещей и django в целом. Впечатления остались ... хорошими %) Последний раз смотрел на джангу года 3 назад, разница конечно большая.

Итак пару слов о проекте. Портал представляет из себя систему с блоками новостей и разделами, тегами, простыми блогами, форумом, регистрацией юзеров, турнирными таблицами, баннерной системой. Писать такое на web.py ммм, конечно можно, но пришлось бы изобретать ряд велосипедов.

Не думал что всё вышеперечисленное будет так просто реализовать%) Из основных модулей использовал:

  • django-registration
  • django-tagging
  • django-robots
  • django-forum
  • UrlMiddleware + ThreadLocals

more...

Exception #07 video

Нашёл в блоге у Муркта ссылки на долгожданное видео с Exception #7.

Выложено 5 докладов:

Все части доступны на YouTube

more...

SIQ (icq server for win32) exploit

Года 3 назад страдал фигнёй, пытаясь написать модуль для работы с ICQ, осилил только авторизацию и потерял интерес =)

Так вот, тестил я своё поделие на SIQ (http://www.kht.ru/homepage/apt/siq.htm) - простенький icq сервер от "профессионала, с большим опытом автоматизации бизнес-задач"(кстати opensource), но вот проверять длину uin'a видать не кошерно, а вот и зря..., как раз в то время страдал написанием сплойтов и тп ерундой, ниже код с PoC с биндшеллов для win2ksp4ru ( ну как минимум DoS сплойт отправляющий сервер авторизации SIQAuth в даун В) )

Код никакой ценности не несёт, а вотм мне он дорог как память =), может кому будет интересно (хотя как модуль для перебора паролей к icq либо как убийца корпоративной аси и сгодитя):

more...

Подсветка кода в markdown при помощи pygments

Решил прикрутить подсветку к markdown, благо он поддерживает плагины, но писать самоу не пришлось, ибо он уже написан и имя ему CodeHilite. Поддерживает 3 способа подсветки кода:

  • GNU Enscript
  • dp.SyntaxHighlighter
  • Pygments

Для добавления к работе с mardown достаточно скачать mdx_codehilite.py и кинуть его с sys.path. Для работы с pygments необходимо сгенерировать css-файл подсветки кода ну и подключить его к странице в которой будет выводиться код:

pygmentize -f html -S colorful -a .codehilite > pygments.css

Далее всё просто:

>>> import markdown
>>> txt = """
...     :::python
...     #comment
...     print "hello"
... """
>>> markdown.markdown(txt, ['codehilite(hiliter=pygments)'])
u'<div class="codehilite"><pre><span class="c">#comment</span>\n<span class="k">print</span> 
<span class="s">&quot;hello&quot;</span>\n</pre></div>'

Для смены способа подсветки кода необходимо лишь сменить hiliter, за вывод номеров строк отвечает параметр force_linenos (значения on/off).

Удобная штука;]

fcgi vs scgi vs cherrypy (web.py dev server)

Приспичило посмотреть что есть scgi и чем он лучше. Тестил на lighttpd 1.49, возможно по этому результаты немного отличается от предыдущих тестов

Тестил при помощи ab на локалхосте. На простом приложении на web.py 0.23 для scgi:

slav0nic@sl:~$ cat /var/www/test/code.fcgi

#!/usr/bin/python2.5
import web, sys

urls = (
        '/', 'index'
    )
class index:
        def GET(self):  
            web.header("Content-Type","text/html; charset=utf-8")
            print web.ctx   

web.wsgi.runwsgi = lambda func, addr=("127.0.0.1", 4000): web.wsgi.runscgi(func, addr)
if __name__ == '__main__':  
    sys.stderr = open("/dev/null", "a") #не выводим в консоль инфу о коннектах
    web.run(urls, globals())

конфиг для mod_scgi:

scgi.server = ( "/code.fcgi" => ((   
    "host" => "127.0.0.1",
    "port" => 4000,
    "max-procs" => 1,
    "bin-environment" => ("REAL_SCRIPT_NAME" => ""),
    "check-local" => "disable")

))

для mod_fcgi:

fastcgi.server =  ".fcgi" => 
    (("bin-path"=>"/var/www/test/code.fcgi",
     "socket" => "/tmp/python.socket",
       "bin-environment" => (
            "REAL_SCRIPT_NAME" => "",
            "check-local" => "disable"),
       "max-procs" => 1,
    ))

SCGI-приложение запускалось как простой файл ./code.fcgi c lighttpd общалось через tcp socket (через unix-socket оно похоже и не умеет, увы с доками к mod_scgi полная ж@#$). stderr редиректил в /dev/null, без этого на ~30-50 запросов в секунду меньше (при запусуке в gnome-terminal) Длина документа примерно 2Кб.

Максимальное число запросов в секунду выделено жирным, 2й - курсив, выдача статики приведена просто для сравнения и интеерса не представляет =)

Итакс результаты:

more...

markitUp

На днях возжелал прикрутить к админке какой-нибудь редактор, поддерживающих markdown, при этом являющимся чем-то средним между textarea и WYSIWYG Наткнулся на wmd-editor, но что-то он показался уж сильно простым=). С посыла piranha глянул markitUp. На нём и остановился:). Из особенной отмечу:

  • используей jQuery
  • поддерживает:
    • html
    • bbcode
    • textile
    • wiki
    • dotclear
    • markdown
  • легко расширяем + поддерживает плагины
  • нелохо выглядит=) :

markit

more...

web.py