Блог:Виталий Филиппов

Материал из YourcmcWiki
Версия от 20:47, 2 января 2011; VitaliyFilippov (обсуждение | вклад) (переименовал «Блог:Заглавная страница» в «Блог:Виталий Филиппов»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Технические вопросы и вменяемые заметки от меня, Виталика.

У меня, конечно, уже есть блог Ljuser.gifsimply_a_man.

2011-06-09 tdpkg

Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов tdpkg !

Просто каким-то дурацким образом dpkg хранит базу в тыщщах мелких файлов в /var/lib/dpkg/info/, без какого-либо индекса ВООБЩЕ. В итоге, когда установлено 4500 пакетов, как у меня, первый запуск сильно тупит, потому что читает все эти тыщщи файлов в кэш (секунд 30-40 занимает легко).

Так вот, некто придумал хак — засунуть в LD_PRELOAD библиотеку, которая лично обращения к /var/lib/dpkg/info/ будет подменять на чтения нормальной базы данных — SQLite или TokyoCabinet (последняя — это «правильный BDB»).

Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен уметь сам, но раз пока никто не написал…

В общем ставим, прописываем в ~/.bashrc следующие строчки, и радуемся жизни:

alias dpkg="sudo LD_PRELOAD=<path_to_libtdpkg>/libtdpkg.so dpkg"
alias apt-get="sudo LD_PRELOAD=<path_to_libtdpkg>/libtdpkg.so apt-get"

UPD: ещё нужно применить мой патчик, убирает мусор с STDERR и добавляет плюс один хак, чтобы tdpkg работал с последними dpkg, которые любят делать ioctl(FIGETBSZ).

2011-05-13 Пилим GiST

Пиля K-D-B-дерево для GiST'а в PostgreSQL, потихоньку его вкуриваю… Интересные вещи о нём:

  • В 9.1 (сейчас бета), как я уже написал, есть поддержка поиска ближайших соседей, то есть просмотра дерева поиска в порядке возрастания удалённости от искомого элемента.
  • Один из двух авторов — тот самый «индеец», Олег Бартунов.
  • Размер страницы индекса в постгресе — обычно 8 Кб.
  • Чтобы реализовать канонiчное KDB-дерево, а точнее — любое дерево поиска, в котором следующее разбиение пространства зависит от предыдущего, GiST нужно допилить (конкретно функцию gistinserttuples), чтобы picksplit’у передавался родительский узел, потому что в оригинале ему только передаётся список самих элементов, которые нужно разбить на две группы. Вот я щас как раз это допиливаю.
  • Предикаты на нелистовых страницах модифицируются не после вставки элемента в листовую страницу, а до! Оно сразу, когда ищет, куда бы вставить элемент, сначала дёргает по всем элементам страницы penalty, выбирает элемент с минимальным, потом вычисляет union предиката и нового вставляемого элемента (O_o), и сохраняет, если в итоге получается другой предикат. Чуть-чуть не совсем логичная схема, если в вашем индексе внутренние и листовые узлы хранят разные типы ключей, но реализацию упрощает. Разные типы — то есть не как в R-дереве — в листах квадратики и во внутренних квадратики, а как например в KDB — в листах N-мерные вектора, во внутренних узлах подпространства.
  • При вставке весь путь до листового элемента лочится на чтение (совместной блокировкой), а сам листовой элемент — на запись (эксклюзивно). То бишь допиливать gistinserttuples, чтобы она читала родительскую страницу, можно смело, потому что она залочена на чтение.

2011-05-06 Подборка башинок про Бин Ладена

  • Усама Бин Ладен — универсальное средство поддержки предвыборной компании! Главным плюсом которго является способность громко и бесследно умирать когда оно надо.
  • Американцы убили Осаму бин Ладена выстрелом в голову, сделали тест днк с шансом в 99.9 %, что это он, и выбросили тело в море. Уже шикарно звучит, но объясните мне хоть кто-нить, с чем они сравнивали образец днк???
  • Усама бин Ладен в своем видеообращении лично подтвердил слухи о своей гибели.
  • «В следующий раз Усаму бин Ладена убьем мы», — пообещал Д.Медведев.
  • Предстояшие выборы в президенты США ознаменовались уже ставшим традиционным убийством Бен Ладена.
  • Актёр, игравший Бен Ладена, разорвал контракт на съёмку в новостях. Сценаристам это не понравилось.
  • «Кто проживает на дне океана?! Бин-Ладен Комуфляжные-Штаны!»
  • Мученики (шахиды), согласно исламу, попадают в рай, где их ждут 72 девственницы. В созданном 2 мая твиттере «Призрак бин Ладена» есть, в частности, такое сообщение: «Осталось 70 девственниц. Мне нужно покурить и вздремнуть».
  • — что случилось с Бен Ладеном?
    — он утонул
  • Cегодня Обама заявил, что вместе с Бин Ладеном и его сыном удалось также уничтожить и захоронить в море Дарта Вейдера, корабль Чужих и Доктора Зло.
  • — Убили Бин Ладена
    — Ну сколько можно, неужели они не знают, что сначала нужно убить хилера, который его ресает!
  • Бена Ладена нельзя просто так убить. Сперва нужно уничтожить все его крестражи.
  • — Поговаривают, что операцию по устранению бин Ладена совершил один человек. Чак.
    — если бы это делал Чак, то Пакистан пришлось бы заселять заново.
    — не беспокойтесь, он уже заселил.
  • — Кто же теперь получит обещанные $25 миллионов за устранение Осамы Бен Ладена?
    — Судя по всему, пресс-служба Барака Обамы.
  • — Бен Ладена грохнули. Слыхал?
    — Ага, чёт я за Санта Клауса теперь переживаю, его ещё легче выцепить, хуль там Лапландия размером.

2011-04-19 Герб

Верховный муфтий Центрального духовного управления мусульман России Талгат Таджуддин выступил с предложением добавить на герб России полумесяц в качестве символа ислама. По мнению Таджуддина, полумесяцем следует заменить крест на короне, венчающей одну из голов двуглавого орла.
  • А в «Спокойной ночи, малыши» заменить мерзкого Хрюшу на барашка Абдуллу…
  • Добавьте на герб хуй. Именно его положили на страну 99,9 % ее населения.
  • Еврейская община России считает, что орлу на гербе страны требуется сделать обрезание и отпустить пейсы.
  • Буддисты России предложили посадить герб России двуглавого орла в позу лотоса.
  • МТС потребовало добавить яйца орлу на гербе Российской Федерации.
  • Сомалийские пираты не остались в стороне и предложили заменить двуглавого орла на Веселого Роджера.
  • Россияне требуют убрать долбоёбов из страны нахуй. А герб оставить как есть.
  • Астрологи объявили неделю одинаковых шуток о гербе России?

2011-03-30 Galaxy S vs пролюбленный Liquid

Acer Liquid успешно пролюблен в Банско на склоне номер 5.

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

Пришлось быстренько выбрать, какого андроида купить, очень прошиваемого, желательно не HTC и чтобы побольше было кастомных прошивок и ядер.

Выбрал Samsung Galaxy S (который I9000).

  • Весьма шустрый
  • AMOLED действительно A (активный), чёрный цвет — идеальный
  • Тачскрин как будто чувствительнее (?)
  • Динамик отличный, на ликвиде — пищалка
  • Штатная прошивка неплоха, правда экран блокировки менее удобен, чем стандартный. Звонилка с одной стороны выглядит прикольно, индекс контактов сделан лучше и поиск вынесен в сразу видимое поле, с другой — при наборе последних номеров нужно совершать больше нажатий, что не круто. Но это я, наверное, заменю вскоре на стандартное Froyo-вское.

До этого были мысли о Motorola Defy, потому что она водонепроницаемая (круто же). Правда у неё не гигагерц почему-то, как и у liquid’а — вроде проц стоит, который гигагерц умеет, а стабильности системы добиться производитель не осилил или хз что он там себе думал, в итоге работаем на пониженной частоте.

Так вот, В ЖОПУ DEFY, и я бы даже сказал, В ЖОПУ MOTOROLA — они девайсы блокируют от перепрошивки. Загрузчик Defy, например, так и не поломали пока. То есть, наверное, можно (просто ещё не добрались), но это ведь пока что, ведь если мотороле дать возможность устроить полный trusted computing, они устроят — уроды. Так что давайте им скажем своё «ФЕ», и не будем их покупать :)

