пятница, 28 марта 2008 г.

Как создать свой проект на SourceForge.net - 3

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

Тема сегодняшнего пояснения - релизы.

Идём в Admin -> File Releases.
Здесь видим File Release Packages. File Release Package - это некоторый набор файлов, которые будут объеденены одной версией, одним Changes Log, Release Notes.

Для начала просто создадим пакет с именем таким же, как у проекта. Потом его можно будет изменить. Но не удалить! Так что не создавайте всякой ерунды.

Итак File Release Package создан. Теперь нужно закачать релизные файлы на сервер. Просто закачайте их на FTP: ftp://upload.sourceforge.net/incoming. Причём включите номер версии в имя файла, так как один пакет не может содержать файлы с одинаковыми именами.

Затем входим в недавно созданный пакет и создаём новый релиз - Add Release.
Там заполняем необходимые сведения о новом релизе, в том числе и выбираем недавно закачанные на ftp файлы.

Всё. Релиз готов. Теперь можно сидеть и наблюдать как растёт количество закачек :)

О телеЕЛЕвидении.

Поучаствовал недавно на съёмках токшоу "Ответный ход" на первом национальном (бла-бла-бла... в народе - БТ). Сходил из любопытства - не часто доводится поучаствовать в съёмках ток шоу, пусть и такого хиленького, как "Ответный ход". Да и перспектива помелькать лицом в ящике немного радовала. Говорить я ничего не собирался, но этого и не требовалось - говорящих хватало.

В общем, тема передачи "Компьютерная и интернет зависимости". Как обычно одна сторона за, другая против. Собственно, уже тут можно было почуствовать неладное. Что значит ЗА? За зависимость? Даёш, мол зависимость в каждую советскую семью? Меня посадили на трибуну ЗА, даже не спросив моего мнения. А может быть я был яростно против ? Впрочем, я не жалуюсь - температура на этой трибуне была приемлимая, кресла умеренно мягкие и никакой софит в рожу не светил.

