neoascetic's blog

neoascetic about linux, programming and stuff

Редирект на внутренний location в nginx, или 418 Я - чайник

| Comments

Намедни удосужилось мне использовать этот шуточный HTTP код. Кто бы мог подумать, что ему найдется реальное применение (пусть и не для приготовления кофе).

Оказывается, не существует иного способа из обычного локэйшна в понятиях nginx передать управление именованному, кроме как приведенный ниже хак. Раньше вроде можно было сделать try_files @location, но у меня nginx ругается на недостаточное количество аргументов директивы try_files.

Итак, хак:

1
2
3
4
5
6
7
location @root {
    ...
}

location / {
    error_page 418 = @root; return 418; # redirect to @root
}

Да, вот так вот - присваиваем определенному коду ошибки обработчик в виде именованного локэйшна, а затем генерируем ошибку с данным кодом. На форуме советуют использовать именно этот код, т. к. он, вероятно, не пересечется ни с каким кодом, который может выкинуть приложение, а во-вторых, “наиболее подходит по смыслу”. Лол, что тут еще сказать? :D

Расширение модели Page в Django-CMS

| Comments

Уже несколько раз при разработке проектов на базе Django-CMS у меня возникала задача привязать к той или иной странице дополнительную информацию. Чаще это были этакие “аватарки” страницы, но однажды - и более объемная информация. Как всегда, в первую очередь пошел искать, а не решил ли кто эту задачу до меня?

PDO, FETCH_CLASS и нативные типы PHP

| Comments

Немало времени потратил, пытаясь понять, почему же при выборке из MySQL и создании класса через PDO + FETCH_CLASS все его атрибуты - строки, а не нативные типы данных PHP. Это не позволяло делать строгие сравнения, например. Причем у коллеги на Винде все работало.

Выяснилось, что дело - в драйвере. По умолчанию в debian ставился устаревший, не умеющий конвертацию. Замена его на mysqlnd решила проблему. В репозиториях доступен под именем php5-mysqlnd.

Introduction to Mathematical Thinking @ coursera.org

| Comments

Первый мой завершенный курс из многих интересных, представленных на Coursera. В целом - понравился, хотя по времени я едва вывозил. Экзамен так и вообще завалил, думал, что буду довольствоваться обычным сертификатом о завершении, но - приятная неожиданность! - в результате получил “with distinction”, с отличием, то бишь, ибо, как написал профессор, много кто экзамен завалил.

Отображение недавних действий пользователя в админке

| Comments

Да, мы можем видеть свои недавние действия прям на главной. Но порой есть необходимость видеть лог и любого другого (например, для своевременной поддержки заблудившегося в админке (sic!) пользователя).

Оптимизация изображений, сгенерированных easy-thumbnails (PIL)

| Comments

Я пользуюсь easy-thumbnails в django-проектах для генерации превьюшек. Предпочтение ему перед sorl.thumbnail отдано по большей части из-за того, что его юзает замечательный django-filer. И вот однажды, натравив на очередной сайт Google PageSpeed Insights получил от него рапорт, что вот-де, изображения жутко неоптимизированы, можно ужать больше чем в половину.

Юникод в URLах Django

| Comments

Патчим django (и django-cms) для поддержки символов юникода в URL. Сама Джанго поддерживает юникод, но не абсолютно везде. К примеру, валидатор SLugField ругается, фильтр slugify не-ascii символы тупо вырезает. Поискав, я нашел пару патчей и много дискуссий…

Конфликт плагина ssh-agent для zsh и агента, запускаемого X11

| Comments

Сегодня столкнулся с проблемой… вернее, столкнулся давно - решил сегодня, когда встала необходимость добавить еще один ssh ключ, а плагин ssh-agent для zsh его не подхватил.

После поисков оказалось, что проблема в X11, а именно - в запускаемых с сессией стандартных скриптах, находящихся в /etc/X11/Xsession.d/. Один из них, а именно 90x11-common_ssh-agent запускал при старте Иксов ssh-агента, который экспортировал переменную окружения $SSH_AUTH_SOCK. Но плагин для zsh, в то же время, проверял наличие этой переменной, пытаясь определить, запущен ли уже агент (при чем проверял, только если форвардинг включен, а добавлял ключи только если агент не запущен). Такой вот конфликт.

Конечно, можно было бы переписать плагин, чтобы он ключи добавлял в любом случае, но запускаемый Иксами агент не хотел никак работать с виртуальной консолью. Вероятно, проблемы с правами, не знаю. Поэтому мне показалось проще отключить автостарт агента через Иксы, закомментировав use-ssh-agent в /etc/X11/Xsession.options.

Теперь первый запущенный экземпляр zsh включает ssh-agent, добавляет нужные ключи, а остальные это дело подхватывают, как и должно быть.

ConsoleKit. Детектив

| Comments

Детективная история о том, откуда у ConsoleKit ноги растут, почему он плодит так много процессов и как заставить его работать после переустановки.

Работает - не трогай. Но я тронул. Потому что однажды открыл htop и увидел 100500 процессов console-kit-daemon, и это меня напугало/удивило/расстроило. Что это за зверь такой, что плодится как вышедшие из-под контроля наноботы? Хорошо хоть (вроде как) ресурсы в серую слизь не превращает.