LINUX.ORG.RU

Сообщения Stanson

 

Снова что-то «улучшили» в социальщине и всяких ОС с зондами?

С недавнего времени mp4 видосики в вацапе превратились из обычного mp4 в нечто без заголовка и пр. Ни один нормальный плеер, включая ffmpeg и gst их не понимает. В ведроиде воспроизводятся. Подозреваю, что это произошло после последнего обновления вацапа.

$ ffprobe test.mp4 
ffprobe version 4.4 Copyright (c) 2007-2021 the FFmpeg developers
  built with gcc 10.3.0 (GCC)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/doc/ffmpeg-4.4/html --mandir=/usr/man --disable-debug --enable-shared --disable-static --enable-gpl --enable-version3 --enable-avresample --arch=x86_64 --disable-encoder=aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-libbluray --enable-libcaca --enable-libcdio --enable-frei0r --enable-openal --enable-libopus --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libmp3lame --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libpulse --enable-libsmbclient --enable-libxml2 --enable-librsvg --enable-libdrm
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x23e8340] Format mov,mp4,m4a,3gp,3g2,mj2 detected only with low score of 1, misdetection possible!
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x23e8340] moov atom not found
test.mp4: Invalid data found when processing input

Оно теперь пожато, зашифровано или ещё что? На вид - структуры там никакой, ни заголовков, ничего, просто случайные байты.

Пример файла - http://www.stanson.ch/test.mp4

Там видео потопа в Германии со старым мерсом в идеальном состоянии должно быть.

Это вообще что, и почему нигде ничего про это долбаное «новшество» не слышно?

ЗЫ: Похоже нашёл: https://github.com/sh4dowb/whatsapp-media-decrypt

Дебилизм какой-то. Просто на пустом месте лишний геморрой.

ЗЗЫ: Насколько я понял, воспроизведение всех видосиков любыми софтинами использующими системную либу теперь перхвачено какой-то вацапной хренью, которая смотрит, не зашифрованный ли это вацапный файл, и если да, то на лету расшифровывает и отдаёт низлежащей либе, а обычные файлы транслирует без изменений. Поэтому вацапные файлы воспроизводятся всякими штатными галереями и пр. Т.е. теперь вацап имеет прямой доступ ко всем видосикам которые вы смотрите на своём телефоне. Ничуть не удивлюсь, если окажется что «неправильный» видосик даже из какого-нибудь телеграмчика или там вообще залитый по USB вы теперь посмотреть не сможете.

 , , , ,

Stanson ()

Немонстроузный web-проигрыватель бесконечного DASH потока с IP камеры.

Все говнобраузеры до сих пор не умеют в RTSP и даже не умеют нормально проигрывать бесконечный поток. Какое-то позорище натуральное. Бесконечный поток с камеры, например, поставленный на паузу вообще ни разу не должен продолжаться с той самой секунды когда его остановили. Внезапно. А должен продолжаться при снятии с паузы с самого последнего принятого keyframe. И браузеру нахер не нужно сжирать всю память пытаясь сохранить всё, что было передано с момента нажатия на паузу. Но, видимо, для браузерописцев эти элементарные вещи совершенно недоступны для понимания, и в результате реализация HTMLVideoElement’а, что в хроме, что в фаерфоксе является полным говном.

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

Оказалось что самый маленький плеер умеющий проигрывать multiple-file-DASH видео (openplayer.js) весит 167 килобайт, сцуко! И это минифицированный вариант! Чему там можно столько весить я нихрена не понял. Про «референсный» dash.js я вообще молчу. Это лютейший звездец размером больше полмегабайта в минифицированном виде. Мелкософтовский пример жабоскриптного DASH-плеера заточен на single-file-DASH. А ffmpeg c -single_file 1 пишет поток на диск бесконечно, засирая диск далеко не всегда нужным видеомусором.

Разумеется, как всегда, когда дело касается вебни, чтобы решить элементарную проблему, вместо того, чтобы взять какой-нибудь эталонный микроскопический плеер, пришлось быстренько изобрести велосипед. Разумеется, всё легко влезло в смешные 5 килобайт, причём в неминифицированном виде.

Вот велосипед:

Жабоскрипт:

'use strict'

function Dash( id )
{
    var _ = this;
    _.v = document.getElementById( id );
    var url = _.v.src;
    _.v.src = undefined;
    var slash = url.lastIndexOf("/");
    _.path = url.substring( 0, slash + 1 );
    _.mpd = url.substring( slash + 1 );
    _.init = true;
    _.xhr = [];
    _.load_mpd( false );
    _.video_update  = function() { _._video_update(); };
    _.video_updated = function() { _._video_updated(); };
    _.video_updating = false;

    _.v.addEventListener( 'click', _.toggle.bind(_), false );

    _.v.addEventListener( 'pause', function ()
    {
        console.log( 'paused' );
        this.removeEventListener( 'timeupdate', _.video_update );
        if( _.videoSource.updating ) _.videoSource.abort();
        _.xhr.forEach( function ( xhr ) { xhr.abort(); } );
    }, false);

    _.v.addEventListener( 'play', function()
    {
        console.log( 'playing' ); 
        this.addEventListener( 'timeupdate', _.video_update, false );
    }, false);

    _.v.addEventListener( 'ended', function()
    {
        console.log( 'ended' );
        this.removeEventListener( 'timeupdate', _.video_update );
    }, false);

    _.v.addEventListener( 'error', function(e) { console.log( 'video error: ' + e ); }, false );
    _.v.addEventListener( 'emptied', function() { console.log( 'emptied' ); }, false );
}