Съёмка передачи походила примерно так, как я и представлял. Ну о чём тут можно спорить? Одна сторона говорила, что нужно сидеть в интеренете сколько надо, но не больше. Другя, что излишки вредны. Вобщем особого различия мнений я не заметил. Зато атмосфера оказалась немного иной, чем я предполагал. Через некоторое время я забыл о камерах, и был готов плюнуть своё возражение во вражескую трибуну. Но возражать было нечему :( Только одна, пожалуй, фраза вызвала во мне желание достать шпагу. Фраза "Интернет это же большая помойка...". Ну, как говориться, что ожидаеш увидить, то и увидиш... Но микрофона не рядом не случилось, да и тему никто не поддержал.

По ящику я передачу конечно же пропустил. Я и так редко смотрю его, а уж БТ и подавно. У нас дома идёт 46 каналов, а БТ под номером 35. Можно догадаться, как часто я его вижу на экране. Я бы поместил его последним номером исключительно из вредности, но на 40-46 каналах у меня спорт, который я смотрю ещё реже (если такое вообще возможно)

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

пятница, 21 марта 2008 г.

Наша гордость...

Кто ещё не видел нашу национальную библиотеку? Нашу, так сказать, гордость и национальное достояние?
Ну, примерно где-то так:

четверг, 20 марта 2008 г.

Futufama и Linux. Казалось бы, что общего ?

Чем дальше я проникаюсь идеями Linux-а, тем больше он мне нравится. А Windows.... Признаем, господа, что Windows - ботва. Да, легко установить, легко пользоватся. Но она отупляет и ограничивает. Да, да. Сейчас объясню.

Как извстно всем поклонникам мультсериала Futurama, есть 2 версии разбиения серий на сезоны.
1-ый от создателей. Так сказать оригинальное разбиение.
2-ой от телеканала Fox, которая транслировала этот сериал.

Причём, FOX не постеснялся разбить 4 сезона на 5, и более того, пеерпутать некоторые серии !

У меня дома были все серии в разбиении FOX.
Основательно подумав, я решил, что нужно восстановить справедливость, и пересортировать в оригинальном порядке. С другой стороны, FOX порядок тоже хотелось сохранить.
Но, "справедливость прежде всего" подумал я.. и тут меня осенило.

Что за ерунда ? Мы же в нормальной операционной системе. Почему бы не оставить порядок FOX в виде симлинков на файлы в оригинальном порядке?
Сказано - сделано.

Спрашивается, почему в "человеческой" Windows нет ссылок? А вот нечего мозги распускать. За вас уже подумали товарищи из Редмонда...

среда, 19 марта 2008 г.

Покупающим DVD приводы к ноутбуку - предостережение.

С неделю назад я задумался о покупке нового винчестера в домашний сервер. 320 гигабайт забиты непонятно чем, а место нужно. Подумав про 400 я перешёл к 500 гигабайтным винчестерам. Затем плавно перешёл от IDE к SATA+контроллер. Но внезапно передумал и решил купить DVD-RW привод в свой ноутбук (в котором до этого момента был только читающий DVD привод).

Сказано - сделано. На следующий день я быстро обзвонил местные железячные конторы, нашёл нужное - "DVD-RW привод, без обвязки" за 70 у.е. и тут-же купил.
На вопрос "тут будем вставлять, или сами ?", я разумеется гордо ответил, что сам и уехал домой.

Радость была не долгой. На первый взгляд такой-же привод, как старый, но в предназначенное гнездо он просто таки ввалился. Странно, подумал я и вынул привод. Сравнив разъёмы я пришёл в жесточайшее уныние. Разъёмы были разные, да ещё и в разных местах. Погрустив некоторое время, я (что мне свойственно) стал думать. Какой я идиот, почему бы не вставить было на месте ? И какие же подноки обитают на фирме. Обещали что подходит ко всем ноутбукам... Я даже модель своего ноута уточнял по телефону. И тут на тебе - "DVD-RW привод, без обвязки, ко всем ноутбукам...." Стоп, стоп - "без обвязки"... "без обвязки"! Ну так и есть. На моём старом приводе были накручены небольшие (а местами и довольно большие) полоски металла. "Ага !" сказал я и поехал за отвёртками, так как винтики были совсем маленькими. Собственно из за этих винтиков я и не подумал, что "обвязка" может с привода откручиваться. Выглядело как единое целое.

Раскрутил "обвязку", снял переходник для интерфейса, обрадовался и стал прикручивать на новый привод.

"Вот те на...." Мягко расстроился я. Не подходит ! Гадство. Часть железок прикручивается, а чать - нет. Дырки не сходятся...

Вобщем так и живу. Прикрутил переходник для IDE интерфейса и вставил привод в гнездо. Он там конечно болтается, но работает. Уже успел записать 15 DVD дисков и основательно почистить место на сервере.
В перспективных планах - купить подходящую обвязку... Да где её найти....

понедельник, 17 марта 2008 г.

Просто о sed

Почему-то поголовно все руководства по sed, которые мне попадались на глаза, являлись простым переводом соответствующей страницы MAN руководства. Причём некоторые предложения я вообще не мог понять, а они так и продолжали кочевать из одного руководства к другому.

Поэтому я решил написать своё руководство, не такое полное, зато более понятное.

1. Что такое sed, и зачем его едят
Подробностей я здесь разговаривать не буду. В кратце, sed (streaming editor), позволяет обрабатывать огромные объёмы текста, если нужно выполнить над ним шаблонные действия. То есть, заменить то на сё, склеить строки там и сям, удалить то и это.
Как работает sed? Утилита берёт строку текста и пробует к ней применить скрипт редактирования. Затем следующую строку, следующую, и так пока не достигнет конца текста.

2. Командная строка sed
Тут только необходимые основы. Подробности в MAN.
Запускаем sed так:
sed [опции] [имя файла(ов)]
Если имя файла не задано, то читается стандартный вход. Результат подаётся на стандартный выход.
Опции:
-e 'скрипт' - задаёт скрипт обработки данных в виде строки. Скрипт можно написать на нескольких строках!
-f файл-со-скриптом - задаёт файл со скриптом.
-r - использовать расширенные регулярные выражения (более удобно на мой взгляд)
-n - не выводить текст пока мы явно об этом не попросим в скрипте.
Вобщем всё просто.

3. Области редактирования и удержания
sed имеет 2 области (буфера), которые могут содержать текст:
  • Область редактирования (pattern space), куда помещается очередная строка. Именно над этой областью производится редактирование.
  • Область удержания (hold space) - буфер куда можно положить промежуточный результат. Что-то вроде регистра калькулятора :)
4. Синтаксис команд редактирования
Команды редактирования отделяются друг от друго символом ';' или разносятся на разные строки. Однако после некоторых команд, ';' игнорируется (такие команды как a, c, i)

Синтаксис команды довольно прост:
<условие применения><команда><аргумент команды>
Не все команды содержат по 3 составляющие. Единственным пожалуй обязательным элементом является сама команда. Между всеми тремя составляющими можно вставлять пробелы, а можно и не вставлять - как кому нравится.

Условие применения
Условие применения, это некоторое условие, которое указывает, нужно ли применять команду к текущей области редактирования (обычно это очередная строка из файла).
Для людей, знакомых с функциональным программированием, очевидно, что <условие применения> есть ни что иное, как pattern matching
Остальные могут представить команду, как
if(pattern_space like <условие применения>) then <команда><аргумент команды>
То есть, если область редактирования удовлетворяет условию применения, то выполнить команду.

Есть несколько видов условий, наиболее простые это:
  • Номер строки. Применить команду только к определённой строке ($ - к последней строке). Примеры:
    1 - применить к первой строке
    10 - применить к 10-ой
  • Регулярное выражение. Применить команду только если текущая область редактирования совпадает с регулярным выражением. Примеры:
    /^Hello/ - применить к строкам, начинающимся с Hello