А вообще — жалко, что Linux не под GPLv3, а Андроид вообще не под GPL. Это даёт ананьные возможность производителям.

2011-02-18 Наболевшее об Opera

Opera, Opera — мой любимый браузер, но команде я бы порекомендовал тестировать побольше, а выкладывать поменьше.

Причём тестировать не «модных» сферических коней в вакууме — всяких юнайтов, «гипножаб» и «бублики» и т. п., а самые базовые фичи — корректный рендеринг простейшего HTML и простейшее открытие страниц.

Если конкретно, то:

Во ВСЕХ билдах Оперы под Linux новее 10.63 разломаны настройки шрифтов — либо они вообще не учитываются, либо учитываются, только если их передёргивать каждый раз при старте браузера.

Во многих билдах Оперы под Linux происходят Странные Баги с зависанием загрузки различных страниц, такие, как на этом скринкасте. Это через прокси-сервер. Скрепя сердце я всё-таки пользуюсь 10.6, однако, чтобы Оно Нормально Работало на рабочем компьютере, мне пришлось поднять локальный squid с прозрачным проксированием. Послушать со стороны — удивительно, каким фанатом надо быть, чтобы такие извращения предпринимать.

Я считаю, что при наличии таких багов выпускать релизы, называемые «стабильными», просто недопустимо. Хотя, может быть, с тех пор баг всё-таки исправили. Но как же об этом узнать при полном отсутствии обратной связи? Публичного баг-трекера нет, на баг-репорты в комментах к блогу Opera Desktop Team никто не отвечает. Там отвечают только модераторы, если ты не дай бог (!) оставишь два одинаковых коммента с одним и тем же багом, воспроизведённым в двух разных билдах, к двум разным постам, относящимся к этим билдам. На баг-репорты, отправленные в закрытый багтрекер, не отвечают даже после того, как баг будет реально исправлен. Например, то ли 3, то ли 4 года назад я отправил туда баг: иконка в трее под Windows показывает письмецо, если есть «нетронутые» письма (которые ни разу не смотрел), а под Linux’ом — непрочитанные (на которых руками не нажал «Прочитанное»). Что бы вы думали, где-то через 3 года его исправили, но мне об этом, конечно же, никто не сообщил.