Dash.prototype.play = function() { this.load_mpd( true ); }
Dash.prototype.stop = function() { this.v.pause(); }
Dash.prototype.toggle = function()
{
    if( this.v.paused == true ) this.play();
    else                        this.stop();
}

Dash.prototype.mpd_parse = function( data )
{
    var _ = this, e, g;
    e = data.querySelectorAll("Representation")[0];
    g = e.getAttribute.bind( e );
    _.id        = g( 'id' );
    _.mimetype  = g( 'mimeType' );
    _.codecs    = g( 'codecs' );
    _.width     = g( 'width' );
    _.height    = g( 'height' );

    e = data.querySelectorAll( 'SegmentTemplate' )[0];
    g = e.getAttribute.bind( e );
    _.timescale = g( 'timescale' );
    _.ini       = g( 'initialization' );
    _.seg       = g( 'media' );
    _.start     = g( 'startNumber' );

    _.ini = _.ini.replace( '$RepresentationID$', _.id );
    _.seg = _.seg.replace( '$RepresentationID$', _.id );

    _.duration = [];

    data.querySelectorAll("S").forEach( function( v, i )
    {
        _.duration[i] = v.getAttribute( 'd' ) / _.timescale;
        if( i == 0 ) _.ts = v.getAttribute( 't' );
    } );
}

Dash.prototype.load_mpd = function( start )
{
    var _ = this;
    _.xhr[0] = new XMLHttpRequest();
    _.xhr[0].onreadystatechange = function ()
    {
        if( this.readyState != this.DONE ) return;
        if( this.status != 200 ) return;

        var parser = new DOMParser();
        var xmlData = parser.parseFromString( this.response, 'text/xml' );

        _.mpd_parse( xmlData );

        if( start )
        {
            _.video_updating = false;
            _.num = parseInt( _.start ) + 1;
            _.ts_current = _.v.currentTime;
            _.load_seg();
        }

        if( _.init )
        {
            _.v.width  = _.width;
            _.v.height = _.height;
            _.mediaSource = new window.MediaSource();
            _.mediaSource.addEventListener( 'sourceopen', function (e) {
                _.videoSource = _.mediaSource.addSourceBuffer( _.mimetype + '; codecs="' + _.codecs + '"' );
                _.videoSource.mode = 'sequence';
                _.videoSource.addEventListener( 'updateend', _.video_updated, false );
                _.load_ini();
            }, false );
            _.v.src = URL.createObjectURL( _.mediaSource );
        }
    }
    _.xhr[0].open( 'GET', _.path + _.mpd );
    _.xhr[0].send();
}

Dash.prototype.append = function( f )
{
    var _ = this;
    _.xhr[1] = new XMLHttpRequest();
    _.xhr[1].responseType = 'arraybuffer';
    _.xhr[1].onreadystatechange = function ()
    {
        if( this.readyState != this.DONE ) return;
        if( this.status != 200 ) return;
        _.videoSource.appendBuffer( new Uint8Array( this.response ) );
    };
    _.xhr[1].open( 'GET', _.path + f );
    _.xhr[1].send();
}

Dash.prototype.load_ini = function()
{
    this.append( this.ini );
}

Dash.prototype.load_seg = function()
{
    var n = this.num.toString();
    if( n.length < 5 ) n = ( '0000' + n ).slice( -5 );
    this.append( this.seg.replace( '$Number%05d$', n ) );
}

Dash.prototype._video_update = function()
{
    var _ = this;
    if( _.video_updating ) return;
    var i = _.num - _.start;
    if( _.v.currentTime >= _.ts_current - _.duration[i] * 0.5 )
    {
        _.video_updating = true;
        _.load_seg();
    }
}

Dash.prototype._video_updated = function()
{
    var _ = this;

    if( _.init ) { _.init = false; return; }

    if( _.v.paused == true )
    {
        _.v.currentTime = _.ts_current;
        _.v.play();
    }
    _.ts_current += _.duration[ _.num - _.start ];
    _.num++;
    if( _.num - _.start >= _.duration.length - 1 ) _.load_mpd( false );
    _.video_updating = false;
}

Страничка:

<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT src="tiny-dash.js" type="text/javascript"></SCRIPT>
<SCRIPT>
var dash;
window.addEventListener( 'load', function() { dash = new Dash( 'dashvideo' ); }, false );
</SCRIPT>
<TITLE>Camera stream</TITLE>
</HEAD>
<BODY bgcolor="#000000" text="#c0c0c0">
<VIDEO id="dashvideo" src="media/manifest.mpd" preload="none">No video available</video>
</DIV>
</BODY>

На серваке из-под nobody запустить

#!/bin/sh

stream="rtsp://host:port/ch0_264"
target="/где.там.страничка.лежит/media/manifest.mpd"

/usr/bin/ffmpeg \
-probesize 32 \
-loglevel quiet \
-i "${stream}" \
-an \
-c:v copy \
-f dash \
-window_size 4 \
-extra_window_size 1 \
-min_seg_duration 2000000 \
-remove_at_exit 1 \
"${target}"

В /где.там.страничка.лежит/media лучше примонтировать tmpfs - и шустро, и диск не трогает.