Условие может быть диапазоном строк и состоять из 2-х элементарных условий. Первое указывает начало а второе - конец диапазона. Например:
1,10 - строки с первой по 10-ую.
/^A/,20 - строки с строки начинающейся с A по 20-ую строку.
2,+10 - 10 строк, начиная со второй строки.
Однако нужно помнить, что не все команды принимают диапазоны.

Символ ! после условия, инвертирует его.
5,10 ! - обрабатывать всё, кроме строк с 5-ой по 10-ую

Остальные виды адресации можно посмотреть в MAN

Группировка команд
Под одно условие может попадать несколько команд. В таком случае необходимо использовать группирующие скобки - {}
1 {
<здесь несколько строк с командами>
...
}

Команды редактирования данных
Даю наиболее ценные, с моей точки зрения команды. (Остальные можно посмотреть.... да, в MAN)
s/регулярное выражение/замена/ - заменить текст в области редактирования, подпадающий под регулярное выражение на текст замены. Можно использовать \1 ... \9 для ссылки на группы в регулярном выражении. Диалект выражений зависит от опции -r
p - вывести текущее содержимое области удержания. Если не использовать опцию командной строки -n, то эта команда автоматически выполнится в конце скрипта.
b label - перейти к метке label. Если метка не указана - перейти в конец скрипта.
h (H) - скопировать (добавить) область редактирования в область удержания
g (G) - скопировать (добавить) область удержания в область редактирования
x - обменять содержимое области удержания и редактирования.
Менее полезные (для меня по крайней мере) команды.
a - добавить текст после результата работы. \ может экранировать новую строку. Примеры:
aline
a line
a line1\
line2
i - вставить текст перед результатом работы.
c - заменить результат работы на текст.
Пояснения к командам i, c, a. В данном случае результатом называется то, во что в конце концов превращается текущая область редактирования. То есть:
sed -e 'p'
выведет каждую строку дважды. Первый раз по команде p, а второй раз как результат обработки строки(с ней ничего не делалось, поэтому результат = самой строке)
Так вот, результатом в данном случае будет только каждая 2-ая строка.
Или ещё пример:
sed -ne 'p'
результат есть, но он равен "" из-за опции -n, и поэтому каждая строка выводится 1 раз.
Вернёмся к командам i, c, a. Эти команды работают до, вместо, и после вывода результата!
Это значит, что
sed -e 'p;ix'
выведет строку(работа p), x (работа ix) и снова строку(результат)
sed -ne 'p;ix'
Соответственно выведет строку(работа p), x(работа ix) и результат(который пуст из-за опции -n).
Аналогично, c заменяет только результат, а a - добавляет текст только после результата

r Имя-файла - работает как a, но добавляет текст из файла к результату.
R Имя-файла - добавляет только первую строку из файла к результату.

Остальные команды либо не так важны, либо я ещё не осознал их важность.

Есть ещё кроме команд комментарии и метки:
:label
- пометить строку меткой, на которую можно будет перейти командой b
# - начать комментарий до конца строки.

Ну вот вроде и всё.

5. Пример применения
Задача: Удалить все переводы строк, если они не начинают абзац. (Т.е. превратить текст в ряд длинных строк, какждая их которых - абзац)
Подумаем... Будем добавлять строки в область удержания, пока не встретим начало абзаца. Как только абзац начался - выводим из области удержания склеенную длинную строку.
И снова начнём собирать длинную строку.
Ну ещё разумеется нужно обработать последнюю строку, и вывести всё что осталось в области удержания.
Красной строкой будем считать всё что начинается длиннее 1 пробела. Вот такое регулярное выражение
/  |\t/

(без использования опции -r, символ '|' так же необходимо экранировать - / \|\t/)

Итак, при встрече начала абзаца - выведем предыдущий абзац из области удержания:
/  |\t/ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
p # выводим область редактирования (в ней то, что было в области удержания)
s/.*// # обнуляем область редактирования (d не подходит)
x # снова меняем местами обе области местами - и мы готовы дальше работать с первой строкой параграфа
}

Затем нужно добавить текущую строку в область удержания:
H
Ну и, если это последняя строка, нужно вывести все остатки:
$ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
p # выводим область редактирования
}
Теперь всё вместе:
sed -rne '
/ |\t/ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
s/.*// # обнуляем область редактирования (d не подходит)
x # снова меняем местами обе области местами - и мы готовы дальше работать с первой строкой параграфа
}
/ |\t/ ! H
$ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
p # выводим область редактирования
}
'
Да, тут есть ещё что улучшить. Например, если первая же строка - красная (что обычно так и есть), первой будет выведена пустая строка. Так же хорошо бы нормализировать начальные пробелы, то есть заменить любые пробельные последовательности в начале строки на одну табуляцию.
Это можно сделать напустив ещё один sed на выход первого. Предположим, что первый скрипт мы сохранили в файле make-para.sed
cat input.txt | sed -nrf make-para.sed | sed -re '1 d; s/[ \t]+/\t/'

