пятница, 14 августа 2009 г.

Изгнал ещё одного демона из Debian/Ubuntu

Дефолтовой кодировкой локали на системах Debian и Ubuntu является UTF-8. И это очень здорово и удобно. Жалко, что FreeBSD всё ещё не может похвататься такими достижениями, но они уже заявили, что сделают поддержку UTF-8 в следующей версии.

Так вот обнаружил, что Debian и Ubuntu параметры локали передают на другую машину по ssh и это тоже очень здорово! Заходишь на удалённую машину, а она с тобой общается на удобном тебе языке. Но это ровно до тех пор пока удалённая машина тоже поддерживает UTF-8 в локали.

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

Знакомый подсказал, что во всём виновата строка SendEnv LANG LC_* в файле /etc/ssh/ssh_config . Если внимательно заглянуть в man ssh_config, то там об этом есть пара строк.

Note that the Debian openssh-client package sets several options as standard in /etc/ssh/ssh_config which are not the default in ssh(1):

· SendEnv LANG LC_*
· HashKnownHosts yes
· GSSAPIAuthentication yes

Надо просто убрать строку из конфига и жить счастливо. А вот, если нет возможности её убрать (например, нет рутового доступа)? К сожалению конфигурированием ~/.ssh/config отделаться не удалось 8(.

Выводы: разработчики Debian ошиблись не в том, что включили прокидывание локали, а в том, что не предусмотрели способа отключить прокидывание на пользовательском уровне.

понедельник, 3 августа 2009 г.

Ещё один пример того, как делать не надо

mysql_query("LOCK TABLES stories WRITE");
mysql_query("insert into stories set informer= '$news_im_infl', catid='$topic'...");
$query = mysql_query("select id from stories order by id desc limit 1");
mysql_query("UNLOCK TABLES");
$maxid = mysql_fetch_array($query);
mysql_query("insert into stories_stats set pid='".$maxid['id']."'");