Длительность сегмента и размер окна можно подкрутить, если канал убогий.

Для руления плеером из жабоскрипта есть методы Dash.play(), Dash.pause() и Dash.toggle(). Всякие кнопки и украшательства добавляются по вкусу.

Работает в хроме и фаерфоксе. Задержка, разумеется есть, но без неё, увы, при воспроизведении DASH не обойтись.

Решение отлично подходит для камер, которые нафиг не нужно куда-то записывать, но которые хотят смотреть много (и даже очень много) людей одновременно. HTTP сервер всего лишь раздаёт не особо большие файлики из tmpfs, так что нагрузка минимальна.

В принципе, это всё несложно использовать для организации self-hosted zoom при минимальной доработке - нужно только организовать передачу потоков с вебок на сервер (да хоть через netcat), а там их так же раскладывать в сегменты ffmpeg’ом.

Лицензия - WTFPL

ЗЫ: Хотел в теги добавить ещё «копрофилию» но ограничение на 5 тегов испортило всю малину.

ЗЗЫ: Это, кстати, эксклюзив специально для ЛОР. :) Нигде больше публиковать это я не собираюсь.

 , , , ,

Stanson ()

Обсуждение виндовых костылей - оффтопик или нет?

Господа и дамы модераторы. Я вообще крайне редко сюда пишу (возможно это вообще первый раз), но почему до сих пор не удалено вот это - PowerShell на работе и в быту за оффтопик?

Собственно прошу не удалить и т.п. (я никогда не стучу на пассажиров), а разъяснить - что-то изменилось и теперь на ЛОРе разрешено обсуждение вендософта, да ещё и вне Talks?

Отмазка про «ну поверщель работает на линуксе» не принимается. Я могу создать 100500 аналогичных тем с аналогичным тупняком типа «как в regedit заменить все значения ключей по маске» аргументируя тем, что regedit прекрасно работает в линуксе, причём как wine’овый, так и родной вендовый и его даже можно использовать для редактирования INI-style файлов типа юнитов системды.

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

В общем, желаю знать и всё такое.

Перемещено Shaman007 из linux-org-ru

 

Stanson ()

Широкополосный лямбда-зонд, зависимость напряжения от содержания О2

Специалистам по всему:

Кто-нибудь видел полный график от 0 до 100% кислорода, или хотя бы упоминание о реальном рабочем диапазоне широкополосного лямбда-зонда?

Полчаса гуглил - вообще по нулям, одни узенькие графички напряжения от лямбды в диапазоне максимум 0.5 - 2.5

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

ЗЫ: Для неумеющих читать: Вопрос вообще никакого отношения к автомобилям не имеет, тем более не имеет отношения к сраному россиянскому «тюнинху». Если бы я занимался этой хернёй, то никаких вопросов не задавал бы - там всё совершенно элементарно и спрашивать просто не о чем и незачем. Если я и буду заниматься реальным тюнингом какого-нибудь из своих автомобилей, то вопросы будут про ГТД, jet-ECU, тахометр на 70тыс оборотов и т.п.

Вопрос про использование широкополосной лямбды в качестве практически дармового датчика содержания кислорода в газовой смеси. На алике датчики кислорода по 2500, а б/у широкополосных лямбд можно пучок за 3 копейки взять. И да, с «опорным» кислородом для широкополосной лямбды проблем нету, хоть 99% можно устроить.

 , ,

Stanson ()

QtWebEngine - насколько ungoogled?

QtWebEngine использует движок Chromium. Chromium в оригинальном виде насыщен гуглозондами, которые пытается выпилить проект Ungoogled Chromium. Насколько googled QtWebEngine?

Я тут просто потыкал последний Falkon, который является обёрткой для QtWebEngine, в принципе, оно вполне уже юзабельно. Ещё и адблок искаропки. Если QtWebEngine совсем ungoogled, то Флакон этот вполне себе может стать весьма годной альтернативой напичканному зондами Хрому с катящимся в полное дерьмо Фаерфоксом.

ЗЫ: Оказалось что в QtWebEngine (по крайней мере с 5.15) есть один неустранимый косячище - невозможно запретить ублюдочные и абсолютно ненужные web workers. Говорят в предыдущих версиях это было реально при помощи некоторых танцев с бубном и QTWEBENGINE_CHROMIUM_FLAGS=--disable-shared-workers, но теперь это больше не работает и после некоторого времени chrome://serviceworker-internals/ оказывается до краёв забит жрущим память и процессор говном со всяких говносайтов от яндекса до алиэкспресса, которые к сожалению приходится иногда посещать. Т.к. по URL не угадаешь, насуют ли тебе вебворкеров или нет, область применения falkon получается крайне ограниченной, и в этой области даже NetSurf рулит гораздо больше.

 , , ,

Stanson ()

Маководам и около вопрос

Насколько вменяемо работает Wine под macOS? Что-то чуть сложнее Notepad будет работать?

Вкратце - есть коммерческая софтина под венду, никаких извращений в коде, много матана, тупой Win32 API + чуть-чуть OpenGL (необязательно, это просто один из многих способов отображения трёхмерных цветовых пространств и образцов в нём), с приборами в основном общается через libusb-win32 (только bulk, если чо) и под линуксовым wine работает без малейших проблем.