воскресенье, 16 марта 2008 г.

Очеловечиваем лицо df

Давным давно мне хотелось df с человеческим лицом. Если быть более точным, то хотелось как-то увеличить размер первой колонки с файловой системой. На моей системе вывод df выглядел так:
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/hda1 6,1G 4,4G 1,8G 72% /
udev 10M 116K 9,9M 2% /dev
/dev/hda4 22G 14G 7,8G 63% /home
shm 252M 0 252M 0% /dev/shm
/var/data/stardict-dicts.sqfs
44M 44M 0 100% /usr/share/stardict/dic
/var/data/portage.sqfs
40M 40M 0 100% /usr/portage
homeserv:/mnt/sja-129G/gentoo/distfiles
130G 106G 24G 82% /var/distfiles

Как видно, строки со слишком длинными файловыми системами разбиты на 2 части, а мне хотелось непременно в одной.
Изучив исходные коды утилиты, я выяснил, что под файловую систему отводится 20 символов, и изменить это никак нельзя. Нужен был какой-то скрипт, который бы читал вывод df и очеловечивал его.
И этот скрипт был написан! Причём всё с помощью sed - давно хотел освоить эту утилиту, но всё как-то не было оказии.
Вот собственно и скрипт:
# !/bin/sh
df -h | sed -ne '
# if first symbol not space - begin normal line
/^[^ ]/{
# add 20 spaces after first 20 - expand normal string
s/\(.\{20\}\)/\1 /
# exchange with hold space
x
# if hold space non empty - print it
/./p
# goto end
b e
}
# if begin with space - continue of previous line
/^ /{
s/^ \{20\}//
# prepare first part of string
x
# remove added 20 spaces
s/\(.\{20\}\) \{20\}/\1/
# patttern doesnt 40 symbols ?
:a
/.\{40\}/ ! {
s/\(.*\)/\1 /
b a
}
x
# add current line to hold space
H
# next 3 lines remove \n and extra spaces from hold space
x
s/\n//
x
}
:e
# if last line - flush data from hold space if it here
${
# get hold space and print, it it non empty
x
/./p
}
'

Ну да, выглядит страшненько, но зато полон коментариев и работает! Теперь я созерцаю вывод таким:
Файловая система                          Разм  Исп  Дост  Исп% смонтирована на
/dev/hda1 6,1G 4,4G 1,8G 72% /
udev 10M 116K 9,9M 2% /dev
/dev/hda4 22G 14G 7,8G 63% /home
shm 252M 0 252M 0% /dev/shm
/var/data/stardict-dicts.sqfs 44M 44M 0 100% /usr/share/stardict/dic
/var/data/portage.sqfs 40M 40M 0 100% /usr/portage
homeserv:/mnt/sja-129G/gentoo/distfiles 130G 106G 24G 82% /var/distfiles

пятница, 14 марта 2008 г.

Как создать свой проект на SourceForge.net - 2

Продолжаем работу с sourceforge.net

Subversion
Как известно, для управления исходными кодами можно (и даже нужно) пользоваться системами контроля версий. sourceforge.net предлагает для использования CVS и Subversion.
По умолчанию включен только CVS, но я рекомендую воспользоваться более современным и удобным Subversion.

Для этого нам прежде всего нужно его включить в меню Admin -> Subversion, а в Admin -> CVS отключить соответствующий сервис.
Теперь перейдём на Code -> SVN
Прямо в тексте мы найдём строку наподобие этой
svn co https://pathmanager.svn.sourceforge.net/svnroot/pathmanager pathmanager

которая позволяет сделать checkout (забрать исходные коды) с sourceforge.net.
Дальше всё как обычно. Создаём tags, branches, trunk добавляем исходные коды и комитим.
При комите нужно ввести логин и пароль sourceforge.net

(to be continued)

PATH Manager

Написал свою маленькую утилитку для редактирования пеерменной %PATH% в Windows. Причём решил запихнуть этот проект на SourceForge.net
Хороший способ потренироватся в создании открытых проектов.

Посомтреть можно тут

Как создать свой проект на SourceForge.net - 1

Недавно решил создать свой проект на http://sourceforge.net.
Как оказалось, всё не так просто и требует некоторых усилий и разбирательств.
Во первых необходимо зарегистрироватся, и получить доступ к сайту. Тут обычно ни у кого сложностей не возникает.
Теперь, когда мы зарегистрированы на сайте, можно попробовать создать проект. Для этого нужно подать заявку, в которой указать имя проекта, описание, используемые технологии и тому подобное. Не сложно. после чего нужно ждать до трёх дней письма с извещением об создании (или, о ужас, не создании) проекта.
Если письмо долго не приходит, попробуйте залезть на сайт и проверить статус проекта. Одобрения первого проекта по почте я так и не дождался, хотя проект был одобрен и создан. Видимо завалилось в спам.
После создания проекта можно приступить к бурной деятельности.

