WiFi

So I finally got WiFi set up. I have to say I really like it! It is much better than Bluetooth between two PCs. First thing I had to do was WiFi setup in my laptop.

I found out that there is no FreeBSD driver for my integrated Broadcom 4318 and it is likely that there will never be one. Very sad. But after a little search I found a way to create a driver from Windows one! Here is how I did it:

# fetch R94827.EXE — Windows driver distribution for my Dell TrueMobile 1300 WLAN Mini-PCI Card
$ unzip R94827.EXE
$ iconv -f UTF-16 -t UTF-8 bcmwl5.inf > bcmwl5.inf.utf8 # ndisgen understandeth not UTF-16
$ cp bcmwl5.inf.utf8 bcmwl5.inf
# edit bcmwl5.inf and change Ndi\params\IBSSGMode\enum from «1» to «2» — needed to support 802.11g
$ ndisgen bcmwl5.inf bcmwl5.sys
# answer ndisgen’s questions by pressing return — defaults are okay
$ cp bcmwl5_sys.ko /boot/modules/

Okay, now we have a driver. Add the following into /boot/loader.conf:

bcmwl5_sys_load=»YES»
wlan_wep_load=»YES»
wlan_ccmp_load=»YES»
wlan_tkip_load=»YES»

Honestly, I know not which modules besides driver are really needed so I decided to load them all. They are small and should never do any harm. Now I reboot and get:

[alqualos@void tmp]$ dmesg | grep ndis0
ndis0: mem 0xdfbfe000-0xdfbfffff irq 17 at device 3.0 on pci2
ndis0: NDIS API version: 5.1
ndis0: Ethernet address: my:mac:address:here

Wow, it is cool! Windows driver worketh just fine! Then I went and bought myself a DWL-G700AP WiFi access point. I really like D-Link products, and this one was no worse than ADSL modem I already have. I connected with Firefox and set up the following:

* LAN address from default 192.168.0.50 to 192.168.17.9. Then I had to reconnect to the new address.
* Admin password safer than the default one.
* DNS and router for my LAN: 192.168.17.1.
* Tried DHCP but then finally decided to leave it disabled. For small networks static allocation works much better.
* Wireless security: WPA-PSK wich long and hard to guess password.
* Enabled MAC filtering and added my ndis0’s MAC to the list — to be safe!

Then I played around a lot with ndis0 setup and finally got this working:
ifconfig_ndis0=»WPA inet 192.168.17.7 netmask 255.255.255.0 ssid brededor channel 6″

Of course, I had to configure WPA in /etc/wpa_supplicant.conf:
network={
ssid=»brededor»
psk=»my-cool-password»
}
And of course, since there is a password in this file, chmod 600 it!

Now I have access to my LAN and to Internet through it! Without any cables except AC adapter one if I am not running on battery. And it is much easier to set up than PPP over Bluetooth.

И втыкать ничего не надо, и до кухни оно достаёт, в отличие от Bluetooth. Приду домой — ещё попробую с мощностью антенны поиграться, чтобы понять, насколько хорошо достаёт.

Чудеса удалённого доступа

Сегодня познакомился с ещё одним чудом Unix. Нет, ну то есть про ssh я, конечно, давно знал, но пользовался преимущественно в рамках локальных сетей, либо для доступа на какой-нибудь сервер. Теперь же у меня возникла мысль, что в принципе многие задачи, решаемые на домашнем компе (например, упорное скачивание Sailor Moon ^_^) можно контролировать издалека с помощью ssh. Итак.

Первое. Чтобы влезть с помощью ssh куда-то, нужно знать IP. IP я, конечно, могу посмотреть через ifconfig, но проблема в том, что он может измениться. Пишем в /etc/ppp/ppp.linkup на домашнем компе:

pppoe:
        бла-бла-бла...
        ! /usr/local/etc/send-my-ip

А в файле /usr/local/etc/send-my-ip рисуем:

#!/bin/sh
IP=`ifconfig | grep -A1 tun0 | grep -o 'inet .* --' | awk '{print $2}'`
echo ${IP} | nail -r laerel@yandex.ru -s "IP changed to ${IP}" laerel@yandex.ru

Эта хрень теперь запускается каждый раз при установлении PPPoE соединения с «Дерьмолайном» и отправляет мне айпишник на мыло. Отлично. Теперь, чтобы совсем сладко жилось, делаем на ноутбуке вот что. Создаём скрипт /usr/local/etc/new-ip:

