воскресенье, 5 февраля 2012 г.

Интернационализация URL в Django

Интернационализация URL, или, проще говоря, возможность в зависимости от языка подсовывать разные URL, появится в Django 1.4. Эта возможность вряд ли как-то повлияет на пользовательский опыт работы с сайтом, но и создавалась она не для людей. Её цель — поисковая оптимизация. Посмотрим, как мы можем получить такую функциональность в Django 1.3.

Проблема

Сейчас в Django есть LocaleMiddleware, которая определяет текущий язык на основании данных пользовательской сессии, cookies и HTTP заголовков (именно в таком порядке). Используя LocaleMiddleware ничего не стоит выдавать по одному и тому же адресу контент на разных языках в зависимости от языка пользователя. Это удобно для пользователя, но это также может стать причиной неполной индексации сайта. Действительно, ведь поисковый робот проиндексирует ваш сайт только на одном языке.

воскресенье, 29 января 2012 г.

Как поменять кодировку файла в Emacs

Чтобы открыть файл в нужной кодировке, нужно перед открытием файла выполнить:

C-x <RET> с <имя-кодировки> <RET>

Эта комбинация устанавливает кодировку, которая будет использоваться следующей командой. Пример открытия файла в кодировке cp1251:

C-x <RET> с cp1251 <RET> C-x C-f smth.txt <RET>

Если вы уже открыли файл в неправильной кодировке, то эту же команду можно применить для переоткрытия уже открытого файла в другой кодировке. При переоткрытии все не сохранённые изменения потеряются:

C-x <RET> с cp1251 <RET> M-x revert-buffer <RET> yes <RET>

Очевидно, что такая ситуация встречается очень часто, поэтому предусмотрен более короткий способ:

C-x <RET> r cp1251 <RET> yes <RET>

Для преобразования открытого файла в другую кодировку предназначена комбинация

C-x <RET> с cp1251 <RET>

Эта комбинация задаёт кодировку, в которой следует сохранять файл.

четверг, 26 января 2012 г.

Переполнение буфера: теория и практика

Переполнение буфера (Buffer Overflow) — явление, возникающее, когда компьютерная программа записывает данные за пределами выделенного в памяти буфера.

Во многих источниках переполнение буфера называют самой распространенной уязвимостью программного обеспечения. Переполнение буфера присуще не только обычному ПО для PC, но также и программному обеспечению ряда аппаратных средств. Примером может служить уязвимость принтера HP LaserJet 4500, обнаруженная в 1999-ом году. Ниже будет немного теории и пример уязвимости переполнения буфера в программе.

суббота, 21 января 2012 г.

CSS для Blogger под 14pt

Выкладываю свой CSS для Blogger под размер шрифта 14pt.

суббота, 14 января 2012 г.

Mercurial Queues

В этой статье пойдёт речь про одно из дополнений к Mercurial~--- Queues (далее просто MQ). Это дополнение распространяется вместе с Mercurial, поэтому для начала использования достаточно включить его, добавив следующие строки в .hg/hgrc:

[extensions]
hgext.mq =

понедельник, 5 декабря 2011 г.

Первая статья на хабре

Опубликовал свою первую статью на хабре. В статье проводится разбор исходного кода утилиты yes из набора GNU Coreutils. Моей целью было посмотреть, как программируют бородатые дядьки на C, чему-то научиться у них. Статью приняли хорошо, намного лучше, чем я ожидал. Многие добавили статью в избранное, что особенно приятно.

четверг, 24 ноября 2011 г.

ANTLR и java.lang.OutOfMemoryError

Если при разработке парсера с помощью ANTLR у вас появилась ошибка java.lang.OutOfMemoryError, то проверьте, нет ли у вас "пустых" правил. То есть таких правил, которые порождают пустые строки. Например, можно сделать ошибку в часто встречаемом правиле для пробелов и табуляций:

WS: (' ' | '\t')*        { $channel = HIDDEN; };