Traker
Итак. Tracker - система учёта дефектов и feature request. Особых пояснений думаю не требуется, каждый или работал с подобными системами, или слышал о них.
Перво наперво нужно создать категории, группы и учасников. Это можно сделать из меню Admin -> Traker -> Traker administration -> Bugs (например) -> Add/Update Categories, Groups, Users.
При этом группы, категории можно создать и изменить, но удалить нельзя. По этому, не насоздавайте всякой ерунды.

Далее можно приступать к созданию issues, работе над ними и закрытию. Всё это в в меню Traker.

(to be continued)

вторник, 11 марта 2008 г.

Аскетичность холостяцкой жизни

В чём думаете отличие холостяка от человека "при женщине" ?
Одно из отличий (может быть не главное, но совершенно явственное) заключается в смеренном терпении женатого мужчины к наличию бесконечного числа очень важных баночек, бутылочек, пакетиков и тюбиков. Назначение этого строя косметических излишеств совершенно не ясно простому парню вроде меня, но одно совершенно точно - выбрасывать ничего нельзя, даже если очень хочется. Только попробуй и будеш покупать новую полку в ванной, чтобы было куда поставить очередные тюбики, компенсирующие невосполнимую потерю старого.

Доказательства ? Извольте.
Снимаю я квартиру пополам с товарищем, но в дополнение я живу со своей девушкой. (Нет, семья не шведская).

И вот какую картину можно наблюдать у нас в ванной. Красным цветом я старательно обвёл вещи соседа. Остальное наше.





















Ё в firefox

Давно меня раздражало непонимание Firefox-а буквы ё. Оказалось, что всё решаемо и помехой была только моя лень.
Решение как всегда лежало в Гугле, почти на самом виду. Более того, новый словарь одновременно проверяет и русские и английские слова, что очень удобно - не надо переключатся между ними.

Для ленивых даю ссылку.
http://forum.mozilla-russia.org/viewtopic.php?id=15316

понедельник, 3 марта 2008 г.

Приклеивание лого

Некоторые люди любят приклеивать на скриншоты логотип. Чтоб не спёрли, видимо (хотя всё равно ведь сопрут...)
Разумеется это дело можно и даже нужно автоматизировать.
Для этого нам понадобятся 2 программы.
для создания логотипа - gimp
для приклеивания оного - imagemagick
Оба бесплатны и работают под Linux и Windows

I. Создание логотипа.

0. Скачиваем и инсталлируем GIMP

1. Создаём в GIMP картинку и с помощъю инструмента Text создаём надпись желаемого цвета и размера.


2. Удаляем фоновый слой


3. Сжимаем картинку до размера слоя с надписью.


4. Сохраняем как PNG


II. Приклеивание логотипа

0. Скачиваем и инсталлируем ImageMagick

1. Используем его:
composite -gravity SouthEast logo.png input.png output.png
-gravity SouthEast сообщает к какой стороне картинки прилепить логотип. в данном случае к нижнему правому углу.

для группы файлов это будет выглядеть в Linux так:
# for i in *.png; do composite -gravity SouthEast logo.png $i $i.with-logo.png; done

если есть несколько логотипов, и хочется для каждой картинки выбирать тот, что лучше подходит, можно создать все комбинации, а потом удалить не нужное:
# for l in logo/*; do for i in images/*; do composite -gravity SouthEast $l $i $l.$i; done; done

P.S. Надёюсь никто не забыл, что скриншоты лучше делать в png ?

среда, 20 февраля 2008 г.

TV Out в Linux с драйвером xf86-video-ati

Пару дней назад вздумалось мне настроить TV выход с моего ноутбука под Linux.
Перво наперво был проверен сам факт работы шнура и телевизора - из под Windows. Изображение в наличии - 1 штука. Уже хорошо.
Затем последовала перегрузка в Linux и долгие и упорные попытки всё это настроить в xorg.conf, перемежающиеся чтением манов и всего-чего-можно.
Изображение упорно не проявлялось. Была израсходовано куча времени и опций Xorg, но всё в пустую. Тщательное изучение логов Xorg выявило попытки спросить у телевизора возможные Modeline на которых тот может работать, но телевизор молчал как украинец с салом во рту.
Решив, что всё дело в Модлайне (т.е. разрешение и частота обновления экрана), я попытался найти в интернете парочку подходящих и проверить их. Был проверен с десяток различных модлайнов, самых что ни на есть рабочих по уверениям авторов, но увы... Экран телевизора даже не вздрогнул.

Спустя 5 часов экспериментов начали закрадываться сомнения. Самые различные, от "может это не в модлайне дело, а где-то глубже ?" и до "а не пошло бы оно..."
Было принято решение в пользу последнего сомнения, и в 1.30 я пошёл спать. (Это только говорится так - "пошёл". В действительности я просто вырубил ноут и повернулся на другой бок)