А например, в новейших 11.10 происходят тормоза с Google поиском, по крайней мере, при установленном user-javascript’е GoogleSrchUIMod.js. Как вы умудряетесь постоянно всё ломать, дорогие разработчики?

2011-01-02 Идея: электростанция от колеса автомобиля

Автономные бензиновые/дизельные электростанции стоят немало. На 4-5 кВт уже гарантированно дороже 30-40 т.р. Причём по всей видимости немалую часть стоимости составляет бензиновый двигатель.

Так вот идея, наверняка приходившая в голову не мне одному: было бы круто сделать портативную электростанцию 220 вольт с приводом от двигателя легкового автомобиля.

Только вопрос: а как? И начинается полёт не очень инженерно грамотной фантазии:

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

Где взять сам генератор? Вариант: купить. Удобно, потому что готовый и однофазный, только привод прикручивай. Мега-круто было бы приспособить для этих целей кластер из обычных автомобильных генераторов (типа ИСКРА 120А для жигуля, которая стоит 2700 руб), но с ними куча проблем:

  • 14 вольт.
  • Постоянного тока.
  • Получить 220 вольт… Это ладно — можно переделать регулятор напряжения / перемотать витки на обмотке возбуждения.
  • Необходимость начального возбуждения. Хорошо, аккумулятор никто не отменял.

Путь № 1:

  • Убираем выпрямитель — ОК, ток переменный, но … трёхфазный.
  • И что ещё важнее — хрен знает, какая у него частота. Точнее, этот хрен сильно зависит от скорости вращения.
  • Стабилизировать частоту можно попробовать путём стабилизации оборотов с помощью вариатора от скутера. Но как после этого из трёхфазного получить однофазный ток — неизвестно!
  • Кроме того, хрен его знает, как синхронизировать несколько генераторов.
  • ⇒ не решение!

Путь № 2, в данном случае наиболее нормальный:

  • Не убирать выпрямитель, получить сколько-нибудь вольт (больше ста) стабилизированного постоянного напряжения на выходе.
  • Можно смело объединять генераторы в кластер, потому что напряжение постоянное.
  • Использователь умформер (мотор-генератор) для преобразования напряжение из постоянного в переменное однофазное заданной частоты.

