Блог понаехавшего | шо?

CAT | linux

Nov/09

17

Source code management

Иногда нам приходится собирать приложения из исходников. Причин для этого море – старая версия в репозитории, это приложение в репозиторий не попало, или нам нужно его пропатчить. Не важно…

У сборки из исходников есть один очевидный минус – удалить приложение практически нереально. В некоторых мы можем написать make uninstall, но таких приложений не так уж много.

В linux для этого существует утилита checkinstall — она создаёт пакет из архива с исходниками, который корректно ставится и удаляется. И работает она очень просто:
(more…)

, , Hide

Nov/09

5

Ускоряем свой HTTP-сервер

Для начала расскажу, как обычно работают сервера:

  1. Создаётся сокет, который слушает порт
  2. Вызывается системный вызов accept, который берёт первого клиента из очереди соединений, а если его нет – то блокирует приложение до тех пор, пока он не появится
  3. Приложение что-то делает с этим клиентом и в конце концов с ним прощается
  4. goto пункт два

nginx и lighttpd использует вместо accept функции select/kevent/epoll, которые позволяют работать со многими клиентами одновременно, но это уже отдельная история (к асинхронным веб-серверам accept-фильтры применимяются точно так же)

Accept-фильтры – это модули ядра FreeBSD, которые не говорят, что сокет готов до тех пор, пока не выполнится какое-то условие. Я нашёл только два фильтра:

  • dataready – accept блокирует сокет до тех пор, пока в него прийдут данные. Когда мы получаем сокет, мы уже точно можем из него что-то считать
  • httpready – сокет блокируется до тех пор, пока не прийдёт полный GET/HEAD запрос. Соответственно, нам не надо тратить время на переключение контекста, если запрос ещё не собрался.

Остановимся на фильтре httpready

Буферизирует он только GET и HEAD запросы, так как в POST/PUT может прийти 600мегабайтный порнофильм.
Итак, подключаем модуль accf_http:

    kldload accf_http
    echo 'accf_http_load=”YES”' >> /boot/loader.conf

Далее нужно изменить работу с сокетом — установить опцию httpready:

        struct accept_filter_arg afa;
        bzero(&afa, sizeof(afa));
        strcpy(afa.af_name, "httpready");
        setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));

Результаты тестов

Так как существует мнение, что accept-фильтры бесполезны, мы решили провести тестирование. Веб-сервер был выбран AnyEvent::HTTPD, клиент – ab. Итак, результаты:

  1. локальная машина, 10000 запросов, concurrency = 4: httpready даёт прирост в 10%
  2. локальная сеть, 10000 запросов, concurrency=1000: httpready даёт прирост в 10%
  3. локальная сеть, 10000 запросов, concurrency = 4: прирост в 25%
  4. локальная сеть, 1000 запросов, concurrency = 1: в два раза!

В боевых условиях, при наличии GPRS, 256k и прочего позора цивилизации, скорость ещё увеличится.

Настройка веб-серверов

В apache 1.3+ и nginx accept-фильтры поддерживаются.

Apache под FreeBSD изначально содержит такую конфигурацию:

 AcceptFilter http httpready
 AcceptFilter https dataready

и менять её не стоит.
А вот в настройках сервера nginx стоит добавить опцию

    accept_filter "httpready";

Ссылки

No tags Hide

Mar/09

24

Обновление системы

По-перше – обновил себе Ubuntu до 9.04. Абсолютно юзабельна, удобна и красива. Не смотря на то, что бета. Пока ни одного бага не заметил
9.04
Поставил себе нативный Google Chrome. Это сообщение пишу из него, рискуя тем, что он вылетит к чертям. Он падает в кору, если что-то вставить из буфера обмена, или если попадёшь на автодополнения. Ни вкладки, ни настройки не работают. Но для демонстрации фич он отлично подходит. Всё работает очень-очень быстро.

Chrome

Chrome


Поставил Synapse. Почему-то в среде linux спра… ( ну нихрена себе, хром даже орфографию проверяет ) справедливо такое утверждение – чем лучше Jabber-клиент, тем более уёбищный у него интерфейс. Буду надеяться, что Synapse нарушит эту традицию. Интерфейс у него – лучший из всех клиентов, которые я когда-либо видел. Если сделают обещаную поддержку твиттера – он займёт прочное место у меня на десктопе.
Synapse

Synapse

, , Hide

Mar/09

17

Выпущена альфа Google Chrome под linux

Он написан на Gtk (придурки IMHO) и похож на свою виндовую версию.

Сегодня вечером поставлю и расскажу что и как

Пакет под Debian лежит здесь:
https://launchpad.net/~chromium-daily/+archive/ppa

, , Hide

Feb/09

13

прикольно, да?

use feature 'say';
say scalar(localtime(1234567890))


Sat Feb 14 02:31:30 2009

, Hide

Feb/09

9

.netrc

Никогда не слышал об этом файле. Когда узнал – был шок.
Оказывается, команда ftp не такая тупая как я думал.

У этого файлика есть две фичи

  1. Запоминание логина/пароля
    machine ftp.freebsd.org
        login anonymous
        password edwin@mavetju.org
    machine myownmachine
        login myusername
        password mypassword

    теперь ftp myownmachine пустит вас без пароля

  2. Макросы для команды ftp
    macdef uploadtest
        cd /pub/tests
        bin
        put filename.tar.gz
        quit
    macdef dailyupload
        cd /pub/tests
        bin
        put daily-$1.tar.gz
        quit

Этот же файл для аутентификации понимает Net::FTP

, Hide

Dec/08

5

И ещё перед тем как пойти спать

Расскажу вам про очень полезную вешь. Которую я даже сам редко использую. Прочёл я о ней в книге Стива Макконнела “Совершенный код”. Это Библия программиста. Советую прочесть всем.

Псевдокод

Когда вам нужно создать метод, не нужно торопиться и писать кучу кода. Попробуйте начать работать по такой схеме:
(more…)

Hide

Oct/08

30

Ubuntu II (8.10)

Сегодня утром она вышла.
А ещё я узнал как апиться из консоли. для этого предназначена команда do-release-upgrade

Для желающих скачать. Разработчики слёзно просят не качать с FTP. Юзайте торренты. Сервера Ubuntu хотят жить.)

Blogged with the Flock Browser

, Hide

Завтра, 28 октября, компания CodeWeavers будет бесплатно распространять продукты линейки CrossOver. В течение только одного дня на сайте codeweavers.com будет предоставлена возможность бесплатного получения кода активации к продуктам CrossOver Linux, CrossOver Mac и CrossOver Games, причем будет доступен не демо-ключ, а полнофункциональная версия с технической поддержкой, в обычных условиях стоящая от $40 до $70.

, Hide

Find it!

Theme Design by devolux.org