Цитата

“да ну его все в жопу”, – кричал карлсон, летал, кричал, ебал всем мозги.
“в жопу блядь, в жопу, вы меня заебали”, – не унимался карлсон.

карлсон понимает смысл в жизни.

2011.10.24 15:45

Эпохальное событие в Минске!

Если бы мне кто-нибудь рассказал, то я бы никогда в жизни не поверил, но! В Минске будут очередные вебстандарты, а проходить они будут в 20 минутах от моего дома. Невероятное стечение обстоятельств которое просто грех пропускать. Так не бывает и чтобы проверить прийдётся идти хоть я и не верстальщик.

2011.10.19 15:00

Нашёл прекрасное

Совершенно случайно нашёл прекрасное:

Почему лесные животные роют норки?
Я начала активно думать позавчера над этим вопросом (просто не спалось). Я понимаю,что мишке медведяю хочется зимой спать и надо куда то ложиться – потому готовит берлогу. А у лисы это на уровне инстинктов что ли заложено сделать себе дом?Ну и жила бы под кустом,её ведь никто не съест.

потому что в лесу нет асфальта:о)
А домашние животные не роют. потому что асфальт крепкий

2011.10.18 18:35

Немного про настройку впс и про скрипт автодобавления пользователей.

В прошлую субботу я написал в комментариях на хабре “хорошо, на днях опубликую свой скрипт” и это на днях пришло. ВНЕЗАПНО.

Ссылка на скрипт.

Настройка ВПСа в общих чертах

Перед настройкой я твёрдо решил что мой впс будет оплотом безопасности. Мне хотелось чтобы для каждого домена в системе был свой пользователь. Это очень аккуратно и хоть немного добавляет безопасти. Начал рассматривать варианты, их оказалось 5:

  1. Проксировать ngingx на одного демона fcgi запущенного из под рута. Это прекрасное решение, но работает только в однодоменных вариантах, мне же хотелось нечто вроде шареда, а тут получалось что через один процесс можно было достучаться до любого домена на сервере. Не подходит.
  2. Для каждого пользователя в системе запускать свой cgi процесс и постоянно держать их в памяти, проксировать nginx на них. Я засомневался в таком решении и не захотел его реализовывать (возможно у меня были какие-то объективные соображения, но я не помню). Но с другой стороны некто equand сказал мне в комментарии что это решение очень хорошо себя показывает. Поверю ему, но проверять буду на следущем впсе.
  3. В freebsd, говорят, есть магическая штука “Jail” которая решает все проблемы. Но это ж freebsd. Не подходит.
  4. Chroot’инг каждого домена. Решил не делать из-за громоздкости и дохлости впса.
  5. Избрал традиционное и отвратительное по производительности решение с nginx + apache, но под апачем я использую модуль mpm-itk для безопасности. Ведёт себя хорошо, но производительность близится к уровню тыквы: 20 одновременных запросов к динамике серверу уже достаточно :).

Про организацию пользователей и доменов

Nginx пускаю из под nginx:nginx, добавляю пользователя nginx в группу каждому пользователю который создается для домена. На все дирректории в /home/ ставлю права 750, для того чтобы nginx мог читать файлы, а большего ему не надо — он только отдаёт статику.

Для каждого домена создаётся отдельный пользователь. Для того чтобы было удобно смотреть на созданные домены я называю пользователей в обратной нотации, например hshhhhh.hahrahabr.ru превратится в ru_habrahabr_hshhhhh. Это становится крайне удобно когда на серваке заводится по несколько доменов третьего уровня. К сожалению пришёл к этому не сразу и было муторно всё переименовывать.

Apache запускает воркера из под того пользователя которому принадлежит домен, а значит он может видеть только свою домашнюю дирректорию и системные файлы. В любом случае сильно посторонних людей на моём впсе не будет.

Про скрипт

Теперь собственно то ради чего всё затевалось и поэтому сразу оговорюсь:

  1. Я прекрасно понимаю что я быдлокодер и пхпшник.
  2. Я писал скрипт для себя и не собирался его вообще никогда никому показывать.
  3. Исходя из первых двух пунктов я слабовольно решил не мучаться и написал его на пхп вместо баша. В свете последних топиков из ненормального программирования мне стыдно, но переписывать не буду.
  4. Знание английского у меня на крайне высоком уровне и поэтому ошибки в комментариях неизбежны.
  5. Я знаю что с кавычками и строками у меня там ад, но переписывать, опять же, не буду.

