Вы читаете dev_hands

Как нужно писать патчи

Cray2
Сегодня в Weekly News нашел ссылку на блог Pascal Bleser про vnstat. Описание, в отличии от ntop мне понравилось - красивые графики при минимуме усилий. Поставил по OneClick Install и попробовал проделать действия, описанные в статье - хрен.

При создании базы #vnstat-create-db eth0 получаю ошибку. Подумал несколько секунд и стал писать багрепорт. Написал, но перед отправкой решил посмотреть в чем суть проблемы. Проверил скрипт, нашел ошибку - недостаточно прав для создания файла в директории /var/lib/vnstat. Решил заодно пофиксить spec и прислать патч. Но удивительное рядом - spec оказался правильным! Посмотрел апдейты - так и есть. Пока я писал багрепорт парни уже все исправили и выложили апдейт.

OpenSource выходит на принципиально новый уровень. Пока противник рисует карты - мы меняем ландшафт местности.

Метки:

Отключение PV в LVM

Cray2
Решил вынести свой старый IDE диск из VG. Что-то меня напугали темой, что диски-пенсионеры имеют тенденцию сбоить. Появилась идея независимо от основной VG хранить там не очень важные данные типа музыки, iso образов дистрибутивов и т.п.

Так же недавно кто-то жаловался на отсутсвие GUI средств для таких вещей в Ubuntu.
Приведенные вещи можно сделать через Yast. В "разметке" выбрать нужную группу и кликнуть кнопку "изменить размер".

0) Проверим есть ли на оставшихся PV достаточно места, чтобы вместить данные: pvdisplay

1) Перед извлечением физического тома из группы нужно перенести физические экстенты на другие диски. Для этого воспользуемся pvmove. Если почитать справку - то можно заметить, что можно не только полностью вынести данные с диска, но вынести только экстенты определенного логического тома и даже конкретные экстенты. Вынесем все с /dev/sda.

# pvmove -v /dev/sda

И теперь долго ждем. Система переноса весьма хитрая, с использованием временного тома, ну и консистентность блюсти нужно.

2) Теперь почти все: проверим все ли экстенты на извлекаемом PV свободны с помощью pvdisplay.
Извлекаем физический том:
# vgreduce -t -v system /dev/sda
# vgreduce -v system /dev/sda
Команда с ключом -t - тест извлечения. Внимательно прочтите его результат, перед выполнением второй команды. system - имя VG, в котором лежит /dev/sda.

Вставить новый диск в группу: vgextend

Теперь можно создать файловую систему на /dev/sda и смонтировать его как отдельный диск. Либо создать на нем другую VG.

Метки:

Konquest

Cray2
Есть замечательная игра из комплекта kde-games: konquest.

[Если вам не интересна сама игра - сразу переходите к пункту номер 6 - он может оказаться интересным.]

Рассматривается пакет kde4-konquest из kde 4.2 в OpenSUSE 11.1. Только ее мало кто любит. Скорее всего даже сами разработчики. Так как нет сетевого режима, редактора карт и в документации не отображены особенности реализации, которые будут оказывать сильное влияние на вашу стратегию.

Я все-таки взял в руки vim, ctags и cscope и почитал как оно внутри устроено.

1) Отправка флота на свою планету.
Как известно любому игроку в konquest, каждая планета имеет характеристику "мощь кораблей". Можно отправить с "сильной" планеты флот на "слабую", а потом с нее атаковать противника. В окне "флоты" весь флот имеет мощь той планеты, с которой был отправлен. Но у меня была надежда, что корабли, произведенные на "сильной" планете свою мощь не теряли - в документации на этот счет я ничего не нашел. Эта надежда была разрушена. На самом деле все корабли отправленные с планеты X (или находящиеся на ней) в сражениях имеют мощь, равную мощи планеты. Если они прибудут на другую планету (как вариант завоюют недружественную) - их мощь изменится.

Если затраты на транспортировку не велики - выгоднее слабые корабли отправлять на ближайшую сильную планету, а уже с нее атаковать. Или просто не собирать флот на ближайшей к противнику планете, а атаковать несколькими флотами.