#!/bin/sh
IP=`cat $1 | tail -n1`
sed -e "s/.* brededor.inet$/${IP} brededor.inet/" -i bak /etc/hosts

И создаём в почтовом клиенте фильтр: при получении письма от laerel@yandex.ru с сабжем «IP changed to …», запустить эту хрень. Хрени в качестве первого аргумента передаётся файл с письмом, откуда она выцепляет последнюю строчку и заменяет IP в /etc/hosts. Хрень запускается через sudo, ясен пень.
Теперь достаточно на ноутбуке проверить почту — и самый свежий IP в /etc/hosts под именем «brededor.inet». ssh brededor.inet — и мы в консоли домашнего компа!

Теперь о том, что делать в этой консоли. Если мы залезли в неё через жопорез (*GPRS), пусть даже остро заточенный (*EDGE), скорость у нас низкая, а траффик — дорогущий, значит об X11 forwarding можно забыть. Да и на кой оно надо — чего я такого графического не могу запустить на ноутбуке, что могу на домашнем компе? А ничего.

Значит, можно запускать консольные приложения и в частности те, что с текстовым интерфейсом (AKA roguelike, curses или как там ещё их называют). Ну то есть vi/vim/emacs, mutt (нафиг надо), что там ещё? Ага, торренты! Но вот проблема: запусти я rtorrent (кстати, рульная вещь, не только Azureus, но и BitTornado отдыхает!) через SSH, придётся ведь сидеть и пасти его, а не дай бог соединение потеряется, так ведь процесс сдохнет по SIGHUP. А если и не сдохнет, то однажды потеряв связь с терминалом и станет неуправляемым. Решение проблемы — крошечная утилитка dtach. Запускаем:
dtach -c /tmp/rtorrent rtorrent -s .
/tmp/rtorrent — имя сокета, придумываемое от балды, пригодится потом, когда будем снова подсоединяться.
После этого смотрим, что всё в порядке, нажимаем Ctrl+\ — хлоп! — вывалились в терминал, а rtorrent продолжает работать с невидимым терминалом, эмулируемым dtach. После этого можем вообще вывалиться из SSH и идти отдыхать. Спустя какое-то время возвращаемся, запускаем:
dtach -a /tmp/rtorrent
И видим родной интерфейс rtorrent, который тем временем без дела не сидел. Можем поуправлять им, добавить/удалить торренты, подрегулировать скорость там… Потом опять отвалимся, а он будет продолжать делать своё чёрное дело. Красота! Начинаю жалеть, что осёл — графический. Впрочем, к нему есть консольная программа контроля, но тут как минимум два недостатка — во-первых, это всего лишь программа контроля, а не полноценный интерфейс осла, а во-вторых, если осёл грохнется, то запустить его можно… впрочем, можно! Например вот так:
amule —display :0 &
Запускается. Работает. Управляется. А вот что делать, если ещё и иксы грохнутся… А вот что:
Xvfb :1 &
amule —display :1 &
Правильно, зачем ослу полноценный сервер? Так оно и надёжнее, и работать быстрее будет.
Только вот одно «но» — эта зараза не хочет нормально искать файлы с русскими и японскими символами. Видать, где-то там забыли про юникод.

Итого, дома через двух мегабитный анлим качается себе всякое барахло, а я сижу где-нибудь в Говнище и мало того, что наблюдаю за процессом, так ещё и могу управлять им! Например, скачал новый торрент, закинул его к себе через scp, влез через ssh, подключился с помощью dtach и добавил. Минус — торрент придётся гонять через GPRS дважды — один раз на ноут, один раз с ноута. Но они обычно мелкие. А можно скопировать ссылку и скачать торрент сразу домой с помощью wget или fetch. В общем, простор для фантазии!

З. Ы. Русский и японский в amulecmd заработали после перекомпиляции aMule с целью проверить, будет ли оно работать в его веб-междумордии. Работает теперь и там, и тут. Красота!

Unix bushido

Обрывками приставшая к спине,
Судьба его по краешку прошита
Нервущимися нитками Бушидо,
И этого достаточно вполне.
— Олег Медведев, «Маленький Принц»

