FreeBSD 7: Host ID

В FreeBSD7 появилась полезная фича - система может генерировать (и генерирует!) уникальный идентификатор хоста — hostid.

Значение hostid можно увидеть при загрузке системы - оно вычиляется после монтирования локальных файловых систем, а также можно узнать при помощи следующи команды:

$ sysctl kern.hostid

Так же можно заново сгенерировать hostid командой:

# /etc/rc.d/hostid start

X.org: переключение/изменение раскладок на лету

При запущенном X.Org в можно поменять настройки клавиатуры (раскладки, языки, переключатели) посредством команды вот такого типа:

setxkbmap -layout "us,ru" -variant "intl,typewriter" -option "grp:ctrl_shift_toggle,grp_led:scroll,compose:ralt"

C++, исключения, конструкторы/деструкторы

В C++ деструктор не вызывается, пока объект не создан полностью. Если код, в конструкторе сгенерировал исключение, деструктор вызван не будет, что приведёт к возможной утечке ресурсов.

(Meyers, 1996; Stroustrup, 1997)

Конфиг X.Org: два монитора+TwinView (NVidia)

Section "ServerLayout"  
       Identifier     "X.org Configured"  
       Screen      0  "Screen0" 0 0  
       InputDevice    "Mouse0" "CorePointer"
       InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
       RgbPath      "/usr/X11R6/lib/X11/rgb"
       ModulePath   "/usr/X11R6/lib/modules"
       FontPath     "/usr/local/share/koi8r-ps/"
       FontPath     "/usr/X11R6/lib/X11/fonts/cyr-rfx-koi8-o/"
       FontPath     "/usr/X11R6/lib/X11/fonts/cyrillic/"
       FontPath     "/usr/X11R6/lib/X11/fonts/bitstream-vera/"
       FontPath     "/usr/X11R6/lib/X11/fonts/freefont/"
       FontPath     "/usr/X11R6/lib/X11/fonts/freefont-ttf/"
       FontPath     "/usr/X11R6/lib/X11/fonts/misc/"
       FontPath     "/usr/X11R6/lib/X11/fonts/TTF/"
       FontPath     "/usr/X11R6/lib/X11/fonts/Type1/"
       FontPath     "/usr/X11R6/lib/X11/fonts/100dpi/"
       FontPath     "/usr/X11R6/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
       Load  "extmod"
       Load  "dri"
       Load  "glx"
       Load  "dbe"
       Load  "record"
       Load  "xtrap"
       Load  "type1"
       Load  "freetype"
EndSection

Section "InputDevice"
       Identifier  "Keyboard0"
       Driver      "kbd"
       Option "XkbModel" "microsoft"
       Option "XkbLayout"  "us,ru"
       Option "XkbOptions" "grp:ctrl_shift_toggle"

EndSection

Section "InputDevice"
       Identifier  "Mouse0"
       Driver      "mouse"
       Option      "Protocol" "auto"
       Option      "Device" "/dev/sysmouse"
       Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
       #DisplaySize      310   230     # mm
       Identifier   "Monitor0"
       VendorName   "BENQ"
       ModelName    "FP783"
### Comment all HorizSync and VertSync values to use DDC:
#       HorizSync    28.0 - 61.0
#       VertRefresh  48.0 - 65.0
       Option      "DPMS"
EndSection

Section "Monitor"
       #DisplaySize      310   230     # mm
       Identifier   "Monitor1"
       VendorName   "NEC"
       ModelName    "LCD1760VM"
### Comment all HorizSync and VertSync values to use DDC:
#       HorizSync    28.0 - 61.0
#       VertRefresh  48.0 - 65.0
       Option      "DPMS"
EndSection


Section "Device"
       Identifier  "Card0"
       Driver      "nvidia"
       VendorName  "nVidia Corporation"
       BoardName   "Unknown Board"
       Option "TwinView" "true"
       Option "MetaModes" "1280x1024, 1280x1024; 1280x1024, 1280x1024;"
       Option "TwinViewOrientation" "LeftOf"
#        Option "SecondMonitorHorizSync" "30.0-70.0"
#        Option "SecondMonitorVertRefresh" "50-160"
       Option "Xinerama" "true"
#       Option "ConnectedMonitor"         "dvi,dvi"
EndSection

Section "Screen"
       Identifier "Screen0"
       Device     "Card0"
       Monitor    "Monitor0"
       SubSection "Display"
               Viewport   0 0
               Depth     1
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     4
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     8
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     15
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     16
       EndSubSection
       SubSection "Display"
               Viewport   0 0
               Depth     24
       EndSubSection
EndSection

Сборка ядра *Ubuntu, Debian

Хак для различных убунт — /bin/sh должна быть символической ссылкой на bash:

# rm -f /bin/sh
# ln -s /bin/bash /bin/sh

Обновляем базу пакетов и устанавливаем необходимые:

# apt-get update
# apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Переходим в директорию для исходников и скачиваем нужное ядро:

# cd /usr/src
# wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.X.X.tar.bz2

Распаковываем ядро, делаем символическую ссылку linux и переходим в директорию исходников ядра:

# tar xjf linux-2.6.20.4.tar.bz2
# ln -s linux-2.6.20.4 linux
# cd /usr/src/linux

Применяем необходимые патчи:

# bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
# bzip2 -dc /usr/src/patch.bz2 | patch -p1

Копируем конфиг от используемого ядра в текущую директорию и на основе его создаём конфиг для сборки нового ядра:

# cp /boot/config-`uname -r` ./.config
# make menuconfig