Ввиду специфики иногда попадаются клиенты, все из себя такие дизайнеры, которым вынь да положь гейось. Очень не хочется связываться со всякими XCode и пр., да и вообще с разработкой под Apple. Насколько я нарыл инфы в гуглях, libusb под макосью вполне работает, wine вроде как тоже, через XQuartz, но никто не пишет насколько это всё стабильно и безглючно.

ЗЫ: чтобы wine работал с нативным usb у меня есть https://github.com/stanson-ch/libusb-wine , так что это не проблема, запилю туда же и под Darwin, там несложно.

 , ,

Stanson ()

Aliexpress окончательно угробили?

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

Есть варианты получить алиэкспресс всегда и только на английском? На т.н. «русском» им пользоваться абсолютно невозможно. Английский-то хоть как-то что-то можно было понять, но что он сделали сейчас - это полный звездец.

banggood.com тоже такой хернёй страдает, или там нет долбаной принудительной локализации?

Linux при том, что на алике всякие SBC и пр. умеющие в линукс продаются.

ЗЫ: Через ebay китайскую мелочёвку покупать проблематично, там китайцы отказываются с трекингом слать, и идёт оно гораздо дольше чем с алика.

ЗЗЫ: Через VPN и прокси ясен пень работает, вопрос про алик без VPN, проксей и прочего.

ЗЗЗЫ: Что интересно, через, например, голландский VPN оно почему-то принудительно нифига не включает Dutch и позволяет просто менять язык в выпадалке где страна, язык и валюта, и потом не самовольничает. А с тех IP, которые китайцы считают российскими, язык сменить вообще невозможно.

ЗЗЗЗЫ: Подсети, которые достаточно завернуть в VPN - 198.11.128.0/18 и 95.100.164.0/23. По крайней мере сегодня.

 , ,

Stanson ()

Как ни крути, а глобальное потепление - рулез.

На просторах интеренета попалось некоторое количество интересных вещиц:

Простая и наглядная, сугубо научная иллюстрация - https://climate.nasa.gov/climate_resources/3/graphic-warmer-earth-greener-north/

Канадцы тайно радуются глобальному потеплению: https://www.businessinsider.com/why-canada-secretly-loves-climate-change-2017-5

Холод убивает в 20 раз больше людей чем жара: https://www.sciencedaily.com/releases/2015/05/150520193831.htm

и т.п.

TL;DR: При дальнейшем ковырянии в гугле выяснилось, что глобальное потепление, вызванное парниковым эффектом, если таковое вообще происходит, это, на самом деле вовсе не проблема, а решение. Решение большинства проблем человечества и природы в чистом виде.

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

Повышение средней температуры: Да, ледники тают от этого, но это как раз очень хорошо - больше температура - меньше льда, меньше льда - больше воды, больше воды + больше температура - больше испарение, больше испарение - больше дождей, больше дождей - меньше пустынь. Пустыни и вечная мерзлота становятся пригодными для жизни. Кстати, оказалось что все пустыни на Земле сформировались как раз в наиболее холодные периоды земной истории, а когда на Земле был парниковый эффект и тёплый климат - никаких пустынь вообще не было.

Суммируя парниковый эффект и глобальное потепление им вызванное, получаем примерно следующее: Сейчас среднегодовая температура воздуха в Москве примерно +5 градусов, а сезонный размах колебаний температуры от -20 до +30. Эколожцы стращают, что если среднегодовая температура поднимется на 10 градусов, то все сразу сдохнут летом от жары в +40, гроб, гроб, кладбище. И вот тут-то надо эколожцам по ручонкам-то настучать. Ведь это может случится только в том случае, если орбита Земли станет ближе к Солнцу при сохранении текущего климата, что определённо не наш случай. Нас-то пугают парниковым эффектом. А в случае роста среднегодовой температуры из-за парникового эффекта всё будет совершенно иначе (см. про эоцен ниже) - количество энергии от Солнца не изменится, а средняя температура планеты возрастёт из-за уменьшения градиента температуры от экватора к полюсам. Кроме того, уменьшатся сезонные, и суточные колебания. В итоге получим, например, вместо колебаний -20 - +30 и средней +5, среднюю +15 и размах +5 - +25. Т.е. летом может стать даже немного прохладнее, а вот долбаной зимы уже не будет.

Тропики: «Всё сгорит, будут раскалённые пустыни.» Нет. Для тропиков вообще мало что изменится. Прямо сейчас суточные колебания температуры в тропиках около 10 градусов, а сезонные и того меньше. Потому что в тропиках парниковый эффект уже присутствует по полной программе, просто он локальный. Там где парникового эффекта в этих широтах нету, расположены, внезапно, пустыни, с суточными колебаниями темпартур аж в 50 градусов. Так что если парниковый эффект станет глобальным, то для тропиков почти ничего не изменится. А вот пустыни превратятся в тропики.

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

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

Почему же эколожцы так противятся глобальному потеплению? А вот тут вылезает интересная ситуация. Из-за потепления и смягчения климата огромные, мёртвые нынче территории станут пригодны для жизни, от Таймыра до Антарктиды, включая пустыни у экватора, причём не только для жизни, а для хорошей жизни, с богатым земледелием, отсутствием затрат на обогрев жилищ, добычу пресной воды и т.д. Это может кардинально изменить политический расклад в мире, да и вообще в корне решить кучу проблем, на которых сейчас наживаются транснациональные корпорации.

Для нашей страны глобальное потепление тоже сулит огромные выгоды.

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