2) Миф номер 2: отдаленные планеты сильны. Когда я посылал минимальные флоты на отдаленные нейтральные планеты - они часто терпели неудачу. Я полагал, что корабли в полете ломаются и до планеты долетает только часть флота. Так же была теория, не подтвержденная практикой, что отдаленные планеты сильнее тех, что находятся в скоплениях.

Мощь и производительность планет не зависит от их местоположения - это произвольные величины, определяемые при создании карты. Кроме тех, что являются homeworld игроков - там эти величины заданы константами (статически прописаны в коде), которые вы и наблюдаете каждый раз на первом ходе.

Сила нейтральных планет в том, что каждый новый ход им добавляется один корабль. Изначальный флот на нейтральной планете равен ее производительности. Если вам было достаточно 20-30 кораблей для завоевания ближайших планет, то такого флота будет недостаточно для завоевания отдаленных планет ходу этак к десятому.

3) Так же у меня была теория, связанная со следующей ситуацией:
Я послал флот для завоевания планеты. Флот потерпел неудачу. Я послал еще один - после завоевания планеты там количество кораблей оказалось больше моего первоначального флота.
Теория была в том, что "наши" не только разбили противники, но и взяли пленных.

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

4) Порядок сражений или прибытия подкреплений: сначала выполняется для 1ого игрока, потом для второго и так далее. Понятнее на примере: вы игрок номер 4. На ходе 26 на вашу планету должно прибыть подкрепление с другой вашей планеты и недружественный флот игрока номер 3. Номер игрока 3 меньше - значит сначала нападет его флот (пусть ему удалось завоевать планету), а затем прибудет ваше подкрепление и попытается ее отбить. Новые боевые единицы с этого хода достанутся окончательному хозяину планеты (пункт 3).

Если вы игрок номер <последний> и вы в один и тот же ход с вашими противниками пребываете на какую-то планету - вам придется биться только с победителем. Если вы первый - со всеми флотами, претендующими на планету по очереди.

5) Мощь кораблей на самом деле означает вероятность. Бросается кубик с континумм граней, показывающий вещественное число от 0 до 1 - если кубик показал число ниже мощи вашего корабля - вы сбили один корабль противника. Потом тоже самое повторяется для вашего оппонента. До тех пор, пока у одного из вас не останется кораблей.

То есть на картах побольше можно оценивать свой флот как произведение количества кораблей на их мощь. На маленьких картах это подводит. Вероятность - сука бессердечная.

6) По поводу нарушения патентов в свободном ПО. Обнаружил, что konquest все-таки нарушает патенты (помимо очевидных типа патента на односвязные списки - наверняка у нескольких компаний в разных формулировках он есть).
Дело в том, что в файле gamelogic.cc (у меня строка 201) в функции, реализующей сражение флотов противников содержится комментарий: "let's get ready to rumble...".
По данным Википедии фраза запатентована американским мужиком по имени Боб Арум.

Я надеюсь, что я не один играю в konquest и кому-то это может оказаться полезным.

Метки:

Cray2
http://ibash.org.ru/quote.php?id=9159

Юнит
Русский вершок

Юнит и вершок = 4,445 сантиметра (44.45 мм).

Что очень интересно, погрешность измерения советского штангенциркуля - 0.05 мм. По крайней мере, у нас в школе на уроках труда были именно такие.

Метки:

История о контейнерах

Cray2
Что из себя представляет файл с видеофильмом. Грубо говоря это набор из видео потока (кодированного каким-то кодеком), нескольких (0,1 или много) аудио потоков (кодированных каким-то кодеком), нескольких субтитров (в каком-то формате). Все это запаковано в один ящик - контейнер. Контейнер не отвечает за качество видео или аудио - это не его функция. Это просто коробка.

Тем не менее эта коробка может налагать некоторые ограничения на хранящиеся в ней данные. Посмотреть сравнение контейнеров можно на wikipedia: http://en.wikipedia.org/wiki/Comparison_of_container_formats
Как мы видим, многие контейнеры. В частности такие популярные как mp4, avi, wmv налагают ограничения на используемые кодеки. Что это значит для пользователя: сейчас у нас популярен один контейнер, завтра другой.