Но всё равно — геморроя с автогенератором получается больше, чем выгоды :(, и установка получится немаленькая.

2010-11-26 Идея: подвесочные датчики

Берём 4 энкодера (датчика угла) поточнее. Или наоборот, не поточнее, а попроще. Но видимо бесконтактных в любом случае, т.к. нагрузки. Сооружаем 4 катушки, на которые будет наматываться какая-нибудь леска, плюс в катушки вставляем возвратные пружины, которые будут стараться леску втянуть. Засосываем в закрытые корпуса, чтобы наружу торчала только леска и проводки.

Для обработки данных берём контроллер семейства dsPIC33F (оно вроде и ШИМ понимает, и несчастные "2-bit gray codes"), пишем для него прошивку, пишем софт на комп. Получаем некую мистическую хреновину, которая может строить графики длин вытянутой части тросов, т.е. получается 4 одновременных измерителя длины.

Идея применения: полученные датчики монтируются под опоры стоек в машине, леска цепляется за кулак колеса и мы измеряем графики длины стоек в реальном времени. То есть, тестируем подвеску с некоторой инженерной точки зрения, не снимая её с машины :)

2010-07-15 SimplePie - ещё одна ОО говёха

Всё забывал написать, что SimplePie - говно!
Или точнее, отличный пример монструозной объектной ориентированности на пустом месте.

SimplePie — это RSS-парсер на 15000+ строк. 28 классов. Ухаха. Simple. «Статуя Победитель — а теперь представьте, как выглядит побеждённый!» (c)

И при этом нельзя вкрутиться (нет точек расширения) чтобы добавить в запрос свои заголовки, или опции для cURL’а. И нельзя, например, задать опцию, чтобы поменять список тегов, принудительно удаляющихся из текста RSS.

Хыхы. Вопрос: нахера там столько кода и что он делает?

2010-07-05 Vitaphoto V3 (1.4)

Итак, представляю: Моя инженерная мысль разродилась очередной версией Vitaphoto: V3 или же 1.4. Качества:

  • «Скажи синтетическим ключам „нет“!» Фотографии и альбомы идентифицируются по именам, а не по ID’шникам.
  • Обычная страничная навигация заменена разбиением по датам.
  • Огламуренный интерфейс, дизайн на флоатах и несколько размеров фото на выбор (viva большие мониторы!). Дошло аж до Drag’n’Drop’а.
  • Поддержка видео.
  • Убран «язык запросов по тегам». Заменён выборкой по нескольким тегам.
  • Убраны «альбомы». Заменены выборкой по нескольким тегам.
  • Убрана собственная авторизация, добавлена «глобальная» через расширение MediaWiki (вот оно).
  • Добавлено облако тегов.
  • Поддержка просмотра полной EXIF-информации.
  • Переписана на Sway Solstice, причём, вместе со ScaleDaemon’ом. Кода меньше раза в 3, он понятнее и расширяемый, а работает лучше. И апача больше тоже нет.
  • Живёт по адресу http://vmx.yourcmc.ru/vitaphotov3.

Почему идущая после 1.3 версия 1.4 называется также V3? Ответ кроется в версии схемы базы данных — это её третий вариант с момента зарождения. Первая база называлась просто «vitaphoto» (Vitaphoto 1.0, 1.1), вторая несовместимая с первой и заполняемая заново (Vitaphoto 1.2, 1.3) «vitaphotov2», третья и теперешняя «vitaphotov3».

Что можно сделать с Vitaphoto V3 (1.4)?

Начиная с сегодняшнего дня, старая версия (1.3) законсервирована, не обновляется, и пока что временно осталась по адресу http://vmx.yourcmc.ru/vitaphoto-legacy.

2010-06-24 Дневник SIV-2 Вектор-Самара

Хроники прохождения SIV-2 Вектор-Самара (15-21 июня 2010). SIV, если кто не знает — Simulation d’Incidents en Vol — «симуляция инцидентов в полёте», курс по превращению нештатных ситуаций в штатные + акробатике, под руководством Бобра.

Много букв, всё под катом! Разделы:

→ продолжить чтение…

2010-06-09 О торговле в Векторе

Сам летаю у Волкова на лебёдке, тема «Вектор — барыги» на парафоруме не раз поднималась, оспаривалась и обижалась векторами — все вы такие покупатели нехорошие, мы вообще по доброй воле возим, а можем и не возить, вы попробуйте привезти дешевле…

Но ведь интересно — возникают же у людей такие мысли, неоднократно. Значит, неспроста!

Что, конечно, настораживает в первую очередь — цен на сайте в основном нет. Да-да, недолюбливаю людей (на парафоруме таких много, далеко не один вектор), которые не публикуют цен открыто, и ещё приговаривают «цены в личку, этика бизнеса». Фигизнеса. «Цена договорная» это называется. То, что официально никто не торгует, я уж и не говорю.