Итак, на самом деле эколожцы борются против того, чтобы наша планета действительно стала зелёной. Они против того, чтобы половина Земли перестала быть необитаемой. Они категорически против того, чтобы климат на Земле стал комфортным для людей и природы везде, а не только в местах проживания золотого миллиарда.

В общем, Грета стала выглядеть ещё мерзее.

ЗЫ: Эколожествующей школоте и хипстоте с горящими пердаками, притворно требующей научного пруфца в бессилии что-либо возразить:

https://advances.sciencemag.org/content/5/9/eaax1874

https://www.pnas.org/content/pnas/115/6/1174.full.pdf

https://www.pnas.org/content/pnas/102/42/14964.full.pdf Тут приведены не только среднегодовые темпаратуры эоцена для Европы, но и средние температуры самого холодного и самого жаркого месяца. Можно легко убедиться, что парниковый эффект приводит к резкому снижению сезонных колебаний температуры.

https://es.ucsc.edu/~jzachos/pubs/Tierney_etal_2017_NatGeosci.pdf

Насчёт «затопления». Площадь территории Антарктиды находящейся над уровнем моря в эоцене была на 25% больше нынешней.

https://www.sciencedirect.com/science/article/pii/S0031018219304845

+ ещё масса научных исследований климата эоцена элементарно находящихся в гуглях по запросу «eocene climate». Пруфцов того, что климат станет только лучше от глобального потепления вызванного парниковым эффектом - хоть жопом ешь. Было бы желание с ними ознакомиться.

 , ,

Stanson ()

SATA device MCU

Гугль-фу не помогает найти ни одного даташита на хоть какую-нибудь микруху c SATA PHY используемую в качестве SATA device.

Контроллеры HDD это вообще что-то жутко секретное. Ну может кроме Marvell 88i6745, который немножко поковыряли известные в узких кругах персонажи типа Dejan’а, да и то даже pinout оного в свободном доступе начисто отсутствует.

Контроллеры CD/DVD тоже покрыты мраком. Только какие-то унылые ошмётки маркетоидных листовок.

C SSD контроллерами дела тоже не лучше.

Сосбственно вопрос - встречал ли кто-ниубдь в живой природе даташит на хоть какой-нибудь MCU у которого есть SATA PHY и который предназначен для использования в качестве SATA device?

Самое интересное, что доки на SATA интерфейс в общем-то открыты, есть даже opensource IP для FPGA реализующие SATA PHY. И ведь уже хренова туча лет прошла с момента появления первых SATA девайсов. А вот документацию ни на один мелкопроцессор c SATA device periferal найти не могу.

ЗЫ: Использовать SATA->IDE переходник и вешать обычный MCU на IDE не предлагать. Так неинтересно. :)

 , ,

Stanson ()

Б/У моноблока выбора тред

После многих лет нещадной эксплуататции издох кухонный 19" мегапланшет (eMachines EZ1711 если чо) чинить, если честно, лень, оно того не стоит, там Atom D525 вместо процессора, спасала только дискретная невидия.

Нужно какую-то аналогичную хрень вместо него повесить.

  • Задачи - интернетик с ютубчиком и прочим вебдванолем, кинцо с локалки, ну и всё такое.
  • Размер - максимум 20", лучше 17"-18"
  • Рюшечки - желателен тачскрин, но можно и без него. Крепление стнадарта VESA очень приветствуется.
  • Цена - до ~10 тыр. Б/У разумеется.
  • Работа 24х7 в условиях кухни не должна приводить к проблемам.
  • Бренд и дата выпуска не особо волнуют - лишь бы не разваливался под своим весом, будучи прикреплённым за заднюю крышку. Сгодится даже честный китаец, если подходит под условия.

Из интересного для этих входных данных находятся только HP Pro 3420 с i3. Lenovo сплошь какой-то шлак на целеронах, атомах и днищенских AMD.

Есть забавный вариант - 17" iMac конца 2006 c Core2 Duo T7200, тыщ по 6 рублей. Взять чисто чтобы глумится над забредающими в гости маководами - насверлить дырок под VESA, снести убогую макось, воткнуть 4Gb RAM и накатить, разумеется Слаку. В принципе, по железу оно мало чем от Thinkpad T61 отличается, который используется как гостевой ноутбук и вполне устраивает по скорости для описанных задач, так что и этот iMac тоже устроит.

А больше ничего сколь-нибудь интересного вообще не попадается.

Теоретически, наверно можно и тыщ 15 потратить, если это будет что-то типа Thinkpad T430/T440/T450 в смысле мощности (минимум i5, 16Gb RAM и всё такое), неубиваемости и дубовости, только в виде 17-19" моноблока с тачскрином.

Подкиньте ещё годных вариантов, может есть какой-нибудь Thinkpad Txxx среди моноблоков, заодно просветите насчёт iMac вышеупомянутого - его радеон подцепится всякими vaapi или надо будет шаманить?

 , , , ,

Stanson ()

Невменяемое время инициализации у серверов HP

Тут системдэфаны зачем-то воюют за миллисекунды загрузки, при том что последние поколения серваков стали проходить инициализацию уже даже не за десятки секунд, а за минуты(!) и эта болезнь только прогрессирует с каждой новой моделью.

Например, HP DL360e Gen8 инициализируется аж 3 минуты. Gen9 - до 5 минут. И насколько я понимаю - это вообще никак не лечится.