Другие контейнеры более универсальны и позволяют хранить потоки в произвольном формате.

Среди них есть интересный нам mkv (матрешка). Интересен он за счет использования EBML, что позволяет его расширять по мере необходимости, а не менять периодически шило (avi) на мыло (mp4 или wmv). Так же сам формат - public domain, есть качественные свободные реализации. Так же mkv сейчас поддерживается аппаратными проигрывателями. Совокупность этих свойств делает его отличным контейнером для хранения своей видео коллекции.

Что делать с уже имеющейся коллекцией видео? Ее довольно просто можно конвертировать. Сделаем это в полуавтоматическом режиме в усложненном варианте.

Итак, у нас в директории ~/soap есть собственноручно снятый сериал. С двумя аудио дорожками (рус - дорожка 2 и en - дорожка 1) в avi контейнере. При этом, основной дорожкой стоит английская и языки дорожек не помечены. То есть при запуске плеера без явного выбора у нас будет английская дорожка. Это относится ко всем файлам-сериям в данной директории. Перекодировать мы ничего не собираемся, так как это и есть первоисточник, который мы имеем. Лучше сделать уже не получится - а ухудшить качество можно легко.

Исправим эту ситуацию.
1) Установим пакет mkvtoolnix
2) Запускаем mkvmerge-gui и открываем (add) первую серию. В окне tracks появились найденные дорожки (как видео так и аудио). По очереди их выбираем и правим нужные параметры (выбираем language для звука). Дорожку с русской озвучкой поднимаем наверх (up) - делаем ее основной.
Когда все нужные параметры выбрали жмем кнопку 'copy to clipboard'. Если нам нужно переконвертировать один файл - можно было бы уже жать 'start muxing'.
Закрываем mkvmerge-gui.
3) Из Klipper (управление clipboard в kde) вытаскиваем строку

"mkvmerge" -o "~/soap/S1.mkv" --language 1:eng --language 2:rus -a 1,2 -d 0 -S "~/soap/S1.avi" --track-order 0:0,0:2,0:1

Она нам корректно переконвертирует первую серию. Обобщим команду.
4) $ cd ~/soap
$ find -type f -iname "*.avi" | while read fname; do mkvmerge -o "${fname%%.avi}.mkv" --language 1:eng --language 2:rus -a 1,2 -d 0 -S "${fname}" --track-order 0:0,0:2,0:1; done;
5) Проверили что все в порядке
$ rm -f *.avi

Естественно, что с разными по структуре файлами так не получится. В одном у нас аудио дорожка #1 - русская, в другом - французская.

Переконвертация одного файла у меня заняла около 30 секунд. Так что чай вы попить не успеете.

Теперь о том, зачем мы проставляли языки дорожек. В конфигурационном файле mplayer (~/.mplayer/config) мы можем указать предпочитаемые языки:
alang=ru,en
Это значит, что при открытии файла mplayer будет пытаться найти русскую звуковую дорожку. Если не найдет - то английскую. Если уж ее не найдет - откроет дорожку по умолчанию.

Метки:

Xen + Nvidia

Cray2
В последнее время из-за того, что в KDE 4 штатная функция "показать окна со всех рабочих столов" использует композитинг, меня начал доставать драйвер nv. В итоге все-таки сменил его на nvidia. Вообще, функция установки nvidia драйвера реализована с помощью OneClick Install, но мне в этом плане жизнь усложнял гипервизор Xen. Из-за него вытекает некоторая специфика установки. В общем, все похоже на сложный способ установки nvidia драйвера, описаный в OpenSuse wiki: http://ru.opensuse.org/NVIDIA

Использовались:
- OpenSuse 11.1 (x86) со штатным ядром 2.6.27.7-9-xen
- Последний стабильный NVidia драйвер x86-177.80
- видео адаптер NVidia GF 6800 PCI-E

Инструкция оформилась на wiki проекта:
http://ru.opensuse.org/Use_Nvidia_driver_with_Xen
http://en.opensuse.org/Use_Nvidia_driver_with_Xen#OpenSuse_11.1