Здесь, кстати, можно очень положительно отметить http://airsport.ru/ - у них на сайте есть прайс-лист! Действующий! Там правда тоже есть прикол — не написана валюта :))) по крайней мере, не видна с первого взгляда на сайте и в PDF’ке прайс-листа их нет :) но там баксы, что всегда известно, и всегда честно сообщается.

А второе по поводу Вектора… Ну вот пример: вчера договорился о покупке запаски Sky Country, ок, «завтра позвони по этому телефону, я тебе скажу где забрать». Справедливости ради, договорился не с Волковым, а с Тохой, он обычно не занимается продажей. Сегодня звоню — «а её уже забрали» O_O. Вроде и нормально, это их полное право, но вообще-то так дело не делается. Я говорю «ну вообще это как-то не очень хорошо», мне — «ну вообще-то я по этому поводу не очень расстраиваюсь». А на коммент в ЖЖ говорит, мол я вообще по доброй воле решил продать, а мне в душу плюют постоянно такие как вы, потребители. Ну не продавай, какие проблемы, не будет никто плевать. Но ты же сам решил продавать, значит, это в твоих интересах? Ну и делай это нормально…

Ещё раз повторю — это его полное право, кому продавать, решает он. Но всё равно нелогично. Лично я в такой ситуации, даже если бы не занимался продажей оборудования, всё-таки когда позвонил бы ещё один человек, сказал бы, что её по идее сегодня уже забирают и отдал бы приоритет тому, кто позвонил первым. Объективно.

Это как курьер из интернет-магазина — это его полное право, он может и не звонить заранее, а просто приехать, доставить и позвонить по факту — «вы заказали с 9 до 20 доставку, значит, должны быть дома». Но положительных эмоций это, скорее всего, не вызовет, и обычно все звонят заранее, что экономит всем нервы.

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

2010-05-17 Заметки Об Идиотизме - Bugzilla 3.6: New Extensions System

"In accordance with UNIX philosophy, Perl gives you enough rope to hang yourself." — Larry Wall

(«Согласно философии UNIX, Perl предоставляет пользователю верёвку, достаточно длинную для того, чтобы на ней можно было повеситься.»)

…И программисты это делают очень часто. Прекрасная иллюстрация этой цитаты — новая система расширений Bugzilla 3.6. Если кратко, то я даже не знал, что в перле можно сделать такое извращение. И лучше бы не узнавал.

Если расписать подетальнее, идея у авторов была такая — пусть каждое расширение будет подклассом Bugzilla::Extension, вся его конфигурация будет задаваться константами в этом классе, а все хуки (hooks) будут методами этого класса. Идея на первый взгляд неплохая, однако во-первых ведёт к различным проблемам сама по себе, а во-вторых имеет ужасную реализацию.

Старая система расширений была, конечно, не очень хороша, но зато очень проста: есть папочка со скриптами *.pl, каждый из которых представляет 1 (один) хук, то есть по сути 1 (одну) функцию, вторая папочка с хуками в шаблоны, действующими по такому же принципу (положил файл, получай установленный хук), третья папочка «lib», в которую можно складывать свои модули, и т. п. Её тоже уже пару раз рефакторили, в конце концов она пришла к описанному виду.

→ продолжить чтение…

2010-04-25 И ещё авиамодельные видео

Теперь на тему Thrust Vectoring (управления вектором тяги) :)

Вот моделька F-22 с thrust vectoring’ом :)

Вот ещё некая моделька, хитрая! С дополнительным оперением типа схемы «утка» и гироскопами. «Колокол» чувак, конечно, не исполнял, но что-то мне подсказывает, что моделька его осилит :)

2010-04-08 Статистика голосов Бездны

Я ж когда Бездну читаю, её ещё и «модерирую» — помечаю звёздочками и пятёрками. Пятёрки бывают редко (их примерно 0.5 %), звёздочки — довольно часто (примерно 20 %).

Так как Бездна, теоретически, имеет собственную метрику — количество голосов пользователей, случайно прочитавших цитату — любопытен процент «хорошего» в множествах записей с разным количеством голосов (с тем, каким оно было при попадании в RSSproxy).

Вот я и построил гистограммку:

Вывод — максимум хороших записей в районе 30-и голосов, и в сторону меньшего числа голосов качество убывает даже немного медленнее, чем в сторону большего. А записи с большим числом голосов — похоже, обычное УГ.

2010-03-30 FFmpeg и именованные каналы

Прикольная фишка консольного ffmpeg’а — его можно использовать вместе с именованными каналами (named pipes) для нарезки и слияния видео.