А что с временем у аналогичной техники IBM например? Тоже жопа полная? IBM x3550 добирается до загрузки меньше чем за минуту. Модельки постарше - уже медленнее. А текущие модели как?

Понятно, что hard reset сервера - дело крайне редкое и в общем-то это скорее эстетическая хотелка, но блин по 5 минут ждать пока эти сраные USB, iLO, SATA controller и Smart Array проинициализируются? Это типа модно так сейчас делать, или это сделано чтобы выглядело поэнтерпрайзнее?

В общем, есть чо серверное, чтобы грузилось не дольше какого-нибудь ThinkPad T440?

ЗЫ: Долбаный энтерпрайз.

 , , ,

Stanson ()

Intel'овские плюшки для слаки

Вот, сваял слакбилд для slackware-current.

https://github.com/stanson-ch/beignet.SlackBuild

Теперь Beignet (Интелевский OpenCL для процессоров Gen3+ c Intel HD Graphics) собирается и работает на current'е.

В гимпе фильтры значительно шустрее работают и всё такоэ.

Beignet был заброшен Интелем в пользу compute-runtime, но последний поддерживает процессоры только начиная с Broadwell. А постоянно меняющийся llvm привёл к тому, что ванильный Beignet не собирается при мало-мальски свежем окружении. В общем, несколько патчей из дебиана, парочка из арча, немножко своего - и всё снова заработало.

Обновил для llvm11. Вроде работает. Задрали уже обратную совместимость ломать.

 , , , ,

Stanson ()

Однокристалки на RISC-V теперь и по $1.27

Наигравшись с клонированием STM32 GigaDevice выпустила линейку однокристалок GD32V с ядром RISC-V

Для Ъ:

  • Core – GD32VF103 RISC-V “Bumblebee Core” @ 108 MHz
  • Memory – 8KB to 32KB SRAM
  • Storage – 16KB to 128KB flash
  • Peripherals – USB OTG and CAN 2.0B
  • I/O – 3.3V, 5V tolerant
  • Supply Voltage – 2.6 to 3.6V
  • Package – QFN36, LQFP48, LQFP64, and LQFP100 packages

Годная замена STM32F103 за вменяемую цену.

Официальная девборда - $11
GD32VF103TBU6 MCU (QFN36, 64 kB Flash) по $1.27 поштучно, $0.95 в заказе >3000шт.
Официальная цена аналогичного STM32F103T8U6 (QFN36, 64kB Flash) - $2.0561 в партии 10000шт, если чо.

Скоро наверно и на алиэкспрессе какой-нибудь вариант девборды в виде BluePill появится.

Подробнее тут: https://hackaday.com/2019/08/27/gigadevice-releasing-risc-v-mcus-and-developm...

Английский datasheet: http://dl.sipeed.com/LONGAN/Nano/DOC/GD32VF103_Datasheet_Rev1.0.pdf

Английский manual: http://dl.sipeed.com/LONGAN/Nano/DOC/GD32VF103_User_Manual_EN_V1.0.pdf

И да, судя по даташиту оно pin-to-pin compatible с STM32F103

UPD: весь тулчейн и всё такое (openocd, newlib, доки ...) они таки выложили на https://github.com/riscv-mcu

UPD2: Хо-хо, а вот и библиотечка с примерами подъехала https://github.com/riscv-mcu/GD32VF103_Firmware_Library

UPD3: Охренеть, они ещё и libopencm3 запилили - https://github.com/riscv-mcu/libopenmcu

 

Stanson ()

Расставить все точки над i

Может всё-же я дождусь какого-либо официального ответа на предмет списка запрещённых на ЛОРе мировоззрений, обладатели которых будут забанены или ограничены в правах?

Почему такой простой вопрос так старательно обходится модераторским составом? Ведь в правилах есть список того, что на ЛОР запрещено, что мешает добавить туда же пунктик о запрещённых/подлежащих ограничениям мировоззрениях и политических, сексуальных, культурных и прочих пристрастиях?

Всякие гуманитарные жоповерчения типа : Какое вам дело до того, что пишут в никах другие? (комментарий) вообще-то недостойны технического форума, ибо неконкретны, некорректны и совершенно нелогичны.

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

Вот объясните мне, в чём проблема? Ну нравятся пассажиру неонацистские лозунги и свастика, что с того? В правилах на это никаких ограничений нету, там не написано, что неонацистам нельзя на ЛОР.

А если бы у пассажира был ник с каким-нибудь 69 и радуга на аватарке (или там какие-нибудь иезуитские/коммунистические/ЛММшные/whatever циферки и символы) - его бы так же обвинили в наличии неких взглядов или шланговании и на этом основании забанили? Очевидно нет.

Следовательно, причина бана заключается исключительно и только в том, что наличие определённых взглядов запрещено на ЛОР.

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

Де-факто, есть набор определённых взглядов/предпочтений, носителям которых (или тем, кто косит под таких носителей с целью троллинга) на ЛОР не рады.

Собственно непонятно, что мешает из де-факто сделать де-юре и раз и навсегда сделать забанивание носителей запрещённых взглядов (или троллей под них косящих) простым и рутинным процессом, а не драмой с многодневными флеймами и срачами?

Неонацист/мормон/любитель_свинины/вегетарианец ? Всё, забанен по пункту 14.88 правил.

В общем, огласите весь список, пожалуйста.

 