Утром была распечатана дока по xorg.conf на 20 страниц и в течении дня прочитана. Вечером я с новыми силами мчался на встречу телеэфиру.
И вновь потерпев неудачу, я практически отчаялся. Хотя, настроить TV Out было архиважно и архинужно, для поднятия престижа Lunux-а и меня, как линуксовода, я принялся отлынивать и читать новости. И о чудо! Провидение само подсовывает мне новость "бла-бла-бла выпущен новый драйвер для видеокарт radeon fx86-video-ati-6.8.0 с улучшенной поддержкой TV Out". Аргх! Как я не подумал о различных версиях драйверов?
Мчимся в портежи (опять таки, просто оборот речи - открываем терминал и cd /usr/portage/x11-drivers/xf86-video-ati), и видим там 2 версии драйвера:
6.6.3 и 6.7.197 (вроде). Установлен конечно 6.6.3. Радуемся и ликуем, пытаемся поставить, упс... нужно размаскировать! ну, допустим.... Наконец драйвер встаёт на место.

Перегружаем X-ы. Телек не работает, но и видео не поломалось. Хорошо....
Погружаемся в man radeon и находим там Option "TVDDCDetect". Воспользуемся ей и.... заработало !
(название опции TVDDCDetect написано по памяти, так что перед использованием стоит заглянуть в man radeon)
Отличненько. Теперь скачиваем релиз 6.8.0 и ebuild к нему, устанавливаем ebuild в portage overlay, и пытаемся его emerge. Всё проходит удачно, тв-выход работает, видео не сломано.

Пытаюсь разобраться в том, что получилось. Получается, что если S-video коннектор подключен, то X определяет это и стартует ноут и тв в разрешении 800х600
Не очень то удобно при родном разрешении ноутбука 1400х1050... Продолжая изучать матчасть, нахожу утилиту xrandr, которая позволяет на лету включить S-video, при этом с возможностью клонировать не весь экран, а только часть. Т.е. на ноуте разрешение 1400х1050, а на телевизоре видно только прямоугольник 800х600 верхнего левого угла.
Примерно так это происходит:
xrandr --addmode S-video 800x600
xrandr --mode S-video 800x600


Теперь уже всё хорошо, кроме 3 вещей.
1. Не выяснено, как включить не режим клонирования, а отдельный экран (windows может, что наводит на размышления и надежды)
2. Режим Overlay не работает на телевизоре. Т.е. запуская mplayer на телике видим чёрный прямоугольник. Частично решается путём использования mplayer -vo x11 Но режим вывода -vo x11 не позволяет растянуть изображение (или я ещё не нашёл как)
3. Драйвер определяет что LVDS панель ноутбука имеет расширение 1400x1050, но упорно выставляет 1024x768. Нужно ковыряться в драйвере. Пока что простейшие попытки добавить отладочных сообщений в лог не увенчались успехом.

Продолжение следует....

четверг, 7 февраля 2008 г.

Муха по полю пошла, муха...

... денежку нашла. Резвая вобщем муха. И наблюдательная! Найти денежку не так-то просто на поле - поле оно ого-го, а денюжка она ути-пути маленькая. Впрочем не такая уж и маленькая, если хватило на самовар, но это в долларовом эквиваленте, а не по размеру.

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


Вот и фото.

пятница, 1 февраля 2008 г.

Я - хищник ?

Вы — Хищник.
Вы — Хищник.


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

Пройти тест "Кто вы — Чужой или Хищник?"

воскресенье, 6 января 2008 г.

Дейтвительно краткое введение в mencoder

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

Скопилось у меня дома порядочное количество видео, снятое фотоаппаратом. Проблема заключалась в том, что видео было пожато кодеком mjpeg (ну или как там его), смысл которого заключается в том, что каждый кадр это обычный JPEG, что разумеется плохо сказывается на размере файла. Формат звукового потока тоже не радовал - обычный, не пожатый PCM. Клипов накопилось гигабайт так на 3-4, нужно было что-то делать.

Разумеется есть хорошая программа VirtualDubMod, с которой я уже работал. Но проблема заключалась ещё и большом количестве файлов. VirtualDubMod вроде как предлагает какие-то возможности пакетной обработки, но я решил изучить mencoder, который как известно является утилитой коммандной строки. Возможности пакетной обработки так и просятся в руки.
Ещё одним плюсом была возможность использовать mencoder в Windows(на работе) и в Linux(дома).

Сейчас я расскажу пару вещей, которые как мне кажется являются основами основ мироздания и mencoder-а.

Собственно амбула, или содержательная часть.

Что же нужно задать, что бы сконвертировать видео ?
1. Источник данных
2. Фильтры обработки (ресайз, кроп, подавление шума)
3. Кодек для сжатия звука.
4. Опции сжатия звука.
5. Кодек для сжатия видео.
6. Настройки сжатия видео.
7. Параметры выходного файла (имя, fourcc код)
Немного кофе/чая не помешает.