Сборка ядра, CustomText - собственный текст, добавляемый к версии ядра, далее в качестве него используется строка ac97-hacks (в строке не должно быть пробелов):

# make-kpkg clean
# fakeroot make-kpkg --initrd --append-to-version -CustomText kernel_image kernel_headers

Устанавливаем собранное ядро:

# cd /usr/src
# dpkg -i linux-image-2.6.20.4-ac97hacks_2.6.X.X-ubuntu-ac97-hacks-10.00
# dpkg -i linux-headers-2.6.20.4-ac97hacks_2.6.X.X-ubuntu-ac97-hacks-10.00.Custom_i386.deb

Перегружаемся ;)

# shutdown -r now

Про нотацию (т.е. запись)

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

Alfred North Whitehead

Язык определяет мышление

Изучая естесственные языки, лингвисты Сапир и Уорф (Sapir & Wharf) высказали предположение, что способность к размышлению над определёнными идеями связана с выразительной силой языка. Согласно гипотезе Сапира-Уорфа способность человека к обдумыванию определённых мыслей зависит от знания слов, при помощи которых можно выразить эту мысль. Если вы не знаете слов, то не сможете выразить мысль и, возможно, даже сформулировать её.

Whorf, Benjamin. 1956. Language,Thought & Reality. Cambridge, MA: MIT Press.

Подключение двух мониторов в X.Org

Настройка работы с двумя мониторами в X.Org достаточна проста, фактически нужно в xorg.conf описать по две секции "Monitor", "Device" и "Screen", а также добавить несколько пунктов в секцию "ServerLayout".

Итак, необходимо:

  • Создать две Section "Monitor", с разными полями Identifier; например , "Monitor0" и "Monitor1".
  • Аналогично предыдущему пункту создать две одинаковых секции "Device" с разными полями Identifier"Card0"и"Card1", а также полямиScreen 0иScreen 1`.
  • Создать две секции "Screen", в одной из которых поля Identifier "Screen0", Device "Card0" и Monitor "Monitor0", а в другой Identifier "Screen1", Device "Card1", Monitor "Monitor1".
  • В секцию "ServerLayout" необходимо добавить поля Screen 0 "Screen0" 0 0 и Screen 1 "Screen1" leftOf "Screen0", так же возможно понадобиться не leftOf, а "ightOf, чтобы правильно расположить изображение на мониторах. При такой настройке на каждом мониторе будет отображаться отдельный рабочий стол, т.е. с одного на другой можно перемещать мышь и фокус, но нельзя перемешать окна, и на каждом мониторе будут свои виртуальные рабочие столы. Если же надо иметь рабочий стол «растянутый» на два монитора, то необходимо добавить в секцию "ServerLayout" поле Option "Xinerama" "true".

Прим.: при использовании видеокарт NVidia с проприетарными (родными) драйверами, можно использовать особую опцию "TwinView", которая в некоторых ситуациях даёт существенный прирост производительности.

Автоматическое завершение неотвечающего процесса в Windows XP

[ HKEY_USERS\.DEFAULT\Control Panel\Desktop ]

Ключ AutoEndTasks (DWORD) поставить в значение "1".

Так же полезно:

  • HungAppTimeout — определяет время, по прошествии которого не отвечающее приложение считается зависшим (по умолчанию 5000 миллисекунд);
  • WaitToKillAppTimeout — задает время ожидания перед завершением зависшего приложения (по умолчанию 20000 миллисекунд).

Технологии и Цвета

В 90-х годах вся TV-техника имела чёрный цвет, а цвет PC-техники был продиктован тогдашним стилем Apple — устрично-серый.

TV победило PC — оно стало жить внутри компьютеров, а сами они приобрели в массе своей чёрный цвет. Где сейчас встретишь белый или сероватый корпус компьютера?

Между тем, пока цвет PC становился чёрным (с промежуточной стадией в серебристом цвете), цвет Apple стал белоснежным, в некоторых моделях серебристым и очень редко чёрным. Куда пойдут технологии, во что они превратятся и как это будет выглядеть? Остались чёрные TV+PC vs. белые/серебритые Apple...

Когда вместе собираются критики, они говорят о Теме, Композиции и Идее...

Когда вместе собираются критики, они говорят о Теме, Композиции и Идее. Когда вместе собираются художники, они говорят о том, где купить дешёвый скипидар.

Pablo Picasso

Преобразование текстовых файлов Windows в UNIX (KOI8-R)

Помимо кодировки CP1251, текстовые файлы Windows отличаются от файлов в различных UNIX-подобных окончанием строки — в последних он один — '\n', а в детище M$ '\r\n', в результате чего они кривовато выглядят в консольных текстовых редакторах ('\r' выглядит как ^M). Итак, задача: убрать все '\r' (^M) и преобразовать кодировку из CP1251 во что-нибудь более человечное (KOI8-R или UTF-8).

Решение

$ tr -d "\r" < file > file.new
$ iconv -f cp1251 -t koi8-r  file.new > file

Пояснения

  • первая команда удаляет все символы '\r' в file, вывод направляется в file.new;
  • вторая команда преобразует кодировку из CP1251 в KOI8-R (вместо KOI8-R можно и UTF-8 подставить ;)), и записывает вывод в file, тем самым перезаписывая его полностью преобразованной информацией.

Приведение файлов к одной кодировке

$ find /path/to/files -iname "*.txt" -exec enconv -L ru {} \;

Пояснения

  • enconv {} — преобразует файл в кодировку текущей локали. Можно использовать с ключом -x для явного указания кодировки, в которую необходимо преобразовать файлы;
  • ключ -L нужен для выбора языка текста, но всё должно работать и без него.

Страницы