LINUX.ORG.RU

Сообщения i-rinat

 

Сотни тысяч видео на канале Youtube

Нашёл странный канал (https://www.youtube.com/channel/UCzSaYbL1RUWWUuLC6OWYKNQ) с сотнями тысяч коротких видео. Сейчас их там 193936. Сто девяносто три тысячи, почти сто девяносто четыре. Каждые 5–6 секунд добавляется новое. Иногда с перерывами в полминуты, иногда раз в секунду.

Это уже не первый такой канал. В прошлом году я видел как минимум ещё один, только ссылка потерялась.

Что это? Зачем это?

 ,

i-rinat
()

Berkeley DB всегда была глючной?

Когда возникает потребность хранить пары ключ-значение, Berkeley DB — первое, что приходит в голову. Сейчас этих библиотек вагон и маленькая тележка, но всё равно, если спросить про NOSQL хранилище, в числе первых советов будет именно Berkeley DB. Эта библиотека была, кажется, всегда. Сколько ей, лет 15? Её где только не использовали, уж казалось бы, все глюки должны были быть отловлены и исправлены. Пусть её в тестах только ленивый не обгонял, всегда казалось, что все эти новомодные движки — потенциальный глюкодром. А BDB — годами проверенная надёжность. И по докам умеет много всего. Работа из нескольких процессов, кеширование, транзакции, даже репликация.

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

Окей, включаем журналирование, хотя по докам без него должно корректно блокироваться. Теперь ловится взаимная блокировка и в Btree! Разве транзакции не призваны были предотвратить эти блокировки? Хотя с транзакциями работает корректно чуть дольше, до минуты дотягивает.

Погружение в документацию приоткрывает врата в ужас. В документации повсеместно упоминаются взаимные блокировки, как будто они — нормальное явление. Вызов функции в одном процессе может просто подвесить все остальные процессы, навсегда. И это предлагается решать запуском отдельной утилиты db_deadlock! Логи транзакций, кстати, тоже надо чистить. Без вызовов специальных функций или запуска соответствующих утилит эти файлы просто займут всё место на диске, сколько есть. Писать по кругу в один файл эта библиотека, похоже, просто не умеет.

Berkeley DB всегда была таким глюкодромом?

 , , rant

i-rinat
()

Ищу проекты на C/C++ с определённым форматированием

Существует невероятное количество вариантов стиля кодирования. Среди них есть один, в котором для отступов используется четыре пробела, а открывающие фигурные скобки в управляющих конструкциях находятся на той же строке, что и условие. Для однострочных условий получается неплохо:

if (shortcondition) {
    some_code(1);
    some_code(2);
}

но когда условия становится длинными, расползаются на несколько строк, становится трудно различать, где кончается условие и начинается код:

if (longcondition + 1 + 2 + 3 +
    continuation + 4 + 5 + 6) {
    some_code(1);
    some_code(2);
}

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

if (longcondition + 1 + 2 + 3 +
    continuation + 4 + 5 + 6)
{
    some_code(1);
    some_code(2);
}

При этом в коротких условиях она остаётся на одной строке с условием. Такой подход я с некоторых пор стал использовать в своём коде. Но мои проекты небольшие как по объёму, так и по числу разработчиков.

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

(Найти такой проект — одно из условий, которое желательно выполнить, чтобы включить новую опцию в clang-format.)

 , , ,

i-rinat
()

gmp-widevine

Прикручиваем Widevine CDM из Chrome к Firefox.

https://github.com/i-rinat/gmp-widevine

Firefox надо брать самый свежий (я брал снимок 29258f59e545 из mozilla-central), накладывать патч (есть в репозитории) и собирать самому. Хотя необходимую функциональность доделали около месяца назад, до основного релиза она ещё не скоро доберётся, да и в код нужно добавить кое-то ещё.

Работает на примерах из https://shaka-player-demo.appspot.com/, кроме «Oops» с «PSSH in MPD». Netflix и фильмы на Google Play тоже заработали.

in b4: Я в курсе, что Digital Restrictions/Rights Management это плохо. Но считаю, что у пользователя должен быть выбор. Не хочешь — не включай.

 , , , , widevine

i-rinat
()

В Firefox возможно повесить ссылку на кнопку панели?

Как в Firefox сделать кнопку, при нажатии которой открывается новая вкладка с определённым, мной заданным, URL? Это можно сделать без аддонов? Есть готовый аддон, который это делает?

Можно включить панель закладок, но она занимает вертикальное место, а если её перетащить на панель с адресной строкой и кнопками, занимает слишком много места по горизонтали. Простая кнопка (наподобие кнопок Hello и Pocket) была бы идеальным решением.

 ,

i-rinat
()

孔明の罠 - Kaizo Trap

https://www.youtube.com/watch?v=lIES3ii-IOg

Кто-нибудь прошёл до конца?

 kaizo trap,

i-rinat
()

Firefox и DRM

Решил я, значит, разузнать на тему прикручивания Widevine CDM к Firefox. Выяснил, что придумали для этого Gecko Media Plugins, ещё один интерфейс для бинарных плагинов, но уже с изоляцией и песочницей. И вроде как через него в мае анонсированный HTML5 EME (DRM) и реализован. Нашёл описания API, примеры. Пробую — не работает. Вообще никак, даже в подсказках в Web Console нужные слова не появляются. Вспомнил, что у меня не Firefox, а Iceweasel. Выяснилось, что там при сборке всё, хоть как-то напоминающее о DRM, выключено (в обсуждениях они даже патчить собирались, но нашёлся ключ).

Достал Firefox, стал пробовать там. А оно опять не работает! По предлагаемым спекам все реализации должны поддерживать org.w3.clearkey, это простое симметричное шифрование, но и оно не работает! Там в API не хватает функций, которых ждут тестовые плееры. А те функции, что есть, просто возвращают ошибку!

Теперь не знаю, огорчаться или радоваться. Вроде как Mozilla невольно защищает нас от цепких лап капиталистов.

Справедливости ради надо сказать, что пару недель назад отсутствующую функцию всё-таки добавили. Но плееры всё равно не работают.

 , ,

i-rinat
()

Сервис для тестов GPU

Понадобилось мне поотлаживаться на машине с nVidia видеокартой, а видеокарты такой нет. И даже после покупки вставить по большому счёту некуда — для этого надо разбирать комп, согнав с него основного пользователя, менять видеокарту, запускать тест, возвращать предыдущую карту, собирать обратно. Разово такое сделать ещё реально, но одного раза вряд ли хватит. Ситуация осложняется ещё и тем, что разные карты ведут себя по разному, на одних код работает, а на других сбоит. Не собирать же мне коллекцию видеокарт дома.

В связи с этим возник вопрос. Может быть, где-то существует некий сервис для тестов на наборе различных моделей GPU от разных производителей?

Из хостингов с GPU по разумным ценам нашёл только Amazon AWS, с nVidia GRID. Но они уже несколько дней не позволяют мне создать инстанс, видимо ждут очередного совета старейшин, на котором будет решаться, позволять мне это делать или нет. И, опять-таки, не факт, что там баги воспроизведутся.

 , , ,

i-rinat
()

Как в расширении для Firefox обрабатывать embed и object?

(Речь про дополнения, те, что на HTML и JavaScript. Не про бинарные плагины.)

Расширения Chrome'а умеют обрабатывать содержимое, предназначенное для плагинов. В manifest.json указывается "mime_types": [[ "application/sometype" ]] и для всех embed и object типа application/sometype в страницу фактически вставляется содержимое расширения.

Как такое надёжно сделать в расширении для Firefox? Похожую задачу решает Shumway, но вот надёжность решения вызывает вопросы — видел багрепорты, в которых сказано, что в особых случаях типа генерации страниц на ходу Shumway может не прогружаться. Да с этой тонной кода с наскоку не разобраться, как там вообще это делается.

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

 , ,

i-rinat
()

Сообщения из тем в «Клубе» видны в результатах поиска

Как воспроизвести баг:

  1. Открыть активную тему в Клубе;
  2. перейти в профиль одного из недавно ответивших пользователей;
  3. выбрать список его комментариев;
  4. открыть страницу со списком комментариев в incognito mode браузера.

Что просходит:

В обоих случаях видны сообщения, оставленные в разделе Клуб.

Что должно происходить:

Анониму не должно быть доступно содержимое сообщений из раздела Клуб.

 

i-rinat
()

Обновление Flash плеера в ChromeOS

У кого есть на руках Chromebook'и, какая сейчас там версия Flash плеера? Он обновляется только вместе со всей ОС или чаще?

Версию можно посмотреть на http://www.adobe.com/software/flash/about/ или в chrome://plugins/

 , ,

i-rinat
()

Не работает рендеринг в Pixmap через EGL на Radeon

Внезапно поломалось рисование в Pixmap через EGL поверхность. Приложение рисует картинку в pixmap EGLSurface, из которого потом с помощью XCopyArea изображение копируется в Drawable, который затем выводится на экран. И весь этот бутерброд работал как на встроенном intel, так и на radeon (HD7730) через DRI_PRIME. Так вышло, что на radeon я его проверял не часто, и теперь там всё поломалось, хотя на intel всё ещё работает.

У меня есть подозрение, что я что-то делаю не так, и очередное обновление просто вскрыло ошибку. Только где эта ошибка?

Ниже приведён код, воспроизводящий проблему на моём железе. При запуске DRI_PRIME=0 ./a.out рисуется ярко-фиолетовый прямоугольник с светло-синей каёмкой, как и должно быть. При запуске DRI_PRIME=1 ./a.out прямоугольник чёрный. В общем-то, неважно, что там будет, лишь glClear() или рисование, ничего не видно.

Mesa 10.3.1, xserver-xorg-core 1.16.1.

( Код )

 

i-rinat
()

apulse

Everyone! Listen up! Today... today...

$ apulse <program-name> [program parameters]

https://github.com/i-rinat/apulse — эмуляция PulseAudio. Когда приложение пытается загрузить libpulse.so, ему подсовывают её версию от apulse, в которой реализована часть функций, достаточная, чтобы запустить Skype и некоторый другой софт.

 ,

i-rinat
()

Как освобождать память завершённых нитей?

Вопросы аллокаторов памяти в последнее время стали трендом, а у меня опять нарисовалась старая проблема с псевдо-утечками.

Вот кусок кода:

( (показать код) )

который создаёт много нитей. У меня на 64-битной коробке эта программа выделяет 11g виртуальной памяти, которая не освобождается, когда нити завершаются.

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

Решение. Выяснилось, что pthread_detach вполне достаточно, если не создавать много нитей одновременно.

 ,

i-rinat
()

Самореклама в Job

Много раз видел темы в Job, где авторы ищут работу. Я слышал, что некоторые находили тут работу, но они откликались на размещённую работодателем вакансию, а не наоборот. В связи с очередной «ищу работу» темой у меня всплыл вопрос: «истории успеха есть»?

i-rinat
()

Ищу просмотрщик текста с множественной подсветкой

Если запустить поиск текста в less, он подсвечивает найденные результаты, что очень удобно. Но он не умеет подсвечивать две разных строки. Можно загнать насколько строк в один regex, но тогда они визуально сливаются.

Я ищу программу для просмотра текста, желательно работающую в терминале, в которой можно подсвечивать несколько разных строк разными цветами. Гугл выдаёт рецепты для связки pygments с less, но это не совсем то, так как строки, которые я ищу, меняются от файла к файлу. Сегодня это могут быть «interface» и «4555», а завтра — «param», «allow» и «12». Трёх-четырёх будет вполне достаточно, больше не нужно.

Есть такое?

 

i-rinat
()

FreshPlayerPlugin — PepperFlash в Firefox

Flash плеер всё заменяют и заменяют, но никак не заменят полностью. Новые и сверхновые фичи браузеров это замечательно, но Flash бывает всё ещё нужен. К сожалению, доступная NPAPI браузерам версия застыла на 11.2, а новые версии выходят только в составе Chrome. Поэтому я делаю адаптер, который сможет быть посредником между PPAPI плагином и NPAPI браузером. Это такая штука, которая позволит использовать свежий Flash в Firefox, Opera и других браузерах, в которых работают плагины.

https://github.com/i-rinat/freshplayerplugin

 , , , , ppapi

i-rinat
()

Прошу проверить баг flash плеера с VDPAU на nVidia

В процессе ковыряния с драйвером VDPAU я наткнулся на баг в flash плеере. Проявляется он в растянутых полосах по краям видео. Это видно вот здесь с правой стороны, тогда как без использования аппаратного ускорения всё хорошо. Долгое время я считал это багом в своём драйвере. А когда пришло время исправлять, всё оказалось не так просто.

Конкретно у этого видео [1] размер кадра составляет 322x240, но flash плагин сообщает размер как 336x240, увеличивая его до ближайшего кратного 16. Я не вижу внятных способов определить реальный размер кадра, он нигде в вызовах VDPAU не проскакивает. Остаётся только проверить на nVidia карте; если он проявляется и там, то нет смысла пытаться исправить баг. К сожалению, у меня нет видеокарты nVidia, а купить что-нибудь простенькое и поставить в комп я не могу, с ноутбуком такое сложнее, чем со стационарным ПК.

И вот собственно просьба: проверить на nVidia с проприетарным драйвером, есть баг или нет. Желательно пару скриншотов с включенным и выключенным ускорением [2]. И вывод vdpauinfo | grep Info. А для полного счастья ещё и выхлоп в консоль браузера, запущенного с установленной переменной VDPAU_TRACE=1.

[1] https://www.youtube.com/watch?v=GL0VnLHpVYQ
[2] Как включить/выключить ускорение: раз, два. Чтобы изменения вступили в силу, страницу надо обновить.

 , ,

i-rinat
()

plasma^W opera не падает

http://img6.imageshack.us/img6/6051/201306011733261366x768s.png
http://img211.imageshack.us/img211/659/1lk3.png
(Тут должна быть картинка нормально отрисованной Opera Mini. Но на неё смотреть скучно)

Суть: берётся пример bitmap-plasma из android-ndk, собирается под arm Opera Mini 7.5. Из готовой apk вытаскивается .so, в полуавтоматическом режиме разбирается на инструкции, из них генерируется набор «исходников» на C. Дальше это подсовывается компилятору из NDK, который собирает .so-шку для x86. so-шка вставляется в apk. Собранное приложение запускается в эмуляторе android'а, в котором крутится штатный образ для x86. Приложение (Plasma Opera Mini) работает и не падает. Но немного глючит подлагивает в mips-устройстве.

Радость.

 , , , ,

i-rinat
()

Как вычислить недостающие параметры H.264 потока

Я тут в процессе написания драйвера vdpau застрял. Чтобы заработало ускорение декодирования, надо вызывать vaapi. Проблема состоит в том, что оба интерфейса требуют разные параметры H.264. Часть из них совпадает по имени поля в структурах (имена взяты из стандарта), а часть нет. При этом VAAPI требует намного больше данных, чем VDPAU, то есть мне нужно откуда-то эти данные взять.

К примеру, нужен такой параметр, как first_mb_in_slice. Его можно достать из потока, ffmpeg его достаёт и... выбрасывает. А потом, когда нужно формировать это поле для передачи в vaRenderPicture, высчитывает заново, причём с текстом стандарта это плохо соотносится (там должно быть смещение, либо половина смещения, в зависимости от флага. Код в ffmpeg делит пополам только координату y, а x просто прибавляет). И так далее. Всё осложняется тем, что я не знаком с подробностями технологий сжатия видео.

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

В общем, нужна рука помощи. Я тут ниже буду постить особо непонятные мне моменты. Надеюсь на ваше понимание.

Upd. Все параметры нашлись в самом потоке. Первый байт после заголовка — NAL header, дальше slice_header (7.3.3), в котором и были недостающие данные.

 , ,

i-rinat
()

RSS подписка на новые темы