Теперь немного подробнее обо всех пунктах.

1. Нужно указать источник видео потока, который мы хотим конвертировать. Задаётся так-же как и в mplayer.
Пару простых примеров:
$ mencoder source.avi # avi файл на вход
$ mencoder dvd://1 # первый тайтл DVD на вход
$ mencoder dvd://1 -chapter 3 # первый тайтл, 3-ий чаптер DVD на вход (хм, как же тайтл и чаптер на русский переводятся ?)
$ mencoder dvd://1 -dvd-device /home/pupkin42/from_sidoroff/futurama # первый тайтл DVD на вход с указанием DVD устройства (тут просто директории с копией DVD)
так-же можно задать и другие источники - потоковое видео из сети, с TV-тюнера, DVB карты и т.д. Подробности в man

2. Можно задать различные фильтры, например для ресайза, кропинга, удаления шумов и т.д.
Подробности не привожу. По началу они не нужны, а потом можно посмотреть в man. Изучение можно начать с опции -vf cropdetect

3. Задаём кодек для сжатия аудио потока:
$ mencoder ... -oac mp3lame
-oac видимо означает output audio codec
Mencoder может кодировать звук несколькими кодеками. Один из них псевдокодек - copy. Он просто копирует входной поток в выходной, не производя никаких разжатий-сжатий.
Полезен в случае, если имеющееся аудиодорожка уже сжата как надо. Процессор при этом почти не используется.

4. Задаём опции для аудио кодека
$ mencoder ... -lameopts cbr:br=96:mode=1
тут после -lameopts идут опции кодека. Для другого кодека ключ будет другим. (Что-то вроде -anotercodecopts)
cbr означает константный битрейт
br=96 - битрейт в 96 килобит в секунду,
mode=1 - режим стерео joint

5. Задаём видеокодек.
$ mencoder -ovc lavc
(кодек lavc сокращённо от libavcodec)
Так же как и в случае с аудиокодеками, видеокодеков несколько. lavc - один из них.

6. Самое главное. Задаём настройки кодека. Для lavc кодека это будут значения ключа -lavcopts
$ mencoder ... -lavcopts vcodec=mpeg4:vbitrate=5000
vcodec - задаём формат выходного видеопотока. libavcodec может сжимать в разные форматы. В данном случае выбираем mpeg4
vbitrate=5000 - битрейт выходного потока. Тут я объяснять не буду, тема отдельной статьи. Но скажу, что это число всего-лишь верхний потолок. Если кодеку нечего будет жать, то он уменьшит битрейт. Так что указав, например, 10000, можно ожидать, что видео будет пожато в наилучшем виде, и при реальный битрейт может быть например 2000.
Обычно битрейт фильмов где-то на уровне 900-1500.
Ещё можно добавить следующие опции(что они делают я не в курсе, но все советуют и я буду)
-lavcopts vcodec=mpeg4:vbitrate=5000:mbd=2:v4mv:trell

7. Укажем имя выходного файла
$ mencoder ... -o output.avi
Так же для того, что бы некоторые плееры не ругались на неизвестный формат, можно указать FOURCC код выходнорго потока как DIVX
$ mencoder ... -ffourcc DIVX

8. Собираем все опции в одну строку и получаем что-то вроде:
$ mencoder dvd://1 -dvd-device /home/simpsons
-oac mp3lame -lameopts cbr:br=96:mode=1
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:mbd=2:v4mv:trell
-o simpsons-001.avi
-ffourcc DIVX

Пару слов о многопроходных конвертированиях.
Добавив к опциям кодека опцию vpass=1 (для первого прохода) и vpass=2(для второго) можно улучшить качество картинки, за счёт того, что кодек будет лучше знать где стоит пустить больший поток, а где поменьше. Тот-же пример с симпсонами:

$ mencoder dvd://1 -dvd-device /home/simpsons
-oac copy
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:mbd=2:v4mv:trell:vpass=1
-o /dev/null
В первом проходе аудио не конвертируем. Сделаем это в последнем проходе.
Получающийся файл нам не нужен - отправляем его в /dev/null (в Windows -o NUL)
mencoder создаст файл divx2pass.log, в который запишет информацию о каждом кадре.

$ mencoder dvd://1 -dvd-device /home/simpsons
-oac mp3lame -lameopts cbr:br=96:mode=1
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:mbd=2:v4mv:trell:vpass=2
-o simpsons-001.avi
-ffourcc DIVX
Во втором проходе mencoder анализирует log файл и более оптимально перераспределяет видео поток в рамках выделенного битрейта.
Аудио разумеется нам нужно, выходной файл тоже. Дополнительно установим FOURCC код в DIVX, что-бы не было проблем.