Метки:

Память П

Cray2
Да, это пост про все ту же Pepsi. Только уже несколько в другом смысле. Недавно до меня дошло, что моя память хорошо описывается моделью "бутылка с сильно газированной жидкостью".

Информация растворяется в пустоте памяти, как CO2 в воде. В итоге с утра получаем полностью чистый мозг, наполненный спокойной черной жидкостью. Затем эту жидкость начинаем трясти простыми вопросами типа "какой сегодня день недели?", "куда сейчас нужно ехать?", "сколько мне осталось времени на завтрак". Пузырьки информации выделяются из нашей пепси-памяти и прилипают к стенкам мозга-бутылки.

Чуть позже начинаются более сложные вопросы. Эти встряски часто инициированы другими людьми. "У меня гугль не пингуется, а написано, что интернет есть", - всплывают пузырьки с информацией о DNS и магическим ip 4.2.2.2, часто это захватывает за собой что-то еще, потом нужно объяснить человеку что ты делаешь, и эффект сравним с открыванием крышки охлажденного напитка. Когда пузырьки вырываются наружу и на поверхности образуется тонкая пенка. При этом во время самого вопроса происходит что-то вроде удара статикой. Когда спрашивают "А когда экзамен?" и ты вспоминаешь, что экзамен завтра утром, а ты про это забыл - удар током чувствуется явно.

У пепси-памяти есть свои недостатки. Самый большой - без внешнего воздействия я ничего не помню. Не будет вопросов - я буду немой амебой. Нет вопросов - нет пузырьков. Мне очень сложно находить какие-то примеры и иллюстрации простых вещей, синонимы слов - потому как это не вопросы, а какой-то другой запрос к памяти, мозгом напрямую не обрабатываемый.
Обратная сторона - когда просыпается интерес к происходящему, начинаешь сам себе генерировать вопросы. Как связанные с изначальной темой, так и совершенно далекие от нее. Сейчас пишу эти строки и вспоминаю сколько часов в сутки спят львы. Понятия не имею при чем тут львы. Процесс выхватывания из "пенки" только нужных пузырьков можно назвать проекцией "творчества" на пространство памяти.
Так же в некотором возбужденном состоянии наш сироп начинает лучше чувствовать раздражители. Можно встретить человека всего лишь раз в жизни и узнать его спустя пару лет, полностью выдав его имя-отчество, e-mail и содержание последнего разговора.

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

В последние пару недель равномерной нагрузки на мозг, честно говоря, и не было. Не сделал ничего нового, написал пару страниц простейшего кода, почти все свободное время смотрел Доктора Кто (отличное BBC тв-шоу). И получился аналог знаменитого видео, когда в бутылку кока-колы бросают конфетку ментоса. Взрыв памяти. Я просто лежал, смотрел в потолок. Мне было абсолютно скучно, потом случилось что-то вроде сильного разряда и мне вспомнились люди, с которыми я уже несколько лет не виделся. Вспомнилось много и довольно подробно. То есть лица, имена, содержания разговоров.

Пока понятия не имею что с этим делать, но вот как работает моя память я начинаю понимать.

Метки:

Я не лох

Cray2
Ситуация следующая: имеется домашний adsl роутер Acorp W422g. Возраст - 8 месяцев, когда-то купленный мною в омском магазине "Цифровой Мир". Имеется гарантия от продавца - 6 месяцев. Так же имеется компания-производитель Acorp, официально представленная в России, которая установила гарантию в 3 года. Установила вполне корректно, на русском языке, и нашлепала надпись о трехгодичной гарантии на коробочку.

Модем вышел из строя, точнее его dsl модуль.

Зашел в Цифровой Мир с приготовленными выпискали из ЗоЗПП (закона о защите прав потребителей) и соответсвующими комментами к нему с официальных источников. Имелся сам модем, все сопутствующие компоненты и коробочка. Модем приняли со второго раза (в первый раз не было руководства - потому как заходил в воскресенье, ближе к вечеру). Особо долго ничего доказывать не пришлось. Начальство сразу поняло суть претензий и со мной никто не спорил.

