20 января 2011 г.

Сессия подходит к концу

01. Сессия подходит к концу. Ещё несколько дней, и всё. Впрочем, я ошибался - это не последняя сессия. В феврале мне нужно будет сдать ещё несколько зачётов и/или экзаменов. И это будет действительно всё.

02. В конце прошлого года начал работать над дипломом. Защита будет летом, в Москве.

03. Понял, что возможности текстовых процессоров по работе с _текстом_ меня не устраивают. Не хватает клавиатурных комбинаций Emacs, которые уже стали привычными. Заметил, что если мне нужно записать какой-то текст, будь то лекция или статья - то я запускаю Emacs и автоматически начинаю записывать в HTML, расставляя необходимые теги. К возможностям текстового процессора обращаюсь в редких случаях. В связи с этим, начал изучать систему компьютерной вёрстки LaTeX, параллельно с написанием дипломной работы.

Думаю, знание LaTeX мне пригодится в будущем.

04. Мне нравится браузер Mozilla Firefox. Однако последнее время, в основном, использую браузер Conkeror. Мне нравится дизайн его интерфейса и система управления.

05. Серьёзно занялся изучением программирования. Столько я не программировал за все годы обучения в ВУЗе. Обнаружил, что понимание работы программы - это столь же здорово, как и понимание работы той или иной части ОС. В этом неоспоримое преимущество свободного программного обеспечения - вас не ограничивают в изучении, и вы можете достичь сколь угодно глубокого понимания, вплоть до основ (если таковые есть). Вы можете не только изучить, но и исправить то, что на ваш взгляд нуждается в исправлении. Вы можете добавить дополнительную функциональность, которой вам не хватает, и поделиться результатами своей работы (если захотите).

Мне нравится реализовывать алгоритмы, которые вырисовываются в воображении в процессе понимания поставленной задачи. Если этот алгоритм не работает с первого раза, то я могу провести много времени, перечитывая код программы и мысленно моделируя её работу: вот сейчас эта переменная увеличилась на единицу, а сейчас цикл совершил новую итерацию и вот этот указатель теперь содержит адрес следующей ячейки массива... В конечном счёте, как правило, мне удаётся решить возникшую проблему. Это здорово.

Сегодня я наконец-то решил освоить азы работы с отладчиком GNU Debugger. Благодаря ему, я смог найти ошибку в программе, из-за которой она не работала задуманным образом.

7 января 2011 г.

Мой новый проект

Обновил свой сайт - почистил HTML-код, удалил лишние стили, добавил новый раздел.

Теперь о главном. Поскольку я сейчас вновь достаточно активно изучаю язык программирования Си - на курсах в НИИТе и самостоятельно дома - то решил запустить новый проект.

http://memory-pool.blogspot.com/

Цель проекта - собрание в одном месте различных интересных задач по программированию, которые мне попадались на курсах (или которые я нашёл/придумал сам), и их решений. Проект по сути образовательный, и будет расти вместе с познаниями автора. Надеюсь, что смогу живо и интересно преподнести такую сухую материю, как программирование.

Использование свободного драйвера nouveau с NV GeForce 6600 (kernel 2.6.36)

Решил заменить проприетарные драйвера от (или для) видеокарты nvidia на свободный драйвер nouveau.

Моя видеокарта:

> su
> lspci -k | grep -i vga
01:00.0 VGA compatible controller: nVidia Corporation NV43 [GeForce 6600] (rev a2)


Моя система:

> uname -a
Linux gentoo 2.6.36-gentoo-r5 #18 SMP Fri Jan 7 05:54:56 MSK 2011 i686 Intel(R) Pentium(R) 4 CPU 1.70GHz GenuineIntel GNU/Linux


Следую этой инструкции:
http://en.gentoo-wiki.com/wiki/Nouveau

Из ядра так же нужно убрать NVIDIA Framebuffer:

Device Drivers --> Graphics support -->
--> Support for frame buffer devices:
< > nVidia Framebuffer Support


Поправил /etc/make.conf

> nano /etc/make.conf
...
#VIDEO_CARDS="nvidia"
VIDEO_CARDS="nouveau"
...


Чтобы корректно удалить из системы проприетарные драйвера nvidia-drivers, нужно пересобрать несколько пакетов с поддержкой nouveau - чтобы разрешить зависимости. Что я и сделал:

> emerge -av media-libs/mesa media-gfx/imagemagick x11-base/xorg-drivers


Теперь можно спокойно удалить проприетарные драйвера

> emerge -av --depclean x11-drivers/nvidia-drivers


Собрал

> emerge -av x11-drivers/xf86-video-nouveau


Настроил Иксы:

> nano /etc/X11/xorg.conf


Section "Module"
...
Load "dri2"
Load "dri"
EndSection

Section "Device"
...
Driver "nouveau"
BusID "PCI:1:0:0"
EndSection

...

Section "ServerFlags"
Option "AIGLX" "off"
EndSection

Section "DRI"
mode 0666
EndSection


Теперь о настройке framebuffer'a. Мне нужно разрешение 1280x1024. Посмотрел доступные варианты с помощью утилиты hwinfo:

> hwinfo --framebuffer
02: None 00.0: 11001 VESA Framebuffer
[Created at bios.459]
Unique ID: rdCR.MH8719d4NL7
Hardware Class: framebuffer
Model: "NVIDIA nv43 Board - p277h1"
Vendor: "NVIDIA Corporation"
Device: "nv43 Board - p277h1"
SubVendor: "NVIDIA"
SubDevice:
Revision: "Chip Rev"
Memory Size: 256 MB
Memory Range: 0xd0000000-0xdfffffff (rw)
...
Mode 0x031b: 1280x1024 (+5120), 24 bits
...


Вот оно. 0x031b - шестнадцатиричный код разрешения.

Поправил настройки загрузчика GRUB. Удалил опцию ядра "video", оставил только "vga". Получилось следующее:

> nano /boot/grub/grub.cfg

...
menuentry "Gentoo GNU/Linux, with Linux 2.6.36" --class gentoo --class gnu-linux --class gnu --class os {
...
linux /kernel-2.6.36 root=/dev/sda4 ro vga=0x031b
}
...


Загрузился с пересобранным ядром и драйвером nouveau. Иксы работают, разрешение в консоли и в Иксах - 1280x1024.

На этом всё. Хорошего дня.

31 декабря 2010 г.

Matthew Ryan & Hammock - Like New Year's Day

Сказ о потерянных раскладках

Хочу рассказать я вам о некоторых проблемах, возникших при очередном обновлении ОС Gentoo Linux. Только две упомяну, остальные не столь интересны были - да и не упомнишь всего. Итак, начну с главного, а именно - с ядра операционной системы.


Далее в тексте упоминается одно из самых сильных и, вместе с тем, опасных заклинаний - команда su. Даёт эта команда нам власть над миром нашим, пусть и виртуальным. А большая власть - большой осторожности и ответственности требует.


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



> emerge --sync && eix-update && eix -uc


Посмотрел я на списки обновлений, посмотрел на версии новые, и решил - время пришло. Благо ноут есть, для опытов. Начал с него. Потом взялся за ПК. Настроил ядро новое, версии 2.6.36.


А на ПК у меня жёсткие диски именовались так:



hda1, hda2 .... hdaN


И не грузилась система с новым ядром. Видел я лишь сообщения об ошибках. Тогда стал искать причину, и нашлась она рядом - в файле /etc/fstab. В новом-то ядре жёсткие диски именуются, как


sda1, sda2 .... sdaN

Отсюда и ошибки при монтировании - нет устройств таких, что перечислены в fstab! Исправил я ошибку эту - заменил hda на sda. Загрузилась система, да не может всё равно примонтировать разделы c файловой системой ext4! А проблема известная, и решается она следующим образом:


http://www.nkuttler.de/post/filesystem-with-huge-files-cannot-be-mounted-read-write-without-config_lbdaf/

После этого система загрузилась благополучно.


Кстати, считаю нужным упомянуть здесь о интересном нововведении, а именно об опциональной возможности использования в ядре драйвера ФС ext4 для работы и со старыми версиями данной ФС - ext2 и ext3. Так как других ФС, кроме перечисленных, на ПК и на ноуте я не имею, решил испробовать данную возможность. Пока проблем не замечено.


2. Система загрузилась, только вот раскладку переключить не мог я. Сочетание клавиш Alt+CapsLock, мной для переключения раскладки назначенное, не работало. Что ни делал, ничего не помогало. И опции в /etc/X11/xorg.conf менял, и Иксы пересобирал... Долго ли, коротко ли - нашлось решение этой проблемы: с помощью сети Интернета выловил я информацию по проблеме моей. Сказано было: в новом xorg'e способ настройки изменился, теперь настройки клавиатуры, мыши, тачпада и прочих устройств внешних - всё должно храниться в файлах отдельных, в каталоге /etc/X11/xorg.conf.d/. А там - пусто, да и каталога этого и в помине нет... Как нет? Примеры настройки должны быть. Поищем, команда для этого есть специальная:



> su
> updatedb 
> locate xorg.conf.d


Что же это за строки таинственные? В первую очередь, права необходимые получаем. А во второй строке у нас обновление базы данных mlocate, индекса системы нашей. Тут все пути и все имена хранятся. А в третьей команде мы запрос к базе данных делаем, словно к зеркалу волшебному - и ответ получаем:



/usr/share/X11/xorg.conf.d
/usr/share/X11/xorg.conf.d/10-evdev.conf
/usr/share/X11/xorg.conf.d/50-wacom.conf


Знаем мы теперь, где примеры хранятся, и недалече это - всего на расстоянии одной команды консольной. Ну, теперь можно просто скопировать найденный каталог с файлами в /etc/X11/. Одна команда для этого нужна, и вот она:



> cp -r /usr/share/X11/xorg.conf.d /etc/X11/


Просто, да не всё это. Теперь пришло время перенести настройки клавиатуры нашей в новое место, в каталог /usr/share/X11/xorg.conf.d


Убираем лишние строки из /etc/X11/xorg.conf путём их комментирования с помощью "#" (в принципе, эти строки можно вообще удалить):



Section "ServerLayout"
...
#  InputDevice "Keyboard0" "CoreKeyboard"
  ...
EndSection
...
#Section "InputDevice"
#  Identifier "Keyboard0"
#  Driver "kbd"
#  Option "XkbLayout" "us,ru"
#  Option "XkbVariant" ",winkeys"
#  Option "XkbOptions" "grp:alt_caps_toggle"
#EndSection
...


А вот, что получилось в /etc/X11/xorg.conf.d/10-evdev.conf. Здесь со строки, знаком "#" начинающейся, иначе комметарием называемой, номер строчки добавленной указан - чтобы понятнее было:



...
Section "InputClass"
  Identifier "evdev keyboard catchall"
  MatchIsKeyboard "on"
  MatchDevicePath "/dev/input/event*"
  Driver "evdev" # 1
  Option "XkbLayout" "us,ru(winkeys)" # 2
  Option "XkbOptions" "grp:alt_caps_toggle" # 3
EndSection
...


Теперь бы и перезагрузиться нам, чтобы изменения в настройках эффект возымели - но зачем время тратить, рестарт системы производить? Лучше Иксы перезапустить, это проще и быстрее будет.


Иксы перезапускать - наука не сложная. Переключаемся на консоль - произносим заклинание и нажимаем на Ctrl+Alt+F1. Так попадаем мы на первую консоль. Снова получаем права суперпользователя, в простонаречии - root'a:



> su


И осталось лишь X-сервер перезапустить, чтобы увидеть результат действий наших - правильно ли мы настройки Иксов прописали?



> /etc/init.d/xdm restart