Скрипт делает следущее:

  1. Требует ввести имя домена, например “mysite.ru”.
  2. Выводит будущее имя пользователя, домашнюю дирректорию и имя пользователя в mysql.
  3. Предлагает создать пользователя, проверяет существует ли такой в системе. Если да — умрёт, а если нет то создаст домашнюю дирректорию, создаст в ней public_html, создаст index.html и напишет туда название домена, а потом присвоит правильного владельца и права на весь домашний каталог.
  4. Спросит создавать ли правило для nginx. Если да то возьмет шаблон, заменит в нем переменные на правильные пути и положит правило для nginx в sites-availible. Потом спросит включать ли это правило для nginx и если да, то создаст симлинк в sites-enabled и скажет nginx’у перечитать конфигурацию.
  5. Сделает тоже самое для апача, причем может создать правило для апача даже если отказаться делать правило для nginx. С одной стороны недоработка, а с другой может и пригодится (пока ни разу :)).
  6. Спросит создавать ли базу данных, обрежет имя пользователя до 16 символов, проверит существование такого в mysql и, если есть, будет пытать пока не введёшь уникальное имя. Создаст базу и пропишет доступы.
  7. Сохранит все пароли (для ssh и mysql) в файл, потом выйдет.

При этом пароли хранит в открытом виде в домашнем каталоге рута — ну если уж туда будет доступ то зачем уже скрывать пароли?

И этот скрипт не разрешает новосозданному пользователю подключаться по ssh, это надо делать руками и автоматизировать этот процесс я не вижу никакого смысла.

Контрольная ссылка на скрипт.

UPD: забыл добавить 2 полезных конфига в nginx.

UPD2 от некоего mike@danilenko.name про интересную особенность работы mpm-itk:

Я сам хостю у себя на сервере несколько сайтов смежных контор с нашей, и тоже пир переходе с FreeBSD на Ubuntu решил попоробовать mod_itk. даже не смотря на его тормознутость, мне это было не актуально ибо нагрузка на сайты совсем не большая, есть у этого модуля один большой недостаток, он в некторых иностранных ресурсах описан.
При использовании keep-alive в апаче, робот например от яндекса приходящий проиндексировать сайты, ходит по всем сайтом на одном IP за один раз. Но так как права разные, то зайдя на сайт xxx.ru проиндескировав его, он уходит на сайт yyy.ru… а апач не дас ему ибо он уже работает с правами xxx.ru :(
Это решается только отключением в апаче keep-alive… может при работе как бэкэнд это и не так страшно, но например у меня он тогда и статику отдает отдельными форками.

UPD3: А вот Kuzmich говорит что:

Проблема пофиксена с полгода назад, как и описано в документации теперь в этих случаях закрывается соединение.

Прямо как в сериале! Шок! Интриги! Расследования!

2011.10.17 00:52

Про велосипед, скорость и расстояние.

Сезон ещё не закончился, но уже накатал ~750 км. Немного если смотреть на цифры других, но прогресс уже есть. Существенно поднялась передача: теперь на более злой передаче легче сохранять каденс и пульс. Меньше переключаю передачи, не приезжаю домой на 2-4 как было раньше. Как уехал на 2-6, так на 2-6 и приехал, причем если раньше я переключался между 2-6 и 2-4 в пути, то сейчас как-то больше на 2-6 и 2-7 прыгаю. Есстественно на горках сбрасываю сильно :).

Улучшился пульс: если раньше средний пульс был 155, то теперь ~140. Это далеко от идеала, но уже лучше чем весной.

И вот странная ерунда: несмотря на очевидный прогресс (пусть и незначительный), несмотря на субъективное увеличение скорости и значительно выровнявшийся темп езды — я как ехал в начале сезона на работу 50 минут, так и сейчас еду 50 минут.

Что за херня блин такая? :)

2011.10.06 17:03

Про хороший форум.

Придумалось мне тут поставить небольшой форум для огранниченного круга лиц. Казалось бы что может быть проще чем найти простой форум в наше время социальных сетей. Ан нет! Известные лидеры типа phpbb, IP.Board или vBulletin мало того что монструидальны и пугающие, так еще иногда и платные. Мрак.

Найти же просто гостевую, но с темами и возможностью аплоада картинок тоже мне кажется непосильной задачей. Я уже начал порываться написать сам, но подумал что писать на php + mysql неинтересно, можно уже и mongoDb попробовать, а mongoDb и php это какая-то тыква, значит надо node.js. И это все нормально, но долго. Результат будет через неделю в лучшем случае, а приемлимое поделие и того позже. Но тут я наткнулся на жемчужену в лице vanilla forum. Искренне рекомендую. Ванила прекрасна.

И в этом есть даже какой знак свыше: и ядро у меня vanilla sources, и форум vanilla forum.

2011.10.06 15:55

Про гугл и случайную ошибку