Как можно заметить, кодирование с vpass=N не отличается от обычного кодирования, за исключением одной простой штуки:
vpass=1 заставит кодек записать log файл
vpass=2 говорит кодеку прочитать log файл, и использовать данные из него
vpass=3 и читает и пишет лог одновременно, ещё более его облагораживая.
Таким образом легко догадаться, что для многопроходной конвертации нужно сделать проходы с vpass=1, vpass=3, ... vpass=3, vpass=2

Хочу предостеречь от паралельного запуска нескольких многопроходных конвертаций в одной рабочей директории. Кодек обязательно запутается где чей log файл. В результате будет создан неверный выходной файл. Я напоролся на это, решив помочь серверу конвертировать симпсонов своим ноутбуком, и запустил конвертацию другого DVD но в той-же директории. В результате пол дня работы вылетело в трубу, пришлось всё пережимать.

Конец всех амбул, или проще говоря эпилог.
mencoder имеет громадное количество опций, и разобратся в них с наскоку очень сложно. Надеюсь моя статья немного поможет быть "в теме"

P.S. Кстати о симпсонах. Я их таки сконвертил, все 4 диска по 26 серий на каждой. В линуксе это выглядит так:
for dvd in simpsons1 simpsons simpsons3 simpsons4; do
for title in $(seq 1 100); do
mencoder -dvd-device $dvd dvd://$
title -o $dvd-$title.avi (... параметры конвертации ...)
# второй проход и прочая работа
done
done
Проще говоря конвертируем все все копии 4-ёх DVD-шек, в каждой тайтлы от 1 до 100. На дисках их было по 25-26, и оставшиеся 27-100 просто отваливались с ошибкой, не создавая выходного файла, что меня вполне устраивало. Каждый тайтл - один мультфильм.

суббота, 22 декабря 2007 г.

Плавленный сырок "Дружба" - закусывайте.

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

Легко сказать, да трудно сделать. Твёрдого сыра нету, нетути! Конечно, я был не во всех магазинах в которых бывали министры всяких экономик, заявляющие потом, что всё у нас есть. А может плавленный сырок "Дружба" был принят ими за нормальный сыр? Ха. Ха. Ха. Опомнитесь господа министры! "Дружба" скорее родственна пластилину, но уж никак не сыру. Вчера я этого к сожалению не знал...

Но я отвлёкся. Для макарон с сыром были куплены: макароны, тушёнка с мясом и "Дружба".

Поскольку плавленные сырки особенно сопротивляются истиранию на тёрке, было принято политическое решение - дружбу заморозить в морозилке.
Что и было незамедлительно сделано.

Что-бы приготовить вкусные макароны, нужно их сварить. В воде. Тушёнку обжарить до состояния, приятного глазу. Для меня это состояние: "да шож ты делаеш, гад, ты же её спалил!". После готовности воду из макаронов слить и смешать с обжаренной тушёнкой. Ну а теперь можно и задуматься, а солили ли мы воду? Самое время, между прочим - всё ещё можно в тихую исправить и не получить по голове от близких и родных.

Затем идём спать, так как есть на ночь - грех.

Утром отпиливаем от общего комка макарон кусочек (небольшой такой, чтоб поместился в микроволновку), разогреваем его и посыпаем тёртым сыром. Пармезан подойдёт. Если нет пармезана, то его НЕ заменит замороженный плавленный сырок. И это надо помнить. Желательно всю жизнь.

Вот такой несложный рецепт. Но вот о последних строчках я то и не знал! Поэтому достал кирпичик "Дружбы" из морозилки и начал натирать. Натирался он надо сказать лучше, чем не замороженный, но хуже чем сыр. И вот, когда он растаял на макаронах, я их и попробовал. Вкус, как у макарон с сливочным маслом. Противный кисловатый привкус. О внешнем виде лучше и не спрашивать, всё равно не расскажу.

Вывод значится такой: "Плавленный сырок "Дружба"! Не пейте чернила без закуски."

четверг, 29 ноября 2007 г.

Оруэлл отдыхает на скотном дворе

Уж не знаю, что там писало министерство правды году этак в 1984, но вот что пишут в Беларуси в 2007:

Депутатам 1000 долларов на жизнь не хватает

Даже депутаты начали жаловаться на высокие цены и заявляют, что им не хватает зарплаты, которая, кстати, превышает тысячу долларов в эквиваленте.
и

Министр экономики: обывателям кажется, что цены повышаются, но это не так

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

пятница, 23 ноября 2007 г.

Баг с раскладками в Firefox исправлен!

Ура, ура, ура. Шестилетний баг с раскладками в Firefox исправлен.

Настораживает правда фраза
Патч написанный Олегом Крыловым получил одобрение разработчиков и был включен в код, а значит Firefox 3.0 выйдет уже без этой проблемы.
А 2.x как же ? Неужели они промаринуют баг до релиза 3.0 ?

Всё-таки я надеюсь на исправление в 2.0.0.10. Эта ошибка уже конкретно достала. Особенно невозможностью скопировать что-либо в буфер обмена.

Клац здесь, клац там. Аргх.... Раскладка то русская.