Monday, December 28, 2009

Python: функция super()

Функция super(), как правило, используется для вызова метода, который был бы вызван, если бы не был найден данный метод:
class A(object):
def __init__(self): print "A init"

class B(A):
def __init__(self):
print "B init"
super(B, self).__init__()

>>> x = B()
B init
A init

Функция возвращает прокси-объект, который делегирует вызовы методов нужным классам.
Порядок поиска методов такой же, как и в getattr(), но поиск не учитывает сам класс.

Sunday, December 27, 2009

Port forwarding

"Connecting to the external address of the firewall from a host on the LAN, does not mean the packets will actually pass through its external interface. The TCP/IP stack on the firewall compares the destination address of incoming packets with its own addresses and aliases and detects connections to itself as soon as they have passed the internal interface. Such packets do not physically pass through the external interface, and the stack does not simulate such a passage in any way."

Поэтому тестирование порт-форвардинга из локальной сети может не сработать. Есть и способы пофиксить.

Sunday, December 20, 2009

Настройка беспроводной сети в FreeBSD

После прочтения соответствующего раздела в хэндбуке, у меня осталось несколько вопросов. В частности, почему ifconfig_wlan0="WPA DHCP" может использоваться как для WPA, так и для WEP аутентификации.

На самом деле "WPA" (и "DHCP" тоже) это псевдо параметр, который не передается напрямую ifconfig. При старте сети его наличие указывает на необходимость запуска программы wpa_supplicant(8), которая производит аутентификацию. В этом можно убедиться, заглянув в код /etc/network.subr.

Также в хэндбуке не упоминается о полезной утилите wpa_passphrase, которая генерит хэш пароля, пригодный для вставки в wpa_supplicant.conf.

Monday, December 14, 2009

"NTLD is missing" после установки FreeBSD

Некоторые производители ОС проводят монопольную политику, и только FreeBSD это делает неосознанно - посредством багов в инсталляторе :-)

Время от времени при установке FreeBSD на винт с установленной виндой (в первом разделе), каким то образом херятся загрузочная область этого раздела. В результате при загрузке выдается "NTLDR IS MISSING". Причем, все виндовые файлы на месте. Т.е. их копирование туда не помогает ни разу. Установка grub тоже не помогает - он успешно находит виндовый раздел, но при загрузке та же фигня.

Мистика сцуко.

UPDATE:

Пришлось снова вернуться к этому посту, поскольку данный баг проявился у меня недавно при установке Arch Linux на тот же комп! Недаром у них с FreeBSD исталляторы похожи... Чтобы разобраться в проблеме, проделал установку еще раз, предварительно сохранив начальные сектора диска и виндового раздела командой dd. Установка производилась в уже имеющийся раздел. Несмотря на это, инсталлятор почему то изменил первый сектор, a.k.a. MBR. Предполагаю, что изменяется 4-байтная сигнатура диска, которая используется при загрузке винды. Запись сохраненной копии MBR обратно на диск, естественно, решило проблему. Мораль: бэкап MBR перед установкой OS - суровая необходимость.

Использованные команды:

бэкап:
dd if=/dev/ad4 of=mbr bs=512 count=1

восстановление:
sysctl kern.geom.debugflags=16   #позволяет менять MBR на "живой" системе
dd if=mbr of=/dev/ad4 bs=512 count=1
З.Ы. Для доступа в винду при наличии ошибки "NTLDR IS MISSING" полезным может оказаться загрузочный CD, взятый отсюда.

Tuesday, December 8, 2009

vimtutor

Отличный способ начать освоение vim - vimtutor. Это обычный шелл-скрипт, который запускает собственно Vim с копией туториала. Жаль, что он в свое время мне не попался на глаза :)

ЗЫ. Язык учебника можно задать параметром, e.g.: vimtutor ru. По умолчанию используется английский.

Tuesday, December 1, 2009

UFS2 subdirectory limit

UFS/UFS2, ext2/ex3 ограничивают число папок в отдельно взятой папке значениями 32767 и 32000 соответственно.

Это легко проверить имея одну из этих файловых систем:

mkdir tmp; cd /tmp;
for i in $(seq 32767); do mkdir $i; done
...
mkdir: 32766: Too many links
mkdir: 32767: Too many links

(Директория всегда имеет два дефолтных линка: '.' и '..').

Кстати, в ext4 лимит увеличен до 64000.