Stanson ()

Вопрос для математиков про 2D деформации.

Есть некая «правильная» сетка ограниченного размера из двумерных точек с координатами x1,у1 равномерно рапределённых в некоем прямоугольнике.

И есть «неправильная», «деформированная», «искажённая» сетка с теми же самыми точками, но с координатами x2,y2.

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

Эта деформация постоянна и не изменяется. Задача состит в том, чтобы имея эти 2 набора данных найти некую функцию (набор функций) которая позволит из произвольных «искажённых» координат x2,y2 в этом прямоугольнике получать «правильные» координаты x1,y1. Т.е. надо найти математическое выражение этой деформации.

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

Собственно вопрос в том, как эта задача в общем виде называется у математиков. Желательно по-английски. Всякое deconvolution как-то выносит в основном на что-то типа этого http://www.vassg.hu/pdf/vass_gg_2003_lo.pdf заточенное на заведомо известную модель искажений. Если модель заранее известна, то решение и так понятно как найти. А вот совсем общее решение, аналогичное какой-нибудь 1D/2D polynomial regression для произвольного набора экспериментальных данных что-то никак не находится.

Сейчас я, например, беру каждую точку и её соседей и апроксимирую тем или иным образом искажение для каждой точки. Для произвольной точки x2,y2 нахожу ближайшую из калибровочного набора и использую вычисленную для неё апроксимацию чтобы получить искомые «недеформированные» x1,x2. Может быть это можно делать как-то оптом для всего набора точек сразу?.

 , ,

Stanson ()

аппроксимация полиномом 3-й степени, добавить монотонность

Не могу ничего толкового найти в инетах и книжках.

Дело в следующем:

Есть некие реальные измерения, представленные набором данных x0,x1,x2...xN и y0,y1,y2...yN. Ближе к x=0 зависимость почти линейная, потом y начинает насыщаться.

Это дело аппроксимируется полиномом 3-й степени (y = a0 + a1*x + a2*x*x + a3*x*x*x) методом наименьших квадратов посредством QR-разложения (LSE polynomial fit using QR decomposition). В результате находятся коэффициэнты полинома a1, a2, a3. Т.к. полином должен проходить через начало координат, то a0 = 0.

Всё отлично работает и в общем-то даже понятно как и почему это работает.

Но есть проблема - для данной задачи полином всегда должен быть монотонно возрастающим (без перегибов) на участке от 0 до xN. Вот тут-то внезапно обнаружились грабли. Чтение литературы разъяснило, что в LSE-решалку надо всего-навсего добавить constraint в котором указать что производная полинома для используемого диапазона x должна быть больше нуля. Но, сцуко, я нигде не нашёл _как_конкретно_ это сделать, в частности, для решалки LSE через QR (да пофиг, хоть SVD, хоть LU).

В принципе, я догадываюсь, что в матрицу, которая, собственно, разлагается этим самым QR-разложением, надо добавить дополнительных строчек и в вектор y добавить соответствующих им значений. Но вот что это должны быть за строчки - я в понятном виде нигде не нашёл. А неравенство (например, «для каждого x из набора данных производная полинома должна быть > 0») я не представляю как и куда можно добавить в эту straight-forward решалку.

Есть кто тут сведущий в матане, способный ткнуть меня в литературу, где описание решения этой задачи не заканчивается словами «just constraint solver to f'(x) >= 0», а есть описание того как именно это cделать. И без ссылок на всякие сраные Матлабы (use MATLAB CONSTR function with constraints defined earlier) и пр. Типичный пример - http://ws680.nist.gov/publication/get_pdf.cfm?pub_id=17206 , графички там в конце похожи на то, что мне нужно.

Ну или хотя бы подскажите что надо искать.

 , ,

Stanson ()

Firefox Quantum, будь он проклят! (частично решено)

Уже полчаса потратил, не могу решить проблему:

В локалке стоит сервак с апачем, на котором настроены прокси с кэшем на fonts.googleapis.com (и прочие гуглопомойки типа ajax, fonts.gstatic и пр.). DNS на fonts.googleapis.com (и пр.) отдаёт локальый адрес этого сервака. Разумеется для https сертификат самоподписанный. Всё чудеснейшим образом работает везде, кроме этого нового квантума.

Дык вот, этот сраный квантум теперь, скотина, не даёт сделать исключение для https://fonts.googleapis.com, Высирает такое:

This site uses HTTP Strict Transport Security (HSTS) to specify that Firefox may only connect to it securely. As a result, it is not possible to add an exception for this certificate.

При нажатии Advanced... никаких кнопок Add Exception, только высер про

fonts.googleapis.com uses an invalid security certificate. The certificate is not trusted because it is self-signed. Error code: SEC_ERROR_UNKNOWN_ISSUER

Ну ладно, порылся в говнах фаерфоксовых, может где случайно затесался старый сертификат или упоминание что HSTS на fonts.googleapis.com есть, так ведь нет же - нигде ничего.

Добавил принудительно сертификат через Preferences->Privacy&Security->... Этой твари похер. Сделал новый профиль - похер.

Где надо палочкой потыкать, чтобы квантум сожрал самоподписанный сертификат для fonts.googleapis.com и больше никогда не жужжал?

Ну и вообще - Это чо ваще за херня? Мазилла совсем с дубу рухнула, что-ли? Теперь локальный кэш нельзя людям использовать, что-ли? При этом CNNIC и другие СА спалившиеся на поддельных сертификатах до сих пор в списке доверенных, так что это явно не забота о безопасности пользователей.

В общем, что делать-то? Уж очень не хочется делать CA и заново все сертификаты генерить и подписывать, а потом по всем железкам CA в доверенные запихивать.

Хоть и с CA но таки победил. Правда с CA наткнулся на другую засаду:

Есть в about:config security.cert_pinning.enforcement_level:

  • Pinning disabled
  • Allow User MITM (pinning not enforced if the trust anchor is a user inserted CA, default)
  • Strict. Pinning is always enforced.
  • Enforce test mode.

Соответственно, надо поставить 1, это, кстати дефолтное значение. Зачем я его менял - хрен знает, вроде когда-то пытался заставить фуррифокс орать в том числе и на смену одного «валидного» сертификата на другой, может тогда и поставил Strict.

Однако это никак не отменяет гнидства на предмет self-signed certificates. Фаерфокс всё равно отказывается дать возможность принимать self-signed сертификаты если есть HSTS или HPKP. Разницы между self-signed и Trusted CA signed вообще никакой с точки зрения безопасности - я точно так же могу и CA завести, просто возни больше на совершенно пустом месте, Причём, в отличии от самоподписанного сертификата, теперь при смене сертификатов, в том числе и на подписанные коммерческими CA эта сволочь вообще даже не пикает. На самоподписанный оно хотя бы орало, что сертификат другой. А тут - выпустит CNNIC сертификат для гуглотвиттеров и пейсбукобанков и никто даже не заметит, что сертификат подменили.

ЗЫ: Вся эта херня с «доверенными» сертификаторами должна быть уничтожена на корню. Никто ведь не знает, сколько и каких левых сертификатов эти засранцы на самом деле навыпускали для себя, для спецслужб, для тех кто заплатит и т.п. Способа проверить это у пользователя нет вообще, сертификаторы ни перед кем не отчитываются, и в общем-то ни за что не отвечают. Даже когда их ловят за руку (например CNNIC - доказанный случай) никто и не думает выкидывать их сертификаты из доверенных, «как же, всекитайский государственный сертификатор, как же мы его выкинем?? Ну допустил выдачу левых сертификатов - делов-то, подумаешь.». В общем, протухла вся эта сраная система.

 

Stanson ()

Сверхбыстрые тупые МК

Раньше был, например, 4 МГц PIC16F84 от Microchip, а маньяки из Parallax выпускали аналогичный SX28 но работавший на диких для того времени 75МГц.

А сейчас есть чо? Чтоб тупое (достаточно уровня AVR/PIC16), небольшое и работающее хотя бы на 3ГГц например.

 

Stanson ()

lxc + qemu-arm + rootfs

Достаточно давно вместо sandbox и т.п. использую для сборки и отладки всяких штуковин для ARM под x86 lxc контейнер с армовой rootfs и qemu собранный с --target-list=arm-linux-user (user space emulator) чтобы запускать на x86 ядре arm'овые бинарники через binfmt_misc. Пока endianness хоста и эмулируемой системы совпадает, а сисколлы остаются неизменными между версиями ядра хоста и ядра под которое рассчитана армовая rootfs, всё работает как часики.

В контейнере запускается шелл, типа

lxc-execute -n sb -f /var/lib/lxc/sb/config — /bin/su - stanson — --login

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

Изнутри выглядит так:

stanson@sb:~$ ps -eo pid,vsz,args
  PID    VSZ COMMAND
    1   1008 /init.lxc.static — /bin/su - stanson — --login
    4  73648 /usr/bin/qemu-arm /bin/bash --login
  130  60412 /bin/ps -eo pid,vsz,args

Фига себе размерчик у bash и ps, не правда ли? Дело в том, что на каждый запущенный армобинарник запускается qemu. Если, например, запустить man bash в контейнере и посмотреть «снаружи», то будет так:

stanson@amilo:~$ ps -eo lxc,pid,vsz,args --sort lxc | grep '^sb'
sb       21030   1008 /init.lxc.static — /bin/su - stanson — --login
sb       21033  73648 /usr/bin/qemu-arm /bin/bash --login
sb       21073  61436 /usr/bin/qemu-arm /usr/bin/man bash
sb       21090  60284 /usr/bin/qemu-arm /usr/bin/pager -s

Вот откуда по 60-70 мегов на процесс. Сам qemu-arm невелик,

stanson@amilo:~$ ls -la `which qemu-arm`
-rwxr-xr-x 1 root root 3205596 Mar 21 19:29 /usr/bin/qemu-arm*
но памяти жрёт прилично, насколько я понял - из-за pre-allocation

Собственно вопросы

1. - есть ли более оптимальный способ делать то же самое?

2. - можно ли заставить qemu не заниматься pre-allocation?

Пока сам не копался в qemu, может кто уже решил этот вопрос?

 , ,

Stanson ()

Есть простой способ запретить всякие onunload и пр. для JS?

Есть ли простой способ или совсем мелкий аддон позволяющий полностью выключать любые ненужные события в жабоскрипте, особенно такие абсолютно ненужные и вредные вещи как onunload, onbeforeunload и пр.?

Знаю что через greasemonkey можно тупо window.onunload = null, но не хочется ставить его ради пары строк.

Может просто в about:config чего можно добавить?

 , ,

Stanson ()

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