Итак, я обещался рассказать, что же за глупость это такая — бушидо Unix. Положение моё было таково, что я не был живым, и совершенно точно знал, что живым мне и не быть. Добавленная к этому невозможность умереть создавала неразрешимое противоречие, в результате которого не оставалось иного выбора, кроме как страдать, причём вкладывая в это занятие немало усилий. Ну, или это я так думал, что выбора не оставалось. Неважно.

Затем я натолкнулся в течение некоторого времени на труд Эрика Рэймонда о великих хакерах, Go Rin No Sho и Hagakure. Эрик рекомендует хакерам заниматься боевыми искусствами, чтобы достичь нужной чистоты разума. Миямото Мусаши пишет «Know the Ways of all professions» а также «It is difficult to realise the true Way just through sword-fencing», а Тцунетомо Ямамото объясняет, что путь самурая заключается в полном принятии смерти. Кроме того, этаким связующим звеном всего этого служит дзэн, который мне знаком уже давно, но о связи его с Unix я как-то не задумывался.

Всё это в совокупности наводит на мысль о том, что путь самурая — это не только путь меча, а нечто гораздо более общее, явно не чуждое Unix. А что самое главное — это не требует быть живым, даже скорее напротив. А поскольку мне всё равно делать нечего, почему бы на этот путь и не встать.

Итак, что же такое бушидо Unix?

Во-первых, как меч и кендо для самурая средневековой Японии — так компьютер и программирование для самурая Unix. Это не значит, однако, что этим всё ограничено. Так же как трудно познать путь только через кендо, так же трудно его познать через одно лишь программирование. Это означает: познание не только вглубь, но и в ширину. Изучение японского языка, немецкого языка, дизайна, умение грамотно составлять документацию — это всё не препятствия на моём пути, а напротив, способ приблизиться к его пониманию. Не исключено, что и в боевые искусства подамся, но об этом пока думать рановато.

Во-вторых, принятие смерти. Нет, тут речь не о харакири. Речь идёт о том, чтобы отказаться от жизни. Существовать только для познания пути. Это не так просто, как кажется. Да, внешне жизни у меня нет. Но не следует забывать о том, что это — всего лишь самообман. Я такой же живой человек, как и все, только заблудившийся. Придётся это преодолевать. Не в сторону жизни, так в сторону смерти. Идеальный результат — способность встретить смерть в любой момент, ни о чём не жалея.

В-третьих, предельная скромность и вежливость. Я — не бог. Слово «самурай» означает «служить». Я существую только для того, чтобы использовать свои способности на благо людей. Если мой путь противоречит пути кого-то другого, мне нельзя с него сворачивать, но это не значит, что я всегда прав. В этом случае мне нужно не надменно доказывать свои превосходство и правоту, как это часто делают люди, а извиниться за своё вмешательство и скромно продолжить свой путь.

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

В-пятых, спокойствие. Это вытекает из принятия смерти. Что бы ни случилось, спокойно продолжать свой путь. Нельзя позволять страху или ещё чему управлять мной.

Кажется, это основное. Что там ещё найдётся — увижу, когда найду.

Вообще я, конечно, в своём репертуаре — как что-нибудь придумаю, так хоть стой, хоть падай. Помнится, в первом классе, когда нам задали рисовать на свободную тему, я нарисовал в середине листа проигрыватель грампластинок «Аккорд», а пространство вокруг него заполнил с одной стороны — солнечными свастиками, а с другой — гитлеровскими. Этакий Инь-Янь. Учительница была в шоке, а я тогда так и не понял, почему. Сейчас то же самое — интерес «unix bushido» у меня не разделён, естественно. Значит, я опять соригинальничал свыше всякой меры. Ну что ж, будем считать, что таков мой путь.

Между прочим, меня только что осенило, что принцип «хоть стой, хоть падай» в программировании я ещё не применял. Там, конечно, оригинальничать не к месту и сверх меры не стоит, но может когда подвернётся возможность сделать это к месту и в меру — надо будет попробовать.

ljupdate

Нашёл неплохую штуку. ljupdate называется. Не что иное как клиент LJ на Emacs Lisp. Конечно, набирать в Emacs удобнее, чем в любой графической гадости, в том числе и LogJam, которым я досих пользовался. Ещё бы заставить теперь Flyspell нормально русский язык понимать… И ещё эта гадость многого не умеет, например, редактировать френдов или загружать старые записи. Или это я пока не понял как? Надо будет поизучать, может самому что сварганить.