Блог:Виталий Филиппов — различия между версиями
(Создан блог) |
м |
||
Строка 1: | Строка 1: | ||
− | <big> | + | <big>Технические вопросы и вменяемые заметки — пока только от [[User:VitaliyFilippov|меня]]. А вдруг будет ещё от кого-то?</big> |
+ | |||
+ | <span class="color: #a0a0a0">У меня, конечно, уже есть блог [[Файл:Ljuser.gif]][http://simply-a-man.livejournal.com/ simply_a_man]. Но уж очень там мало вменяемого.</span> |
Версия 19:47, 15 января 2010
Технические вопросы и вменяемые заметки — пока только от меня. А вдруг будет ещё от кого-то?
У меня, конечно, уже есть блог simply_a_man. Но уж очень там мало вменяемого.
2011-09-09 Opera
Сломанные настройки шрифтов ТАК И НЕ ПОЧИНИЛИ. Как клала опера на них, так и кладёт — прописываешь в шрифтах везде Segoe UI, перезапускаешь оперу, а у тебя Verdana. Если передёрнуть снова — просирается, но передёргивать нужно после каждого рестарта. А уже вышла 11.11 почти 12. Релизеры, блин.
Правда, я выяснил, как заставить Оперу 11 и выше использовать нужный рендеринг шрифтов:
cat > ~/.Xresources <<EOF Xft.hinting: 0 Xft.hintstyle: hintnone Xft.autohint: 0 EOF xrdb -merge ~/.Xresources
Любопытно, что рендерятся они всё равно по-другому, не так, как в остальных приложениях. Но уже хотя бы приемлемо.
Ещё бесит дебильная полу-серая адресная строка. Что за мудаки работают в опере, вообще понять не могу. Им твердят-твердят — сделайте млять опцию. Они — нет, полу-серая строка это супер-фича, видеть параметры запроса вам не нужно. Вот отличный тред: тынц.
Народ аж патчи к бинарнику оперы уже придумывает: [1], [2], [3]. Причём придумали наши, а ссылаются на это в итоге америкосы, читают через гугл транслейт.
То, что выше этой строки, было написано в ЖЖ ещё 6 июня, а теперь обновление от сегодняшнего дня (2011-09-09):
Пепелсбей.нет — русское чувачелло, которое работает в опере, на матерные замечания об опере отозвался неадекватно, мол я такой нежный и мат не выношу. Ох про*бёт опера остатки пользователей, ох про*бёт…
Настройки шрифтов в 12-next поломаны до сих пор с ноября 2010 года (!!!). Реально в альфа-сборках даже раньше, в ноябре 2010 вышла 11 бета. Почти год багу.
Кстати, если кто-то не помнит, был баг ещё позорнее — рандомные зависания загрузки страницы на сайтах с большим количеством JS через прокси — баг жил где-то полгода в 10.5, разработчики на него не реагировали. Это был тот момент, когда я себе прозрачную проксю локально поднял.
Если кто-то не помнит, ещё раньше, где-то в 9-10 версии, оно намертво зависало, если при переоткрытии всех вкладок на старте не дай бог раньше времени нажмёшь Enter на всплывающем окошке ввода пароля. Тоже позор был.
В то же время и другие браузеры имеют позорные моменты: в Firefox слабо настраиваются комбинации клавиш — только по 1 комбинации на действие, и настраиваются не все — например, нельзя настроить переходы между вкладками. В Chrome и того хуже — комбинации клавиш не настраиваются вообще! И вкладки он любит про*бывать между рестартами, если не дай бог его неаккуратно рестартуешь. И по клику «назад» он не берёт страницу из кэша, а перезагружает — кстати, этим и мобильный Андроидовский браузер страдает, и там раздражает сильнее, потому что жрёт платный трафик. А Firefox по нажатию Tab-Tab-Tab прыгает по умолчанию не по полям ввода, а ещё и по ссылкам. Нахера? Правда, если сайт пропишет у себя tabindex’ы полям ввода, то нормально.
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)?
- Посмотреть VitaphotoV3 в действии
- Почитать о VitaphotoV3 в YourcmcWiki
- Посмотреть исходные коды VitaphotoV3
Начиная с сегодняшнего дня, старая версия (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) для нарезки и слияния видео.
Шаг первый: создаём именованные каналы. А допустим, у нас ещё и аудиодорожек несколько.
Сначала я хотел написать, как завещал великий 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 не прокатит.
Командная строка FFmpeg’а некоммутативна :) от перемены аргументов местами меняется смысл. Например, если указать -ss после -i файл, вы задолбаетесь ждать, пока оно перейдёт к нужному месту в файле, потому что будет seek’ать на уровне кодека. А если указать -ss до -i файл, seek’ать оно будет на уровне контейнера и сделает это быстро.
Кстати 2: для сырых аудиоформатов обязательно указывать параметры -ac -ar и -f (например s16le) либо -acodec (например pcm_s16le), как при кодировании, так и при декодировании, иначе как же оно узнает, какой raw формат мы хотим? При чтении raw формата эти параметры нужно указывать до -i входного_файла.
А -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 -y -ss 00:24:18 -i file1.avi -an -f yuv4mpegpipe file1.v &>log1.v & ffmpeg -y -ss 00:24:18 -i file1.avi -vn -map 0.1 -ac 6 -ar 48000 -f s16le file1.a1 &>log1.a1 & ffmpeg -y -ss 00:24:18 -i file1.avi -vn -map 0.2 -ac 2 -ar 48000 -f s16le file1.a2 &>log1.a2 & { ffmpeg -y -i file2.avi -t 91 -an -f yuv4mpegpipe - 2>log2.v | tail -n +2 >file2.v ; } & ffmpeg -y -i file2.avi -t 91 -vn -map 0.1 -ac 6 -ar 48000 -f s16le file2.a1 &>log2.a1 & ffmpeg -y -i file2.avi -t 91 -vn -map 0.2 -ac 2 -ar 48000 -f s16le file2.a2 &>log2.a2 & for i in v a1 a2; do cat file1.$i file2.$i > file.$i & done
Кстати 1: запустить один ffmpeg, который будет писать сразу несколько выходных файлов, не получится, т.к. кодирующий ffmpeg их будет анализировать по очереди, а декодирующий захочет писать все вместе. А писать в канал, из которого никто не читает, нельзя. Поэтому "сборка" просто повиснет.
Кстати 2: сырой видеоформат называется -f yuv4mpegpipe. Он допускает конкатенацию, но в этом случае нужно отрезать первую строку у всех файлов, кроме первого, чтобы их потоки начинались со слова "FRAME". Сырой видеокодек - -vcodec rawvideo.Шаг третий: запускаем кодирующий 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 выбирает слово.
Весьма прикольно)) набирать текст на человеческом языке можно с офигической скоростью. Простые слова ловятся на ура… Всякие «интоксикации» чуть похуже, но тоже набираются. Обычный режим она тоже поддерживает. И кстати имеет символьную клавиатуру с большим числом всякой фигни, включая даже символы стрелок вверх-вниз-влево-вправо. Попробую поиспользовать))
И ядро с поддержкой мультитача тоже уже поставил… И эмулятор Денди тоже ^_^