На хабре появилась статья со смешным комментарием от гугла:

Представитель Google в пятницу подтвердил, что окно выбора поисковой системы в Chromium удалено, но это, по его словам, ошибка: в ближайшее время окно восстановят.

А вот так выглядит эта ошибка:

bool FirstRun::SearchEngineSelectorDisallowed() {
// For now, the only case in which the search engine dialog should never be
// shown is if the locale is Russia.
std::string locale = g_browser_process->GetApplicationLocale();
return (locale == "ru");
}

И вот мне интересно: это такой троллинг или гугл стал уже настолько монструидальным что голова не знает чем занимаются руки? Ну в смысле то что комментарий в коде такой так это не вина разработчика, этого избежать в принципе нельзя, а вот то что приватные таски на самом деле публичные — это уже серъезный косяк. На мой взгляд, конечно.

2011.10.03 01:02

Про деньги наши и не наши.

Совсем недавно в Беларуси случился небольшой финансовый кризис. После этого из обращения пропала валюта и при гос. курсе в 5000 рублей за 1 доллар, можно было умудриться его продать за 8000, а в страшнейшие времена и за 9000. Всё это сопровождалось дичайшими воплями о том что население не может жить, что валюты нет, что невозможно, невыносимо и хватит.

А совсем как пару дней назад начала принимать валюту в банках по 8500 за доллар, потом за 8300, 8000, 7700. И в банках дикие очереди, а в кассах заканчиваются белорусские деньги (!!!!). Нихрена себе валюты у населения нет.

Белорусы живут по простому принципу: несмотря на то что всё есть надо орать что всё плохо, ничего нет и все им обязаны. Мне никогда не понять.

2011.09.20 15:16

Про велосипеды.

Катался на выходных на велосипеде, но с большоим рюкзаком. Это интересно. Думал будет плохо и невозможно, оказалось просто тяжело. Но забавно. Съезжать с горок одно удовольствие — аж до 48км смог разогнаться.

Но не смотря на то что кататься возможно — не помешает организовать себе велобагажник.

2011.09.12 15:37

Про php профиллер в виде xhprof

Очередной пост полный полезной и актуальной инфомации. Но с другой стороны я это делаю для себя, чтобы потом находить быстрее информацию, а не лазить по 100500 раз в доку.

Есть такая штука как профилирование и занимается ей профайлер. Для пхп есть правильный профайлер именуемый xhprof который написали программисты из фейсбука. Пользоваться рекомендую им.

Для этого xhprof надо установить, делается так:

  • gentoo: emerge xhrpof
  • неправильные дистрибутивы: : pecl install channel://pecl.php.net/xhprof-0.9.2

После этого надо добавить в пхп расширение:

cat /etc/php/apache2-php5.3/ext/xhprof.ini

extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

Потом надо сделать:

mkdir /var/tmp/xhprof
chmod -R 777 /var/tmp/xhprof

Теперь мы идем скачивать себе xhprof, а как скачаем из архива достаем две дирректории: “xhprof_html” и “xhprof_bin” и копируем их в наш /var/www/project.local

А потом в наш клевый index.php добавить надо вот это:

// start profiling
xhprof_enable();

/* ... */
sleep(10);
/* ... */

// stop profiler
$xhprof_data = xhprof_disable();

$XHPROF_ROOT = realpath(dirname(__FILE__));
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

// save raw data for this profiler run using default
// implementation of iXHProfRuns.
$xhprof_runs = new XHProfRuns_Default();

// save the run under a namespace "xhprof_foo"
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

echo "<hr><a href='http://project.local/xhprof_html/index.php?run={$run_id}&source=xhprof_foo'>{$run_id}</a>";

2011.08.29 19:03

Про мелкое зерно в мониторе

Уже второй день как сделал Lenovo think pad t61p своим основным компьютером. Самый спорный момент в нем это монитор: при диагонали в 15.4″ разрешение у него 1920×1200. Если сидеть сильно вжавшись в монитор то все прекрасно, а если сидеть как надо — ничего не видно.

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

Надо наблюдать дальше. Если будет совсем никак то прийдется пролдавать игрушку :(.

2011.08.25 19:26

Новый Gimp с однооконным режимом

Хабр сообщает что наконец-то мега фича с однооконным интерфейсом в гимпе считается законченным.

2011.08.23 11:39

Про техзадание

Размещая картинку в маленьком диве для превью нельзя делать 2 вещи:

  • Менять соотношение сторон
  • Менять разрешение картинки

Такие дела :).

2011.08.22 19:44

Скандальная правда о компании Apple!!!

Так жечь нельзя, категорически нельзя. Смеялся в голос.

2011.08.22 18:51