Шаг первый: создаём именованные каналы. А допустим, у нас ещё и аудиодорожек несколько.

Note.svg Сначала я хотел написать, как завещал великий FAQ — по одному файлу на каждую дорожку, то есть целую кучу: file1.v file1.a1 file1.a2 file2.v file2.a1 file2.a2 file.v file.a1 file.a2. Однако обнаружил, что AVI-контейнер прекрасно переживает конкатенацию и что в этом случае результат получается даже лучше — на мгновении, когда Балу дёргает Багиру за хвост в процессе пения Bare Necessities, не возникает никакого затупа. А в случае с кучей raw-файлов — возникало. Так что попробуем AVI.

mkfifo file1.avi
mkfifo file2.avi
mkfifo file.avi

Шаг второй: запускаем декодирующие в сырые форматы ffmpeg’и и конкатенирующий потоки cat в фоновом режиме — пускай ждут, пока им разрешат писать в каналы. Пусть входные файлы у нас — это грёбаные DVD’шные VOB’ы с тремя аудиодорожками, дискретизированными на 48 KHz, первые две — 5.1, последняя — моно.

Кстати 1: -ss нужно указывать время либо в секундах, либо в формате HH:MM:SS[.mmm]. Именно в таком, то есть просто MM:SS не прокатит.

Note.svg Командная строка FFmpeg’а некоммутативна :) от перемены аргументов местами меняется смысл. Например, если указать -ss после -i файл, вы задолбаетесь ждать, пока оно перейдёт к нужному месту в файле, потому что будет seek’ать на уровне кодека. А если указать -ss до -i файл, seek’ать оно будет на уровне контейнера и сделает это быстро.

Кстати 2: для сырых аудиоформатов обязательно указывать параметры -ac -ar и -f (например s16le) либо -acodec (например pcm_s16le), как при кодировании, так и при декодировании, иначе как же оно узнает, какой raw формат мы хотим? При чтении raw формата эти параметры нужно указывать до -i входного_файла.

Note.svg А -newaudio, например, нужно указывать после имени выходного файла. А опции для добавляемой -newaudio аудиодорожки — непосредственно перед -newaudio.

Кстати 3: -y поможет нам избежать предупреждений.

Кстати 4: запуск ffmpeg’ов с «выпуском» в именованный канал нормально не удавался под непривилигерованным юзером — ffmpeg получал SIGSTOP. В чём дело, я разбираться особенно не стал, а просто пускал его под рутом.

ffmpeg -y -ss 00:24:18 -i VTS_01_1.VOB -map 0.0 -map 0.1 -map 0.2 -map 0.3 \
  -vcodec rawvideo -acodec pcm_s16le -ac 6 -ar 48000 file1.avi \
  -acodec pcm_s16le -ac 6 -ar 48000 -newaudio -acodec pcm_s16le \
  -ac 1 -ar 48000 -newaudio &>log1 &
ffmpeg -y -t 91 -i VTS_01_2.VOB -map 0.0 -map 0.1 -map 0.2 -map 0.3 \
  -vcodec rawvideo -acodec pcm_s16le -ac 6 -ar 48000 file2.avi \
  -acodec pcm_s16le -ac 6 -ar 48000 -newaudio -acodec pcm_s16le \
  -ac 1 -ar 48000 -newaudio &>log2 &
cat file1.avi file2.avi > file.avi &

Шаг третий: запускаем кодирующий ffmpeg.

Кстати: для libx264, начиная с какой-то (Х-З какой) версии ffmpeg’а, нужно указывать опцию -vpre. А ещё лично я люблю забивать максимальный фактор квантования и не париться о качестве.

ffmpeg -y -i file.avi -vcodec libx264 -vpre hq -qmax 28 \
  -acodec libfaac -ab 448k -ac 6 BareNecessities6ch.avi \
  -acodec libfaac -ab 384k -ac 6 -newaudio \
  -acodec libfaac -ab 96k -ac 1 -newaudio

И всё, с данного момента вся спящая в фоновом режиме машинерия активизируется и начнёт кодировать-декодировать.

Изначально вкурено с http://ffmpeg.org/faq.html#SEC29, но сильно исправлено и дополнено :)

2010-03-17 Пожалуюсь на Андроид ещё чуть-чуть

В смысле организации системы Андроид — по сути, к сожалению, шаг назад (куда-то в сторону Windows, возможно, Mobile). Нормальной системы управления пакетами с зависимостями и репозиториями там нет. К чему это приводит на практике? А к тому, что когда на каком-нибудь форуме 4PDA или XDA-Developers куча невнятного народа выкладывает кучу невнятных прошивок («официальная плюс две софтины убрано, а три добавлено») под Windows Mobile, это я понять могу. Ясное дело, винда закрытая, как в неё залезешь. Но когда точно такая же ситуация с Андроидом, который вроде-как Linux, вроде-как открытый, вроде-как инновационный — этого я понять не могу. :-(

Ну что мешало взять, к примеру, ipkg? Был бы ipkg — до Андроида 2.1, к примеру, можно было бы обновляться постепенно, частями. А одна из помех, по-видимому — выбор Java-подобного языка для платформы. В Java, с моей точки зрения, не очень красиво сделано управления библиотеками — куча JAR’ов, которые могут лежать где попало, иметь разные версии и т. д. и т. п. И пусть обычно в нормальных системах под это выделяются отдельные пути, всё равно способ, ИМХО, «defective by design». В Андроиде тоже лежит несколько таких «блобов» (framework.jar) и всё, частями ничего уже не обновишь; а нативная часть системы представляет собой обычную помойку.

Управление библиотеками и модулями языка, с моей точки зрения, очень хорошо сделано в Perl'е, потому что они все физически расположены в директориях, равных названиям пакетов, в фиксированном наборе системных путей. Аналогично расположены XS'ки и AutoSplit’ченные библиотеки. Таким образом, пути не зависят от версий самих библиотек, набор библиотек легко виден невооружённым глазом, и сложно установить две версии одной библиотеки так, что они будут конфликтовать. Плюс к этому есть CPAN — репозиторий библиотек, из которого все они легко ставятся. Похожий подход применяется и в Питоне. В PHP ситуация тоже чем-то похожа, но там, во-первых, большинство функций встроено в сам PHP и используется в виде глобальных функций, а не расширений, имеющих пакет/класс, а во-вторых, нет собственно пакетов.

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

2010-03-09 Андроид - теперь о минусах

Ну да, Андроид — прикольная игрушка, красивая, куча софта. Про SlideIT keyboard, в которой не обязательно нажимать каждую клавишу, а можно провести пальцем по буквам слова, и она его подберёт по Т9, я уже написал. Есть программа-металлодетектор, которая неким образом использует встроенный компас для определения металла рядом с телефоном. Правда, очень сильно рядом, но тоже fun. Ну и так далее.

Короче говоря, Андроид из того, что сейчас есть — безусловно, лучший. НО это не только и не столько потому, что он очень хорош, а потому, что все остальные — полное говно.

Андроид — НЕ Linux. В Андроиде нет такого уровня повторного использования кода. Андроид НЕ пропагандирует Open-Source. Андроид Маркет — НЕ система управления пакетами. В маркете ситуация примерно как под виндой — много говнософта, некоторое количество платного, довольно много с рекламой, и очень мало открытого (open-source). Всё в одном месте — и то хлеб. Маркет контролируется гуглом, например, все multitouch приложения с маркета убраны, а пользователи могут попадать в чёрный список и переставать видеть платный и защищённый софт.

Реклама — это, конечно, вообще атас. Твари! Вы МНЕ на МОЁМ телефоне в программах будете рекламу показывать, да ещё и трафик хавать?! МОЙ трафик?! Это лечится AdFree Android’ом, но в интерфейсе программ остаются дырки под рекламу. А люди на американских форумах ещё и обсуждают — мол, нехорошо у себя на телефоне рекламу отключать, разработчиков хлеба лишать.

Андроид — НЕ Java. Это некий свой интерпретатор Dalvik VM, то есть пишется там управляемый код, причём без JIT’а — JIT есть только в 2.1, в статусе экспериментального. При этом управляемый код введён, видимо, просто для стабилизации API, так как какие он ещё даёт профиты — не очень понятно: Javaвские разрешения не используются, так что контроля за софтом особого-то и нет. Обязательная подпись кода тоже не очень понятно, зачем нужна — всё равно все ставят всё подряд. Зато из-за Dalvik’а огромное количество написанного на C/C++ кода использовать под Андроидом нельзя. Точнее, можно, но с геморроем, через аналог JNI. Как следствие — Fennec’а, например, нет. Это, в принципе, не так важно — встроенный браузер весьма неплох. Но скрипты он всё-таки не все осиливает.

Непонятно также, в чём проблема установки разных версий Андроида на разные устройства. Архитектура CPU везде, типа, одна (ARM). Драйвера, по идее, сидят в ядре и пишутся производителем в случае отсутствия. Исходники ядра есть. Исходники андроида тоже есть. Вопрос: в чём проблема? Почему для разных устройств делаются разные прошивки? Почему обычный человек не может просто собрать у себя на компьютере 2.1 и залить себе в телефон?

Да, ещё бесит, что народ, создающий доработанные прошивки, выкладывает их всегда на файлообменники — то есть пока тебе 10 раз не предложат увеличить член, прочитать чужие смс и сыграть в онлайн-покер, ты файл не скачаешь. Почему бы не выложить их, к примеру, в торренты?

О софте:

  • Нет программ для автоматической транслитерации СМС при написании, а хочется. По-видимому, сам попробую написать на основе встроенного смс-клиента (он, вроде-бы, открытый).
  • Аськи нормальной нет вообще — есть всякие Не Ебо (meebo im), работающие через промежуточный сервер и жрущие трафик, скачивая аватары, которые лично мне, к примеру, в х.. не впились. Частичное решение проблемы — сидеть в Jabber’е через Jabiru и использовать ICQ-транспорт.
  • Нет вообще никакого Flash Video (*.flv) плеера. Вот это вообще удивительно, так как есть встроенный клиент Youtube, то есть сам формат библиотеки, по идее, понимают. Но локальный файл воспроизвести не можем. Есть платный yxflash — попробовал, полное говно — ничего не воспроизводит.
  • Программы для отправки и получения СМС — закрытые и не идеальны. HandcentSMS, например, имеет некоторые баги, которые я бы с удовольствием пофиксил — а нельзя — исходников-то нет. Автор в своём форуме на багрепорты не отзывается. ChompSMS показывает bubble’ы а-ля iPhone и отключить их нельзя, а хочется. Встроенный клиент показывает смайлики и отключить их нельзя, а хочется. Также во встроенном клиенте нельзя выбрать номер из адресной книги.
  • Большинство софт-клавиатур тоже закрытые, есть только одна открытая AnySoftKeyboard. Т9 я нашёл только платный или варезный, или HTC IME на телефонах HTC, понятное дело. В AnySoftKeyboard он вроде как тоже есть, но что-то не работает.
  • Большинство медиаплееров унылы чуть менее, чем полностью, и ни один не поддерживает CP1251 в ID3-тегах.

2010-03-08 SlideIT

Даааа, вот игрушка этот андроид… Нет предела кастомизации. Просто праздник какой-то.)))

Поставил SlideIT keyboard: типа, набор в одно касание. Просто приблизительно двигаешь пальцем по нужным буквам, а она по Т9 выбирает слово.

Весьма прикольно)) набирать текст на человеческом языке можно с офигической скоростью. Простые слова ловятся на ура… Всякие «интоксикации» чуть похуже, но тоже набираются. Обычный режим она тоже поддерживает. И кстати имеет символьную клавиатуру с большим числом всякой фигни, включая даже символы стрелок вверх-вниз-влево-вправо. Попробую поиспользовать))

И ядро с поддержкой мультитача тоже уже поставил… И эмулятор Денди тоже ^_^

2010-02-28 Копирование из PDF в иероглифы

Наверняка все сталкивались с PDF-ками, которые отображаются совершенно корректно, но при этом никуда не копируются — при копировании получаются некие Юникодные иероглифы.

Так вот, тайна их раскрыта и довольно проста. Кривые приложения, создающие такие PDF’ки, берут однобайтовый CP1251, дополняют его нулевым байтом до двух байт, решают, что это UTF-16BE (Big Endian, младший байт по старшему адресу), и сохраняют текст в таком виде в PDF’ку, дополняя шрифтами, которые включаются рядом же. При этом в шрифты, которые включаются рядом же, по полученным «кривоюникодным» кодам CP1251-символов записываются правильные русские буковки, и поэтому при просмотре всё отображается нормально. Одновременно при копировании текста ни одно приложение понять, что же эта за кодировка такая любопытная, не может.

Помочь в понимании под UNIX’ом можно следующей командой:

LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 pdftotext INPUT.pdf - | iconv -f utf-8 -t utf-16be | tr -d '\0' | iconv -c -f cp1251

А под виндой — любым продвинутым текстовым редактором, умеющим сохранить файл в UTF-16BE, потом открыть его как бинарный и удалить все символы \0 (с нулевым кодом), а потом снова открыть его как CP1251.