Сегодня мне по гарантии выдали новый роутер той же модели. Все заняло 3 дня.

От чего отталкивался:
Если производитель в соответствии с законами РФ установил гарантийный срок в 3 года - то гарантийный срок 3 года. Продавец может только увеличить этот срок, но никак не уменьшить. Естественно это не касается ситуаций, когда гарантийка от производителя написана на английском. Тогда считается, что производитель не установил гарантийный срок на территории РФ. С моим Acorp гарантия от производителя установлена верно. То есть пункт про гарантию только в 6 месяцев я могу тупо игнорировать, потому что он противоречит федеральному законодательству.

По поводу "обратитесь в сервис Acorp в Москву". Купил я железку в Омске в вышеуказанном магазине. И по тому же ЗоЗПП я могу выбрать кому предъявить притензии - к продавцу или напрямую к производителю.

Метки:

Update OpenSuse 11.0 -> OpenSuse 11.1

Cray2
OpenSuse 11.1 на стадии девелоперских сборок казался мне крайне удачным. Все нужные мне для работы приложения тестировались в вирт машине, к RC1 уже все отлично работало. Однако во время обновления всплыли неприятные мелочи.

Laptop: После обновления не поднимались X. Крашился драйвер intel (карта gma 945). Решение: сразу после апдейта сделать zypper up. К тому времени как официально вышел релиз, исправление уже было в репозитарии Update.

Так же успешно перешел на NetworkManager - вроде, отлично работает.

Desktop: После обновления отвалился звук. Причина: в связи с массовым pulse головного мозга всех пользователей выкинули из группы audio и поместили в группу pulse. Поскольку я еще не читал как работает pulse - предпочитаю знакомый alsa. После добавления себя в группу audio все заработало.

Так же успешно мигрировал на KDE 4.1.

Мораль: при обновлениях 10.1 -> 10.2 -> 10.3 -> 11.0 еще ни разу у меня не появлялись проблемы. Так что релиз 11.1 можно считать относительно неудачным. Возможные решения проблем:
0) В любом случае после апдейта сразу же сделать zypper up
* В 11.1 по умолчанию update обновляет package, а не patch, как ранее.
1) Почитать bugzilla и подождать некоторое время, пока критичные для вас ошибки не будут исправлены
2) Поставить, выяснить проблемы, устранить
3) Поставить и обратиться на IRC канал поддержки. Для этого вам потребуется умение на человеческом языке сформулировать проблему.

Метки:

Zypper & metalink

Cray2
Уже достаточно давно в официальных репозитариях OpenSuse используется баллансировка зеркал. Все добавляют как источник пакетов ссылки на download.opensuse.org, а на самом деле закачка происходит с ближайшего зеркала.

Для пользователей в РФ это может представлять некоторую проблему - ближайшее к нам зеркало содержат Yandex, и оно иногда разочаровывает. То есть может внезапно замереть. Или в течении пары недель сразу после релиза отдавать на скорости 'ностальгия по 90ым'. На самом деле ситуация не так уж и плоха. Скорости интернета у нас сейчас не такие, чтобы ругать yandex зеркало в медлительности. Чаще всего оно со своими задачами справляется.

Для пользователей реально быстрого интернета одним из выходов было добавление ссылки не на download.opensuse.org, а напрямую на одно из немецких зеркал.

В OpenSuse 11.1 появилась возможность решить эту ситуацию более приемлемым способом. Теперь пофиг, что одно зеркало тормозит - есть еще десятки других. В новом zypper появилась возможность использовать metalink. Для этого просто добавляем стандартные пути к репозитариям, устанавливаем пакет aria2 и устанавливаем переменную окружения ZYPP_ARIA2C

Потестировать: export ZYPP_ARIA2C=1

Если понравилось и хотим использовать aria2 на постоянной основе:
В конец файла /etc/environment допишем строку "ZYPP_ARIA2C=1".

P.S. Проблема уже не актуальна. Но может возникнуть, например, при выходе нового релиза и массового обновления.

Метки: