Знаете ли вы, что VIM из коробки умеет шифровать файлы?

Не верите? Напишите :X в VIM, введите пароль. Когда вы сохраните файл, он будет выглядеть как непонятный набор символов.

А когда вы откроете этот файл с помощью VIM, он спросит пароль.

Вообще, и ослу ясно, что использовать лучше sudo, а su – забросить в черный ящик.

Вкратце преимущество sudo:

  1. Нет пароля на рута. У каждого администратора пароль свой. Удалили администратора – у него исчез доступ. В случае с su нужно менять рутовый пароль.
  2. Благодаря su вы не сидите под рутом, а значит уменьшается вероятность увести у вас пароль или накосячить. sudo применяется только для критичных операций. В остальных случаях мы работаем под своим пользователем
  3. С помощью sudo можно давать доступ к отдельным командам, не давая доступ ко всему. Не давать же рута человеку, который должен уметь перезапустить apache?
  4. sudo можно настроить на беспарольную работу. В таком случае все равно будет сложно накосячить – ведь под рутом работать будут те команды, которые нужны

поэтому настраиваем sudo командами visudo и man sudoers и пользуемся им.

Ещё полезная шняга

sudo -s

запускает ваш шелл под рутом.

А ещё, когда я вижу строку ssh root@host.com, меня выворачивает наизнанку. Не показывайте мне это, пожалуйста)

Решил разобраться получше с vim и ctags. Для справки: ctags – это команда, которая сканирует ваш проект и собирает информацию о классах, методах, функциях и переменных, после чего вы можете перейти на нужную вам функцию.

В vim это делается так. В корне проекта пишем:

ctags -R
vim -t MyClassName

и попадаем на определение класса. Удобно?

Сейчас если мы поставим указатель на вызов функции или создание экземпляра класса и нажмем Ctrl+] (для виндузятников это Ctrl+мышка), то перейдем на определение класса.

А комбинация Ctrl+T вернет нас назад.

Авторы ctags с детства не любят питон, поэтому в ~/.ctags питонюки пишут:

--python-kinds=-i

Зачем? Так надо.

Я больше трех месяцев в пассивном режиме пытался настроить правильное разрешение на моём RoverBook Neo U800. Правильное — это 800×480.

Сейчас нехуевенько так погуглил и нашёл решение:

Section "Monitor"
	Identifier "Monitor0"
	VendorName "Monitor Vendor"
	ModelName "Generic monitor"
	HorizSync 25 - 50
	VertRefresh 50.0 - 75.0
	Modeline "800x480"   33.45 800 840 968 1056 480 490 492 525 -hsync -vsync
	Option "dpms"
EndSection

Section "Device"
	Identifier "Videocard0"
	VendorName "Videocard vendor"
	BoardName "AMD Geode LX Video"
	Driver "geode"
	BusID "PCI:0:1:1"
        # Specify Panel size for Geode LX, corresponds with ModeLine above:
	Option "PanelMode" "33450 800 840 968 1056 480 490 492 525"
EndSection

Section "Screen"
	Identifier "screen1"
	Device "Videocard0"
	Monitor "Monitor0"
	DefaultDepth 16
	Subsection "Display"
    		Depth 16
	    	Modes	"800x480"
    		Viewport 0 0
	EndSubsection
EndSection

Я ниибацца щаслив

Пару шорткатов:

  1. Открыть файл в другой кодировке:
    vim file.txt +e++enc=koi8-r
  2. Открыть файл и перейти на конкретную строку:
    vim file.txt +1245
  3. Найти открыть файл с конкретной функцией и открыть его:
    ctags -R . #в корне проекта
    vim -t get_something
Mar 152010

Купил я, товарищи, себе ноутбук. С ноутбуком поставлялась прикольная утилитка для установки операционной системы — Windows XP.
Скачал Ubuntu, увидел интересную виндовую программу wubi.exe. Оказалось, это установщик Linux из-под винды. Андрей обрадовался, установил себе Linux, загрузился, все как бы работает.

Но что-то не давал мне покоя процесс ntfs-3g. Дебилы, видимо, писали эту FS, подумал Андрей. И решил отформатировать нахуй этот NTFS.

Каково же было его удивление, когда он увидел на NTFS-ном разделе два файлика – swap и root, в которых лежала вся линуксовая файловая система.

И мне стало очень интересно, что курили создатели Wubi и как они теперь с этим живут?

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

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

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

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

  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";

Ссылки

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

Chrome

Chrome


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

Synapse

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

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

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

© 2012 Андрей Костенко Suffusion theme by Sayontan Sinha